From 1fbe0cb408a71b014ea7bba7794f33bcb98ca3e4 Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Fri, 30 Apr 2021 08:45:05 +1000 Subject: [PATCH] SHA-3: Aligned access of 64 bit value. --- wolfcrypt/src/sha3.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/wolfcrypt/src/sha3.c b/wolfcrypt/src/sha3.c index b58be411e..97cba7781 100644 --- a/wolfcrypt/src/sha3.c +++ b/wolfcrypt/src/sha3.c @@ -545,13 +545,29 @@ static void BlockSha3(word64 *s) */ static word64 Load64BitBigEndian(const byte* a) { -#ifdef BIG_ENDIAN_ORDER +#if defined(BIG_ENDIAN_ORDER) || (WOLFSSL_GENERAL_ALIGNMENT == 1) word64 n = 0; int i; for (i = 0; i < 8; i++) n |= (word64)a[i] << (8 * i); + return n; +#elif ((WOLFSSL_GENERAL_ALIGNMENT > 0) && (WOLFSSL_GENERAL_ALIGNMENT == 4)) + word64 n; + + n = *(word32*) a; + n |= ((word64)*(word32*)(a + 4)) << 32; + + return n; +#elif ((WOLFSSL_GENERAL_ALIGNMENT > 0) && (WOLFSSL_GENERAL_ALIGNMENT == 2)) + word64 n; + + n = *(word16*) a; + n |= ((word64)*(word16*)(a + 2)) << 16; + n |= ((word64)*(word16*)(a + 4)) << 32; + n |= ((word64)*(word16*)(a + 6)) << 48; + return n; #else return *(const word64*)a;