@@ -94,23 +94,10 @@ int DeviceKey::generate_derived_key(const unsigned char *salt, size_t isalt_size
94
94
95
95
// First try to read the key from KVStore
96
96
int ret = read_key_from_kvstore (key_buff, actual_size);
97
- if (DEVICEKEY_SUCCESS != ret && DEVICEKEY_NOT_FOUND != ret ) {
97
+ if (DEVICEKEY_SUCCESS != ret) {
98
98
return ret;
99
99
}
100
100
101
- // If the key was not found in KVStore we will create it by using random generation and then save it to KVStore
102
- if (DEVICEKEY_NOT_FOUND == ret) {
103
- ret = generate_key_by_random (key_buff, actual_size);
104
- if (DEVICEKEY_SUCCESS != ret) {
105
- return ret;
106
- }
107
-
108
- ret = device_inject_root_of_trust (key_buff, actual_size);
109
- if (DEVICEKEY_SUCCESS != ret) {
110
- return ret;
111
- }
112
- }
113
-
114
101
ret = get_derived_key (key_buff, actual_size, salt, isalt_size, output, ikey_type);
115
102
return ret;
116
103
}
@@ -259,22 +246,22 @@ int DeviceKey::get_derived_key(uint32_t *ikey_buff, size_t ikey_size, const unsi
259
246
return DEVICEKEY_SUCCESS;
260
247
}
261
248
262
- int DeviceKey::generate_key_by_random ( uint32_t *output, size_t size )
249
+ int DeviceKey::generate_root_of_trust ( )
263
250
{
264
251
int ret = DEVICEKEY_GENERATE_RANDOM_ERROR;
252
+ uint32_t key_buff[DEVICE_KEY_32BYTE / sizeof (uint32_t )];
253
+ size_t actual_size = DEVICE_KEY_32BYTE;
265
254
266
- if (DEVICE_KEY_16BYTE > size) {
267
- return DEVICEKEY_BUFFER_TOO_SMALL;
268
- } else if (DEVICE_KEY_16BYTE != size && DEVICE_KEY_32BYTE != size) {
269
- return DEVICEKEY_INVALID_PARAM;
255
+ if (read_key_from_kvstore (key_buff, actual_size) == DEVICEKEY_SUCCESS) {
256
+ return DEVICEKEY_ALREADY_EXIST;
270
257
}
271
258
272
259
#if defined(DEVICE_TRNG) || defined(MBEDTLS_ENTROPY_NV_SEED) || defined(MBEDTLS_ENTROPY_HARDWARE_ALT)
273
260
mbedtls_entropy_context *entropy = new mbedtls_entropy_context;
274
261
mbedtls_entropy_init (entropy);
275
- memset (output , 0 , size );
262
+ memset (key_buff , 0 , actual_size );
276
263
277
- ret = mbedtls_entropy_func (entropy, (unsigned char *)output, size );
264
+ ret = mbedtls_entropy_func (entropy, (unsigned char *)key_buff, actual_size );
278
265
if (ret != MBED_SUCCESS) {
279
266
ret = DEVICEKEY_GENERATE_RANDOM_ERROR;
280
267
} else {
@@ -283,7 +270,7 @@ int DeviceKey::generate_key_by_random(uint32_t *output, size_t size)
283
270
284
271
mbedtls_entropy_free (entropy);
285
272
delete entropy;
286
-
273
+ ret = device_inject_root_of_trust (key_buff, actual_size);
287
274
#endif
288
275
289
276
return ret;
0 commit comments