mirror of
https://github.com/cloudflare/cloudflared.git
synced 2026-06-22 20:00:16 +00:00
f674b82e2a
Introduce a new crypto/ package as the single source of truth for TLS curve preferences used on every edge-facing connection, and adopt X25519MLKEM768 as the primary post-quantum key exchange for both QUIC and HTTP/2: PQ Prefer (default): X25519MLKEM768, P256Kyber768Draft00, CurveP256 PQ Strict (--post-quantum): X25519MLKEM768, P256Kyber768Draft00 The curve list is identical under FIPS and non-FIPS builds, so crypto.GetCurvePreferences takes only a features.PostQuantumMode and returns a fresh slice on every call. HTTP/2 now applies these curve preferences the same way QUIC does. The previous PostQuantumStrict rejection in serveHTTP2 and the forced QUIC-only selection in NewProtocolSelector are removed since both transports support the same post-quantum curves; the needPQ parameter is dropped from NewProtocolSelector accordingly. Also fix a shared tls.Config race: both the QUIC and HTTP/2 paths now Clone() the per-protocol entry from TunnelConfig.EdgeTLSConfigs before mutating CurvePreferences instead of writing through the shared map entry. Legacy Kyber draft curve X25519Kyber768Draft00 and the unused removeDuplicates helper are removed along with the old supervisor/pqtunnels.go / _test.go files. AGENTS.md is updated with guidance on the new crypto/ package, the cfdcrypto import alias, the tls.Config cloning rule, and the lint workflow implications of .golangci.yaml's whole-files: true setting.
36 lines
1.7 KiB
Go
36 lines
1.7 KiB
Go
// Package crypto centralizes the cryptographic primitives and TLS
|
|
// configuration used by cloudflared when establishing connections to the
|
|
// Cloudflare edge.
|
|
//
|
|
// The primary responsibility of the package is to expose a single, canonical
|
|
// source of TLS curve preferences so that every edge-facing transport (QUIC
|
|
// and HTTP/2) negotiates the same key-exchange algorithms regardless of the
|
|
// code path that sets up the connection.
|
|
//
|
|
// # Post-Quantum key exchange
|
|
//
|
|
// cloudflared supports the X25519MLKEM768 hybrid post-quantum key exchange.
|
|
// Two operating modes are exposed via the features.PostQuantumMode flag:
|
|
//
|
|
// - PostQuantumPrefer: advertise X25519MLKEM768 and the deprecated
|
|
// P256Kyber768Draft00 first, then fall back to the classical CurveP256
|
|
// if the peer does not support either PQ curve. This is the default
|
|
// used for every outbound edge connection.
|
|
// - PostQuantumStrict: advertise only the PQ curves (X25519MLKEM768 and
|
|
// P256Kyber768Draft00). Activated by the user via the --post-quantum
|
|
// CLI flag. No classical fallback is offered, so a peer that does not
|
|
// support any PQ curve will fail the handshake.
|
|
//
|
|
// The resulting curve lists are identical under FIPS and non-FIPS builds,
|
|
// which is why GetCurvePreferences does not take a FIPS toggle. If that
|
|
// property ever changes (for example, if a curve stops being FIPS-approved),
|
|
// the divergence should be expressed inside this package so callers remain
|
|
// unchanged.
|
|
//
|
|
// # Thread-safety
|
|
//
|
|
// GetCurvePreferences returns a fresh slice on every call. Callers are free
|
|
// to mutate the returned slice without affecting the package-level defaults
|
|
// or other callers.
|
|
package crypto
|