Download src/utils/hashing.py from imDrizzle/lurien-matrix-firewall: direct link, hf CLI and curl.
- Browser
- Download file 1.21 kB
-
https://huggingface.co/spaces/imDrizzle/lurien-matrix-firewall/resolve/main/src/utils/hashing.py
- Command line
-
hf download hf://spaces/imDrizzle/lurien-matrix-firewall/src/utils/hashing.py
-
curl -L -o hashing.py https://huggingface.co/spaces/imDrizzle/lurien-matrix-firewall/resolve/main/src/utils/hashing.py
1.21 kB
| """ | |
| Utility: Hashing and security functions. | |
| """ | |
| import hashlib | |
| import hmac | |
| import secrets | |
| import string | |
| import os | |
| def generate_api_key() -> str: | |
| """ | |
| Generate a secure random API key. | |
| Format: fw_live_<32 random hex chars> | |
| """ | |
| return f"fw_live_{secrets.token_hex(32)}" | |
| def hash_api_key(key: str) -> str: | |
| """Hash an API key for storage using HMAC-SHA256 (never store raw keys).""" | |
| pepper = os.getenv("API_KEY_PEPPER", "change_me_to_a_random_string_in_production") | |
| return hmac.new( | |
| pepper.encode("utf-8"), | |
| key.encode("utf-8"), | |
| hashlib.sha256 | |
| ).hexdigest() | |
| def hash_prompt(prompt: str) -> str: | |
| """ | |
| Hash a prompt for logging. NEVER store raw prompts. | |
| Uses SHA-256 for deterministic, irreversible hashing. | |
| """ | |
| return hashlib.sha256(prompt.encode("utf-8")).hexdigest() | |
| def hash_normalized_prompt(prompt: str) -> str: | |
| """ | |
| Hash a normalized version of the prompt (lowercase, no punctuation, single spaces) | |
| Used for graph replay cache deduplication. | |
| """ | |
| normalized = prompt.lower().translate(str.maketrans('', '', string.punctuation)) | |
| normalized = " ".join(normalized.split()) | |
| return hash_prompt(normalized) | |