- envelope: 7 fixed keys + conditional dataArea, no data key; int
type/snno, seconds timestamp, data setter auto len/crc (CRC32 upper);
SequenceNumber 1..9999 (increaseSN)
- crypto: encrypt is plaintext-header-first a||transform(b), key radix 32
at both tryParse sites; decrypt_data ports decryptData (dual-0x58
markers, s+'}' equipNo probe, s+','+T return); decrypt_request kept
for the device-side known-header split
- socket: raw send (no length prefix), accumulate-and-try receive
- battery: queryAPowerData shape (data={'update':2}), radix default 32,
--probe prints exact TX/RX bytes per variant; device_local.send_probe
- docs: RE_DART_FINDINGS ss3/5/8 + open items, BATTERY_POC host recipe
- tests: 19 new protocol tests, suite 44/44 green
94 lines
1.9 KiB
Python
94 lines
1.9 KiB
Python
"""Pure-protocol building blocks recovered from the app's Dart AOT snapshot.
|
|
|
|
Everything here is hardware-independent and covered by unit tests. See
|
|
``docs/RE_DART_FINDINGS.md`` for the reverse-engineering evidence.
|
|
"""
|
|
|
|
from .commands import CommunicationCmd, CommunicationMode, CommunicationOperate
|
|
from .crc import (
|
|
CRC16_INIT,
|
|
CRC16_POLY,
|
|
crc16_hex_string,
|
|
crc16_modbus,
|
|
crc32,
|
|
int16_to_le_bytes,
|
|
le_bytes_to_int16,
|
|
)
|
|
from .crypto import (
|
|
DEFAULT_KEY_RADIX,
|
|
MARKER,
|
|
decrypt_data,
|
|
decrypt_object,
|
|
decrypt_request,
|
|
encrypt_object,
|
|
generate_secret_key,
|
|
header_len_for,
|
|
split_envelope,
|
|
)
|
|
from .envelope import (
|
|
KEY_ORDER,
|
|
SNNO_MAX,
|
|
SNNO_MIN,
|
|
PLACEHOLDER,
|
|
CommunicationObject,
|
|
SequenceNumber,
|
|
direct_connect_request,
|
|
)
|
|
from .framing import (
|
|
MAGIC_ACK,
|
|
MAGIC_DATA,
|
|
build_ble_ack_frame,
|
|
build_ble_data_frame,
|
|
chunk_for_mtu,
|
|
content_in_data,
|
|
create_ble_frame,
|
|
frame_socket_payload,
|
|
magicEquals,
|
|
magic_in_data,
|
|
sn_in_data,
|
|
verify_frame_crc,
|
|
)
|
|
from .framing import SocketFrameDecoder
|
|
|
|
__all__ = [
|
|
"CommunicationCmd",
|
|
"CommunicationMode",
|
|
"CommunicationOperate",
|
|
"CRC16_INIT",
|
|
"CRC16_POLY",
|
|
"crc16_modbus",
|
|
"crc16_hex_string",
|
|
"crc32",
|
|
"int16_to_le_bytes",
|
|
"le_bytes_to_int16",
|
|
"DEFAULT_KEY_RADIX",
|
|
"MARKER",
|
|
"generate_secret_key",
|
|
"split_envelope",
|
|
"encrypt_object",
|
|
"decrypt_object",
|
|
"decrypt_request",
|
|
"decrypt_data",
|
|
"header_len_for",
|
|
"KEY_ORDER",
|
|
"SNNO_MIN",
|
|
"SNNO_MAX",
|
|
"PLACEHOLDER",
|
|
"CommunicationObject",
|
|
"SequenceNumber",
|
|
"direct_connect_request",
|
|
"MAGIC_ACK",
|
|
"MAGIC_DATA",
|
|
"create_ble_frame",
|
|
"build_ble_data_frame",
|
|
"build_ble_ack_frame",
|
|
"magic_in_data",
|
|
"magicEquals",
|
|
"sn_in_data",
|
|
"content_in_data",
|
|
"verify_frame_crc",
|
|
"chunk_for_mtu",
|
|
"frame_socket_payload",
|
|
"SocketFrameDecoder",
|
|
]
|