#[repr(C)]pub struct KeccakCols<T> {
pub step_flags: [T; 24],
pub export: T,
pub preimage: [[[T; 4]; 5]; 5],
pub a: [[[T; 4]; 5]; 5],
pub c: [[T; 64]; 5],
pub c_prime: [[T; 64]; 5],
pub a_prime: [[[T; 64]; 5]; 5],
pub a_prime_prime: [[[T; 4]; 5]; 5],
pub a_prime_prime_0_0_bits: [T; 64],
pub a_prime_prime_prime_0_0_limbs: [T; 4],
}
Expand description
Note: The ordering of each array is based on the input mapping. As the spec says,
The mapping between the bits of s and those of a is
s[w(5y + x) + z] = a[x][y][z]
.
Thus, for example, a_prime
is stored in y, x, z
order. This departs from the more common
convention of x, y, z
order, but it has the benefit that input lists map to AIR columns in a
nicer way.
Fields§
§step_flags: [T; 24]
The i
th value is set to 1 if we are in the i
th round, otherwise 0.
export: T
A register which indicates if a row should be exported, i.e. included in a multiset equality
argument. Should be 1 only for certain rows which are final steps, i.e. with
step_flags[23] = 1
.
preimage: [[[T; 4]; 5]; 5]
Permutation inputs, stored in y-major order.
a: [[[T; 4]; 5]; 5]
§c: [[T; 64]; 5]
ⓘ
C[x] = xor(A[x, 0], A[x, 1], A[x, 2], A[x, 3], A[x, 4])
c_prime: [[T; 64]; 5]
ⓘ
C'[x, z] = xor(C[x, z], C[x - 1, z], C[x + 1, z - 1])
a_prime: [[[T; 64]; 5]; 5]
ⓘ
A'[x, y] = xor(A[x, y], D[x])
= xor(A[x, y], C[x - 1], ROT(C[x + 1], 1))
a_prime_prime: [[[T; 4]; 5]; 5]
ⓘ
A''[x, y] = xor(B[x, y], andn(B[x + 1, y], B[x + 2, y])).
a_prime_prime_0_0_bits: [T; 64]
The bits of A''[0, 0]
.
a_prime_prime_prime_0_0_limbs: [T; 4]
ⓘ
A'''[0, 0, z] = A''[0, 0, z] ^ RC[k, z]
Implementations§
Trait Implementations§
Source§impl<T> Borrow<KeccakCols<T>> for [T]
impl<T> Borrow<KeccakCols<T>> for [T]
Source§fn borrow(&self) -> &KeccakCols<T>
fn borrow(&self) -> &KeccakCols<T>
Immutably borrows from an owned value. Read more
Source§impl<T> BorrowMut<KeccakCols<T>> for [T]
impl<T> BorrowMut<KeccakCols<T>> for [T]
Source§fn borrow_mut(&mut self) -> &mut KeccakCols<T>
fn borrow_mut(&mut self) -> &mut KeccakCols<T>
Mutably borrows from an owned value. Read more
Auto Trait Implementations§
impl<T> Freeze for KeccakCols<T>where
T: Freeze,
impl<T> RefUnwindSafe for KeccakCols<T>where
T: RefUnwindSafe,
impl<T> Send for KeccakCols<T>where
T: Send,
impl<T> Sync for KeccakCols<T>where
T: Sync,
impl<T> Unpin for KeccakCols<T>where
T: Unpin,
impl<T> UnwindSafe for KeccakCols<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more