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", feature(core_intrinsics))]
4use openvm_circuit_primitives::bitwise_op_lookup::SharedBitwiseOperationLookupChip;
8
9pub mod air;
10pub mod columns;
11pub mod execution;
12pub mod trace;
13pub mod utils;
14
15#[cfg(feature = "cuda")]
16mod cuda;
17#[cfg(feature = "cuda")]
18pub use cuda::*;
19
20mod extension;
21#[cfg(test)]
22mod tests;
23pub use air::KeccakVmAir;
24pub use extension::*;
25use openvm_circuit::arch::*;
26
27const KECCAK_REGISTER_READS: usize = 3;
30const KECCAK_WORD_SIZE: usize = 4;
32const KECCAK_ABSORB_READS: usize = KECCAK_RATE_BYTES / KECCAK_WORD_SIZE;
34const KECCAK_DIGEST_WRITES: usize = KECCAK_DIGEST_BYTES / KECCAK_WORD_SIZE;
36
37pub const KECCAK_WIDTH_BYTES: usize = 200;
41pub const KECCAK_WIDTH_U16S: usize = KECCAK_WIDTH_BYTES / 2;
43pub const KECCAK_RATE_BYTES: usize = 136;
45pub const KECCAK_RATE_U16S: usize = KECCAK_RATE_BYTES / 2;
47pub const NUM_ABSORB_ROUNDS: usize = KECCAK_RATE_BYTES / 8;
49pub const KECCAK_CAPACITY_BYTES: usize = 64;
51pub const KECCAK_CAPACITY_U16S: usize = KECCAK_CAPACITY_BYTES / 2;
53pub const KECCAK_DIGEST_BYTES: usize = 32;
55pub const KECCAK_DIGEST_U64S: usize = KECCAK_DIGEST_BYTES / 8;
57
58pub type KeccakVmChip<F> = VmChipWrapper<F, KeccakVmFiller>;
59
60#[derive(derive_new::new, Clone, Copy)]
61pub struct KeccakVmExecutor {
62 pub offset: usize,
63 pub pointer_max_bits: usize,
64}
65
66#[derive(derive_new::new)]
67pub struct KeccakVmFiller {
68 pub bitwise_lookup_chip: SharedBitwiseOperationLookupChip<8>,
69 pub pointer_max_bits: usize,
70}