Skip to content

Commit 6fa9e4a

Browse files
Updated example 7702 script
1 parent d906218 commit 6fa9e4a

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed
Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22
"""
33
*******************************************************************************
44
* Ledger Ethereum App
@@ -20,32 +20,31 @@
2020
from __future__ import print_function
2121

2222
from ledgerblue.comm import getDongle
23-
from ledgerblue.commException import CommException
2423
import argparse
2524
import struct
2625
import binascii
27-
import math
2826
import rlp
2927

3028

31-
3229
def der_encode(value):
3330
value_bytes = value.to_bytes(max(1, (value.bit_length() + 7) // 8), 'big')
3431
if value >= 0x80:
3532
value_bytes = (0x80 | len(value_bytes)).to_bytes(1, 'big') + value_bytes
3633
return value_bytes
3734

35+
3836
def tlv_encode(tag, value):
3937
return der_encode(tag) + der_encode(len(value)) + value
4038

41-
def parse_bip32_path(path):
39+
40+
def parse_bip32_path(path: str):
4241
if len(path) == 0:
4342
return b""
4443
result = b""
4544
elements = path.split('/')
45+
result += len(elements).to_bytes(1, "big")
4646
for pathElement in elements:
4747
element = pathElement.split('\'')
48-
result = result + der_encode(0x01) + der_encode(0x04)
4948
if len(element) == 1:
5049
result = result + struct.pack(">I", int(element[0]))
5150
else:
@@ -54,23 +53,19 @@ def parse_bip32_path(path):
5453

5554

5655
parser = argparse.ArgumentParser()
57-
parser.add_argument('--path', help="BIP 32 path to retrieve")
56+
parser.add_argument('--path', help="BIP 32 path to retrieve", default="44'/60'/0'/0/0")
5857
parser.add_argument('--chainid', help="Chain ID", type=int, required=True)
5958
parser.add_argument('--nonce', help="Account Nonce", type=int, required=True)
6059
parser.add_argument('--delegate', help="Delegate address", type=str, required=True)
6160
args = parser.parse_args()
6261

63-
if args.path == None:
64-
args.path = "44'/60'/0'/0/0"
65-
6662
tmp = tlv_encode(0x00, struct.pack(">B", 0x01))
67-
tmp += parse_bip32_path(args.path)
6863
data = binascii.unhexlify(args.delegate[2:])
69-
tmp += tlv_encode(0x02, data)
70-
tmp += tlv_encode(0x03, struct.pack(">Q", args.chainid))
71-
tmp += tlv_encode(0x04, struct.pack(">Q", args.nonce))
64+
tmp += tlv_encode(0x01, data)
65+
tmp += tlv_encode(0x02, struct.pack(">Q", args.chainid))
66+
tmp += tlv_encode(0x03, struct.pack(">Q", args.nonce))
7267

73-
tmp = struct.pack(">H", len(tmp)) + tmp
68+
tmp = parse_bip32_path(args.path) + struct.pack(">H", len(tmp)) + tmp
7469

7570
apdu = bytearray.fromhex("e0340100")
7671
apdu += struct.pack(">B", len(tmp))
@@ -80,12 +75,12 @@ def parse_bip32_path(path):
8075
result = dongle.exchange(bytes(apdu))
8176

8277
v = result[0]
83-
r = result[1 : 1 + 32]
84-
s = result[1 + 32 :]
78+
r = result[1:1 + 32]
79+
s = result[1 + 32:]
8580

8681
print("v = " + str(v))
8782
print("r = " + binascii.hexlify(r).decode('utf-8'))
8883
print("s = " + binascii.hexlify(s).decode('utf-8'))
8984

90-
rlpData = [ args.chainid, binascii.unhexlify(args.delegate[2:]), args.nonce, v, r, s ]
85+
rlpData = [args.chainid, binascii.unhexlify(args.delegate[2:]), args.nonce, v, r, s]
9186
print(binascii.hexlify(rlp.encode(rlpData)).decode('utf-8'))

0 commit comments

Comments
 (0)