mirror of
https://github.com/aljazceru/python-teos.git
synced 2025-12-17 22:24:23 +01:00
32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
from hashlib import sha256
|
|
from binascii import unhexlify, hexlify
|
|
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
|
|
|
|
from pisa import logging
|
|
|
|
|
|
class EncryptedBlob:
|
|
def __init__(self, data):
|
|
self.data = data
|
|
|
|
def decrypt(self, key):
|
|
# master_key = H(tx_id | tx_id)
|
|
master_key = sha256(key + key).digest()
|
|
|
|
# The 16 MSB of the master key will serve as the AES GCM 128 secret key. The 16 LSB will serve as the IV.
|
|
sk = master_key[:16]
|
|
nonce = master_key[16:]
|
|
|
|
logging.info("[Watcher] creating new blob")
|
|
logging.info("[Watcher] master key: {}".format(hexlify(master_key).decode()))
|
|
logging.info("[Watcher] sk: {}".format(hexlify(sk).decode()))
|
|
logging.info("[Watcher] nonce: {}".format(hexlify(nonce).decode()))
|
|
logging.info("[Watcher] encrypted_blob: {}".format(self.data))
|
|
|
|
# Decrypt
|
|
aesgcm = AESGCM(sk)
|
|
data = unhexlify(self.data.encode())
|
|
raw_tx = aesgcm.decrypt(nonce=nonce, data=data, associated_data=None)
|
|
|
|
return raw_tx
|