diff --git a/tests/ragger/app/client.py b/tests/ragger/app/client.py index dad04f6a..9732c81a 100644 --- a/tests/ragger/app/client.py +++ b/tests/ragger/app/client.py @@ -19,6 +19,16 @@ ROOT_SCREENSHOT_PATH = Path(__file__).parent.parent WEI_IN_ETH = 1e+18 +class StatusWord(IntEnum): + OK = 0x9000 + ERROR_NO_INFO = 0x6a00 + INVALID_DATA = 0x6a80 + INSUFFICIENT_MEMORY = 0x6a84 + INVALID_INS = 0x6d00 + INVALID_P1_P2 = 0x6b00 + CONDITION_NOT_SATISFIED = 0x6985 + REF_DATA_NOT_FOUND = 0x6a88 + class DOMAIN_NAME_TAG(IntEnum): STRUCTURE_TYPE = 0x01 STRUCTURE_VERSION = 0x02 diff --git a/tests/ragger/snapshots/nanosp b/tests/ragger/snapshots/nanosp new file mode 120000 index 00000000..da13a6af --- /dev/null +++ b/tests/ragger/snapshots/nanosp @@ -0,0 +1 @@ +nanox/ \ No newline at end of file diff --git a/tests/ragger/snapshots/nanox/domain_name_False/00000.png b/tests/ragger/snapshots/nanox/domain_name_False/00000.png new file mode 100644 index 00000000..487ea10f Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_False/00000.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_False/00001.png b/tests/ragger/snapshots/nanox/domain_name_False/00001.png new file mode 100644 index 00000000..f9840e3a Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_False/00001.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_False/00002.png b/tests/ragger/snapshots/nanox/domain_name_False/00002.png new file mode 100644 index 00000000..6af0ec54 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_False/00002.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_False/00003.png b/tests/ragger/snapshots/nanox/domain_name_False/00003.png new file mode 100644 index 00000000..70c1b9a6 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_False/00003.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_False/00004.png b/tests/ragger/snapshots/nanox/domain_name_False/00004.png new file mode 100644 index 00000000..570ce28d Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_False/00004.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_False/00005.png b/tests/ragger/snapshots/nanox/domain_name_False/00005.png new file mode 100644 index 00000000..a58590b9 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_False/00005.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_True/00000.png b/tests/ragger/snapshots/nanox/domain_name_True/00000.png new file mode 100644 index 00000000..487ea10f Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_True/00000.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_True/00001.png b/tests/ragger/snapshots/nanox/domain_name_True/00001.png new file mode 100644 index 00000000..f9840e3a Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_True/00001.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_True/00002.png b/tests/ragger/snapshots/nanox/domain_name_True/00002.png new file mode 100644 index 00000000..6af0ec54 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_True/00002.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_True/00003.png b/tests/ragger/snapshots/nanox/domain_name_True/00003.png new file mode 100644 index 00000000..6a5a9d64 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_True/00003.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_True/00004.png b/tests/ragger/snapshots/nanox/domain_name_True/00004.png new file mode 100644 index 00000000..70c1b9a6 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_True/00004.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_True/00005.png b/tests/ragger/snapshots/nanox/domain_name_True/00005.png new file mode 100644 index 00000000..570ce28d Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_True/00005.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_True/00006.png b/tests/ragger/snapshots/nanox/domain_name_True/00006.png new file mode 100644 index 00000000..a58590b9 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_True/00006.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00000.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00000.png new file mode 100644 index 00000000..487ea10f Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00000.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00001.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00001.png new file mode 100644 index 00000000..f9840e3a Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00001.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00002.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00002.png new file mode 100644 index 00000000..e804dafe Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00002.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00003.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00003.png new file mode 100644 index 00000000..186fcb32 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00003.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00004.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00004.png new file mode 100644 index 00000000..f479f1d2 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00004.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00005.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00005.png new file mode 100644 index 00000000..3c3c5d61 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00005.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00006.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00006.png new file mode 100644 index 00000000..04b23131 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00006.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00007.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00007.png new file mode 100644 index 00000000..70c1b9a6 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00007.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00008.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00008.png new file mode 100644 index 00000000..570ce28d Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00008.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_long_name/00009.png b/tests/ragger/snapshots/nanox/domain_name_long_name/00009.png new file mode 100644 index 00000000..a58590b9 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_long_name/00009.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00000.png b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00000.png new file mode 100644 index 00000000..487ea10f Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00000.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00001.png b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00001.png new file mode 100644 index 00000000..f9840e3a Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00001.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00002.png b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00002.png new file mode 100644 index 00000000..6a5a9d64 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00002.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00003.png b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00003.png new file mode 100644 index 00000000..93112b3a Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00003.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00004.png b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00004.png new file mode 100644 index 00000000..70c1b9a6 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00004.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00005.png b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00005.png new file mode 100644 index 00000000..570ce28d Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00005.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00006.png b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00006.png new file mode 100644 index 00000000..a58590b9 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00006.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00000.png b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00000.png new file mode 100644 index 00000000..487ea10f Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00000.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00001.png b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00001.png new file mode 100644 index 00000000..f9840e3a Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00001.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00002.png b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00002.png new file mode 100644 index 00000000..639e4214 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00002.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00003.png b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00003.png new file mode 100644 index 00000000..70c1b9a6 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00003.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00004.png b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00004.png new file mode 100644 index 00000000..570ce28d Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00004.png differ diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00005.png b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00005.png new file mode 100644 index 00000000..a58590b9 Binary files /dev/null and b/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00005.png differ diff --git a/tests/ragger/test_domain_name.py b/tests/ragger/test_domain_name.py new file mode 100644 index 00000000..50a298e3 --- /dev/null +++ b/tests/ragger/test_domain_name.py @@ -0,0 +1,103 @@ +import pytest +from ragger.error import ExceptionRAPDU +from app.client import EthereumClient, StatusWord +from app.setting import SettingType +import struct + +# Values used across all tests +CHAIN_ID = 1 +NAME = "ledger.eth" +LONG_NAME = "ledger-LONG" + "1234567890"*24 + ".eth" +ADDR = bytes.fromhex("0011223344556677889900112233445566778899") +KEY_ID = 1 +ALGO_ID = 1 +BIP32_PATH = "m/44'/60'/0'/0/0" +NONCE = 21 +GAS_PRICE = 13000000000 +GAS_LIMIT = 21000 +AMOUNT = 1.22 + +@pytest.fixture(params=[False, True]) +def verbose(request) -> bool: + return request.param + +def common(app_client: EthereumClient) -> int: + if app_client._client.firmware.device == "nanos": + pytest.skip("Not supported on LNS") + return app_client.get_challenge() + + +def test_send_fund(app_client: EthereumClient, verbose: bool): + challenge = common(app_client) + + if verbose: + app_client.settings_set({ + SettingType.VERBOSE_ENS: True + }) + + app_client.provide_domain_name(challenge, NAME, ADDR) + + app_client.send_fund(BIP32_PATH, + NONCE, + GAS_PRICE, + GAS_LIMIT, + ADDR, + AMOUNT, + CHAIN_ID, + "domain_name_" + str(verbose)) + +def test_send_fund_wrong_challenge(app_client: EthereumClient): + caught = False + challenge = common(app_client) + + try: + app_client.provide_domain_name(~challenge & 0xffffffff, NAME, ADDR) + except ExceptionRAPDU as e: + assert e.status == StatusWord.INVALID_DATA + else: + assert False # An exception should have been raised + +def test_send_fund_wrong_addr(app_client: EthereumClient): + challenge = common(app_client) + + app_client.provide_domain_name(challenge, NAME, ADDR) + + addr = bytearray(ADDR) + addr.reverse() + + app_client.send_fund(BIP32_PATH, + NONCE, + GAS_PRICE, + GAS_LIMIT, + addr, + AMOUNT, + CHAIN_ID, + "domain_name_wrong_addr") + +def test_send_fund_non_mainnet(app_client: EthereumClient): + challenge = common(app_client) + + app_client.provide_domain_name(challenge, NAME, ADDR) + + app_client.send_fund(BIP32_PATH, + NONCE, + GAS_PRICE, + GAS_LIMIT, + ADDR, + AMOUNT, + 5, + "domain_name_non_mainnet") + +def test_send_fund_very_long_domain_name(app_client: EthereumClient): + challenge = common(app_client) + + app_client.provide_domain_name(challenge, LONG_NAME, ADDR) + + app_client.send_fund(BIP32_PATH, + NONCE, + GAS_PRICE, + GAS_LIMIT, + ADDR, + AMOUNT, + CHAIN_ID, + "domain_name_long_name")