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;