mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-15 18:00:59 +00:00
wire fixes
This commit is contained in:
parent
97d402eba8
commit
b8dd8ed90c
@ -99,7 +99,7 @@ Throws MessageChecksumError to target if data doesn't match the checksum.
|
|||||||
target.send(data_chunk)
|
target.send(data_chunk)
|
||||||
|
|
||||||
if compute_checksum:
|
if compute_checksum:
|
||||||
checksum = ubinascii.crc32(checksum, data_chunk)
|
checksum = ubinascii.crc32(data_chunk, checksum) & 0xffffffff
|
||||||
|
|
||||||
msg_footer = data_tail[:_MSG_FOOTER_LEN]
|
msg_footer = data_tail[:_MSG_FOOTER_LEN]
|
||||||
if len(msg_footer) < _MSG_FOOTER_LEN:
|
if len(msg_footer) < _MSG_FOOTER_LEN:
|
||||||
@ -111,9 +111,10 @@ Throws MessageChecksumError to target if data doesn't match the checksum.
|
|||||||
else:
|
else:
|
||||||
data_checksum = checksum
|
data_checksum = checksum
|
||||||
if data_checksum != checksum:
|
if data_checksum != checksum:
|
||||||
target.throw(MessageChecksumError, 'Message checksum mismatch')
|
target.throw(MessageChecksumError(
|
||||||
|
'Message checksum mismatch, expected %d, received %d' % (checksum, data_checksum)))
|
||||||
else:
|
else:
|
||||||
target.throw(EOFError)
|
target.throw(EOFError())
|
||||||
|
|
||||||
|
|
||||||
def encode_wire_message(msg_type, msg_data, session_id, target):
|
def encode_wire_message(msg_type, msg_data, session_id, target):
|
||||||
@ -121,21 +122,22 @@ def encode_wire_message(msg_type, msg_data, session_id, target):
|
|||||||
serialize_report_header(report, REP_MARKER_HEADER, session_id)
|
serialize_report_header(report, REP_MARKER_HEADER, session_id)
|
||||||
serialize_message_header(report, msg_type, len(msg_data))
|
serialize_message_header(report, msg_type, len(msg_data))
|
||||||
|
|
||||||
source_data = memoryview(msg_data)
|
msg_data = memoryview(msg_data)
|
||||||
target_data = memoryview(report)[_REP_HEADER_LEN + _MSG_HEADER_LEN:]
|
report = memoryview(report)
|
||||||
|
|
||||||
|
source_data = msg_data
|
||||||
|
target_data = report[_REP_HEADER_LEN + _MSG_HEADER_LEN:]
|
||||||
|
|
||||||
compute_checksum = hasattr(ubinascii, 'crc32')
|
compute_checksum = hasattr(ubinascii, 'crc32')
|
||||||
|
|
||||||
if compute_checksum:
|
if compute_checksum:
|
||||||
checksum = ubinascii.crc32(msg_data)
|
checksum = ubinascii.crc32(msg_data) & 0xffffffff
|
||||||
else:
|
else:
|
||||||
checksum = 0
|
checksum = 0
|
||||||
|
|
||||||
msg_footer = bytearray(_MSG_FOOTER_LEN)
|
msg_footer = bytearray(_MSG_FOOTER_LEN)
|
||||||
serialize_message_footer(msg_footer, checksum)
|
serialize_message_footer(msg_footer, checksum)
|
||||||
|
|
||||||
first = True
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
# move as much as possible from source to target
|
# move as much as possible from source to target
|
||||||
n = min(len(target_data), len(source_data))
|
n = min(len(target_data), len(source_data))
|
||||||
@ -154,11 +156,9 @@ def encode_wire_message(msg_type, msg_data, session_id, target):
|
|||||||
if not source_data and not msg_footer:
|
if not source_data and not msg_footer:
|
||||||
break
|
break
|
||||||
|
|
||||||
if first:
|
# reset to skip the magic and session ID
|
||||||
# reset to skip the magic and session ID
|
serialize_report_header(report, REP_MARKER_DATA, session_id)
|
||||||
serialize_report_header(report, REP_MARKER_DATA, session_id)
|
target_data = report[_REP_HEADER_LEN:]
|
||||||
target_data = report[_REP_HEADER_LEN:]
|
|
||||||
first = False
|
|
||||||
|
|
||||||
|
|
||||||
def encode_session_open_message(session_id, target):
|
def encode_session_open_message(session_id, target):
|
||||||
|
Loading…
Reference in New Issue
Block a user