@@ -157,6 +157,30 @@ typedef struct {
157157 esp_key_mgr_huk_info_t * huk_recovery_info ;
158158} huk_deploy_config_t ;
159159
160+ static esp_err_t configure_huk (esp_huk_mode_t huk_mode , uint8_t * huk_info )
161+ {
162+ esp_err_t ret = huk_hal_configure (huk_mode , huk_info );
163+ if (ret != ESP_OK ) {
164+ return ret ;
165+ }
166+
167+ #if SOC_HUK_MEM_NEEDS_RECHARGE
168+ if (!key_mgr_hal_is_huk_valid ()) {
169+ huk_hal_recharge_huk_memory ();
170+ ret = huk_hal_configure (huk_mode , huk_info );
171+ if (ret != ESP_OK ) {
172+ return ret ;
173+ }
174+ }
175+ #endif
176+
177+ if (!key_mgr_hal_is_huk_valid ()) {
178+ return ESP_FAIL ;
179+ }
180+
181+ return ESP_OK ;
182+ }
183+
160184static esp_err_t deploy_huk (huk_deploy_config_t * config )
161185{
162186 esp_err_t esp_ret = ESP_FAIL ;
@@ -174,7 +198,8 @@ static esp_err_t deploy_huk(huk_deploy_config_t *config)
174198 }
175199 memcpy (huk_recovery_info , config -> pre_generated_huk_info -> info , KEY_MGR_HUK_INFO_SIZE );
176200 ESP_LOGI (TAG , "Recovering HUK from given HUK recovery info" );
177- esp_ret = huk_hal_configure (ESP_HUK_MODE_RECOVERY , huk_recovery_info );
201+
202+ esp_ret = configure_huk (ESP_HUK_MODE_RECOVERY , huk_recovery_info );
178203 if (esp_ret != ESP_OK ) {
179204 ESP_LOGE (TAG , "Failed to recover HUK" );
180205 heap_caps_free (huk_recovery_info );
@@ -186,7 +211,8 @@ static esp_err_t deploy_huk(huk_deploy_config_t *config)
186211 } else {
187212 // Generate new HUK and corresponding HUK info
188213 ESP_LOGI (TAG , "Generating new HUK" );
189- esp_ret = huk_hal_configure (ESP_HUK_MODE_GENERATION , huk_recovery_info );
214+
215+ esp_ret = configure_huk (ESP_HUK_MODE_GENERATION , huk_recovery_info );
190216 if (esp_ret != ESP_OK ) {
191217 ESP_LOGE (TAG , "Failed to generate HUK" );
192218 heap_caps_free (huk_recovery_info );
@@ -196,12 +222,6 @@ static esp_err_t deploy_huk(huk_deploy_config_t *config)
196222 config -> huk_recovery_info -> crc = esp_rom_crc32_le (0 , huk_recovery_info , KEY_MGR_HUK_INFO_SIZE );
197223 }
198224
199- if (!key_mgr_hal_is_huk_valid ()) {
200- ESP_LOGE (TAG , "HUK is invalid" );
201- heap_caps_free (huk_recovery_info );
202- return ESP_FAIL ;
203- }
204-
205225 ESP_LOG_BUFFER_HEX_LEVEL ("HUK INFO" , huk_recovery_info , KEY_MGR_HUK_INFO_SIZE , ESP_LOG_DEBUG );
206226 // Free the local buffer for huk recovery info
207227 heap_caps_free (huk_recovery_info );
@@ -368,15 +388,10 @@ static esp_err_t key_mgr_recover_key(key_recovery_config_t *config)
368388
369389 if ((!key_mgr_hal_is_huk_valid ()) || (!config -> huk_recovered )) {
370390 check_huk_risk_level ();
371- esp_err_t esp_ret = huk_hal_configure (ESP_HUK_MODE_RECOVERY , config -> key_recovery_info -> huk_info .info );
391+ esp_err_t esp_ret = configure_huk (ESP_HUK_MODE_RECOVERY , config -> key_recovery_info -> huk_info .info );
372392 if (esp_ret != ESP_OK ) {
373393 ESP_LOGE (TAG , "Failed to recover HUK" );
374- return ESP_FAIL ;
375- }
376- if (!key_mgr_hal_is_huk_valid ()) {
377- ESP_LOGE (TAG , "HUK is invalid" );
378- // TODO - define error code
379- return ESP_FAIL ;
394+ return esp_ret ;
380395 }
381396 ESP_LOGI (TAG , "HUK recovered successfully" );
382397 ESP_LOG_BUFFER_HEX_LEVEL ("HUK INFO" , config -> key_recovery_info -> huk_info .info , KEY_MGR_HUK_INFO_SIZE , ESP_LOG_DEBUG );
@@ -433,9 +448,11 @@ esp_err_t esp_key_mgr_activate_key(esp_key_mgr_key_recovery_info_t *key_recovery
433448 return ESP_ERR_INVALID_ARG ;
434449 }
435450
436- esp_key_mgr_key_purpose_t key_purpose ;
437451 ESP_LOGI (TAG , "Activating key of type %d" , key_recovery_info -> key_type );
452+
438453 esp_key_mgr_key_type_t key_type = (esp_key_mgr_key_type_t ) key_recovery_info -> key_type ;
454+ esp_key_mgr_key_purpose_t key_purpose ;
455+
439456 if (key_type == ESP_KEY_MGR_ECDSA_192_KEY ) {
440457 key_purpose = ESP_KEY_MGR_KEY_PURPOSE_ECDSA_192 ;
441458 } else if (key_type == ESP_KEY_MGR_ECDSA_256_KEY ) {
@@ -450,7 +467,6 @@ esp_err_t esp_key_mgr_activate_key(esp_key_mgr_key_recovery_info_t *key_recovery
450467 }
451468
452469 esp_err_t esp_ret = ESP_FAIL ;
453- ESP_LOGI (TAG , "Activating key of type %d" , key_recovery_info -> key_type );
454470 esp_key_mgr_acquire_key_lock (key_type );
455471 key_recovery_config_t key_recovery_config = {};
456472 key_recovery_config .key_recovery_info = key_recovery_info ;
@@ -482,7 +498,7 @@ esp_err_t esp_key_mgr_activate_key(esp_key_mgr_key_recovery_info_t *key_recovery
482498 return ESP_OK ;
483499
484500cleanup :
485- ESP_LOGI (TAG , "Key activation failed" );
501+ ESP_LOGE (TAG , "Key activation failed" );
486502 esp_key_mgr_release_hardware (false);
487503 return esp_ret ;
488504}
0 commit comments