Skip to main content

sonobe_fs/nova/algorithms/
key_generator.rs

1//! Key generation for Nova.
2
3use ark_std::sync::Arc;
4use sonobe_primitives::{
5    arithmetizations::Arith,
6    commitments::{CommitmentKey, GroupBasedCommitment},
7    traits::SonobeField,
8};
9
10use crate::{Error, FoldingSchemeKeyGenerator, nova::AbstractNova};
11
12impl<CM: GroupBasedCommitment, TF: SonobeField, const B: usize> FoldingSchemeKeyGenerator
13    for AbstractNova<CM, TF, B>
14{
15    fn generate_keys(ck: Self::PublicParam, r1cs: Self::Arith) -> Result<Self::DeciderKey, Error> {
16        let ck = Arc::new(ck);
17        let r1cs = Arc::new(r1cs);
18        let cfg = r1cs.config();
19        if ck.max_scalars_len() < cfg.n_constraints.max(cfg.n_witnesses) {
20            return Err(Error::InvalidPublicParameters(
21                "The commitment key is too short for the R1CS instance".into(),
22            ));
23        }
24        Ok(Self::DeciderKey { arith: r1cs, ck })
25    }
26}