@@ -37,6 +37,7 @@ mod _ssl {
3737 lock:: { PyMutex , PyRwLock } ,
3838 } ,
3939 socket:: { PySocket , SelectKind , sock_select, timeout_error_msg} ,
40+ ssl:: compat,
4041 vm:: {
4142 AsObject , Py , PyObject , PyObjectRef , PyPayload , PyRef , PyResult , TryFromObject ,
4243 VirtualMachine ,
@@ -64,7 +65,6 @@ mod _ssl {
6465 sync:: atomic:: { AtomicUsize , Ordering } ,
6566 time:: Duration ,
6667 } ;
67- use rustls:: crypto:: aws_lc_rs:: ALL_CIPHER_SUITES ;
6868 use std:: {
6969 collections:: { HashMap , hash_map:: DefaultHasher } ,
7070 io:: BufRead ,
@@ -77,14 +77,20 @@ mod _ssl {
7777 use rustls:: {
7878 ClientConfig , ClientConnection , RootCertStore , ServerConfig , ServerConnection ,
7979 client:: { ClientSessionMemoryCache , ClientSessionStore } ,
80- crypto:: SupportedKxGroup ,
80+ crypto:: { CryptoProvider , SupportedKxGroup } ,
8181 pki_types:: { CertificateDer , CertificateRevocationListDer , PrivateKeyDer , ServerName } ,
8282 server:: { ClientHello , ResolvesServerCert } ,
8383 sign:: CertifiedKey ,
8484 version:: { TLS12 , TLS13 } ,
8585 } ;
8686 use sha2:: { Digest , Sha256 } ;
8787
88+ #[ cfg( feature = "ssl-rustls-aws-lc-rs" ) ]
89+ use rustls:: crypto:: aws_lc_rs:: { ALL_CIPHER_SUITES , Ticketer , sign} ;
90+
91+ #[ cfg( feature = "ssl-rustls-ring" ) ]
92+ use rustls:: crypto:: ring:: { ALL_CIPHER_SUITES , Ticketer , sign} ;
93+
8894 // Import certificate operations module
8995 use super :: cert;
9096
@@ -1189,15 +1195,14 @@ mod _ssl {
11891195 }
11901196
11911197 // Additional validation: Create CertifiedKey to ensure rustls accepts it
1192- let signing_key =
1193- rustls:: crypto:: aws_lc_rs:: sign:: any_supported_type ( & key) . map_err ( |_| {
1194- vm. new_os_subtype_error (
1195- PySSLError :: class ( & vm. ctx ) . to_owned ( ) ,
1196- None ,
1197- "[SSL: KEY_VALUES_MISMATCH] key values mismatch" ,
1198- )
1199- . upcast ( )
1200- } ) ?;
1198+ let signing_key = sign:: any_supported_type ( & key) . map_err ( |_| {
1199+ vm. new_os_subtype_error (
1200+ PySSLError :: class ( & vm. ctx ) . to_owned ( ) ,
1201+ None ,
1202+ "[SSL: KEY_VALUES_MISMATCH] key values mismatch" ,
1203+ )
1204+ . upcast ( )
1205+ } ) ?;
12011206
12021207 let certified_key = CertifiedKey :: new ( full_chain. clone ( ) , signing_key) ;
12031208 if certified_key. keys_match ( ) . is_err ( ) {
@@ -2295,7 +2300,7 @@ mod _ssl {
22952300 rustls_server_session_store : rustls:: server:: ServerSessionMemoryCache :: new (
22962301 SSL_SESSION_CACHE_SIZE ,
22972302 ) ,
2298- server_ticketer : rustls :: crypto :: aws_lc_rs :: Ticketer :: new ( )
2303+ server_ticketer : Ticketer :: new ( )
22992304 . expect ( "Failed to create shared ticketer for TLS 1.2 session resumption" ) ,
23002305 accept_count : AtomicUsize :: new ( 0 ) ,
23012306 session_hits : AtomicUsize :: new ( 0 ) ,
@@ -4883,17 +4888,20 @@ mod _ssl {
48834888
48844889 #[ pyfunction]
48854890 fn RAND_bytes ( n : i64 , vm : & VirtualMachine ) -> PyResult < PyBytesRef > {
4886- use aws_lc_rs:: rand:: { SecureRandom , SystemRandom } ;
4891+ compat:: ensure_default_provider ( ) ;
4892+ let default_provider =
4893+ CryptoProvider :: get_default ( ) . expect ( "A CryptoProvider should have been set earlier" ) ;
48874894
48884895 // Validate n is not negative
48894896 if n < 0 {
48904897 return Err ( vm. new_value_error ( "num must be positive" ) ) ;
48914898 }
48924899
48934900 let n_usize = n as usize ;
4894- let rng = SystemRandom :: new ( ) ;
48954901 let mut buf = vec ! [ 0u8 ; n_usize] ;
4896- rng. fill ( & mut buf)
4902+ default_provider
4903+ . secure_random
4904+ . fill ( & mut buf)
48974905 . map_err ( |_| vm. new_os_error ( "Failed to generate random bytes" ) ) ?;
48984906 Ok ( PyBytesRef :: from ( vm. ctx . new_bytes ( buf) ) )
48994907 }
0 commit comments