diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00001.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00000.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00001.png rename to tests/ragger/snapshots/nanos/test_personal_sign_metamask/00000.png diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00002.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00001.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00002.png rename to tests/ragger/snapshots/nanos/test_personal_sign_metamask/00001.png diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00002.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00002.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00002.png rename to tests/ragger/snapshots/nanos/test_personal_sign_metamask/00002.png diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00003.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00003.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00003.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00000.png b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00000.png new file mode 100644 index 0000000..dc3315f Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00000.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00001.png b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00001.png new file mode 100644 index 0000000..5b3e16d Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00001.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00002.png b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00002.png new file mode 100644 index 0000000..93165d0 Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00002.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00003.png b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00003.png new file mode 100644 index 0000000..c923961 Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00003.png differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00003.png b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00004.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00003.png rename to tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00004.png diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00005.png b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00005.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00005.png differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00000.png b/tests/ragger/snapshots/nanos/test_personal_sign_reject/00000.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00000.png rename to tests/ragger/snapshots/nanos/test_personal_sign_reject/00000.png diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00001.png b/tests/ragger/snapshots/nanos/test_personal_sign_reject/00001.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00001.png rename to tests/ragger/snapshots/nanos/test_personal_sign_reject/00001.png diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00005.png b/tests/ragger/snapshots/nanos/test_personal_sign_reject/00002.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00005.png rename to tests/ragger/snapshots/nanos/test_personal_sign_reject/00002.png diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00003.png b/tests/ragger/snapshots/nanos/test_personal_sign_reject/00003.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00003.png rename to tests/ragger/snapshots/nanos/test_personal_sign_reject/00003.png diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_reject/00004.png b/tests/ragger/snapshots/nanos/test_personal_sign_reject/00004.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_reject/00004.png differ diff --git a/tests/ragger/snapshots/nanosp/test_personal_sign_metamask b/tests/ragger/snapshots/nanosp/test_personal_sign_metamask new file mode 120000 index 0000000..3b23af2 --- /dev/null +++ b/tests/ragger/snapshots/nanosp/test_personal_sign_metamask @@ -0,0 +1 @@ +../nanox/test_personal_sign_metamask \ No newline at end of file diff --git a/tests/ragger/snapshots/nanosp/test_personal_sign_non_ascii b/tests/ragger/snapshots/nanosp/test_personal_sign_non_ascii new file mode 120000 index 0000000..ee2a028 --- /dev/null +++ b/tests/ragger/snapshots/nanosp/test_personal_sign_non_ascii @@ -0,0 +1 @@ +../nanox/test_personal_sign_non_ascii \ No newline at end of file diff --git a/tests/ragger/snapshots/nanosp/test_personal_sign_opensea b/tests/ragger/snapshots/nanosp/test_personal_sign_opensea new file mode 120000 index 0000000..60d0d6f --- /dev/null +++ b/tests/ragger/snapshots/nanosp/test_personal_sign_opensea @@ -0,0 +1 @@ +../nanox/test_personal_sign_opensea/ \ No newline at end of file diff --git a/tests/ragger/snapshots/nanosp/test_personal_sign_reject b/tests/ragger/snapshots/nanosp/test_personal_sign_reject new file mode 120000 index 0000000..5ecbf85 --- /dev/null +++ b/tests/ragger/snapshots/nanosp/test_personal_sign_reject @@ -0,0 +1 @@ +../nanox/test_personal_sign_reject \ No newline at end of file diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00000.png b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00000.png new file mode 100644 index 0000000..b0936ad Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00000.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00001.png b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00001.png new file mode 100644 index 0000000..e7ffedd Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00001.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00002.png b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00002.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00002.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00000.png b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00000.png new file mode 100644 index 0000000..c965f50 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00000.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00001.png b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00001.png new file mode 100644 index 0000000..234ab06 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00001.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00002.png b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00002.png new file mode 100644 index 0000000..e7ffedd Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00002.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00003.png b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00003.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00003.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00000.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00000.png new file mode 100644 index 0000000..e1159c5 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00000.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00001.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00001.png new file mode 100644 index 0000000..3f76142 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00001.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00002.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00002.png new file mode 100644 index 0000000..685ff39 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00002.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00003.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00003.png new file mode 100644 index 0000000..668a2a6 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00003.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00004.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00004.png new file mode 100644 index 0000000..1f135ae Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00004.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00005.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00005.png new file mode 100644 index 0000000..a3799d2 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00005.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00006.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00006.png new file mode 100644 index 0000000..f29ed00 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00006.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00007.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00007.png new file mode 100644 index 0000000..8af3d9c Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00007.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00008.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00008.png new file mode 100644 index 0000000..e7ffedd Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00008.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00009.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00009.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00009.png differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00000.png b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00000.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00000.png rename to tests/ragger/snapshots/nanox/test_personal_sign_reject/00000.png diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_reject/00001.png b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00001.png new file mode 100644 index 0000000..380d883 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00001.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_reject/00002.png b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00002.png new file mode 100644 index 0000000..e7ffedd Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00002.png differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00003.png b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00003.png similarity index 100% rename from tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00003.png rename to tests/ragger/snapshots/nanox/test_personal_sign_reject/00003.png diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_reject/00004.png b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00004.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00004.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_metamask/00000.png b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00000.png new file mode 100644 index 0000000..f739811 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_metamask/00001.png b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00001.png new file mode 100644 index 0000000..e964717 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00001.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_metamask/00002.png b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00002.png new file mode 100644 index 0000000..83a0d80 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00002.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_metamask/00003.png b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00003.png new file mode 100644 index 0000000..1c2d6cd Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00003.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00000.png b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00000.png new file mode 100644 index 0000000..f739811 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00001.png b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00001.png new file mode 100644 index 0000000..f5806b2 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00001.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00002.png b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00002.png new file mode 100644 index 0000000..83a0d80 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00002.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00003.png b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00003.png new file mode 100644 index 0000000..1c2d6cd Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00003.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_opensea/00000.png b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00000.png new file mode 100644 index 0000000..f739811 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_opensea/00001.png b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00001.png new file mode 100644 index 0000000..a499291 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00001.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_opensea/00002.png b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00002.png new file mode 100644 index 0000000..bbf0532 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00002.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_opensea/00003.png b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00003.png new file mode 100644 index 0000000..83a0d80 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00003.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_opensea/00004.png b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00004.png new file mode 100644 index 0000000..1c2d6cd Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00004.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_reject/00000.png b/tests/ragger/snapshots/stax/test_personal_sign_reject/00000.png new file mode 100644 index 0000000..f739811 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_reject/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_reject/00001.png b/tests/ragger/snapshots/stax/test_personal_sign_reject/00001.png new file mode 100644 index 0000000..d4cf6af Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_reject/00001.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_reject/00002.png b/tests/ragger/snapshots/stax/test_personal_sign_reject/00002.png new file mode 100644 index 0000000..df803b1 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_reject/00002.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_reject/00003.png b/tests/ragger/snapshots/stax/test_personal_sign_reject/00003.png new file mode 100644 index 0000000..b1ff1b3 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_reject/00003.png differ diff --git a/tests/ragger/test_eip191.py b/tests/ragger/test_eip191.py new file mode 100644 index 0000000..249b6a7 --- /dev/null +++ b/tests/ragger/test_eip191.py @@ -0,0 +1,165 @@ +import pytest + +from ledger_app_clients.ethereum.client import EthAppClient, StatusWord +import ledger_app_clients.ethereum.response_parser as ResponseParser +from ledger_app_clients.ethereum.utils import recover_message + +from ragger.error import ExceptionRAPDU +from ragger.backend import BackendInterface +from ragger.firmware import Firmware +from ragger.navigator import Navigator, NavInsID + +from constants import ROOT_SNAPSHOT_PATH + + +BIP32_PATH = "m/44'/60'/0'/0/0" + + +def test_personal_sign_metamask(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + test_name: str): + + msg = "Example `personal_sign` message" + + app_client = EthAppClient(backend) + + with app_client.get_public_addr(display=False): + pass + _, DEVICE_ADDR, _ = ResponseParser.pk_addr(app_client.response().data) + + with app_client.personal_sign(BIP32_PATH, msg.encode('utf-8')): + if firmware.device.startswith("nano"): + next_action = NavInsID.RIGHT_CLICK + confirm_action = NavInsID.BOTH_CLICK + initial_instructions = [NavInsID.RIGHT_CLICK] + # Skip 1st screen because 'Sign' is already present + navigator.navigate(initial_instructions, + screen_change_after_last_instruction=False) + else: + next_action = NavInsID.USE_CASE_REVIEW_TAP + confirm_action = NavInsID.USE_CASE_REVIEW_CONFIRM + + navigator.navigate_until_text_and_compare(next_action, + [confirm_action], + "Sign", + ROOT_SNAPSHOT_PATH, + test_name) + + # verify signature + vrs = ResponseParser.signature(app_client.response().data) + addr = recover_message(msg.encode('utf-8'), vrs) + assert addr == DEVICE_ADDR + + +def test_personal_sign_non_ascii(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + test_name: str): + + msg = "0x9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658" + + app_client = EthAppClient(backend) + + with app_client.get_public_addr(display=False): + pass + _, DEVICE_ADDR, _ = ResponseParser.pk_addr(app_client.response().data) + + with app_client.personal_sign(BIP32_PATH, msg.encode('utf-8')): + if firmware.device.startswith("nano"): + next_action = NavInsID.RIGHT_CLICK + confirm_action = NavInsID.BOTH_CLICK + initial_instructions = [NavInsID.RIGHT_CLICK] + # Skip 1st screen because 'Sign' is already present + navigator.navigate(initial_instructions, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=False) + else: + next_action = NavInsID.USE_CASE_REVIEW_TAP + confirm_action = NavInsID.USE_CASE_REVIEW_CONFIRM + + navigator.navigate_until_text_and_compare(next_action, + [confirm_action], + "Sign", + ROOT_SNAPSHOT_PATH, + test_name) + + # verify signature + vrs = ResponseParser.signature(app_client.response().data) + addr = recover_message(msg.encode('utf-8'), vrs) + assert addr == DEVICE_ADDR + + +def test_personal_sign_opensea(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + test_name: str): + + msg = "Welcome to OpenSea!\n\nClick to sign in and accept the OpenSea Terms of Service: https://opensea.io/tos\n\nThis request will not trigger a blockchain transaction or cost any gas fees.\n\nYour authentication status will reset after 24 hours.\n\nWallet address:\n0x9858effd232b4033e47d90003d41ec34ecaeda94\n\nNonce:\n2b02c8a0-f74f-4554-9821-a28054dc9121" + + app_client = EthAppClient(backend) + + with app_client.get_public_addr(display=False): + pass + _, DEVICE_ADDR, _ = ResponseParser.pk_addr(app_client.response().data) + + if firmware.device == "nanos": + pytest.skip("Not supported on LNS") + with app_client.personal_sign(BIP32_PATH, msg.encode('utf-8')): + if firmware.device.startswith("nano"): + next_action = NavInsID.RIGHT_CLICK + confirm_action = NavInsID.BOTH_CLICK + initial_instructions = [NavInsID.RIGHT_CLICK] + # Skip 1st screen because 'Sign' is already present + navigator.navigate(initial_instructions, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=False) + else: + next_action = NavInsID.USE_CASE_REVIEW_TAP + confirm_action = NavInsID.USE_CASE_REVIEW_CONFIRM + + navigator.navigate_until_text_and_compare(next_action, + [confirm_action], + "Sign", + ROOT_SNAPSHOT_PATH, + test_name) + + # verify signature + vrs = ResponseParser.signature(app_client.response().data) + addr = recover_message(msg.encode('utf-8'), vrs) + assert addr == DEVICE_ADDR + + +def test_personal_sign_reject(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + test_name: str): + + msg = "This is an reject sign" + + app_client = EthAppClient(backend) + + try: + with app_client.personal_sign(BIP32_PATH, msg.encode('utf-8')): + if firmware.device.startswith("nano"): + next_action = NavInsID.RIGHT_CLICK + confirm_action = NavInsID.BOTH_CLICK + navigator.navigate_until_text_and_compare(next_action, + [confirm_action], + "Cancel", + ROOT_SNAPSHOT_PATH, + test_name) + else: + # instructions = [NavInsID.USE_CASE_REVIEW_TAP] + instructions = [NavInsID.USE_CASE_CHOICE_REJECT, + NavInsID.USE_CASE_CHOICE_CONFIRM, + NavInsID.USE_CASE_STATUS_DISMISS] + navigator.navigate_and_compare(ROOT_SNAPSHOT_PATH, + test_name, + instructions) + + + except ExceptionRAPDU as e: + assert e.status == StatusWord.CONDITION_NOT_SATISFIED + else: + assert False # An exception should have been raised diff --git a/tests/speculos/old_test_eip191.py b/tests/speculos/old_test_eip191.py deleted file mode 100644 index 423bd23..0000000 --- a/tests/speculos/old_test_eip191.py +++ /dev/null @@ -1,209 +0,0 @@ -from time import sleep - -import pytest - -import ethereum_client -from ethereum_client.utils import compare_screenshot, compare_screenshot, parse_sign_response, save_screenshot, PATH_IMG -from ethereum_client.transaction import PersonalTransaction - -def test_personal_sign_metamask(cmd): - result: list = [] - - bip32_path="44'/60'/0'/0/0" - transaction = PersonalTransaction( - msg="Example `personal_sign` message" - ) - - with cmd.personal_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: - sleep(0.5) - - if cmd.model == "nanos": - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00000.png") - cmd.client.press_and_release('right') - - # Message 1/2, 2/2 - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00001.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00002.png") - cmd.client.press_and_release('right') - - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00003.png") - cmd.client.press_and_release('both') - if cmd.model == "nanox" or cmd.model == "nanosp": - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00000.png") - cmd.client.press_and_release('right') - - # Message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00001.png") - cmd.client.press_and_release('right') - - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00002.png") - cmd.client.press_and_release('both') - - v, r, s = result - - assert v == 0x1c # 28 - assert r.hex() == "916099cf0d9c21911c85f0770a47a9696a8189e78c259cf099749748c507baae" - assert s.hex() == "0d72234bc0ac2e94c5f7a5f4f9cd8610a52be4ea55515a85b9703f1bb158415c" - -def test_personal_sign_reject(cmd): - result: list = [] - - bip32_path="44'/60'/0'/0/0" - transaction = PersonalTransaction( - msg="This is an reject sign" - ) - - with pytest.raises(ethereum_client.exception.errors.DenyError) as error: - with cmd.personal_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: - sleep(0.5) - - if cmd.model == "nanos": - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00000.png") - cmd.client.press_and_release('right') - - # Message 1/2, 2/2 - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00001.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00002.png") - cmd.client.press_and_release('right') - - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00003.png") - cmd.client.press_and_release('right') - - # Cancel signature - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00004.png") - cmd.client.press_and_release('both') - - if cmd.model == "nanox" or cmd.model == "nanosp": - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00000.png") - cmd.client.press_and_release('right') - - # Message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00001.png") - cmd.client.press_and_release('right') - - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00002.png") - cmd.client.press_and_release('right') - - # Cancel signature - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00003.png") - cmd.client.press_and_release('both') - assert error.args[0] == '0x6985' - -def test_personal_sign_non_ascii(cmd): - result: list = [] - - bip32_path="44'/60'/0'/0/0" - transaction = PersonalTransaction( - msg="0x9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658" - ) - - with cmd.personal_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: - sleep(0.5) - - if cmd.model == "nanos": - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00000.png") - cmd.client.press_and_release('right') - - # Message 1/4, 2/4, 3/4, 4/4 - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00001.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00002.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00003.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00004.png") - cmd.client.press_and_release('right') - - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00005.png") - cmd.client.press_and_release('both') - if cmd.model == "nanox" or cmd.model == "nanosp": - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00000.png") - cmd.client.press_and_release('right') - - # Message 1/2, 2/2 - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00001.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00002.png") - cmd.client.press_and_release('right') - - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00003.png") - cmd.client.press_and_release('both') - - v, r, s = result - - assert v == 0x1c # 28 - assert r.hex() == "64bdbdb6959425445d00ff2536a7018d2dce904e1f7475938fe4221c3c72500c" - assert s.hex() == "7c9208e99b6b9266a73aae17b73472d06499746edec34fd47a9dab42f06f2e42" - -def test_personal_sign_opensea(cmd): - result: list = [] - - bip32_path="44'/60'/0'/0/0" - transaction = PersonalTransaction( - msg="Welcome to OpenSea!\n\nClick to sign in and accept the OpenSea Terms of Service: https://opensea.io/tos\n\nThis request will not trigger a blockchain transaction or cost any gas fees.\n\nYour authentication status will reset after 24 hours.\n\nWallet address:\n0x9858effd232b4033e47d90003d41ec34ecaeda94\n\nNonce:\n2b02c8a0-f74f-4554-9821-a28054dc9121" - ) - - with cmd.personal_sign_tx(bip32_path, transaction, result) as ex: - sleep(0.5) - - if cmd.model == "nanos": - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00000.png") - cmd.client.press_and_release('right') - - # Message 1/5, 2/5, 3/5, 4/5, 5/5 - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00001.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00002.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00003.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00004.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00005.png") - cmd.client.press_and_release('right') - - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00006.png") - cmd.client.press_and_release('both') - - if cmd.model == "nanox" or cmd.model == "nanosp": - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00000.png") - cmd.client.press_and_release('right') - - # Message 1/5, 2/5, 3/5, 4/5, 5/5 - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00001.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00002.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00003.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00004.png") - cmd.client.press_and_release('right') - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00005.png") - cmd.client.press_and_release('right') - - # Sign message - compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00006.png") - cmd.client.press_and_release('both') - - v, r, s = result - - assert v == 0x1c # 28 - assert r.hex() == "61a68c986f087730d2f6ecf89d6d1e48ab963ac461102bb02664bc05c3db75bb" - assert s.hex() == "5714729ef441e097673a7b29a681e97f6963d875eeed2081f26b0b6686cd2bd2" diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00000.png deleted file mode 100644 index ab16f62..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00000.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00001.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00001.png deleted file mode 100644 index ad00cb8..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00001.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00002.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00002.png deleted file mode 100644 index b435297..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00002.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00003.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00003.png deleted file mode 100644 index fcd68b2..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00003.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00004.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00004.png deleted file mode 100644 index 251c562..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00004.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00000.png deleted file mode 100644 index ab16f62..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00000.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00001.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00001.png deleted file mode 100644 index bdbb3a0..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00001.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00002.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00002.png deleted file mode 100644 index 0676953..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00002.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00003.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00003.png deleted file mode 100644 index 582648d..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00003.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00004.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00004.png deleted file mode 100644 index 53e1317..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00004.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00005.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00005.png deleted file mode 100644 index 228f924..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00005.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00006.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00006.png deleted file mode 100644 index f5c2d67..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00006.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png deleted file mode 100644 index ab16f62..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00004.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00004.png deleted file mode 100644 index d55782f..0000000 Binary files a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00004.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00001.png deleted file mode 100644 index 58f0606..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00001.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00002.png deleted file mode 100644 index c9da92b..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00002.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00000.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00000.png deleted file mode 100644 index 1b27154..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00000.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00001.png deleted file mode 100644 index 93eda35..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00001.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00002.png deleted file mode 100644 index 873634e..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00002.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00003.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00003.png deleted file mode 100644 index c9da92b..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00003.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00000.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00000.png deleted file mode 100644 index 1b27154..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00000.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00001.png deleted file mode 100644 index 802fad5..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00001.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00002.png deleted file mode 100644 index a3ba739..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00002.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00003.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00003.png deleted file mode 100644 index 4601bca..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00003.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00004.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00004.png deleted file mode 100644 index eab9f1d..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00004.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00005.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00005.png deleted file mode 100644 index 0b4bdbd..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00005.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00006.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00006.png deleted file mode 100644 index c9da92b..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00006.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00000.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00000.png deleted file mode 100644 index 1b27154..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00000.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png deleted file mode 100644 index 717f3a5..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png and /dev/null differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00002.png deleted file mode 100644 index c9da92b..0000000 Binary files a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00002.png and /dev/null differ