diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-02-06 16:57:28 +0000 |
---|---|---|
committer | Dag-Erling Smørgrav <des@FreeBSD.org> | 2023-02-09 20:32:56 +0000 |
commit | b9e0160e07882ff62df7c31695e18c3197cea8b9 (patch) | |
tree | b9447f3477ca62e3c89da9a57283df3f136e2d17 | |
parent | d6d22a4530f9c55fc7a48deaf19d2ba7047bff1a (diff) | |
download | src-b9e0160e07882ff62df7c31695e18c3197cea8b9.tar.gz src-b9e0160e07882ff62df7c31695e18c3197cea8b9.zip |
sha512_224: Fix SHA512_224_Final() on little-endian machines.
PR: 266863
MFC after: 1 week
Reviewed by: allanjude, cperciva, des
Differential Revision: https://reviews.freebsd.org/D38372
(cherry picked from commit 6680cfe8e0eec4427716ab50d73ab8231dd9ab28)
-rw-r--r-- | sys/crypto/sha2/sha512c.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/crypto/sha2/sha512c.c b/sys/crypto/sha2/sha512c.c index f18a7e6fa994..4533632500f2 100644 --- a/sys/crypto/sha2/sha512c.c +++ b/sys/crypto/sha2/sha512c.c @@ -60,23 +60,26 @@ __FBSDID("$FreeBSD$"); #else /* BYTE_ORDER != BIG_ENDIAN */ /* - * Encode a length len/4 vector of (uint64_t) into a length len vector of - * (unsigned char) in big-endian form. Assumes len is a multiple of 8. + * Encode a length (len + 7) / 8 vector of (uint64_t) into a length len + * vector of (unsigned char) in big-endian form. Assumes len is a + * multiple of 4. */ -static void +static inline void be64enc_vect(unsigned char *dst, const uint64_t *src, size_t len) { size_t i; for (i = 0; i < len / 8; i++) be64enc(dst + i * 8, src[i]); + if (len % 8 == 4) + be32enc(dst + i * 8, src[i] >> 32); } /* * Decode a big-endian length len vector of (unsigned char) into a length - * len/4 vector of (uint64_t). Assumes len is a multiple of 8. + * len/8 vector of (uint64_t). Assumes len is a multiple of 8. */ -static void +static inline void be64dec_vect(uint64_t *dst, const unsigned char *src, size_t len) { size_t i; |