From 4f4a509e8c4e32e9489758ac1935d14bdb242278 Mon Sep 17 00:00:00 2001 From: Hideki Miyazaki Date: Fri, 25 Feb 2022 15:00:21 +0900 Subject: [PATCH 1/2] fix wait until in rsa primitive --- .../wolfssl_client/main/wifi_connect.c | 2 +- .../wolfssl_server/main/wifi_connect.c | 2 +- IDE/Espressif/ESP-IDF/user_settings.h | 3 +++ wolfcrypt/src/port/Espressif/esp32_mp.c | 20 +++++++++---------- .../wolfcrypt/port/Espressif/esp32-crypt.h | 4 ++-- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/wifi_connect.c b/IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/wifi_connect.c index 04a0f2d38..bc290b2ce 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/wifi_connect.c +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/wifi_connect.c @@ -54,7 +54,7 @@ static void set_time() /* please update the time if seeing unknown failure when loading cert. */ /* this could cause TLS communication failure due to time expiration */ /* incleasing 31536000 seconds is close to spend 356 days. */ - utctime.tv_sec = 1619650800; /* dummy time: Wed April 28 23:00:00 2021 */ + utctime.tv_sec = 1645797600; /* dummy time: Fri 25 Feb 2022 02:00:00 2022 */ utctime.tv_usec = 0; tz.tz_minuteswest = 0; tz.tz_dsttime = 0; diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/wifi_connect.c b/IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/wifi_connect.c index 714f43517..cfbe2fd87 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/wifi_connect.c +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/wifi_connect.c @@ -51,7 +51,7 @@ static void set_time() /* please update the time if seeing unknown failure when loading cert. */ /* this could cause TLS communication failure due to time expiration */ /* incleasing 31536000 seconds is close to spend 356 days. */ - utctime.tv_sec = 1619650800; /* dummy time: Wed April 28 23:00:00 2021 */ + utctime.tv_sec = 1645797600; /* dummy time: Fri 25 Feb 2022 02:00:00 2022 */ utctime.tv_usec = 0; tz.tz_minuteswest = 0; tz.tz_dsttime = 0; diff --git a/IDE/Espressif/ESP-IDF/user_settings.h b/IDE/Espressif/ESP-IDF/user_settings.h index 37a9c282f..b99650fe4 100644 --- a/IDE/Espressif/ESP-IDF/user_settings.h +++ b/IDE/Espressif/ESP-IDF/user_settings.h @@ -99,3 +99,6 @@ /* #define NO_WOLFSSL_ESP32WROOM32_CRYPT_HASH*/ /* #define NO_WOLFSSL_ESP32WROOM32_CRYPT_AES */ /* #define NO_WOLFSSL_ESP32WROOM32_CRYPT_RSA_PRI */ + +/* adjust wait-timeout count if you see timeout in ras hw acceleration */ +#define ESP_RSA_TIMEOUT_CNT 0x249F00 diff --git a/wolfcrypt/src/port/Espressif/esp32_mp.c b/wolfcrypt/src/port/Espressif/esp32_mp.c index 2fb719d6e..7ecadcdbe 100644 --- a/wolfcrypt/src/port/Espressif/esp32_mp.c +++ b/wolfcrypt/src/port/Espressif/esp32_mp.c @@ -51,6 +51,8 @@ static const char* const TAG = "wolfssl_mp"; #define MP_NG -1 +#define ESP_TIMEOUT(cnt) (cnt >= ESP_RSA_TIMEOUT_CNT) + /* mutex */ static wolfSSL_Mutex mp_mutex; static int espmp_CryptHwMutexInit = 0; @@ -59,10 +61,11 @@ static int espmp_CryptHwMutexInit = 0; */ static int esp_mp_hw_wait_clean() { - int timeout = 0; - while(++timeout < ESP_RSA_TIMEOUT && DPORT_REG_READ(RSA_CLEAN_REG) != 1){} + word32 timeout = 0; + while(!ESP_TIMEOUT(++timeout) && + DPORT_REG_READ(RSA_CLEAN_REG) != 1) { } - if(timeout >= ESP_RSA_TIMEOUT) { + if(ESP_TIMEOUT(timeout)) { ESP_LOGE(TAG, "waiting hw ready is time-outed."); return MP_NG; } @@ -146,18 +149,15 @@ static void process_start(word32 reg) /* wait until done */ static int wait_uitil_done(word32 reg) { - int timeout = 0; + word32 timeout = 0; /* wait until done && not timeout */ - while(1) { - if(++timeout < ESP_RSA_TIMEOUT && DPORT_REG_READ(reg) == 1){ - break; - } - } + while(!ESP_TIMEOUT(++timeout) && + DPORT_REG_READ(reg) != 1) { } /* clear interrupt */ DPORT_REG_WRITE(RSA_INTERRUPT_REG, 1); - if(timeout >= ESP_RSA_TIMEOUT) { + if(ESP_TIMEOUT(timeout)) { ESP_LOGE(TAG, "rsa operation is time-outed."); return MP_NG; } diff --git a/wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h b/wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h index 05fda0257..f64d616cb 100644 --- a/wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h +++ b/wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h @@ -142,8 +142,8 @@ int esp_sha_process(struct wc_Sha* sha, const byte* data); #if !defined(NO_RSA) || defined(HAVE_ECC) -#ifndef ESP_RSA_TIMEOUT - #define ESP_RSA_TIMEOUT 0xFFFFF +#if !defined(ESP_RSA_TIMEOUT_CNT) + #define ESP_RSA_TIMEOUT_CNT 0x249F00 #endif struct fp_int; From c3e7ff0e610c33eaec5f2a073241d6cfb8b0e5bf Mon Sep 17 00:00:00 2001 From: Hideki Miyazaki Date: Wed, 2 Mar 2022 07:09:33 +0900 Subject: [PATCH 2/2] addressed code review --- IDE/Espressif/ESP-IDF/user_settings.h | 2 +- wolfcrypt/src/port/Espressif/esp32_mp.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/IDE/Espressif/ESP-IDF/user_settings.h b/IDE/Espressif/ESP-IDF/user_settings.h index b99650fe4..4e9d1d918 100644 --- a/IDE/Espressif/ESP-IDF/user_settings.h +++ b/IDE/Espressif/ESP-IDF/user_settings.h @@ -100,5 +100,5 @@ /* #define NO_WOLFSSL_ESP32WROOM32_CRYPT_AES */ /* #define NO_WOLFSSL_ESP32WROOM32_CRYPT_RSA_PRI */ -/* adjust wait-timeout count if you see timeout in ras hw acceleration */ +/* adjust wait-timeout count if you see timeout in rsa hw acceleration */ #define ESP_RSA_TIMEOUT_CNT 0x249F00 diff --git a/wolfcrypt/src/port/Espressif/esp32_mp.c b/wolfcrypt/src/port/Espressif/esp32_mp.c index 7ecadcdbe..af0192989 100644 --- a/wolfcrypt/src/port/Espressif/esp32_mp.c +++ b/wolfcrypt/src/port/Espressif/esp32_mp.c @@ -66,7 +66,7 @@ static int esp_mp_hw_wait_clean() DPORT_REG_READ(RSA_CLEAN_REG) != 1) { } if(ESP_TIMEOUT(timeout)) { - ESP_LOGE(TAG, "waiting hw ready is time-outed."); + ESP_LOGE(TAG, "waiting hw ready is timed out."); return MP_NG; } return MP_OKAY; @@ -158,7 +158,7 @@ static int wait_uitil_done(word32 reg) DPORT_REG_WRITE(RSA_INTERRUPT_REG, 1); if(ESP_TIMEOUT(timeout)) { - ESP_LOGE(TAG, "rsa operation is time-outed."); + ESP_LOGE(TAG, "rsa operation is timed out."); return MP_NG; }