EpicGames/lore · error

Failed client config

Error message

Failed client config

What it means

This expect wraps QuicClientConfig::try_from(crypto_config), converting a rustls::ClientConfig into quinn's QuicClientConfig. The conversion only fails when the rustls config uses an unsupported cipher suite / crypto provider (e.g. rustls built with a provider quinn's quic requirements don't satisfy).

Solutions

  1. Check the try_from error message naming the unsupported cipher suite or provider
  2. Enable a QUIC-compatible CryptoProvider (ring or aws-lc-rs) feature on rustls/quinn in Cargo.toml
  3. Ensure quinn and rustls versions are compatible (align on the same rustls major, e.g. quinn 0.11 + rustls 0.23)
  4. Build the ClientConfig via the provider-aware builder API (builder_with_protocol_versions + CryptoProvider)

Example fix

// before
QuicClientConfig::try_from(crypto_config).expect("Failed client config")
// after
QuicClientConfig::try_from(crypto_config)
    .unwrap_or_else(|e| panic!("Failed client config: {e:?} — check rustls CryptoProvider features"))
Defensive patterns

Strategy: validation

Validate before calling

// ensure a QUIC-safe provider is configured
#[cfg(feature = "rustls")] {
    rustls::crypto::ring::default_provider().install_default().ok();
}

Prevention

When it happens

Trigger: rustls ClientConfig built with a crypto provider or version whose negotiated suites are incompatible with QUIC (non-AEAD ciphers), or mixing rustls versions (e.g. rustls 0.23 with mismatched feature flags) so try_from rejects the config.

Common situations: Upgrading rustls/quinn majors and forgetting the CryptoProvider feature setup; building rustls with only non-QUIC-safe cipher suites; duplicate/mismatched ring vs aws-lc-rs providers in the dependency tree.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13). Data as JSON: /api/errors/b8e96ff5bc87559d. Report an issue: GitHub.

Appendix: source

Thrown at lore-server/src/quic/stream_handler.rs:893

        let server = QuinnServer::start(
            QuinnConfigBuilder::new()
                .address(server_addr)
                .cert_file(cert_path)
                .pkey_file(key_path)
                .stream_handler_factory(factory)
                .build()
                .unwrap(),
        )
        .expect("Failed Quinn server start");

        let mut crypto_config = rustls::ClientConfig::builder()
            .dangerous()
            .with_custom_certificate_verifier(insecure_client_auth::SkipServerVerification::new())
            .with_no_client_auth();
        crypto_config.alpn_protocols = vec![protocol.as_bytes().into()];

        let client_config = ClientConfig::new(Arc::new(
            QuicClientConfig::try_from(crypto_config).expect("Failed client config"),
        ));

        let client_addr: SocketAddr = "0.0.0.0:0".parse().unwrap();
        let mut endpoint = Endpoint::client(client_addr).expect("Failed to create client endpoint");
        endpoint.set_default_client_config(client_config);

        let connection = endpoint
            .connect(server_addr, "localhost")
            .unwrap()
            .await
            .unwrap();
        let (send, recv) = connection
            .open_bi()
            .await
            .expect("Failed to setup bidirectional channel");

        Harness {
            send,

View on GitHub (pinned to 074eb0b0d1)