Skip to content

Commit 1ee315b

Browse files
authored
Merge pull request #7505 from gojimmypi/PR-Apple-Homekit-SRP-fix
Espressif updates to fix Apple Homekit SHA / SRP
2 parents 1c44798 + 44ec470 commit 1ee315b

10 files changed

Lines changed: 800 additions & 512 deletions

File tree

IDE/Espressif/ESP-IDF/examples/wolfssl_test/testAll.sh

Lines changed: 59 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,53 +15,88 @@
1515
# Run shell check to ensure this a good script.
1616
shellcheck "$0"
1717

18+
if [[ "$PATH" == *"rtos-sdk"* ]]; then
19+
echo "Error. Detected rtos-sdk in path."
20+
echo "Need to start with clean path (no prior idf.py setup) "
21+
exit 1
22+
fi
23+
1824
# Save the current PATH to a temporary variable
1925
ORIGINAL_PATH="$PATH"
26+
echo "ORIGINAL_PATH=$PATH"
2027

2128
export ESPIDF_PUTTY_MONITOR="TRUE"
2229

2330
THIS_SUFFIX="$1"
2431

25-
# Clear IDF path to ensure it is set by export.sh
26-
IDF_PATH=
2732

28-
# set the path for this workspace IDF path (where export.sh is located)
29-
WRK_IDF_PATH=/mnt/c/SysGCC/esp32/esp-idf/v5.2
30-
echo "Run ESP32 export.sh from ${WRK_IDF_PATH}"
33+
#******************************************************************************
34+
# ESP8266 uses rtos-sdk/v3.4 toolchain. Test this first, as it is slowest.
35+
WRK_IDF_PATH=/mnt/c/SysGCC/esp8266/rtos-sdk/v3.4
36+
#******************************************************************************
37+
38+
# Clear ESP-IDF environment variables to ensure clean start for export.sh
39+
unset ESP_IDF_VERSION
40+
unset ESP_ROM_ELF_DIR
41+
unset IDF_DEACTIVATE_FILE_PATH
42+
unset IDF_PATH
43+
unset IDF_PYTHON_ENV_PATH
44+
unset IDF_TOOLS_EXPORT_CMD
45+
unset IDF_TOOLS_INSTALL_CMD
46+
unset OPENOCD_SCRIPTS
47+
48+
echo "Run ESP8266 export.sh from ${WRK_IDF_PATH}"
3149

3250
# shell check should not follow into the ESP-IDF export.sh
3351
# shellcheck disable=SC1091
34-
. "${WRK_IDF_PATH}"/export.sh
35-
36-
echo "IDF_PATH = $IDF_PATH"
52+
. "$WRK_IDF_PATH"/export.sh
3753

38-
./testMonitor.sh wolfssl_test esp32 "$THIS_SUFFIX" || exit 1
39-
./testMonitor.sh wolfssl_test esp32c2 "$THIS_SUFFIX" || exit 1
40-
./testMonitor.sh wolfssl_test esp32c3 "$THIS_SUFFIX" || exit 1
41-
./testMonitor.sh wolfssl_test esp32c6 "$THIS_SUFFIX" || exit 1
42-
./testMonitor.sh wolfssl_test esp32s2 "$THIS_SUFFIX" || exit 1
43-
./testMonitor.sh wolfssl_test esp32s3 "$THIS_SUFFIX" || exit 1
44-
./testMonitor.sh wolfssl_test esp32h2 "$THIS_SUFFIX" || exit 1
45-
./testMonitor.sh wolfssl_test esp8684 "$THIS_SUFFIX" || exit 1
54+
# Tensilica
55+
./testMonitor.sh wolfssl_test esp8266 "$THIS_SUFFIX" || exit 1 # 2715073
4656

47-
# ESP8266 uses a different toolchain
4857

58+
#******************************************************************************
59+
# ESP32[-N] uses esp-idf/v5.2 toolchain
60+
WRK_IDF_PATH=/mnt/c/SysGCC/esp32/esp-idf/v5.2
61+
#******************************************************************************
4962
# Restore the original PATH
50-
export PATH=$ORIGINAL_PATH
63+
export PATH="$ORIGINAL_PATH"
64+
65+
# Clear ESP-IDF environment variables to ensure clean start
66+
unset ESP_IDF_VERSION
67+
unset ESP_ROM_ELF_DIR
68+
unset IDF_DEACTIVATE_FILE_PATH
69+
unset IDF_PATH
70+
unset IDF_PYTHON_ENV_PATH
71+
unset IDF_TOOLS_EXPORT_CMD
72+
unset IDF_TOOLS_INSTALL_CMD
73+
unset OPENOCD_SCRIPTS
5174

52-
IDF_PATH=
53-
WRK_IDF_PATH=/mnt/c/SysGCC/esp8266/rtos-sdk/v3.4
54-
echo "Run ESP8266 export.sh from ${WRK_IDF_PATH}"
75+
echo "Run ESP32 export.sh from ${WRK_IDF_PATH}"
5576

5677
# shell check should not follow into the ESP-IDF export.sh
5778
# shellcheck disable=SC1091
5879
. "$WRK_IDF_PATH"/export.sh
5980

60-
echo "IDF_PATH = $IDF_PATH"
81+
# Comment numeric values are recently observed runtime durations.
82+
# Different tests may be enabled for each device.
83+
# This list is not indicative of relative performance.
84+
85+
# Limited hardware acceleration, test slowest first:
86+
./testMonitor.sh wolfssl_test esp32h2 "$THIS_SUFFIX" || exit 1 # 1424084 esp32h2 COM31" ok
87+
./testMonitor.sh wolfssl_test esp8684 "$THIS_SUFFIX" || exit 1 # 1065290 esp8684 COM49" ok
88+
89+
# RISC-V
90+
./testMonitor.sh wolfssl_test esp32c2 "$THIS_SUFFIX" || exit 1 # 1133856 esp32c2 COM79" ok
91+
./testMonitor.sh wolfssl_test esp32c3 "$THIS_SUFFIX" || exit 1 # 344677 esp32c3 COM35" NT
92+
./testMonitor.sh wolfssl_test esp32c6 "$THIS_SUFFIX" || exit 1 # 346393 esp32c6 COM36" ok
6193

62-
./testMonitor.sh wolfssl_test esp8266 PR || exit 1
94+
# Xtensa
95+
./testMonitor.sh wolfssl_test esp32 "$THIS_SUFFIX" || exit 1 # 259093 esp32 COM9" NT
96+
./testMonitor.sh wolfssl_test esp32s2 "$THIS_SUFFIX" || exit 1 # 305004 esp32s2 COM30" NT
97+
./testMonitor.sh wolfssl_test esp32s3 "$THIS_SUFFIX" || exit 1 # 267518 esp32s3 COM24" NT
6398

6499
# Restore the original PATH
65-
export PATH=$ORIGINAL_PATH
100+
export PATH="$ORIGINAL_PATH"
66101

67102
echo "Done!"

IDE/Espressif/ESP-IDF/examples/wolfssl_test/testMonitor.sh

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ BUILD_LOG="${THIS_HOME_DIR}/logs/${THIS_EXAMPLE}_build_IDF_v5.1_${THIS_TARGET}_$
130130
FLASH_LOG="${THIS_HOME_DIR}/logs/${THIS_EXAMPLE}_flash_IDF_v5.1_${THIS_TARGET}_${THIS_KEYWORD}.txt"
131131
THIS_LOG="${THIS_HOME_DIR}/logs/${THIS_EXAMPLE}_output_IDF_v5.1_${THIS_TARGET}_${THIS_KEYWORD}.txt"
132132
THIS_CFG="${THIS_HOME_DIR}/logs/${THIS_EXAMPLE}_user_settings_IDF_v5.1_${THIS_TARGET}_${THIS_KEYWORD}.txt"
133-
133+
THIS_WLOG="logs\\${THIS_TARGET}_output.log"
134134
# cp ./components/wolfssl/include/user_settings.h "${THIS_CFG}"
135135

136136
echo "BUILD_LOG = ${BUILD_LOG}"
@@ -180,6 +180,7 @@ else
180180
THIS_ERROR_CODE=$?
181181
if [ $THIS_ERROR_CODE -ne 0 ]; then
182182
echo ""
183+
tail -n 5 "${BUILD_LOG}"
183184
echo "Error during set-target"
184185
exit 1
185186
fi
@@ -193,6 +194,7 @@ idf.py build >> "${BUILD_LOG}" 2>&1
193194
THIS_ERROR_CODE=$?
194195
if [ $THIS_ERROR_CODE -ne 0 ]; then
195196
echo ""
197+
tail -n 5 "${BUILD_LOG}"
196198
echo "Error during build for $THIS_TARGET"
197199
echo ""
198200
echo ""
@@ -207,6 +209,7 @@ idf.py flash -p "${THIS_TARGET_PORT}" -b 115200 2>&1 | tee -a "${FLASH_LOG}"
207209
THIS_ERROR_CODE=$?
208210
if [ $THIS_ERROR_CODE -ne 0 ]; then
209211
echo ""
212+
tail -n 5 "${FLASH_LOG}"
210213
echo "Error during flash"
211214
exit 1
212215
fi
@@ -223,5 +226,5 @@ if [ -z "$ESPIDF_PUTTY_MONITOR" ]; then
223226
else
224227
echo "Calling putty..."
225228
echo "$PUTTY_EXE -load \"$THIS_TARGET_PUTTY\""
226-
$PUTTY_EXE -load "$THIS_TARGET_PUTTY" &
229+
$PUTTY_EXE -load "$THIS_TARGET_PUTTY" -logoverwrite -sessionlog "${THIS_WLOG}" &
227230
fi

wolfcrypt/src/port/Espressif/esp32_aes.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ static const char* TAG = "wolf_hw_aes";
4848
/* mutex */
4949
static wolfSSL_Mutex aes_mutex;
5050

51+
/* Maximum time to wait for AES HW in FreeRTOS ticks */
52+
#define WOLFSSL_AES_MUTEX_WAIT 5000
53+
5154
/* keep track as to whether esp aes is initialized */
5255
static int espaes_CryptHwMutexInit = 0;
5356

@@ -86,7 +89,13 @@ static int esp_aes_hw_InUse(void)
8689
* of esp_CryptHwMutexLock(&aes_mutex ...) in code */
8790
/* TODO - do we really want to wait?
8891
* probably not */
89-
ret = esp_CryptHwMutexLock(&aes_mutex, portMAX_DELAY);
92+
ret = esp_CryptHwMutexLock(&aes_mutex, WOLFSSL_AES_MUTEX_WAIT);
93+
if (ret == ESP_OK) {
94+
ESP_LOGV(TAG, "esp_CryptHwMutexLock aes success");
95+
}
96+
else {
97+
ESP_LOGW(TAG, "esp_CryptHwMutexLock aes timeout! %d", ret);
98+
}
9099
}
91100
else {
92101
ESP_LOGE(TAG, "aes engine lock failed.");
@@ -597,9 +606,9 @@ int wc_esp32AesCbcDecrypt(Aes* aes, byte* out, const byte* in, word32 sz)
597606

598607
offset += AES_BLOCK_SIZE;
599608
} /* while (blocks--) */
609+
esp_aes_hw_Leave();
600610
} /* if Set Mode was successful (ret == ESP_OK) */
601611

602-
esp_aes_hw_Leave();
603612
ESP_LOGV(TAG, "leave wc_esp32AesCbcDecrypt");
604613
return ret;
605614
} /* wc_esp32AesCbcDecrypt */

wolfcrypt/src/port/Espressif/esp32_mp.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1839,8 +1839,12 @@ int esp_mp_mulmod(MATH_INT_T* X, MATH_INT_T* Y, MATH_INT_T* M, MATH_INT_T* Z)
18391839
/* do we have an even moduli? */
18401840
if ((M->dp[0] & 1) == 0) {
18411841
#ifndef NO_ESP_MP_MUL_EVEN_ALT_CALC
1842-
/* Z = X * Y mod M in mixed HW & SW*/
1842+
/* Z = X * Y mod M in mixed HW & SW */
1843+
#if defined(NO_WOLFSSL_ESP32_CRYPT_RSA_PRI_MP_MUL)
1844+
ret = mp_mul(X, Y, tmpZ); /* SW X * Y */
1845+
#else
18431846
ret = esp_mp_mul(X, Y, tmpZ); /* HW X * Y */
1847+
#endif
18441848
if (ret == MP_OKAY) {
18451849
/* z = tmpZ mod M, 0 <= Z < M */
18461850
ret = mp_mod(tmpZ, M, Z); /* SW mod M */
@@ -1940,7 +1944,6 @@ int esp_mp_mulmod(MATH_INT_T* X, MATH_INT_T* Y, MATH_INT_T* M, MATH_INT_T* Z)
19401944

19411945
/* lock HW for use, enable peripheral clock */
19421946
if (ret == MP_OKAY) {
1943-
mulmod_lock_called = TRUE; /* Don't try to unlock unless we locked */
19441947
#ifdef WOLFSSL_HW_METRICS
19451948
{
19461949
/* Only track max values when using HW */
@@ -1954,6 +1957,12 @@ int esp_mp_mulmod(MATH_INT_T* X, MATH_INT_T* Y, MATH_INT_T* M, MATH_INT_T* Z)
19541957
#endif
19551958

19561959
ret = esp_mp_hw_lock();
1960+
if (ret == ESP_OK) {
1961+
mulmod_lock_called = TRUE; /* Don't try to unlock unless locked */
1962+
}
1963+
else {
1964+
ret = WC_HW_WAIT_E;
1965+
}
19571966
}
19581967

19591968
#if defined(CONFIG_IDF_TARGET_ESP32)
@@ -2441,14 +2450,14 @@ int esp_mp_mulmod(MATH_INT_T* X, MATH_INT_T* Y, MATH_INT_T* M, MATH_INT_T* Z)
24412450
esp_mp_mulmod_usage_ct);
24422451
ESP_LOGI(TAG, "esp_mp_mulmod_error_ct = %lu failures",
24432452
esp_mp_mulmod_error_ct);
2444-
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE);
2453+
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE);
24452454
esp_show_mp("HW Z", Z); /* this is the HW result */
24462455
esp_show_mp("SW Z2", Z2); /* this is the SW result */
24472456
ESP_LOGI(TAG, "esp_mp_mulmod_usage_ct = %lu tries",
24482457
esp_mp_mulmod_usage_ct);
24492458
ESP_LOGI(TAG, "esp_mp_mulmod_error_ct = %lu failures",
24502459
esp_mp_mulmod_error_ct);
2451-
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE);
2460+
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE);
24522461

24532462

24542463
#ifndef NO_RECOVER_SOFTWARE_CALC
@@ -2991,7 +3000,7 @@ int esp_hw_show_mp_metrics(void)
29913000
"NO_WOLFSSL_ESP32_CRYPT_RSA_PRI_MP_MUL");
29923001
#else
29933002
/* Metrics: esp_mp_mul() */
2994-
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE); /* mul follows */
3003+
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE); /* mul follows */
29953004
ESP_LOGI(TAG, "esp_mp_mul HW acceleration enabled.");
29963005
ESP_LOGI(TAG, "Number of calls to esp_mp_mul: %lu",
29973006
esp_mp_mul_usage_ct);
@@ -3010,7 +3019,7 @@ int esp_hw_show_mp_metrics(void)
30103019
"NO_WOLFSSL_ESP32_CRYPT_RSA_PRI_MULMOD");
30113020
#else
30123021
/* Metrics: esp_mp_mulmod() */
3013-
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE); /* mulmod follows */
3022+
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE); /* mulmod follows */
30143023

30153024
ESP_LOGI(TAG, "esp_mp_mulmod HW acceleration enabled.");
30163025
/* Metrics: esp_mp_mulmod() */
@@ -3052,7 +3061,7 @@ int esp_hw_show_mp_metrics(void)
30523061
"NO_WOLFSSL_ESP32_CRYPT_RSA_PRI_EXPTMOD");
30533062
#else
30543063
/* Metrics: sp_mp_exptmod() */
3055-
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE); /* exptmod follows */
3064+
ESP_LOGI(TAG, WOLFSSL_ESPIDF_BLANKLINE_MESSAGE); /* exptmod follows */
30563065

30573066
ESP_LOGI(TAG, "Number of calls to esp_mp_exptmod: %lu",
30583067
esp_mp_exptmod_usage_ct);

0 commit comments

Comments
 (0)