Akita is a high-performance, modular lattice polynomial commitment scheme with transparent setup. Its Module-SIS instances are priced at 169 bits of quantum Core-SVP cost under a lattice attack model, and its Fiat-Shamir challenges target a 128-bit rate per random-oracle query in the classical random-oracle model. Security status states what these targets cover.
Akita is the public scheme name for this implementation. The umbrella package is akita-pcs.
To try it, run cargo run -p akita-pcs --release --example quickstart and read the quickstart.
Status: Akita is not yet a formally audited production release (SECURITY.md). It makes no backward-compatibility guarantees and does not provide zero knowledge.
The workspace is a family of focused akita-* crates under crates/. docs/crate-graph.md has the full map and dependency graph. The main ownership boundaries are:
akita-errorowns the shared protocol error and reusable checked integer formulas for exact sizes, offsets, and ranges.- Jolt's
jolt-fieldpackage owns shared field arithmetic;akita-serializationandakita-algebraown Akita encoding, NTT, ring, and polynomial utilities. akita-transcript,akita-challenges, andakita-sumcheckown Fiat-Shamir transcripts, challenge sampling, and generic sumcheck machinery.akita-paramsowns parameter geometry, sizing, SIS tables, schedules, witness layout, dispatch, and grinding plans.akita-typesowns proof, setup, and claim wire values, shared protocol math, and native transcript replay used by both roles.akita-sis-estimatorowns offline scalar SIS attack-cost estimation and table certification.akita-planneris theCfg-free offline schedule engine: candidate expansion, schedule-search DP, and external artifact emitter. Runtime crates never depend on it; itscatalog-genfeature pulls inakita-configto emit artifacts.akita-schedulesowns versioned schedule artifacts, semantic row validation, and validated owned runtime catalogs.akita-configowns concrete runtime config presets and the singleCommitmentConfigpolicy trait. A config identifies the expected artifact family and policy but does not own rows.akita-setupowns requirement-backed setup construction and optional setup cache persistence.akita-verifierowns verifier replay without prover-only polynomial backends. It receives the validated schedule catalog explicitly.akita-proverowns backend-neutral protocol sequencing, proof assembly, and the opaque backend contracts.akita-cpu-backendowns the CPU sources, commitments, witness arithmetic, and caches behind those contracts.akita-pcsis the umbrella package: it owns the end-to-endAkitaCommitmentSchemeorchestration, re-exports the common commit, prove, and verify types, and hosts examples, benches, and integration tests. (There is no separateakita-schemecrate.)
Verifier-only consumers should prefer the slim role crates directly:
akita-verifier for verification, akita-types for proof/setup/claim shapes,
and akita-config for concrete schedule/config policy. The umbrella
akita-pcs package is convenient for examples and end-to-end use, but it also
pulls in prover-facing APIs.
The Akita Book is the canonical target for narrative
documentation (how the scheme works, how to use it, and the foundations).
Integrators should start with the
quickstart, the
integration guide, and
book/src/how/architecture.md. Recursion users
should also read profile/akita-recursion/README.md.
Build the book locally with ./scripts/serve-book.sh (see
book/README.md for the toolchain). AGENTS.md is the
agent command runbook; docs/ holds maintainer contracts (crate graph,
verifier contract, CI timing). specs/ holds design records (lifecycle in
specs/PRUNING.md). Documentation guardrails (CI + PR
comments) are in docs/documentation.md.
The runtime schedule contract is TrustedScheduleCatalog<Cfg>. A versioned
JSON artifact stores complete expanded rows. The application loads that
artifact as a config-bound trusted parameter for both proving and verification.
The public statement carries the 32 byte OpeningScheduleSelection row digest
beside the proof bytes. Neither can provide or replace schedule content.
Artifact loading checks the expected family, protocol epoch, config policy, runtime challenge hooks, every expanded schedule invariant, and every committed profile. It derives each row digest and rejects duplicate identities, noncanonical JSON, and noncanonical digest order. Honest prover key selection and verifier digest selection then use the same owned catalog.
An AkitaCommitmentScheme<Cfg> instance owns one validated catalog and uses it
for setup, commitment, proving, and verification. Direct verifier construction
takes a TrustedScheduleCatalog<Cfg> by value and prover orchestration borrows
one, so an integration can load an external trusted artifact without compiling
its rows into Akita.
Load artifact bytes from application-owned storage and supply the expected chunking from trusted application configuration. This example uses a single chunk:
use akita_config::proof_optimized::fp128;
use akita_params::ChunkedWitnessCfg;
use akita_pcs::AkitaCommitmentScheme;
let bytes = std::fs::read("parameters/fp128_onehot.aks")?;
let chunking = ChunkedWitnessCfg::default_non_chunked();
let scheme = AkitaCommitmentScheme::<fp128::OneHot>::from_schedule_artifact(&bytes, chunking)?;Admission checks that the artifact matches this geometry. Subsequent operations
use the admitted scheme.schedules().policy(). See
runtime witness chunking
for selecting a different chunk count and number of chunked folds.
Git tracks deterministic family artifacts under artifacts/schedules/.
Regenerate them after changing planner policy, candidate search, or artifact
structure:
scripts/generate-schedule-artifacts.shFor a faster planner iteration loop, pass one or more family names, for example
scripts/generate-schedule-artifacts.sh fp32_dense. Run the unfiltered command
before committing planner changes.
The schedule-artifact drift job regenerates every family into a temporary
directory and rejects any byte difference from the tracked artifacts. It also
compares the regenerated catalog snapshot with artifacts/schedule-catalog.tsv.
Akita keeps the earlier implementation lineage explicit while giving the improved scheme its own name. The roadmap lists what is implemented and what is planned.
Major features and architectural changes should start with a short spec. See CONTRIBUTING.md and specs/TEMPLATE.md for the review workflow.
The CRT/NTT and small-prime arithmetic design in this repository is informed by the Labrador/Greyhound C implementation family. In particular, the pseudo-Mersenne profile uses moduli of the form q = 2^k - offset. Akita provides a Rust-native architecture and APIs, while drawing algorithmic inspiration from those implementations.