Private
Public Access
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
import hashlib
|
|
import json
|
|
|
|
from tuya_re import crypto, lan_discovery as disc, lan_protocol as lp
|
|
from tuya_re.const import LanCommand, UDP_KEY_SEED
|
|
|
|
UDP_KEY = hashlib.md5(UDP_KEY_SEED).digest()
|
|
|
|
|
|
def test_decode_broadcast_encrypted_55aa():
|
|
info = {
|
|
"gwId": "dev123",
|
|
"ip": "192.168.1.50",
|
|
"version": "3.3",
|
|
"productKey": "pk",
|
|
}
|
|
body = crypto.aes_ecb_encrypt(UDP_KEY, json.dumps(info).encode())
|
|
frame = lp.pack_frame(0, LanCommand.UDP, body, retcode=0)
|
|
assert disc.decode_broadcast(frame) == info
|
|
|
|
|
|
def test_decode_broadcast_plain_json_payload():
|
|
info = {"gwId": "d", "ip": "10.0.0.9", "version": "3.3"}
|
|
# some devices' payloads are already plaintext JSON inside the frame
|
|
frame = lp.pack_frame(0, LanCommand.UDP, json.dumps(info).encode(), retcode=0)
|
|
assert disc.decode_broadcast(frame) == info
|
|
|
|
|
|
def test_decode_broadcast_payload_raw_json():
|
|
info = {"gwId": "x", "ip": "10.0.0.1"}
|
|
assert disc.decode_broadcast_payload(json.dumps(info).encode()) == info
|
|
|
|
|
|
def test_decode_broadcast_payload_encrypted():
|
|
info = {"gwId": "y", "ip": "10.0.0.2"}
|
|
enc = crypto.aes_ecb_encrypt(UDP_KEY, json.dumps(info).encode())
|
|
assert disc.decode_broadcast_payload(enc) == info
|