Files
app-ethereum/client/src/ledger_app_clients/ethereum/response_parser.py
2023-11-27 11:17:11 +01:00

53 lines
1.0 KiB
Python

def signature(data: bytes) -> tuple[bytes, bytes, bytes]:
assert len(data) == (1 + 32 + 32)
v = data[0:1]
data = data[1:]
r = data[0:32]
data = data[32:]
s = data[0:32]
return v, r, s
def challenge(data: bytes) -> int:
assert len(data) == 4
return int.from_bytes(data, "big")
def pk_addr(data: bytes, has_chaincode: bool = False):
idx = 0
if len(data) < (idx + 1):
return None
pk_len = data[idx]
idx += 1
if len(data) < (idx + pk_len):
return None
pk = data[idx:idx + pk_len]
idx += pk_len
if len(data) < (idx + 1):
return None
addr_len = data[idx]
idx += 1
if len(data) < (idx + addr_len):
return None
addr = data[idx:idx + addr_len]
idx += addr_len
if has_chaincode:
if len(data) < (idx + 32):
return None
chaincode = data[idx:idx + 32]
idx += 32
else:
chaincode = None
if idx != len(data):
return None
return pk, bytes.fromhex(addr.decode()), chaincode