1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00

change into_bellman impl on field, use lincomb in bellman circuit construction instead of canonical

This commit is contained in:
dark64 2023-03-24 14:13:15 +01:00
parent 7f698545f6
commit e210f469ca
2 changed files with 11 additions and 18 deletions

View file

@ -11,7 +11,7 @@ use bellman::{
}; };
use std::collections::BTreeMap; use std::collections::BTreeMap;
use zokrates_ast::common::Variable; use zokrates_ast::common::Variable;
use zokrates_ast::ir::{CanonicalLinComb, ProgIterator, Statement, Witness}; use zokrates_ast::ir::{LinComb, ProgIterator, Statement, Witness};
use zokrates_field::BellmanFieldExtensions; use zokrates_field::BellmanFieldExtensions;
use zokrates_field::Field; use zokrates_field::Field;
@ -45,7 +45,7 @@ impl<'a, T: Field, I: IntoIterator<Item = Statement<'a, T>>> Computation<'a, T,
} }
fn bellman_combination<T: BellmanFieldExtensions, CS: ConstraintSystem<T::BellmanEngine>>( fn bellman_combination<T: BellmanFieldExtensions, CS: ConstraintSystem<T::BellmanEngine>>(
l: CanonicalLinComb<T>, l: LinComb<T>,
cs: &mut CS, cs: &mut CS,
symbols: &mut BTreeMap<Variable, BellmanVariable>, symbols: &mut BTreeMap<Variable, BellmanVariable>,
witness: &mut Witness<T>, witness: &mut Witness<T>,
@ -127,19 +127,9 @@ impl<'a, T: BellmanFieldExtensions + Field, I: IntoIterator<Item = Statement<'a,
for statement in self.program.statements { for statement in self.program.statements {
if let Statement::Constraint(quad, lin, _) = statement { if let Statement::Constraint(quad, lin, _) = statement {
let a = &bellman_combination( let a = &bellman_combination(quad.left, cs, &mut symbols, &mut witness);
quad.left.into_canonical(), let b = &bellman_combination(quad.right, cs, &mut symbols, &mut witness);
cs, let c = &bellman_combination(lin, cs, &mut symbols, &mut witness);
&mut symbols,
&mut witness,
);
let b = &bellman_combination(
quad.right.into_canonical(),
cs,
&mut symbols,
&mut witness,
);
let c = &bellman_combination(lin.into_canonical(), cs, &mut symbols, &mut witness);
cs.enforce(|| "Constraint", |lc| lc + a, |lc| lc + b, |lc| lc + c); cs.enforce(|| "Constraint", |lc| lc + a, |lc| lc + b, |lc| lc + c);
} }

View file

@ -591,9 +591,12 @@ mod prime_field {
} }
fn into_bellman(self) -> <Self::BellmanEngine as ScalarEngine>::Fr { fn into_bellman(self) -> <Self::BellmanEngine as ScalarEngine>::Fr {
use bellman_ce::pairing::ff::PrimeField; use bellman_ce::pairing::ff::{PrimeField, PrimeFieldRepr};
let s = self.to_dec_string(); let bytes = self.to_byte_vector();
<Self::BellmanEngine as ScalarEngine>::Fr::from_str(&s).unwrap() let mut repr =
<<Self::BellmanEngine as ScalarEngine>::Fr as PrimeField>::Repr::default();
repr.read_le(bytes.as_slice()).unwrap();
<Self::BellmanEngine as ScalarEngine>::Fr::from_repr(repr).unwrap()
} }
fn new_fq2( fn new_fq2(