From 9e87b50307373806e95c88c7d5004b63eb9c4af9 Mon Sep 17 00:00:00 2001 From: "harshal.patil" Date: Fri, 8 Aug 2025 17:28:25 +0530 Subject: [PATCH] change(mbedtls/ecdsa): The ECDSA module of ESP32-H2 ECO5 does not use MPI module --- components/esp_security/src/esp_crypto_lock.c | 11 +++++++++-- components/hal/esp32h2/include/hal/ecdsa_ll.h | 8 ++++++++ components/hal/esp32p4/include/hal/ecdsa_ll.h | 8 ++++++++ .../hal/test_apps/crypto/main/ecdsa/test_ecdsa.c | 8 ++++++-- components/mbedtls/port/ecdsa/ecdsa_alt.c | 8 ++++++-- 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/components/esp_security/src/esp_crypto_lock.c b/components/esp_security/src/esp_crypto_lock.c index 0d3050910a..d0ed96311f 100644 --- a/components/esp_security/src/esp_crypto_lock.c +++ b/components/esp_security/src/esp_crypto_lock.c @@ -47,6 +47,9 @@ static _lock_t s_crypto_ecc_lock; #ifdef SOC_ECDSA_SUPPORTED /* Lock for ECDSA peripheral */ static _lock_t s_crypto_ecdsa_lock; +#if SOC_ECDSA_USES_MPI +#include "hal/ecdsa_ll.h" +#endif /* SOC_ECDSA_USES_MPI */ #endif /* SOC_ECDSA_SUPPORTED */ #ifdef SOC_KEY_MANAGER_SUPPORTED @@ -138,14 +141,18 @@ void esp_crypto_ecdsa_lock_acquire(void) _lock_acquire(&s_crypto_ecdsa_lock); esp_crypto_ecc_lock_acquire(); #ifdef SOC_ECDSA_USES_MPI - esp_crypto_mpi_lock_acquire(); + if (ecdsa_ll_is_mpi_required()) { + esp_crypto_mpi_lock_acquire(); + } #endif /* SOC_ECDSA_USES_MPI */ } void esp_crypto_ecdsa_lock_release(void) { #ifdef SOC_ECDSA_USES_MPI - esp_crypto_mpi_lock_release(); + if (ecdsa_ll_is_mpi_required()) { + esp_crypto_mpi_lock_release(); + } #endif /* SOC_ECDSA_USES_MPI */ esp_crypto_ecc_lock_release(); _lock_release(&s_crypto_ecdsa_lock); diff --git a/components/hal/esp32h2/include/hal/ecdsa_ll.h b/components/hal/esp32h2/include/hal/ecdsa_ll.h index 65299c1219..842e5b4d97 100644 --- a/components/hal/esp32h2/include/hal/ecdsa_ll.h +++ b/components/hal/esp32h2/include/hal/ecdsa_ll.h @@ -418,6 +418,14 @@ static inline bool ecdsa_ll_is_deterministic_mode_supported(void) return ESP_CHIP_REV_ABOVE(efuse_hal_chip_revision(), 102); } +/** + * @brief Check if the ECDSA peripheral uses MPI module's memory + */ +static inline bool ecdsa_ll_is_mpi_required(void) +{ + return !ESP_CHIP_REV_ABOVE(efuse_hal_chip_revision(), 102); +} + #ifdef __cplusplus } #endif diff --git a/components/hal/esp32p4/include/hal/ecdsa_ll.h b/components/hal/esp32p4/include/hal/ecdsa_ll.h index d8cbbeb2e7..7e6a9210cb 100644 --- a/components/hal/esp32p4/include/hal/ecdsa_ll.h +++ b/components/hal/esp32p4/include/hal/ecdsa_ll.h @@ -443,6 +443,14 @@ static inline bool ecdsa_ll_is_deterministic_mode_supported(void) return true; } +/** + * @brief Check if the ECDSA peripheral uses MPI module's memory + */ +static inline bool ecdsa_ll_is_mpi_required(void) +{ + return true; // TODO: IDF-13523 +} + #ifdef __cplusplus } #endif diff --git a/components/hal/test_apps/crypto/main/ecdsa/test_ecdsa.c b/components/hal/test_apps/crypto/main/ecdsa/test_ecdsa.c index 6438ede5a5..16dfefc473 100644 --- a/components/hal/test_apps/crypto/main/ecdsa/test_ecdsa.c +++ b/components/hal/test_apps/crypto/main/ecdsa/test_ecdsa.c @@ -38,14 +38,18 @@ static void ecdsa_enable_and_reset(void) esp_crypto_ecdsa_enable_periph_clk(true); esp_crypto_ecc_enable_periph_clk(true); #ifdef SOC_ECDSA_USES_MPI - esp_crypto_mpi_enable_periph_clk(true); + if (ecdsa_ll_is_mpi_required()) { + esp_crypto_mpi_enable_periph_clk(true); + } #endif } static void ecdsa_disable(void) { #ifdef SOC_ECDSA_USES_MPI - esp_crypto_mpi_enable_periph_clk(false); + if (ecdsa_ll_is_mpi_required()) { + esp_crypto_mpi_enable_periph_clk(false); + } #endif esp_crypto_ecc_enable_periph_clk(false); esp_crypto_ecdsa_enable_periph_clk(false); diff --git a/components/mbedtls/port/ecdsa/ecdsa_alt.c b/components/mbedtls/port/ecdsa/ecdsa_alt.c index bb3c1623e3..0fb481ea94 100644 --- a/components/mbedtls/port/ecdsa/ecdsa_alt.c +++ b/components/mbedtls/port/ecdsa/ecdsa_alt.c @@ -76,10 +76,12 @@ static void esp_ecdsa_acquire_hardware(void) esp_crypto_ecc_enable_periph_clk(true); #if SOC_ECDSA_USES_MPI + if (ecdsa_ll_is_mpi_required()) { /* We need to reset the MPI peripheral because ECDSA peripheral * of some targets use the MPI peripheral as well. */ - esp_crypto_mpi_enable_periph_clk(true); + esp_crypto_mpi_enable_periph_clk(true); + } #endif /* SOC_ECDSA_USES_MPI */ } @@ -90,7 +92,9 @@ static void esp_ecdsa_release_hardware(void) esp_crypto_ecc_enable_periph_clk(false); #if SOC_ECDSA_USES_MPI - esp_crypto_mpi_enable_periph_clk(false); + if (ecdsa_ll_is_mpi_required()) { + esp_crypto_mpi_enable_periph_clk(false); + } #endif /* SOC_ECDSA_USES_MPI */ esp_crypto_ecdsa_lock_release();