Skip to content

Commit 6e952d8

Browse files
vrs now stored as integers in Python client
1 parent 3a2b474 commit 6e952d8

File tree

4 files changed

+27
-36
lines changed

4 files changed

+27
-36
lines changed

client/src/ledger_app_clients/ethereum/response_parser.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
def signature(data: bytes) -> tuple[bytes, bytes, bytes]:
1+
def signature(data: bytes) -> tuple[int, int, int]:
22
assert len(data) == (1 + 32 + 32)
33

4-
v = data[0:1]
4+
v = int.from_bytes(data[0:1], "big")
55
data = data[1:]
6-
r = data[0:32]
6+
r = int.from_bytes(data[0:32], "big")
77
data = data[32:]
8-
s = data[0:32]
8+
s = int.from_bytes(data[0:32], "big")
99

1010
return v, r, s
1111

client/src/ledger_app_clients/ethereum/utils.py

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,6 @@
44
import rlp
55

66

7-
# eth_account requires it for some reason
8-
def normalize_vrs(vrs: tuple) -> tuple:
9-
vrs_l = []
10-
for elem in vrs:
11-
vrs_l.append(elem.lstrip(b'\x00'))
12-
return tuple(vrs_l)
13-
14-
157
def get_selector_from_data(data: str) -> bytes:
168
raw_data = bytes.fromhex(data[2:])
179
return raw_data[:4]
@@ -22,7 +14,7 @@ def recover_message(msg, vrs: tuple) -> bytes:
2214
smsg = encode_typed_data(full_message=msg)
2315
else: # EIP-191
2416
smsg = encode_defunct(primitive=msg)
25-
addr = Account.recover_message(smsg, normalize_vrs(vrs))
17+
addr = Account.recover_message(smsg, vrs)
2618
return bytes.fromhex(addr[2:])
2719

2820

@@ -44,7 +36,7 @@ def recover_transaction(tx_params, vrs: tuple, raw_tx_param: Optional[bytes] = N
4436
trunc_chain_id >>= 8
4537

4638
trunc_target = trunc_chain_id * 2 + 35
47-
trunc_v = int.from_bytes(vrs[0], "big")
39+
trunc_v = vrs[0]
4840

4941
if (trunc_target & 0xff) == trunc_v:
5042
parity = 0
@@ -56,15 +48,14 @@ def recover_transaction(tx_params, vrs: tuple, raw_tx_param: Optional[bytes] = N
5648

5749
# https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md
5850
full_v = parity + tx_params["chainId"] * 2 + 35
59-
# 9 bytes would be big enough even for the biggest chain ID
60-
vrs = (int(full_v).to_bytes(9, "big"), vrs[1], vrs[2])
51+
vrs = (full_v, vrs[1], vrs[2])
6152
else:
6253
# Pre EIP-155 TX
6354
assert False
6455
decoded = rlp.decode(raw_tx)
6556
if raw_tx_param is None:
66-
reencoded = rlp.encode(decoded[:-3] + list(normalize_vrs(vrs)))
57+
reencoded = rlp.encode(decoded[:-3] + list(vrs))
6758
else:
68-
reencoded = rlp.encode(decoded + list(normalize_vrs(vrs)))
59+
reencoded = rlp.encode(decoded + list(vrs))
6960
addr = Account.recover_transaction(prefix + reencoded)
7061
return bytes.fromhex(addr[2:])

tests/ragger/test_eip7702.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ def common(firmware: Firmware,
3636
delegate: bytes,
3737
nonce: int,
3838
chain_id: int,
39-
v: bytes = None,
40-
r: bytes = None,
41-
s: bytes = None):
39+
v: int = None,
40+
r: int = None,
41+
s: int = None):
4242

4343
app_client = EthAppClient(backend)
4444

@@ -96,9 +96,9 @@ def test_eip7702_in_whitelist(firmware: Firmware,
9696
TEST_ADDRESS_1,
9797
NONCE,
9898
CHAIN_ID_1,
99-
bytes.fromhex("00"),
100-
bytes.fromhex("f82e 50a7 55fa 989f 4bb9 b36b 15af b442 4ce9 cda6 9752 fd17 a7eb 1473 7d96 3e62"),
101-
bytes.fromhex("07c9 c91d 6140 b45e a52f 29de 7a5e ffb9 dd34 0607 a26e 225c 4027 8e91 c405 4492"))
99+
0x00,
100+
0xf82e50a755fa989f4bb9b36b15afb4424ce9cda69752fd17a7eb14737d963e62,
101+
0x07c9c91d6140b45ea52f29de7a5effb9dd340607a26e225c40278e91c4054492)
102102

103103

104104
def test_eip7702_in_whitelist_all_chain_whitelisted(firmware: Firmware,
@@ -115,9 +115,9 @@ def test_eip7702_in_whitelist_all_chain_whitelisted(firmware: Firmware,
115115
TEST_ADDRESS_0,
116116
NONCE,
117117
CHAIN_ID_2,
118-
bytes.fromhex("00"),
119-
bytes.fromhex("0378 f7ac 482e c728 b65d 19d0 3943 bbb3 fe73 07c7 2c64 6e7d 2d0c 11be e81e b2b9"),
120-
bytes.fromhex("3322 66ec 3ef9 96bf 835c 50a8 3300 6b4c 8039 8d59 7d0e 6846 19db 4d51 a384 a38d"))
118+
0x00,
119+
0x0378f7ac482ec728b65d19d03943bbb3fe7307c72c646e7d2d0c11bee81eb2b9,
120+
0x332266ec3ef996bf835c50a833006b4c80398d597d0e684619db4d51a384a38d)
121121

122122

123123
def test_eip7702_in_whitelist_all_chain_param(firmware: Firmware,
@@ -134,9 +134,9 @@ def test_eip7702_in_whitelist_all_chain_param(firmware: Firmware,
134134
TEST_ADDRESS_2,
135135
NONCE,
136136
CHAIN_ID_0,
137-
bytes.fromhex("01"),
138-
bytes.fromhex("a24f 35ca fc6b 408c e325 39d4 bd89 a67e dd4d 6303 fc67 6dfd df93 b984 05b7 ee5e"),
139-
bytes.fromhex("1594 56ba be65 6692 959c a3d8 29ca 269e 8f82 387c 91e4 0a33 633d 190d da7a 3c5c"))
137+
0x01,
138+
0xa24f35cafc6b408ce32539d4bd89a67edd4d6303fc676dfddf93b98405b7ee5e,
139+
0x159456babe656692959ca3d829ca269e8f82387c91e40a33633d190dda7a3c5c)
140140

141141

142142
def test_eip7702_in_whitelist_max(firmware: Firmware,
@@ -153,9 +153,9 @@ def test_eip7702_in_whitelist_max(firmware: Firmware,
153153
TEST_ADDRESS_MAX,
154154
NONCE_MAX,
155155
CHAIN_ID_MAX,
156-
bytes.fromhex("00"),
157-
bytes.fromhex("a07c 6808 9449 8c21 e80f ebb0 11ae 5d62 ede6 645d 77d7 c902 db06 5d5a 082d d220"),
158-
bytes.fromhex("6b5c 6222 5cf6 5a62 40c2 583d acc1 641c 8d69 2ed3 bd00 473c c3e2 8fe1 a4f5 2294"))
156+
0x00,
157+
0xa07c680894498c21e80febb011ae5d62ede6645d77d7c902db065d5a082dd220,
158+
0x6b5c62225cf65a6240c2583dacc1641c8d692ed3bd00473cc3e28fe1a4f52294)
159159

160160

161161
def test_eip7702_in_whitelist_wrong_chain(firmware: Firmware,

tests/ragger/test_sign.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,6 @@ def test_sign_eip_7702(firmware: Firmware,
389389
test_name=test_name,
390390
path=BIP32_PATH,
391391
with_simu=False,
392-
v=bytes.fromhex("01"),
393-
r=bytes.fromhex("9800ce04ecb46aebde0fea80c66392255eb13c3b3597aeec222447f6e1bfcfaf"),
394-
s=bytes.fromhex("787eb82581e1a51d8956f21a0ccd0b96d8de14b04c11de0b7dcb5e400219902b"))
392+
v=0x01,
393+
r=0x9800ce04ecb46aebde0fea80c66392255eb13c3b3597aeec222447f6e1bfcfaf,
394+
s=0x787eb82581e1a51d8956f21a0ccd0b96d8de14b04c11de0b7dcb5e400219902b)

0 commit comments

Comments
 (0)