🏡 index : github.com/compromyse/enfold.git

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
import os
import json

REQUEST_KEY = bytes.fromhex('4D6251655468576D5A7134743677397A')
RESPONSE_KEY = bytes.fromhex('3273357638782F413F4428472B4B6250')
GLOBAL_IV = "556A586E32723575"
IV_INDEX = '0'
RANDOMIV = os.urandom(8).hex()
IV = bytes.fromhex(GLOBAL_IV + RANDOMIV)

class Encryption:
    @staticmethod
    def encrypt(data):
        cipher = AES.new(REQUEST_KEY, AES.MODE_CBC, IV)
        padded_data = pad(json.dumps(data).encode(), 16)
        ct = cipher.encrypt(padded_data)
        ct_b64 = base64.b64encode(ct).decode()
        return RANDOMIV + str(IV_INDEX) + ct_b64

    @staticmethod
    def decrypt(data):
        data = data.strip()
        iv_hex = data[:32]
        ct_b64 = data[32:]

        iv = bytes.fromhex(iv_hex)
        ct = base64.b64decode(ct_b64)
        cipher = AES.new(RESPONSE_KEY, AES.MODE_CBC, iv)
        pt = unpad(cipher.decrypt(ct), 16)
        return json.loads(pt.decode(errors="ignore"))