Merge pull request #53 from scroll-tech/setup-optimization

Setup unafe-generation optimization
This commit is contained in:
Carlos Pérez 2022-04-14 20:44:33 +02:00 committed by GitHub
commit 14263e9208
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 7 deletions

View File

@ -59,15 +59,19 @@ impl<C: CurveAffine> Params<C> {
assert!(k <= E::Scalar::S); assert!(k <= E::Scalar::S);
let n: u64 = 1 << k; let n: u64 = 1 << k;
// Calculate g = [G1, [s] G1, [s^2] G1, ..., [s^(n-1)] G1] in parallel.
let g1 = <E::G1Affine as PrimeCurveAffine>::generator();
let s = E::Scalar::random(OsRng); let s = E::Scalar::random(OsRng);
let mut g_projective: Vec<E::G1> = Vec::with_capacity(n as usize); let mut g_projective = vec![E::G1::group_zero(); n as usize];
let g1 = <E::G1Affine as PrimeCurveAffine>::generator(); parallelize(&mut g_projective, |g, start| {
g_projective.push(g1.into()); let mut current_g: E::G1 = g1.into();
// g = [G1, [s] G1, [s^2] G1, ..., [s^(n-1)] G1] current_g *= s.pow_vartime(&[start as u64]);
for i in 1..(n as usize) { for g in g.iter_mut() {
g_projective.push(g_projective[i - 1] * s); *g = current_g;
} current_g *= s;
}
});
let g = { let g = {
let mut g = vec![E::G1Affine::identity(); n as usize]; let mut g = vec![E::G1Affine::identity(); n as usize];