mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-03 20:13:48 +00:00
ed25519: update signature to v3.0.0-rc.4 (#828)
This commit is contained in:
parent
adb6a12b4a
commit
c3a82a8a38
4 changed files with 52 additions and 21 deletions
|
|
@ -32,7 +32,7 @@ curve25519-dalek = { version = "=5.0.0-pre.1", default-features = false, feature
|
|||
"digest",
|
||||
] }
|
||||
ed25519 = { version = "3.0.0-rc.0", default-features = false }
|
||||
signature = { version = "3.0.0-rc.3", optional = true, default-features = false }
|
||||
signature = { version = "3.0.0-rc.4", optional = true, default-features = false }
|
||||
sha2 = { version = "0.11.0-rc.2", default-features = false }
|
||||
subtle = { version = "2.3.0", default-features = false }
|
||||
|
||||
|
|
|
|||
|
|
@ -31,16 +31,22 @@ use crate::{InternalError, SignatureError};
|
|||
/// # let signing_key = SigningKey::generate(&mut csprng);
|
||||
/// # let verifying_key = signing_key.verifying_key();
|
||||
/// let context_str = b"Local Channel 3";
|
||||
/// let prehashed_message = Sha512::default().chain_update(b"Stay tuned for more news at 7");
|
||||
/// let message = b"Stay tuned for more news at 7";
|
||||
///
|
||||
/// // Signer
|
||||
/// let signing_context = signing_key.with_context(context_str).unwrap();
|
||||
/// let signature = signing_context.sign_digest(prehashed_message.clone());
|
||||
/// let signature = signing_context.sign_digest(|digest: &mut Sha512| digest.update(message));
|
||||
///
|
||||
/// // Verifier
|
||||
/// let verifying_context = verifying_key.with_context(context_str).unwrap();
|
||||
/// let verified: bool = verifying_context
|
||||
/// .verify_digest(prehashed_message, &signature)
|
||||
/// .verify_digest(
|
||||
/// |digest: &mut Sha512| {
|
||||
/// digest.update(message);
|
||||
/// Ok(())
|
||||
/// },
|
||||
/// &signature
|
||||
/// )
|
||||
/// .is_ok();
|
||||
///
|
||||
/// # assert!(verified);
|
||||
|
|
@ -96,16 +102,23 @@ mod test {
|
|||
let verifying_key: VerifyingKey = signing_key.verifying_key();
|
||||
|
||||
let context_str = b"Local Channel 3";
|
||||
let prehashed_message = Sha512::default().chain_update(b"Stay tuned for more news at 7");
|
||||
let message = b"Stay tuned for more news at 7";
|
||||
|
||||
// Signer
|
||||
let signing_context = signing_key.with_context(context_str).unwrap();
|
||||
let signature: Signature = signing_context.sign_digest(prehashed_message.clone());
|
||||
let signature: Signature =
|
||||
signing_context.sign_digest(|digest: &mut Sha512| digest.update(message));
|
||||
|
||||
// Verifier
|
||||
let verifying_context = verifying_key.with_context(context_str).unwrap();
|
||||
let verified: bool = verifying_context
|
||||
.verify_digest(prehashed_message, &signature)
|
||||
.verify_digest(
|
||||
|digest: &mut Sha512| {
|
||||
digest.update(message);
|
||||
Ok(())
|
||||
},
|
||||
&signature,
|
||||
)
|
||||
.is_ok();
|
||||
|
||||
assert!(verified);
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ use ed25519::signature::{KeypairRef, MultipartSigner, MultipartVerifier, Signer,
|
|||
#[cfg(feature = "digest")]
|
||||
use crate::context::Context;
|
||||
#[cfg(feature = "digest")]
|
||||
use curve25519_dalek::digest::Update;
|
||||
#[cfg(feature = "digest")]
|
||||
use signature::DigestSigner;
|
||||
|
||||
#[cfg(feature = "zeroize")]
|
||||
|
|
@ -589,10 +591,15 @@ impl MultipartSigner<Signature> for SigningKey {
|
|||
#[cfg(feature = "digest")]
|
||||
impl<D> DigestSigner<D, Signature> for SigningKey
|
||||
where
|
||||
D: Digest<OutputSize = U64>,
|
||||
D: Digest<OutputSize = U64> + Update,
|
||||
{
|
||||
fn try_sign_digest(&self, msg_digest: D) -> Result<Signature, SignatureError> {
|
||||
self.sign_prehashed(msg_digest, None)
|
||||
fn try_sign_digest<F: Fn(&mut D) -> Result<(), SignatureError>>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> Result<Signature, SignatureError> {
|
||||
let mut digest = D::new();
|
||||
f(&mut digest)?;
|
||||
self.sign_prehashed(digest, None)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -607,10 +614,15 @@ where
|
|||
#[cfg(feature = "digest")]
|
||||
impl<D> DigestSigner<D, Signature> for Context<'_, '_, SigningKey>
|
||||
where
|
||||
D: Digest<OutputSize = U64>,
|
||||
D: Digest<OutputSize = U64> + Update,
|
||||
{
|
||||
fn try_sign_digest(&self, msg_digest: D) -> Result<Signature, SignatureError> {
|
||||
self.key().sign_prehashed(msg_digest, Some(self.value()))
|
||||
fn try_sign_digest<F: Fn(&mut D) -> Result<(), SignatureError>>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> Result<Signature, SignatureError> {
|
||||
let mut digest = D::new();
|
||||
f(&mut digest)?;
|
||||
self.key().sign_prehashed(digest, Some(self.value()))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
|||
#[cfg(feature = "digest")]
|
||||
use crate::context::Context;
|
||||
#[cfg(feature = "digest")]
|
||||
use curve25519_dalek::digest::Update;
|
||||
#[cfg(feature = "digest")]
|
||||
use signature::DigestVerifier;
|
||||
|
||||
use crate::{
|
||||
|
|
@ -579,14 +581,16 @@ impl MultipartVerifier<ed25519::Signature> for VerifyingKey {
|
|||
#[cfg(feature = "digest")]
|
||||
impl<MsgDigest> DigestVerifier<MsgDigest, ed25519::Signature> for VerifyingKey
|
||||
where
|
||||
MsgDigest: Digest<OutputSize = U64>,
|
||||
MsgDigest: Digest<OutputSize = U64> + Update,
|
||||
{
|
||||
fn verify_digest(
|
||||
fn verify_digest<F: Fn(&mut MsgDigest) -> Result<(), SignatureError>>(
|
||||
&self,
|
||||
msg_digest: MsgDigest,
|
||||
f: F,
|
||||
signature: &ed25519::Signature,
|
||||
) -> Result<(), SignatureError> {
|
||||
self.verify_prehashed(msg_digest, None, signature)
|
||||
let mut digest = MsgDigest::new();
|
||||
f(&mut digest)?;
|
||||
self.verify_prehashed(digest, None, signature)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -595,15 +599,17 @@ where
|
|||
#[cfg(feature = "digest")]
|
||||
impl<MsgDigest> DigestVerifier<MsgDigest, ed25519::Signature> for Context<'_, '_, VerifyingKey>
|
||||
where
|
||||
MsgDigest: Digest<OutputSize = U64>,
|
||||
MsgDigest: Digest<OutputSize = U64> + Update,
|
||||
{
|
||||
fn verify_digest(
|
||||
fn verify_digest<F: Fn(&mut MsgDigest) -> Result<(), SignatureError>>(
|
||||
&self,
|
||||
msg_digest: MsgDigest,
|
||||
f: F,
|
||||
signature: &ed25519::Signature,
|
||||
) -> Result<(), SignatureError> {
|
||||
let mut digest = MsgDigest::new();
|
||||
f(&mut digest)?;
|
||||
self.key()
|
||||
.verify_prehashed(msg_digest, Some(self.value()), signature)
|
||||
.verify_prehashed(digest, Some(self.value()), signature)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue