@@ -185,6 +185,10 @@ impl EcdsaKeyPair {
185
185
) -> Result < Self , KeyRejected > {
186
186
let evp_pkey = LcPtr :: < EVP_PKEY > :: parse_rfc5208_private_key ( private_key, EVP_PKEY_EC )
187
187
. 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 ( ) ) ?;
188
192
189
193
Ok ( Self :: new ( alg, evp_pkey) ?)
190
194
}
@@ -261,7 +265,35 @@ impl AsDer<EcPrivateKeyRfc5915Der<'static>> for PrivateKey<'_> {
261
265
#[ cfg( test) ]
262
266
mod tests {
263
267
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
+ }
265
297
266
298
#[ test]
267
299
fn test_from_private_key_der ( ) {
0 commit comments