diff --git a/src/ec/suite_b/ecdsa/signing.rs b/src/ec/suite_b/ecdsa/signing.rs index eb99e2519..c25152dd9 100644 --- a/src/ec/suite_b/ecdsa/signing.rs +++ b/src/ec/suite_b/ecdsa/signing.rs @@ -156,10 +156,7 @@ impl EcdsaKeyPair { ) -> Result { let (seed, public_key) = key_pair.split(); let d = private_key::private_key_as_scalar(alg.private_key_ops, &seed); - let d = alg - .private_scalar_ops - .scalar_ops - .scalar_product(&d, &alg.private_scalar_ops.oneRR_mod_n); + let d = alg.private_scalar_ops.to_mont(&d); let nonce_key = NonceRandomKey::new(alg, &seed, rng)?; Ok(Self { diff --git a/src/ec/suite_b/ops.rs b/src/ec/suite_b/ops.rs index b31d5c607..4aa5d3509 100644 --- a/src/ec/suite_b/ops.rs +++ b/src/ec/suite_b/ops.rs @@ -321,7 +321,13 @@ impl PublicScalarOps { pub struct PrivateScalarOps { pub scalar_ops: &'static ScalarOps, - pub oneRR_mod_n: Scalar, // 1 * R**2 (mod n). TOOD: Use One. + oneRR_mod_n: Scalar, // 1 * R**2 (mod n). TOOD: Use One. +} + +impl PrivateScalarOps { + pub fn to_mont(&self, s: &Scalar) -> Scalar { + self.scalar_ops.scalar_product(s, &self.oneRR_mod_n) + } } // XXX: Inefficient and unnecessarily depends on `PrivateKeyOps`. TODO: implement interleaved wNAF