Coverage for src / lexigram / contracts / auth / fingerprint.py: 0%
9 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-15 18:57 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-15 18:57 +0800
1"""Device fingerprinting utilities for session management.
3Defined in lexigram-contracts so that any package (auth, admin, etc.) can
4generate stable device identifiers without creating a cross-extension dependency.
5"""
7from __future__ import annotations
9import hashlib
10import importlib
11from typing import Any
13__all__ = ["generate_device_id"]
15_json_module = importlib.import_module("json")
18def generate_device_id(fingerprint_data: dict[str, Any]) -> str:
19 """Generate a stable device ID from fingerprint data.
21 Produces a deterministic SHA-256 hex digest from a JSON-serialised
22 snapshot of the client metadata supplied in *fingerprint_data*.
24 Args:
25 fingerprint_data: Dictionary containing client metadata such as
26 ``user_agent``, ``screen_resolution``, ``timezone``,
27 ``language``, and ``platform``.
29 Returns:
30 A 64-character SHA-256 hex digest that uniquely identifies the device.
31 """
32 serialized: bytes = _json_module.dumps(
33 fingerprint_data,
34 sort_keys=True,
35 ).encode("utf-8")
36 return hashlib.sha256(serialized).hexdigest()