# from https://gist.github.com/flatz/3f242ab3c550d361f8c6d031b07fb6b1 import os import json import logging from Crypto.Protocol.KDF import PBKDF2 from Crypto.Hash import SHA1 from Crypto.Cipher import AES from Crypto.Util.Padding import unpad logging.basicConfig() logger = logging.getLogger('utils') logger.setLevel(logging.INFO) def aes_decrypt_cbc(key, iv, data): cipher = AES.new(key, AES.MODE_CBC, iv) return cipher.decrypt(data) salt = 'saltysalt' derived_key_len = 128 // 8 num_iterations = 1003 iv = b' ' * 16 def decrypt_encrypted_key(password, encrypted_key): encrypted_key = bytes.fromhex(encrypted_key) if encrypted_key.startswith(b'v10'): password = 'peanuts' logger.warning(f'encryptedKey in config.json is encrypted using the default `peanuts` key') elif encrypted_key.startswith(b'v11'): encrypted_key = encrypted_key[3:] else: logger.warning(f'expected v10 or v11 in password prefix but saw {encrypted_key[:3]}') encrypted_key = encrypted_key[3:] kek = PBKDF2(password, salt, dkLen = derived_key_len, count = num_iterations, hmac_hash_module = SHA1) decrypted_key = unpad(aes_decrypt_cbc(kek, iv, encrypted_key), block_size = 16).decode('ascii') print('0x' + decrypted_key)