diff --git a/src/gadgets/nonnative.rs b/src/gadgets/nonnative.rs index 086e2c83..86d886fc 100644 --- a/src/gadgets/nonnative.rs +++ b/src/gadgets/nonnative.rs @@ -7,7 +7,7 @@ use crate::gadgets::biguint::BigUintTarget; use crate::plonk::circuit_builder::CircuitBuilder; pub struct ForeignFieldTarget { - limbs: Vec, + value: BigUintTarget, _phantom: PhantomData, } @@ -23,15 +23,13 @@ impl, const D: usize> CircuitBuilder { pub fn biguint_to_ff(&mut self, x: &BigUintTarget) -> ForeignFieldTarget { ForeignFieldTarget { - limbs: x.limbs.clone(), + value: x.clone(), _phantom: PhantomData, } } pub fn ff_to_biguint(&mut self, x: &ForeignFieldTarget) -> BigUintTarget { - BigUintTarget { - limbs: x.limbs.clone(), - } + x.value.clone() } pub fn constant_ff(&mut self, x: FF) -> ForeignFieldTarget { @@ -45,18 +43,7 @@ impl, const D: usize> CircuitBuilder { lhs: &ForeignFieldTarget, rhs: &ForeignFieldTarget, ) { - let min_limbs = lhs.limbs.len().min(rhs.limbs.len()); - - for i in 0..min_limbs { - self.connect_u32(lhs.limbs[i], rhs.limbs[i]); - } - - for i in min_limbs..lhs.limbs.len() { - self.assert_zero_u32(lhs.limbs[i]); - } - for i in min_limbs..rhs.limbs.len() { - self.assert_zero_u32(rhs.limbs[i]); - } + self.connect_biguint(&lhs.value, &rhs.value); } // Add two `ForeignFieldTarget`s. @@ -104,7 +91,7 @@ impl, const D: usize> CircuitBuilder { let value = self.rem_biguint(x, &order_target); ForeignFieldTarget { - limbs: value.limbs, + value, _phantom: PhantomData, } }