1use std::sync::Arc;
13
14use s2n_quic::provider::tls::rustls::rustls::pki_types::ServerName;
15#[allow(deprecated)]
16use s2n_quic::provider::tls::rustls::rustls::{self, crypto::CryptoProvider};
17
18#[derive(Debug)]
19pub struct SkipServerVerification(Arc<CryptoProvider>);
25
26impl SkipServerVerification {
27 #![allow(clippy::expect_used)]
28 pub fn new() -> Arc<Self> {
30 let provider = CryptoProvider::get_default().expect("Default crypto provider not found");
31 Arc::new(Self(provider.clone()))
32 }
33}
34
35impl rustls::client::danger::ServerCertVerifier for SkipServerVerification {
36 fn verify_server_cert(
37 &self,
38 _end_entity: &rustls::pki_types::CertificateDer<'_>,
39 _intermediates: &[rustls::pki_types::CertificateDer<'_>],
40 _server_name: &ServerName<'_>,
41 _ocsp_response: &[u8],
42 _now: rustls::pki_types::UnixTime,
43 ) -> Result<rustls::client::danger::ServerCertVerified, rustls::Error> {
44 Ok(rustls::client::danger::ServerCertVerified::assertion())
45 }
46
47 fn verify_tls12_signature(
48 &self,
49 message: &[u8],
50 cert: &rustls::pki_types::CertificateDer<'_>,
51 dss: &rustls::DigitallySignedStruct,
52 ) -> Result<rustls::client::danger::HandshakeSignatureValid, rustls::Error> {
53 rustls::crypto::verify_tls12_signature(
55 message,
56 cert,
57 dss,
58 &self.0.signature_verification_algorithms,
59 )
60 }
61
62 fn verify_tls13_signature(
63 &self,
64 message: &[u8],
65 cert: &rustls::pki_types::CertificateDer<'_>,
66 dss: &rustls::DigitallySignedStruct,
67 ) -> Result<rustls::client::danger::HandshakeSignatureValid, rustls::Error> {
68 rustls::crypto::verify_tls13_signature(
70 message,
71 cert,
72 dss,
73 &self.0.signature_verification_algorithms,
74 )
75 }
76
77 fn supported_verify_schemes(&self) -> Vec<rustls::SignatureScheme> {
78 self.0.signature_verification_algorithms.supported_schemes()
79 }
80}
81#[derive(Debug, Default)]
89pub struct NoCertResolver(Arc<NoSigningKey>);
90impl rustls::server::ResolvesServerCert for NoCertResolver {
91 fn resolve(
92 &self,
93 _client_hello: rustls::server::ClientHello<'_>,
94 ) -> Option<Arc<rustls::sign::CertifiedKey>> {
95 Some(Arc::new(rustls::sign::CertifiedKey::new(
96 vec![],
97 Arc::clone(&self.0) as _,
98 )))
99 }
100}
101
102#[derive(Debug, Default)]
107pub struct NoSigningKey;
108impl rustls::sign::SigningKey for NoSigningKey {
109 fn choose_scheme(
110 &self,
111 _offered: &[rustls::SignatureScheme],
112 ) -> Option<Box<dyn rustls::sign::Signer>> {
113 None
114 }
115
116 fn algorithm(&self) -> rustls::SignatureAlgorithm {
117 rustls::SignatureAlgorithm::ECDSA
118 }
119}