forked from wolfSSL/wolfssl
Fixes to support larger H5 save/restore and larger digest result (for SHA2-512).
This commit is contained in:
@@ -164,22 +164,25 @@ static void wc_Stm32_Hash_RestoreContext(STM32_HASH_Context* ctx, int algo)
|
||||
static void wc_Stm32_Hash_GetDigest(byte* hash, int digestSize)
|
||||
{
|
||||
word32 digest[HASH_MAX_DIGEST/sizeof(word32)];
|
||||
int i = 0, sz;
|
||||
|
||||
/* get digest result */
|
||||
digest[0] = HASH->HR[0];
|
||||
digest[1] = HASH->HR[1];
|
||||
digest[2] = HASH->HR[2];
|
||||
digest[3] = HASH->HR[3];
|
||||
if (digestSize >= 20) {
|
||||
digest[4] = HASH->HR[4];
|
||||
if (digestSize > HASH_MAX_DIGEST)
|
||||
digestSize = HASH_MAX_DIGEST;
|
||||
|
||||
sz = digestSize;
|
||||
while (sz > 0) {
|
||||
/* first 20 bytes come from instance HR */
|
||||
if (i < 5) {
|
||||
digest[i] = HASH->HR[i];
|
||||
}
|
||||
#ifdef HASH_DIGEST
|
||||
if (digestSize >= 28) {
|
||||
digest[5] = HASH_DIGEST->HR[5];
|
||||
digest[6] = HASH_DIGEST->HR[6];
|
||||
if (digestSize == 32)
|
||||
digest[7] = HASH_DIGEST->HR[7];
|
||||
/* reset comes from HASH_DIGEST */
|
||||
else {
|
||||
digest[i] = HASH_DIGEST->HR[i];
|
||||
}
|
||||
#endif
|
||||
i++;
|
||||
sz -= 4;
|
||||
}
|
||||
|
||||
ByteReverseWords(digest, digest, digestSize);
|
||||
@@ -202,11 +205,14 @@ static int wc_Stm32_Hash_WaitDone(STM32_HASH_Context* stmCtx)
|
||||
int timeout = 0;
|
||||
(void)stmCtx;
|
||||
|
||||
/* wait until hash digest is complete */
|
||||
/* wait until not busy and hash digest / input block are complete */
|
||||
while ((HASH->SR & HASH_SR_BUSY) &&
|
||||
#ifdef HASH_IMR_DCIE
|
||||
(HASH->SR & HASH_SR_DCIS) == 0 &&
|
||||
#endif
|
||||
#ifdef HASH_IMR_DINIE
|
||||
(HASH->SR & HASH_SR_DINIS) == 0 &&
|
||||
#endif
|
||||
++timeout < STM32_HASH_TIMEOUT) {
|
||||
};
|
||||
|
||||
|
@@ -35,10 +35,15 @@
|
||||
#ifdef HASH_DIGEST
|
||||
/* The HASH_DIGEST register indicates SHA224/SHA256 support */
|
||||
#define STM32_HASH_SHA2
|
||||
#define HASH_CR_SIZE 54
|
||||
#define HASH_MAX_DIGEST 32
|
||||
#if defined(WOLFSSL_STM32H5)
|
||||
#define HASH_CR_SIZE 103
|
||||
#define HASH_MAX_DIGEST 64 /* Up to SHA512 */
|
||||
#else
|
||||
#define HASH_CR_SIZE 54
|
||||
#define HASH_MAX_DIGEST 32
|
||||
#endif
|
||||
#else
|
||||
#define HASH_CR_SIZE 50
|
||||
#define HASH_CR_SIZE 50
|
||||
#define HASH_MAX_DIGEST 20
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user