2023-02-26 12:31:38 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
from base64 import b64decode
|
|
|
|
from hashlib import pbkdf2_hmac
|
|
|
|
|
2023-04-11 13:52:34 +00:00
|
|
|
from Crypto.Cipher import AES
|
2023-02-26 12:31:38 +00:00
|
|
|
|
|
|
|
#TODO perhaps load the vault from tools/2hashcat_tests/metamask2hashcat.json similar as in tools/metamask2hashcat.py
|
|
|
|
vault = {"data":"R95fzGt4UQ0uwrcrVYnIi4UcSlWn9wlmer+//526ZDwYAp50K82F1u1oacYcdjjhuEvbZnWk/uBG00UkgLLlO3WbINljqmu2QWdDEwjTgo/qWR6MU9d/82rxNiONHQE8UrZ8SV+htVr6XIB0ze3aCV0E+fwI93EeP79ZeDxuOEhuHoiYT0bHWMv5nA48AdluG4DbOo7SrDAWBVCBsEdXsOfYsS3/TIh0a/iFCMX4uhxY2824JwcWp4H36SFWyBYMZCJ3/U4DYFbbjWZtGRthoJlIik5BJq4FLu3Y1jEgza0AWlAvu4MKTEqrYSpUIghfxf1a1f+kPvxsHNq0as0kRwCXu09DObbdsiggbmeoBkxMZiFq0d9ar/3Gon0r3hfc3c124Wlivzbzu1JcZ3wURhLSsUS7b5cfG86aXHJkxmQDA5urBz6lw3bsIvlEUB2ErkQy/zD+cPwCG1Rs/WKt7KNh45lppCUkHccbf+xlpdc8OfUwj01Xp7BdH8LMR7Vx1C4hZCvSdtURVl0VaAMxHDX0MjRkwmqS","iv":"h+BoIf2CQ5BEjaIOShFE7g==","salt":"jfGI3TXguhb8GPnKSXFrMzRk2NCEc131Gt5G3kZr5+s="}
|
|
|
|
password = "hashcat1"
|
|
|
|
|
|
|
|
salt = b64decode(vault["salt"])
|
|
|
|
key = pbkdf2_hmac("sha256", password.encode(), salt, 10_000)
|
|
|
|
|
|
|
|
iv = b64decode(vault["iv"])
|
|
|
|
payload = b64decode(vault["data"])
|
|
|
|
ciphertext = payload[:-16]
|
|
|
|
print(f"ciphertext.hex()={ciphertext.hex()[0:128]}")
|
|
|
|
tag = payload[-16:]
|
|
|
|
|
|
|
|
cipher = AES.new(key, AES.MODE_GCM, nonce=iv)
|
|
|
|
plaintext = cipher.decrypt(ciphertext)
|
|
|
|
|
|
|
|
print(plaintext.hex()[0:128])
|
|
|
|
print(str(plaintext[0:128]))
|
|
|
|
|
|
|
|
print()
|
|
|
|
try:
|
|
|
|
cipher.verify(tag)
|
|
|
|
print("The message is authentic:", plaintext.decode())
|
|
|
|
except ValueError:
|
|
|
|
print("Key incorrect or message corrupted")
|
|
|
|
print()
|
|
|
|
|
|
|
|
cipher = AES.new(key, AES.MODE_GCM, nonce=iv)
|
|
|
|
plaintext = cipher.decrypt(ciphertext[:32])
|
|
|
|
print("Partially encrypted message (32 bytes):", plaintext.decode())
|
|
|
|
|
|
|
|
cipher = AES.new(key, AES.MODE_GCM, nonce=iv)
|
|
|
|
plaintext = cipher.decrypt(ciphertext[:450])
|
2023-04-11 13:52:34 +00:00
|
|
|
print("Partially encrypted message (450 bytes):", plaintext.decode())
|