diff --git a/src/curve/curve_multiplication.rs b/src/curve/curve_multiplication.rs index b09b8a0f..83c444d8 100644 --- a/src/curve/curve_multiplication.rs +++ b/src/curve/curve_multiplication.rs @@ -16,23 +16,22 @@ fn digits_per_scalar() -> usize { #[derive(Clone)] pub struct MultiplicationPrecomputation { /// [(2^w)^i] g for each i < digits_per_scalar. - powers: Vec>, + powers: Vec>, } impl ProjectivePoint { pub fn mul_precompute(&self) -> MultiplicationPrecomputation { let num_digits = digits_per_scalar::(); - let mut powers_proj = Vec::with_capacity(num_digits); - powers_proj.push(*self); + let mut powers = Vec::with_capacity(num_digits); + powers.push(*self); for i in 1..num_digits { - let mut power_i_proj = powers_proj[i - 1]; + let mut power_i = powers[i - 1]; for _j in 0..WINDOW_BITS { - power_i_proj = power_i_proj.double(); + power_i = power_i.double(); } - powers_proj.push(power_i_proj); + powers.push(power_i); } - let powers = ProjectivePoint::batch_to_affine(&powers_proj); MultiplicationPrecomputation { powers } } @@ -59,7 +58,11 @@ impl ProjectivePoint { all_summands.push(u_summands); } - let all_sums = affine_multisummation_batch_inversion(all_summands); + let all_sums: Vec> = all_summands + .iter() + .cloned() + .map(|vec| vec.iter().fold(ProjectivePoint::ZERO, |a, &b| a + b)) + .collect(); for i in 0..all_sums.len() { u = u + all_sums[i]; y = y + u; diff --git a/src/curve/mod.rs b/src/curve/mod.rs index d31e373e..8dd6f0d6 100644 --- a/src/curve/mod.rs +++ b/src/curve/mod.rs @@ -3,4 +3,5 @@ pub mod curve_msm; pub mod curve_multiplication; pub mod curve_summation; pub mod curve_types; +pub mod ecdsa; pub mod secp256k1; diff --git a/src/gadgets/mod.rs b/src/gadgets/mod.rs index 09acb9de..6bb372a3 100644 --- a/src/gadgets/mod.rs +++ b/src/gadgets/mod.rs @@ -3,6 +3,7 @@ pub mod arithmetic_extension; pub mod arithmetic_u32; pub mod biguint; pub mod curve; +//pub mod ecdsa; pub mod hash; pub mod insert; pub mod interpolation;