20 lines
641 B
Python
20 lines
641 B
Python
"""Argon2id password hashing and verification."""
|
|
|
|
from argon2 import PasswordHasher
|
|
from argon2.exceptions import VerifyMismatchError
|
|
|
|
# Argon2id is the default for PasswordHasher
|
|
ph = PasswordHasher()
|
|
|
|
def hash_password(password: str) -> str:
|
|
"""Hash a plaintext password."""
|
|
return ph.hash(password)
|
|
|
|
def verify_password(hashed: str, password: str) -> bool:
|
|
"""Verify a password against a hash. Returns True if matched."""
|
|
try:
|
|
ph.verify(hashed, password)
|
|
# Note: We skip check_needs_rehash() for simplicity in this single-user app.
|
|
return True
|
|
except VerifyMismatchError:
|
|
return False
|