Skip to main content

provekit_common/
lib.rs

1pub mod file;
2mod interner;
3mod noir_proof_scheme;
4pub mod prefix_covector;
5mod prover;
6mod r1cs;
7// pub mod skyscraper;
8pub mod sparse_matrix;
9pub mod utils;
10mod verifier;
11mod whir_r1cs;
12pub mod witness;
13
14use crate::{
15    interner::{InternedFieldElement, Interner},
16    sparse_matrix::{HydratedSparseMatrix, SparseMatrix},
17};
18pub use {
19    acir::FieldElement as NoirElement,
20    ark_bn254::Fr as FieldElement,
21    noir_proof_scheme::{NoirProof, NoirProofScheme},
22    noirc_abi::{
23        input_parser::{Format, InputValue},
24        InputMap,
25    },
26    prefix_covector::{OffsetCovector, PrefixCovector, SparseCovector},
27    prover::Prover,
28    r1cs::R1CS,
29    verifier::Verifier,
30    whir_r1cs::{
31        WhirConfig, WhirDomainSeparator, WhirProof, WhirProverState, WhirR1CSProof, WhirR1CSScheme,
32        WhirZkConfig,
33    },
34    witness::PublicInputs,
35};
36
37/// SHA-256 based transcript sponge for Fiat-Shamir.
38pub type TranscriptSponge = spongefish::instantiations::SHA256;
39
40/// Register provekit's custom implementations in whir's global registries.
41///
42/// Must be called once before any prove/verify operations.
43/// Idempotent — safe to call multiple times.
44pub fn register_ntt() {
45    use std::sync::{Arc, Once};
46    static INIT: Once = Once::new();
47    INIT.call_once(|| {
48        let ntt: Arc<dyn whir::algebra::ntt::ReedSolomon<FieldElement>> =
49            Arc::new(whir::algebra::ntt::ArkNtt::<FieldElement>::default());
50        whir::algebra::ntt::NTT.insert(ntt);
51
52        // let skyscraper: Arc<dyn whir::hash::HashEngine> =
53        //     Arc::new(skyscraper::SkyscraperHashEngine);
54        // whir::hash::ENGINES.register(skyscraper);
55    });
56}