Skip to main content

provekit_common/
lib.rs

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