diff --git a/wolfcrypt/src/misc.c b/wolfcrypt/src/misc.c index 598545697..cf9fe4ee1 100644 --- a/wolfcrypt/src/misc.c +++ b/wolfcrypt/src/misc.c @@ -187,11 +187,32 @@ WC_STATIC WC_INLINE word32 ByteReverseWord32(word32 value) WC_STATIC WC_INLINE void ByteReverseWords(word32* out, const word32* in, word32 byteCount) { - word32 count = byteCount/(word32)sizeof(word32), i; + word32 count, i; - for (i = 0; i < count; i++) - out[i] = ByteReverseWord32(in[i]); +#ifdef WOLFSSL_USE_ALIGN + if ((((size_t)in & 0x3) == 0) && + (((size_t)out & 0x3) == 0)) + { +#endif + count = byteCount/(word32)sizeof(word32); + for (i = 0; i < count; i++) + out[i] = ByteReverseWord32(in[i]); +#ifdef WOLFSSL_USE_ALIGN + } + else { + byte *in_bytes = (byte *)in; + byte *out_bytes = (byte *)out; + word32 scratch; + byteCount &= ~0x3U; + + for (i = 0; i < byteCount; i += sizeof(word32)) { + XMEMCPY(&scratch, in_bytes + i, sizeof(scratch)); + scratch = ByteReverseWord32(scratch); + XMEMCPY(out_bytes + i, &scratch, sizeof(scratch)); + } + } +#endif } #if defined(WORD64_AVAILABLE) && !defined(WOLFSSL_NO_WORD64_OPS) diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index 61d59a57f..e4c961d9a 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -766,10 +766,10 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #elif defined(WOLFSSL_DEOS) || defined(WOLFSSL_DEOS_RTEMS) #include - #ifndef XTIME - extern time_t deos_time(time_t* timer); - #define XTIME(t1) deos_time((t1)) - #endif + #ifndef XTIME + extern time_t deos_time(time_t* timer); + #define XTIME(t1) deos_time((t1)) + #endif #elif defined(MICRIUM) #include #include