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