diff --git a/elliptic-curve/src/secret_key.rs b/elliptic-curve/src/secret_key.rs index 9d465612f..1559f62bc 100644 --- a/elliptic-curve/src/secret_key.rs +++ b/elliptic-curve/src/secret_key.rs @@ -387,7 +387,7 @@ where Ok(der::SecretDocument::encode_msg(&sec1::EcPrivateKey { private_key: &private_key_bytes, - parameters: None, + parameters: Some(C::OID.into()), public_key: Some(public_key_bytes.as_bytes()), })?) } diff --git a/elliptic-curve/src/secret_key/pkcs8.rs b/elliptic-curve/src/secret_key/pkcs8.rs index e28147e50..2cdd8c7ae 100644 --- a/elliptic-curve/src/secret_key/pkcs8.rs +++ b/elliptic-curve/src/secret_key/pkcs8.rs @@ -18,8 +18,9 @@ use { }, pkcs8::{ EncodePrivateKey, - der::{self, asn1::OctetStringRef}, + der::{self, Encode, asn1::OctetStringRef}, }, + zeroize::Zeroizing, }; // Imports for actual PEM support @@ -71,7 +72,17 @@ where parameters: Some((&C::OID).into()), }; - let ec_private_key = self.to_sec1_der()?; + let private_key_bytes = Zeroizing::new(self.to_bytes()); + let public_key_bytes = self.public_key().to_encoded_point(false); + + let ec_private_key = Zeroizing::new( + EcPrivateKey { + private_key: &private_key_bytes, + parameters: None, + public_key: Some(public_key_bytes.as_bytes()), + } + .to_der()?, + ); let pkcs8_key = pkcs8::PrivateKeyInfoRef::new( algorithm_identifier,