use std::io::BufReader;
use anyhow::Result;
use rcgen::{BasicConstraints, Certificate, CertificateParams, IsCa, PKCS_ECDSA_P256_SHA256};
use rustls::RootCertStore;
#[cfg(feature = "rustls")]
#[tokio::test]
async fn tls_handshake_example() -> Result<()> {
#[cfg(feature = "rustls-aws-lc")]
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
#[cfg(all(feature = "rustls-ring", not(feature = "rustls-aws-lc")))]
let _ = rustls::crypto::ring::default_provider().install_default();
let mut ca_params = CertificateParams::new(vec!["localhost".into()]);
ca_params.is_ca = IsCa::Ca(BasicConstraints::Unconstrained);
let ca = Certificate::from_params(ca_params)?;
let ca_pem = ca.serialize_pem()?;
let mut server_params = CertificateParams::new(vec!["localhost".into()]);
server_params.alg = &PKCS_ECDSA_P256_SHA256;
let server_cert = Certificate::from_params(server_params)?;
let _server_cert_der = ca.serialize_der_with_signer(&server_cert)?;
let mut root_store = RootCertStore::empty();
let mut reader = BufReader::new(ca_pem.as_bytes());
for cert in rustls_pemfile::certs(&mut reader) {
root_store.add(cert?)?;
}
let _client_config = rustls::ClientConfig::builder()
.with_root_certificates(root_store)
.with_no_client_auth();
Ok(())
}