git: 882a725bdfc7 - main - siphash: allow zero values for final & len in SipBuf()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 29 Jul 2024 20:47:49 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=882a725bdfc71b9fc3b70cbcc230327528f3635e commit 882a725bdfc71b9fc3b70cbcc230327528f3635e Author: Mark O'Donovan <shiftee@posteo.net> AuthorDate: 2024-07-11 17:50:31 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2024-07-29 20:44:27 +0000 siphash: allow zero values for final & len in SipBuf() Currently the assert checks for XOR of final and len. This assert fails when running the unit tests in siphash_test.c. We need to allow the case where both values are zero. Signed-off-by: Mark O'Donovan <shiftee@posteo.net> Reviewed by: imp, cperciva Pull Request: https://github.com/freebsd/freebsd-src/pull/1324 --- sys/crypto/siphash/siphash.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sys/crypto/siphash/siphash.c b/sys/crypto/siphash/siphash.c index 92c87d71d391..89b2b18149ef 100644 --- a/sys/crypto/siphash/siphash.c +++ b/sys/crypto/siphash/siphash.c @@ -92,16 +92,21 @@ SipBuf(SIPHASH_CTX *ctx, const uint8_t **src, size_t len, int final) { size_t x = 0; - KASSERT((!final && len > 0) || (final && len == 0), - ("%s: invalid parameters", __func__)); + /* handle hashing 0 length buffer - needed for test vectors */ + if (len == 0 && final == 0) + return (0); - if (!final) { + if (final) { + KASSERT(len == 0, ("%s: invalid len param", __func__)); + ctx->buf.b8[7] = (uint8_t)ctx->bytes; + } else { + KASSERT((len > 0) && src && *src, + ("%s: invalid parameters", __func__)); x = MIN(len, sizeof(ctx->buf.b64) - ctx->buflen); bcopy(*src, &ctx->buf.b8[ctx->buflen], x); ctx->buflen += x; *src += x; - } else - ctx->buf.b8[7] = (uint8_t)ctx->bytes; + } if (ctx->buflen == 8 || final) { ctx->v[3] ^= le64toh(ctx->buf.b64);