26 lines
664 B
Python
26 lines
664 B
Python
import base64
|
|
import hashlib
|
|
from cryptography.fernet import Fernet
|
|
from app.core.config import get_settings
|
|
|
|
|
|
def _derive_fernet_key(secret: str) -> bytes:
|
|
digest = hashlib.sha256(secret.encode("utf-8")).digest()
|
|
return base64.urlsafe_b64encode(digest)
|
|
|
|
|
|
def _get_fernet() -> Fernet:
|
|
settings = get_settings()
|
|
key = _derive_fernet_key(settings.SECRET_KEY)
|
|
return Fernet(key)
|
|
|
|
|
|
def encrypt_api_key(api_key: str) -> str:
|
|
f = _get_fernet()
|
|
return f.encrypt(api_key.encode("utf-8")).decode("utf-8")
|
|
|
|
|
|
def decrypt_api_key(encrypted_key: str) -> str:
|
|
f = _get_fernet()
|
|
return f.decrypt(encrypted_key.encode("utf-8")).decode("utf-8")
|