Coverage for src/lexigram/auth/session/fingerprint.py: 100%
8 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 00:58 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 00:58 +0800
1"""Device fingerprinting for Lexigram Auth."""
3from __future__ import annotations
5import hashlib
6from typing import Any
8from lexigram import serialization as json
11def generate_device_id(fingerprint_data: dict[str, Any]) -> str:
12 """Generate a stable device ID from fingerprint data.
14 Args:
15 fingerprint_data: Dictionary containing client metadata like:
16 - user_agent
17 - screen_resolution
18 - timezone
19 - language
20 - platform
22 Returns:
23 A SHA-256 hash representing the unique device.
24 """
25 # lexigram.serialization.dumps already returns bytes (either from orjson or encoded stdlib)
26 normalized_data = json.dumps(fingerprint_data, sort_keys=True)
27 return hashlib.sha256(normalized_data).hexdigest()
30__all__ = [
31 "generate_device_id",
32]