mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 19:24:42 +02:00
wolfcrypt/src/sha512.c: in Sha512FinalRaw() and wc_Sha384FinalRaw(), refactor out the scratch digest -- ByteReverseWords64() is safe in-place, and the scratch digest caused a SEGV in the XMEMCPY() on AVX512-capable targets built with gcc -march=native unless XALIGN(64), due to gcc bug(s).
This commit is contained in:
@@ -1402,22 +1402,16 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512)
|
|||||||
|
|
||||||
static int Sha512FinalRaw(wc_Sha512* sha512, byte* hash, size_t digestSz)
|
static int Sha512FinalRaw(wc_Sha512* sha512, byte* hash, size_t digestSz)
|
||||||
{
|
{
|
||||||
#ifdef LITTLE_ENDIAN_ORDER
|
|
||||||
word64 digest[WC_SHA512_DIGEST_SIZE / sizeof(word64)];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (sha512 == NULL || hash == NULL) {
|
if (sha512 == NULL || hash == NULL) {
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LITTLE_ENDIAN_ORDER
|
#ifdef LITTLE_ENDIAN_ORDER
|
||||||
ByteReverseWords64((word64*)digest, (word64*)sha512->digest,
|
ByteReverseWords64(sha512->digest, sha512->digest, WC_SHA512_DIGEST_SIZE);
|
||||||
WC_SHA512_DIGEST_SIZE);
|
|
||||||
XMEMCPY(hash, digest, digestSz);
|
|
||||||
#else
|
|
||||||
XMEMCPY(hash, sha512->digest, digestSz);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
XMEMCPY(hash, sha512->digest, digestSz);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1807,22 +1801,16 @@ int wc_Sha384Update(wc_Sha384* sha384, const byte* data, word32 len)
|
|||||||
|
|
||||||
int wc_Sha384FinalRaw(wc_Sha384* sha384, byte* hash)
|
int wc_Sha384FinalRaw(wc_Sha384* sha384, byte* hash)
|
||||||
{
|
{
|
||||||
#ifdef LITTLE_ENDIAN_ORDER
|
|
||||||
word64 digest[WC_SHA384_DIGEST_SIZE / sizeof(word64)];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (sha384 == NULL || hash == NULL) {
|
if (sha384 == NULL || hash == NULL) {
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LITTLE_ENDIAN_ORDER
|
#ifdef LITTLE_ENDIAN_ORDER
|
||||||
ByteReverseWords64((word64*)digest, (word64*)sha384->digest,
|
ByteReverseWords64(sha384->digest, sha384->digest, WC_SHA384_DIGEST_SIZE);
|
||||||
WC_SHA384_DIGEST_SIZE);
|
|
||||||
XMEMCPY(hash, digest, WC_SHA384_DIGEST_SIZE);
|
|
||||||
#else
|
|
||||||
XMEMCPY(hash, sha384->digest, WC_SHA384_DIGEST_SIZE);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
XMEMCPY(hash, sha384->digest, WC_SHA384_DIGEST_SIZE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user