@@ -44,27 +44,37 @@ ESP_STATIC_ASSERT(sizeof(esp_key_mgr_huk_info_t) == sizeof(struct huk_info), "Si
4444static void esp_key_mgr_acquire_key_lock (esp_key_mgr_key_type_t key_type )
4545{
4646 switch (key_type ) {
47- case ESP_KEY_MGR_ECDSA_KEY :
47+ case ESP_KEY_MGR_ECDSA_192_KEY :
48+ case ESP_KEY_MGR_ECDSA_256_KEY :
49+ case ESP_KEY_MGR_ECDSA_384_KEY :
4850 _lock_acquire (& s_key_mgr_ecdsa_key_lock );
4951 break ;
5052 case ESP_KEY_MGR_XTS_AES_128_KEY :
5153 case ESP_KEY_MGR_XTS_AES_256_KEY :
5254 _lock_acquire (& s_key_mgr_xts_aes_key_lock );
5355 break ;
56+ default :
57+ ESP_LOGE (TAG , "Invalid key type" );
58+ break ;
5459 }
5560 ESP_LOGV (TAG , "Key lock acquired for key type %d" , key_type );
5661}
5762
5863static void esp_key_mgr_release_key_lock (esp_key_mgr_key_type_t key_type )
5964{
6065 switch (key_type ) {
61- case ESP_KEY_MGR_ECDSA_KEY :
66+ case ESP_KEY_MGR_ECDSA_192_KEY :
67+ case ESP_KEY_MGR_ECDSA_256_KEY :
68+ case ESP_KEY_MGR_ECDSA_384_KEY :
6269 _lock_release (& s_key_mgr_ecdsa_key_lock );
6370 break ;
6471 case ESP_KEY_MGR_XTS_AES_128_KEY :
6572 case ESP_KEY_MGR_XTS_AES_256_KEY :
6673 _lock_release (& s_key_mgr_xts_aes_key_lock );
6774 break ;
75+ default :
76+ ESP_LOGE (TAG , "Invalid key type" );
77+ break ;
6878 }
6979 ESP_LOGV (TAG , "Key lock released for key type %d" , key_type );
7080}
@@ -223,7 +233,7 @@ static esp_err_t key_mgr_deploy_key_aes_mode(aes_deploy_config_t *config)
223233 if (!key_recovery_info ) {
224234 return ESP_ERR_NO_MEM ;
225235 }
226- // Set key purpose (XTS/ECDSA)
236+ // Set key purpose
227237 ESP_LOGD (TAG , "Key purpose = %d" , config -> key_purpose );
228238 key_mgr_hal_set_key_purpose (config -> key_purpose );
229239
@@ -238,12 +248,10 @@ static esp_err_t key_mgr_deploy_key_aes_mode(aes_deploy_config_t *config)
238248
239249 if (config -> key_config -> use_pre_generated_sw_init_key ) {
240250 key_mgr_hal_use_sw_init_key ();
241- } else {
242- if (!esp_efuse_find_purpose (ESP_EFUSE_KEY_PURPOSE_KM_INIT_KEY , NULL )) {
243- ESP_LOGE (TAG , "Could not find key with purpose KM_INIT_KEY" );
244- heap_caps_free (key_recovery_info );
245- return ESP_FAIL ;
246- }
251+ } else if (!esp_efuse_find_purpose (ESP_EFUSE_KEY_PURPOSE_KM_INIT_KEY , NULL )) {
252+ ESP_LOGE (TAG , "Could not find key with purpose KM_INIT_KEY" );
253+ heap_caps_free (key_recovery_info );
254+ return ESP_FAIL ;
247255 }
248256
249257 key_mgr_hal_start ();
@@ -306,8 +314,10 @@ esp_err_t esp_key_mgr_deploy_key_in_aes_mode(const esp_key_mgr_aes_key_config_t
306314 aes_deploy_config .k1_encrypted = key_config -> k1_encrypted [0 ];
307315
308316 esp_key_mgr_key_type_t key_type = (esp_key_mgr_key_type_t ) key_config -> key_type ;
309- if (key_type == ESP_KEY_MGR_ECDSA_KEY ) {
310- aes_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA ;
317+ if (key_type == ESP_KEY_MGR_ECDSA_192_KEY ) {
318+ aes_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_192 ;
319+ } else if (key_type == ESP_KEY_MGR_ECDSA_256_KEY ) {
320+ aes_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_256 ;
311321 } else if (key_type == ESP_KEY_MGR_XTS_AES_128_KEY ) {
312322 aes_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_XTS_AES_128 ;
313323 } else if (key_type == ESP_KEY_MGR_XTS_AES_256_KEY ) {
@@ -424,10 +434,12 @@ esp_err_t esp_key_mgr_activate_key(esp_key_mgr_key_recovery_info_t *key_recovery
424434 }
425435
426436 esp_key_mgr_key_purpose_t key_purpose ;
427- ESP_LOGD (TAG , "Activating key of type %d" , key_recovery_info -> key_type );
437+ ESP_LOGI (TAG , "Activating key of type %d" , key_recovery_info -> key_type );
428438 esp_key_mgr_key_type_t key_type = (esp_key_mgr_key_type_t ) key_recovery_info -> key_type ;
429- if (key_type == ESP_KEY_MGR_ECDSA_KEY ) {
430- key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA ;
439+ if (key_type == ESP_KEY_MGR_ECDSA_192_KEY ) {
440+ key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_192 ;
441+ } else if (key_type == ESP_KEY_MGR_ECDSA_256_KEY ) {
442+ key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_256 ;
431443 } else if (key_type == ESP_KEY_MGR_XTS_AES_128_KEY ) {
432444 key_purpose = ESP_KEY_MGR_KEY_PURPOSE_XTS_AES_128 ;
433445 } else if (key_type == ESP_KEY_MGR_XTS_AES_256_KEY ) {
@@ -438,6 +450,7 @@ esp_err_t esp_key_mgr_activate_key(esp_key_mgr_key_recovery_info_t *key_recovery
438450 }
439451
440452 esp_err_t esp_ret = ESP_FAIL ;
453+ ESP_LOGI (TAG , "Activating key of type %d" , key_recovery_info -> key_type );
441454 esp_key_mgr_acquire_key_lock (key_type );
442455 key_recovery_config_t key_recovery_config = {};
443456 key_recovery_config .key_recovery_info = key_recovery_info ;
@@ -448,6 +461,7 @@ esp_err_t esp_key_mgr_activate_key(esp_key_mgr_key_recovery_info_t *key_recovery
448461 esp_ret = key_mgr_recover_key (& key_recovery_config );
449462 if (esp_ret != ESP_OK ) {
450463 ESP_LOGE (TAG , "Failed to recover key" );
464+ esp_key_mgr_release_key_lock (key_type );
451465 goto cleanup ;
452466 }
453467
@@ -456,13 +470,15 @@ esp_err_t esp_key_mgr_activate_key(esp_key_mgr_key_recovery_info_t *key_recovery
456470 esp_ret = key_mgr_recover_key (& key_recovery_config );
457471 if (esp_ret != ESP_OK ) {
458472 ESP_LOGE (TAG , "Failed to recover key" );
473+ esp_key_mgr_release_key_lock (key_type );
459474 goto cleanup ;
460475 }
461476 }
462477
463478 // Set the Key Manager Static Register to use own key for the respective key type
464- key_mgr_hal_set_key_usage (key_recovery_info -> key_type , ESP_KEY_MGR_USE_OWN_KEY );
479+ key_mgr_hal_set_key_usage (key_type , ESP_KEY_MGR_USE_OWN_KEY );
465480 ESP_LOGI (TAG , "Key activation for type %d successful" , key_recovery_info -> key_type );
481+ esp_key_mgr_release_key_lock (key_type );
466482 return ESP_OK ;
467483
468484cleanup :
@@ -585,8 +601,11 @@ esp_err_t esp_key_mgr_deploy_key_in_ecdh0_mode(const esp_key_mgr_ecdh0_key_confi
585601 ecdh0_deploy_config .key_info = key_info ;
586602 ecdh0_deploy_config .k1_G = key_config -> k1_G [0 ];
587603
588- if (key_type == ESP_KEY_MGR_ECDSA_KEY ) {
589- ecdh0_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA ;
604+ if (key_type == ESP_KEY_MGR_ECDSA_192_KEY ) {
605+ ecdh0_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_192 ;
606+ ecdh0_deploy_config .ecdh0_key_info = ecdh0_key_info -> k2_G [0 ];
607+ } else if (key_type == ESP_KEY_MGR_ECDSA_256_KEY ) {
608+ ecdh0_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_256 ;
590609 ecdh0_deploy_config .ecdh0_key_info = ecdh0_key_info -> k2_G [0 ];
591610 } else if (key_type == ESP_KEY_MGR_XTS_AES_128_KEY ) {
592611 ecdh0_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_XTS_AES_128 ;
@@ -718,8 +737,10 @@ esp_err_t esp_key_mgr_deploy_key_in_random_mode(const esp_key_mgr_random_key_con
718737 random_deploy_config .key_info = key_recovery_info ;
719738 esp_key_mgr_key_type_t key_type = (esp_key_mgr_key_type_t ) key_config -> key_type ;
720739
721- if (key_type == ESP_KEY_MGR_ECDSA_KEY ) {
722- random_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA ;
740+ if (key_type == ESP_KEY_MGR_ECDSA_192_KEY ) {
741+ random_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_192 ;
742+ } else if (key_type == ESP_KEY_MGR_ECDSA_256_KEY ) {
743+ random_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_256 ;
723744 } else if (key_type == ESP_KEY_MGR_XTS_AES_128_KEY ) {
724745 random_deploy_config .key_purpose = ESP_KEY_MGR_KEY_PURPOSE_XTS_AES_128 ;
725746 } else if (key_type == ESP_KEY_MGR_XTS_AES_256_KEY ) {
@@ -748,7 +769,7 @@ esp_err_t esp_key_mgr_deploy_key_in_random_mode(const esp_key_mgr_random_key_con
748769 }
749770
750771 // Set the Key Manager Static Register to use own key for the respective key type
751- key_mgr_hal_set_key_usage (key_config -> key_type , ESP_KEY_MGR_USE_OWN_KEY );
772+ key_mgr_hal_set_key_usage (key_type , ESP_KEY_MGR_USE_OWN_KEY );
752773
753774 esp_key_mgr_release_hardware (true);
754775 return esp_ret ;
0 commit comments