sonobe-fs 0.1.0-alpha.1

Traits and implementations of folding schemes for the Sonobe library
Documentation
//! Key generation for Nova.

use ark_std::sync::Arc;
use sonobe_primitives::{
    arithmetizations::Arith,
    commitments::{CommitmentKey, GroupBasedCommitment},
    traits::SonobeField,
};

use crate::{Error, FoldingSchemeKeyGenerator, nova::AbstractNova};

impl<CM: GroupBasedCommitment, TF: SonobeField, const B: usize> FoldingSchemeKeyGenerator
    for AbstractNova<CM, TF, B>
{
    fn generate_keys(ck: Self::PublicParam, r1cs: Self::Arith) -> Result<Self::DeciderKey, Error> {
        let ck = Arc::new(ck);
        let r1cs = Arc::new(r1cs);
        let cfg = r1cs.config();
        if ck.max_scalars_len() < cfg.n_constraints.max(cfg.n_witnesses) {
            return Err(Error::InvalidPublicParameters(
                "The commitment key is too short for the R1CS instance".into(),
            ));
        }
        Ok(Self::DeciderKey { arith: r1cs, ck })
    }
}