arnaucube
arnaucube/ark-r1cs-stdPublic Self-hosted repository
Fix BLS12 G2PreparedGadget's AllocVar with a divisive twist (#77)

* fix

* tidy up Cargo; add changelog

* fix nostd

* removal of the test

* fmt
Weikeng Chen w.k@berkeley.edu
Wed, 11 Aug 2021 04:05:13 -0700
commit

a2a5ac491ae005ba2afd03fd21b7d3160d794a83

parent

b6e7e94521854edd7a4892a61419202b0784eb0b

2 files changed, 28 insertions(+), 11 deletions(-)

jump to
M CHANGELOG.md → CHANGELOG.md

@@ -12,6 +12,8 @@ ### Improvements

### Bug Fixes +- [\#77](https://github.com/arkworks-rs/r1cs-std/pull/77) Fix BLS12 `G2PreparedGadget`'s `AllocVar` when G2 uses a divisive twist. + ## v0.3.1 ### Features
M src/groups/curves/short_weierstrass/bls12/mod.rs → src/groups/curves/short_weierstrass/bls12/mod.rs

@@ -10,7 +10,6 @@ fields::{fp::FpVar, fp2::Fp2Var, FieldVar},

groups::curves::short_weierstrass::*, Vec, }; - use core::fmt::Debug; /// Represents a projective point in G1.

@@ -124,16 +123,32 @@ let ns = cs.into();

let cs = ns.cs(); let g2_prep = f().map(|b| { let projective_coeffs = &b.borrow().ell_coeffs; - let mut z_s = projective_coeffs - .iter() - .map(|(_, _, z)| *z) - .collect::<Vec<_>>(); - ark_ff::fields::batch_inversion(&mut z_s); - projective_coeffs - .iter() - .zip(z_s) - .map(|((x, y, _), z_inv)| (*x * &z_inv, *y * &z_inv)) - .collect::<Vec<_>>() + match P::TWIST_TYPE { + TwistType::M => { + let mut z_s = projective_coeffs + .iter() + .map(|(_, _, z)| *z) + .collect::<Vec<_>>(); + ark_ff::fields::batch_inversion(&mut z_s); + projective_coeffs + .iter() + .zip(z_s) + .map(|((x, y, _), z_inv)| (*x * &z_inv, *y * &z_inv)) + .collect::<Vec<_>>() + } + TwistType::D => { + let mut z_s = projective_coeffs + .iter() + .map(|(z, _, _)| *z) + .collect::<Vec<_>>(); + ark_ff::fields::batch_inversion(&mut z_s); + projective_coeffs + .iter() + .zip(z_s) + .map(|((_, x, y), z_inv)| (*x * &z_inv, *y * &z_inv)) + .collect::<Vec<_>>() + } + } }); let l = Vec::new_variable(