provekit-common 1.0.0

Common types and utilities for the ProveKit proving system
Documentation
use {
    crate::{
        noir_proof_scheme::NoirProofScheme,
        whir_r1cs::WhirR1CSScheme,
        witness::{NoirWitnessGenerator, SplitWitnessBuilders},
        NoirElement, R1CS,
    },
    acir::circuit::Program,
    serde::{Deserialize, Serialize},
};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Prover {
    pub program:                Program<NoirElement>,
    pub r1cs:                   R1CS,
    pub split_witness_builders: SplitWitnessBuilders,
    pub witness_generator:      NoirWitnessGenerator,
    pub whir_for_witness:       WhirR1CSScheme,
}

impl Prover {
    #[must_use]
    pub fn from_noir_proof_scheme(scheme: NoirProofScheme) -> Self {
        let NoirProofScheme {
            program,
            r1cs,
            split_witness_builders,
            witness_generator,
            whir_for_witness,
        } = scheme;

        Self {
            program,
            r1cs,
            split_witness_builders,
            witness_generator,
            whir_for_witness,
        }
    }

    #[must_use]
    pub const fn size(&self) -> (usize, usize) {
        (self.r1cs.num_constraints(), self.r1cs.num_witnesses())
    }
}