|
1 | 1 | use core::borrow::{Borrow, BorrowMut}; |
| 2 | +use core::array; |
| 3 | +use core::fmt::{Debug, Formatter, Result}; |
2 | 4 | use core::mem::{size_of, transmute}; |
3 | 5 |
|
4 | 6 | use p3_util::indices_arr; |
@@ -62,24 +64,43 @@ pub struct KeccakCols<T> { |
62 | 64 | pub a_prime_prime_prime_0_0_limbs: [T; U64_LIMBS], |
63 | 65 | } |
64 | 66 |
|
65 | | -impl<T: Default + Copy> Default for KeccakCols<T> { |
| 67 | +impl<T: Default> Default for KeccakCols<T> { |
66 | 68 | fn default() -> Self { |
67 | 69 | Self { |
68 | | - step_flags: [T::default(); NUM_ROUNDS], |
| 70 | + step_flags: array::from_fn(|_| T::default()), |
69 | 71 | export: T::default(), |
70 | | - preimage: [[[T::default(); U64_LIMBS]; 5]; 5], |
71 | | - postimage: [[[T::default(); U64_LIMBS]; 5]; 5], |
72 | | - a: [[[T::default(); U64_LIMBS]; 5]; 5], |
73 | | - c: [[T::default(); 64]; 5], |
74 | | - c_prime: [[T::default(); 64]; 5], |
75 | | - a_prime: [[[T::default(); 64]; 5]; 5], |
76 | | - a_prime_prime: [[[T::default(); U64_LIMBS]; 5]; 5], |
77 | | - a_prime_prime_0_0_bits: [T::default(); 64], |
78 | | - a_prime_prime_prime_0_0_limbs: [T::default(); U64_LIMBS], |
| 72 | + preimage: array::from_fn(|_| array::from_fn(|_| array::from_fn(|_| T::default()))), |
| 73 | + postimage: array::from_fn(|_| array::from_fn(|_| array::from_fn(|_| T::default()))), |
| 74 | + a: array::from_fn(|_| array::from_fn(|_| array::from_fn(|_| T::default()))), |
| 75 | + c: array::from_fn(|_| array::from_fn(|_| T::default())), |
| 76 | + c_prime: array::from_fn(|_| array::from_fn(|_| T::default())), |
| 77 | + a_prime: array::from_fn(|_| array::from_fn(|_| array::from_fn(|_| T::default()))), |
| 78 | + a_prime_prime: array::from_fn(|_| array::from_fn(|_| array::from_fn(|_| T::default()))), |
| 79 | + a_prime_prime_0_0_bits: array::from_fn(|_| T::default()), |
| 80 | + a_prime_prime_prime_0_0_limbs: array::from_fn(|_| T::default()), |
79 | 81 | } |
80 | 82 | } |
81 | 83 | } |
82 | 84 |
|
| 85 | +impl<T: Debug> Debug for KeccakCols<T> { |
| 86 | + fn fmt(&self, f: &mut Formatter<'_>) -> Result { |
| 87 | + f.debug_struct("KeccakCols") |
| 88 | + .field("step_flags", &self.step_flags) |
| 89 | + .field("export", &self.export) |
| 90 | + .field("preimage", &self.preimage) |
| 91 | + .field("postimage", &self.postimage) |
| 92 | + .field("a", &self.a) |
| 93 | + .field("c", &self.c) |
| 94 | + .field("c_prime", &self.c_prime) |
| 95 | + .field("a_prime", &self.a_prime) |
| 96 | + .field("a_prime_prime", &self.a_prime_prime) |
| 97 | + .field("a_prime_prime_0_0_bits", &self.a_prime_prime_0_0_bits) |
| 98 | + .field("a_prime_prime_prime_0_0_limbs", &self.a_prime_prime_prime_0_0_limbs) |
| 99 | + .finish() |
| 100 | + } |
| 101 | +} |
| 102 | + |
| 103 | + |
83 | 104 | impl<T: Copy> KeccakCols<T> { |
84 | 105 | pub fn b(&self, x: usize, y: usize, z: usize) -> T { |
85 | 106 | debug_assert!(x < 5); |
|
0 commit comments