hekate-sha2
Copyright (c) 2026 Andrei Kochergin and Oumuamua Labs.
SHA-256 AIR chiplet for the Hekate ZK proving system.
The chiplet proves the 64 rounds of FIPS 180-4 §6.2.2 over bit-expanded B32 columns: one committed carry word per
32-bit add, Ch and Maj committed, every round root ungated (composition degree 2). A block is 64 / rounds_per_row
rows; the CPU table requests (state_in, block) -> state_out once per block over the sha256_rounds bus and applies
the feed-forward add h_out = h_in + state_out itself through CpuSha256Block, the same split as the Keccak chiplet
and its sponge. Padding and chaining are the CPU table's.
Apple M3 Max, ZK, chiplet mounted into the CPU table, best of three runs (hekate/examples/sha256.rs):
DSC SOD, 40 compressions (2.5 KB), 2 rounds/row, 2^11 rows: 70 ms prove, 9.8 ms verify, 538 KiB proof, 63 MiB
131,072 compressions (8.4 MB), 4 rounds/row, 2^21 rows: 11.57 s prove, 22.5 ms verify, 5,479 KiB proof, 5,216 MiB
Examples
Usage
SHA-256 of one message, one compression per host row, with the chiplet attached as its own table:
use Config;
use errors;
use ColumnType;
use ;
use FixedShape;
use ;
use ;
type F = Block128;
Host row b holds block.write(&mut tb, b, &calls[b]), and the two bits after the block's columns, active and
chain, are one on rows 0..blocks and 0..blocks - 1. calls[b] pairs block b of pad_message(message) with
h_in from calls[b - 1].h_out(), IV for the first, and sha.trace(&calls) is the chiplet trace.
⚠️ Security Warning
This crate has not been audited and may contain bugs and security flaws.