mirror of
https://github.com/th30d4y/OpenLearnX.git
synced 2026-05-26 19:26:33 +00:00
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
from datetime import datetime
|
|
import secrets
|
|
import string
|
|
from cryptography.fernet import Fernet
|
|
import os
|
|
import base64
|
|
from Crypto.Cipher import AES
|
|
from Crypto.Random import get_random_bytes
|
|
from Crypto.Util.Padding import pad, unpad
|
|
import json
|
|
|
|
class CertificateManager:
|
|
def __init__(self):
|
|
# AES-256 key (store this securely in environment variables)
|
|
self.key = os.getenv('AES_ENCRYPTION_KEY', self._generate_key())
|
|
|
|
def _generate_key(self):
|
|
"""Generate a new AES-256 key"""
|
|
return base64.b64encode(get_random_bytes(32)).decode('utf-8')
|
|
|
|
def encrypt_wallet_id(self, wallet_id):
|
|
"""Encrypt wallet ID using AES-256"""
|
|
try:
|
|
key = base64.b64decode(self.key)
|
|
cipher = AES.new(key, AES.MODE_CBC)
|
|
ct_bytes = cipher.encrypt(pad(wallet_id.encode('utf-8'), AES.block_size))
|
|
iv = base64.b64encode(cipher.iv).decode('utf-8')
|
|
ct = base64.b64encode(ct_bytes).decode('utf-8')
|
|
return {"iv": iv, "encrypted": ct}
|
|
except Exception as e:
|
|
print(f"Encryption error: {e}")
|
|
return None
|
|
|
|
def decrypt_wallet_id(self, encrypted_data):
|
|
"""Decrypt wallet ID"""
|
|
try:
|
|
key = base64.b64decode(self.key)
|
|
iv = base64.b64decode(encrypted_data['iv'])
|
|
ct = base64.b64decode(encrypted_data['encrypted'])
|
|
cipher = AES.new(key, AES.MODE_CBC, iv)
|
|
pt = unpad(cipher.decrypt(ct), AES.block_size)
|
|
return pt.decode('utf-8')
|
|
except Exception as e:
|
|
print(f"Decryption error: {e}")
|
|
return None
|
|
|
|
def generate_certificate_id(self):
|
|
"""Generate random certificate ID"""
|
|
return ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(12))
|