openvm_keccak256_circuit/
lib.rs1#![cfg_attr(feature = "tco", allow(incomplete_features))]
2#![cfg_attr(feature = "tco", feature(explicit_tail_calls))]
3use openvm_circuit_primitives::bitwise_op_lookup::SharedBitwiseOperationLookupChip;
7
8pub mod air;
9pub mod columns;
10pub mod execution;
11pub mod trace;
12pub mod utils;
13
14#[cfg(feature = "cuda")]
15mod cuda;
16#[cfg(feature = "cuda")]
17pub use cuda::*;
18
19mod extension;
20#[cfg(test)]
21mod tests;
22pub use air::KeccakVmAir;
23pub use extension::*;
24use openvm_circuit::arch::*;
25
26const KECCAK_REGISTER_READS: usize = 3;
29const KECCAK_WORD_SIZE: usize = 4;
31const KECCAK_ABSORB_READS: usize = KECCAK_RATE_BYTES / KECCAK_WORD_SIZE;
33const KECCAK_DIGEST_WRITES: usize = KECCAK_DIGEST_BYTES / KECCAK_WORD_SIZE;
35
36pub const KECCAK_WIDTH_BYTES: usize = 200;
40pub const KECCAK_WIDTH_U16S: usize = KECCAK_WIDTH_BYTES / 2;
42pub const KECCAK_RATE_BYTES: usize = 136;
44pub const KECCAK_RATE_U16S: usize = KECCAK_RATE_BYTES / 2;
46pub const NUM_ABSORB_ROUNDS: usize = KECCAK_RATE_BYTES / 8;
48pub const KECCAK_CAPACITY_BYTES: usize = 64;
50pub const KECCAK_CAPACITY_U16S: usize = KECCAK_CAPACITY_BYTES / 2;
52pub const KECCAK_DIGEST_BYTES: usize = 32;
54pub const KECCAK_DIGEST_U64S: usize = KECCAK_DIGEST_BYTES / 8;
56
57pub type KeccakVmChip<F> = VmChipWrapper<F, KeccakVmFiller>;
58
59#[derive(derive_new::new, Clone, Copy)]
60pub struct KeccakVmExecutor {
61 pub offset: usize,
62 pub pointer_max_bits: usize,
63}
64
65#[derive(derive_new::new)]
66pub struct KeccakVmFiller {
67 pub bitwise_lookup_chip: SharedBitwiseOperationLookupChip<8>,
68 pub pointer_max_bits: usize,
69}