diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index 4903ac9ea..0db43f0ec 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -2175,10 +2175,16 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) { - int i; - - for (i = 0; i< sz; i++) { - output[i] = esp_random( ); + word32 rand; + while (sz > 0) { + word32 len = sizeof(rand); + if (sz < len) + len = sz; + /* Get one random 32-bit word from hw RNG */ + rand = esp_random( ); + XMEMCPY(output, &rand, sz); + output += len; + sz -= len; } return 0; diff --git a/wolfcrypt/src/sha512.c b/wolfcrypt/src/sha512.c index 8d094eae8..f327df978 100644 --- a/wolfcrypt/src/sha512.c +++ b/wolfcrypt/src/sha512.c @@ -752,6 +752,9 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512) defined(NO_WOLFSSL_ESP32WROOM32_CRYPT_HASH) ret = Transform_Sha512(sha512); #else + if(sha512->ctx.mode == ESP32_SHA_INIT) { + esp_sha_try_hw_lock(&sha512->ctx); + } ret = esp_sha512_process(sha512); if(ret == 0 && sha512->ctx.mode == ESP32_SHA_SW){ ret = Transform_Sha512(sha512);