Skip to main content

millipede_fingerprint/
browser_fingerprint.rs

1use crate::{HeaderGenerator, HeaderProfile};
2
3/// A v0.1 `post_page_create` consistency stub that produces a consistent user agent and
4/// `Accept-*`/`Sec-Ch-Ua-*` header set only.
5///
6/// This generator does not patch navigator, canvas, or WebGL properties and makes no TLS
7/// (JA3/JA4) fingerprinting claim.
8#[derive(Debug, Clone, Default)]
9pub struct BrowserFingerprintGenerator {
10    headers: HeaderGenerator,
11}
12
13impl BrowserFingerprintGenerator {
14    /// Creates a generator backed by the bundled browser header profiles.
15    pub fn new() -> Self {
16        Self::default()
17    }
18
19    /// Generates the header profile selected deterministically by `seed`.
20    pub fn generate(&self, seed: &str) -> HeaderProfile {
21        self.headers.generate(seed)
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use crate::HeaderGenerator;
28
29    use super::BrowserFingerprintGenerator;
30
31    #[test]
32    fn generate_delegates_deterministically() {
33        let seed = "session-A";
34
35        assert_eq!(
36            BrowserFingerprintGenerator::new().generate(seed),
37            HeaderGenerator::new().generate(seed)
38        );
39    }
40}