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

1"""Device fingerprinting utilities for session management. 

2 

3Defined in lexigram-contracts so that any package (auth, admin, etc.) can 

4generate stable device identifiers without creating a cross-extension dependency. 

5""" 

6 

7from __future__ import annotations 

8 

9import hashlib 

10import importlib 

11from typing import Any 

12 

13__all__ = ["generate_device_id"] 

14 

15_json_module = importlib.import_module("json") 

16 

17 

18def generate_device_id(fingerprint_data: dict[str, Any]) -> str: 

19 """Generate a stable device ID from fingerprint data. 

20 

21 Produces a deterministic SHA-256 hex digest from a JSON-serialised 

22 snapshot of the client metadata supplied in *fingerprint_data*. 

23 

24 Args: 

25 fingerprint_data: Dictionary containing client metadata such as 

26 ``user_agent``, ``screen_resolution``, ``timezone``, 

27 ``language``, and ``platform``. 

28 

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()