From f675f4cd2b0699d14e5857aa898eaa1b6e83c6d9 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Fri, 20 Jul 2018 20:33:17 -0700 Subject: [PATCH] fixup! Allow Options in the VartimeMultiscalarMul trait --- src/backend/avx2/scalar_mul/straus.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/backend/avx2/scalar_mul/straus.rs b/src/backend/avx2/scalar_mul/straus.rs index 053713f..1e40b7c 100644 --- a/src/backend/avx2/scalar_mul/straus.rs +++ b/src/backend/avx2/scalar_mul/straus.rs @@ -72,21 +72,24 @@ impl MultiscalarMul for Straus { impl VartimeMultiscalarMul for Straus { type Point = EdwardsPoint; - fn vartime_multiscalar_mul(scalars: I, points: J) -> EdwardsPoint + fn optional_multiscalar_mul(scalars: I, points: J) -> Option where I: IntoIterator, I::Item: Borrow, - J: IntoIterator, - J::Item: Borrow, + J: IntoIterator>, { let nafs: Vec<_> = scalars .into_iter() .map(|c| c.borrow().non_adjacent_form(5)) .collect(); - let lookup_tables: Vec<_> = points + let lookup_tables: Vec<_> = match points .into_iter() - .map(|point| NafLookupTable5::::from(point.borrow())) - .collect(); + .map(|P_opt| P_opt.map(|P| NafLookupTable5::::from(&P))) + .collect::>>() + { + Some(x) => x, + None => return None, + }; let mut Q = ExtendedPoint::identity(); @@ -101,6 +104,7 @@ impl VartimeMultiscalarMul for Straus { } } } - Q.into() + + Some(Q.into()) } }