From: Nick Mathewson Date: Thu, 22 May 2025 13:54:09 +0000 (-0400) Subject: Fix a bug with less optimized polyval variants. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7adb60c1c700abb2e1b69943737a17bfbb63a30b;p=thirdparty%2Ftor.git Fix a bug with less optimized polyval variants. Using "0" to mean "doesn't support multi-block processing" ran us into trouble: (n > 0 * 16) is always true for n > 0, so we were always running a loop with no termination condition. Additionally, the >s in this block should have been >=s, since we want to process multi-blocks as long as there are any. This won't have a performance impact for our current input sizes, but it's nice to be correct. --- diff --git a/src/ext/polyval/polyval.c b/src/ext/polyval/polyval.c index ae27377a7b..900a50385b 100644 --- a/src/ext/polyval/polyval.c +++ b/src/ext/polyval/polyval.c @@ -235,6 +235,11 @@ static inline void expand_key_none(const polyval_t *inp, (void) out; } +/* Kludge: a special value to use for block_stride when we don't support + * processing multiple blocks at once. Previously we used 0, but that + * caused warnings with some comparisons. */ +#define BLOCK_STRIDE_NONE 0xffff + #define PV_DECLARE(prefix, \ st, \ u128_from_bytes, \ @@ -270,10 +275,12 @@ static inline void expand_key_none(const polyval_t *inp, st void \ prefix ## polyval_add_zpad(polyval_t *pv, const uint8_t *data, size_t n) \ { \ - if (n > block_stride * 16) { \ + /* since block_stride is a constant, this should get optimized */ \ + if ((block_stride != BLOCK_STRIDE_NONE) \ + && n >= (block_stride) * 16) { \ expanded_key_tp expanded_key; \ expand_fn(pv, &expanded_key); \ - while (n > block_stride * 16) { \ + while (n >= (block_stride) * 16) { \ add_multiple_fn(pv, data, &expanded_key); \ n -= block_stride*16; \ data += block_stride * 16; \ @@ -326,7 +333,7 @@ PV_DECLARE(ctmul64_, static, u128_to_bytes_ctmul64, pv_xor_y_ctmul64, pv_mul_y_h_ctmul64, - 0, + BLOCK_STRIDE_NONE, struct expanded_key_none, expand_key_none, add_multiple_none) @@ -404,7 +411,7 @@ PV_DECLARE(, , u128_to_bytes_ctmul64, pv_xor_y_ctmul64, pv_mul_y_h_ctmul64, - 0, + BLOCK_STRIDE_NONE, struct expanded_key_none, expand_key_none, add_multiple_none) @@ -414,7 +421,7 @@ PV_DECLARE(, , u128_from_bytes_ctmul, u128_to_bytes_ctmul, pv_xor_y_ctmul, pv_mul_y_h_ctmul, - 0, + BLOCK_STRIDE_NONE, struct expanded_key_none, expand_key_none, add_multiple_none)