@@ -245,7 +245,7 @@ int DeviceKey::get_derived_key(uint32_t *ikey_buff, size_t ikey_size, const unsi
245
245
return DEVICEKEY_SUCCESS;
246
246
}
247
247
248
- int DeviceKey::generate_root_of_trust ()
248
+ int DeviceKey::generate_root_of_trust (size_t key_size )
249
249
{
250
250
int ret = DEVICEKEY_GENERATE_RANDOM_ERROR;
251
251
uint32_t key_buff[DEVICE_KEY_32BYTE / sizeof (uint32_t )];
@@ -255,12 +255,16 @@ int DeviceKey::generate_root_of_trust()
255
255
return DEVICEKEY_ALREADY_EXIST;
256
256
}
257
257
258
+ if (key_size != DEVICE_KEY_32BYTE && key_size != DEVICE_KEY_16BYTE) {
259
+ return DEVICEKEY_INVALID_KEY_SIZE;
260
+ }
261
+
258
262
#if defined(DEVICE_TRNG) || defined(MBEDTLS_ENTROPY_NV_SEED) || defined(MBEDTLS_ENTROPY_HARDWARE_ALT)
259
263
mbedtls_entropy_context *entropy = new mbedtls_entropy_context;
260
264
mbedtls_entropy_init (entropy);
261
- memset (key_buff, 0 , actual_size );
265
+ memset (key_buff, 0 , key_size );
262
266
263
- ret = mbedtls_entropy_func (entropy, (unsigned char *)key_buff, actual_size );
267
+ ret = mbedtls_entropy_func (entropy, (unsigned char *)key_buff, key_size );
264
268
if (ret != MBED_SUCCESS) {
265
269
ret = DEVICEKEY_GENERATE_RANDOM_ERROR;
266
270
} else {
@@ -271,7 +275,7 @@ int DeviceKey::generate_root_of_trust()
271
275
delete entropy;
272
276
273
277
if (ret == DEVICEKEY_SUCCESS) {
274
- ret = device_inject_root_of_trust (key_buff, actual_size );
278
+ ret = device_inject_root_of_trust (key_buff, key_size );
275
279
}
276
280
#endif
277
281
0 commit comments