diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00000.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00000.png index b90315c..041a6a8 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00000.png and b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00000.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00001.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00001.png index 3d90dfd..b90315c 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00001.png and b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00001.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00002.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00002.png index f5c2d67..3d90dfd 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00002.png and b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00002.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00003.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00003.png index ce795f3..f5c2d67 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00003.png and b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00003.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00004.png b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00004.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_metamask/00004.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 index dc3315f..041a6a8 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00000.png 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 index 5b3e16d..dc3315f 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00001.png 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 index 93165d0..5b3e16d 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00002.png 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 index c923961..93165d0 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00003.png and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00003.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00004.png b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00004.png index f5c2d67..c923961 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00004.png and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00004.png differ 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 index ce795f3..f5c2d67 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00005.png and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00005.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00006.png b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00006.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/ragger/snapshots/nanos/test_personal_sign_non_ascii/00006.png differ diff --git a/tests/ragger/snapshots/nanos/test_personal_sign_reject/00000.png b/tests/ragger/snapshots/nanos/test_personal_sign_reject/00000.png index ab16f62..041a6a8 100644 Binary files a/tests/ragger/snapshots/nanos/test_personal_sign_reject/00000.png and b/tests/ragger/snapshots/nanos/test_personal_sign_reject/00000.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00000.png b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00000.png index b0936ad..a2e0c30 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00000.png 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 index e7ffedd..b0936ad 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00001.png 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 index 6578872..e7ffedd 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00002.png and b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00002.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00003.png b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00003.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_metamask/00003.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 index c965f50..a2e0c30 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00000.png 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 index 234ab06..c965f50 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00001.png 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 index e7ffedd..234ab06 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00002.png 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 index 6578872..e7ffedd 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00003.png and b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00003.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00004.png b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00004.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_non_ascii/00004.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 index e1159c5..a2e0c30 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00000.png 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 index 3f76142..e1159c5 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00001.png 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 index 685ff39..3f76142 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00002.png 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 index 668a2a6..685ff39 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00003.png 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 index 1f135ae..668a2a6 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00004.png 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 index a3799d2..1f135ae 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00005.png 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 index f29ed00..a3799d2 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00006.png 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 index 8af3d9c..f29ed00 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00007.png 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 index e7ffedd..8af3d9c 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00008.png 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 index 6578872..e7ffedd 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00009.png and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00009.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00010.png b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00010.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_personal_sign_opensea/00010.png differ diff --git a/tests/ragger/snapshots/nanox/test_personal_sign_reject/00000.png b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00000.png index 1b27154..a2e0c30 100644 Binary files a/tests/ragger/snapshots/nanox/test_personal_sign_reject/00000.png and b/tests/ragger/snapshots/nanox/test_personal_sign_reject/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_metamask/00004.png b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00004.png new file mode 100644 index 0000000..b1ff1b3 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_metamask/00004.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00004.png b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00004.png new file mode 100644 index 0000000..b1ff1b3 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_non_ascii/00004.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_opensea/00005.png b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00005.png new file mode 100644 index 0000000..b1ff1b3 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_opensea/00005.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 index d4cf6af..2f80635 100644 Binary files a/tests/ragger/snapshots/stax/test_personal_sign_reject/00001.png 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 index df803b1..83a0d80 100644 Binary files a/tests/ragger/snapshots/stax/test_personal_sign_reject/00002.png 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 index b1ff1b3..d4cf6af 100644 Binary files a/tests/ragger/snapshots/stax/test_personal_sign_reject/00003.png and b/tests/ragger/snapshots/stax/test_personal_sign_reject/00003.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_reject/00004.png b/tests/ragger/snapshots/stax/test_personal_sign_reject/00004.png new file mode 100644 index 0000000..df803b1 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_reject/00004.png differ diff --git a/tests/ragger/snapshots/stax/test_personal_sign_reject/00005.png b/tests/ragger/snapshots/stax/test_personal_sign_reject/00005.png new file mode 100644 index 0000000..b1ff1b3 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_personal_sign_reject/00005.png differ diff --git a/tests/ragger/test_eip191.py b/tests/ragger/test_eip191.py index 3fc9cbf..832bc85 100644 --- a/tests/ragger/test_eip191.py +++ b/tests/ragger/test_eip191.py @@ -1,140 +1,78 @@ from pathlib import Path import pytest +from ragger.error import ExceptionRAPDU +from ragger.backend import BackendInterface +from ragger.firmware import Firmware +from ragger.navigator.navigation_scenario import NavigateWithScenario + from client.client import EthAppClient, StatusWord import client.response_parser as ResponseParser from client.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 - BIP32_PATH = "m/44'/60'/0'/0/0" -def test_personal_sign_metamask(firmware: Firmware, - backend: BackendInterface, - navigator: Navigator, +def common(backend: BackendInterface, + scenario: NavigateWithScenario, + test_name: str, + screenshot_path: Path, + msg: str): + + 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')): + scenario.review_approve(screenshot_path, test_name, "Sign") + + # 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_metamask(backend: BackendInterface, + scenario_navigator: NavigateWithScenario, test_name: str, default_screenshot_path: Path): 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", - default_screenshot_path, - test_name) - - # verify signature - vrs = ResponseParser.signature(app_client.response().data) - addr = recover_message(msg.encode('utf-8'), vrs) - assert addr == DEVICE_ADDR + common(backend, scenario_navigator, test_name, default_screenshot_path, msg) -def test_personal_sign_non_ascii(firmware: Firmware, - backend: BackendInterface, - navigator: Navigator, +def test_personal_sign_non_ascii(backend: BackendInterface, + scenario_navigator: NavigateWithScenario, test_name: str, default_screenshot_path: Path): 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", - default_screenshot_path, - test_name) - - # verify signature - vrs = ResponseParser.signature(app_client.response().data) - addr = recover_message(msg.encode('utf-8'), vrs) - assert addr == DEVICE_ADDR + common(backend, scenario_navigator, test_name, default_screenshot_path, msg) def test_personal_sign_opensea(firmware: Firmware, backend: BackendInterface, - navigator: Navigator, + scenario_navigator: NavigateWithScenario, test_name: str, default_screenshot_path: Path): - 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", - default_screenshot_path, - test_name) - - # verify signature - vrs = ResponseParser.signature(app_client.response().data) - addr = recover_message(msg.encode('utf-8'), vrs) - assert addr == DEVICE_ADDR + msg = "Welcome to OpenSea!\n\n" + msg += "Click to sign in and accept the OpenSea Terms of Service: https://opensea.io/tos\n\n" + msg += "This request will not trigger a blockchain transaction or cost any gas fees.\n\n" + msg += "Your authentication status will reset after 24 hours.\n\n" + msg += "Wallet address:\n0x9858effd232b4033e47d90003d41ec34ecaeda94\n\nNonce:\n2b02c8a0-f74f-4554-9821-a28054dc9121" + common(backend, scenario_navigator, test_name, default_screenshot_path, msg) def test_personal_sign_reject(firmware: Firmware, backend: BackendInterface, - navigator: Navigator, + scenario_navigator: NavigateWithScenario, test_name: str, default_screenshot_path: Path): @@ -145,21 +83,10 @@ def test_personal_sign_reject(firmware: Firmware, 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", - default_screenshot_path, - test_name) + end_text = "Cancel" 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(default_screenshot_path, - test_name, - instructions) + end_text = "Sign" + scenario_navigator.review_reject(default_screenshot_path, test_name, end_text) except ExceptionRAPDU as e: assert e.status == StatusWord.CONDITION_NOT_SATISFIED