mlkem
This commit is contained in:
parent
2a8aba6346
commit
e08c70709f
4 changed files with 68 additions and 8 deletions
|
|
@ -14,7 +14,7 @@ publish.workspace = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = [
|
default = [
|
||||||
"provider-openssl",
|
"provider-aws-lc-pq",
|
||||||
# "http3-quinn",
|
# "http3-quinn",
|
||||||
# "cache",
|
# "cache",
|
||||||
"rustls-backend",
|
"rustls-backend",
|
||||||
|
|
@ -31,6 +31,7 @@ default = [
|
||||||
# "post-quantum",
|
# "post-quantum",
|
||||||
# ]
|
# ]
|
||||||
provider-aws-lc-rs = ["rpxy-lib/rustls-backend-aws-lc-rs"]
|
provider-aws-lc-rs = ["rpxy-lib/rustls-backend-aws-lc-rs"]
|
||||||
|
provider-aws-lc-pq = ["rpxy-lib/rustls-backend-aws-lc-pq", "rpxy-lib/post-quantum"]
|
||||||
provider-boring = ["rpxy-lib/rustls-backend-boring"]
|
provider-boring = ["rpxy-lib/rustls-backend-boring"]
|
||||||
provider-openssl = ["rpxy-lib/rustls-backend-openssl"]
|
provider-openssl = ["rpxy-lib/rustls-backend-openssl"]
|
||||||
provider-ring = ["rpxy-lib/rustls-backend-ring"]
|
provider-ring = ["rpxy-lib/rustls-backend-ring"]
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ sticky-cookie = ["base64", "sha2", "chrono"]
|
||||||
native-tls-backend = ["hyper-tls"]
|
native-tls-backend = ["hyper-tls"]
|
||||||
rustls-backend = ["hyper-rustls"]
|
rustls-backend = ["hyper-rustls"]
|
||||||
rustls-backend-aws-lc-rs = ["hyper-rustls/aws-lc-rs"]
|
rustls-backend-aws-lc-rs = ["hyper-rustls/aws-lc-rs"]
|
||||||
|
rustls-backend-aws-lc-pq = ["hyper-rustls/aws-lc-rs", "post-quantum"]
|
||||||
rustls-backend-boring = ["hyper-rustls/aws-lc-rs", "boring-rustls-provider"]
|
rustls-backend-boring = ["hyper-rustls/aws-lc-rs", "boring-rustls-provider"]
|
||||||
rustls-backend-openssl = ["hyper-rustls/aws-lc-rs", "rustls-openssl"]
|
rustls-backend-openssl = ["hyper-rustls/aws-lc-rs", "rustls-openssl"]
|
||||||
rustls-backend-ring = ["hyper-rustls/ring"]
|
rustls-backend-ring = ["hyper-rustls/ring"]
|
||||||
|
|
@ -38,6 +39,7 @@ webpki-roots = ["rustls-backend", "hyper-rustls/webpki-tokio"]
|
||||||
acme = ["dep:rpxy-acme"]
|
acme = ["dep:rpxy-acme"]
|
||||||
post-quantum = [
|
post-quantum = [
|
||||||
"rustls-post-quantum",
|
"rustls-post-quantum",
|
||||||
|
"rustls-post-quantum/aws-lc-rs-unstable",
|
||||||
"rpxy-acme/post-quantum",
|
"rpxy-acme/post-quantum",
|
||||||
"rpxy-certs/post-quantum",
|
"rpxy-certs/post-quantum",
|
||||||
"s2n-quic-rustls/post-quantum",
|
"s2n-quic-rustls/post-quantum",
|
||||||
|
|
|
||||||
|
|
@ -217,10 +217,11 @@ where
|
||||||
|
|
||||||
#[cfg(not(feature = "webpki-roots"))]
|
#[cfg(not(feature = "webpki-roots"))]
|
||||||
let (builder, builder_h2) = {
|
let (builder, builder_h2) = {
|
||||||
use rustls::{ClientConfig, client::Resumption};
|
|
||||||
use hyper_rustls::ConfigBuilderExt;
|
use hyper_rustls::ConfigBuilderExt;
|
||||||
|
use rustls::{ClientConfig, client::Resumption};
|
||||||
let mut client_config = ClientConfig::builder()
|
let mut client_config = ClientConfig::builder()
|
||||||
.try_with_platform_verifier().unwrap()
|
.try_with_platform_verifier()
|
||||||
|
.unwrap()
|
||||||
.with_no_client_auth();
|
.with_no_client_auth();
|
||||||
client_config.resumption = Resumption::disabled();
|
client_config.resumption = Resumption::disabled();
|
||||||
let builder = hyper_rustls::HttpsConnectorBuilder::new().with_tls_config(client_config.clone());
|
let builder = hyper_rustls::HttpsConnectorBuilder::new().with_tls_config(client_config.clone());
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,65 @@ pub async fn entrypoint(
|
||||||
}
|
}
|
||||||
_provider = CryptoProvider::install_default(prov);
|
_provider = CryptoProvider::install_default(prov);
|
||||||
}
|
}
|
||||||
|
#[cfg(feature = "rustls-backend-aws-lc-pq")]
|
||||||
|
{
|
||||||
|
info!("Using RusTLS provider aws-lc-pq");
|
||||||
|
let mut prov = rustls_post_quantum::provider();
|
||||||
|
if let Some(ciphers) = ciphers {
|
||||||
|
prov.cipher_suites.clear();
|
||||||
|
for cipher in ciphers {
|
||||||
|
match cipher.as_str() {
|
||||||
|
"AES_256_GCM_SHA384" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS13_AES_256_GCM_SHA384),
|
||||||
|
"AES_128_GCM_SHA256" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS13_AES_128_GCM_SHA256),
|
||||||
|
"CHACHA20_POLY1305_SHA256" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS13_CHACHA20_POLY1305_SHA256),
|
||||||
|
"ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384),
|
||||||
|
"ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256),
|
||||||
|
"ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256),
|
||||||
|
"ECDHE_RSA_WITH_AES_256_GCM_SHA384" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384),
|
||||||
|
"ECDHE_RSA_WITH_AES_128_GCM_SHA256" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256),
|
||||||
|
"ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" => prov
|
||||||
|
.cipher_suites
|
||||||
|
.push(rustls::crypto::aws_lc_rs::cipher_suite::TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256),
|
||||||
|
other => {
|
||||||
|
log::error!("Unknown cipher `{other}`")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(kexes) = kexes {
|
||||||
|
prov.kx_groups.clear();
|
||||||
|
for kex in kexes {
|
||||||
|
match kex.as_str() {
|
||||||
|
"X25519" => prov.kx_groups.push(rustls::crypto::aws_lc_rs::kx_group::X25519),
|
||||||
|
"SECP256R1" => prov.kx_groups.push(rustls::crypto::aws_lc_rs::kx_group::SECP256R1),
|
||||||
|
"SECP384R1" => prov.kx_groups.push(rustls::crypto::aws_lc_rs::kx_group::SECP384R1),
|
||||||
|
"X25519MLKEM768" => prov.kx_groups.push(rustls::crypto::aws_lc_rs::kx_group::X25519MLKEM768),
|
||||||
|
"SECP256R1MLKEM768" => prov.kx_groups.push(rustls::crypto::aws_lc_rs::kx_group::SECP256R1MLKEM768),
|
||||||
|
"MLKEM768" => prov.kx_groups.push(rustls::crypto::aws_lc_rs::kx_group::MLKEM768),
|
||||||
|
other => {
|
||||||
|
log::error!("Unknown kex `{other}`")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_provider = CryptoProvider::install_default(prov);
|
||||||
|
}
|
||||||
#[cfg(feature = "rustls-backend-boring")]
|
#[cfg(feature = "rustls-backend-boring")]
|
||||||
{
|
{
|
||||||
info!("Using RusTLS provider boring");
|
info!("Using RusTLS provider boring");
|
||||||
|
|
@ -272,6 +331,8 @@ pub async fn entrypoint(
|
||||||
"X25519" => prov.kx_groups.push(rustls_openssl::kx_group::X25519),
|
"X25519" => prov.kx_groups.push(rustls_openssl::kx_group::X25519),
|
||||||
"SECP256R1" => prov.kx_groups.push(rustls_openssl::kx_group::SECP256R1),
|
"SECP256R1" => prov.kx_groups.push(rustls_openssl::kx_group::SECP256R1),
|
||||||
"SECP384R1" => prov.kx_groups.push(rustls_openssl::kx_group::SECP384R1),
|
"SECP384R1" => prov.kx_groups.push(rustls_openssl::kx_group::SECP384R1),
|
||||||
|
"X25519MLKEM768" => prov.kx_groups.push(rustls_openssl::kx_group::X25519MLKEM768),
|
||||||
|
"MLKEM768" => prov.kx_groups.push(rustls_openssl::kx_group::MLKEM768),
|
||||||
other => {
|
other => {
|
||||||
log::error!("Unknown kex `{other}`")
|
log::error!("Unknown kex `{other}`")
|
||||||
}
|
}
|
||||||
|
|
@ -280,11 +341,6 @@ pub async fn entrypoint(
|
||||||
}
|
}
|
||||||
_provider = CryptoProvider::install_default(prov);
|
_provider = CryptoProvider::install_default(prov);
|
||||||
}
|
}
|
||||||
#[cfg(feature = "post-quantum")]
|
|
||||||
{
|
|
||||||
info!("Using RusTLS provider post_quantum");
|
|
||||||
_provider = CryptoProvider::install_default(rustls_post_quantum::provider());
|
|
||||||
}
|
|
||||||
#[cfg(feature = "rustls-backend-ring")]
|
#[cfg(feature = "rustls-backend-ring")]
|
||||||
{
|
{
|
||||||
info!("Using RusTLS provider ring");
|
info!("Using RusTLS provider ring");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue