Small refactoring : renamed the Ragger client
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
from enum import IntEnum, auto
|
||||
from typing import Iterator, Dict, List
|
||||
from typing import Optional
|
||||
from ragger.backend import BackendInterface
|
||||
from ragger.utils import RAPDU
|
||||
from ethereum_client.command_builder import EthereumCmdBuilder
|
||||
from ethereum_client.setting import SettingType, SettingImpl
|
||||
from ethereum_client.eip712 import EIP712FieldType
|
||||
from ethereum_client.response_parser import EthereumRespParser
|
||||
from app.command_builder import EthereumCmdBuilder
|
||||
from app.setting import SettingType, SettingImpl
|
||||
from app.eip712 import EIP712FieldType
|
||||
from app.response_parser import EthereumRespParser
|
||||
import signal
|
||||
import time
|
||||
|
||||
|
||||
class EthereumClient:
|
||||
_settings: Dict[SettingType, SettingImpl] = {
|
||||
_settings: dict[SettingType, SettingImpl] = {
|
||||
SettingType.BLIND_SIGNING: SettingImpl(
|
||||
[ "nanos", "nanox", "nanosp" ]
|
||||
),
|
||||
@@ -65,11 +65,11 @@ class EthereumClient:
|
||||
array_levels: [],
|
||||
key_name: str):
|
||||
with self._send(self._cmd_builder.eip712_send_struct_def_struct_field(
|
||||
field_type,
|
||||
type_name,
|
||||
type_size,
|
||||
array_levels,
|
||||
key_name)):
|
||||
field_type,
|
||||
type_name,
|
||||
type_size,
|
||||
array_levels,
|
||||
key_name)):
|
||||
pass
|
||||
return self._recv()
|
||||
|
||||
@@ -125,7 +125,7 @@ class EthereumClient:
|
||||
assert resp.status == 0x9000
|
||||
return self._resp_parser.sign(resp.data)
|
||||
|
||||
def settings_set(self, new_values: Dict[SettingType, bool]):
|
||||
def settings_set(self, new_values: dict[SettingType, bool]):
|
||||
# Go to settings
|
||||
for _ in range(2):
|
||||
self._client.right_click()
|
||||
+16
-13
@@ -1,6 +1,8 @@
|
||||
from enum import IntEnum, auto
|
||||
from typing import Iterator
|
||||
from ethereum_client.eip712 import EIP712FieldType
|
||||
from typing import Iterator, Optional
|
||||
from app.eip712 import EIP712FieldType
|
||||
import struct
|
||||
import rlp
|
||||
|
||||
class InsType(IntEnum):
|
||||
EIP712_SEND_STRUCT_DEF = 0x1a
|
||||
@@ -109,27 +111,28 @@ class EthereumCmdBuilder:
|
||||
data_w_length[:0xff])
|
||||
data_w_length = data_w_length[0xff:]
|
||||
|
||||
def _format_bip32(self, bip32, data: bytearray) -> bytearray:
|
||||
data.append(len(bip32))
|
||||
for idx in bip32:
|
||||
data.append((idx & 0xff000000) >> 24)
|
||||
data.append((idx & 0x00ff0000) >> 16)
|
||||
data.append((idx & 0x0000ff00) >> 8)
|
||||
data.append((idx & 0x000000ff))
|
||||
def _format_bip32(self, path: list[Optional[int]], data: bytearray) -> bytearray:
|
||||
data.append(len(path))
|
||||
for p in path:
|
||||
if p == None:
|
||||
val = 0
|
||||
else:
|
||||
val = (0x8 << 28) | p
|
||||
data += struct.pack(">I", val)
|
||||
return data
|
||||
|
||||
def eip712_sign_new(self, bip32) -> bytes:
|
||||
data = self._format_bip32(bip32, bytearray())
|
||||
def eip712_sign_new(self, bip32_path: list[Optional[int]]) -> bytes:
|
||||
data = self._format_bip32(bip32_path, bytearray())
|
||||
return self._serialize(InsType.EIP712_SIGN,
|
||||
P1Type.COMPLETE_SEND,
|
||||
P2Type.NEW_IMPLEM,
|
||||
data)
|
||||
|
||||
def eip712_sign_legacy(self,
|
||||
bip32,
|
||||
bip32_path: list[Optional[int]],
|
||||
domain_hash: bytes,
|
||||
message_hash: bytes) -> bytes:
|
||||
data = self._format_bip32(bip32, bytearray())
|
||||
data = self._format_bip32(bip32_path, bytearray())
|
||||
data += domain_hash
|
||||
data += message_hash
|
||||
return self._serialize(InsType.EIP712_SIGN,
|
||||
@@ -2,7 +2,7 @@ import pytest
|
||||
from pathlib import Path
|
||||
from ragger.firmware import Firmware
|
||||
from ragger.backend import SpeculosBackend, LedgerCommBackend, LedgerWalletBackend, BackendInterface
|
||||
from ethereum_client.client import EthereumClient
|
||||
from app.client import EthereumClient
|
||||
|
||||
FWS = [
|
||||
Firmware("nanos", "2.1"),
|
||||
|
||||
@@ -4,7 +4,7 @@ import json
|
||||
import sys
|
||||
import re
|
||||
import hashlib
|
||||
from ethereum_client.client import EthereumClient, EIP712FieldType
|
||||
from app.client import EthereumClient, EIP712FieldType
|
||||
from cal import cal
|
||||
|
||||
# global variables
|
||||
|
||||
+11
-13
@@ -2,17 +2,17 @@ import pytest
|
||||
import os
|
||||
import fnmatch
|
||||
from typing import List
|
||||
from ethereum_client.client import EthereumClient, SettingType
|
||||
from app.client import EthereumClient, SettingType
|
||||
from eip712 import InputData
|
||||
from pathlib import Path
|
||||
from configparser import ConfigParser
|
||||
|
||||
bip32 = [
|
||||
0x8000002c,
|
||||
0x8000003c,
|
||||
0x80000000,
|
||||
bip32_path = [
|
||||
44,
|
||||
60,
|
||||
0,
|
||||
0
|
||||
None,
|
||||
None
|
||||
]
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ def filtering(request) -> bool:
|
||||
|
||||
def test_eip712_legacy(app_client: EthereumClient):
|
||||
v, r, s = app_client.eip712_sign_legacy(
|
||||
bip32,
|
||||
bip32_path,
|
||||
bytes.fromhex('6137beb405d9ff777172aa879e33edb34a1460e701802746c5ef96e741710e59'),
|
||||
bytes.fromhex('eb4221181ff3f1a83ea7313993ca9218496e424604ba9492bb4052c03d5c3df8')
|
||||
)
|
||||
@@ -47,10 +47,10 @@ def test_eip712_legacy(app_client: EthereumClient):
|
||||
assert r == bytes.fromhex("ea66f747173762715751c889fea8722acac3fc35db2c226d37a2e58815398f64")
|
||||
assert s == bytes.fromhex("52d8ba9153de9255da220ffd36762c0b027701a3b5110f0a765f94b16a9dfb55")
|
||||
|
||||
|
||||
def test_eip712_new(app_client: EthereumClient, input_file: Path, verbose: bool, filtering: bool):
|
||||
print("=====> %s" % (input_file))
|
||||
if app_client._client.firmware.device != "nanos":
|
||||
if app_client._client.firmware.device == "nanos":
|
||||
pytest.skip("Not supported on LNS")
|
||||
else:
|
||||
test_path = "%s/%s" % (input_file.parent, "-".join(input_file.stem.split("-")[:-1]))
|
||||
conf_file = "%s.ini" % (test_path)
|
||||
filter_file = None
|
||||
@@ -74,7 +74,7 @@ def test_eip712_new(app_client: EthereumClient, input_file: Path, verbose: bool,
|
||||
})
|
||||
|
||||
assert InputData.process_file(app_client, input_file, filter_file) == True
|
||||
v, r, s = app_client.eip712_sign_new(bip32)
|
||||
v, r, s = app_client.eip712_sign_new(bip32_path)
|
||||
#print("[signature]")
|
||||
#print("v = %s" % (v.hex()))
|
||||
#print("r = %s" % (r.hex()))
|
||||
@@ -85,5 +85,3 @@ def test_eip712_new(app_client: EthereumClient, input_file: Path, verbose: bool,
|
||||
assert s == bytes.fromhex(config["signature"]["s"])
|
||||
else:
|
||||
print("No filter file found, skipping...")
|
||||
else:
|
||||
print("Not supported by LNS, skipping...")
|
||||
|
||||
Reference in New Issue
Block a user