rustls_cng_crypto/signer/
mod.rs1use rustls::pki_types::PrivateKeyDer;
2use rustls::sign::SigningKey;
3use rustls::Error;
4use std::sync::Arc;
5
6mod ec;
7mod rsa;
8#[cfg(feature = "tls12")]
9pub(crate) use rsa::RSA_SCHEMES;
10
11#[derive(Debug)]
13pub struct KeyProvider;
14
15impl rustls::crypto::KeyProvider for KeyProvider {
16 fn load_private_key(
17 &self,
18 key_der: PrivateKeyDer<'static>,
19 ) -> Result<Arc<dyn SigningKey>, Error> {
20 any_supported_type(&key_der)
21 }
22
23 fn fips(&self) -> bool {
24 crate::fips::enabled()
25 }
26}
27
28fn any_supported_type(der: &PrivateKeyDer<'_>) -> Result<Arc<dyn SigningKey>, Error> {
29 if let Ok(key) = rsa::RsaSigningKey::new(der) {
30 return Ok(Arc::new(key));
31 }
32 if let Ok(key) = ec::EcKey::new(der) {
33 return Ok(Arc::new(key));
34 }
35 Err(Error::General("Unsupported key type".to_string()))
36}