Skip to content

Commit 9ee8f35

Browse files
authored
fix: Also set crypto provider in configure_client_insecure (#57)
This fixes a panic for me, when code is using `irpc::util::quinn_setup_util::make_insecure_client_endpoint`, where `configure_client_insecure` wouldn't tell rustls which crypto provider to use. <details> <summary>The panic in question</summary> ``` thread 'tokio-runtime-worker' panicked at /home/philipp/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustls-0.23.31/src/crypto/mod.rs:249:14: Could not automatically determine the process-level CryptoProvider from Rustls crate features. Call CryptoProvider::install_default() before this point to select a provider manually, or make sure exactly one of the 'aws-lc-rs' and 'ring' features is enabled. See the documentation of the CryptoProvider type for more information. stack backtrace: 0: __rustc::rust_begin_unwind at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/panicking.rs:697:5 1: core::panicking::panic_fmt at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:75:14 2: core::panicking::panic_display at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:269:5 3: core::option::expect_failed at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/option.rs:2049:5 4: core::option::Option<T>::expect at /home/philipp/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/option.rs:958:21 5: rustls::crypto::CryptoProvider::get_default_or_install_from_crate_features at /home/philipp/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustls-0.23.31/src/crypto/mod.rs:248:24 6: rustls::client::client_conn::ClientConfig::builder_with_protocol_versions at /home/philipp/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustls-0.23.31/src/client/client_conn.rs:317:13 7: rustls::client::client_conn::ClientConfig::builder at /home/philipp/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustls-0.23.31/src/client/client_conn.rs:294:9 8: irpc::util::quinn_setup_utils::configure_client_insecure at /home/philipp/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/irpc-0.7.0/src/util.rs:57:22 9: irpc::util::quinn_setup_utils::non_wasm::make_insecure_client_endpoint at /home/philipp/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/irpc-0.7.0/src/util.rs:93:30 ``` </details>
1 parent 6a7db54 commit 9ee8f35

File tree

4 files changed

+13
-24
lines changed

4 files changed

+13
-24
lines changed

examples/compute.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ enum ComputeProtocol {
3434
Multiply(Multiply),
3535
}
3636

37-
// Define ComputeRequest sub-messages
37+
// Define ComputeProtocol sub-messages
3838
#[derive(Debug, Serialize, Deserialize)]
3939
struct Sqr {
4040
num: u64,
@@ -53,15 +53,6 @@ struct Multiply {
5353
initial: u64,
5454
}
5555

56-
// Define ComputeRequest enum
57-
#[derive(Debug, Serialize, Deserialize)]
58-
enum ComputeRequest {
59-
Sqr(Sqr),
60-
Sum(Sum),
61-
Fibonacci(Fibonacci),
62-
Multiply(Multiply),
63-
}
64-
6556
// The actor that processes requests
6657
struct ComputeActor {
6758
recv: tokio::sync::mpsc::Receiver<ComputeMessage>,

examples/local.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ struct Get {
1414
key: String,
1515
}
1616

17-
#[derive(Debug, Serialize, Deserialize)]
18-
struct List;
19-
2017
#[derive(Debug, Serialize, Deserialize)]
2118
struct Set {
2219
key: String,
@@ -29,9 +26,6 @@ impl From<(String, String)> for Set {
2926
}
3027
}
3128

32-
#[derive(Debug, Serialize, Deserialize)]
33-
struct SetMany;
34-
3529
#[rpc_requests(message = StorageMessage, no_rpc, no_spans)]
3630
#[derive(Serialize, Deserialize, Debug)]
3731
enum StorageProtocol {

src/util.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ mod quinn_setup_utils {
2222
certs.add(cert)?;
2323
}
2424

25-
let crypto_client_config = rustls::ClientConfig::builder_with_provider(Arc::new(
26-
rustls::crypto::ring::default_provider(),
27-
))
28-
.with_protocol_versions(&[&rustls::version::TLS13])
29-
.expect("valid versions")
30-
.with_root_certificates(certs)
31-
.with_no_client_auth();
25+
let provider = rustls::crypto::ring::default_provider();
26+
let crypto_client_config = rustls::ClientConfig::builder_with_provider(Arc::new(provider))
27+
.with_protocol_versions(&[&rustls::version::TLS13])
28+
.expect("valid versions")
29+
.with_root_certificates(certs)
30+
.with_no_client_auth();
3231
let quic_client_config =
3332
quinn::crypto::rustls::QuicClientConfig::try_from(crypto_client_config)?;
3433

@@ -54,7 +53,10 @@ mod quinn_setup_utils {
5453

5554
/// Create a quinn client config and trust all certificates.
5655
pub fn configure_client_insecure() -> Result<ClientConfig> {
57-
let crypto = rustls::ClientConfig::builder()
56+
let provider = rustls::crypto::ring::default_provider();
57+
let crypto = rustls::ClientConfig::builder_with_provider(Arc::new(provider))
58+
.with_protocol_versions(rustls::DEFAULT_VERSIONS)
59+
.expect("valid versions")
5860
.dangerous()
5961
.with_custom_certificate_verifier(Arc::new(SkipServerVerification))
6062
.with_no_client_auth();

tests/derive.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ use serde::{Deserialize, Serialize};
88

99
#[test]
1010
fn derive_simple() {
11+
#![allow(dead_code)]
12+
1113
#[derive(Debug, Serialize, Deserialize)]
1214
struct RpcRequest;
1315

0 commit comments

Comments
 (0)