Skip to main content
Experimental Crate: codec

seleniumbase_rs_codec::ids names the TLS and HTTP/2 values a browser fingerprint is built from, and seeds what BoringSSL can emit in a client hello. Each registry is a Registry: a static table of (id, IANA name) rows, looked up in both directions. The BORINGSSL_* slices list the ids BoringSSL can emit; the *_CIPHERS, REFUSED_EXTENSIONS, UNSUPPORTED_GROUPS and ML_DSA_SIGALGS constants list the ids the spec refuses before a client exists. The numbers come from the vendored BoringSSL headers of btls-sys 0.5.6, cross-checked against rustls 0.23.45 and http2 0.5.20; the wire probe of the mimic crate decides what the wire really carries.

Registry#

struct

A registry of wire ids, each with its IANA name. new wraps a static table in which each id and each name appears once (a test checks it); rows is the table in order; name and id look up in either direction (id matches the name exactly); contains says whether the id is listed.

Registries#

const

Each holds the rows the module names, sorted by id: for example 0x1301 TLS_AES_128_GCM_SHA256, 0xCA34 trust_anchors, 0x11EC X25519MLKEM768, 0x0904 ml_dsa_44, 0x0304 TLS 1.3, 0x0004 INITIAL_WINDOW_SIZE.

is_grease, is_alpn#

fn

Whether id is a GREASE value (RFC 8701: both bytes equal, low nibble 0xA), and whether name is one of ALPN_PROTOCOLS.

Constants#

const

The TLS 1.2 legacy_version a JA3 version field carries (771); the uncompressed EC point format, the only one BoringSSL emits; the ALPN ids this module names; and the HTTP/2 SETTINGS ids a measured spec may carry (any other is refused).

What BoringSSL can emit#

const
  • BORINGSSL_CIPHERS: the suites the spec layer lets through, each checked by the wire probe of tests/impersonate_wire.rs. The TLS 1.2 DHE suites reach the wire too but are kept out by policy; PSK, CCM, RC4, NULL, export, anonymous and signalling suites do not reach the wire.
  • TLS13_CIPHERS: a spec may reorder them but never drop one.
  • BORINGSSL_CLIENT_EXTENSIONS: one per TlsOptions knob; padding (21) only where BoringSSL’s length rule places it.
  • BORINGSSL_ALWAYS_SENT_EXTENSIONS: supported_groups and signature_algorithms are in every hello; a spec without them describes a hello no client can send.
  • BORINGSSL_LEGACY_ONLY_EXTENSIONS: sent exactly when the lowest offered version is below TLS 1.3. BORINGSSL_TLS13_ONLY_EXTENSIONS: sent exactly when TLS 1.3 is offered.
  • BORINGSSL_GROUPS and BORINGSSL_KEY_SHARE_GROUPS: the FFDHE groups can be offered but have no key share.
  • BORINGSSL_SIGALGS: the internal MD5-SHA1 code 0xFF01 never reaches the wire and is not listed.

What the spec refuses#

const

The TLS 1.2 DHE suites (a policy, not a limit: the probe shows BoringSSL writes them), the TLS 1.3 CCM suites, the signalling suites (BoringSSL replaces them with 0xFF01), the refused extensions with their reasons, the groups BoringSSL does not name (x448, brainpool, secp256k1, the larger FFDHE groups, ML-KEM 512 and 768 and the P-256 hybrid), and the ML-DSA signature schemes.