Fix BLS12 G2PreparedGadget's AllocVar with a divisive twist (#77)

* fix

* tidy up Cargo; add changelog

* fix nostd

* removal of the test

* fmt
This commit is contained in:
Weikeng Chen
2021-08-11 04:05:13 -07:00
committed by GitHub
parent b6e7e94521
commit a2a5ac491a
2 changed files with 28 additions and 11 deletions

View File

@@ -12,6 +12,8 @@
### 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

View File

@@ -10,7 +10,6 @@ use crate::{
groups::curves::short_weierstrass::*,
Vec,
};
use core::fmt::Debug;
/// Represents a projective point in G1.
@@ -124,16 +123,32 @@ impl<P: Bls12Parameters> AllocVar<G2Prepared<P>, P::Fp> for G2PreparedVar<P> {
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(