Skip to content

Commit 7ae747d

Browse files
authored
Bump signature to v3.0.0-rc.4 (#1423)
Also bumps `ecdsa` to v0.17.0-rc.7 This brings `*DigestSigner`/`*DigestVerifier` changes introduced in RustCrypto/traits#2004
1 parent bf7c139 commit 7ae747d

File tree

18 files changed

+116
-85
lines changed

18 files changed

+116
-85
lines changed

Cargo.lock

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ members = [
2222
opt-level = 2
2323

2424
[patch.crates-io]
25-
# https://github.com/RustCrypto/traits/pull/1996
26-
ecdsa = { git = "https://github.com/RustCrypto/signatures", rev = "2cd53cf4fbe82c61c2e2ac7b2099ba743b01074e" }
27-
2825
ed448-goldilocks = { path = "ed448-goldilocks" }
2926
hash2curve = { path = "hash2curve" }
3027
primefield = { path = "primefield" }

bign256/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pkcs8 = { version = "0.11.0-rc.3", optional = true }
3333
primefield = { version = "=0.14.0-pre.5", optional = true }
3434
primeorder = { version = "=0.14.0-pre.8", optional = true }
3535
sec1 = { version = "0.8.0-rc.9", optional = true }
36-
signature = { version = "3.0.0-pre.3", optional = true }
36+
signature = { version = "3.0.0-rc.4", optional = true }
3737

3838
[dev-dependencies]
3939
criterion = "0.7"

bp256/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ rust-version = "1.85"
1717
elliptic-curve = { version = "0.14.0-rc.14", default-features = false, features = ["sec1"] }
1818

1919
# optional dependencies
20-
ecdsa = { version = "0.17.0-rc.6", optional = true, default-features = false, features = ["der"] }
20+
ecdsa = { version = "0.17.0-rc.7", optional = true, default-features = false, features = ["der"] }
2121
primefield = { version = "=0.14.0-pre.5", optional = true }
2222
primeorder = { version = "=0.14.0-pre.8", optional = true }
2323
sha2 = { version = "0.11.0-rc.2", optional = true, default-features = false }

bp384/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ rust-version = "1.85"
1717
elliptic-curve = { version = "0.14.0-rc.14", default-features = false, features = ["sec1"] }
1818

1919
# optional dependencies
20-
ecdsa = { version = "0.17.0-rc.6", optional = true, default-features = false, features = ["der"] }
20+
ecdsa = { version = "0.17.0-rc.7", optional = true, default-features = false, features = ["der"] }
2121
primefield = { version = "=0.14.0-pre.5", optional = true }
2222
primeorder = { version = "=0.14.0-pre.8", optional = true }
2323
sha2 = { version = "0.11.0-rc.2", optional = true, default-features = false }

ed448-goldilocks/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ sha3 = { version = "0.11.0-rc.3", default-features = false }
2323
subtle = { version = "2.6", default-features = false }
2424

2525
# optional dependencies
26-
ed448 = { version = "0.5.0-rc.0", optional = true, default-features = false }
26+
ed448 = { version = "0.5.0-rc.1", optional = true, default-features = false }
2727
serdect = { version = "0.4", optional = true }
28-
signature = { version = "3.0.0-rc.3", optional = true, default-features = false, features = ["digest", "rand_core"] }
28+
signature = { version = "3.0.0-rc.4", optional = true, default-features = false, features = ["digest", "rand_core"] }
2929

3030
[features]
3131
default = ["std", "signing", "pkcs8"]

ed448-goldilocks/src/sign/signing_key.rs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -214,12 +214,15 @@ impl TryFrom<Box<[u8]>> for SigningKey {
214214

215215
impl<D> signature::DigestSigner<D, Signature> for SigningKey
216216
where
217-
D: Digest,
217+
D: Digest + Update,
218218
{
219-
fn try_sign_digest(&self, digest: D) -> Result<Signature, Error> {
220-
let mut prehashed_message = [0u8; 64];
221-
prehashed_message.copy_from_slice(digest.finalize().as_slice());
222-
let sig = self.secret.sign_prehashed(&[], &prehashed_message)?;
219+
fn try_sign_digest<F: Fn(&mut D) -> Result<(), Error>>(
220+
&self,
221+
f: F,
222+
) -> Result<Signature, Error> {
223+
let mut digest = D::new();
224+
f(&mut digest)?;
225+
let sig = self.secret.sign_prehashed(&[], &digest.finalize())?;
223226
Ok(sig.into())
224227
}
225228
}
@@ -240,15 +243,18 @@ impl signature::Signer<Signature> for SigningKey {
240243

241244
impl<D> signature::DigestSigner<D, Signature> for Context<'_, '_, SigningKey>
242245
where
243-
D: Digest,
246+
D: Digest + Update,
244247
{
245-
fn try_sign_digest(&self, digest: D) -> Result<Signature, Error> {
246-
let mut prehashed_message = [0u8; 64];
247-
prehashed_message.copy_from_slice(digest.finalize().as_slice());
248+
fn try_sign_digest<F: Fn(&mut D) -> Result<(), Error>>(
249+
&self,
250+
f: F,
251+
) -> Result<Signature, Error> {
252+
let mut digest = D::new();
253+
f(&mut digest)?;
248254
let sig = self
249255
.key
250256
.secret
251-
.sign_prehashed(self.value, &prehashed_message)?;
257+
.sign_prehashed(self.value, &digest.finalize())?;
252258
Ok(sig.into())
253259
}
254260
}
@@ -269,12 +275,16 @@ impl signature::Signer<Signature> for Context<'_, '_, SigningKey> {
269275

270276
impl<D> signature::DigestVerifier<D, Signature> for SigningKey
271277
where
272-
D: Digest,
278+
D: Digest + Update,
273279
{
274-
fn verify_digest(&self, msg: D, signature: &Signature) -> Result<(), Error> {
280+
fn verify_digest<F: Fn(&mut D) -> Result<(), Error>>(
281+
&self,
282+
f: F,
283+
signature: &Signature,
284+
) -> Result<(), Error> {
275285
<VerifyingKey as signature::DigestVerifier<D, Signature>>::verify_digest(
276286
&self.secret.public_key,
277-
msg,
287+
f,
278288
signature,
279289
)
280290
}

ed448-goldilocks/src/sign/verifying_key.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,16 @@ impl signature::Verifier<Signature> for VerifyingKey {
6464

6565
impl<D> signature::DigestVerifier<D, Signature> for VerifyingKey
6666
where
67-
D: Digest,
67+
D: Digest + Update,
6868
{
69-
fn verify_digest(&self, digest: D, signature: &Signature) -> Result<(), Error> {
70-
let mut prehashed_message = [0u8; 64];
71-
prehashed_message.copy_from_slice(digest.finalize().as_slice());
72-
self.verify_inner(signature, 1, &[], &prehashed_message)
69+
fn verify_digest<F: Fn(&mut D) -> Result<(), Error>>(
70+
&self,
71+
f: F,
72+
signature: &Signature,
73+
) -> Result<(), Error> {
74+
let mut digest = D::new();
75+
f(&mut digest)?;
76+
self.verify_inner(signature, 1, &[], &digest.finalize())
7377
}
7478
}
7579

@@ -81,13 +85,17 @@ impl signature::Verifier<Signature> for Context<'_, '_, VerifyingKey> {
8185

8286
impl<D> signature::DigestVerifier<D, Signature> for Context<'_, '_, VerifyingKey>
8387
where
84-
D: Digest,
88+
D: Digest + Update,
8589
{
86-
fn verify_digest(&self, digest: D, signature: &Signature) -> Result<(), Error> {
87-
let mut prehashed_message = [0u8; 64];
88-
prehashed_message.copy_from_slice(digest.finalize().as_slice());
90+
fn verify_digest<F: Fn(&mut D) -> Result<(), Error>>(
91+
&self,
92+
f: F,
93+
signature: &Signature,
94+
) -> Result<(), Error> {
95+
let mut digest = D::new();
96+
f(&mut digest)?;
8997
self.key
90-
.verify_inner(signature, 1, self.value, &prehashed_message)
98+
.verify_inner(signature, 1, self.value, &digest.finalize())
9199
}
92100
}
93101

k256/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ hash2curve = { version = "0.14.0-rc.1", optional = true }
2525

2626
# optional dependencies
2727
once_cell = { version = "1.21", optional = true, default-features = false }
28-
ecdsa-core = { version = "0.17.0-rc.6", package = "ecdsa", optional = true, default-features = false, features = ["der"] }
28+
ecdsa-core = { version = "0.17.0-rc.7", package = "ecdsa", optional = true, default-features = false, features = ["der"] }
2929
hex-literal = { version = "1", optional = true }
3030
primeorder = { version = "=0.14.0-pre.8", optional = true }
3131
serdect = { version = "0.4", optional = true, default-features = false }
3232
sha2 = { version = "0.11.0-rc.2", optional = true, default-features = false }
33-
signature = { version = "3.0.0-rc.3", optional = true }
33+
signature = { version = "3.0.0-rc.4", optional = true }
3434

3535
[dev-dependencies]
3636
blobby = "0.3"
3737
criterion = "0.7"
38-
ecdsa-core = { version = "0.17.0-rc.6", package = "ecdsa", default-features = false, features = ["dev"] }
38+
ecdsa-core = { version = "0.17.0-rc.7", package = "ecdsa", default-features = false, features = ["dev"] }
3939
hex = "0.4.3"
4040
hex-literal = "1"
4141
num-bigint = "0.4"

k256/src/ecdsa.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,9 @@ mod tests {
178178
mod recovery {
179179
use crate::{
180180
EncodedPoint,
181-
ecdsa::{RecoveryId, Signature, SigningKey, VerifyingKey, signature::DigestVerifier},
181+
ecdsa::{
182+
RecoveryId, Signature, SigningKey, VerifyingKey, signature::hazmat::PrehashVerifier,
183+
},
182184
};
183185
use hex_literal::hex;
184186
use sha2::{Digest, Sha256};
@@ -242,8 +244,8 @@ mod tests {
242244
let msg = hex!(
243245
"e9808504e3b29200831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca0080018080"
244246
);
245-
let digest = Keccak256::new_with_prefix(msg);
246247

248+
let digest = Keccak256::new_with_prefix(msg);
247249
let (sig, recid) = signing_key.sign_digest_recoverable(digest.clone()).unwrap();
248250
assert_eq!(
249251
sig.to_bytes().as_slice(),
@@ -257,7 +259,11 @@ mod tests {
257259
VerifyingKey::recover_from_digest(digest.clone(), &sig, recid).unwrap();
258260

259261
assert_eq!(signing_key.verifying_key(), &verifying_key);
260-
assert!(verifying_key.verify_digest(digest, &sig).is_ok());
262+
assert!(
263+
verifying_key
264+
.verify_prehash(&digest.finalize(), &sig)
265+
.is_ok()
266+
);
261267
}
262268
}
263269

0 commit comments

Comments
 (0)