Skip to content

Commit 82fa1e9

Browse files
committed
chore(deps): rustcrypto major updates
1 parent 1bde5e2 commit 82fa1e9

3 files changed

Lines changed: 45 additions & 45 deletions

File tree

httpsig/Cargo.toml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,25 @@ indexmap = { version = "2.14.0" }
2424
rand = { version = "0.10.2" }
2525

2626
# crypto
27-
pkcs8 = { version = "0.10.2", default-features = false, features = ["pem"] }
28-
spki = { version = "0.7.3", default-features = false, features = ["pem"] }
29-
sec1 = { version = "0.7.3", default-features = false, features = ["der"] }
27+
pkcs8 = { version = "0.11.0", default-features = false, features = ["pem"] }
28+
spki = { version = "0.8.0", default-features = false, features = ["pem"] }
29+
sec1 = { version = "0.8.1", default-features = false, features = ["der"] }
3030
ed25519-compact = { version = "2.3.1", default-features = false, features = [
3131
"random",
3232
] }
33-
ecdsa = { version = "0.16.9", default-features = false, features = [
34-
"arithmetic",
33+
ecdsa = { version = "0.17.0", default-features = false, features = [
34+
"algorithm",
3535
] }
36-
p256 = { version = "0.13.2", default-features = false, features = [
36+
p256 = { version = "0.14.0", default-features = false, features = [
3737
"arithmetic",
3838
"ecdsa",
3939
] }
40-
p384 = { version = "0.13.1", default-features = false, features = [
40+
p384 = { version = "0.14.0", default-features = false, features = [
4141
"arithmetic",
4242
"ecdsa",
4343
] }
44-
hmac = { version = "0.12.1" }
45-
sha2 = { version = "0.10.9", default-features = false }
44+
hmac = { version = "0.13.0" }
45+
sha2 = { version = "0.11.0", default-features = false }
4646
bytes = { version = "1.12.1" }
4747

4848
# rsa is optional
@@ -57,5 +57,3 @@ base64 = { version = "0.22.1" }
5757
# for rfc8941 structured field values
5858
sfv = { version = "0.15.0" }
5959

60-
[dev-dependencies]
61-
rand-085 = { package = "rand", version = "0.8.7" } # testing only

httpsig/src/crypto/asymmetric.rs

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ use crate::{
44
trace::*,
55
};
66
use ecdsa::{
7-
elliptic_curve::{PublicKey as EcPublicKey, SecretKey as EcSecretKey, sec1::ToEncodedPoint},
7+
elliptic_curve::{PublicKey as EcPublicKey, SecretKey as EcSecretKey, sec1::ToSec1Point},
88
signature::{DigestSigner, DigestVerifier},
99
};
1010
use ed25519_compact::{PublicKey as Ed25519PublicKey, SecretKey as Ed25519SecretKey};
1111
use p256::NistP256;
1212
use p384::NistP384;
13-
use pkcs8::{Document, PrivateKeyInfo, der::Decode};
13+
use pkcs8::{Document, PrivateKeyInfoRef, der::Decode};
1414
use sha2::{Digest, Sha256, Sha384};
1515
use spki::SubjectPublicKeyInfoRef;
1616

@@ -66,12 +66,12 @@ impl SecretKey {
6666
match alg {
6767
AlgorithmName::EcdsaP256Sha256 => {
6868
debug!("Read P256 private key");
69-
let sk = EcSecretKey::from_bytes(bytes.into()).map_err(|e| HttpSigError::ParsePrivateKeyError(e.to_string()))?;
69+
let sk = EcSecretKey::from_slice(bytes).map_err(|e| HttpSigError::ParsePrivateKeyError(e.to_string()))?;
7070
Ok(Self::EcdsaP256Sha256(sk))
7171
}
7272
AlgorithmName::EcdsaP384Sha384 => {
7373
debug!("Read P384 private key");
74-
let sk = EcSecretKey::from_bytes(bytes.into()).map_err(|e| HttpSigError::ParsePrivateKeyError(e.to_string()))?;
74+
let sk = EcSecretKey::from_slice(bytes).map_err(|e| HttpSigError::ParsePrivateKeyError(e.to_string()))?;
7575
Ok(Self::EcdsaP384Sha384(sk))
7676
}
7777
AlgorithmName::Ed25519 => {
@@ -101,7 +101,7 @@ impl SecretKey {
101101
/// parse der
102102
/// Derive secret key from der bytes
103103
pub fn from_der(alg: &AlgorithmName, der: &[u8]) -> HttpSigResult<Self> {
104-
let pki = PrivateKeyInfo::from_der(der).map_err(|e| HttpSigError::ParsePrivateKeyError(e.to_string()))?;
104+
let pki = PrivateKeyInfoRef::from_der(der).map_err(|e| HttpSigError::ParsePrivateKeyError(e.to_string()))?;
105105

106106
let sk_bytes = match pki.algorithm.oid.to_string().as_ref() {
107107
// ec
@@ -119,18 +119,17 @@ impl SecretKey {
119119
if algorithm_name != *alg {
120120
return Err(HttpSigError::ParsePrivateKeyError("Algorithm mismatch".to_string()));
121121
}
122-
let sk_bytes = sec1::EcPrivateKey::try_from(pki.private_key)
122+
sec1::EcPrivateKey::try_from(pki.private_key.as_bytes())
123123
.map_err(|e| HttpSigError::ParsePrivateKeyError(format!("Error decoding EcPrivateKey: {e}")))?
124-
.private_key;
125-
sk_bytes
124+
.private_key
126125
}
127126
// ed25519
128127
algorithm_oids::Ed25519 => {
129128
// assert algorithm
130129
if AlgorithmName::Ed25519 != *alg {
131130
return Err(HttpSigError::ParsePrivateKeyError("Algorithm mismatch".to_string()));
132131
}
133-
&pki.private_key[2..]
132+
&pki.private_key.as_bytes()[2..]
134133
}
135134
// rsa
136135
#[cfg(feature = "rsa-signature")]
@@ -140,7 +139,7 @@ impl SecretKey {
140139
AlgorithmName::RsaV1_5Sha256 | AlgorithmName::RsaPssSha512 => {}
141140
_ => return Err(HttpSigError::ParsePrivateKeyError("Algorithm mismatch".to_string())),
142141
}
143-
pki.private_key
142+
pki.private_key.as_bytes()
144143
}
145144
_ => return Err(HttpSigError::ParsePrivateKeyError("Unsupported algorithm".to_string())),
146145
};
@@ -178,17 +177,13 @@ impl super::SigningKey for SecretKey {
178177
Self::EcdsaP256Sha256(sk) => {
179178
debug!("Sign EcdsaP256Sha256");
180179
let sk = ecdsa::SigningKey::from(sk);
181-
let mut digest = <Sha256 as Digest>::new();
182-
digest.update(data);
183-
let sig: ecdsa::Signature<NistP256> = sk.sign_digest(digest);
180+
let sig: ecdsa::Signature<NistP256> = sk.sign_digest(|digest: &mut Sha256| digest.update(data));
184181
Ok(sig.to_bytes().to_vec())
185182
}
186183
Self::EcdsaP384Sha384(sk) => {
187184
debug!("Sign EcdsaP384Sha384");
188185
let sk = ecdsa::SigningKey::from(sk);
189-
let mut digest = <Sha384 as Digest>::new();
190-
digest.update(data);
191-
let sig: ecdsa::Signature<NistP384> = sk.sign_digest(digest);
186+
let sig: ecdsa::Signature<NistP384> = sk.sign_digest(|digest: &mut Sha384| digest.update(data));
192187
Ok(sig.to_bytes().to_vec())
193188
}
194189
Self::Ed25519(sk) => {
@@ -359,23 +354,31 @@ impl super::VerifyingKey for PublicKey {
359354
match self {
360355
Self::EcdsaP256Sha256(pk) => {
361356
debug!("Verify EcdsaP256Sha256");
362-
let signature = ecdsa::Signature::<NistP256>::from_bytes(signature.into())
363-
.map_err(|e| HttpSigError::ParseSignatureError(e.to_string()))?;
357+
let signature =
358+
ecdsa::Signature::<NistP256>::from_slice(signature).map_err(|e| HttpSigError::ParseSignatureError(e.to_string()))?;
364359
let vk = ecdsa::VerifyingKey::from(pk);
365-
let mut digest = <Sha256 as Digest>::new();
366-
digest.update(data);
367-
vk.verify_digest(digest, &signature)
368-
.map_err(|e| HttpSigError::InvalidSignature(e.to_string()))
360+
vk.verify_digest(
361+
|digest: &mut Sha256| {
362+
digest.update(data);
363+
Ok(())
364+
},
365+
&signature,
366+
)
367+
.map_err(|e| HttpSigError::InvalidSignature(e.to_string()))
369368
}
370369
Self::EcdsaP384Sha384(pk) => {
371370
debug!("Verify EcdsaP384Sha384");
372-
let signature = ecdsa::Signature::<NistP384>::from_bytes(signature.into())
373-
.map_err(|e| HttpSigError::ParseSignatureError(e.to_string()))?;
371+
let signature =
372+
ecdsa::Signature::<NistP384>::from_slice(signature).map_err(|e| HttpSigError::ParseSignatureError(e.to_string()))?;
374373
let vk = ecdsa::VerifyingKey::from(pk);
375-
let mut digest = <Sha384 as Digest>::new();
376-
digest.update(data);
377-
vk.verify_digest(digest, &signature)
378-
.map_err(|e| HttpSigError::InvalidSignature(e.to_string()))
374+
vk.verify_digest(
375+
|digest: &mut Sha384| {
376+
digest.update(data);
377+
Ok(())
378+
},
379+
&signature,
380+
)
381+
.map_err(|e| HttpSigError::InvalidSignature(e.to_string()))
379382
}
380383
Self::Ed25519(pk) => {
381384
debug!("Verify Ed25519");
@@ -409,8 +412,8 @@ impl super::VerifyingKey for PublicKey {
409412
use base64::{Engine as _, engine::general_purpose};
410413

411414
let bytes = match self {
412-
Self::EcdsaP256Sha256(vk) => vk.to_encoded_point(true).as_bytes().to_vec(),
413-
Self::EcdsaP384Sha384(vk) => vk.to_encoded_point(true).as_bytes().to_vec(),
415+
Self::EcdsaP256Sha256(vk) => vk.to_sec1_point(true).as_bytes().to_vec(),
416+
Self::EcdsaP384Sha384(vk) => vk.to_sec1_point(true).as_bytes().to_vec(),
414417
Self::Ed25519(vk) => vk.as_ref().to_vec(),
415418
#[cfg(feature = "rsa-signature")]
416419
Self::RsaV1_5Sha256(vk) => vk
@@ -447,7 +450,7 @@ impl super::VerifyingKey for PublicKey {
447450

448451
#[cfg(test)]
449452
mod tests {
450-
use p256::elliptic_curve::group::GroupEncoding;
453+
use p256::elliptic_curve::{Generate, group::GroupEncoding};
451454

452455
use super::*;
453456
use std::matches;
@@ -537,8 +540,7 @@ tQIDAQAB
537540
let pk = PublicKey::from_bytes(&AlgorithmName::Ed25519, ed25519_pk).unwrap();
538541
assert!(matches!(pk, PublicKey::Ed25519(_)));
539542

540-
let mut rng = rand_085::thread_rng();
541-
let es256_sk = p256::ecdsa::SigningKey::random(&mut rng);
543+
let es256_sk = p256::ecdsa::SigningKey::generate_from_rng(&mut rand::rng());
542544
let es256_pk = es256_sk.verifying_key();
543545
let sk = SecretKey::from_bytes(&AlgorithmName::EcdsaP256Sha256, es256_sk.to_bytes().as_ref()).unwrap();
544546
assert!(matches!(sk, SecretKey::EcdsaP256Sha256(_)));

httpsig/src/crypto/symmetric.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::{
44
trace::*,
55
};
66
use base64::{Engine as _, engine::general_purpose};
7-
use hmac::{Hmac, Mac};
7+
use hmac::{Hmac, KeyInit, Mac};
88
use sha2::{Digest, Sha256};
99

1010
type HmacSha256 = Hmac<sha2::Sha256>;

0 commit comments

Comments
 (0)