2022-10-10 22:41:15 +02:00

30 lines
837 B
Python

import hashlib
import struct
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
def encrypt_decrypt(key, addr, data):
buf = addr + addr + addr[:4]
ct = Cipher(
algorithms.AES(bytearray(key)),
modes.ECB(),
backend=default_backend()
)
ct = ct.encryptor()
ct = ct.update(buf)
output = b""
for i,d in enumerate(data):
output += struct.pack("B", d^ct[i%16])
return output
def auth_response(key, challenge):
k = int.from_bytes(key, "big")
c = int.from_bytes(challenge, "big")
intermediate = hashlib.sha256((k^c).to_bytes(16, "big")).digest()
part1 = intermediate[:16]
part2 = intermediate[16:]
return bytearray([(a^b) for (a,b) in zip(part1, part2)])