Documentation
Hekate documentation: install the Rust zero-knowledge proof engine, write a first program, then learn its tables, chiplets, LogUp buses and prover.
Hekate proves computations in GF(2^128) using Sumcheck + Brakedown PCS with O(N) prover time and O(N) memory. 100 proven bits of soundness.
§ The Hekate Ecosystem
Hekate is not one crate. The prover is the engine; the math core, hardware chiplets, mobile toolchain, and fuzzer ship separately, to compose as needed.
| Crate | Role |
|---|---|
hekate-math | Binary tower field arithmetic, constant-time, PMULL on aarch64. The mathematical core. |
hekate-crypto | Hash functions, Merkle trees and the Fiat-Shamir transcript. BLAKE3 by default, SHA-256 or SHA3-256 by feature. |
hekate-core | Configuration, execution traces and proof types: Config, TraceBuilder and InnerProof. |
hekate-program | The circuit DSL: columns, constraints, fixed columns, public inputs, chiplets, LogUp buses and program ids. |
hekate-sdk | Preflight diagnostics and the proof wire format. Preflight names what fails before you spend a proof. |
hekate-verifier | The verifier, in pure Rust. Checks a program's constraints, pinned cells and bus relations over the committed tables. |
hekate-prover-sys | Open FFI shim. Links the signed prover cdylib over a stable C ABI; the only crate that can call the prover. |
hekate-gadgets | Base AIR chiplets and atoms: 32- and 64-bit integer arithmetic, RAM, ROM and the bignum modexp the RSA chiplet builds on. |
hekate-keccak | Keccak-f[1600] chiplet plus SHA-3 / SHAKE, with virtual packing. |
hekate-aes | AES-128 / AES-256 round-function chiplet (FIPS 197) with an S-box ROM. |
hekate-sha2 | SHA-256 round chiplet (FIPS 180-4). Bit-expanded B32 columns, degree 2, 1, 2, 4, 8 or 16 rounds per row. |
hekate-rsa | RSA-2048 PKCS#1 v1.5 signature statements (RFC 8017) over the modexp and SHA-256 chiplets. |
hekate-pqc | ML-KEM KeyGen, Encaps and Decaps and ML-DSA verification (FIPS 203 / 204) over NTT, Sampler, Codec tables. |
hekate-mobile | Wraps a Rust prover into a signed iOS .xcframework / Android .aar with a typed Swift / Kotlin API. |
hekate-scribble | Trace-mutation fuzzer. Tampers a valid trace, panics if your constraints miss the tamper. |
§ What It Does
Binary tower field arithmetic, GF(2^8) through GF(2^128), recursive tower extension, hardware-accelerated via PMULL on aarch64. Constant-time by default.
Chiplet architecture, Independent AIR tables (Keccak, AES, RAM, NTT, ML-KEM, ML-DSA) with own traces under one commitment. No column waste, no forced padding. Tables linked by LogUp bus.
Virtual packing, Keccak stores 1600 bits in 25 physical B64 columns instead of 1600 bit columns. Bits expand JIT in registers.
Linear-code commitments, Brakedown PCS: O(N) prover, O(N) memory. MDS Reed-Solomon row code via additive binary-field FFT, exact distance δ = 1 − rate. Merkle tree over encoded columns only (raw trace never hashed, true ZK).
Post-quantum crypto suite, ML-DSA (Dilithium) signature verification, ML-KEM (Kyber) key generation, encapsulation and decapsulation, AES-128/256. AES and Keccak are native to binary fields; lattice arithmetic mod q runs on bit-decomposed carry chains.
§ Hardware Support
| Architecture | Status | Instructions |
|---|---|---|
| aarch64 | Production | PMULL, NEON |
| x86_64 | Fallback | Software fallback (PCLMULQDQ roadmap) |
| WASM | Planned | Software multiply |
§ Quick Example
Real 32-bit-integer Fibonacci. The CPU side holds five columns, the two Fibonacci transition
constraints and an opcode pin. Every u32 ADD is offloaded to the IntArithmeticChiplet, its own trace and
own ZeroCheck under the shared commitment and evaluation argument, and is wired in by a LogUp bus
((val_a, val_b, val_res, opcode) keys; the t-th request meets the t-th response by emit
rank). The result reaches the verdict through publish: a boundary pin to the public input on a
row whose schedule a fixed column forces, with the transition chain determined from the pinned
origins.
use errors;
use IntArithmeticChiplet;
use ;
use FixedShape;
use ChipletDef;
use ;
use define_columns;
type F = Block128;
define_columns!
Trace generation builds the CPU columns and the chiplet trace independently; they meet on the bus.
use ;
use ;
use ;
The chiplet computes the operation the opcode names, boolean-checks its own selectors and zero-pins
shadow columns when its row is idle. With opcode pinned to ADD, the LogUp bus guarantees
res = a + b for every row where selector = 1.
Wire up the program, instance, and witness, then prove with hekate-prover-sys and verify with
hekate-verifier. The transcript label and Config must match across both sides, the driver builds
one config and reuses it. verify returns true only if every Sumcheck round, the LogUp bus sums,
and the evaluation openings hold.
use Config;
use DefaultHasher;
use Transcript;
use ;
use prove;
use HekateVerifier;
use ;
§ Performance
Proving time, verification time, proof size and peak memory per workload, with zero knowledge on and off, are on Benchmarks together with the command that reproduces each run.
§ Next Steps
- Installation, crates, prover variants, targets
- Your First ZK Program, first proof end-to-end
- System Architecture, binary tower fields, Sumcheck, Brakedown, LogUp
- AIR Constraints, constraint DSL, boundary conditions
- Cryptographic Chiplets, independent tables, virtual packing, bus integration
- Soundness and Security, threat model, adversarial test suite, Fiat-Shamir binding
§ Status
The verifier, core SDK, and cryptographic chiplets are open-source under AGPL-3.0-only. The prover and compression engine stay proprietary, shipped as free signed binaries for macOS, Linux, iOS and Android on ARM64. Linking the two is covered by the prover linking exception.
The workspace is under aggressive development: APIs, ABIs, and cryptographic signatures will break without notice, and it has not been independently audited. Do not deploy to mainnet.