wolfcrypt/src/misc.c ByteReverseWords(): fix misaligned word accesses under armv7a-asm.

pull/5634/head
Daniel Pouzzner 2022-09-27 02:02:31 -05:00
parent 1ffe4275ae
commit cfe0278d35
1 changed files with 24 additions and 3 deletions

View File

@ -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 ((((unsigned long)in & 0x3) == 0) &&
(((unsigned long)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)