diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00000.png b/tests/ragger/snapshots/nanos/test_legacy_send/00000.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00000.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00000.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00001.png b/tests/ragger/snapshots/nanos/test_legacy_send/00001.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00001.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00001.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00002.png b/tests/ragger/snapshots/nanos/test_legacy_send/00002.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00002.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00002.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00003.png b/tests/ragger/snapshots/nanos/test_legacy_send/00003.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00003.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00003.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00004.png b/tests/ragger/snapshots/nanos/test_legacy_send/00004.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00004.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00004.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00005.png b/tests/ragger/snapshots/nanos/test_legacy_send/00005.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00005.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00005.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00006.png b/tests/ragger/snapshots/nanos/test_legacy_send/00006.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00006.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00006.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00007.png b/tests/ragger/snapshots/nanos/test_legacy_send/00007.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00007.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00007.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00008.png b/tests/ragger/snapshots/nanos/test_legacy_send/00008.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00008.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00008.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00011.png b/tests/ragger/snapshots/nanos/test_legacy_send/00009.png similarity index 100% rename from tests/zemu/snapshots/nanos_transfer_ethereum/00011.png rename to tests/ragger/snapshots/nanos/test_legacy_send/00009.png diff --git a/tests/ragger/snapshots/nanosp/test_legacy_send b/tests/ragger/snapshots/nanosp/test_legacy_send new file mode 120000 index 0000000..bcf0aae --- /dev/null +++ b/tests/ragger/snapshots/nanosp/test_legacy_send @@ -0,0 +1 @@ +../nanox/test_legacy_send \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00000.png b/tests/ragger/snapshots/nanox/test_legacy_send/00000.png similarity index 100% rename from tests/zemu/snapshots/nanox_transfer_ethereum/00000.png rename to tests/ragger/snapshots/nanox/test_legacy_send/00000.png diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00001.png b/tests/ragger/snapshots/nanox/test_legacy_send/00001.png similarity index 100% rename from tests/zemu/snapshots/nanox_transfer_ethereum/00001.png rename to tests/ragger/snapshots/nanox/test_legacy_send/00001.png diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00002.png b/tests/ragger/snapshots/nanox/test_legacy_send/00002.png similarity index 100% rename from tests/zemu/snapshots/nanox_transfer_ethereum/00002.png rename to tests/ragger/snapshots/nanox/test_legacy_send/00002.png diff --git a/tests/ragger/snapshots/nanox/test_legacy_send/00003.png b/tests/ragger/snapshots/nanox/test_legacy_send/00003.png new file mode 100644 index 0000000..1bcb787 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_legacy_send/00003.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00004.png b/tests/ragger/snapshots/nanox/test_legacy_send/00004.png similarity index 100% rename from tests/zemu/snapshots/nanox_transfer_ethereum/00004.png rename to tests/ragger/snapshots/nanox/test_legacy_send/00004.png diff --git a/tests/ragger/snapshots/nanox/test_legacy_send/00005.png b/tests/ragger/snapshots/nanox/test_legacy_send/00005.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_legacy_send/00005.png differ diff --git a/tests/ragger/snapshots/stax/test_legacy_send/00000.png b/tests/ragger/snapshots/stax/test_legacy_send/00000.png new file mode 100644 index 0000000..f992e71 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_legacy_send/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_legacy_send/00001.png b/tests/ragger/snapshots/stax/test_legacy_send/00001.png new file mode 100644 index 0000000..513845d Binary files /dev/null and b/tests/ragger/snapshots/stax/test_legacy_send/00001.png differ diff --git a/tests/ragger/snapshots/stax/test_legacy_send/00002.png b/tests/ragger/snapshots/stax/test_legacy_send/00002.png new file mode 100644 index 0000000..bc1ca93 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_legacy_send/00002.png differ diff --git a/tests/ragger/snapshots/stax/test_legacy_send/00003.png b/tests/ragger/snapshots/stax/test_legacy_send/00003.png new file mode 100644 index 0000000..a21279c Binary files /dev/null and b/tests/ragger/snapshots/stax/test_legacy_send/00003.png differ diff --git a/tests/ragger/test_sign.py b/tests/ragger/test_sign.py index 5d69082..658c41c 100644 --- a/tests/ragger/test_sign.py +++ b/tests/ragger/test_sign.py @@ -16,9 +16,12 @@ from constants import ROOT_SNAPSHOT_PATH CHAIN_ID = 1 ADDR = bytes.fromhex("0011223344556677889900112233445566778899") ADDR2 = bytes.fromhex("5a321744667052affa8386ed49e00ef223cbffc3") +ADDR3 = bytes.fromhex("dac17f958d2ee523a2206206994597c13d831ec7") BIP32_PATH = "m/44'/60'/0'/0/0" +BIP32_PATH2 = "m/44'/60'/1'/0/0" NONCE = 21 NONCE2 = 68 +GAS_PRICE = 13 GAS_LIMIT = 21000 AMOUNT = 1.22 @@ -93,10 +96,26 @@ def common_reject(firmware: Firmware, assert False # An exception should have been raised +def common_fail(backend: BackendInterface, + tx_params: dict, + expected: StatusWord, + path: str = BIP32_PATH): + app_client = EthAppClient(backend) + + try: + with app_client.sign(path, tx_params): + pass + + except ExceptionRAPDU as e: + assert e.status == expected + else: + assert False # An exception should have been raised + + def test_legacy(firmware: Firmware, backend: BackendInterface, navigator: Navigator): tx_params: dict = { "nonce": NONCE, - "gasPrice": Web3.to_wei(13, "gwei"), + "gasPrice": Web3.to_wei(GAS_PRICE, "gwei"), "gas": GAS_LIMIT, "to": ADDR, "value": Web3.to_wei(AMOUNT, "ether"), @@ -105,6 +124,36 @@ def test_legacy(firmware: Firmware, backend: BackendInterface, navigator: Naviga common(firmware, backend, navigator, tx_params) +# Legacy Zemu Send: Transfer Ether on Ethereum app +def test_legacy_send(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + test_name: str): + tx_params: dict = { + "nonce": NONCE2, + "gasPrice": Web3.to_wei(GAS_PRICE, "gwei"), + "gas": GAS_LIMIT, + "to": ADDR2, + "value": 31415926913374232, + "chainId": CHAIN_ID + } + common(firmware, backend, navigator, tx_params, test_name, BIP32_PATH2) + + +# Legacy Zemu Send: Transfer amount >= 2^87 Eth on Ethereum app should fail +def test_legacy_send_error(backend: BackendInterface): + tx_params: dict = { + "nonce": 38, + "gasPrice": 56775612312210000000001234554332, + "gas": GAS_LIMIT, + "to": ADDR3, + "value": 12345678912345678912345678000000000000000000, + "chainId": CHAIN_ID + } + common_fail(backend, tx_params, StatusWord.EXCEPTION_OVERFLOW, path=BIP32_PATH2) + + + def test_1559(firmware: Firmware, backend: BackendInterface, navigator: Navigator): tx_params: dict = { "nonce": NONCE, @@ -124,7 +173,7 @@ def test_sign_simple(firmware: Firmware, test_name: str): tx_params: dict = { "nonce": NONCE2, - "gasPrice": Web3.to_wei(13, 'gwei'), + "gasPrice": Web3.to_wei(GAS_PRICE, 'gwei'), "gas": GAS_LIMIT, "to": ADDR2, "value": 0x6f9c9e7bf61818, @@ -180,7 +229,7 @@ def test_sign_nonce_display(firmware: Firmware, tx_params: dict = { "nonce": NONCE2, - "gasPrice": Web3.to_wei(13, 'gwei'), + "gasPrice": Web3.to_wei(GAS_PRICE, 'gwei'), "gas": GAS_LIMIT, "to": ADDR2, "value": 0x6f9c9e7bf61818, @@ -222,7 +271,7 @@ def test_sign_blind_simple(firmware: Firmware, data = "ok" tx_params: dict = { "nonce": NONCE2, - "gasPrice": Web3.to_wei(13, 'gwei'), + "gasPrice": Web3.to_wei(GAS_PRICE, 'gwei'), "gas": GAS_LIMIT, "to": ADDR2, "value": 0x6f9c9e7bf61818, @@ -267,7 +316,7 @@ def test_sign_blind_and_nonce_display(firmware: Firmware, data = "That's a little message :)" tx_params: dict = { "nonce": 1844674, - "gasPrice": Web3.to_wei(13, 'gwei'), + "gasPrice": Web3.to_wei(GAS_PRICE, 'gwei'), "gas": GAS_LIMIT, "to": ADDR2, "value": 0x6f9c9e7bf61818, @@ -283,7 +332,7 @@ def test_sign_reject(firmware: Firmware, test_name: str): tx_params: dict = { "nonce": NONCE2, - "gasPrice": Web3.to_wei(13, 'gwei'), + "gasPrice": Web3.to_wei(GAS_PRICE, 'gwei'), "gas": GAS_LIMIT, "to": ADDR2, "value": 0x6f9c9e7bf61818, @@ -305,7 +354,7 @@ def test_sign_error_transaction_type(backend: BackendInterface): app_client = EthAppClient(backend) try: - with app_client.sign("m/44'/60'/1'/0/0", tx_params): + with app_client.sign(BIP32_PATH2, tx_params): pass except TypeError: @@ -318,7 +367,7 @@ def test_sign_blind_error_disabled(backend: BackendInterface): data = "ok" tx_params: dict = { "nonce": NONCE2, - "gasPrice": Web3.to_wei(13, 'gwei'), + "gasPrice": Web3.to_wei(GAS_PRICE, 'gwei'), "gas": GAS_LIMIT, "to": ADDR2, "value": 0x6f9c9e7bf61818, @@ -326,12 +375,4 @@ def test_sign_blind_error_disabled(backend: BackendInterface): "data": data.encode('utf-8').hex() } - app_client = EthAppClient(backend) - try: - with app_client.sign("m/44'/60'/1'/0/0", tx_params): - pass - - except ExceptionRAPDU as e: - assert e.status == StatusWord.INVALID_DATA - else: - assert False # An exception should have been raised + common_fail(backend, tx_params, StatusWord.INVALID_DATA, BIP32_PATH2) diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00009.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00009.png deleted file mode 100644 index 9c7e704..0000000 Binary files a/tests/zemu/snapshots/nanos_transfer_ethereum/00009.png and /dev/null differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00010.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00010.png deleted file mode 120000 index de12d01..0000000 --- a/tests/zemu/snapshots/nanos_transfer_ethereum/00010.png +++ /dev/null @@ -1 +0,0 @@ -00008.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00003.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00003.png deleted file mode 100644 index 70c1b9a..0000000 Binary files a/tests/zemu/snapshots/nanox_transfer_ethereum/00003.png and /dev/null differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00005.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00005.png deleted file mode 100644 index c922246..0000000 Binary files a/tests/zemu/snapshots/nanox_transfer_ethereum/00005.png and /dev/null differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00006.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00006.png deleted file mode 120000 index 917964c..0000000 --- a/tests/zemu/snapshots/nanox_transfer_ethereum/00006.png +++ /dev/null @@ -1 +0,0 @@ -00004.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00007.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00007.png deleted file mode 100644 index a58590b..0000000 Binary files a/tests/zemu/snapshots/nanox_transfer_ethereum/00007.png and /dev/null differ diff --git a/tests/zemu/src/send.test.js b/tests/zemu/src/send.test.js deleted file mode 100644 index 1634974..0000000 --- a/tests/zemu/src/send.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import "core-js/stable"; -import "regenerator-runtime/runtime"; -import { waitForAppScreen, zemu, nano_models } from './test.fixture'; -import { TransportStatusError } from "@ledgerhq/errors"; - -nano_models.forEach(function(model) { - test('[Nano ' + model.letter + '] Transfer Ether on Ethereum app', zemu(model, async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'EB44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF6181880018080', - ); - - await waitForAppScreen(sim); - let clicks; - if (model.letter === 'S') clicks = 9; - else clicks = 5; - await sim.navigateAndCompareSnapshots('.', model.name + '_transfer_ethereum', [clicks, -1, 0]); - - await expect(tx).resolves.toEqual({ - "r": "6f389d15320f0501383526ed03de917c14212716f09a262dbc98431086a5db49", - "s": "0dc994b7b97230bb35fdf6fec2f4d8ff4cfb8bfeb2a652c364c738ff033c05dd", - "v": "26", - }); - })); -}); - -nano_models.forEach(function(model) { - test('[Nano ' + model.letter + '] Transfer amount >= 2^87 Eth on Ethereum app should fail', zemu(model, async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f83f268e02cc9be5c53ea44bd43c289dcddc82520894dac17f958d2ee523a2206206994597c13d831ec7928db8b0861b8f7fe5df83cd553a829878000080018080', - ); - - await expect(tx).rejects.toEqual(new TransportStatusError(0x6807)); - })); -});