@@ -356,20 +356,22 @@ static int esp_ecdsa_sign(mbedtls_ecp_group *grp, mbedtls_mpi* r, mbedtls_mpi* s
356356
357357 bool process_again = false;
358358
359- #ifdef SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE
360- uint16_t deterministic_loop_number = 1 ;
361- #endif /* SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE */
359+ #if ! SOC_ECDSA_SUPPORT_HW_DETERMINISTIC_LOOP
360+ uint16_t deterministic_loop_number __attribute__(( unused )) = 1 ;
361+ #endif /* !SOC_ECDSA_SUPPORT_HW_DETERMINISTIC_LOOP */
362362
363363 do {
364364 ecdsa_hal_config_t conf = {
365365 .mode = ECDSA_MODE_SIGN_GEN ,
366366 .curve = curve ,
367367 .sha_mode = ECDSA_Z_USER_PROVIDED ,
368368 .sign_type = k_type ,
369- #ifdef SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE
370- .loop_number = deterministic_loop_number ++ ,
371- #endif /* SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE */
372369 };
370+ #if !SOC_ECDSA_SUPPORT_HW_DETERMINISTIC_LOOP
371+ if (ecdsa_ll_is_deterministic_mode_supported ()) {
372+ conf .loop_number = deterministic_loop_number ++ ;
373+ }
374+ #endif /* !SOC_ECDSA_SUPPORT_HW_DETERMINISTIC_LOOP */
373375
374376 if (use_km_key ) {
375377 conf .use_km_key = 1 ;
@@ -395,7 +397,7 @@ static int esp_ecdsa_sign(mbedtls_ecp_group *grp, mbedtls_mpi* r, mbedtls_mpi* s
395397 || !memcmp (s_le , zeroes , len );
396398
397399#if SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE && !SOC_ECDSA_SUPPORT_HW_DETERMINISTIC_LOOP
398- if (k_type == ECDSA_K_TYPE_DETERMINISITIC ) {
400+ if (ecdsa_ll_is_deterministic_mode_supported () && k_type == ECDSA_K_TYPE_DETERMINISITIC ) {
399401 process_again |= !ecdsa_hal_det_signature_k_check ();
400402 }
401403#endif /* SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE && !SOC_ECDSA_SUPPORT_HW_DETERMINISTIC_LOOP */
@@ -662,12 +664,30 @@ int __wrap_mbedtls_ecdsa_sign_det_ext(mbedtls_ecp_group *grp, mbedtls_mpi *r,
662664 /*
663665 * Check `d` whether it contains the hardware key
664666 */
667+ #if CONFIG_MBEDTLS_HARDWARE_ECDSA_SIGN
665668 if (d -> MBEDTLS_PRIVATE (s ) == ECDSA_KEY_MAGIC ) {
666- // Use hardware ECDSA peripheral
667- return esp_ecdsa_sign (grp , r , s , d , buf , blen , ECDSA_K_TYPE_DETERMINISITIC );
668- } else {
669- return __real_mbedtls_ecdsa_sign_det_ext (grp , r , s , d , buf , blen , md_alg , f_rng_blind , p_rng_blind );
669+ if (ecdsa_ll_is_deterministic_mode_supported ()) {
670+ // Use hardware ECDSA peripheral
671+ return esp_ecdsa_sign (grp , r , s , d , buf , blen , ECDSA_K_TYPE_DETERMINISITIC );
672+ } else {
673+ return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ;
674+ }
670675 }
676+ #endif
677+
678+ #if CONFIG_MBEDTLS_TEE_SEC_STG_ECDSA_SIGN
679+ if (d -> MBEDTLS_PRIVATE (s ) == ECDSA_KEY_MAGIC_TEE ) {
680+ if (ecdsa_ll_is_deterministic_mode_supported ()) {
681+ // Use TEE secure storage
682+ return esp_ecdsa_tee_sign (grp , r , s , d , buf , blen , ECDSA_K_TYPE_DETERMINISITIC );
683+ } else {
684+ return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ;
685+ }
686+ }
687+ #endif
688+
689+ // Fallback to software implementation
690+ return __real_mbedtls_ecdsa_sign_det_ext (grp , r , s , d , buf , blen , md_alg , f_rng_blind , p_rng_blind );
671691}
672692
673693extern int __real_mbedtls_ecdsa_sign_det_restartable (mbedtls_ecp_group * grp ,
@@ -697,12 +717,30 @@ int __wrap_mbedtls_ecdsa_sign_det_restartable(mbedtls_ecp_group *grp,
697717 /*
698718 * Check `d` whether it contains the hardware key
699719 */
720+ #if CONFIG_MBEDTLS_HARDWARE_ECDSA_SIGN
700721 if (d -> MBEDTLS_PRIVATE (s ) == ECDSA_KEY_MAGIC ) {
701- // Use hardware ECDSA peripheral
702- return esp_ecdsa_sign (grp , r , s , d , buf , blen , ECDSA_K_TYPE_DETERMINISITIC );
703- } else {
704- return __real_mbedtls_ecdsa_sign_det_restartable (grp , r , s , d , buf , blen , md_alg , f_rng_blind , p_rng_blind , NULL );
722+ if (ecdsa_ll_is_deterministic_mode_supported ()) {
723+ // Use hardware ECDSA peripheral
724+ return esp_ecdsa_sign (grp , r , s , d , buf , blen , ECDSA_K_TYPE_DETERMINISITIC );
725+ } else {
726+ return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ;
727+ }
705728 }
729+ #endif
730+
731+ #if CONFIG_MBEDTLS_TEE_SEC_STG_ECDSA_SIGN
732+ if (d -> MBEDTLS_PRIVATE (s ) == ECDSA_KEY_MAGIC_TEE ) {
733+ if (ecdsa_ll_is_deterministic_mode_supported ()) {
734+ // Use TEE secure storage
735+ return esp_ecdsa_tee_sign (grp , r , s , d , buf , blen , ECDSA_K_TYPE_DETERMINISITIC );
736+ } else {
737+ return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ;
738+ }
739+ }
740+ #endif
741+
742+ // Fallback to software implementation
743+ return __real_mbedtls_ecdsa_sign_det_ext (grp , r , s , d , buf , blen , md_alg , f_rng_blind , p_rng_blind );
706744}
707745
708746#endif /* SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE */
@@ -774,10 +812,11 @@ int __wrap_mbedtls_ecdsa_write_signature_restartable(mbedtls_ecdsa_context *ctx,
774812 mbedtls_mpi_init (& r );
775813 mbedtls_mpi_init (& s );
776814
815+ ecdsa_sign_type_t k_type = ECDSA_K_TYPE_TRNG ;
777816#if defined(SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE ) && defined(CONFIG_MBEDTLS_ECDSA_DETERMINISTIC )
778- ecdsa_sign_type_t k_type = ECDSA_K_TYPE_DETERMINISITIC ;
779- #else
780- ecdsa_sign_type_t k_type = ECDSA_K_TYPE_TRNG ;
817+ if ( ecdsa_ll_is_deterministic_mode_supported ()) {
818+ k_type = ECDSA_K_TYPE_DETERMINISITIC ;
819+ }
781820#endif
782821
783822 /*
0 commit comments