mirror of
https://github.com/arnaucube/Nova.git
synced 2026-01-11 16:41:28 +01:00
absorb running instance separately (for clarity) (#52)
This commit is contained in:
@@ -203,7 +203,7 @@ where
|
||||
) -> Result<(AllocatedRelaxedR1CSInstance<G>, AllocatedBit), SynthesisError> {
|
||||
// Check that u.x[0] = Hash(params, U, i, z0, zi)
|
||||
let mut ro: PoseidonROGadget<G::Base> = PoseidonROGadget::new(self.poseidon_constants.clone());
|
||||
ro.absorb(params);
|
||||
ro.absorb(params.clone());
|
||||
ro.absorb(i);
|
||||
ro.absorb(z_0);
|
||||
ro.absorb(z_i);
|
||||
@@ -220,7 +220,7 @@ where
|
||||
// Run NIFS Verifier
|
||||
let U_fold = U.fold_with_r1cs(
|
||||
cs.namespace(|| "compute fold of U and u"),
|
||||
hash, // hash of the (params, U, i, z0, zi)
|
||||
params,
|
||||
u,
|
||||
T,
|
||||
self.poseidon_constants.clone(),
|
||||
|
||||
@@ -216,7 +216,7 @@ where
|
||||
pub fn fold_with_r1cs<CS: ConstraintSystem<<G as Group>::Base>>(
|
||||
&self,
|
||||
mut cs: CS,
|
||||
hash: AllocatedNum<G::Base>, // hash of (params, running_instance, i, z0, zi)
|
||||
params: AllocatedNum<G::Base>, // hash of R1CSShape of F'
|
||||
u: AllocatedR1CSInstance<G>,
|
||||
T: AllocatedPoint<G::Base>,
|
||||
poseidon_constants: NovaPoseidonConstants<G::Base>,
|
||||
@@ -225,7 +225,8 @@ where
|
||||
) -> Result<AllocatedRelaxedR1CSInstance<G>, SynthesisError> {
|
||||
// Compute r:
|
||||
let mut ro: PoseidonROGadget<G::Base> = PoseidonROGadget::new(poseidon_constants);
|
||||
ro.absorb(hash);
|
||||
ro.absorb(params);
|
||||
self.absorb_in_ro(cs.namespace(|| "absorb running instance"), &mut ro)?;
|
||||
u.absorb_in_ro(&mut ro);
|
||||
ro.absorb(T.x.clone());
|
||||
ro.absorb(T.y.clone());
|
||||
|
||||
@@ -12,7 +12,7 @@ use bellperson::{
|
||||
};
|
||||
use core::marker::PhantomData;
|
||||
use ff::{PrimeField, PrimeFieldBits};
|
||||
use generic_array::typenum::{U27, U9};
|
||||
use generic_array::typenum::{U27, U32};
|
||||
use neptune::{
|
||||
circuit::poseidon_hash,
|
||||
poseidon::{Poseidon, PoseidonConstants},
|
||||
@@ -25,8 +25,8 @@ pub struct NovaPoseidonConstants<Scalar>
|
||||
where
|
||||
Scalar: PrimeField,
|
||||
{
|
||||
constants9: PoseidonConstants<Scalar, U9>,
|
||||
constants27: PoseidonConstants<Scalar, U27>,
|
||||
constants32: PoseidonConstants<Scalar, U32>,
|
||||
}
|
||||
|
||||
impl<Scalar> HashFuncConstantsTrait<Scalar> for NovaPoseidonConstants<Scalar>
|
||||
@@ -36,11 +36,11 @@ where
|
||||
/// Generate Poseidon constants for the arities that Nova uses
|
||||
#[allow(clippy::new_without_default)]
|
||||
fn new() -> Self {
|
||||
let constants9 = PoseidonConstants::<Scalar, U9>::new_with_strength(Strength::Strengthened);
|
||||
let constants27 = PoseidonConstants::<Scalar, U27>::new_with_strength(Strength::Strengthened);
|
||||
let constants32 = PoseidonConstants::<Scalar, U32>::new_with_strength(Strength::Strengthened);
|
||||
Self {
|
||||
constants9,
|
||||
constants27,
|
||||
constants32,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,10 +65,12 @@ where
|
||||
{
|
||||
fn hash_inner(&self) -> Base {
|
||||
match self.state.len() {
|
||||
9 => Poseidon::<Base, U9>::new_with_preimage(&self.state, &self.constants.constants9).hash(),
|
||||
27 => {
|
||||
Poseidon::<Base, U27>::new_with_preimage(&self.state, &self.constants.constants27).hash()
|
||||
}
|
||||
32 => {
|
||||
Poseidon::<Base, U32>::new_with_preimage(&self.state, &self.constants.constants32).hash()
|
||||
}
|
||||
_ => {
|
||||
panic!(
|
||||
"Number of elements in the RO state does not match any of the arities used in Nova: {:?}",
|
||||
@@ -169,16 +171,16 @@ where
|
||||
CS: ConstraintSystem<Scalar>,
|
||||
{
|
||||
let out = match self.state.len() {
|
||||
9 => poseidon_hash(
|
||||
cs.namespace(|| "Posideon hash"),
|
||||
self.state.clone(),
|
||||
&self.constants.constants9,
|
||||
)?,
|
||||
27 => poseidon_hash(
|
||||
cs.namespace(|| "Poseidon hash"),
|
||||
self.state.clone(),
|
||||
&self.constants.constants27,
|
||||
)?,
|
||||
32 => poseidon_hash(
|
||||
cs.namespace(|| "Posideon hash"),
|
||||
self.state.clone(),
|
||||
&self.constants.constants32,
|
||||
)?,
|
||||
_ => {
|
||||
panic!(
|
||||
"Number of elements in the RO state does not match any of the arities used in Nova: {}",
|
||||
|
||||
Reference in New Issue
Block a user