Skip to content

Commit 46fad24

Browse files
committed
feat(tls): Support rustls-rustcrypto provider
1 parent 6ff9a45 commit 46fad24

16 files changed

Lines changed: 218 additions & 24 deletions

File tree

Cargo.lock

Lines changed: 62 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ deploy:
266266
cd example/infrastructure && yarn deploy --require-approval never
267267

268268
check:
269-
cargo clippy --all-targets --features "lambda,macro,no-sdk,uncompressed,crypto-rust,tls-ring" -- -D warnings
269+
cargo clippy --all-targets --features "lambda,macro,no-sdk,uncompressed,crypto-rust,tls-rust" -- -D warnings
270270

271271
check-crates:
272272
cargo metadata --no-deps --format-version 1 --quiet | \

libs/llrt_test_tls/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ name = "llrt_test_tls"
1111
path = "src/lib.rs"
1212

1313
[features]
14-
default = ["tls-ring"]
14+
default = ["tls-rust"]
15+
tls-rust = ["dep:rustls-rustcrypto"]
1516
tls-ring = ["rustls/ring"]
1617
tls-aws-lc = ["rustls/aws_lc_rs"]
1718
tls-graviola = ["dep:rustls-graviola"]
@@ -28,6 +29,7 @@ http = { version = "1", default-features = false }
2829
rustls = { version = "0.23", features = [
2930
"tls12",
3031
], default-features = false }
32+
rustls-rustcrypto = { git = "https://github.com/RustCrypto/rustls-rustcrypto.git", version = "0.0.2-alpha", optional = true }
3133
rustls-graviola = { version = "0.3", optional = true }
3234
openssl = { version = "0.10", optional = true }
3335
tokio-openssl = { version = "0.6", optional = true }

libs/llrt_test_tls/src/lib.rs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,35 @@
44
// FIXME this library is only needed until TLS is natively supported in wiremock.
55
// See https://github.com/LukeMathWalker/wiremock-rs/issues/58
66

7+
#[cfg(all(feature = "tls-rust", feature = "tls-ring"))]
8+
compile_error!("Features `tls-rust` and `tls-ring` are mutually exclusive");
9+
10+
#[cfg(all(feature = "tls-rust", feature = "tls-aws-lc"))]
11+
compile_error!("Features `tls-rust` and `tls-aws-lc` are mutually exclusive");
12+
13+
#[cfg(all(feature = "tls-rust", feature = "tls-graviola"))]
14+
compile_error!("Features `tls-rust` and `tls-graviola` are mutually exclusive");
15+
16+
#[cfg(all(feature = "tls-rust", feature = "tls-openssl"))]
17+
compile_error!("Features `tls-rust` and `tls-openssl` are mutually exclusive");
18+
719
#[cfg(all(feature = "tls-ring", feature = "tls-aws-lc"))]
8-
compile_error!("Features 'tls-ring' and 'tls-aws-lc' are mutually exclusive");
20+
compile_error!("Features `tls-ring` and `tls-aws-lc` are mutually exclusive");
921

1022
#[cfg(all(feature = "tls-ring", feature = "tls-graviola"))]
11-
compile_error!("Features 'tls-ring' and 'tls-graviola' are mutually exclusive");
23+
compile_error!("Features `tls-ring` and `tls-graviola` are mutually exclusive");
24+
25+
#[cfg(all(feature = "tls-ring", feature = "tls-openssl"))]
26+
compile_error!("Features `tls-ring` and `tls-openssl` are mutually exclusive");
1227

1328
#[cfg(all(feature = "tls-aws-lc", feature = "tls-graviola"))]
14-
compile_error!("Features 'tls-aws-lc' and 'tls-graviola' are mutually exclusive");
29+
compile_error!("Features `tls-aws-lc` and `tls-graviola` are mutually exclusive");
30+
31+
#[cfg(all(feature = "tls-aws-lc", feature = "tls-openssl"))]
32+
compile_error!("Features `tls-aws-lc` and `tls-openssl` are mutually exclusive");
33+
34+
#[cfg(all(feature = "tls-graviola", feature = "tls-openssl"))]
35+
compile_error!("Features `tls-graviola` and `tls-openssl` are mutually exclusive");
1536

1637
use std::net::{Ipv4Addr, SocketAddr};
1738

libs/llrt_test_tls/src/server.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,37 @@
1-
#[cfg(any(feature = "tls-ring", feature = "tls-aws-lc", feature = "tls-graviola"))]
1+
#[cfg(any(
2+
feature = "tls-rust",
3+
feature = "tls-ring",
4+
feature = "tls-aws-lc",
5+
feature = "tls-graviola"
6+
))]
27
use std::sync::Arc;
38

49
#[cfg(any(
10+
feature = "tls-rust",
511
feature = "tls-ring",
612
feature = "tls-aws-lc",
713
feature = "tls-graviola",
814
feature = "tls-openssl"
915
))]
1016
use hyper::service::service_fn;
1117
#[cfg(any(
18+
feature = "tls-rust",
1219
feature = "tls-ring",
1320
feature = "tls-aws-lc",
1421
feature = "tls-graviola",
1522
feature = "tls-openssl"
1623
))]
1724
use hyper_util::rt::{TokioExecutor, TokioIo};
1825
#[cfg(any(
26+
feature = "tls-rust",
1927
feature = "tls-ring",
2028
feature = "tls-aws-lc",
2129
feature = "tls-graviola",
2230
feature = "tls-openssl"
2331
))]
2432
use hyper_util::server::conn::auto::Builder;
2533
#[cfg(any(
34+
feature = "tls-rust",
2635
feature = "tls-ring",
2736
feature = "tls-aws-lc",
2837
feature = "tls-graviola",
@@ -31,13 +40,19 @@ use hyper_util::server::conn::auto::Builder;
3140
use tokio::net::TcpListener;
3241

3342
#[cfg(any(
43+
feature = "tls-rust",
3444
feature = "tls-ring",
3545
feature = "tls-aws-lc",
3646
feature = "tls-graviola",
3747
feature = "tls-openssl"
3848
))]
3949
use crate::MockServerCerts;
4050

51+
#[cfg(feature = "tls-rust")]
52+
fn get_crypto_provider() -> Arc<rustls::crypto::CryptoProvider> {
53+
Arc::new(rustls_rustcrypto::provider())
54+
}
55+
4156
#[cfg(feature = "tls-ring")]
4257
fn get_crypto_provider() -> Arc<rustls::crypto::CryptoProvider> {
4358
Arc::new(rustls::crypto::ring::default_provider())
@@ -53,7 +68,12 @@ fn get_crypto_provider() -> Arc<rustls::crypto::CryptoProvider> {
5368
Arc::new(rustls_graviola::default_provider())
5469
}
5570

56-
#[cfg(any(feature = "tls-ring", feature = "tls-aws-lc", feature = "tls-graviola"))]
71+
#[cfg(any(
72+
feature = "tls-rust",
73+
feature = "tls-ring",
74+
feature = "tls-aws-lc",
75+
feature = "tls-graviola"
76+
))]
5777
pub(super) async fn run(
5878
listener: TcpListener,
5979
certs: MockServerCerts,

llrt/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ edition = "2021"
55
license-file = "LICENSE"
66

77
[features]
8-
default = ["macro", "tls-ring", "crypto-rust"]
8+
default = ["macro", "tls-rust", "crypto-rust"]
99
macro = ["llrt_core/macro"]
1010
lambda = ["llrt_core/lambda"]
1111
no-sdk = ["llrt_core/no-sdk"]
1212
uncompressed = ["llrt_core/uncompressed"]
1313
bindgen = ["llrt_core/bindgen"]
1414

1515
# TLS crypto backend features
16+
tls-rust = ["llrt_core/tls-rust"]
1617
tls-ring = ["llrt_core/tls-ring"]
1718
tls-aws-lc = ["llrt_core/tls-aws-lc"]
1819
tls-graviola = ["llrt_core/tls-graviola"]

llrt_core/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ edition = "2021"
55
license-file = "LICENSE"
66

77
[features]
8-
default = ["macro", "tls-ring", "crypto-rust"]
8+
default = ["macro", "tls-rust", "crypto-rust"]
99
lambda = []
1010
no-sdk = []
1111
uncompressed = []
1212
macro = ["rquickjs/macro"]
1313
bindgen = ["rquickjs/bindgen"]
1414

1515
# TLS crypto backend features
16+
tls-rust = ["llrt_modules/tls-rust"]
1617
tls-ring = ["rustls/ring", "llrt_modules/tls-ring"]
1718
tls-aws-lc = ["rustls/aws_lc_rs", "llrt_modules/tls-aws-lc"]
1819
tls-graviola = ["llrt_modules/tls-graviola"]

llrt_core/src/http.rs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,28 @@ use tracing::warn;
77
use crate::environment;
88
use crate::modules::https::{set_http_version, set_pool_idle_timeout_seconds, HttpVersion};
99

10-
#[cfg(any(feature = "tls-ring", feature = "tls-aws-lc", feature = "tls-graviola"))]
10+
#[cfg(any(
11+
feature = "tls-rust",
12+
feature = "tls-ring",
13+
feature = "tls-aws-lc",
14+
feature = "tls-graviola"
15+
))]
1116
use std::{fs::File, io};
1217

13-
#[cfg(any(feature = "tls-ring", feature = "tls-aws-lc", feature = "tls-graviola"))]
18+
#[cfg(any(
19+
feature = "tls-rust",
20+
feature = "tls-ring",
21+
feature = "tls-aws-lc",
22+
feature = "tls-graviola"
23+
))]
1424
use rustls::{pki_types::CertificateDer, version, SupportedProtocolVersion};
1525

16-
#[cfg(any(feature = "tls-ring", feature = "tls-aws-lc", feature = "tls-graviola"))]
26+
#[cfg(any(
27+
feature = "tls-rust",
28+
feature = "tls-ring",
29+
feature = "tls-aws-lc",
30+
feature = "tls-graviola"
31+
))]
1732
use crate::modules::tls::{set_extra_ca_certs, set_tls_versions};
1833

1934
#[cfg(feature = "tls-openssl")]
@@ -24,7 +39,12 @@ pub fn init() -> StdResult<(), Box<dyn std::error::Error + Send + Sync>> {
2439
set_pool_idle_timeout_seconds(pool_idle_timeout);
2540
}
2641

27-
#[cfg(any(feature = "tls-ring", feature = "tls-aws-lc", feature = "tls-graviola"))]
42+
#[cfg(any(
43+
feature = "tls-rust",
44+
feature = "tls-ring",
45+
feature = "tls-aws-lc",
46+
feature = "tls-graviola"
47+
))]
2848
{
2949
if let Some(extra_ca_certs) = build_extra_ca_certs()? {
3050
set_extra_ca_certs(extra_ca_certs);
@@ -59,7 +79,12 @@ fn build_pool_idle_timeout() -> Option<u64> {
5979
Some(pool_idle_timeout)
6080
}
6181

62-
#[cfg(any(feature = "tls-ring", feature = "tls-aws-lc", feature = "tls-graviola"))]
82+
#[cfg(any(
83+
feature = "tls-rust",
84+
feature = "tls-ring",
85+
feature = "tls-aws-lc",
86+
feature = "tls-graviola"
87+
))]
6388
fn build_extra_ca_certs() -> StdResult<Option<Vec<CertificateDer<'static>>>, io::Error> {
6489
if let Ok(extra_ca_certs) = env::var(environment::ENV_LLRT_EXTRA_CA_CERTS) {
6590
if !extra_ca_certs.is_empty() {
@@ -76,7 +101,12 @@ fn build_extra_ca_certs() -> StdResult<Option<Vec<CertificateDer<'static>>>, io:
76101
Ok(None)
77102
}
78103

79-
#[cfg(any(feature = "tls-ring", feature = "tls-aws-lc", feature = "tls-graviola"))]
104+
#[cfg(any(
105+
feature = "tls-rust",
106+
feature = "tls-ring",
107+
feature = "tls-aws-lc",
108+
feature = "tls-graviola"
109+
))]
80110
fn build_tls_versions() -> Vec<&'static SupportedProtocolVersion> {
81111
match env::var(environment::ENV_LLRT_TLS_VERSION).as_deref() {
82112
Ok("1.3") => vec![&version::TLS13, &version::TLS12],

llrt_modules/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ repository = "https://github.com/awslabs/llrt"
88
readme = "README.md"
99

1010
[features]
11-
default = ["base", "console", "tls-ring", "crypto-rust"]
11+
default = ["base", "console", "tls-rust", "crypto-rust"]
1212
lambda = ["base"]
1313

1414
# TLS crypto backend features
15+
tls-rust = ["llrt_http?/tls-rust", "llrt_tls?/tls-rust", "llrt_fetch?/tls-rust"]
1516
tls-ring = ["llrt_http?/tls-ring", "llrt_tls?/tls-ring", "llrt_fetch?/tls-ring"]
1617
tls-aws-lc = ["llrt_http?/tls-aws-lc", "llrt_tls?/tls-aws-lc", "llrt_fetch?/tls-aws-lc"]
1718
tls-graviola = ["llrt_http?/tls-graviola", "llrt_tls?/tls-graviola", "llrt_fetch?/tls-graviola"]

modules/llrt_fetch/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ compression-rust = ["llrt_compression/all-rust"]
2323
webpki-roots = ["llrt_http/webpki-roots"]
2424
native-roots = ["llrt_http/native-roots"]
2525

26+
tls-rust = ["llrt_http/tls-rust", "llrt_test_tls/tls-rust"]
2627
tls-ring = ["llrt_http/tls-ring", "llrt_test_tls/tls-ring"]
2728
tls-aws-lc = ["llrt_http/tls-aws-lc", "llrt_test_tls/tls-aws-lc"]
2829
tls-graviola = ["llrt_http/tls-graviola", "llrt_test_tls/tls-graviola"]

0 commit comments

Comments
 (0)