Skip to main content

provekit_common/
noir_proof_scheme.rs

1use {
2    crate::{
3        whir_r1cs::{WhirR1CSProof, WhirR1CSScheme},
4        witness::{NoirWitnessGenerator, SplitWitnessBuilders},
5        NoirElement, PublicInputs, R1CS,
6    },
7    acir::circuit::Program,
8    serde::{Deserialize, Serialize},
9};
10
11/// A scheme for proving a Noir program.
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct NoirProofScheme {
14    pub program:                Program<NoirElement>,
15    pub r1cs:                   R1CS,
16    pub split_witness_builders: SplitWitnessBuilders,
17    pub witness_generator:      NoirWitnessGenerator,
18    pub whir_for_witness:       WhirR1CSScheme,
19}
20
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22pub struct NoirProof {
23    pub public_inputs:   PublicInputs,
24    pub whir_r1cs_proof: WhirR1CSProof,
25}
26
27impl NoirProofScheme {
28    #[must_use]
29    pub const fn size(&self) -> (usize, usize) {
30        (self.r1cs.num_constraints(), self.r1cs.num_witnesses())
31    }
32}