@@ -297,6 +297,25 @@ impl RsaPrivateKey {
297
297
Self :: new_with_exp ( rng, bit_size, BoxedUint :: from ( Self :: EXP ) )
298
298
}
299
299
300
+ /// Generate a new Rsa key pair of the given bit size using the passed in `rng
301
+ /// and allowing hazardous insecure or weak constructions of `RsaPrivateKey
302
+ ///
303
+ /// Unless you have specific needs, you should use `RsaPrivateKey::new` instead
304
+ #[ cfg( feature = "hazmat" ) ]
305
+ pub fn new_unchecked < R : CryptoRng + ?Sized > (
306
+ rng : & mut R ,
307
+ bit_size : usize ,
308
+ ) -> Result < RsaPrivateKey > {
309
+ let components =
310
+ generate_multi_prime_key_with_exp ( rng, 2 , bit_size, BoxedUint :: from ( Self :: EXP ) ) ?;
311
+ RsaPrivateKey :: from_components_unchecked (
312
+ components. n . get ( ) ,
313
+ components. e ,
314
+ components. d ,
315
+ components. primes ,
316
+ )
317
+ }
318
+
300
319
/// Generate a new RSA key pair of the given bit size and the public exponent
301
320
/// using the passed in `rng`.
302
321
///
@@ -885,33 +904,34 @@ mod tests {
885
904
"30820278020100300d06092a864886f70d0101010500048202623082025e0" ,
886
905
"2010002818100cd1419dc3771354bee0955a90489cce0c98aee6577851358" ,
887
906
"afe386a68bc95287862a1157d5aba8847e8e57b6f2f94748ab7efda3f3c74" ,
888
- "a6702329397ffe0a8f83e2ef5297aa3d9d883cbeb94ee018fd68e986e08d5 " ,
889
- "b044c15e8170217cd57501d42dd72ef691b2a95bcc090d9bca735bba3ecb8 " ,
890
- "38650f13b1aa36d0f454e37ff020301000102818100935c4248cf3df5c21d " ,
891
- "c56f5c07faccd129813f5481d189d94c69fdb366f6beeacb2927552a2032f " ,
892
- "321cd3e92237da40f3fcbfc8df6f9d928b3978c1ec8aab23e857a3ba2db26 " ,
893
- "941ace6ecda8dcb290866a80820b3aa9138179ca867d37825ebcdb48adbe7 " ,
894
- "c397f1e77c4160f0fbf87cc0cd5dff195ac96fd333c0b38384c74c1024100 " ,
907
+ "a6702329397ffe0b1d4f76e1b025d87d583e48b3cfce99d6a507d94eb46c5 " ,
908
+ "242b3addb54d346ecf43eb0d7343bcb258a31d5fa51f47b9e0d7280623901 " ,
909
+ "d1d29af1a986fec92ba5fe2430203010001028181009bb3203326d0c7b31f " ,
910
+ "456d08c6ce4c8379e10640792ecad271afe002406d184096a707c5d50ee00 " ,
911
+ "1c00818266970c3233439551f0e2d879a8f7b90bd3d62fdffa3e661f14c8d " ,
912
+ "cce071f081966e25bb351289810c2f8a012f2fa3f001029d7f2e0cf24f6a4 " ,
913
+ "b139292f8078fac24e7fc8185bab4f02f539267bd09b615e4e19fe1024100 " ,
895
914
"e90ad93c4b19bb40807391b5a9404ce5ea359e7b0556ee25cb2e7455aeb5c" ,
896
915
"af83fc26f34457cdbb173347962c66b6fe0c4686b54dbe0d2c913a7aa924e" ,
897
- "ff5d67024100e148067566a1fa3aabd0672361be62715516c9d62790b03f4 " ,
916
+ "ff6031024100e148067566a1fa3aabd0672361be62715516c9d62790b03f4 " ,
898
917
"326cc00b2f782e6b64a167689e5c9aebe6a4cf594f3083380fe2a0a7edf1f" ,
899
- "325e58c523b98199a9024100df15fc8924577892b1a4707b178faf4d751c6 " ,
900
- "91ed928b387486eaafd0ee7866a8916c73fa1b979d1f037ee6fa904563033 " ,
901
- "b4c5f2911e328a3c9f87c0d190d1c7024057461ce26c7141cc6af5608f6f7 " ,
902
- "55f13c2c0024f49a29ef4d321fb9425c1076033ac7e094c20ce4239185b5a " ,
903
- "246b06795576a178d16fc4d9317db859bfaafa8902410084b2d64651b471b " ,
904
- "f805af14018db693cdab6059063a6aa4eb8f9ca99b319074b79d7dead3d05 " ,
905
- "68c364978be262d3395aa60541d670f94367babebe7616dbc260 "
918
+ "325e58c523b981a0b3024100ab96e85323bd038a3fca588c58ddd681278d6 " ,
919
+ "96e8d84ef7ef676f303afcb7d728287e897a55e84e8c8b9e772da447b3115 " ,
920
+ "8d0912877fa7d4945b4d15c382f7d102400ddde317e2e36185af01baf7809 " ,
921
+ "2b97884664cb233e9421002d0268a7c79a3c313c167b4903466bfacd4da3b " ,
922
+ "db99420df988ab89cdd96a102da2852ff7c134e5024100bafb0dac0fda53f " ,
923
+ "9c755c23483343922727b88a5256a6fb47242e1c99b8f8a2c914f39f7af30 " ,
924
+ "1219245786a6bb15336231d6a9b57ee7e0b3dd75129f93f54ecf "
906
925
) ) ] ;
907
926
assert_tokens ( & priv_key. clone ( ) . readable ( ) , & priv_tokens) ;
908
927
909
928
let pub_tokens = [ Token :: Str ( concat ! (
910
- "30819f300d06092a864886f70d010101050003818d0030818902818100cd1419dc3771354bee" ,
911
- "0955a90489cce0c98aee6577851358afe386a68bc95287862a1157d5aba8847e8e57b6f2f947" ,
912
- "48ab7efda3f3c74a6702329397ffe0a8f83e2ef5297aa3d9d883cbeb94ee018fd68e986e08d5" ,
913
- "b044c15e8170217cd57501d42dd72ef691b2a95bcc090d9bca735bba3ecb838650f13b1aa36d" ,
914
- "0f454e37ff0203010001" ,
929
+ "30819f300d06092a864886f70d010101050003818d0030818902818100cd1" ,
930
+ "419dc3771354bee0955a90489cce0c98aee6577851358afe386a68bc95287" ,
931
+ "862a1157d5aba8847e8e57b6f2f94748ab7efda3f3c74a6702329397ffe0b" ,
932
+ "1d4f76e1b025d87d583e48b3cfce99d6a507d94eb46c5242b3addb54d346e" ,
933
+ "cf43eb0d7343bcb258a31d5fa51f47b9e0d7280623901d1d29af1a986fec9" ,
934
+ "2ba5fe2430203010001"
915
935
) ) ] ;
916
936
assert_tokens (
917
937
& RsaPublicKey :: from ( priv_key. clone ( ) ) . readable ( ) ,
0 commit comments