Skip to content

Commit 948c3b5

Browse files
thomaseizingerdjc
authored andcommitted
Bump to ring 0.17
1 parent 84a3053 commit 948c3b5

File tree

6 files changed

+121
-18
lines changed

6 files changed

+121
-18
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
## Unreleased
55

66
- Rename `RcGenError` to `Error` to avoid stuttering when used fully-qualified via `rcgen::`.
7+
- Upgrade to `ring` `v0.17`.
78

89
## Release 0.11.3 - October 1, 2023
910

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ required-features = ["pem"]
2828

2929
[dependencies]
3030
yasna = { version = "0.5.2", features = ["time", "std"] }
31-
ring = "0.16"
31+
ring = "0.17"
3232
pem = { version = "3.0.2", optional = true }
3333
time = { version = "0.3.6", default-features = false }
3434
x509-parser = { version = "0.15", features = ["verify"], optional = true }

src/key_pair.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ impl KeyPair {
106106
pkcs8: &[u8],
107107
alg: &'static SignatureAlgorithm,
108108
) -> Result<Self, Error> {
109+
let rng = &SystemRandom::new();
109110
let pkcs8_vec = pkcs8.to_vec();
110111

111112
let kind = if alg == &PKCS_ED25519 {
@@ -114,11 +115,13 @@ impl KeyPair {
114115
KeyPairKind::Ec(EcdsaKeyPair::from_pkcs8(
115116
&signature::ECDSA_P256_SHA256_ASN1_SIGNING,
116117
pkcs8,
118+
rng,
117119
)?)
118120
} else if alg == &PKCS_ECDSA_P384_SHA384 {
119121
KeyPairKind::Ec(EcdsaKeyPair::from_pkcs8(
120122
&signature::ECDSA_P384_SHA384_ASN1_SIGNING,
121123
pkcs8,
124+
rng,
122125
)?)
123126
} else if alg == &PKCS_RSA_SHA256 {
124127
let rsakp = RsaKeyPair::from_pkcs8(pkcs8)?;
@@ -146,14 +149,15 @@ impl KeyPair {
146149
pub(crate) fn from_raw(
147150
pkcs8: &[u8],
148151
) -> Result<(KeyPairKind, &'static SignatureAlgorithm), Error> {
152+
let rng = SystemRandom::new();
149153
let (kind, alg) = if let Ok(edkp) = Ed25519KeyPair::from_pkcs8_maybe_unchecked(pkcs8) {
150154
(KeyPairKind::Ed(edkp), &PKCS_ED25519)
151155
} else if let Ok(eckp) =
152-
EcdsaKeyPair::from_pkcs8(&signature::ECDSA_P256_SHA256_ASN1_SIGNING, pkcs8)
156+
EcdsaKeyPair::from_pkcs8(&signature::ECDSA_P256_SHA256_ASN1_SIGNING, pkcs8, &rng)
153157
{
154158
(KeyPairKind::Ec(eckp), &PKCS_ECDSA_P256_SHA256)
155159
} else if let Ok(eckp) =
156-
EcdsaKeyPair::from_pkcs8(&signature::ECDSA_P384_SHA384_ASN1_SIGNING, pkcs8)
160+
EcdsaKeyPair::from_pkcs8(&signature::ECDSA_P384_SHA384_ASN1_SIGNING, pkcs8, &rng)
157161
{
158162
(KeyPairKind::Ec(eckp), &PKCS_ECDSA_P384_SHA384)
159163
} else if let Ok(rsakp) = RsaKeyPair::from_pkcs8(pkcs8) {
@@ -212,22 +216,23 @@ impl TryFrom<Vec<u8>> for KeyPair {
212216
impl KeyPair {
213217
/// Generate a new random key pair for the specified signature algorithm
214218
pub fn generate(alg: &'static SignatureAlgorithm) -> Result<Self, Error> {
215-
let system_random = SystemRandom::new();
219+
let rng = &SystemRandom::new();
220+
216221
match alg.sign_alg {
217222
SignAlgo::EcDsa(sign_alg) => {
218-
let key_pair_doc = EcdsaKeyPair::generate_pkcs8(sign_alg, &system_random)?;
223+
let key_pair_doc = EcdsaKeyPair::generate_pkcs8(sign_alg, rng)?;
219224
let key_pair_serialized = key_pair_doc.as_ref().to_vec();
220225

221226
let key_pair =
222-
EcdsaKeyPair::from_pkcs8(&sign_alg, &&key_pair_doc.as_ref()).unwrap();
227+
EcdsaKeyPair::from_pkcs8(&sign_alg, &&key_pair_doc.as_ref(), rng).unwrap();
223228
Ok(KeyPair {
224229
kind: KeyPairKind::Ec(key_pair),
225230
alg,
226231
serialized_der: key_pair_serialized,
227232
})
228233
},
229234
SignAlgo::EdDsa(_sign_alg) => {
230-
let key_pair_doc = Ed25519KeyPair::generate_pkcs8(&system_random)?;
235+
let key_pair_doc = Ed25519KeyPair::generate_pkcs8(rng)?;
231236
let key_pair_serialized = key_pair_doc.as_ref().to_vec();
232237

233238
let key_pair = Ed25519KeyPair::from_pkcs8(&&key_pair_doc.as_ref()).unwrap();
@@ -275,7 +280,7 @@ impl KeyPair {
275280
},
276281
KeyPairKind::Rsa(kp, padding_alg) => {
277282
let system_random = SystemRandom::new();
278-
let mut signature = vec![0; kp.public_modulus_len()];
283+
let mut signature = vec![0; kp.public().modulus_len()];
279284
kp.sign(*padding_alg, &system_random, msg, &mut signature)?;
280285
let sig = &signature.as_ref();
281286
writer.write_bitvec_bytes(&sig, &sig.len() * 8);

src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1492,7 +1492,8 @@ fn write_general_subtrees(writer: DERWriter, tag: u64, general_subtrees: &[Gener
14921492
impl Certificate {
14931493
/// Generates a new certificate from the given parameters.
14941494
///
1495-
/// If there is no key pair included, then a new key pair will be generated and used.
1495+
/// If you want to control the [`KeyPair`] or the randomness used to generate it, set the [`CertificateParams::key_pair`]
1496+
/// field ahead of time before calling this function.
14961497
pub fn from_params(mut params: CertificateParams) -> Result<Self, Error> {
14971498
let key_pair = if let Some(key_pair) = params.key_pair.take() {
14981499
if !key_pair.is_compatible(&params.alg) {

tests/webpki.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ mod util;
2525

2626
fn sign_msg_ecdsa(cert: &Certificate, msg: &[u8], alg: &'static EcdsaSigningAlgorithm) -> Vec<u8> {
2727
let pk_der = cert.serialize_private_key_der();
28-
let key_pair = EcdsaKeyPair::from_pkcs8(&alg, &pk_der).unwrap();
28+
let key_pair =
29+
EcdsaKeyPair::from_pkcs8(&alg, &pk_der, &ring::rand::SystemRandom::new()).unwrap();
2930
let system_random = SystemRandom::new();
3031
let signature = key_pair.sign(&system_random, &msg).unwrap();
3132
signature.as_ref().to_vec()
@@ -43,7 +44,7 @@ fn sign_msg_rsa(cert: &Certificate, msg: &[u8], encoding: &'static dyn RsaEncodi
4344
let pk_der = cert.serialize_private_key_der();
4445
let key_pair = RsaKeyPair::from_pkcs8(&pk_der).unwrap();
4546
let system_random = SystemRandom::new();
46-
let mut signature = vec![0; key_pair.public_modulus_len()];
47+
let mut signature = vec![0; key_pair.public().modulus_len()];
4748
key_pair
4849
.sign(encoding, &system_random, &msg, &mut signature)
4950
.unwrap();
@@ -334,15 +335,18 @@ fn from_remote() {
334335
}
335336
}
336337

338+
let rng = ring::rand::SystemRandom::new();
337339
let key_pair = KeyPair::generate(&rcgen::PKCS_ECDSA_P256_SHA256).unwrap();
338340
let remote = EcdsaKeyPair::from_pkcs8(
339341
&signature::ECDSA_P256_SHA256_ASN1_SIGNING,
340342
&key_pair.serialize_der(),
343+
&rng,
341344
)
342345
.unwrap();
343346
let key_pair = EcdsaKeyPair::from_pkcs8(
344347
&signature::ECDSA_P256_SHA256_ASN1_SIGNING,
345348
&key_pair.serialize_der(),
349+
&rng,
346350
)
347351
.unwrap();
348352
let remote = KeyPair::from_remote(Box::new(Remote(remote))).unwrap();

0 commit comments

Comments
 (0)