@@ -245,7 +245,7 @@ int DeviceKey::get_derived_key(uint32_t *ikey_buff, size_t ikey_size, const unsi
245245 return DEVICEKEY_SUCCESS;
246246}
247247
248- int DeviceKey::generate_root_of_trust ()
248+ int DeviceKey::generate_root_of_trust (size_t key_size )
249249{
250250 int ret = DEVICEKEY_GENERATE_RANDOM_ERROR;
251251 uint32_t key_buff[DEVICE_KEY_32BYTE / sizeof (uint32_t )];
@@ -255,12 +255,16 @@ int DeviceKey::generate_root_of_trust()
255255 return DEVICEKEY_ALREADY_EXIST;
256256 }
257257
258+ if (key_size != DEVICE_KEY_32BYTE && key_size != DEVICE_KEY_16BYTE) {
259+ return DEVICEKEY_INVALID_KEY_SIZE;
260+ }
261+
258262#if defined(DEVICE_TRNG) || defined(MBEDTLS_ENTROPY_NV_SEED) || defined(MBEDTLS_ENTROPY_HARDWARE_ALT)
259263 mbedtls_entropy_context *entropy = new mbedtls_entropy_context;
260264 mbedtls_entropy_init (entropy);
261- memset (key_buff, 0 , actual_size );
265+ memset (key_buff, 0 , key_size );
262266
263- ret = mbedtls_entropy_func (entropy, (unsigned char *)key_buff, actual_size );
267+ ret = mbedtls_entropy_func (entropy, (unsigned char *)key_buff, key_size );
264268 if (ret != MBED_SUCCESS) {
265269 ret = DEVICEKEY_GENERATE_RANDOM_ERROR;
266270 } else {
@@ -271,7 +275,7 @@ int DeviceKey::generate_root_of_trust()
271275 delete entropy;
272276
273277 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 );
275279 }
276280#endif
277281
0 commit comments