Skip to content

Commit c3a82a8

Browse files
authored
ed25519: update signature to v3.0.0-rc.4 (#828)
1 parent adb6a12 commit c3a82a8

File tree

4 files changed

+52
-21
lines changed

4 files changed

+52
-21
lines changed

ed25519-dalek/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ curve25519-dalek = { version = "=5.0.0-pre.1", default-features = false, feature
3232
"digest",
3333
] }
3434
ed25519 = { version = "3.0.0-rc.0", default-features = false }
35-
signature = { version = "3.0.0-rc.3", optional = true, default-features = false }
35+
signature = { version = "3.0.0-rc.4", optional = true, default-features = false }
3636
sha2 = { version = "0.11.0-rc.2", default-features = false }
3737
subtle = { version = "2.3.0", default-features = false }
3838

ed25519-dalek/src/context.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,22 @@ use crate::{InternalError, SignatureError};
3131
/// # let signing_key = SigningKey::generate(&mut csprng);
3232
/// # let verifying_key = signing_key.verifying_key();
3333
/// let context_str = b"Local Channel 3";
34-
/// let prehashed_message = Sha512::default().chain_update(b"Stay tuned for more news at 7");
34+
/// let message = b"Stay tuned for more news at 7";
3535
///
3636
/// // Signer
3737
/// let signing_context = signing_key.with_context(context_str).unwrap();
38-
/// let signature = signing_context.sign_digest(prehashed_message.clone());
38+
/// let signature = signing_context.sign_digest(|digest: &mut Sha512| digest.update(message));
3939
///
4040
/// // Verifier
4141
/// let verifying_context = verifying_key.with_context(context_str).unwrap();
4242
/// let verified: bool = verifying_context
43-
/// .verify_digest(prehashed_message, &signature)
43+
/// .verify_digest(
44+
/// |digest: &mut Sha512| {
45+
/// digest.update(message);
46+
/// Ok(())
47+
/// },
48+
/// &signature
49+
/// )
4450
/// .is_ok();
4551
///
4652
/// # assert!(verified);
@@ -96,16 +102,23 @@ mod test {
96102
let verifying_key: VerifyingKey = signing_key.verifying_key();
97103

98104
let context_str = b"Local Channel 3";
99-
let prehashed_message = Sha512::default().chain_update(b"Stay tuned for more news at 7");
105+
let message = b"Stay tuned for more news at 7";
100106

101107
// Signer
102108
let signing_context = signing_key.with_context(context_str).unwrap();
103-
let signature: Signature = signing_context.sign_digest(prehashed_message.clone());
109+
let signature: Signature =
110+
signing_context.sign_digest(|digest: &mut Sha512| digest.update(message));
104111

105112
// Verifier
106113
let verifying_context = verifying_key.with_context(context_str).unwrap();
107114
let verified: bool = verifying_context
108-
.verify_digest(prehashed_message, &signature)
115+
.verify_digest(
116+
|digest: &mut Sha512| {
117+
digest.update(message);
118+
Ok(())
119+
},
120+
&signature,
121+
)
109122
.is_ok();
110123

111124
assert!(verified);

ed25519-dalek/src/signing.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ use ed25519::signature::{KeypairRef, MultipartSigner, MultipartVerifier, Signer,
3434
#[cfg(feature = "digest")]
3535
use crate::context::Context;
3636
#[cfg(feature = "digest")]
37+
use curve25519_dalek::digest::Update;
38+
#[cfg(feature = "digest")]
3739
use signature::DigestSigner;
3840

3941
#[cfg(feature = "zeroize")]
@@ -589,10 +591,15 @@ impl MultipartSigner<Signature> for SigningKey {
589591
#[cfg(feature = "digest")]
590592
impl<D> DigestSigner<D, Signature> for SigningKey
591593
where
592-
D: Digest<OutputSize = U64>,
594+
D: Digest<OutputSize = U64> + Update,
593595
{
594-
fn try_sign_digest(&self, msg_digest: D) -> Result<Signature, SignatureError> {
595-
self.sign_prehashed(msg_digest, None)
596+
fn try_sign_digest<F: Fn(&mut D) -> Result<(), SignatureError>>(
597+
&self,
598+
f: F,
599+
) -> Result<Signature, SignatureError> {
600+
let mut digest = D::new();
601+
f(&mut digest)?;
602+
self.sign_prehashed(digest, None)
596603
}
597604
}
598605

@@ -607,10 +614,15 @@ where
607614
#[cfg(feature = "digest")]
608615
impl<D> DigestSigner<D, Signature> for Context<'_, '_, SigningKey>
609616
where
610-
D: Digest<OutputSize = U64>,
617+
D: Digest<OutputSize = U64> + Update,
611618
{
612-
fn try_sign_digest(&self, msg_digest: D) -> Result<Signature, SignatureError> {
613-
self.key().sign_prehashed(msg_digest, Some(self.value()))
619+
fn try_sign_digest<F: Fn(&mut D) -> Result<(), SignatureError>>(
620+
&self,
621+
f: F,
622+
) -> Result<Signature, SignatureError> {
623+
let mut digest = D::new();
624+
f(&mut digest)?;
625+
self.key().sign_prehashed(digest, Some(self.value()))
614626
}
615627
}
616628

ed25519-dalek/src/verifying.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer};
3232
#[cfg(feature = "digest")]
3333
use crate::context::Context;
3434
#[cfg(feature = "digest")]
35+
use curve25519_dalek::digest::Update;
36+
#[cfg(feature = "digest")]
3537
use signature::DigestVerifier;
3638

3739
use crate::{
@@ -579,14 +581,16 @@ impl MultipartVerifier<ed25519::Signature> for VerifyingKey {
579581
#[cfg(feature = "digest")]
580582
impl<MsgDigest> DigestVerifier<MsgDigest, ed25519::Signature> for VerifyingKey
581583
where
582-
MsgDigest: Digest<OutputSize = U64>,
584+
MsgDigest: Digest<OutputSize = U64> + Update,
583585
{
584-
fn verify_digest(
586+
fn verify_digest<F: Fn(&mut MsgDigest) -> Result<(), SignatureError>>(
585587
&self,
586-
msg_digest: MsgDigest,
588+
f: F,
587589
signature: &ed25519::Signature,
588590
) -> Result<(), SignatureError> {
589-
self.verify_prehashed(msg_digest, None, signature)
591+
let mut digest = MsgDigest::new();
592+
f(&mut digest)?;
593+
self.verify_prehashed(digest, None, signature)
590594
}
591595
}
592596

@@ -595,15 +599,17 @@ where
595599
#[cfg(feature = "digest")]
596600
impl<MsgDigest> DigestVerifier<MsgDigest, ed25519::Signature> for Context<'_, '_, VerifyingKey>
597601
where
598-
MsgDigest: Digest<OutputSize = U64>,
602+
MsgDigest: Digest<OutputSize = U64> + Update,
599603
{
600-
fn verify_digest(
604+
fn verify_digest<F: Fn(&mut MsgDigest) -> Result<(), SignatureError>>(
601605
&self,
602-
msg_digest: MsgDigest,
606+
f: F,
603607
signature: &ed25519::Signature,
604608
) -> Result<(), SignatureError> {
609+
let mut digest = MsgDigest::new();
610+
f(&mut digest)?;
605611
self.key()
606-
.verify_prehashed(msg_digest, Some(self.value()), signature)
612+
.verify_prehashed(digest, Some(self.value()), signature)
607613
}
608614
}
609615

0 commit comments

Comments
 (0)