sonobe_fs/nova/algorithms/
key_generator.rs1use 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}