mirror of
https://github.com/aljazceru/python-teos.git
synced 2025-12-17 22:24:23 +01:00
The input types for Blob.encrypt and EncryptedBlob.decrypt were not consistent. The former was in hex whereas the later was in bytes. Format the later in hex for consistency.
34 lines
1.1 KiB
Python
34 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)
|
|
key = unhexlify(key)
|
|
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)
|
|
hex_raw_tx = hexlify(raw_tx).decode('utf8')
|
|
|
|
return hex_raw_tx
|