From 17519f46c6eb8df7bfa83b109f03433176d96b1a Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Tue, 28 Feb 2023 14:09:08 -0700 Subject: [PATCH] ascon: use `chunks_exact` for decoding permutation input (#47) --- ascon/src/lib.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ascon/src/lib.rs b/ascon/src/lib.rs index 6a6a390..b0415f5 100644 --- a/ascon/src/lib.rs +++ b/ascon/src/lib.rs @@ -105,14 +105,20 @@ impl Ascon { } /// Ascon permutation. +// TODO(tarcieri): change `s` to `&mut [u8; 40]` fn permutation(s: &mut [u8], start: usize, rounds: usize) { let mut x = [0; 5]; let mut t = [0; 5]; + assert_eq!(s.len(), 8 * x.len()); + + // TODO(tarcieri): use `array_chunks` to eliminate `unwrap` #[allow(clippy::unwrap_used)] - for (i, b) in x.iter_mut().enumerate() { - *b = u64::from_be_bytes(s[(i * 8)..((i + 1) * 8)].try_into().unwrap()); - } + s.chunks_exact(8) + .map(|c| c.try_into().unwrap()) + .map(u64::from_be_bytes) + .zip(x.iter_mut()) + .for_each(|(inp, out)| *out = inp); for i in start as u64..(start + rounds) as u64 { x[2] ^= ((0xfu64 - i) << 4) | i;