use std::sync::Once;
const REQUIRED_SIGNATURE_SCHEME: rustls::SignatureScheme =
rustls::SignatureScheme::ECDSA_NISTP521_SHA512;
pub fn ensure_rustls_crypto_provider() {
static RUSTLS_PROVIDER_INIT: Once = Once::new();
RUSTLS_PROVIDER_INIT.call_once(|| {
if rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.is_err()
{
return;
}
let Some(provider) = rustls::crypto::CryptoProvider::get_default() else {
panic!("aws-lc-rs rustls crypto provider should be installed");
};
assert!(
provider_supports_required_signature_scheme(provider),
"installed rustls crypto provider must support {REQUIRED_SIGNATURE_SCHEME:?}"
);
});
}
fn provider_supports_required_signature_scheme(provider: &rustls::crypto::CryptoProvider) -> bool {
provider
.signature_verification_algorithms
.supported_schemes()
.contains(&REQUIRED_SIGNATURE_SCHEME)
}