arnaucube
arnaucube/sonobePublic Self-hosted repository
Fix the incorrect `NonNativeAffineVar::inputize` implementation (#89)

* Fix the incorrect `NonNativeAffineVar::inputize` implementation

* Fmt and clippy
winderica winderica@gmail.com
Wed, 17 Apr 2024 09:32:34 +0100
commit

d23e6d188637f0890a59d0ffc76db9589656afa6

parent

b648ddb300a76a9ed1f58209efaee0257216deaa

M folding-schemes/src/folding/circuits/nonnative/affine.rs → folding-schemes/src/folding/circuits/nonnative/affine.rs

@@ -1,5 +1,4 @@

use ark_ec::{AffineRepr, CurveGroup}; -use ark_ff::PrimeField; use ark_r1cs_std::{ alloc::{AllocVar, AllocationMode}, fields::fp::FpVar,

@@ -95,20 +94,14 @@ #[allow(clippy::type_complexity)]

pub fn inputize(p: C) -> Result<(Vec<C::ScalarField>, Vec<C::ScalarField>), SynthesisError> { let affine = p.into_affine(); if affine.is_zero() { - let x = NonNativeUintVar::inputize( - &(C::ScalarField::zero()).into(), - C::ScalarField::MODULUS_BIT_SIZE as usize, - ); - let y = NonNativeUintVar::inputize( - &(C::ScalarField::zero()).into(), - C::ScalarField::MODULUS_BIT_SIZE as usize, - ); + let x = NonNativeUintVar::inputize(C::BaseField::zero()); + let y = NonNativeUintVar::inputize(C::BaseField::zero()); return Ok((x, y)); } let (x, y) = affine.xy().unwrap(); - let x = NonNativeUintVar::inputize(&(*x).into(), C::ScalarField::MODULUS_BIT_SIZE as usize); - let y = NonNativeUintVar::inputize(&(*y).into(), C::ScalarField::MODULUS_BIT_SIZE as usize); + let x = NonNativeUintVar::inputize(*x); + let y = NonNativeUintVar::inputize(*y); Ok((x, y)) } }
M folding-schemes/src/folding/circuits/nonnative/uint.rs → folding-schemes/src/folding/circuits/nonnative/uint.rs

@@ -256,10 +256,9 @@ }

} impl<F: PrimeField> NonNativeUintVar<F> { - pub fn inputize(x: &BigUint, l: usize) -> Vec<F> { - (0..l) - .map(|i| x.bit(i as u64)) - .collect::<Vec<_>>() + pub fn inputize<T: PrimeField>(x: T) -> Vec<F> { + x.into_bigint() + .to_bits_le() .chunks(Self::bits_per_limb()) .map(|chunk| F::from_bigint(F::BigInt::from_bits_le(chunk)).unwrap()) .collect()