From 9baa836d0df2b1d0aab531dbe6f2f9e4db1ad734 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 5 May 2020 17:51:14 +1200 Subject: [PATCH] RistrettoPoint::vartime_check_double_scalar_mul_basepoint Checks whether [a]A + [b]B = C in variable time. --- curve25519-dalek/src/ristretto.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/curve25519-dalek/src/ristretto.rs b/curve25519-dalek/src/ristretto.rs index c9d16aba..50a2c77b 100644 --- a/curve25519-dalek/src/ristretto.rs +++ b/curve25519-dalek/src/ristretto.rs @@ -1062,6 +1062,18 @@ impl RistrettoPoint { a, &A.0, b, )) } + + /// Checks whether \\([a]A + [b]B = C\\) in variable time. + pub fn vartime_check_double_scalar_mul_basepoint( + a: &Scalar, + A: &RistrettoPoint, + b: &Scalar, + C: &RistrettoPoint, + ) -> bool { + use crate::traits::IsIdentity; + + crate::backend::scalar_mul_abglsv_pornin(a, &A.0, b, &C.0).is_identity() + } } /// A precomputed table of multiples of a basepoint, used to accelerate