pub struct TlsFingerprint {
pub cipher_suites: Vec<u16>,
pub extensions: Vec<u16>,
pub signature_algorithms: Vec<u16>,
pub supported_groups: Vec<u16>,
pub alpn_protocols: Vec<Vec<u8>>,
pub ja3_hash: &'static str,
pub tls_version: &'static str,
pub record_size_limit: Option<u16>,
pub compress_certificate_algos: Vec<u16>,
pub application_settings_protocol: Option<&'static str>,
}Fields§
§cipher_suites: Vec<u16>§extensions: Vec<u16>§signature_algorithms: Vec<u16>§supported_groups: Vec<u16>§alpn_protocols: Vec<Vec<u8>>§ja3_hash: &'static str§tls_version: &'static str§record_size_limit: Option<u16>§compress_certificate_algos: Vec<u16>§application_settings_protocol: Option<&'static str>Implementations§
Source§impl TlsFingerprint
impl TlsFingerprint
pub fn firefox() -> TlsFingerprint
pub fn chrome() -> TlsFingerprint
Sourcepub fn chrome_120() -> TlsFingerprint
pub fn chrome_120() -> TlsFingerprint
Chrome 120+ (Dec 2023) fingerprint
Sourcepub fn chrome_latest() -> TlsFingerprint
pub fn chrome_latest() -> TlsFingerprint
Chrome 130+ (Oct 2024+) latest fingerprint with updated extensions
pub fn compute_ja3(&self) -> String
Sourcepub fn compute_ja4(&self) -> String
pub fn compute_ja4(&self) -> String
JA4 fingerprint: <tls_version><num_suites><num_exts><alpn_hash> where alpn_hash is first 12 chars of SHA256 of sorted ALPN values
pub fn alpn_strings(&self) -> Vec<&str>
pub fn is_tls13_suite(&self, suite: u16) -> bool
pub fn tls13_suites(&self) -> Vec<u16>
pub fn tls12_suites(&self) -> Vec<u16>
Sourcepub fn tls12_cipher_list_string(&self) -> String
pub fn tls12_cipher_list_string(&self) -> String
Convert TLS 1.2 cipher suite IDs to BoringSSL OpenSSL name string (colon-separated, e.g. “ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256”)
DHE suites are dropped: BoringSSL has no DHE_RSA implementation, so
they can never be offered (see cipher_suite_boringssl_supported).
Sourcepub fn tls13_cipher_suites_string(&self) -> String
pub fn tls13_cipher_suites_string(&self) -> String
Convert TLS 1.3 cipher suite IDs to BoringSSL name string (colon-separated, e.g. “TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384”)
Sourcepub fn curves_list_string(&self) -> String
pub fn curves_list_string(&self) -> String
Convert supported group IDs to BoringSSL curves list string (colon-separated, e.g. “X25519:P-256:P-384”)
FFDHE groups are dropped: SSL_(CTX_)set1_groups_list fails the
WHOLE call on any unrecognized name and BoringSSL implements no FFDHE
group — an unfiltered Firefox list would silently discard the entire
groups fingerprint (see group_boringssl_supported).
Sourcepub fn sigalgs_list_string(&self) -> String
pub fn sigalgs_list_string(&self) -> String
Convert signature algorithm IDs to BoringSSL sigalgs list string (colon-separated, e.g. “ecdsa_secp256r1_sha256:rsa_pss_rsae_sha256”)
Trait Implementations§
Source§impl Clone for TlsFingerprint
impl Clone for TlsFingerprint
Source§fn clone(&self) -> TlsFingerprint
fn clone(&self) -> TlsFingerprint
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for TlsFingerprint
impl RefUnwindSafe for TlsFingerprint
impl Send for TlsFingerprint
impl Sync for TlsFingerprint
impl Unpin for TlsFingerprint
impl UnsafeUnpin for TlsFingerprint
impl UnwindSafe for TlsFingerprint
Blanket Implementations§
Source§impl<T> AsCtxPtr for Twhere
T: ?Sized,
impl<T> AsCtxPtr for Twhere
T: ?Sized,
Source§fn as_ctx_ptr(&self) -> *mut Selfwhere
Self: Sized,
fn as_ctx_ptr(&self) -> *mut Selfwhere
Self: Sized,
self’s address as *mut Self for deferred-task / scopeguard /
ref_guard ctx slots. The closures/trampolines deref it as shared
(&*p) — every method they reach is &self post-R-2, so no write
provenance is required; the *mut spelling is purely to match the
existing DerefOnDrop / HasAutoFlush / RefCount ABI.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more