@@ -98,39 +98,81 @@ int esp_CryptHwMutexInit(wolfSSL_Mutex* mutex) {
9898}
9999
100100/*
101- * call the ESP-IDF mutex lock; xSemaphoreTake
101+ * Call the ESP-IDF mutex lock; xSemaphoreTake
102102 * this is a general mutex locker, used for different mutex objects for
103103 * different HW acclerators or other single-use HW features.
104+ *
105+ * We should already have known if the resource is in use or not.
106+ *
107+ * Return 0 (ESP_OK) on success, otherwise BAD_MUTEX_E
104108 */
105109int esp_CryptHwMutexLock (wolfSSL_Mutex * mutex , TickType_t block_time ) {
110+ int ret ;
106111 if (mutex == NULL ) {
107112 WOLFSSL_ERROR_MSG ("esp_CryptHwMutexLock called with null mutex" );
108113 return BAD_MUTEX_E ;
109114 }
110115
111116#ifdef SINGLE_THREADED
112- return wc_LockMutex (mutex ); /* xSemaphoreTake take with portMAX_DELAY */
117+ /* does nothing in single thread mode, always return 0 */
118+ ret = wc_LockMutex (mutex );
113119#else
114- return ((xSemaphoreTake (* mutex , block_time ) == pdTRUE ) ? 0 : BAD_MUTEX_E );
120+ ret = xSemaphoreTake (* mutex , block_time );
121+ ESP_LOGV (TAG , "xSemaphoreTake 0x%x = %d" , (intptr_t )* mutex , ret );
122+ if (ret == pdTRUE ) {
123+ ret = ESP_OK ;
124+ }
125+ else {
126+ if (ret == pdFALSE ) {
127+ ESP_LOGW (TAG , "xSemaphoreTake failed for 0x%x. Still busy?" ,
128+ (intptr_t )* mutex );
129+ ret = ESP_ERR_NOT_FINISHED ;
130+ }
131+ else {
132+ ESP_LOGE (TAG , "xSemaphoreTake 0x%x unexpected = %d" ,
133+ (intptr_t )* mutex , ret );
134+ ret = BAD_MUTEX_E ;
135+ }
136+ }
115137#endif
138+ return ret ;
116139}
117140
118141/*
119142 * call the ESP-IDF mutex UNlock; xSemaphoreGive
120143 *
121144 */
122145esp_err_t esp_CryptHwMutexUnLock (wolfSSL_Mutex * mutex ) {
146+ int ret = pdTRUE ;
123147 if (mutex == NULL ) {
124148 WOLFSSL_ERROR_MSG ("esp_CryptHwMutexLock called with null mutex" );
125149 return BAD_MUTEX_E ;
126150 }
127151
128152#ifdef SINGLE_THREADED
129- return wc_UnLockMutex (mutex );
153+ ret = wc_UnLockMutex (mutex );
130154#else
131- xSemaphoreGive (* mutex );
132- return ESP_OK ;
155+ ESP_LOGV (TAG , ">> xSemaphoreGive 0x%x" , (intptr_t )* mutex );
156+ TaskHandle_t mutexHolder = xSemaphoreGetMutexHolder (* mutex );
157+
158+ if (mutexHolder == NULL ) {
159+ ESP_LOGW (TAG , "esp_CryptHwMutexUnLock with no lock owner 0x%x" ,
160+ (intptr_t )* mutex );
161+ ret = ESP_OK ;
162+ }
163+ else {
164+ ret = xSemaphoreGive (* mutex );
165+ if (ret == pdTRUE ) {
166+ ESP_LOGV (TAG , "Success: give mutex 0x%x" , (intptr_t )* mutex );
167+ ret = ESP_OK ;
168+ }
169+ else {
170+ ESP_LOGV (TAG , "Failed: give mutex 0x%x" , (intptr_t )* mutex );
171+ ret = ESP_FAIL ;
172+ }
173+ }
133174#endif
175+ return ret ;
134176}
135177#endif /* WOLFSSL_ESP32_CRYPT, etc. */
136178
@@ -168,6 +210,7 @@ static int ShowExtendedSystemInfo_platform_espressif(void)
168210
169211 WOLFSSL_VERSION_PRINTF ("Xthal_have_ccount: %u" ,
170212 Xthal_have_ccount );
213+ #endif
171214
172215 /* this is the legacy stack size */
173216#if defined(CONFIG_MAIN_TASK_STACK_SIZE )
@@ -205,24 +248,35 @@ static int ShowExtendedSystemInfo_platform_espressif(void)
205248
206249#endif
207250
208- #elif CONFIG_IDF_TARGET_ESP32S2
209- WOLFSSL_VERSION_PRINTF ("Xthal_have_ccount = %u" ,
251+ /* Platform-specific attributes of interest*/
252+ #if CONFIG_IDF_TARGET_ESP32
253+ #if defined(CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ )
254+ WOLFSSL_VERSION_PRINTF ("CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ: %u MHz" ,
255+ CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ );
256+ #endif
257+ WOLFSSL_VERSION_PRINTF ("Xthal_have_ccount: %u" ,
210258 Xthal_have_ccount );
211- #elif CONFIG_IDF_TARGET_ESP32C6
212- /* TODO find Xthal for C6 */
259+
213260#elif CONFIG_IDF_TARGET_ESP32C2
214- /* TODO find Xthal for C6 */
215- #elif defined(CONFIG_IDF_TARGET_ESP8684 )
216- /* TODO find Xthal for C6 */
261+ /* TODO find Xthal for C2 */
217262#elif CONFIG_IDF_TARGET_ESP32C3
218263 /* not supported at this time */
219- #elif CONFIG_IDF_TARGET_ESP32S3
220- WOLFSSL_VERSION_PRINTF ("Xthal_have_ccount = %u" ,
221- Xthal_have_ccount );
264+ #elif CONFIG_IDF_TARGET_ESP32C6
265+ /* TODO find Xthal for C6 */
222266#elif CONFIG_IDF_TARGET_ESP32H2
223- /* not supported at this time */
224- #elif CONFIG_IDF_TARGET_ESP32C2
225- /* not supported at this time */
267+ /* TODO find Xthal for H2 */
268+ #elif CONFIG_IDF_TARGET_ESP32S2
269+ ESP_LOGI (TAG , "CONFIG_ESP32S2_DEFAULT_CPU_FREQ_MHZ = %u MHz" ,
270+ CONFIG_ESP32S2_DEFAULT_CPU_FREQ_MHZ
271+ );
272+ ESP_LOGI (TAG , "Xthal_have_ccount = %u" , Xthal_have_ccount );
273+ #elif CONFIG_IDF_TARGET_ESP32S3
274+ ESP_LOGI (TAG , "CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ = %u MHz" ,
275+ CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ
276+ );
277+ ESP_LOGI (TAG , "Xthal_have_ccount = %u" , Xthal_have_ccount );
278+ #elif defined(CONFIG_IDF_TARGET_ESP8684 )
279+ /* TODO find Xthal for ESP8684 */
226280#else
227281 /* not supported at this time */
228282#endif
@@ -438,6 +492,7 @@ esp_err_t ShowExtendedSystemInfo_config(void)
438492{
439493 esp_ShowMacroStatus_need_header = 1 ;
440494
495+ show_macro ("NO_ESP32_CRYPT" , STR_IFNDEF (NO_ESP32_CRYPT ));
441496 show_macro ("NO_ESPIDF_DEFAULT" , STR_IFNDEF (NO_ESPIDF_DEFAULT ));
442497
443498 show_macro ("HW_MATH_ENABLED" , STR_IFNDEF (HW_MATH_ENABLED ));
@@ -562,11 +617,11 @@ int ShowExtendedSystemInfo(void)
562617
563618#if defined(WOLFSSL_MULTI_INSTALL_WARNING )
564619 /* CMake may have detected undesired multiple installs, so give warning. */
565- WOLFSSL_VERSION_PRINTF ("" );
620+ WOLFSSL_VERSION_PRINTF (WOLFSSL_ESPIDF_BLANKLINE_MESSAGE );
566621 WOLFSSL_VERSION_PRINTF ("WARNING: Multiple wolfSSL installs found." );
567622 WOLFSSL_VERSION_PRINTF ("Check ESP-IDF components and "
568623 "local project [components] directory." );
569- WOLFSSL_VERSION_PRINTF ("" );
624+ WOLFSSL_VERSION_PRINTF (WOLFSSL_ESPIDF_BLANKLINE_MESSAGE );
570625#else
571626 #ifdef WOLFSSL_USER_SETTINGS_DIR
572627 {
@@ -737,14 +792,11 @@ esp_err_t esp_EnabledWatchdog(void)
737792 ESP_IDF_VERSION_MAJOR );
738793 #endif
739794#endif
740-
741- #ifdef DEBUG_WOLFSSL
742- ESP_LOGI (TAG , "Watchdog enabled." );
743- #endif
744-
745795 return ret ;
746796}
747797
798+
799+
748800/* Print a MATH_INT_T attribute list.
749801 *
750802 * Note with the right string parameters, the result can be pasted as
@@ -904,4 +956,49 @@ esp_err_t esp_hw_show_metrics(void)
904956 return ESP_OK ;
905957}
906958
959+ int show_binary (byte * theVar , size_t dataSz ) {
960+ printf ("*****************************************************\n" );
961+ word32 i ;
962+ for (i = 0 ; i < dataSz ; i ++ )
963+ printf ("%02X" , theVar [i ]);
964+ printf ("\n" );
965+ printf ("******************************************************\n" );
966+ return 0 ;
967+ }
968+
969+ int hexToBinary (byte * toVar , const char * fromHexString , size_t szHexString ) {
970+ int ret = 0 ;
971+ /* Calculate the actual binary length of the hex string */
972+ size_t byteLen = szHexString / 2 ;
973+
974+ if (toVar == NULL || fromHexString == NULL ) {
975+ ESP_LOGE ("ssh" , " error" );
976+ return -1 ;
977+ }
978+ if ((szHexString % 2 != 0 )) {
979+ ESP_LOGE ("ssh" , "fromHexString length not even!" );
980+ }
981+
982+ ESP_LOGW (TAG , "Replacing %d bytes at %x" , byteLen , (word32 )toVar );
983+ memset (toVar , 0 , byteLen );
984+ /* Iterate through the hex string and convert to binary */
985+ for (size_t i = 0 ; i < szHexString ; i += 2 ) {
986+ /* Convert hex character to decimal */
987+ int decimalValue ;
988+ sscanf (& fromHexString [i ], "%2x" , & decimalValue );
989+ size_t index = i / 2 ;
990+ #if (0 )
991+ /* Optionall peek at new values */
992+ byte new_val = (decimalValue & 0x0F ) << ((i % 2 ) * 4 );
993+ ESP_LOGI ("hex" , "Current char = %d" , toVar [index ]);
994+ ESP_LOGI ("hex" , "New val = %d" , decimalValue );
995+ #endif
996+ toVar [index ] = decimalValue ;
997+ }
998+
999+ return ret ;
1000+ }
1001+
1002+
1003+
9071004#endif /* WOLFSSL_ESPIDF */
0 commit comments