@@ -1335,14 +1335,17 @@ fn write_general_subtrees(writer :DERWriter, tag :u64, general_subtrees :&[Gener
1335
1335
1336
1336
impl Certificate {
1337
1337
/// Generates a new certificate from the given parameters
1338
+ ///
1339
+ /// This function will generate a random (using `ring`'s [`SystemRandom`]) [`KeyPair`] if none is provided in the [`CertificateParams`].
1340
+ /// If you need to control the [`KeyPair`], set it ahead of time before calling this function.
1338
1341
pub fn from_params ( mut params : CertificateParams ) -> Result < Self , RcgenError > {
1339
1342
let key_pair = if let Some ( key_pair) = params. key_pair . take ( ) {
1340
1343
if !key_pair. is_compatible ( & params. alg ) {
1341
1344
return Err ( RcgenError :: CertificateKeyPairMismatch ) ;
1342
1345
}
1343
1346
key_pair
1344
1347
} else {
1345
- KeyPair :: generate ( & params. alg ) ?
1348
+ KeyPair :: generate ( & params. alg , & SystemRandom :: new ( ) ) ?
1346
1349
} ;
1347
1350
1348
1351
Ok ( Certificate {
@@ -1715,22 +1718,21 @@ impl From<pem::PemError> for RcgenError {
1715
1718
1716
1719
impl KeyPair {
1717
1720
/// Generate a new random key pair for the specified signature algorithm
1718
- pub fn generate ( alg : & ' static SignatureAlgorithm ) -> Result < Self , RcgenError > {
1719
- let system_random = SystemRandom :: new ( ) ;
1721
+ pub fn generate ( alg : & ' static SignatureAlgorithm , rng : & dyn SecureRandom ) -> Result < Self , RcgenError > {
1720
1722
match alg. sign_alg {
1721
1723
SignAlgo :: EcDsa ( sign_alg) => {
1722
- let key_pair_doc = EcdsaKeyPair :: generate_pkcs8 ( sign_alg, & system_random ) ?;
1724
+ let key_pair_doc = EcdsaKeyPair :: generate_pkcs8 ( sign_alg, rng ) ?;
1723
1725
let key_pair_serialized = key_pair_doc. as_ref ( ) . to_vec ( ) ;
1724
1726
1725
- let key_pair = EcdsaKeyPair :: from_pkcs8 ( & sign_alg, & & key_pair_doc. as_ref ( ) , & system_random ) . unwrap ( ) ;
1727
+ let key_pair = EcdsaKeyPair :: from_pkcs8 ( & sign_alg, & & key_pair_doc. as_ref ( ) , rng ) . unwrap ( ) ;
1726
1728
Ok ( KeyPair {
1727
1729
kind : KeyPairKind :: Ec ( key_pair) ,
1728
1730
alg,
1729
1731
serialized_der : key_pair_serialized,
1730
1732
} )
1731
1733
} ,
1732
1734
SignAlgo :: EdDsa ( _sign_alg) => {
1733
- let key_pair_doc = Ed25519KeyPair :: generate_pkcs8 ( & system_random ) ?;
1735
+ let key_pair_doc = Ed25519KeyPair :: generate_pkcs8 ( rng ) ?;
1734
1736
let key_pair_serialized = key_pair_doc. as_ref ( ) . to_vec ( ) ;
1735
1737
1736
1738
let key_pair = Ed25519KeyPair :: from_pkcs8 ( & & key_pair_doc. as_ref ( ) ) . unwrap ( ) ;
0 commit comments