|
17 | 17 |
|
18 | 18 | /* Includes ------------------------------------------------------------------*/ |
19 | 19 |
|
20 | | -#include <api/stse_asymmetric_keys_management.h> |
| 20 | +#include "api/stse_asymmetric_keys_management.h" |
21 | 21 |
|
22 | 22 | /* Static functions declaration ----------------------------------------------*/ |
23 | 23 |
|
@@ -164,3 +164,66 @@ stse_ReturnCode_t stse_write_generic_ecc_public_key( |
164 | 164 |
|
165 | 165 | return ret; |
166 | 166 | } |
| 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 | +} |
0 commit comments