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

1"""Device fingerprinting for Lexigram Auth.""" 

2 

3from __future__ import annotations 

4 

5import hashlib 

6from typing import Any 

7 

8from lexigram import serialization as json 

9 

10 

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

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

13 

14 Args: 

15 fingerprint_data: Dictionary containing client metadata like: 

16 - user_agent 

17 - screen_resolution 

18 - timezone 

19 - language 

20 - platform 

21 

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

28 

29 

30__all__ = [ 

31 "generate_device_id", 

32]