diff --git a/src/benches/poseidon_opt_native.rs b/src/benches/poseidon_opt_native.rs index 5766ccc..2d9e1cd 100644 --- a/src/benches/poseidon_opt_native.rs +++ b/src/benches/poseidon_opt_native.rs @@ -14,7 +14,7 @@ fn poseidon_opt_native(c: &mut Criterion) { group.bench_function("Poseidon NATIVE Height-20 ARITY-2 MT", |b| { let inputs = (0..20).map(|_| Fr::rand(&mut rng)).collect::>(); b.iter(|| { - let mut poseidon = Poseidon::<(), NativeSpec, 3>::new(&mut (), param.clone()); + let mut poseidon = Poseidon::<(), NativeSpec, 3>::new(&mut (), ¶m); let mut curr_hash = Fr::zero(); for x in inputs.iter() { poseidon.reset(&mut ()); diff --git a/src/benches/poseidon_opt_plonk.rs b/src/benches/poseidon_opt_plonk.rs index 9973ded..8dbeb71 100644 --- a/src/benches/poseidon_opt_plonk.rs +++ b/src/benches/poseidon_opt_plonk.rs @@ -35,7 +35,7 @@ where const CIRCUIT_ID: [u8; 32] = [0xff; 32]; fn gadget(&mut self, composer: &mut StandardComposer) -> Result<(), Error> { - let mut poseidon = Poseidon::<_, PlonkSpec<3>, 3>::new(composer, self.constants.clone()); + let mut poseidon = Poseidon::<_, PlonkSpec<3>, 3>::new(composer, &self.constants); let inputs_var = self .input diff --git a/src/benches/poseidon_opt_r1cs.rs b/src/benches/poseidon_opt_r1cs.rs index 3d15f33..d86fa4d 100644 --- a/src/benches/poseidon_opt_r1cs.rs +++ b/src/benches/poseidon_opt_r1cs.rs @@ -28,7 +28,7 @@ impl ConstraintSynthesizer for TestCircuit fn generate_constraints(self, mut cs: ConstraintSystemRef) -> Result<(), SynthesisError> { const WIDTH: usize = 3; let mut poseidon = - Poseidon::<_, R1csSpec, WIDTH>::new(&mut cs, self.constants.clone()); + Poseidon::<_, R1csSpec, WIDTH>::new(&mut cs, &self.constants); let inputs_var = self .input diff --git a/src/poseidon/poseidon_ref.rs b/src/poseidon/poseidon_ref.rs index 06795d3..b804ce7 100644 --- a/src/poseidon/poseidon_ref.rs +++ b/src/poseidon/poseidon_ref.rs @@ -11,6 +11,7 @@ use plonk_core::prelude as plonk; use std::fmt::{Debug}; use std::marker::PhantomData; +/// Trait for unoptimized poseidon hash. pub trait PoseidonRefSpec { /// Field used as state type Field: Debug + Clone; @@ -234,6 +235,8 @@ pub struct NativeSpecRef { } impl PoseidonRefSpec<(), WIDTH> for NativeSpecRef { + // Field is private variables, ParameterField is public constants. + // In Naitve Spec, we do not distinguish these two values. type Field = F; type ParameterField = F; @@ -327,6 +330,9 @@ mod r1cs { impl PoseidonRefSpec, WIDTH> for R1csSpecRef { + // Field is private variables, ParameterField is public constants. + // In R1cs Spec, these two types lead to different privacy and #constraints. + // See add() and addi() below. type Field = FpVar; type ParameterField = F;