change into_bellman impl on field, use lincomb in bellman circuit construction instead of canonical
This commit is contained in:
parent
7f698545f6
commit
e210f469ca
2 changed files with 11 additions and 18 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in a new issue