mirror of
https://github.com/arnaucube/sonobe.git
synced 2026-01-09 07:21:28 +01:00
implement Nova's AugmentedFCircuit (#33)
* impl AugmentedFCircuit non-base case * add multiple iterations to AugmentedFCircuit test * implement base case on AugmentedFCircuit and test * Update cmE of E=0-vec to work as zero point Update cmE of E=0-vec to work as zero point instead of as cm(0-vec) * patch r1cs-std dep to a cherry-picked version with the zero-scalar-mult fix * refactor FCircuit to make it more suitable inside the AugmentedFCircuit
This commit is contained in:
@@ -21,9 +21,8 @@ impl<C: CurveGroup, GC: CurveVar<C, CF<C>>> ECRLC<C, GC> {
|
||||
p1: GC,
|
||||
p2: GC,
|
||||
p3: GC,
|
||||
) -> Result<(), SynthesisError> {
|
||||
p3.enforce_equal(&(p1 + p2.scalar_mul_le(r_bits.iter())?))?;
|
||||
Ok(())
|
||||
) -> Result<Boolean<CF<C>>, SynthesisError> {
|
||||
p3.is_eq(&(p1 + p2.scalar_mul_le(r_bits.iter())?))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +31,7 @@ mod tests {
|
||||
use super::*;
|
||||
use ark_ff::{BigInteger, PrimeField};
|
||||
use ark_pallas::{constraints::GVar, Fq, Fr, Projective};
|
||||
use ark_r1cs_std::alloc::AllocVar;
|
||||
use ark_r1cs_std::{alloc::AllocVar, eq::EqGadget};
|
||||
use ark_relations::r1cs::ConstraintSystem;
|
||||
use ark_std::UniformRand;
|
||||
use std::ops::Mul;
|
||||
@@ -59,7 +58,8 @@ mod tests {
|
||||
let p3Var = GVar::new_witness(cs.clone(), || Ok(p3)).unwrap();
|
||||
|
||||
// check ECRLC circuit
|
||||
ECRLC::<Projective, GVar>::check(rbitsVar, p1Var, p2Var, p3Var).unwrap();
|
||||
let check_pass = ECRLC::<Projective, GVar>::check(rbitsVar, p1Var, p2Var, p3Var).unwrap();
|
||||
check_pass.enforce_equal(&Boolean::<Fq>::TRUE).unwrap();
|
||||
assert!(cs.is_satisfied().unwrap());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user