Skip to content

Commit 5c4fa5c

Browse files
authored
Verify nid after parsing EC (#705)
1 parent caab800 commit 5c4fa5c

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

aws-lc-rs/src/ec/key_pair.rs

+33-1
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,10 @@ impl EcdsaKeyPair {
185185
) -> Result<Self, KeyRejected> {
186186
let evp_pkey = LcPtr::<EVP_PKEY>::parse_rfc5208_private_key(private_key, EVP_PKEY_EC)
187187
.or(parse_rfc5915_private_key(private_key, alg.id.nid()))?;
188+
#[cfg(not(feature = "fips"))]
189+
verify_evp_key_nid(&evp_pkey.as_const(), alg.id.nid())?;
190+
#[cfg(feature = "fips")]
191+
validate_evp_key(&evp_pkey.as_const(), alg.id.nid())?;
188192

189193
Ok(Self::new(alg, evp_pkey)?)
190194
}
@@ -261,7 +265,35 @@ impl AsDer<EcPrivateKeyRfc5915Der<'static>> for PrivateKey<'_> {
261265
#[cfg(test)]
262266
mod tests {
263267
use crate::encoding::AsDer;
264-
use crate::signature::{EcdsaKeyPair, ECDSA_P256_SHA256_FIXED_SIGNING};
268+
use crate::signature::{
269+
EcdsaKeyPair, ECDSA_P256K1_SHA256_ASN1_SIGNING, ECDSA_P256_SHA256_FIXED_SIGNING,
270+
ECDSA_P384_SHA3_384_FIXED_SIGNING, ECDSA_P521_SHA512_FIXED_SIGNING,
271+
};
272+
273+
#[test]
274+
fn test_reject_wrong_curve() {
275+
let supported_algs = [
276+
&ECDSA_P256_SHA256_FIXED_SIGNING,
277+
&ECDSA_P384_SHA3_384_FIXED_SIGNING,
278+
&ECDSA_P521_SHA512_FIXED_SIGNING,
279+
&ECDSA_P256K1_SHA256_ASN1_SIGNING,
280+
];
281+
282+
for marshal_alg in supported_algs {
283+
let key_pair = EcdsaKeyPair::generate(marshal_alg).unwrap();
284+
let key_pair_doc = key_pair.to_pkcs8v1().unwrap();
285+
let key_pair_bytes = key_pair_doc.as_ref();
286+
287+
for parse_alg in supported_algs {
288+
if parse_alg == marshal_alg {
289+
continue;
290+
}
291+
292+
let result = EcdsaKeyPair::from_private_key_der(parse_alg, key_pair_bytes);
293+
assert!(result.is_err());
294+
}
295+
}
296+
}
265297

266298
#[test]
267299
fn test_from_private_key_der() {

0 commit comments

Comments
 (0)