upgrade to latest Sonobe version (FCircuit interface updated)
arnaucube git@arnaucube.com
Wed, 18 Dec 2024 10:11:19 +0100
3 files changed,
7 insertions(+),
70 deletions(-)
M
src/poseidon_chain.rs
→
src/poseidon_chain.rs
@@ -12,8 +12,8 @@ use ark_vesta::{constraints::GVar as GVar2, Projective as G2};
use ark_crypto_primitives::sponge::{ constraints::CryptographicSpongeVar, - poseidon::{constraints::PoseidonSpongeVar, PoseidonConfig, PoseidonSponge}, - Absorb, CryptographicSponge, + poseidon::{constraints::PoseidonSpongeVar, PoseidonConfig}, + Absorb, }; use ark_r1cs_std::fields::fp::FpVar;@@ -49,21 +49,6 @@ }
fn external_inputs_len(&self) -> usize { 0 } - fn step_native( - &self, - _i: usize, - z_i: Vec<F>, - _external_inputs: Vec<F>, - ) -> Result<Vec<F>, Error> { - let mut sponge = PoseidonSponge::<F>::new(&self.config); - - let mut v = z_i.clone(); - for _ in 0..HASHES_PER_STEP { - sponge.absorb(&v); - v = sponge.squeeze_field_elements(1); - } - Ok(v) - } fn generate_step_constraints( &self, cs: ConstraintSystemRef<F>,@@ -103,16 +88,12 @@ // Sanity check
// check that the f_circuit produces valid R1CS constraints use ark_r1cs_std::alloc::AllocVar; use ark_r1cs_std::fields::fp::FpVar; - use ark_r1cs_std::R1CSVar; use ark_relations::r1cs::ConstraintSystem; let cs = ConstraintSystem::<Fr>::new_ref(); let z_0_var = Vec::<FpVar<Fr>>::new_witness(cs.clone(), || Ok(z_0.clone())).unwrap(); - let z_1_var = f_circuit + let _z_1_var = f_circuit .generate_step_constraints(cs.clone(), 1, z_0_var, vec![]) .unwrap(); - // check z_1_var against the native z_1 - let z_1_native = f_circuit.step_native(1, z_0.clone(), vec![]).unwrap(); - assert_eq!(z_1_var.value().unwrap(), z_1_native); // check that the constraint system is satisfied assert!(cs.is_satisfied().unwrap()); println!(
M
src/sha_chain_offchain.rs
→
src/sha_chain_offchain.rs
@@ -10,7 +10,7 @@ mod tests {
use ark_pallas::{constraints::GVar, Fr, Projective as G1}; use ark_vesta::{constraints::GVar as GVar2, Projective as G2}; - use ark_crypto_primitives::crh::sha256::{constraints::Sha256Gadget, digest::Digest, Sha256}; + use ark_crypto_primitives::crh::sha256::constraints::Sha256Gadget; use ark_ff::PrimeField; use ark_r1cs_std::fields::fp::FpVar; use ark_r1cs_std::{@@ -29,8 +29,6 @@ frontend::FCircuit,
transcript::poseidon::poseidon_canonical_config, Error, FoldingScheme, }; - - use crate::utils::tests::*; /// Test circuit to be folded #[derive(Clone, Copy, Debug)]@@ -50,22 +48,6 @@ }
fn external_inputs_len(&self) -> usize { 0 } - fn step_native( - &self, - _i: usize, - z_i: Vec<F>, - _external_inputs: Vec<F>, - ) -> Result<Vec<F>, Error> { - let mut b = f_vec_to_bytes(z_i.to_vec()); - - for _ in 0..HASHES_PER_STEP { - let mut sha256 = Sha256::default(); - sha256.update(b); - b = sha256.finalize().to_vec(); - } - - bytes_to_f_vec(b.to_vec()) // z_{i+1} - } fn generate_step_constraints( &self, _cs: ConstraintSystemRef<F>,@@ -115,16 +97,12 @@ // Sanity check
// check that the f_circuit produces valid R1CS constraints use ark_r1cs_std::alloc::AllocVar; use ark_r1cs_std::fields::fp::FpVar; - use ark_r1cs_std::R1CSVar; use ark_relations::r1cs::ConstraintSystem; let cs = ConstraintSystem::<Fr>::new_ref(); let z_0_var = Vec::<FpVar<Fr>>::new_witness(cs.clone(), || Ok(z_0.clone())).unwrap(); - let z_1_var = f_circuit + let _z_1_var = f_circuit .generate_step_constraints(cs.clone(), 1, z_0_var, vec![]) .unwrap(); - // check z_1_var against the native z_1 - let z_1_native = f_circuit.step_native(1, z_0.clone(), vec![]).unwrap(); - assert_eq!(z_1_var.value().unwrap(), z_1_native); // check that the constraint system is satisfied assert!(cs.is_satisfied().unwrap()); println!(
M
src/sha_chain_onchain.rs
→
src/sha_chain_onchain.rs
@@ -19,7 +19,7 @@ use ark_ff::PrimeField;
use std::time::Instant; - use ark_crypto_primitives::crh::sha256::{constraints::Sha256Gadget, digest::Digest, Sha256}; + use ark_crypto_primitives::crh::sha256::constraints::Sha256Gadget; use ark_r1cs_std::fields::fp::FpVar; use ark_r1cs_std::{ boolean::Boolean,@@ -48,8 +48,6 @@ verifiers::nova_cyclefold::get_decider_template_for_cyclefold_decider,
NovaCycleFoldVerifierKey, }; - use crate::utils::tests::*; - /// Test circuit to be folded #[derive(Clone, Copy, Debug)] pub struct SHA256FoldStepCircuit<F: PrimeField, const HASHES_PER_STEP: usize> {@@ -68,22 +66,6 @@ }
fn external_inputs_len(&self) -> usize { 0 } - fn step_native( - &self, - _i: usize, - z_i: Vec<F>, - _external_inputs: Vec<F>, - ) -> Result<Vec<F>, Error> { - let mut b = f_vec_to_bytes(z_i.to_vec()); - - for _ in 0..HASHES_PER_STEP { - let mut sha256 = Sha256::default(); - sha256.update(b); - b = sha256.finalize().to_vec(); - } - - bytes_to_f_vec(b.to_vec()) // z_{i+1} - } fn generate_step_constraints( &self, _cs: ConstraintSystemRef<F>,@@ -133,16 +115,12 @@ // Sanity check
// check that the f_circuit produces valid R1CS constraints use ark_r1cs_std::alloc::AllocVar; use ark_r1cs_std::fields::fp::FpVar; - use ark_r1cs_std::R1CSVar; use ark_relations::r1cs::ConstraintSystem; let cs = ConstraintSystem::<Fr>::new_ref(); let z_0_var = Vec::<FpVar<Fr>>::new_witness(cs.clone(), || Ok(z_0.clone())).unwrap(); - let z_1_var = f_circuit + let _z_1_var = f_circuit .generate_step_constraints(cs.clone(), 1, z_0_var, vec![]) .unwrap(); - // check z_1_var against the native z_1 - let z_1_native = f_circuit.step_native(1, z_0.clone(), vec![]).unwrap(); - assert_eq!(z_1_var.value().unwrap(), z_1_native); // check that the constraint system is satisfied assert!(cs.is_satisfied().unwrap()); println!(