From f63eb6de0541714b50df1d971108a62d20a0540a Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Sat, 2 Mar 2024 12:34:35 -0500 Subject: sha3.c: parameterize turboshake --- sha3.c | 84 +++++++++++++++++++++++++++--------------------------------------- 1 file changed, 34 insertions(+), 50 deletions(-) diff --git a/sha3.c b/sha3.c index 074d7aa..50c6843 100644 --- a/sha3.c +++ b/sha3.c @@ -1493,57 +1493,41 @@ static inline _Bool turboshake_init(turboshake_t * const ts, const uint8_t pad) return true; } -// init turboeshake128 context with custom pad byte. returns false if the -// pad byte is out of range. -_Bool turboshake128_init_custom(turboshake_t * const ts, const uint8_t pad) { - return turboshake_init(ts, pad); -} - -// init turboeshake128 context. -void turboshake128_init(turboshake_t * const ts) { - (void) turboshake_init(ts, TURBOSHAKE_PAD); -} - -// absorb bytes into turboshake128 context. -_Bool turboshake128_absorb(turboshake_t * const ts, const uint8_t * const m, const size_t len) { - return xof_absorb(&(ts->xof), SHAKE128_RATE, TURBOSHAKE_NUM_ROUNDS, m, len); -} - -void turboshake128_squeeze(turboshake_t * const ts, uint8_t * const dst, const size_t dst_len) { - xof_squeeze(&(ts->xof), SHAKE128_RATE, TURBOSHAKE_NUM_ROUNDS, ts->pad, dst, dst_len); -} - -void turboshake128(const uint8_t * const src, const size_t src_len, uint8_t * const dst, const size_t dst_len) { - xof_once(SHAKE128_RATE, TURBOSHAKE_NUM_ROUNDS, TURBOSHAKE_PAD, src, src_len, dst, dst_len); -} - -void turboshake128_custom(const uint8_t pad, const uint8_t * const src, const size_t src_len, uint8_t * const dst, const size_t dst_len) { - xof_once(SHAKE128_RATE, TURBOSHAKE_NUM_ROUNDS, pad, src, src_len, dst, dst_len); -} - -_Bool turboshake256_init_custom(turboshake_t * const ts, const uint8_t pad) { - return turboshake_init(ts, pad); -} - -void turboshake256_init(turboshake_t * const ts) { - (void) turboshake_init(ts, TURBOSHAKE_PAD); -} - -_Bool turboshake256_absorb(turboshake_t * const ts, const uint8_t * const m, const size_t len) { - return xof_absorb(&(ts->xof), SHAKE256_RATE, TURBOSHAKE_NUM_ROUNDS, m, len); -} - -void turboshake256_squeeze(turboshake_t * const ts, uint8_t * const dst, const size_t dst_len) { - xof_squeeze(&(ts->xof), SHAKE256_RATE, TURBOSHAKE_NUM_ROUNDS, ts->pad, dst, dst_len); -} - -void turboshake256(const uint8_t * const src, const size_t src_len, uint8_t * const dst, const size_t dst_len) { - xof_once(SHAKE256_RATE, TURBOSHAKE_NUM_ROUNDS, TURBOSHAKE_PAD, src, src_len, dst, dst_len); -} +#define DEF_TURBOSHAKE(BITS) \ + /* init turboshake context with custom pad byte. returns false if the */ \ + /* pad byte is out of range. */ \ + _Bool turboshake ## BITS ## _init_custom(turboshake_t * const ts, const uint8_t pad) { \ + return turboshake_init(ts, pad); \ + } \ + \ + /* init turboshake context */ \ + void turboshake ## BITS ## _init(turboshake_t * const ts) { \ + (void) turboshake_init(ts, TURBOSHAKE_PAD); \ + } \ + \ + /* absorb bytes into turboshake context. */ \ + _Bool turboshake ## BITS ## _absorb(turboshake_t * const ts, const uint8_t * const m, const size_t len) { \ + return xof_absorb(&(ts->xof), SHAKE ## BITS ## _RATE, TURBOSHAKE_NUM_ROUNDS, m, len); \ + } \ + \ + /* squeeze bytes from turboshake context */ \ + void turboshake ## BITS ## _squeeze(turboshake_t * const ts, uint8_t * const dst, const size_t dst_len) { \ + xof_squeeze(&(ts->xof), SHAKE ## BITS ## _RATE, TURBOSHAKE_NUM_ROUNDS, ts->pad, dst, dst_len); \ + } \ + \ + /* one-shot turboshake with default pad byte */ \ + void turboshake ## BITS (const uint8_t * const src, const size_t src_len, uint8_t * const dst, const size_t dst_len) { \ + xof_once(SHAKE ## BITS ## _RATE, TURBOSHAKE_NUM_ROUNDS, TURBOSHAKE_PAD, src, src_len, dst, dst_len); \ + } \ + \ + /* one-shot turboshake with custom pad byte */ \ + void turboshake ## BITS ## _custom(const uint8_t pad, const uint8_t * const src, const size_t src_len, uint8_t * const dst, const size_t dst_len) { \ + xof_once(SHAKE ## BITS ## _RATE, TURBOSHAKE_NUM_ROUNDS, pad, src, src_len, dst, dst_len); \ + } -void turboshake256_custom(const uint8_t pad, const uint8_t * const src, const size_t src_len, uint8_t * const dst, const size_t dst_len) { - xof_once(SHAKE256_RATE, TURBOSHAKE_NUM_ROUNDS, pad, src, src_len, dst, dst_len); -} +// define turboshakes +DEF_TURBOSHAKE(128) // turboshake128 +DEF_TURBOSHAKE(256) // turboshake128 // kangarootwelve block size, in bytes #define K12_BLOCK_LEN 8192 -- cgit v1.2.3