Skip to content

Commit 926a019

Browse files
TofMassilia13320Grom-
authored andcommitted
[api/services] Move signature generation for authenticating an off-chip entity with its public key in a generic public key slot
1 parent 8c2cdae commit 926a019

9 files changed

Lines changed: 101 additions & 87 deletions

api/stse_asymmetric_keys_management.c

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
/* Includes ------------------------------------------------------------------*/
1919

20-
#include <api/stse_asymmetric_keys_management.h>
20+
#include "api/stse_asymmetric_keys_management.h"
2121

2222
/* Static functions declaration ----------------------------------------------*/
2323

@@ -164,3 +164,66 @@ stse_ReturnCode_t stse_write_generic_ecc_public_key(
164164

165165
return ret;
166166
}
167+
168+
stse_ReturnCode_t stse_sign_for_generic_public_key_slot(
169+
stse_Handler_t *pSTSE,
170+
stse_ecc_key_type_t private_key_type,
171+
PLAT_UI8 *pPrivate_key,
172+
stse_hash_algorithm_t hash_algo,
173+
PLAT_UI16 payload_length,
174+
PLAT_UI8 *pPayload,
175+
PLAT_UI8 *pSignature) {
176+
(void)pSTSE;
177+
#if defined(STSE_CONF_USE_HOST_KEY_PROVISIONING_WRAPPED_AUTHENTICATED) || \
178+
defined(STSE_CONF_USE_SYMMETRIC_KEY_ESTABLISHMENT_AUTHENTICATED) || \
179+
defined(STSE_CONF_USE_SYMMETRIC_KEY_PROVISIONING_WRAPPED_AUTHENTICATED)
180+
181+
stse_ReturnCode_t ret;
182+
PLAT_UI32 hash_length = stsafea_hash_info_table[hash_algo].length;
183+
PLAT_UI8 hash_data[hash_length];
184+
185+
if (pPrivate_key == NULL || pPayload == NULL || pSignature == NULL ||
186+
private_key_type == STSE_ECC_KT_INVALID || hash_algo == STSE_SHA_INVALID) {
187+
return STSE_SERVICE_INVALID_PARAMETER;
188+
}
189+
190+
#ifdef STSE_CONF_ECC_EDWARD_25519
191+
if (private_key_type != STSE_ECC_KT_ED25519)
192+
#endif /* STSE_CONF_ECC_EDWARD_25519 */
193+
{
194+
/* - Hash the payload */
195+
ret = stse_platform_hash_compute(
196+
hash_algo,
197+
pPayload, payload_length,
198+
hash_data, &hash_length);
199+
200+
if (ret != STSE_OK) {
201+
return (ret);
202+
}
203+
#ifdef STSE_CONF_ECC_EDWARD_25519
204+
}
205+
#endif /* STSE_CONF_ECC_EDWARD_25519 */
206+
207+
/* - Sign the hash of concatenation of pub keys */
208+
ret = stse_platform_ecc_sign(
209+
private_key_type,
210+
pPrivate_key,
211+
#ifdef STSE_CONF_ECC_EDWARD_25519
212+
(private_key_type == STSE_ECC_KT_ED25519) ? pPayload : hash_data,
213+
#else
214+
hash_length,
215+
#endif
216+
#ifdef STSE_CONF_ECC_EDWARD_25519
217+
(private_key_type == STSE_ECC_KT_ED25519) ? payload_length : hash_length,
218+
#else
219+
hash_length,
220+
#endif
221+
pSignature);
222+
223+
return (ret);
224+
#else
225+
return STSE_SERVICE_INVALID_CONFIGURATION;
226+
#endif /* STSE_CONF_USE_HOST_KEY_PROVISIONING_WRAPPED_AUTHENTICATED ||
227+
STSE_CONF_USE_SYMMETRIC_KEY_ESTABLISHMENT_AUTHENTICATED ||
228+
STSE_CONF_USE_SYMMETRIC_KEY_PROVISIONING_WRAPPED_AUTHENTICATED */
229+
}

api/stse_asymmetric_keys_management.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,28 @@ stse_ReturnCode_t stse_write_generic_ecc_public_key(
129129
stse_ecc_key_type_t key_type,
130130
PLAT_UI8 *pPublic_key);
131131

132+
/**
133+
* \brief Generate signature for authenticating an off-chip entity
134+
* \details This API generated signature for authenticating an off-chip entity with its public key in a generic public key slot
135+
* \param[in] pSTSE Pointer to STSE Handler
136+
* \param[in] private_key_type Private key type used for the signature
137+
* \param[in] pPrivate_key Private key buffer used for the signature
138+
* \param[in] hash_algo Hashing algorithm used for the signature
139+
* \param[in] payload_length Payload length to be signed
140+
* \param[in] pPayload Payload buffer to be signed
141+
* \param[out] pSignature Pointer to buffer containing signature
142+
* \return \ref STSE_OK on success ; \ref stse_ReturnCode_t error code otherwise
143+
* \details \include{doc} stse_write_generic_ecc_public_key.dox
144+
*/
145+
stse_ReturnCode_t stse_sign_for_generic_public_key_slot(
146+
stse_Handler_t *pSTSE,
147+
stse_ecc_key_type_t private_key_type,
148+
PLAT_UI8 *pPrivate_key,
149+
stse_hash_algorithm_t hash_algo,
150+
PLAT_UI16 payload_length,
151+
PLAT_UI8 *pPayload,
152+
PLAT_UI8 *pSignature);
153+
132154
/** \}*/
133155

134156
#endif /*STSE_ASYMMETRIC_KEY_CRYPTO_H*/

api/stse_data_storage.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
/* Includes ------------------------------------------------------------------*/
1919

20-
#include <api/stse_data_storage.h>
20+
#include "api/stse_data_storage.h"
2121
#include <string.h>
2222

2323
stse_ReturnCode_t stse_data_storage_get_total_partition_count(

api/stse_device_authentication.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
/* Includes ------------------------------------------------------------------*/
1919

20-
#include <api/stse_device_authentication.h>
21-
#include <api/stse_ecc.h>
20+
#include "api/stse_device_authentication.h"
21+
#include "api/stse_ecc.h"
2222

2323
#include "certificate/stse_certificate.h"
2424
#include "certificate/stse_certificate_crypto.h"

api/stse_symmetric_keys_management.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
/* Includes ------------------------------------------------------------------*/
1919

2020
#include "api/stse_symmetric_keys_management.h"
21+
#include "api/stse_asymmetric_keys_management.h"
2122
#include "services/stsafea/stsafea_public_key_slots.h"
2223

2324
#define STSAFEA_HOST_KEY_WRAPPING_AUTHENTICATION_TAG_LENGTH STSE_KEK_ENVELOPE_MAC_SIZE
@@ -291,7 +292,7 @@ static stse_ReturnCode_t stse_start_volatile_KEK_session_authenticated(
291292
#ifdef STSE_CONF_ECC_CURVE_25519
292293
}
293294
#endif /* STSE_CONF_ECC_CURVE_25519 */
294-
ret = stsafea_sign_for_generic_public_key_slot(
295+
ret = stse_sign_for_generic_public_key_slot(
295296
pSTSE,
296297
private_ecc_key_type, /* Private key used to sign */
297298
private_key, /* Private key length */
@@ -1026,13 +1027,13 @@ stse_ReturnCode_t stse_establish_host_key_authenticated(
10261027
memset(stsafe_ecdhe_public_key, 0, sizeof(stsafe_ecdhe_public_key));
10271028

10281029
/* Generate signature */
1029-
ret = stsafea_sign_for_generic_public_key_slot(pSTSE,
1030-
tbs_key_type,
1031-
tbs_private_key,
1032-
tbs_hash_algo,
1033-
tbs_length,
1034-
pTBS,
1035-
signature);
1030+
ret = stse_sign_for_generic_public_key_slot(pSTSE,
1031+
tbs_key_type,
1032+
tbs_private_key,
1033+
tbs_hash_algo,
1034+
tbs_length,
1035+
pTBS,
1036+
signature);
10361037
if (ret != STSE_OK) {
10371038
memset(okm_buffer, 0, sizeof(okm_buffer));
10381039
return ret;
@@ -1598,7 +1599,7 @@ stse_ReturnCode_t stse_establish_symmetric_key_authenticated(
15981599
}
15991600
#endif /* STSE_CONF_ECC_CURVE_25519 */
16001601

1601-
ret = stsafea_sign_for_generic_public_key_slot(
1602+
ret = stse_sign_for_generic_public_key_slot(
16021603
pSTSE,
16031604
private_ecc_key_type, /* Private key used to sign */
16041605
private_key, /* Private key length */

core/stse_session.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "core/stse_device.h"
2+
#include "core/stse_platform.h"
23
#include "core/stse_return_codes.h"
3-
#include <core/stse_platform.h>
44

55
/* Private variables ---------------------------------------------------------*/
66

services/stsafea/stsafea_asymmetric_key_slots.c

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -284,67 +284,4 @@ stse_ReturnCode_t stsafea_generate_ECDHE_key_pair(
284284
&RspFrame);
285285
}
286286

287-
stse_ReturnCode_t stsafea_sign_for_generic_public_key_slot(
288-
stse_Handler_t *pSTSE,
289-
stse_ecc_key_type_t private_key_type,
290-
PLAT_UI8 *pPrivate_key,
291-
stse_hash_algorithm_t hash_algo,
292-
PLAT_UI16 payload_length,
293-
PLAT_UI8 *pPayload,
294-
PLAT_UI8 *pSignature) {
295-
(void)pSTSE;
296-
#if defined(STSE_CONF_USE_HOST_KEY_PROVISIONING_WRAPPED_AUTHENTICATED) || \
297-
defined(STSE_CONF_USE_SYMMETRIC_KEY_ESTABLISHMENT_AUTHENTICATED) || \
298-
defined(STSE_CONF_USE_SYMMETRIC_KEY_PROVISIONING_WRAPPED_AUTHENTICATED)
299-
300-
stse_ReturnCode_t ret;
301-
PLAT_UI32 hash_length = stsafea_hash_info_table[hash_algo].length;
302-
PLAT_UI8 hash_data[hash_length];
303-
304-
if (pPrivate_key == NULL || pPayload == NULL || pSignature == NULL ||
305-
private_key_type == STSE_ECC_KT_INVALID || hash_algo == STSE_SHA_INVALID) {
306-
return STSE_SERVICE_INVALID_PARAMETER;
307-
}
308-
309-
#ifdef STSE_CONF_ECC_EDWARD_25519
310-
if (private_key_type != STSE_ECC_KT_ED25519) {
311-
#endif /* STSE_CONF_ECC_EDWARD_25519 */
312-
/* - Hash the payload */
313-
ret = stse_platform_hash_compute(
314-
hash_algo,
315-
pPayload, payload_length,
316-
hash_data, &hash_length);
317-
318-
if (ret != STSE_OK) {
319-
return (ret);
320-
}
321-
#ifdef STSE_CONF_ECC_EDWARD_25519
322-
}
323-
#endif /* STSE_CONF_ECC_EDWARD_25519 */
324-
325-
/* - Sign the hash of concatenation of pub keys */
326-
#ifdef STSE_CONF_ECC_EDWARD_25519
327-
ret = stse_platform_ecc_sign(
328-
private_key_type,
329-
pPrivate_key,
330-
(private_key_type == STSE_ECC_KT_ED25519) ? pPayload : hash_data,
331-
(private_key_type == STSE_ECC_KT_ED25519) ? payload_length : hash_length,
332-
pSignature);
333-
#else
334-
ret = stse_platform_ecc_sign(
335-
private_key_type,
336-
pPrivate_key,
337-
hash_data,
338-
hash_length,
339-
pSignature);
340-
#endif /* STSE_CONF_ECC_EDWARD_25519 */
341-
342-
return (ret);
343-
#else
344-
return STSE_SERVICE_INVALID_CONFIGURATION;
345-
#endif /* STSE_CONF_USE_HOST_KEY_PROVISIONING_WRAPPED_AUTHENTICATED ||
346-
STSE_CONF_USE_SYMMETRIC_KEY_ESTABLISHMENT_AUTHENTICATED ||
347-
STSE_CONF_USE_SYMMETRIC_KEY_PROVISIONING_WRAPPED_AUTHENTICATED */
348-
}
349-
350287
#endif /* STSE_CONF_STSAFE_A_SUPPORT */

services/stsafea/stsafea_asymmetric_key_slots.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,6 @@ stse_ReturnCode_t stsafea_generate_ECDHE_key_pair(
108108
stse_ecc_key_type_t key_type,
109109
PLAT_UI8 *pPublic_key);
110110

111-
stse_ReturnCode_t stsafea_sign_for_generic_public_key_slot(
112-
stse_Handler_t *pSTSE,
113-
stse_ecc_key_type_t private_key_type,
114-
PLAT_UI8 *pPrivate_key,
115-
stse_hash_algorithm_t hash_algo,
116-
PLAT_UI16 payload_length,
117-
PLAT_UI8 *pPayload,
118-
PLAT_UI8 *pSignature);
119-
120111
/** \}*/
121112

122113
#endif /*STSAFEA_ASYMMETRIC_KEY_SLOTS_H*/

services/stsafea/stsafea_patch.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
******************************************************************************
1717
*/
1818

19-
#include <services/stsafea/stsafea_patch.h>
19+
#include "services/stsafea/stsafea_patch.h"
2020

2121
#ifdef STSE_CONF_STSAFE_A_SUPPORT
2222

0 commit comments

Comments
 (0)