Merge pull request #7535 from gojimmypi/PR-fix-sha512-endianness

Fix Espressif SHA512 SW fallback endianness
This commit is contained in:
David Garske
2024-05-15 09:04:07 -07:00
committed by GitHub
2 changed files with 34 additions and 7 deletions

View File

@ -131,8 +131,8 @@
#elif defined(CONFIG_IDF_TARGET_ESP32) || \ #elif defined(CONFIG_IDF_TARGET_ESP32) || \
defined(CONFIG_IDF_TARGET_ESP32S2) || \ defined(CONFIG_IDF_TARGET_ESP32S2) || \
defined(CONFIG_IDF_TARGET_ESP32S3) defined(CONFIG_IDF_TARGET_ESP32S3)
/* TODO: SRP Not enabled, known to fail on this target #define WOLFCRYPT_HAVE_SRP
* See https://github.com/wolfSSL/wolfssl/issues/7210 */ #define FP_MAX_BITS (8192 * 2)
#elif defined(CONFIG_IDF_TARGET_ESP32C3) || \ #elif defined(CONFIG_IDF_TARGET_ESP32C3) || \
defined(CONFIG_IDF_TARGET_ESP32H2) defined(CONFIG_IDF_TARGET_ESP32H2)
/* SRP Known to be working on this target::*/ /* SRP Known to be working on this target::*/
@ -750,3 +750,26 @@ Turn on timer debugging (used when CPU cycles not available)
#error "Must define USE_CERT_BUFFERS_2048 or USE_CERT_BUFFERS_1024" #error "Must define USE_CERT_BUFFERS_2048 or USE_CERT_BUFFERS_1024"
#endif #endif
#endif /* Conditional key and cert constant names */ #endif /* Conditional key and cert constant names */
/******************************************************************************
** Sanity Checks
******************************************************************************/
#if defined(CONFIG_ESP_MAIN_TASK_STACK_SIZE)
#if defined(WOLFCRYPT_HAVE_SRP)
#if defined(FP_MAX_BITS)
#if FP_MAX_BITS < (8192 * 2)
#define ESP_SRP_MINIMUM_STACK_8K (24 * 1024)
#else
#define ESP_SRP_MINIMUM_STACK_8K (28 * 1024)
#endif
#else
#error "Please define FP_MAX_BITS when using WOLFCRYPT_HAVE_SRP."
#endif
#if (CONFIG_ESP_MAIN_TASK_STACK_SIZE < ESP_SRP_MINIMUM_STACK)
#warning "WOLFCRYPT_HAVE_SRP enabled with small stack size"
#endif
#endif
#else
#warning "CONFIG_ESP_MAIN_TASK_STACK_SIZE not defined!"
#endif

View File

@ -990,15 +990,17 @@ static WC_INLINE int Sha512Update(wc_Sha512* sha512, const byte* data, word32 le
defined(NO_WOLFSSL_ESP32_CRYPT_HASH_SHA512) defined(NO_WOLFSSL_ESP32_CRYPT_HASH_SHA512)
ret = Transform_Sha512(sha512); ret = Transform_Sha512(sha512);
#else #else
if(sha512->ctx.mode == ESP32_SHA_INIT) { if (sha512->ctx.mode == ESP32_SHA_INIT) {
esp_sha_try_hw_lock(&sha512->ctx); esp_sha_try_hw_lock(&sha512->ctx);
} }
ret = esp_sha512_process(sha512); if (sha512->ctx.mode == ESP32_SHA_SW) {
if(ret == 0 && sha512->ctx.mode == ESP32_SHA_SW){
ByteReverseWords64(sha512->buffer, sha512->buffer, ByteReverseWords64(sha512->buffer, sha512->buffer,
WC_SHA512_BLOCK_SIZE); WC_SHA512_BLOCK_SIZE);
ret = Transform_Sha512(sha512); ret = Transform_Sha512(sha512);
} }
else {
ret = esp_sha512_process(sha512);
}
#endif #endif
if (ret == 0) if (ret == 0)
sha512->buffLen = 0; sha512->buffLen = 0;
@ -1884,7 +1886,8 @@ int wc_Sha512Copy(wc_Sha512* src, wc_Sha512* dst)
ret = wolfAsync_DevCopy(&src->asyncDev, &dst->asyncDev); ret = wolfAsync_DevCopy(&src->asyncDev, &dst->asyncDev);
#endif #endif
#if defined(WOLFSSL_USE_ESP32_CRYPT_HASH_HW) #if defined(WOLFSSL_USE_ESP32_CRYPT_HASH_HW) && \
!defined(NO_WOLFSSL_ESP32_CRYPT_HASH_SHA512)
#if defined(CONFIG_IDF_TARGET_ESP32) #if defined(CONFIG_IDF_TARGET_ESP32)
if (ret == 0) { if (ret == 0) {
ret = esp_sha512_ctx_copy(src, dst); ret = esp_sha512_ctx_copy(src, dst);
@ -2169,7 +2172,8 @@ int wc_Sha384Copy(wc_Sha384* src, wc_Sha384* dst)
ret = wolfAsync_DevCopy(&src->asyncDev, &dst->asyncDev); ret = wolfAsync_DevCopy(&src->asyncDev, &dst->asyncDev);
#endif #endif
#if defined(WOLFSSL_USE_ESP32_CRYPT_HASH_HW) #if defined(WOLFSSL_USE_ESP32_CRYPT_HASH_HW) && \
!defined(NO_WOLFSSL_ESP32_CRYPT_HASH_SHA384)
#if defined(CONFIG_IDF_TARGET_ESP32) #if defined(CONFIG_IDF_TARGET_ESP32)
esp_sha384_ctx_copy(src, dst); esp_sha384_ctx_copy(src, dst);
#elif defined(CONFIG_IDF_TARGET_ESP32C2) || \ #elif defined(CONFIG_IDF_TARGET_ESP32C2) || \