use std::sync::Arc;
use rustls::crypto::CryptoProvider;
pub const SCRATCH_USER_ID: u32 = 10001;
fn tls_crypto_provider() -> CryptoProvider {
match std::env::var("NAUTALID_TLS_CRYPTO_PROVIDER")
.ok()
.map(|raw| raw.trim().to_ascii_lowercase())
.as_deref()
{
#[cfg(feature = "tls-aws-lc")]
Some("aws-lc") | Some("aws-lc-rs") | Some("aws_lc_rs") => {
rustls::crypto::aws_lc_rs::default_provider()
}
Some("ring") => rustls::crypto::ring::default_provider(),
Some(other) => {
tracing::warn!(
provider = other,
"unknown NAUTALID_TLS_CRYPTO_PROVIDER; using ring"
);
rustls::crypto::ring::default_provider()
}
None => rustls::crypto::ring::default_provider(),
}
}
pub fn install_defaults() -> Result<(), Arc<CryptoProvider>> {
if CryptoProvider::get_default().is_some() {
return Ok(());
}
CryptoProvider::install_default(tls_crypto_provider())
}
#[cfg(test)]
mod tests {
use rustls::crypto::CryptoProvider;
use super::install_defaults;
#[test]
fn install_defaults_once() {
match install_defaults() {
Ok(()) => {}
Err(_) => {
assert!(
CryptoProvider::get_default().is_some(),
"rustls provider must be installed"
);
}
}
}
}