pub struct DeviceFingerprint {Show 16 fields
pub cipher_list: &'static str,
pub sigalgs_list: &'static str,
pub curves_list: &'static str,
pub extension_permutation: Vec<u16>,
pub cert_compression: Vec<CertCompression>,
pub min_tls_version: &'static str,
pub ech_grease: bool,
pub permute_extensions: bool,
pub no_session_ticket: bool,
pub grease_enabled: bool,
pub ocsp_stapling: bool,
pub signed_cert_timestamps: bool,
pub key_shares_limit: u8,
pub delegated_credentials: Option<&'static str>,
pub record_size_limit: Option<u16>,
pub alps_use_new_codepoint: bool,
}Expand description
Per-browser TLS ClientHello fingerprint configuration.
Holds the raw TLS parameters needed to produce a JA3/JA4-identical
ClientHello. Call to_tls_options to convert
into hpx’s TlsOptions.
Fields§
§cipher_list: &'static strColon-separated cipher suite string for BoringSSL.
sigalgs_list: &'static strColon-separated signature algorithms string.
curves_list: &'static strColon-separated curves list.
extension_permutation: Vec<u16>Extension type IDs in emission order.
cert_compression: Vec<CertCompression>Certificate compression algorithms.
min_tls_version: &'static strMinimum TLS version ("1.0" or "1.2").
ech_grease: boolEnable ECH GREASE.
permute_extensions: boolEnable extension permutation (Fisher-Yates shuffle).
no_session_ticket: boolDisable session tickets (Safari iOS quirk).
grease_enabled: boolGREASE enabled (disabled for Firefox).
ocsp_stapling: boolEnable OCSP stapling.
signed_cert_timestamps: boolEnable Signed Certificate Timestamps.
Maximum key shares.
delegated_credentials: Option<&'static str>Delegated credentials sigalg list (Firefox-only).
record_size_limit: Option<u16>Record size limit (Firefox-only).
alps_use_new_codepoint: boolUse new ALPS codepoint.
Implementations§
Source§impl DeviceFingerprint
impl DeviceFingerprint
Sourcepub fn to_tls_options(&self) -> TlsOptions
pub fn to_tls_options(&self) -> TlsOptions
Convert to hpx’s TlsOptions.
Note: extension_permutation is not set here because hpx’s
TlsOptionsBuilder uses boring’s ExtensionType which requires
platform-specific conversion. Use extension_permutation
to get the raw extension IDs.
Sourcepub fn get_extension_permutation(&self) -> Vec<u16>
pub fn get_extension_permutation(&self) -> Vec<u16>
Return the extension permutation, shuffled if this is a Chrome profile.
Sourcepub fn shuffled_chrome_permutation() -> Vec<u16>
pub fn shuffled_chrome_permutation() -> Vec<u16>
Fisher-Yates shuffle of the Chrome extension permutation (for testing).
Sourcepub fn for_device(device_class: DeviceClass, browser_name: &str) -> Self
pub fn for_device(device_class: DeviceClass, browser_name: &str) -> Self
Return the correct fingerprint for a device class and browser name.
Sourcepub fn chrome_147() -> Self
pub fn chrome_147() -> Self
Chrome 147 desktop/Android fingerprint.
Sourcepub fn safari_ios_18() -> Self
pub fn safari_ios_18() -> Self
Safari iOS 18 fingerprint.
Sourcepub fn firefox_135() -> Self
pub fn firefox_135() -> Self
Firefox 135 (NSS) fingerprint.
Trait Implementations§
Source§impl Clone for DeviceFingerprint
impl Clone for DeviceFingerprint
Source§fn clone(&self) -> DeviceFingerprint
fn clone(&self) -> DeviceFingerprint
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 DeviceFingerprint
impl RefUnwindSafe for DeviceFingerprint
impl Send for DeviceFingerprint
impl Sync for DeviceFingerprint
impl Unpin for DeviceFingerprint
impl UnsafeUnpin for DeviceFingerprint
impl UnwindSafe for DeviceFingerprint
Blanket Implementations§
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,
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