|
@@ -19,7 +19,9 @@
|
|
|
//! Taken from https://docs.rs/ockam_vault/latest/src/ockam_vault/xeddsa.rs.html
|
|
//! Taken from https://docs.rs/ockam_vault/latest/src/ockam_vault/xeddsa.rs.html
|
|
|
//! XEdDSA according to <https://signal.org/docs/specifications/xeddsa/#xeddsa>
|
|
//! XEdDSA according to <https://signal.org/docs/specifications/xeddsa/#xeddsa>
|
|
|
use curve25519_dalek::{
|
|
use curve25519_dalek::{
|
|
|
- constants::ED25519_BASEPOINT_TABLE, montgomery::MontgomeryPoint, scalar::Scalar,
|
|
|
|
|
|
|
+ constants::ED25519_BASEPOINT_TABLE,
|
|
|
|
|
+ montgomery::MontgomeryPoint,
|
|
|
|
|
+ scalar::{clamp_integer, Scalar},
|
|
|
};
|
|
};
|
|
|
use digest::Digest;
|
|
use digest::Digest;
|
|
|
use ed25519_dalek::{Signature, VerifyingKey as Ed25519PublicKey};
|
|
use ed25519_dalek::{Signature, VerifyingKey as Ed25519PublicKey};
|
|
@@ -51,7 +53,7 @@ impl XeddsaSigner for X25519SecretKey {
|
|
|
|
|
|
|
|
// x25519-dalek private keys are already clamped, so just compute
|
|
// x25519-dalek private keys are already clamped, so just compute
|
|
|
// the Ed25519 public key from the Curve25519 private key.
|
|
// the Ed25519 public key from the Curve25519 private key.
|
|
|
- let scalar_k = Scalar::from_bits(self.to_bytes());
|
|
|
|
|
|
|
+ let scalar_k = Scalar::from_bytes_mod_order(clamp_integer(self.to_bytes()));
|
|
|
let edward_point = ED25519_BASEPOINT_TABLE * &scalar_k;
|
|
let edward_point = ED25519_BASEPOINT_TABLE * &scalar_k;
|
|
|
let mut compressed_edwards = edward_point.compress();
|
|
let mut compressed_edwards = edward_point.compress();
|
|
|
let sign = compressed_edwards.0[31] >> 7;
|
|
let sign = compressed_edwards.0[31] >> 7;
|