# -*- coding: utf-8 -*- """Autentikasi: hashing password (PBKDF2) & token sesi.""" import hashlib import hmac import secrets _ITERASI = 200_000 def hash_password(password: str) -> str: salt = secrets.token_hex(16) h = hashlib.pbkdf2_hmac("sha256", password.encode("utf-8"), bytes.fromhex(salt), _ITERASI) return f"{salt}${h.hex()}" def verifikasi_password(password: str, tersimpan: str) -> bool: try: salt, h = tersimpan.split("$", 1) calon = hashlib.pbkdf2_hmac("sha256", password.encode("utf-8"), bytes.fromhex(salt), _ITERASI) return hmac.compare_digest(calon.hex(), h) except (ValueError, TypeError): return False def token_baru() -> str: return secrets.token_urlsafe(32)