| 1234567891011121314151617181920212223242526 |
- import bcrypt
- BCRYPT_PASSWORD_PREFIX = "{bcrypt}"
- def hash_password(password: str) -> str:
- """Return an AUTH_ACCOUNTS-ready bcrypt password value."""
- salt = bcrypt.gensalt()
- hashed = bcrypt.hashpw(password.encode("utf-8"), salt).decode("utf-8")
- return f"{BCRYPT_PASSWORD_PREFIX}{hashed}"
- def verify_password(plain_password: str, stored_password: str) -> bool:
- """Verify a plaintext password against a stored password spec."""
- if stored_password.startswith(BCRYPT_PASSWORD_PREFIX):
- hashed_password = stored_password[len(BCRYPT_PASSWORD_PREFIX) :]
- if not hashed_password:
- return False
- try:
- return bcrypt.checkpw(
- plain_password.encode("utf-8"), hashed_password.encode("utf-8")
- )
- except ValueError:
- return False
- return stored_password == plain_password
|