Skip to content

Commit f990089

Browse files
committed
Per PR feedback; only need to verify NID
1 parent f4d5094 commit f990089

File tree

3 files changed

+34
-15
lines changed

3 files changed

+34
-15
lines changed

aws-lc-rs/src/agreement.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,9 @@ impl PrivateKey {
294294
alg: &'static Algorithm,
295295
key_bytes: &[u8],
296296
) -> Result<Self, KeyRejected> {
297+
if key_bytes.len() != alg.id.private_key_len() {
298+
return Err(KeyRejected::wrong_algorithm());
299+
}
297300
let evp_pkey = if AlgorithmID::X25519 == alg.id {
298301
LcPtr::new(unsafe {
299302
EVP_PKEY_new_raw_private_key(

aws-lc-rs/src/ec.rs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,19 +273,37 @@ fn evp_pkey_from_public_key(
273273
Ok(pkey)
274274
}
275275

276-
#[inline]
277-
unsafe fn validate_evp_key(
278-
evp_pkey: &ConstPointer<EVP_PKEY>,
276+
fn verify_ec_key_nid(
277+
ec_key: &ConstPointer<EC_KEY>,
279278
expected_curve_nid: i32,
280279
) -> Result<(), KeyRejected> {
281-
let ec_key = ConstPointer::new(EVP_PKEY_get0_EC_KEY(**evp_pkey))?;
282-
283-
let ec_group = ConstPointer::new(EC_KEY_get0_group(*ec_key))?;
284-
let key_nid = EC_GROUP_get_curve_name(*ec_group);
280+
let ec_group = ConstPointer::new(unsafe { EC_KEY_get0_group(**ec_key) })?;
281+
let key_nid = unsafe { EC_GROUP_get_curve_name(*ec_group) };
285282

286283
if key_nid != expected_curve_nid {
287284
return Err(KeyRejected::wrong_algorithm());
288285
}
286+
Ok(())
287+
}
288+
289+
#[inline]
290+
pub(crate) fn verify_evp_key_nid(
291+
evp_pkey: &ConstPointer<EVP_PKEY>,
292+
expected_curve_nid: i32,
293+
) -> Result<(), KeyRejected> {
294+
let ec_key = ConstPointer::new(unsafe { EVP_PKEY_get0_EC_KEY(**evp_pkey) })?;
295+
verify_ec_key_nid(&ec_key, expected_curve_nid)?;
296+
297+
Ok(())
298+
}
299+
300+
#[inline]
301+
unsafe fn validate_evp_key(
302+
evp_pkey: &ConstPointer<EVP_PKEY>,
303+
expected_curve_nid: i32,
304+
) -> Result<(), KeyRejected> {
305+
let ec_key = ConstPointer::new(EVP_PKEY_get0_EC_KEY(**evp_pkey))?;
306+
verify_ec_key_nid(&ec_key, expected_curve_nid)?;
289307

290308
#[cfg(not(feature = "fips"))]
291309
if 1 != EC_KEY_check_key(*ec_key) {
@@ -333,7 +351,7 @@ pub(crate) unsafe fn unmarshal_der_to_private_key(
333351
.try_into()
334352
.map_err(|_| KeyRejected::too_large())?,
335353
))?;
336-
validate_evp_key(&evp_pkey.as_const(), nid)?;
354+
verify_evp_key_nid(&evp_pkey.as_const(), nid)?;
337355

338356
Ok(evp_pkey)
339357
}

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use aws_lc::{EVP_DigestSign, EVP_DigestSignInit, EVP_PKEY_get0_EC_KEY, EVP_PKEY}
1313
use crate::buffer::Buffer;
1414
use crate::digest::digest_ctx::DigestContext;
1515
use crate::ec::{
16-
evp_key_generate, validate_evp_key, EcdsaSignatureFormat, EcdsaSigningAlgorithm, PublicKey,
16+
evp_key_generate, verify_evp_key_nid, EcdsaSignatureFormat, EcdsaSigningAlgorithm, PublicKey,
1717
};
1818
use crate::encoding::{AsBigEndian, AsDer, EcPrivateKeyBin, EcPrivateKeyRfc5915Der};
1919
use crate::error::{KeyRejected, Unspecified};
@@ -88,15 +88,13 @@ impl EcdsaKeyPair {
8888
alg: &'static EcdsaSigningAlgorithm,
8989
pkcs8: &[u8],
9090
) -> Result<Self, KeyRejected> {
91-
unsafe {
92-
let evp_pkey = LcPtr::try_from(pkcs8)?;
91+
let evp_pkey = LcPtr::try_from(pkcs8)?;
9392

94-
validate_evp_key(&evp_pkey.as_const(), alg.id.nid())?;
93+
verify_evp_key_nid(&evp_pkey.as_const(), alg.id.nid())?;
9594

96-
let key_pair = Self::new(alg, evp_pkey)?;
95+
let key_pair = Self::new(alg, evp_pkey)?;
9796

98-
Ok(key_pair)
99-
}
97+
Ok(key_pair)
10098
}
10199

102100
/// Generates a new key pair and returns the key pair serialized as a

0 commit comments

Comments
 (0)