provekit-prover 0.1.3

ProveKit prover for generating zero-knowledge proofs
Documentation
use provekit_common::{
    witness::{decompose_into_digits, DigitalDecompositionWitnesses},
    FieldElement,
};

pub(crate) trait DigitalDecompositionWitnessesSolver {
    fn solve(&self, witness: &mut [Option<FieldElement>]);
}

impl DigitalDecompositionWitnessesSolver for DigitalDecompositionWitnesses {
    fn solve(&self, witness: &mut [Option<FieldElement>]) {
        self.witnesses_to_decompose
            .iter()
            .enumerate()
            .for_each(|(i, value_witness_idx)| {
                let value = witness[*value_witness_idx].unwrap();
                let digits = decompose_into_digits(value, &self.log_bases);
                digits
                    .iter()
                    .enumerate()
                    .for_each(|(digit_place, digit_value)| {
                        witness[self.first_witness_idx
                            + digit_place * self.witnesses_to_decompose.len()
                            + i] = Some(*digit_value);
                    });
            });
    }
}