nym_http_api_client/
tls.rs1use rustls::crypto::CryptoProvider;
12use rustls::{ClientConfig, RootCertStore};
13use std::sync::{Arc, LazyLock};
14
15static CLIENT_CONFIG: LazyLock<Arc<ClientConfig>> = LazyLock::new(|| {
16 let mut roots = RootCertStore::empty();
17 roots.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned());
18 let config = ClientConfig::builder_with_provider(crypto_provider())
19 .with_safe_default_protocol_versions()
20 .expect("the crypto provider supports the default TLS protocol versions")
21 .with_root_certificates(roots)
22 .with_no_client_auth();
23 Arc::new(config)
24});
25
26pub fn install_default_crypto_provider() {
28 if CryptoProvider::get_default().is_none() {
29 let _ = rustls::crypto::ring::default_provider().install_default();
31 }
32}
33
34pub fn crypto_provider() -> Arc<CryptoProvider> {
36 install_default_crypto_provider();
37 CryptoProvider::get_default()
38 .expect("a default crypto provider has just been installed")
39 .clone()
40}
41
42pub fn rustls_client_config() -> Arc<ClientConfig> {
44 CLIENT_CONFIG.clone()
45}