1
0
Fork 0
mirror of synced 2025-09-23 04:08:33 +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 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::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>>(
l: CanonicalLinComb<T>,
l: LinComb<T>,
cs: &mut CS,
symbols: &mut BTreeMap<Variable, BellmanVariable>,
witness: &mut Witness<T>,
@ -127,19 +127,9 @@ impl<'a, T: BellmanFieldExtensions + Field, I: IntoIterator<Item = Statement<'a,
for statement in self.program.statements {
if let Statement::Constraint(quad, lin, _) = statement {
let a = &bellman_combination(
quad.left.into_canonical(),
cs,
&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);
let a = &bellman_combination(quad.left, cs, &mut symbols, &mut witness);
let b = &bellman_combination(quad.right, cs, &mut symbols, &mut witness);
let c = &bellman_combination(lin, cs, &mut symbols, &mut witness);
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 {
use bellman_ce::pairing::ff::PrimeField;
let s = self.to_dec_string();
<Self::BellmanEngine as ScalarEngine>::Fr::from_str(&s).unwrap()
use bellman_ce::pairing::ff::{PrimeField, PrimeFieldRepr};
let bytes = self.to_byte_vector();
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(