21 lines
773 B
Python
21 lines
773 B
Python
from cryptography.fernet import Fernet, InvalidToken
|
|
|
|
|
|
class CredentialCipher:
|
|
def __init__(self, key: str) -> None:
|
|
try:
|
|
self._fernet = Fernet(key.encode("ascii"))
|
|
except Exception as exc:
|
|
raise ValueError("CREDENTIAL_ENCRYPTION_KEY must be a valid Fernet key") from exc
|
|
|
|
def encrypt(self, value: str) -> str:
|
|
if not value:
|
|
raise ValueError("credential value must not be empty")
|
|
return self._fernet.encrypt(value.encode("utf-8")).decode("ascii")
|
|
|
|
def decrypt(self, token: str) -> str:
|
|
try:
|
|
return self._fernet.decrypt(token.encode("ascii")).decode("utf-8")
|
|
except InvalidToken as exc:
|
|
raise ValueError("stored credential cannot be decrypted") from exc
|