This commit is contained in:
Sladuca 2022-08-26 16:10:44 -04:00
parent 8aa3ed0997
commit 356c7cd925
3 changed files with 20 additions and 35 deletions

View File

@ -277,12 +277,13 @@ pub trait WitnessBigUint<F: PrimeField64>: Witness<F> {
impl<T: Witness<F>, F: PrimeField64> WitnessBigUint<F> for T { impl<T: Witness<F>, F: PrimeField64> WitnessBigUint<F> for T {
fn get_biguint_target(&self, target: BigUintTarget) -> BigUint { fn get_biguint_target(&self, target: BigUintTarget) -> BigUint {
target.limbs target
.into_iter() .limbs
.rev() .into_iter()
.fold(BigUint::zero(), |acc, limb| { .rev()
(acc << 32) + self.get_target(limb.0).to_canonical_biguint() .fold(BigUint::zero(), |acc, limb| {
}) (acc << 32) + self.get_target(limb.0).to_canonical_biguint()
})
} }
fn set_biguint_target(&mut self, target: &BigUintTarget, value: &BigUint) { fn set_biguint_target(&mut self, target: &BigUintTarget, value: &BigUint) {
@ -352,7 +353,7 @@ mod tests {
}; };
use rand::Rng; use rand::Rng;
use crate::gadgets::biguint::{WitnessBigUint, CircuitBuilderBiguint}; use crate::gadgets::biguint::{CircuitBuilderBiguint, WitnessBigUint};
#[test] #[test]
fn test_biguint_add() -> Result<()> { fn test_biguint_add() -> Result<()> {

View File

@ -116,9 +116,9 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
} }
fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) { fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) {
let k = Secp256K1Scalar::from_noncanonical_biguint(witness.get_biguint_target( let k = Secp256K1Scalar::from_noncanonical_biguint(
self.k.value.clone(), witness.get_biguint_target(self.k.value.clone()),
)); );
let (k1, k2, k1_neg, k2_neg) = decompose_secp256k1_scalar(k); let (k1, k2, k1_neg, k2_neg) = decompose_secp256k1_scalar(k);

View File

@ -14,7 +14,7 @@ use plonky2_u32::witness::GeneratedValuesU32;
use plonky2_util::ceil_div_usize; use plonky2_util::ceil_div_usize;
use crate::gadgets::biguint::{ use crate::gadgets::biguint::{
GeneratedValuesBigUint, WitnessBigUint, BigUintTarget, CircuitBuilderBiguint, BigUintTarget, CircuitBuilderBiguint, GeneratedValuesBigUint, WitnessBigUint,
}; };
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
@ -467,12 +467,8 @@ impl<F: RichField + Extendable<D>, const D: usize, FF: PrimeField> SimpleGenerat
} }
fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) { fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) {
let a = FF::from_noncanonical_biguint(witness.get_biguint_target( let a = FF::from_noncanonical_biguint(witness.get_biguint_target(self.a.value.clone()));
self.a.value.clone(), let b = FF::from_noncanonical_biguint(witness.get_biguint_target(self.b.value.clone()));
));
let b = FF::from_noncanonical_biguint(witness.get_biguint_target(
self.b.value.clone(),
));
let a_biguint = a.to_canonical_biguint(); let a_biguint = a.to_canonical_biguint();
let b_biguint = b.to_canonical_biguint(); let b_biguint = b.to_canonical_biguint();
let sum_biguint = a_biguint + b_biguint; let sum_biguint = a_biguint + b_biguint;
@ -512,9 +508,7 @@ impl<F: RichField + Extendable<D>, const D: usize, FF: PrimeField> SimpleGenerat
.summands .summands
.iter() .iter()
.map(|summand| { .map(|summand| {
FF::from_noncanonical_biguint(witness.get_biguint_target( FF::from_noncanonical_biguint(witness.get_biguint_target(summand.value.clone()))
summand.value.clone(),
))
}) })
.collect(); .collect();
let summand_biguints: Vec<_> = summands let summand_biguints: Vec<_> = summands
@ -559,12 +553,8 @@ impl<F: RichField + Extendable<D>, const D: usize, FF: PrimeField> SimpleGenerat
} }
fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) { fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) {
let a = FF::from_noncanonical_biguint(witness.get_biguint_target( let a = FF::from_noncanonical_biguint(witness.get_biguint_target(self.a.value.clone()));
self.a.value.clone(), let b = FF::from_noncanonical_biguint(witness.get_biguint_target(self.b.value.clone()));
));
let b = FF::from_noncanonical_biguint(witness.get_biguint_target(
self.b.value.clone(),
));
let a_biguint = a.to_canonical_biguint(); let a_biguint = a.to_canonical_biguint();
let b_biguint = b.to_canonical_biguint(); let b_biguint = b.to_canonical_biguint();
@ -604,12 +594,8 @@ impl<F: RichField + Extendable<D>, const D: usize, FF: PrimeField> SimpleGenerat
} }
fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) { fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) {
let a = FF::from_noncanonical_biguint(witness.get_biguint_target( let a = FF::from_noncanonical_biguint(witness.get_biguint_target(self.a.value.clone()));
self.a.value.clone(), let b = FF::from_noncanonical_biguint(witness.get_biguint_target(self.b.value.clone()));
));
let b = FF::from_noncanonical_biguint(witness.get_biguint_target(
self.b.value.clone(),
));
let a_biguint = a.to_canonical_biguint(); let a_biguint = a.to_canonical_biguint();
let b_biguint = b.to_canonical_biguint(); let b_biguint = b.to_canonical_biguint();
@ -639,9 +625,7 @@ impl<F: RichField + Extendable<D>, const D: usize, FF: PrimeField> SimpleGenerat
} }
fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) { fn run_once(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) {
let x = FF::from_noncanonical_biguint(witness.get_biguint_target( let x = FF::from_noncanonical_biguint(witness.get_biguint_target(self.x.value.clone()));
self.x.value.clone(),
));
let inv = x.inverse(); let inv = x.inverse();
let x_biguint = x.to_canonical_biguint(); let x_biguint = x.to_canonical_biguint();