myrmidon / python /src /server /services /credentials /crypto_utils.py
tek Atrust
chore(deploy): build monolithic server for Hugging Face
d5ef46f
Raw
History Blame Contribute Delete
1.88 kB
import base64
import os
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from ...config.logfire_config import get_logger
logger = get_logger(__name__)
class CryptoUtils:
"""Utilities for Fernet encryption and key management."""
@staticmethod
def get_encryption_key() -> bytes:
"""Generate encryption key from environment variables."""
service_key = os.getenv("SUPABASE_SERVICE_KEY", "default-key-for-development")
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=b"static_salt_for_credentials",
iterations=100000,
)
return base64.urlsafe_b64encode(kdf.derive(service_key.encode()))
@staticmethod
def encrypt_value(value: str) -> str:
"""Encrypt a sensitive value using Fernet encryption."""
if not value:
return ""
try:
fernet = Fernet(CryptoUtils.get_encryption_key())
encrypted_bytes = fernet.encrypt(value.encode("utf-8"))
return base64.urlsafe_b64encode(encrypted_bytes).decode("utf-8")
except Exception as e:
logger.error(f"Error encrypting value: {e}")
raise
@staticmethod
def decrypt_value(encrypted_value: str) -> str:
"""Decrypt a sensitive value using Fernet encryption."""
if not encrypted_value:
return ""
try:
fernet = Fernet(CryptoUtils.get_encryption_key())
encrypted_bytes = base64.urlsafe_b64decode(encrypted_value.encode("utf-8"))
decrypted_bytes = fernet.decrypt(encrypted_bytes)
return str(decrypted_bytes.decode("utf-8"))
except Exception as e:
logger.error(f"Error decrypting value: {e}")
raise