Skip to content

Commit 3be2506

Browse files
switched to PrimeField32 and debbuging
1 parent 41daf6b commit 3be2506

File tree

3 files changed

+39
-18
lines changed

3 files changed

+39
-18
lines changed

keccak-air/src/columns.rs

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
use core::borrow::{Borrow, BorrowMut};
2+
use core::array;
3+
use core::fmt::{Debug, Formatter, Result};
24
use core::mem::{size_of, transmute};
35

46
use p3_util::indices_arr;
@@ -62,24 +64,43 @@ pub struct KeccakCols<T> {
6264
pub a_prime_prime_prime_0_0_limbs: [T; U64_LIMBS],
6365
}
6466

65-
impl<T: Default + Copy> Default for KeccakCols<T> {
67+
impl<T: Default> Default for KeccakCols<T> {
6668
fn default() -> Self {
6769
Self {
68-
step_flags: [T::default(); NUM_ROUNDS],
70+
step_flags: array::from_fn(|_| T::default()),
6971
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()),
7981
}
8082
}
8183
}
8284

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+
83104
impl<T: Copy> KeccakCols<T> {
84105
pub fn b(&self, x: usize, y: usize, z: usize) -> T {
85106
debug_assert!(x < 5);

keccak-air/src/generation.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use alloc::vec;
22
use alloc::vec::Vec;
33
use core::iter;
4-
use p3_field::PrimeField64;
4+
use p3_field::PrimeField32;
55
use p3_matrix::dense::RowMajorMatrix;
66
use tracing::instrument;
77

@@ -11,7 +11,7 @@ use crate::logic::{andn, xor};
1111
use crate::{BITS_PER_LIMB, NUM_ROUNDS, U64_LIMBS};
1212

1313
#[instrument(name = "generate Keccak trace", skip_all)]
14-
pub fn generate_trace_rows<F: PrimeField64>(inputs: Vec<[u64; 25]>) -> RowMajorMatrix<F> {
14+
pub fn generate_trace_rows<F: PrimeField32>(inputs: Vec<[u64; 25]>) -> RowMajorMatrix<F> {
1515
let used_rows = inputs.len() * NUM_ROUNDS + 1;
1616
let num_rows = used_rows.next_power_of_two();
1717
let mut trace =
@@ -46,7 +46,7 @@ pub fn generate_trace_rows<F: PrimeField64>(inputs: Vec<[u64; 25]>) -> RowMajorM
4646
}
4747

4848
/// `rows` will normally consist of 24 rows, with an exception for the final row.
49-
fn generate_trace_rows_for_perm<F: PrimeField64>(rows: &mut [KeccakCols<F>], input: [u64; 25]) {
49+
fn generate_trace_rows_for_perm<F: PrimeField32>(rows: &mut [KeccakCols<F>], input: [u64; 25]) {
5050
// Populate the preimage for each row.
5151
for row in rows.iter_mut() {
5252
for y in 0..5 {
@@ -86,7 +86,7 @@ fn generate_trace_rows_for_perm<F: PrimeField64>(rows: &mut [KeccakCols<F>], inp
8686
}
8787
}
8888

89-
fn generate_trace_row_for_round<F: PrimeField64>(row: &mut KeccakCols<F>, round: usize) {
89+
fn generate_trace_row_for_round<F: PrimeField32>(row: &mut KeccakCols<F>, round: usize) {
9090
row.step_flags[round] = F::one();
9191

9292
// Populate C[x] = xor(A[x, 0], A[x, 1], A[x, 2], A[x, 3], A[x, 4]).

keccak-air/src/logic.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
use p3_field::{AbstractField, PrimeField64};
1+
use p3_field::{AbstractField, PrimeField32};
22

3-
pub(crate) fn xor<F: PrimeField64, const N: usize>(xs: [F; N]) -> F {
3+
pub(crate) fn xor<F: PrimeField32, const N: usize>(xs: [F; N]) -> F {
44
xs.into_iter().fold(F::zero(), |acc, x| {
55
debug_assert!(x.is_zero() || x.is_one());
66
F::from_canonical_u64(acc.as_canonical_u64() ^ x.as_canonical_u64())
@@ -17,7 +17,7 @@ pub fn xor3_gen<AF: AbstractField>(x: AF, y: AF, z: AF) -> AF {
1717
xor_gen(x, xor_gen(y, z))
1818
}
1919

20-
pub(crate) fn andn<F: PrimeField64>(x: F, y: F) -> F {
20+
pub(crate) fn andn<F: PrimeField32>(x: F, y: F) -> F {
2121
debug_assert!(x.is_zero() || x.is_one());
2222
debug_assert!(y.is_zero() || y.is_one());
2323
let x = x.as_canonical_u64();

0 commit comments

Comments
 (0)