1818#include "sys/param.h"
1919#include "soc/soc_caps.h"
2020#include "hal/efuse_ll.h"
21+ #include "hal/efuse_hal.h"
22+
23+ #ifdef SOC_ECDSA_SUPPORTED
24+ #include "hal/ecdsa_ll.h"
25+ #endif /* SOC_ECDSA_SUPPORTED */
2126
2227static __attribute__((unused )) const char * TAG = "efuse" ;
2328
@@ -88,8 +93,12 @@ esp_err_t esp_efuse_update_secure_version(uint32_t secure_version)
8893bool esp_efuse_is_ecdsa_p192_curve_supported (void )
8994{
9095#if SOC_ECDSA_P192_CURVE_DEFAULT_DISABLED
91- uint32_t current_curve = efuse_ll_get_ecdsa_curve_mode ();
92- return (current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_BOTH_P192_P256_BIT || current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_ONLY_P192_BIT );
96+ if (ecdsa_ll_is_configurable_curve_supported ()) {
97+ uint32_t current_curve = efuse_hal_get_ecdsa_curve_mode ();
98+ return (current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_BOTH_P192_P256_BIT || current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_ONLY_P192_BIT );
99+ } else {
100+ return true;
101+ }
93102#else
94103 return true;
95104#endif /* SOC_ECDSA_P192_CURVE_DEFAULT_DISABLED */
@@ -98,8 +107,12 @@ bool esp_efuse_is_ecdsa_p192_curve_supported(void)
98107bool esp_efuse_is_ecdsa_p256_curve_supported (void )
99108{
100109#if SOC_ECDSA_P192_CURVE_DEFAULT_DISABLED
101- uint32_t current_curve = efuse_ll_get_ecdsa_curve_mode ();
102- return (current_curve != ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_ONLY_P192_BIT );
110+ if (ecdsa_ll_is_configurable_curve_supported ()) {
111+ uint32_t current_curve = efuse_hal_get_ecdsa_curve_mode ();
112+ return (current_curve != ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_ONLY_P192_BIT );
113+ } else {
114+ return true;
115+ }
103116#else
104117 return true;
105118#endif /* SOC_ECDSA_P192_CURVE_DEFAULT_DISABLED */
@@ -109,30 +122,32 @@ bool esp_efuse_is_ecdsa_p256_curve_supported(void)
109122#if SOC_ECDSA_P192_CURVE_DEFAULT_DISABLED
110123esp_err_t esp_efuse_enable_ecdsa_p192_curve_mode (void )
111124{
112- esp_err_t err ;
113- uint8_t current_curve , next_curve ;
114-
115- current_curve = efuse_ll_get_ecdsa_curve_mode ();
116- // Check if already in desired state
117- if (current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_BOTH_P192_P256_BIT || current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_ONLY_P192_BIT ) {
118- ESP_EARLY_LOGD (TAG , "ECDSA P-192 curve mode is already enabled" );
119- return ESP_OK ;
120- }
121125
122- // Check if write is disabled or already locked to P256
123- if (esp_efuse_read_field_bit (ESP_EFUSE_WR_DIS_ECDSA_CURVE_MODE ) || current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_ONLY_P256_BIT_LOCKED ) {
124- ESP_EARLY_LOGE (TAG , "ECDSA curve mode is locked, cannot enable P-192 curve" );
125- return ESP_FAIL ;
126- }
126+ if (ecdsa_ll_is_configurable_curve_supported ()) {
127+ esp_err_t err ;
128+ uint8_t current_curve , next_curve ;
127129
128- // Attempt to write new curve mode
129- next_curve = ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_BOTH_P192_P256_BIT ;
130- err = esp_efuse_write_field_blob (ESP_EFUSE_ECDSA_CURVE_MODE , & next_curve , ESP_EFUSE_ECDSA_CURVE_MODE [0 ]-> bit_count );
131- if (err != ESP_OK ) {
132- ESP_EARLY_LOGE (TAG , "Failed to enable ECDSA P-192 curve %d" , err );
133- return err ;
134- }
130+ current_curve = efuse_hal_get_ecdsa_curve_mode ();
131+ // Check if already in desired state
132+ if (current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_BOTH_P192_P256_BIT || current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_ONLY_P192_BIT ) {
133+ ESP_EARLY_LOGD (TAG , "ECDSA P-192 curve mode is already enabled" );
134+ return ESP_OK ;
135+ }
135136
137+ // Check if write is disabled or already locked to P256
138+ if (esp_efuse_read_field_bit (ESP_EFUSE_WR_DIS_ECDSA_CURVE_MODE ) || current_curve == ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_ONLY_P256_BIT_LOCKED ) {
139+ ESP_EARLY_LOGE (TAG , "ECDSA curve mode is locked, cannot enable P-192 curve" );
140+ return ESP_FAIL ;
141+ }
142+
143+ // Attempt to write new curve mode
144+ next_curve = ESP_EFUSE_ECDSA_CURVE_MODE_ALLOW_BOTH_P192_P256_BIT ;
145+ err = esp_efuse_write_field_blob (ESP_EFUSE_ECDSA_CURVE_MODE , & next_curve , ESP_EFUSE_ECDSA_CURVE_MODE [0 ]-> bit_count );
146+ if (err != ESP_OK ) {
147+ ESP_EARLY_LOGE (TAG , "Failed to enable ECDSA P-192 curve %d" , err );
148+ return err ;
149+ }
150+ }
136151 return ESP_OK ;
137152}
138153#endif /* SOC_ECDSA_P192_CURVE_DEFAULT_DISABLED */
0 commit comments