diff --git a/common/tests/fixtures/cardano/get_address_byron.json b/common/tests/fixtures/cardano/get_address_byron.json new file mode 100644 index 0000000000..a87efb873e --- /dev/null +++ b/common/tests/fixtures/cardano/get_address_byron.json @@ -0,0 +1,74 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "parameters": { + "path": "m/44'/1815'/0'/0/0", + "address_type":"byron", + "protocol_magic": 764824073, + "network_id": 1 + }, + "result": { + "expected_address": "Ae2tdPwUPEZ5YUb8sM3eS8JqKgrRLzhiu71crfuH2MFtqaYr5ACNRdsswsZ" + } + }, + { + "parameters":{ + "path": "m/44'/1815'/0'/0/1", + "address_type": "byron", + "protocol_magic": 764824073, + "network_id": 1 + }, + "result": { + "expected_address": "Ae2tdPwUPEZJb8r1VZxweSwHDTYtqeYqF39rZmVbrNK62JHd4Wd7Ytsc8eG" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/2", + "address_type": "byron", + "protocol_magic": 764824073, + "network_id": 1 + }, + "result": { + "expected_address": "Ae2tdPwUPEZFm6Y7aPZGKMyMAK16yA5pWWKU9g73ncUQNZsAjzjhszenCsq" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/0", + "address_type": "byron", + "protocol_magic": 42, + "network_id": 1 + }, + "result": { + "expected_address": "2657WMsDfac5F3zbgs9BwNWx3dhGAJERkAL93gPa68NJ2i8mbCHm2pLUHWSj8Mfea" + } + }, + { + "parameters":{ + "path": "m/44'/1815'/0'/0/1", + "address_type": "byron", + "protocol_magic": 42, + "network_id": 1 + }, + "result": { + "expected_address": "2657WMsDfac6ezKWszxLFqJjSUgpg9NgxKc1koqi24sVpRaPhiwMaExk4useKn5HA" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/2", + "address_type": "byron", + "protocol_magic": 42, + "network_id": 1 + }, + "result": { + "expected_address": "2657WMsDfac7hr1ioJGr6g7r6JRx4r1My8Rj91tcPTeVjJDpfBYKURrPG2zVLx2Sq" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/get_address_byron.slip39.json b/common/tests/fixtures/cardano/get_address_byron.slip39.json new file mode 100644 index 0000000000..0fa1bdcc4c --- /dev/null +++ b/common/tests/fixtures/cardano/get_address_byron.slip39.json @@ -0,0 +1,78 @@ +{ + "setup": { + "mnemonic": [ + "extra extend academic bishop cricket bundle tofu goat apart victim enlarge program behavior permit course armed jerky faint language modern", + "extra extend academic acne away best indicate impact square oasis prospect painting voting guest either argue username racism enemy eclipse", + "extra extend academic arcade born dive legal hush gross briefing talent drug much home firefly toxic analysis idea umbrella slice" + ], + "passphrase": "TREZOR" + }, + "tests": [ + { + "parameters": { + "path": "m/44'/1815'/0'/0/0", + "address_type":"byron", + "protocol_magic": 764824073, + "network_id":1 + }, + "result":{ + "expected_address": "Ae2tdPwUPEYxF9NAMNdd3v2LZoMeWp7gCZiDb6bZzFQeeVASzoP7HC4V9s6" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/1", + "address_type": "byron", + "protocol_magic": 764824073, + "network_id": 1 + }, + "result": { + "expected_address": "Ae2tdPwUPEZ1TjYcvfkWAbiHtGVxv4byEHHZoSyQXjPJ362DifCe1ykgqgy" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/2", + "address_type": "byron", + "protocol_magic": 764824073, + "network_id": 1 + }, + "result": { + "expected_address": "Ae2tdPwUPEZGXmSbda1kBNfyhRQGRcQxJFdk7mhWZXAGnapyejv2b2U3aRb" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/0", + "address_type": "byron", + "protocol_magic": 42, + "network_id": 1 + }, + "result": { + "expected_address": "2657WMsDfac7SH1rhA2PWBggGAPrKyLt1r9SL9gajPxxcH15ZxuCUb4aK9mQ9w7dU" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/1", + "address_type": "byron", + "protocol_magic": 42, + "network_id": 1 + }, + "result": { + "expected_address": "2657WMsDfac6Cmfg4Varph2qyLKGi2K9E8jrtvjHVzfSjmbTMGy5sY3HpxCKsmtDA" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/2", + "address_type": "byron", + "protocol_magic": 42, + "network_id": 1 + }, + "result": { + "expected_address": "2657WMsDfac5ANb5Mw6Rbgdz6nvs2Tu675vGbbVSzXQbAkQuMWtqBvEeKTrHNtXY7" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/get_base_address.json b/common/tests/fixtures/cardano/get_base_address.json new file mode 100644 index 0000000000..ea20931117 --- /dev/null +++ b/common/tests/fixtures/cardano/get_base_address.json @@ -0,0 +1,32 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "parameters": { + "path": "m/1852'/1815'/4'/0/0", + "address_type": "base", + "staking_path": "m/1852'/1815'/4'/2/0", + "network_id": 1, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wnrqua2vw243tmjfjt0h5wsru6appuz8c0pfd75ur7myyeqsx9990" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/4'/0/0", + "address_type": "base", + "staking_path": "m/1852'/1815'/4'/2/0", + "network_id": 0, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wnrqua2vw243tmjfjt0h5wsru6appuz8c0pfd75ur7myyeqnsc9fs" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/get_base_address_with_staking_key_hash.json b/common/tests/fixtures/cardano/get_base_address_with_staking_key_hash.json new file mode 100644 index 0000000000..305a1da532 --- /dev/null +++ b/common/tests/fixtures/cardano/get_base_address_with_staking_key_hash.json @@ -0,0 +1,68 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "parameters": { + "path": "m/1852'/1815'/4'/0/0", + "address_type":"base", + "staking_key_hash": "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff", + "network_id": 1, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsydc62k" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/4'/0/0", + "address_type": "base", + "staking_key_hash": "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff", + "network_id": 0, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hls8m96xf" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/4'/0/0", + "address_type": "base", + "staking_key_hash": "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277", + "network_id": 1, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfms06skxl" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/0'/0/0", + "address_type": "base", + "staking_key_hash": "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277", + "network_id": 0, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr_test1qzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92sj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfmsu8d9w5" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/4'/0/0", + "address_type": "base", + "staking_key_hash": "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277", + "network_id": 0, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfmsvvdk2q" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/get_enterprise_address.json b/common/tests/fixtures/cardano/get_enterprise_address.json new file mode 100644 index 0000000000..5d8e18ce18 --- /dev/null +++ b/common/tests/fixtures/cardano/get_enterprise_address.json @@ -0,0 +1,32 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "parameters": { + "path": "m/1852'/1815'/0'/0/0", + "address_type": "enterprise", + "staking_key_hash": "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff", + "network_id": 1, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr1vxq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92su77c6m" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/0'/0/0", + "address_type": "enterprise", + "staking_key_hash": "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff", + "network_id": 0, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr_test1vzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92s8k2y47" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/get_pointer_address.json b/common/tests/fixtures/cardano/get_pointer_address.json new file mode 100644 index 0000000000..a2406808b5 --- /dev/null +++ b/common/tests/fixtures/cardano/get_pointer_address.json @@ -0,0 +1,36 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "parameters": { + "path": "m/1852'/1815'/0'/0/0", + "address_type": "pointer", + "block_index": 1, + "tx_index": 2, + "certificate_index": 3, + "network_id": 1, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr1gxq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92spqgpsl97q83" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/0'/0/0", + "address_type": "pointer", + "block_index": 24157, + "tx_index": 177, + "certificate_index": 42, + "network_id": 0, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "addr_test1gzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z925ph3wczvf2ag2x9t" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/get_public_key.json b/common/tests/fixtures/cardano/get_public_key.json new file mode 100644 index 0000000000..d045abb4d6 --- /dev/null +++ b/common/tests/fixtures/cardano/get_public_key.json @@ -0,0 +1,62 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "parameters":{ + "path": "m/44'/1815'/0'" + }, + "result":{ + "public_key": "c0fce1839f1a84c4e770293ac2f5e0875141b29017b7f56ab135352d00ad6966", + "chain_code": "07faa161c9f5464315d2855f70fdf1431d5fa39eb838767bf17b69772137452f" + } + }, + { + "parameters": { + "path": "m/44'/1815'/1'" + }, + "result": { + "public_key": "ea5dde31b9f551e08a5b6b2f98b8c42c726f726c9ce0a7072102ead53bd8f21e", + "chain_code": "70f131bb799fd659c997221ad8cae7dcce4e8da701f8101cf15307fd3a3712a1" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/0'" + }, + "result": { + "public_key": "d507c8f866691bd96e131334c355188b1a1d0b2fa0ab11545075aab332d77d9e", + "chain_code": "b19657ad13ee581b56b0f8d744d66ca356b93d42fe176b3de007d53e9c4c4e7a" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/1'" + }, + "result": { + "public_key": "140791584001446365f169c82241c7c214475000180dab39fa0588fc9c3d6d80", + "chain_code": "7f9f812d49816844b52e319857aa75961724ad1a146701679d02d7168622233d" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/2'" + }, + "result": { + "public_key": "ff6ccc3097ca79fc29fe92a9639c47644746780c63acae10a9e6f03bf5c919dd", + "chain_code": "27d985feabf40d83a30aa4645ff008c068187559dd224ba59e26d0d2dc3598ce" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/3'" + }, + "result": { + "public_key": "be81ace1f63f4f0cae74dd274a72d7818f238bc764ab3e0dc0beb1945b756dca", + "chain_code": "29034f036a162ac4f9f9f397b2d1f289754bb6633915f26b199e156f81d05c88" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/get_public_key.slip39.json b/common/tests/fixtures/cardano/get_public_key.slip39.json new file mode 100644 index 0000000000..5398c3cee1 --- /dev/null +++ b/common/tests/fixtures/cardano/get_public_key.slip39.json @@ -0,0 +1,39 @@ +{ + "setup": { + "mnemonic": [ + "extra extend academic bishop cricket bundle tofu goat apart victim enlarge program behavior permit course armed jerky faint language modern", + "extra extend academic acne away best indicate impact square oasis prospect painting voting guest either argue username racism enemy eclipse", + "extra extend academic arcade born dive legal hush gross briefing talent drug much home firefly toxic analysis idea umbrella slice" + ], + "passphrase": "TREZOR" + }, + "tests": [ + { + "parameters": { + "path": "m/44'/1815'/0'/0/0" + }, + "result": { + "public_key": "bc043d84b8b891d49890edb6aced6f2d78395f255c5b6aea8878b913f83e8579", + "chain_code": "dc3f0d2b5cccb822335ef6213fd133f4ca934151ec44a6000aee43b8a101078c" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/1" + }, + "result": { + "public_key": "24c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c", + "chain_code": "6f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b" + } + }, + { + "parameters": { + "path": "m/44'/1815'/0'/0/2" + }, + "result": { + "public_key": "831a63d381a8dab1e6e1ee991a4300fc70687aae5f97f4fcf92ed1b6c2bd99de", + "chain_code": "672d6af4707aba201b7940231e83dd357f92f8851b3dfdc224ef311e1b64cdeb" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/get_reward_address.json b/common/tests/fixtures/cardano/get_reward_address.json new file mode 100644 index 0000000000..1dc0bd17cc --- /dev/null +++ b/common/tests/fixtures/cardano/get_reward_address.json @@ -0,0 +1,30 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "parameters": { + "path": "m/1852'/1815'/0'/2/0", + "address_type": "reward", + "network_id": 1, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "stake1uyfz49rtntfa9h0s98f6s28sg69weemgjhc4e8hm66d5yacalmqha" + } + }, + { + "parameters": { + "path": "m/1852'/1815'/0'/2/0", + "address_type": "reward", + "network_id": 0, + "protocol_magic": 764824073 + }, + "result": { + "expected_address": "stake_test1uqfz49rtntfa9h0s98f6s28sg69weemgjhc4e8hm66d5yac643znq" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/sign_tx.failed.json b/common/tests/fixtures/cardano/sign_tx.failed.json new file mode 100644 index 0000000000..b452aa7c2d --- /dev/null +++ b/common/tests/fixtures/cardano/sign_tx.failed.json @@ -0,0 +1,640 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "description": "Output address is a valid CBOR but invalid Cardano address", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "jsK75PTH2esX8k4Wvxenyz83LJJWToBbVmGrWUer2CHFHanLseh7r3sW5X5q", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid address" + } + }, + { + "description": "Output address is invalid CBOR", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "5dnY6xgRcNUSLGa4gfqef2jGAMHb7koQs9EXErXLNC1LiMPUnhn8joXhvEJpWQtN3F4ysATcBvCn5tABgL3e4hPWapPHmcK5GJMSEaET5JafgAGwSrznzL1Mqa", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid address" + } + }, + { + "description": "Output address has invalid CRC", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZ5YUb8sM3eS8JqKgrRLzhiu71crfuH2MFtqaYr5ACNRZR3Mbm", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid address" + } + }, + { + "description": "Output address is too short", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q89s8py7y68e3x66sscs0wkhlg5ssfrfs65084jry45scvehcr", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid address" + } + }, + { + "description": "Output address is too long", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q89s8py7y68e3x66sscs0wkhlg5ssfrfs65084jrlrqcfqqj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfm5z3vcwsfrvkr5zglq4rxu", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid address" + } + }, + { + "description": "Fee is too high", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 45000000000000001, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Fee is out of range" + } + }, + { + "description": "Output total is too high", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "449999999199999999" + }, + { + "addressType": 8, + "path": "m/44'/1815'/0'/0/1", + "amount": "1000000" + } + ] + }, + "result": { + "error_message": "Total transaction amount is out of range!" + } + }, + { + "description": "Mainnet transaction with testnet output", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "2657WMsDfac7BteXkJq5Jzdog4h47fPbkwUM49isuWbYAr2cFRHa3rURP236h9PBe", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Output address network mismatch!" + } + }, + { + "description": "Testnet transaction with mainnet output", + "parameters": { + "protocol_magic": 42, + "network_id": 0, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Output address network mismatch!" + } + }, + { + "description": "Shelley mainnet transaction with testnet output", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr_test1vr9s8py7y68e3x66sscs0wkhlg5ssfrfs65084jrlrqcfqqtmut0e", + "amount": "1" + } + ] + }, + "result": { + "error_message": "Invalid address" + } + }, + { + "description": "Shelley testnet transaction with mainnet output", + "parameters": { + "protocol_magic": 42, + "network_id": 0, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ] + }, + "result": { + "error_message": "Invalid address" + } + }, + { + "description": "Testnet protocol magic with mainnet network id", + "parameters": { + "protocol_magic": 42, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ] + }, + "result": { + "error_message": "Invalid network id/protocol magic combination!" + } + }, + { + "description": "Mainnet protocol magic with testnet network id", + "parameters": { + "protocol_magic": 764824073, + "network_id": 0, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ] + }, + "result": { + "error_message": "Invalid network id/protocol magic combination!" + } + }, + { + "description": "Unsupported address type", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1590z7zqwhya6mpk5q929ur897g3pp9kkgalpreny8y304r2dcrtx0sf3dluyu4erzr3xtmdnzvcyfzekkuteu2xagx0qt7gvvj", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid address" + } + }, + { + "description": "Certificate has non staking path", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [ + {"type": 0, "path": "m/1852'/1815'/0'/0/0"} + ], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid certificate" + } + }, + { + "description": "Certificate has invalid pool size", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [ + { + "type": 2, + "path": "m/1852'/1815'/0'/2/0", + "pool": "f61c42cbf7c8c53af3f520508212ad3e72" + } + ], + "withdrawals": [], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid certificate" + } + }, + { + "description": "Withdrawal has non staking path", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [{"path": "m/1852'/1815'/0'/0/0", "amount": "1000"}], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid withdrawal" + } + }, + { + "description": "Withdrawal amount is too large", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [{ + "path": "m/1852'/1815'/0'/2/0", + "amount": "449999999199999999" + }], + "metadata": "", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid withdrawal" + } + }, + { + "description": "Metadata too large", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "a200a11864a118c843aa00ff01a119012c590202aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid metadata" + } + }, + { + "description": "Metadata is a list", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "82a200a11864a118c843aa00ff01a119012c590100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0A", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid metadata" + } + }, + { + "description": "Metadata is incomplete", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "a200a11864a118c843aa00ff01", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid metadata" + } + }, + { + "description": "Metadata has leftover data", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "a200a11864a118c843aa00ff01a119012c590100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa000000", + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "error_message": "Invalid metadata" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/sign_tx.json b/common/tests/fixtures/cardano/sign_tx.json new file mode 100644 index 0000000000..6dc95436a1 --- /dev/null +++ b/common/tests/fixtures/cardano/sign_tx.json @@ -0,0 +1,515 @@ +{ + "setup": { + "mnemonic": "all all all all all all all all all all all all", + "passphrase": "" + }, + "tests": [ + { + "description": "Mainnet transaction without change", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "tx_hash": "73e09bdebf98a9e0f17f86a2d11e0f14f4f8dae77cdf26ff1678e821f20c8db6", + "serialized_tx": "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018182582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e802182a030aa1028184582089053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea5840da07ac5246e3f20ebd1276476a4ae34a019dd4b264ffc22eea3c28cb0f1a6bb1c7764adeecf56bcb0bc6196fd1dbe080f3a7ef5b49f56980fe5b2881a4fdfa00582026308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a63541a0f6" + } + }, + { + "description": "Mainnet transaction with change", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + }, + { + "addressType": 8, + "path": "m/44'/1815'/0'/0/1", + "amount": "1000000" + } + ] + }, + "result": { + "tx_hash": "81b14b7e62972127eb33c0b1198de6430540ad3a98eec621a3194f2baac43a43", + "serialized_tx": "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018282582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e882582b82d818582183581cda4da43db3fca93695e71dab839e72271204d28b9d964d306b8800a8a0001a7a6916a51a000f424002182a030aa1028184582089053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea5840d909b16038c4fd772a177038242e6793be39c735430b03ee924ed18026bd28d06920b5846247945f1204276e4b759aa5ac05a4a73b49ce705ab0e5e54a3a170e582026308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a63541a0f6" + } + }, + { + "description": "simple transaction with base address change output", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + }, + { + "addressType": 0, + "path": "m/1852'/1815'/0'/0/0", + "stakingPath": "m/1852'/1815'/0'/2/0", + "amount": "7120787" + } + ] + }, + "result": { + "tx_hash": "16fe72bb198be423677577e6326f1f648ec5fc11263b072006382d8125a6edda", + "serialized_tx": "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018282583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff018258390180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b42771a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c158406a78f07836dcf4a303448d2b16b217265a9226be3984a69a04dba5d04f4dbb2a47b5e1cbb345f474c0b9634a2f37b921ab26e6a65d5dfd015dacb4455fb8430af6" + } + }, + { + "description": "Mainnet transaction with multiple inputs", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + }, + { + "path": "m/44'/1815'/0'/0/5", + "prev_hash": "a34dc95d806a3b206aab5e0c2aaa5ff0704f84868fe65793053f6ae9a7970979", + "prev_index": 0 + }, + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + }, + { + "path": "m/1852'/1815'/0'/0/5", + "prev_hash": "33ad5e2a8f298053da804c30c9f72836bfac0a58a30aef2ff87656418b01f70b", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "tx_hash": "7e16a0b47bdfc37abf4ddd3143f7481af07ffe7abd68f752676f5b0b2890d05b", + "serialized_tx": "83a400848258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00825820a34dc95d806a3b206aab5e0c2aaa5ff0704f84868fe65793053f6ae9a7970979008258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b70082582033ad5e2a8f298053da804c30c9f72836bfac0a58a30aef2ff87656418b01f70b00018182582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e802182a030aa20082825820e246aa6392958f01fc8fafd5ac1cf5f28ef34af05820b49c98919753a76109c05840517ca4c901a9cded7b4ab3b1d576f41b28a05aed9ed96ef86a78556099aaa5e996a38c74783262d807d86d48c131b1cb91cbab4ef4b6b52dc8d49708b0f40d068258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840e661d9d1002bc2f8b310e0b0541f9bb9c3357e8e6e7f772ca72fdfd4dfc27f9ae040197d4ef69c98dc16a105f00c7ff2cebf2d85920307606bff087e550b470d028284582089053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea5840ca7325ac3280708a12a70f794699243fa1c2a3e3981dccd7e5a1200f521e19fad52489c9be81e8a8ccaccd3c42d917ffd1719e6808e11fbcd1ef495f7324b10b582026308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a63541a084582040ed7b4134e85866f55ec896a8a81e9d41c20969af8f88c532e5ad1f9c9425ab5840e11444cf81b94754a15e244259d983cc3099ff04a8212dde814d6e0a9cb7e4423caa440cdee9e2d663b59e5005dbfeee8057765245b96711f1ff20caf8cfb3025820ec19de133d3c5a598212a3b8ad9249453c4ca10e0b9228714700eeaed944590941a0f6" + } + }, + { + "description": "simple transaction with base script address change output", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1z90z7zqwhya6mpk5q929ur897g3pp9kkgalpreny8y304r2dcrtx0sf3dluyu4erzr3xtmdnzvcyfzekkuteu2xagx0qeva0pr", + "amount": "7120787" + }, + { + "addressType": 0, + "path": "m/1852'/1815'/0'/0/0", + "stakingPath": "m/1852'/1815'/0'/2/0", + "amount": "7120787" + } + ] + }, + "result": { + "tx_hash": "5ddbb530b8a89e2b08fc91db03950c876c4a9c1c3fb6e628c4cab638b1c97648", + "serialized_tx": "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7000182825839115e2f080eb93bad86d401545e0ce5f2221096d6477e11e6643922fa8d4dc0d667c1316ff84e572310e265edb31330448b36b7179e28dd419e1a006ca7938258390180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b42771a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840e0bdaa59016f2a521d31179b60364eacdcb53c34ae01c56b339afa62d312f5f89783579691cac777e3d5f2e7810aa8fe554ba545a8d1578c55405af5ae51b30ff6" + } + }, + { + "description": "simple transaction with base address change output with staking key hash", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + }, + { + "addressType": 0, + "path": "m/1852'/1815'/0'/0/0", + "stakingKeyHash": "32c728d3861e164cab28cb8f006448139c8f1740ffb8e7aa9e5232dc", + "amount": "7120787" + } + ] + }, + "result": { + "tx_hash": "d1610bb89bece22ed3158738bc1fbb31c6af0685053e2993361e3380f49afad9", + "serialized_tx": "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018282583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff018258390180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa32c728d3861e164cab28cb8f006448139c8f1740ffb8e7aa9e5232dc1a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840622f22d03bc9651ddc5eb2f5dc709ac4240a64d2b78c70355dd62106543c407d56e8134c4df7884ba67c8a1b5c706fc021df5c4d0ff37385c30572e73c727d00f6" + } + }, + { + "description": "simple transaction with pointer address change output", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + }, + { + "addressType": 4, + "path": "m/1852'/1815'/0'/0/0", + "blockIndex": 1, + "txIndex": 2, + "certificateIndex": 3, + "amount": "7120787" + } + ] + }, + "result": { + "tx_hash": "40535fa8f88515f1da008d3cdf544cf9dbf1675c3cb0adb13b74b9293f1b7096", + "serialized_tx": "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018282583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff018258204180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa0102031a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840dbbf050cc13d0696b1884113613318a275e6f0f8c7cb3e7828c4f2f3c158b2622a5d65ea247f1eed758a0f6242a52060c319d6f37c8460f5d14be24456cd0b08f6" + } + }, + { + "description": "simple transaction with enterprise address change output", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + }, + { + "addressType": 6, + "path": "m/1852'/1815'/0'/0/0", + "amount": "7120787" + } + ] + }, + "result": { + "tx_hash": "d3570557b197604109481a80aeb66cd2cfabc57f802ad593bacc12eb658e5d72", + "serialized_tx": "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018282583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0182581d6180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa1a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840c5996650c438c4493b2c8a94229621bb9b151b8d61d75fb868c305e917031e9a1654f35023f7dbf5d1839ab9d57b153c7f79c2666af51ecf363780397956e00af6" + } + }, + { + "description": "transaction with stake registration certificate", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [ + { + "type": 0, + "path": "m/1852'/1815'/0'/2/0" + } + ], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ] + }, + "result": { + "tx_hash": "1a3a295908afd8b2afc368071272d6964be6ee0af062bb765aea65ca454dc0c9", + "serialized_tx": "83a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a048182008200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277a100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840a938b16bd81aea8d3aaf11e4d460dad1f36d34bf34ad066d0f5ce5d4137654145d998c3482aa823ff1acf021c6e2cd2774fff00361cbb9e72b98632307ee4000f6" + } + }, + { + "description": "transaction with stake registration and stake delegation certificates", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [ + { + "type": 0, + "path": "m/1852'/1815'/0'/2/0" + }, + { + "type": 2, + "path": "m/1852'/1815'/0'/2/0", + "pool": "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973" + } + ], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["YES"], ["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ] + }, + "result": { + "tx_hash": "439764b5f7e08839881536a3191faeaf111e75d9f00f83b102c5c1c6fa9fcaf9", + "serialized_tx": "83a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a048282008200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b427783028200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277581cf61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973a10082825820bc65be1b0b9d7531778a1317c2aa6de936963c3f9ac7d5ee9e9eda25e0c97c5e58400dbdf36f92bc5199526ffb8b83b33a9eeda0ed3e46fb4025a104346801afb9cf45fa1a5482e54c769f4102e67af46205457d7ae05a889fc342acb0cdc23ecd038258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c158405ebe8eff752f07e8448f55304fdf3665ac68162099dcacd81886b73affe67fb6df401f8a5fa60ddb6d5fb65b93235e6a234182a40c001e3cf7634f82afd5fe0af6" + } + }, + { + "description": "transaction with stake deregistration", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [ + {"type": 1, "path": "m/1852'/1815'/0'/2/0"} + ], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ] + }, + "result": { + "tx_hash": "3aca1784d151dc75bdbb80fae71bda3f4b26af3f5fd71bd5e9e9bbcdd2b64ad1", + "serialized_tx": "83a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a048182018200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277a10082825820bc65be1b0b9d7531778a1317c2aa6de936963c3f9ac7d5ee9e9eda25e0c97c5e584084f321d313da67f80f7fab2e4f3996d3dbe3186659e6f98315e372dbe88c55d56f637ccc7534890c3601ddd31ba885dc86ba0074c230869f20099b7dd5eeaf008258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840e563a8012e16affd801564e8410ca7b2c96f76f8ecb878e35c098a823c40be7f59dc12cb44a9b678210d4e8f18ab215133eef7ca9ece94b4683d3db0fd37e105f6" + } + }, + { + "description": "transaction with stake deregistration and withdrawal", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [ + { + "type": 1, + "path": "m/1852'/1815'/0'/2/0" + } + ], + "withdrawals": [ + { + "path": "m/1852'/1815'/0'/2/0", + "amount": "1000" + } + ], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["YES"], ["YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ] + }, + "result": { + "tx_hash": "22c67f12e6f6aa0f2f09fd27d472b19c7208ccd7c3af4b09604fd5d462c1de2b", + "serialized_tx": "83a600818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a048182018200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b427705a1581de1122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b42771903e8a10082825820bc65be1b0b9d7531778a1317c2aa6de936963c3f9ac7d5ee9e9eda25e0c97c5e58400202826a8b9688cf978000e7d1591582c65b149bb9f55dc883ae1acf85432618ca32be8a06fef37e69df503a294e7093006f63ababf9fcea639390226934020a8258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c158407efa634e42fa844cad5f60bf005d645817cc674f30eaab0da398b99034850780b40ab5a1028da033330a0f82b01648ec92cff8ca85a072594efb298016f38d0df6" + } + }, + { + "description": "transaction with metadata", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "a200a11864a118c843aa00ff01a119012c590100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ] + }, + "result": { + "tx_hash": "1875f1d59a53f1cb4c43949867d72bcfd857fa3b64feb88f41b78ddaa1a21cbf", + "serialized_tx": "83a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a075820ea4c91860dd5ec5449f8f985d227946ff39086b17f10b5afb93d12ee87050b6aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840b2015772a91043aeb04b98111744a098afdade0db5e30206538d7f2814965a5800d45240137f4d0dc81845a71e67cda38beaf816a520d73c4decbf7cbf0f6d08a200a11864a118c843aa00ff01a119012c590100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + { + "description": "Testnet transaction", + "parameters": { + "protocol_magic": 42, + "network_id": 0, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"], ["YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "2657WMsDfac7BteXkJq5Jzdog4h47fPbkwUM49isuWbYAr2cFRHa3rURP236h9PBe", + "amount": "3003112" + }, + { + "address": "addr_test1vr9s8py7y68e3x66sscs0wkhlg5ssfrfs65084jrlrqcfqqtmut0e", + "amount": "1" + }, + { + "addressType": 8, + "path": "m/44'/1815'/0'/0/1", + "amount": "1000000" + } + ] + }, + "result": { + "tx_hash": "47cf79f20c6c62edb4162b3b232a57afc1bd0b57c7fd8389555276408a004776", + "serialized_tx": "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018382582f82d818582583581cc817d85b524e3d073795819a25cdbb84cff6aa2bbb3a081980d248cba10242182a001a0fb6fc611a002dd2e882581d60cb03849e268f989b5a843107bad7fa2908246986a8f3d643f8c184800182582f82d818582583581c98c3a558f39d1d993cc8770e8825c70a6d0f5a9eb243501c4526c29da10242182a001aa8566c011a000f424002182a030aa1028184582089053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea5840cc11adf81cb3c3b75a438325f8577666f5cbb4d5d6b73fa6dbbcf5ab36897df34eecacdb54c3bc3ce7fc594ebb2c7aa4db4700f4290facad9b611a035af8710a582026308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a63545a10242182af6" + } + } + ] +} diff --git a/common/tests/fixtures/cardano/sign_tx.slip39.json b/common/tests/fixtures/cardano/sign_tx.slip39.json new file mode 100644 index 0000000000..200dc4bb56 --- /dev/null +++ b/common/tests/fixtures/cardano/sign_tx.slip39.json @@ -0,0 +1,112 @@ +{ + "setup": { + "mnemonic": [ + "extra extend academic bishop cricket bundle tofu goat apart victim enlarge program behavior permit course armed jerky faint language modern", + "extra extend academic acne away best indicate impact square oasis prospect painting voting guest either argue username racism enemy eclipse", + "extra extend academic arcade born dive legal hush gross briefing talent drug much home firefly toxic analysis idea umbrella slice" + ], + "passphrase": "TREZOR" + }, + "tests": [ + { + "description": "Mainnet transaction without change", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + } + ] + }, + "result": { + "tx_hash": "73e09bdebf98a9e0f17f86a2d11e0f14f4f8dae77cdf26ff1678e821f20c8db6", + "serialized_tx": "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018182582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e802182a030aa1028184582024c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c584055c179ff2beca2c6a78d66de3dea5a6e3134ca3430447c9b73ede73d9b6ae524cde73db59d93a4dfccbbd42b4f4dbacbb655b27171d0f248fdd2d0dc16e0130458206f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b41a0f6" + } + }, + { + "description": "Mainnet transaction with change", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", + "amount": "3003112" + }, + { + "addressType": 8, + "path": "m/44'/1815'/0'/0/1", + "amount": "1000000" + } + ] + }, + "result": { + "tx_hash": "4c43ce4c72f145b145ae7add414722735e250d048f61c4585a5becafcbffa6ae", + "serialized_tx": "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018282582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e882582b82d818582183581c2ea63b3db3a1865f59c11762a5aede800ed8f2dc0605d75df2ed7c9ca0001ae82668161a000f424002182a030aa1028184582024c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c5840594c986290cc5cddf3c242f2d650fcbfd0705949c9990569798c29e42ca7b0d6e92a589be6962dcce9c53c63de973d84c38cf53374b5329e20973a280abec00d58206f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b41a0f6" + } + }, + { + "description": "Testnet transaction", + "parameters": { + "protocol_magic": 42, + "network_id": 0, + "fee": 42, + "ttl": 10, + "certificates": [], + "withdrawals": [], + "metadata": "", + "input_flow": [["SWIPE", "YES"], ["YES"], ["SWIPE", "YES"]], + "inputs": [ + { + "path": "m/44'/1815'/0'/0/1", + "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "2657WMsDfac7BteXkJq5Jzdog4h47fPbkwUM49isuWbYAr2cFRHa3rURP236h9PBe", + "amount": "3003112" + }, + { + "addressType": 8, + "path": "m/44'/1815'/0'/0/1", + "amount": "1000000" + } + ] + }, + "result": { + "tx_hash": "93a2c3cfb67ef1e4bae167b0f443c3370664bdb9171bc9cd41bad98e5cc049b2", + "serialized_tx": "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018282582f82d818582583581cc817d85b524e3d073795819a25cdbb84cff6aa2bbb3a081980d248cba10242182a001a0fb6fc611a002dd2e882582f82d818582583581c709bfb5d9733cbdd72f520cd2c8b9f8f942da5e6cd0b6994e1803b0aa10242182a001aef14e76d1a000f424002182a030aa1028184582024c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c5840552d1d66972598532fa539faa98cdc7889c8dce00577626a62fb22d0e244d9f49732b6ab65593352a7486123077b7e36308c5048cc8ee6dc465e576f065cb70558206f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b45a10242182af6" + } + } + ] +} diff --git a/tests/common.py b/tests/common.py index 30eddea98c..b3eb32d78c 100644 --- a/tests/common.py +++ b/tests/common.py @@ -14,6 +14,11 @@ # You should have received a copy of the License along with this library. # If not, see . +import json +from pathlib import Path + +import pytest + from trezorlib import btc, tools from trezorlib.messages import ButtonRequestType as B @@ -43,6 +48,31 @@ EXTERNAL_ENTROPY = b"zlutoucky kun upel divoke ody" * 2 # fmt: on TEST_ADDRESS_N = tools.parse_path("m/44h/1h/0h/0/0") +COMMON_FIXTURES_DIR = ( + Path(__file__).parent.resolve().parent / "common" / "tests" / "fixtures" +) + + +def parametrize_using_common_fixtures(*paths): + fixtures = [] + for path in paths: + fixtures.append(json.loads((COMMON_FIXTURES_DIR / path).read_text())) + + tests = [] + for fixture in fixtures: + for test in fixture["tests"]: + tests.append( + pytest.param( + test["parameters"], + test["result"], + marks=pytest.mark.setup_client( + passphrase=fixture["setup"]["passphrase"], + mnemonic=fixture["setup"]["mnemonic"], + ), + ) + ) + + return pytest.mark.parametrize("parameters, result", tests) def generate_entropy(strength, internal_entropy, external_entropy): diff --git a/tests/conftest.py b/tests/conftest.py index 70f81f8b0b..fde10e1daf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -116,18 +116,25 @@ def client(request): if marker: setup_params.update(marker.kwargs) + use_passphrase = setup_params["passphrase"] is True or isinstance( + setup_params["passphrase"], str + ) + if not setup_params["uninitialized"]: debuglink.load_device( client, mnemonic=setup_params["mnemonic"], pin=setup_params["pin"], - passphrase_protection=setup_params["passphrase"], + passphrase_protection=use_passphrase, label="test", language="en-US", needs_backup=setup_params["needs_backup"], no_backup=setup_params["no_backup"], ) + if use_passphrase and isinstance(setup_params["passphrase"], str): + client.use_passphrase(setup_params["passphrase"]) + client.clear_session() if run_ui_tests: diff --git a/tests/device_tests/cardano/__init__.py b/tests/device_tests/cardano/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/device_tests/cardano/test_address_public_key.py b/tests/device_tests/cardano/test_address_public_key.py new file mode 100644 index 0000000000..e603d85867 --- /dev/null +++ b/tests/device_tests/cardano/test_address_public_key.py @@ -0,0 +1,74 @@ +# This file is part of the Trezor project. +# +# Copyright (C) 2012-2019 SatoshiLabs and contributors +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the License along with this library. +# If not, see . + +import pytest + +from trezorlib.cardano import create_address_parameters, get_address, get_public_key +from trezorlib.messages import CardanoAddressType +from trezorlib.tools import parse_path + +from ...common import parametrize_using_common_fixtures + +pytestmark = [ + pytest.mark.altcoin, + pytest.mark.cardano, + pytest.mark.skip_t1, + pytest.mark.skip_ui, +] + + +@parametrize_using_common_fixtures( + "cardano/get_address_byron.json", + "cardano/get_address_byron.slip39.json", + "cardano/get_base_address.json", + "cardano/get_base_address_with_staking_key_hash.json", + "cardano/get_enterprise_address.json", + "cardano/get_pointer_address.json", + "cardano/get_reward_address.json", +) +def test_cardano_get_address(client, parameters, result): + address = get_address( + client, + address_parameters=create_address_parameters( + address_type=getattr( + CardanoAddressType, parameters["address_type"].upper() + ), + address_n=parse_path(parameters["path"]), + address_n_staking=parse_path(parameters.get("staking_path")) + if "staking_path" in parameters + else None, + staking_key_hash=bytes.fromhex(parameters.get("staking_key_hash")) + if "staking_key_hash" in parameters + else None, + block_index=parameters.get("block_index"), + tx_index=parameters.get("tx_index"), + certificate_index=parameters.get("certificate_index"), + ), + protocol_magic=parameters["protocol_magic"], + network_id=parameters["network_id"], + ) + assert address == result["expected_address"] + + +@parametrize_using_common_fixtures( + "cardano/get_public_key.json", "cardano/get_public_key.slip39.json" +) +def test_cardano_get_public_key(client, parameters, result): + key = get_public_key(client, parse_path(parameters["path"])) + + assert key.node.public_key.hex() == result["public_key"] + assert key.node.chain_code.hex() == result["chain_code"] + assert key.xpub == result["public_key"] + result["chain_code"] diff --git a/tests/device_tests/cardano/test_sign_tx.py b/tests/device_tests/cardano/test_sign_tx.py new file mode 100644 index 0000000000..dfa15d6bdd --- /dev/null +++ b/tests/device_tests/cardano/test_sign_tx.py @@ -0,0 +1,101 @@ +# This file is part of the Trezor project. +# +# Copyright (C) 2012-2019 SatoshiLabs and contributors +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the License along with this library. +# If not, see . + +import pytest + +from trezorlib import cardano, messages +from trezorlib.exceptions import TrezorFailure + +from ...common import parametrize_using_common_fixtures + +pytestmark = [ + pytest.mark.altcoin, + pytest.mark.cardano, + pytest.mark.skip_t1, +] + + +@parametrize_using_common_fixtures( + "cardano/sign_tx.json", "cardano/sign_tx.slip39.json" +) +def test_cardano_sign_tx(client, parameters, result): + inputs = [cardano.create_input(i) for i in parameters["inputs"]] + outputs = [cardano.create_output(o) for o in parameters["outputs"]] + certificates = [cardano.create_certificate(c) for c in parameters["certificates"]] + withdrawals = [cardano.create_withdrawal(w) for w in parameters["withdrawals"]] + + expected_responses = [messages.PassphraseRequest()] + expected_responses += [ + messages.ButtonRequest(code=messages.ButtonRequestType.Other) + for i in range(len(parameters["input_flow"])) + ] + expected_responses.append(messages.CardanoSignedTx()) + + def input_flow(): + for sequence in parameters["input_flow"]: + yield + for action in sequence: + if action == "SWIPE": + client.debug.swipe_up() + elif action == "YES": + client.debug.press_yes() + else: + raise ValueError("Invalid input action") + + with client: + client.set_expected_responses(expected_responses) + client.set_input_flow(input_flow) + response = cardano.sign_tx( + client=client, + inputs=inputs, + outputs=outputs, + fee=parameters["fee"], + ttl=parameters["ttl"], + certificates=certificates, + withdrawals=withdrawals, + metadata=bytes.fromhex(parameters["metadata"]), + protocol_magic=parameters["protocol_magic"], + network_id=parameters["network_id"], + ) + assert response.tx_hash.hex() == result["tx_hash"] + assert response.serialized_tx.hex() == result["serialized_tx"] + + +@parametrize_using_common_fixtures("cardano/sign_tx.failed.json") +def test_cardano_sign_tx_failed(client, parameters, result): + inputs = [cardano.create_input(i) for i in parameters["inputs"]] + outputs = [cardano.create_output(o) for o in parameters["outputs"]] + certificates = [cardano.create_certificate(c) for c in parameters["certificates"]] + withdrawals = [cardano.create_withdrawal(w) for w in parameters["withdrawals"]] + + expected_responses = [messages.PassphraseRequest(), messages.Failure()] + + with client: + client.set_expected_responses(expected_responses) + + with pytest.raises(TrezorFailure, match=result["error_message"]): + cardano.sign_tx( + client=client, + inputs=inputs, + outputs=outputs, + fee=parameters["fee"], + ttl=parameters["ttl"], + certificates=certificates, + withdrawals=withdrawals, + metadata=bytes.fromhex(parameters["metadata"]), + protocol_magic=parameters["protocol_magic"], + network_id=parameters["network_id"], + ) diff --git a/tests/device_tests/test_msg_cardano_get_address.py b/tests/device_tests/test_msg_cardano_get_address.py deleted file mode 100644 index 1b80f6c8a9..0000000000 --- a/tests/device_tests/test_msg_cardano_get_address.py +++ /dev/null @@ -1,285 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -import pytest - -from trezorlib import tools -from trezorlib.cardano import ( - NETWORK_IDS, - PROTOCOL_MAGICS, - create_address_parameters, - get_address, -) -from trezorlib.messages import CardanoAddressType - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "path,protocol_magic,expected_address", - [ - # mainnet - ( - "m/44'/1815'/0'/0/0", - PROTOCOL_MAGICS["mainnet"], - "Ae2tdPwUPEZ5YUb8sM3eS8JqKgrRLzhiu71crfuH2MFtqaYr5ACNRdsswsZ", - ), - ( - "m/44'/1815'/0'/0/1", - PROTOCOL_MAGICS["mainnet"], - "Ae2tdPwUPEZJb8r1VZxweSwHDTYtqeYqF39rZmVbrNK62JHd4Wd7Ytsc8eG", - ), - ( - "m/44'/1815'/0'/0/2", - PROTOCOL_MAGICS["mainnet"], - "Ae2tdPwUPEZFm6Y7aPZGKMyMAK16yA5pWWKU9g73ncUQNZsAjzjhszenCsq", - ), - # testnet - # data generated by code under test - ( - "m/44'/1815'/0'/0/0", - PROTOCOL_MAGICS["testnet"], - "2657WMsDfac5F3zbgs9BwNWx3dhGAJERkAL93gPa68NJ2i8mbCHm2pLUHWSj8Mfea", - ), - ( - "m/44'/1815'/0'/0/1", - PROTOCOL_MAGICS["testnet"], - "2657WMsDfac6ezKWszxLFqJjSUgpg9NgxKc1koqi24sVpRaPhiwMaExk4useKn5HA", - ), - ( - "m/44'/1815'/0'/0/2", - PROTOCOL_MAGICS["testnet"], - "2657WMsDfac7hr1ioJGr6g7r6JRx4r1My8Rj91tcPTeVjJDpfBYKURrPG2zVLx2Sq", - ), - ], -) -def test_cardano_get_address(client, path, protocol_magic, expected_address): - address = get_address( - client, - address_parameters=create_address_parameters( - address_type=CardanoAddressType.BYRON, address_n=tools.parse_path(path), - ), - protocol_magic=protocol_magic, - network_id=NETWORK_IDS["mainnet"], - ) - assert address == expected_address - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "path, staking_path, network_id, expected_address", - [ - # data generated with code under test - ( - "m/1852'/1815'/4'/0/0", - "m/1852'/1815'/4'/2/0", - NETWORK_IDS["mainnet"], - "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wnrqua2vw243tmjfjt0h5wsru6appuz8c0pfd75ur7myyeqsx9990", - ), - ( - "m/1852'/1815'/4'/0/0", - "m/1852'/1815'/4'/2/0", - NETWORK_IDS["testnet"], - "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wnrqua2vw243tmjfjt0h5wsru6appuz8c0pfd75ur7myyeqnsc9fs", - ), - ], -) -def test_cardano_get_base_address( - client, path, staking_path, network_id, expected_address -): - address = get_address( - client, - address_parameters=create_address_parameters( - address_type=CardanoAddressType.BASE, - address_n=tools.parse_path(path), - address_n_staking=tools.parse_path(staking_path), - ), - protocol_magic=PROTOCOL_MAGICS["mainnet"], - network_id=network_id, - ) - assert address == expected_address - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "path, staking_key_hash, network_id, expected_address", - [ - # data generated with code under test - ( - "m/1852'/1815'/4'/0/0", - "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff", - NETWORK_IDS["mainnet"], - "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsydc62k", - ), - ( - "m/1852'/1815'/4'/0/0", - "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff", - NETWORK_IDS["testnet"], - "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hls8m96xf", - ), - # staking key hash not owned - derived with "all all..." mnenomnic, data generated with code under test - ( - "m/1852'/1815'/4'/0/0", - "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277", - NETWORK_IDS["mainnet"], - "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfms06skxl", - ), - ( - "m/1852'/1815'/0'/0/0", - "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277", - NETWORK_IDS["testnet"], - "addr_test1qzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92sj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfmsu8d9w5", - ), - ( - "m/1852'/1815'/4'/0/0", - "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277", - NETWORK_IDS["testnet"], - "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfmsvvdk2q", - ), - ], -) -def test_cardano_get_base_address_with_staking_key_hash( - client, path, staking_key_hash, network_id, expected_address -): - # data form shelley test vectors - address = get_address( - client, - address_parameters=create_address_parameters( - address_type=CardanoAddressType.BASE, - address_n=tools.parse_path(path), - staking_key_hash=bytes.fromhex(staking_key_hash), - ), - protocol_magic=PROTOCOL_MAGICS["mainnet"], - network_id=network_id, - ) - assert address == expected_address - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "path, network_id, expected_address", - [ - # data generated with code under test - ( - "m/1852'/1815'/0'/0/0", - NETWORK_IDS["mainnet"], - "addr1vxq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92su77c6m", - ), - ( - "m/1852'/1815'/0'/0/0", - NETWORK_IDS["testnet"], - "addr_test1vzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92s8k2y47", - ), - ], -) -def test_cardano_get_enterprise_address(client, path, network_id, expected_address): - address = get_address( - client, - address_parameters=create_address_parameters( - address_type=CardanoAddressType.ENTERPRISE, - address_n=tools.parse_path(path), - ), - protocol_magic=PROTOCOL_MAGICS["mainnet"], - network_id=network_id, - ) - assert address == expected_address - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "path, block_index, tx_index, certificate_index, network_id, expected_address", - [ - # data generated with code under test - ( - "m/1852'/1815'/0'/0/0", - 1, - 2, - 3, - NETWORK_IDS["mainnet"], - "addr1gxq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92spqgpsl97q83", - ), - ( - "m/1852'/1815'/0'/0/0", - 24157, - 177, - 42, - NETWORK_IDS["testnet"], - "addr_test1gzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z925ph3wczvf2ag2x9t", - ), - ], -) -def test_cardano_get_pointer_address( - client, - path, - block_index, - tx_index, - certificate_index, - network_id, - expected_address, -): - address = get_address( - client, - address_parameters=create_address_parameters( - address_type=CardanoAddressType.POINTER, - address_n=tools.parse_path(path), - block_index=block_index, - tx_index=tx_index, - certificate_index=certificate_index, - ), - protocol_magic=PROTOCOL_MAGICS["mainnet"], - network_id=network_id, - ) - assert address == expected_address - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "path, network_id, expected_address", - [ - # data generated with code under test - ( - "m/1852'/1815'/0'/2/0", - NETWORK_IDS["mainnet"], - "stake1uyfz49rtntfa9h0s98f6s28sg69weemgjhc4e8hm66d5yacalmqha", - ), - ( - "m/1852'/1815'/0'/2/0", - NETWORK_IDS["testnet"], - "stake_test1uqfz49rtntfa9h0s98f6s28sg69weemgjhc4e8hm66d5yac643znq", - ), - ], -) -def test_cardano_get_reward_address(client, path, network_id, expected_address): - address = get_address( - client, - address_parameters=create_address_parameters( - address_type=CardanoAddressType.REWARD, address_n=tools.parse_path(path), - ), - protocol_magic=PROTOCOL_MAGICS["mainnet"], - network_id=network_id, - ) - assert address == expected_address diff --git a/tests/device_tests/test_msg_cardano_get_address_slip39_basic.py b/tests/device_tests/test_msg_cardano_get_address_slip39_basic.py deleted file mode 100644 index 5aff6384e4..0000000000 --- a/tests/device_tests/test_msg_cardano_get_address_slip39_basic.py +++ /dev/null @@ -1,83 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -import pytest - -from trezorlib import tools -from trezorlib.cardano import PROTOCOL_MAGICS, create_address_parameters, get_address -from trezorlib.messages import CardanoAddressType - -from ..common import MNEMONIC_SLIP39_BASIC_20_3of6 - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.skip_ui -@pytest.mark.parametrize( - "path,protocol_magic,expected_address", - [ - # mainnet - ( - "m/44'/1815'/0'/0/0", - PROTOCOL_MAGICS["mainnet"], - "Ae2tdPwUPEYxF9NAMNdd3v2LZoMeWp7gCZiDb6bZzFQeeVASzoP7HC4V9s6", - ), - ( - "m/44'/1815'/0'/0/1", - PROTOCOL_MAGICS["mainnet"], - "Ae2tdPwUPEZ1TjYcvfkWAbiHtGVxv4byEHHZoSyQXjPJ362DifCe1ykgqgy", - ), - ( - "m/44'/1815'/0'/0/2", - PROTOCOL_MAGICS["mainnet"], - "Ae2tdPwUPEZGXmSbda1kBNfyhRQGRcQxJFdk7mhWZXAGnapyejv2b2U3aRb", - ), - # testnet - # data generated by code under test - ( - "m/44'/1815'/0'/0/0", - PROTOCOL_MAGICS["testnet"], - "2657WMsDfac7SH1rhA2PWBggGAPrKyLt1r9SL9gajPxxcH15ZxuCUb4aK9mQ9w7dU", - ), - ( - "m/44'/1815'/0'/0/1", - PROTOCOL_MAGICS["testnet"], - "2657WMsDfac6Cmfg4Varph2qyLKGi2K9E8jrtvjHVzfSjmbTMGy5sY3HpxCKsmtDA", - ), - ( - "m/44'/1815'/0'/0/2", - PROTOCOL_MAGICS["testnet"], - "2657WMsDfac5ANb5Mw6Rbgdz6nvs2Tu675vGbbVSzXQbAkQuMWtqBvEeKTrHNtXY7", - ), - ], -) -@pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_BASIC_20_3of6, passphrase=True) -def test_cardano_get_address(client, path, protocol_magic, expected_address): - # enter passphrase - assert client.features.passphrase_protection is True - client.use_passphrase("TREZOR") - - address = get_address( - client, - address_parameters=create_address_parameters( - address_type=CardanoAddressType.BYRON, address_n=tools.parse_path(path), - ), - protocol_magic=protocol_magic, - network_id=0, - ) - assert address == expected_address - assert address == expected_address diff --git a/tests/device_tests/test_msg_cardano_get_public_key.py b/tests/device_tests/test_msg_cardano_get_public_key.py deleted file mode 100644 index d9c30f7931..0000000000 --- a/tests/device_tests/test_msg_cardano_get_public_key.py +++ /dev/null @@ -1,66 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -import pytest - -from trezorlib.cardano import get_public_key -from trezorlib.tools import parse_path - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "path,public_key,chain_code", - [ - ( - "m/44'/1815'/0'", - "c0fce1839f1a84c4e770293ac2f5e0875141b29017b7f56ab135352d00ad6966", - "07faa161c9f5464315d2855f70fdf1431d5fa39eb838767bf17b69772137452f", - ), - ( - "m/44'/1815'/1'", - "ea5dde31b9f551e08a5b6b2f98b8c42c726f726c9ce0a7072102ead53bd8f21e", - "70f131bb799fd659c997221ad8cae7dcce4e8da701f8101cf15307fd3a3712a1", - ), - ( - "m/1852'/1815'/0'", - "d507c8f866691bd96e131334c355188b1a1d0b2fa0ab11545075aab332d77d9e", - "b19657ad13ee581b56b0f8d744d66ca356b93d42fe176b3de007d53e9c4c4e7a", - ), - ( - "m/1852'/1815'/1'", - "140791584001446365f169c82241c7c214475000180dab39fa0588fc9c3d6d80", - "7f9f812d49816844b52e319857aa75961724ad1a146701679d02d7168622233d", - ), - ( - "m/1852'/1815'/2'", - "ff6ccc3097ca79fc29fe92a9639c47644746780c63acae10a9e6f03bf5c919dd", - "27d985feabf40d83a30aa4645ff008c068187559dd224ba59e26d0d2dc3598ce", - ), - ( - "m/1852'/1815'/3'", - "be81ace1f63f4f0cae74dd274a72d7818f238bc764ab3e0dc0beb1945b756dca", - "29034f036a162ac4f9f9f397b2d1f289754bb6633915f26b199e156f81d05c88", - ), - ], -) -def test_cardano_get_public_key(client, path, public_key, chain_code): - key = get_public_key(client, parse_path(path)) - - assert key.node.public_key.hex() == public_key - assert key.node.chain_code.hex() == chain_code - assert key.xpub == public_key + chain_code diff --git a/tests/device_tests/test_msg_cardano_get_public_key_slip39_basic.py b/tests/device_tests/test_msg_cardano_get_public_key_slip39_basic.py deleted file mode 100644 index 1d28c5f5d2..0000000000 --- a/tests/device_tests/test_msg_cardano_get_public_key_slip39_basic.py +++ /dev/null @@ -1,59 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -import pytest - -from trezorlib.cardano import get_public_key -from trezorlib.tools import parse_path - -from ..common import MNEMONIC_SLIP39_BASIC_20_3of6 - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.skip_ui -@pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_BASIC_20_3of6, passphrase=True) -@pytest.mark.parametrize( - "path,public_key,chain_code", - [ - ( - "m/44'/1815'/0'/0/0", - "bc043d84b8b891d49890edb6aced6f2d78395f255c5b6aea8878b913f83e8579", - "dc3f0d2b5cccb822335ef6213fd133f4ca934151ec44a6000aee43b8a101078c", - ), - ( - "m/44'/1815'/0'/0/1", - "24c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c", - "6f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b", - ), - ( - "m/44'/1815'/0'/0/2", - "831a63d381a8dab1e6e1ee991a4300fc70687aae5f97f4fcf92ed1b6c2bd99de", - "672d6af4707aba201b7940231e83dd357f92f8851b3dfdc224ef311e1b64cdeb", - ), - ], -) -def test_cardano_get_public_key(client, path, public_key, chain_code): - # enter passphrase - assert client.features.passphrase_protection is True - client.use_passphrase("TREZOR") - - key = get_public_key(client, parse_path(path)) - - assert key.node.public_key.hex() == public_key - assert key.node.chain_code.hex() == chain_code - assert key.xpub == public_key + chain_code diff --git a/tests/device_tests/test_msg_cardano_sign_transaction.py b/tests/device_tests/test_msg_cardano_sign_transaction.py deleted file mode 100644 index ee0f51becc..0000000000 --- a/tests/device_tests/test_msg_cardano_sign_transaction.py +++ /dev/null @@ -1,1230 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -import pytest - -from trezorlib import cardano, messages -from trezorlib.cardano import NETWORK_IDS, PROTOCOL_MAGICS -from trezorlib.exceptions import TrezorFailure - - -class InputAction: - """ - Test cases don't use the same input flows. These constants are used to define - the expected input flows for each test case. Corresponding input actions - are then executed on the device to simulate user inputs. - """ - - SWIPE = 0 - YES = 1 - - -SAMPLE_INPUTS = { - "byron_input": { - "path": "m/44'/1815'/0'/0/1", - "prev_hash": "1af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc", - "prev_index": 0, - }, - "byron_input_different_path": { - "path": "m/44'/1815'/0'/0/5", - "prev_hash": "a34dc95d806a3b206aab5e0c2aaa5ff0704f84868fe65793053f6ae9a7970979", - "prev_index": 0, - }, - "shelley_input": { - "path": "m/1852'/1815'/0'/0/0", - "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", - "prev_index": 0, - }, - "shelley_input_different_path": { - "path": "m/1852'/1815'/0'/0/5", - "prev_hash": "33ad5e2a8f298053da804c30c9f72836bfac0a58a30aef2ff87656418b01f70b", - "prev_index": 0, - }, -} - -SAMPLE_OUTPUTS = { - "simple_byron_output": { - "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", - "amount": "3003112", - }, - "byron_change_output": { - "addressType": 8, - "path": "m/44'/1815'/0'/0/1", - "amount": "1000000", - }, - "simple_shelley_output": { - "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", - "amount": "1", - }, - "base_address_with_script_output": { - "address": "addr1z90z7zqwhya6mpk5q929ur897g3pp9kkgalpreny8y304r2dcrtx0sf3dluyu4erzr3xtmdnzvcyfzekkuteu2xagx0qeva0pr", - "amount": "7120787", - }, - "base_address_change_output": { - "addressType": 0, - "path": "m/1852'/1815'/0'/0/0", - "stakingPath": "m/1852'/1815'/0'/2/0", - "amount": "7120787", - }, - "staking_key_hash_output": { - "addressType": 0, - "path": "m/1852'/1815'/0'/0/0", - "stakingKeyHash": "32c728d3861e164cab28cb8f006448139c8f1740ffb8e7aa9e5232dc", - "amount": "7120787", - }, - "pointer_address_output": { - "addressType": 4, - "path": "m/1852'/1815'/0'/0/0", - "blockIndex": 1, - "txIndex": 2, - "certificateIndex": 3, - "amount": "7120787", - }, - "enterprise_address_output": { - "addressType": 6, - "path": "m/1852'/1815'/0'/0/0", - "amount": "7120787", - }, - "invalid_address": { - "address": "jsK75PTH2esX8k4Wvxenyz83LJJWToBbVmGrWUer2CHFHanLseh7r3sW5X5q", - "amount": "3003112", - }, - "invalid_cbor": { - "address": "5dnY6xgRcNUSLGa4gfqef2jGAMHb7koQs9EXErXLNC1LiMPUnhn8joXhvEJpWQtN3F4ysATcBvCn5tABgL3e4hPWapPHmcK5GJMSEaET5JafgAGwSrznzL1Mqa", - "amount": "3003112", - }, - "invalid_crc": { - "address": "Ae2tdPwUPEZ5YUb8sM3eS8JqKgrRLzhiu71crfuH2MFtqaYr5ACNRZR3Mbm", - "amount": "3003112", - }, - "invalid_address_too_short": { - "address": "addr1q89s8py7y68e3x66sscs0wkhlg5ssfrfs65084jry45scvehcr", - "amount": "3003112", - }, - "invalid_address_too_long": { - "address": "addr1q89s8py7y68e3x66sscs0wkhlg5ssfrfs65084jrlrqcfqqj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfm5z3vcwsfrvkr5zglq4rxu", - "amount": "3003112", - }, - "large_simple_byron_output": { - "address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2", - "amount": "449999999199999999", - }, - # address type 10 - "unsupported_address_type": { - "address": "addr1590z7zqwhya6mpk5q929ur897g3pp9kkgalpreny8y304r2dcrtx0sf3dluyu4erzr3xtmdnzvcyfzekkuteu2xagx0qt7gvvj", - "amount": "3003112", - }, - "testnet_output": { - "address": "2657WMsDfac7BteXkJq5Jzdog4h47fPbkwUM49isuWbYAr2cFRHa3rURP236h9PBe", - "amount": "3003112", - }, - "shelley_testnet_output": { - "address": "addr_test1vr9s8py7y68e3x66sscs0wkhlg5ssfrfs65084jrlrqcfqqtmut0e", - "amount": "1", - }, -} - -SAMPLE_CERTIFICATES = { - "stake_registration": {"type": 0, "path": "m/1852'/1815'/0'/2/0"}, - "stake_deregistration": {"type": 1, "path": "m/1852'/1815'/0'/2/0"}, - "stake_delegation": { - "type": 2, - "path": "m/1852'/1815'/0'/2/0", - "pool": "f61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973", - }, - "invalid_non_staking_path": {"type": 0, "path": "m/1852'/1815'/0'/0/0"}, - "invalid_pool_size": { - "type": 2, - "path": "m/1852'/1815'/0'/2/0", - "pool": "f61c42cbf7c8c53af3f520508212ad3e72", - }, -} - -SAMPLE_WITHDRAWALS = { - "valid": {"path": "m/1852'/1815'/0'/2/0", "amount": "1000"}, - "invalid_non_staking_path": {"path": "m/1852'/1815'/0'/0/0", "amount": "1000"}, - "invalid_amount_too_large": { - "path": "m/1852'/1815'/0'/2/0", - "amount": "449999999199999999", - }, -} - -VALID_VECTORS = [ - # Mainnet transaction without change - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [[InputAction.SWIPE, InputAction.YES], [InputAction.SWIPE, InputAction.YES]], - # tx hash - "73e09bdebf98a9e0f17f86a2d11e0f14f4f8dae77cdf26ff1678e821f20c8db6", - # serialized tx - "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018182582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e802182a030aa1028184582089053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea5840da07ac5246e3f20ebd1276476a4ae34a019dd4b264ffc22eea3c28cb0f1a6bb1c7764adeecf56bcb0bc6196fd1dbe080f3a7ef5b49f56980fe5b2881a4fdfa00582026308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a63541a0f6", - ), - # Mainnet transaction with change - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"], SAMPLE_OUTPUTS["byron_change_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "81b14b7e62972127eb33c0b1198de6430540ad3a98eec621a3194f2baac43a43", - # serialized tx - "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018282582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e882582b82d818582183581cda4da43db3fca93695e71dab839e72271204d28b9d964d306b8800a8a0001a7a6916a51a000f424002182a030aa1028184582089053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea5840d909b16038c4fd772a177038242e6793be39c735430b03ee924ed18026bd28d06920b5846247945f1204276e4b759aa5ac05a4a73b49ce705ab0e5e54a3a170e582026308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a63541a0f6", - ), - # simple transaction with base address change output - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [ - SAMPLE_OUTPUTS["simple_shelley_output"], - SAMPLE_OUTPUTS["base_address_change_output"], - ], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [[InputAction.SWIPE, InputAction.YES], [InputAction.SWIPE, InputAction.YES]], - # tx hash - "16fe72bb198be423677577e6326f1f648ec5fc11263b072006382d8125a6edda", - # tx body - "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018282583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff018258390180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b42771a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c158406a78f07836dcf4a303448d2b16b217265a9226be3984a69a04dba5d04f4dbb2a47b5e1cbb345f474c0b9634a2f37b921ab26e6a65d5dfd015dacb4455fb8430af6", - ), - # Mainnet transaction with multiple inputs - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [ - SAMPLE_INPUTS["byron_input"], - SAMPLE_INPUTS["byron_input_different_path"], - SAMPLE_INPUTS["shelley_input"], - SAMPLE_INPUTS["shelley_input_different_path"], - ], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [[InputAction.SWIPE, InputAction.YES], [InputAction.SWIPE, InputAction.YES]], - # tx hash - "7e16a0b47bdfc37abf4ddd3143f7481af07ffe7abd68f752676f5b0b2890d05b", - # serialized tx - "83a400848258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00825820a34dc95d806a3b206aab5e0c2aaa5ff0704f84868fe65793053f6ae9a7970979008258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b70082582033ad5e2a8f298053da804c30c9f72836bfac0a58a30aef2ff87656418b01f70b00018182582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e802182a030aa20082825820e246aa6392958f01fc8fafd5ac1cf5f28ef34af05820b49c98919753a76109c05840517ca4c901a9cded7b4ab3b1d576f41b28a05aed9ed96ef86a78556099aaa5e996a38c74783262d807d86d48c131b1cb91cbab4ef4b6b52dc8d49708b0f40d068258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840e661d9d1002bc2f8b310e0b0541f9bb9c3357e8e6e7f772ca72fdfd4dfc27f9ae040197d4ef69c98dc16a105f00c7ff2cebf2d85920307606bff087e550b470d028284582089053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea5840ca7325ac3280708a12a70f794699243fa1c2a3e3981dccd7e5a1200f521e19fad52489c9be81e8a8ccaccd3c42d917ffd1719e6808e11fbcd1ef495f7324b10b582026308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a63541a084582040ed7b4134e85866f55ec896a8a81e9d41c20969af8f88c532e5ad1f9c9425ab5840e11444cf81b94754a15e244259d983cc3099ff04a8212dde814d6e0a9cb7e4423caa440cdee9e2d663b59e5005dbfeee8057765245b96711f1ff20caf8cfb3025820ec19de133d3c5a598212a3b8ad9249453c4ca10e0b9228714700eeaed944590941a0f6", - ), - # simple transaction with base script address change output - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [ - SAMPLE_OUTPUTS["base_address_with_script_output"], - SAMPLE_OUTPUTS["base_address_change_output"], - ], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [[InputAction.SWIPE, InputAction.YES], [InputAction.SWIPE, InputAction.YES]], - # tx hash - "5ddbb530b8a89e2b08fc91db03950c876c4a9c1c3fb6e628c4cab638b1c97648", - # tx body - "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7000182825839115e2f080eb93bad86d401545e0ce5f2221096d6477e11e6643922fa8d4dc0d667c1316ff84e572310e265edb31330448b36b7179e28dd419e1a006ca7938258390180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b42771a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840e0bdaa59016f2a521d31179b60364eacdcb53c34ae01c56b339afa62d312f5f89783579691cac777e3d5f2e7810aa8fe554ba545a8d1578c55405af5ae51b30ff6", - ), - # simple transaction with base address change output with staking key hash - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [ - SAMPLE_OUTPUTS["simple_shelley_output"], - SAMPLE_OUTPUTS["staking_key_hash_output"], - ], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "d1610bb89bece22ed3158738bc1fbb31c6af0685053e2993361e3380f49afad9", - # tx body - "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018282583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff018258390180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa32c728d3861e164cab28cb8f006448139c8f1740ffb8e7aa9e5232dc1a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840622f22d03bc9651ddc5eb2f5dc709ac4240a64d2b78c70355dd62106543c407d56e8134c4df7884ba67c8a1b5c706fc021df5c4d0ff37385c30572e73c727d00f6", - ), - # simple transaction with pointer address change output - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [ - SAMPLE_OUTPUTS["simple_shelley_output"], - SAMPLE_OUTPUTS["pointer_address_output"], - ], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "40535fa8f88515f1da008d3cdf544cf9dbf1675c3cb0adb13b74b9293f1b7096", - # tx body - "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018282583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff018258204180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa0102031a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840dbbf050cc13d0696b1884113613318a275e6f0f8c7cb3e7828c4f2f3c158b2622a5d65ea247f1eed758a0f6242a52060c319d6f37c8460f5d14be24456cd0b08f6", - ), - # simple transaction with enterprise address change output - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [ - SAMPLE_OUTPUTS["simple_shelley_output"], - SAMPLE_OUTPUTS["enterprise_address_output"], - ], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "d3570557b197604109481a80aeb66cd2cfabc57f802ad593bacc12eb658e5d72", - # tx body - "83a400818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018282583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0182581d6180f9e2c88e6c817008f3a812ed889b4a4da8e0bd103f86e7335422aa1a006ca79302182a030aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840c5996650c438c4493b2c8a94229621bb9b151b8d61d75fb868c305e917031e9a1654f35023f7dbf5d1839ab9d57b153c7f79c2666af51ecf363780397956e00af6", - ), - # transaction with stake registration certificate - ( - # network id - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_shelley_output"]], - # fee - 42, - # ttl - 10, - # certificates - [SAMPLE_CERTIFICATES["stake_registration"]], - # withdrawals - [], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "1a3a295908afd8b2afc368071272d6964be6ee0af062bb765aea65ca454dc0c9", - # tx body - "83a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a048182008200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277a100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840a938b16bd81aea8d3aaf11e4d460dad1f36d34bf34ad066d0f5ce5d4137654145d998c3482aa823ff1acf021c6e2cd2774fff00361cbb9e72b98632307ee4000f6", - ), - # transaction with stake registration and stake delegation certificates - ( - # network id - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_shelley_output"]], - # fee - 42, - # ttl - 10, - # certificates - [ - SAMPLE_CERTIFICATES["stake_registration"], - SAMPLE_CERTIFICATES["stake_delegation"], - ], - # withdrawals - [], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "439764b5f7e08839881536a3191faeaf111e75d9f00f83b102c5c1c6fa9fcaf9", - # tx body - "83a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a048282008200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b427783028200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277581cf61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb4973a10082825820bc65be1b0b9d7531778a1317c2aa6de936963c3f9ac7d5ee9e9eda25e0c97c5e58400dbdf36f92bc5199526ffb8b83b33a9eeda0ed3e46fb4025a104346801afb9cf45fa1a5482e54c769f4102e67af46205457d7ae05a889fc342acb0cdc23ecd038258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c158405ebe8eff752f07e8448f55304fdf3665ac68162099dcacd81886b73affe67fb6df401f8a5fa60ddb6d5fb65b93235e6a234182a40c001e3cf7634f82afd5fe0af6", - ), - # transaction with stake deregistration - ( - # network id - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_shelley_output"]], - # fee - 42, - # ttl - 10, - # certificates - [SAMPLE_CERTIFICATES["stake_deregistration"]], - # withdrawals - [], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "3aca1784d151dc75bdbb80fae71bda3f4b26af3f5fd71bd5e9e9bbcdd2b64ad1", - # tx body - "83a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a048182018200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277a10082825820bc65be1b0b9d7531778a1317c2aa6de936963c3f9ac7d5ee9e9eda25e0c97c5e584084f321d313da67f80f7fab2e4f3996d3dbe3186659e6f98315e372dbe88c55d56f637ccc7534890c3601ddd31ba885dc86ba0074c230869f20099b7dd5eeaf008258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840e563a8012e16affd801564e8410ca7b2c96f76f8ecb878e35c098a823c40be7f59dc12cb44a9b678210d4e8f18ab215133eef7ca9ece94b4683d3db0fd37e105f6", - ), - # transaction with stake deregistration and withdrawal - ( - # network id - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_shelley_output"]], - # fee - 42, - # ttl - 10, - # certificates - [SAMPLE_CERTIFICATES["stake_deregistration"]], - # withdrawals - [SAMPLE_WITHDRAWALS["valid"]], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "22c67f12e6f6aa0f2f09fd27d472b19c7208ccd7c3af4b09604fd5d462c1de2b", - # tx body - "83a600818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a048182018200581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b427705a1581de1122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b42771903e8a10082825820bc65be1b0b9d7531778a1317c2aa6de936963c3f9ac7d5ee9e9eda25e0c97c5e58400202826a8b9688cf978000e7d1591582c65b149bb9f55dc883ae1acf85432618ca32be8a06fef37e69df503a294e7093006f63ababf9fcea639390226934020a8258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c158407efa634e42fa844cad5f60bf005d645817cc674f30eaab0da398b99034850780b40ab5a1028da033330a0f82b01648ec92cff8ca85a072594efb298016f38d0df6", - ), - # transaction with metadata - ( - # network id - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_shelley_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "a200a11864a118c843aa00ff01a119012c590100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - # input flow - [[InputAction.SWIPE, InputAction.YES], [InputAction.SWIPE, InputAction.YES]], - # tx hash - "1875f1d59a53f1cb4c43949867d72bcfd857fa3b64feb88f41b78ddaa1a21cbf", - # tx body - "83a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a075820ea4c91860dd5ec5449f8f985d227946ff39086b17f10b5afb93d12ee87050b6aa100818258205d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c15840b2015772a91043aeb04b98111744a098afdade0db5e30206538d7f2814965a5800d45240137f4d0dc81845a71e67cda38beaf816a520d73c4decbf7cbf0f6d08a200a11864a118c843aa00ff01a119012c590100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - ), - # Testnet transaction - ( - # protocol magic - PROTOCOL_MAGICS["testnet"], - # network id - NETWORK_IDS["testnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [ - SAMPLE_OUTPUTS["testnet_output"], - SAMPLE_OUTPUTS["shelley_testnet_output"], - SAMPLE_OUTPUTS["byron_change_output"], - ], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "47cf79f20c6c62edb4162b3b232a57afc1bd0b57c7fd8389555276408a004776", - # serialized tx - "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018382582f82d818582583581cc817d85b524e3d073795819a25cdbb84cff6aa2bbb3a081980d248cba10242182a001a0fb6fc611a002dd2e882581d60cb03849e268f989b5a843107bad7fa2908246986a8f3d643f8c184800182582f82d818582583581c98c3a558f39d1d993cc8770e8825c70a6d0f5a9eb243501c4526c29da10242182a001aa8566c011a000f424002182a030aa1028184582089053545a6c254b0d9b1464e48d2b5fcf91d4e25c128afb1fcfc61d0843338ea5840cc11adf81cb3c3b75a438325f8577666f5cbb4d5d6b73fa6dbbcf5ab36897df34eecacdb54c3bc3ce7fc594ebb2c7aa4db4700f4290facad9b611a035af8710a582026308151516f3b0e02bb1638142747863c520273ce9bd3e5cd91e1d46fe2a63545a10242182af6", - ), -] - -INVALID_VECTORS = [ - # Output address is a valid CBOR but invalid Cardano address - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["invalid_address"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid address", - ), - # Output address is invalid CBOR - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["invalid_cbor"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid address", - ), - # Output address has invalid CRC - ( - # protocol magic (mainnet) - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["invalid_crc"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid address", - ), - # Output address is too short - ( - # protocol magic (mainnet) - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["invalid_address_too_short"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid address", - ), - # Output address is too long - ( - # protocol magic (mainnet) - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["invalid_address_too_long"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid address", - ), - # Fee is too high - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 45000000000000001, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Fee is out of range!", - ), - # Output total is too high - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [ - SAMPLE_OUTPUTS["large_simple_byron_output"], - SAMPLE_OUTPUTS["byron_change_output"], - ], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Total transaction amount is out of range!", - ), - # Mainnet transaction with testnet output - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["testnet_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Output address network mismatch!", - ), - # Testnet transaction with mainnet output - ( - # protocol magic - PROTOCOL_MAGICS["testnet"], - # network id - NETWORK_IDS["testnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Output address network mismatch!", - ), - # Shelley mainnet transaction with testnet output - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["shelley_testnet_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid address", - ), - # Shelley testnet transaction with mainnet output - ( - # protocol magic - PROTOCOL_MAGICS["testnet"], - # network id - NETWORK_IDS["testnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_shelley_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid address", - ), - # Testnet protocol magic with mainnet network id - ( - # protocol magic - PROTOCOL_MAGICS["testnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_shelley_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid network id/protocol magic combination!", - ), - # Mainnet protocol magic with testnet network id - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["testnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "", - # error message - "Invalid network id/protocol magic combination!", - ), - # Unsupported address type - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["unsupported_address_type"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata hash - "", - # error message - "Invalid address", - ), - # Certificate has non staking path - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [SAMPLE_CERTIFICATES["invalid_non_staking_path"]], - # withdrawals - [], - # metadata - "", - # error message - "Invalid certificate", - ), - # Certificate has invalid pool size - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [SAMPLE_CERTIFICATES["invalid_pool_size"]], - # withdrawals - [], - # metadata - "", - # error message - "Invalid certificate", - ), - # Withdrawal has non staking path - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [SAMPLE_WITHDRAWALS["invalid_non_staking_path"]], - # metadata - "", - # error message - "Invalid withdrawal", - ), - # Withdrawal amount is too large - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [SAMPLE_WITHDRAWALS["invalid_amount_too_large"]], - # metadata - "", - # error message - "Invalid withdrawal", - ), - # Metadata too large - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "a200a11864a118c843aa00ff01a119012c590202aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - # error message - "Invalid metadata", - ), - # Metadata is a list - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "82a200a11864a118c843aa00ff01a119012c590100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0A", - # error message - "Invalid metadata", - ), - # Metadata is incomplete - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "a200a11864a118c843aa00ff01", - # error message - "Invalid metadata", - ), - # Metadata has leftover data - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["shelley_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # certificates - [], - # withdrawals - [], - # metadata - "a200a11864a118c843aa00ff01a119012c590100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa000000", - # error message - "Invalid metadata", - ), -] - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "protocol_magic,network_id,inputs,outputs,fee,ttl,certificates,withdrawals,metadata,input_flow_sequences,tx_hash,serialized_tx", - VALID_VECTORS, -) -def test_cardano_sign_tx( - client, - protocol_magic, - network_id, - inputs, - outputs, - fee, - ttl, - certificates, - withdrawals, - metadata, - input_flow_sequences, - tx_hash, - serialized_tx, -): - inputs = [cardano.create_input(i) for i in inputs] - outputs = [cardano.create_output(o) for o in outputs] - certificates = [cardano.create_certificate(c) for c in certificates] - withdrawals = [cardano.create_withdrawal(w) for w in withdrawals] - - expected_responses = [ - messages.ButtonRequest(code=messages.ButtonRequestType.Other) - for i in range(len(input_flow_sequences)) - ] - expected_responses.append(messages.CardanoSignedTx()) - - def input_flow(): - for sequence in input_flow_sequences: - yield - for action in sequence: - if action == InputAction.SWIPE: - client.debug.swipe_up() - elif action == InputAction.YES: - client.debug.press_yes() - else: - raise ValueError("Invalid input action") - - with client: - client.set_expected_responses(expected_responses) - client.set_input_flow(input_flow) - response = cardano.sign_tx( - client=client, - inputs=inputs, - outputs=outputs, - fee=fee, - ttl=ttl, - certificates=certificates, - withdrawals=withdrawals, - metadata=bytes.fromhex(metadata), - protocol_magic=protocol_magic, - network_id=network_id, - ) - assert response.tx_hash.hex() == tx_hash - assert response.serialized_tx.hex() == serialized_tx - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.parametrize( - "protocol_magic,network_id,inputs,outputs,fee,ttl,certificates,withdrawals,metadata,expected_error_message", - INVALID_VECTORS, -) -def test_cardano_sign_tx_validation( - client, - protocol_magic, - network_id, - inputs, - outputs, - fee, - ttl, - certificates, - withdrawals, - metadata, - expected_error_message, -): - inputs = [cardano.create_input(i) for i in inputs] - outputs = [cardano.create_output(o) for o in outputs] - certificates = [cardano.create_certificate(c) for c in certificates] - withdrawals = [cardano.create_withdrawal(w) for w in withdrawals] - - expected_responses = [messages.Failure()] - - with client: - client.set_expected_responses(expected_responses) - - with pytest.raises(TrezorFailure, match=expected_error_message): - cardano.sign_tx( - client=client, - inputs=inputs, - outputs=outputs, - fee=fee, - ttl=ttl, - certificates=certificates, - withdrawals=withdrawals, - metadata=bytes.fromhex(metadata), - protocol_magic=protocol_magic, - network_id=network_id, - ) diff --git a/tests/device_tests/test_msg_cardano_sign_tx_slip39_basic.py b/tests/device_tests/test_msg_cardano_sign_tx_slip39_basic.py deleted file mode 100644 index 2caff27f00..0000000000 --- a/tests/device_tests/test_msg_cardano_sign_tx_slip39_basic.py +++ /dev/null @@ -1,165 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -import pytest - -from trezorlib import cardano, messages -from trezorlib.cardano import NETWORK_IDS, PROTOCOL_MAGICS - -from ..common import MNEMONIC_SLIP39_BASIC_20_3of6 -from .test_msg_cardano_sign_transaction import ( - SAMPLE_INPUTS, - SAMPLE_OUTPUTS, - InputAction, -) - -VALID_VECTORS = [ - # Mainnet transaction without change - ( - # protocol magic - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"]], - # fee - 42, - # ttl - 10, - # input flow - [[InputAction.SWIPE, InputAction.YES], [InputAction.SWIPE, InputAction.YES]], - # tx hash - "73e09bdebf98a9e0f17f86a2d11e0f14f4f8dae77cdf26ff1678e821f20c8db6", - # serialized tx - "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018182582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e802182a030aa1028184582024c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c584055c179ff2beca2c6a78d66de3dea5a6e3134ca3430447c9b73ede73d9b6ae524cde73db59d93a4dfccbbd42b4f4dbacbb655b27171d0f248fdd2d0dc16e0130458206f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b41a0f6", - ), - # Mainnet transaction with change - ( - # protocol magic (mainnet) - PROTOCOL_MAGICS["mainnet"], - # network id - NETWORK_IDS["mainnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["simple_byron_output"], SAMPLE_OUTPUTS["byron_change_output"]], - # fee - 42, - # ttl - 10, - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "4c43ce4c72f145b145ae7add414722735e250d048f61c4585a5becafcbffa6ae", - # serialized tx - "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018282582b82d818582183581c9e1c71de652ec8b85fec296f0685ca3988781c94a2e1a5d89d92f45fa0001a0d0c25611a002dd2e882582b82d818582183581c2ea63b3db3a1865f59c11762a5aede800ed8f2dc0605d75df2ed7c9ca0001ae82668161a000f424002182a030aa1028184582024c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c5840594c986290cc5cddf3c242f2d650fcbfd0705949c9990569798c29e42ca7b0d6e92a589be6962dcce9c53c63de973d84c38cf53374b5329e20973a280abec00d58206f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b41a0f6", - ), - # Testnet transaction - ( - # protocol magic - PROTOCOL_MAGICS["testnet"], - # network id - NETWORK_IDS["testnet"], - # inputs - [SAMPLE_INPUTS["byron_input"]], - # outputs - [SAMPLE_OUTPUTS["testnet_output"], SAMPLE_OUTPUTS["byron_change_output"]], - # fee - 42, - # ttl - 10, - # input flow - [ - [InputAction.SWIPE, InputAction.YES], - [InputAction.YES], - [InputAction.SWIPE, InputAction.YES], - ], - # tx hash - "93a2c3cfb67ef1e4bae167b0f443c3370664bdb9171bc9cd41bad98e5cc049b2", - # serialized tx - "83a400818258201af8fa0b754ff99253d983894e63a2b09cbb56c833ba18c3384210163f63dcfc00018282582f82d818582583581cc817d85b524e3d073795819a25cdbb84cff6aa2bbb3a081980d248cba10242182a001a0fb6fc611a002dd2e882582f82d818582583581c709bfb5d9733cbdd72f520cd2c8b9f8f942da5e6cd0b6994e1803b0aa10242182a001aef14e76d1a000f424002182a030aa1028184582024c4fe188a39103db88818bc191fd8571eae7b284ebcbdf2462bde97b058a95c5840552d1d66972598532fa539faa98cdc7889c8dce00577626a62fb22d0e244d9f49732b6ab65593352a7486123077b7e36308c5048cc8ee6dc465e576f065cb70558206f7a744035f4b3ddb8f861c18446169643cc3ae85e271b4b4f0eda05cf84c65b45a10242182af6", - ), -] - - -@pytest.mark.altcoin -@pytest.mark.cardano -@pytest.mark.skip_t1 # T1 support is not planned -@pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_BASIC_20_3of6, passphrase=True) -@pytest.mark.parametrize( - "protocol_magic,network_id,inputs,outputs,fee,ttl,input_flow_sequences,tx_hash,serialized_tx", - VALID_VECTORS, -) -def test_cardano_sign_tx( - client, - protocol_magic, - network_id, - inputs, - outputs, - fee, - ttl, - input_flow_sequences, - tx_hash, - serialized_tx, -): - inputs = [cardano.create_input(i) for i in inputs] - outputs = [cardano.create_output(o) for o in outputs] - certificates = [] - withdrawals = [] - metadata = bytes() - - expected_responses = [messages.PassphraseRequest()] - expected_responses += [ - messages.ButtonRequest(code=messages.ButtonRequestType.Other) - for i in range(len(input_flow_sequences)) - ] - expected_responses.append(messages.CardanoSignedTx()) - - def input_flow(): - for sequence in input_flow_sequences: - yield - for action in sequence: - if action == InputAction.SWIPE: - client.debug.swipe_up() - elif action == InputAction.YES: - client.debug.press_yes() - else: - raise ValueError("Invalid input action") - - client.use_passphrase("TREZOR") - with client: - client.set_expected_responses(expected_responses) - client.set_input_flow(input_flow) - response = cardano.sign_tx( - client=client, - inputs=inputs, - outputs=outputs, - fee=fee, - ttl=ttl, - certificates=certificates, - withdrawals=withdrawals, - metadata=metadata, - protocol_magic=protocol_magic, - network_id=network_id, - ) - assert response.tx_hash.hex() == tx_hash - assert response.serialized_tx.hex() == serialized_tx diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index a3d7834559..89a541bd92 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -1,4 +1,43 @@ { +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters0-result0]": "6aa71de5007b0faf1eea4b1cfda1da6a739f852c0d875a1e59d83c03178c2f98", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters1-result1]": "7abf2e87a9b1e50afdf3502ba9480b07a59d59ccccf24915b46fb81285ae3fa8", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters10-result10]": "9e09260bd9eb848694f6265008d9faee059d2b3b28d64688807f8bf725acd052", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters11-result11]": "c32706d1092edf9ac2504c88eddfe3e55b8a5b6c0e2d6fcd7fbf84232aabfcb8", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters12-result12]": "39c495f6c8d1a046044b8d49569f51f615b163abeae98c0be8313761de828862", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters13-result13]": "f03f064e8829a27a49296c28755493983d86a235ddeac1c926c7195dd254940f", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters14-result14]": "6aa71de5007b0faf1eea4b1cfda1da6a739f852c0d875a1e59d83c03178c2f98", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters15-result15]": "7abf2e87a9b1e50afdf3502ba9480b07a59d59ccccf24915b46fb81285ae3fa8", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters16-result16]": "d488a0f2c127a675a1c2e2d410b6c4f402cdb610e19886a8998aa5ad786a779e", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters2-result2]": "539936eee440830f64536228980a78b098a8e421e8b6c819fe49bc8efcac9b18", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters3-result3]": "6aa71de5007b0faf1eea4b1cfda1da6a739f852c0d875a1e59d83c03178c2f98", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters4-result4]": "68505427a1021dd3ef7dea03956d1ea3167c8fa3016e90328151618c45d7695e", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters5-result5]": "223fc826cc19d6dd9d768a7564d19d054aa6c596557a40b9e5448c546444d36b", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters6-result6]": "0830d903c59c2d98782c0a87ba5400b656139b26ae3243ae24a1d8874b37bf7e", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters7-result7]": "18adb579bcfe99ca7f62c4c01f32003d19c32313bcd4cf20d93e9f15e7a67ec8", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters8-result8]": "a5ca1d59dedfe9052a9ccaf7fd9aaa98c80a646936dfeb74501848477a9dcb77", +"cardano-test_sign_tx.py::test_cardano_sign_tx[parameters9-result9]": "d99b762b76e5edae82ec0b3f34db1f6122f83350188c8bb44a7214b4d88d2014", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters0-result0]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters1-result1]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters10-result10]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters11-result11]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters12-result12]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters13-result13]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters14-result14]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters15-result15]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters16-result16]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters17-result17]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters18-result18]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters19-result19]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters2-result2]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters20-result20]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters21-result21]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters3-result3]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters4-result4]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters5-result5]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters6-result6]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters7-result7]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters8-result8]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", +"cardano-test_sign_tx.py::test_cardano_sign_tx_failed[parameters9-result9]": "612dad8ab8762162a186ec9279d7de0bdfc589c52b4e4f4eba0545a00f21c3f0", "test_autolock.py::test_apply_auto_lock_delay": "1997527e85989f3ca5719f93cd76bcfb8f125fb96ef3025073b13fd4de7a5fa2", "test_autolock.py::test_apply_auto_lock_delay_valid[10]": "d03aca645ebd8a44c8a1bb24a275e31441245c3211f7c82365b2f432370b05bc", "test_autolock.py::test_apply_auto_lock_delay_valid[123]": "7588a745923a732cd8715ab76f95b7abb9c2caf043075ec1a73e31b2453743a1", @@ -33,66 +72,6 @@ "test_msg_binance_sign_tx.py::test_binance_sign_message[message0-expected_response0]": "d41ee5e01a50f0f96fd7881db1750fab31cfe62c25b4eabbc092cc3daa039c7f", "test_msg_binance_sign_tx.py::test_binance_sign_message[message1-expected_response1]": "7b8bbe5ba7d7b07c95065608fb1cf9aeafcb3f9671835a6e5e5a6997ff4ff99b", "test_msg_binance_sign_tx.py::test_binance_sign_message[message2-expected_response2]": "813ad1b802dee1ace4dfa378edd840dbcea57c1a1b8eed67134def024c40a6e9", -"test_msg_cardano_get_address.py::test_cardano_get_address[m-44'-1815'-0'-0-0-42-2657WMsDfac5F3zbgs9B": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_address[m-44'-1815'-0'-0-0-764824073-Ae2tdPwUPEZ5Y": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_address[m-44'-1815'-0'-0-1-42-2657WMsDfac6ezKWszxL": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_address[m-44'-1815'-0'-0-1-764824073-Ae2tdPwUPEZJb": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_address[m-44'-1815'-0'-0-2-42-2657WMsDfac7hr1ioJGr": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_address[m-44'-1815'-0'-0-2-764824073-Ae2tdPwUPEZFm": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_base_address[m-1852'-1815'-4'-0-0-m-1852'-1815'-4'": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_base_address_with_staking_key_hash[m-1852'-1815'-0": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_base_address_with_staking_key_hash[m-1852'-1815'-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_enterprise_address[m-1852'-1815'-0'-0-0-0-addr_tes": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_enterprise_address[m-1852'-1815'-0'-0-0-1-addr1vxq": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_pointer_address[m-1852'-1815'-0'-0-0-1-2-3-1-addr1": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_pointer_address[m-1852'-1815'-0'-0-0-24157-177-42-": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_reward_address[m-1852'-1815'-0'-2-0-0-stake_test1u": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_address.py::test_cardano_get_reward_address[m-1852'-1815'-0'-2-0-1-stake1uyfz49": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_public_key.py::test_cardano_get_public_key[m-1852'-1815'-0'-d507c8f866691bd96e1": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_public_key.py::test_cardano_get_public_key[m-1852'-1815'-1'-140791584001446365f": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_public_key.py::test_cardano_get_public_key[m-1852'-1815'-2'-ff6ccc3097ca79fc29f": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_public_key.py::test_cardano_get_public_key[m-1852'-1815'-3'-be81ace1f63f4f0cae7": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_public_key.py::test_cardano_get_public_key[m-44'-1815'-0'-c0fce1839f1a84c4e7702": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_get_public_key.py::test_cardano_get_public_key[m-44'-1815'-1'-ea5dde31b9f551e08a5b6": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[42-0-inputs13-outputs13-42-10-certificate": "ae26b018ccceacd0c78de3389a673eca60753a6714f3146296ee17072417ec57", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs0-outputs0-42-10-certif": "fe89b315aeb25a4a449f0cadccdafcf58669d247101b038823aad25e4e7ed670", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs1-outputs1-42-10-certif": "900bd30689093a89966b56fa2663f260b0b2d4c0ba74dc4fb06cb0f45f5b3b4d", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs10-outputs10-42-10-cert": "a4b5f7cd8ff1785604892b52c3518c8753998809e884934865328c37f4506210", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs11-outputs11-42-10-cert": "2122f78c45e89fa9a167a0aa940ffc39eed16aa2727b5a4805c54dcf43b286f2", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs12-outputs12-42-10-cert": "bd3ebb343ce530ca0f022d259344093f9c7ad4f993d100efed41d03749dc4226", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs2-outputs2-42-10-certif": "7a35fb89f41b8730c1df37ab1fc63ee8aa4ba3b14282c68b1b86baf81665ff9c", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs3-outputs3-42-10-certif": "fe89b315aeb25a4a449f0cadccdafcf58669d247101b038823aad25e4e7ed670", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs4-outputs4-42-10-certif": "4c3943345616721c43e5fefa332f28773c8e95ba9896630a4404fb7c683fa9bc", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs5-outputs5-42-10-certif": "09faf9d0ad559154f74ac9cb3962411be07f81c5f310b23249211af1a6d4e1b2", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs6-outputs6-42-10-certif": "3141c25aef3c98eed72a91833b5b55b2a4e3593bb8e79562765eb82321e99685", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs7-outputs7-42-10-certif": "5a2a0a944774c4cbe6721fb06d41117da09394a9198c465db74dd81f037c701d", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs8-outputs8-42-10-certif": "2544c60437f976ce0d47016950154066982299f64bb51001dc060082a99f53f6", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx[764824073-1-inputs9-outputs9-42-10-certif": "5dfb8486bb63465a6a44748a4093cb1cd69c3df7ccd7892d652403cb7eaf802e", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[42-0-inputs10-outputs10-42-10-": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[42-0-inputs8-outputs8-42-10-ce": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[42-1-inputs11-outputs11-42-10-": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-0-inputs12-outputs12": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs0-outputs0-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs1-outputs1-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs13-outputs13": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs14-outputs14": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs15-outputs15": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs16-outputs16": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs17-outputs17": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs18-outputs18": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs19-outputs19": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs2-outputs2-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs20-outputs20": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs21-outputs21": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs3-outputs3-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs4-outputs4-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs5-outputs5-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs6-outputs6-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs7-outputs7-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_transaction.py::test_cardano_sign_tx_validation[764824073-1-inputs9-outputs9-4": "5a80508a71a9ef64f94762b07636f90e464832f0f4a3102af8fa1a8c69e94586", -"test_msg_cardano_sign_tx_slip39_basic.py::test_cardano_sign_tx[42-0-inputs2-outputs2-42-10-input_flo": "d488a0f2c127a675a1c2e2d410b6c4f402cdb610e19886a8998aa5ad786a779e", -"test_msg_cardano_sign_tx_slip39_basic.py::test_cardano_sign_tx[764824073-1-inputs0-outputs0-42-10-in": "6aa71de5007b0faf1eea4b1cfda1da6a739f852c0d875a1e59d83c03178c2f98", -"test_msg_cardano_sign_tx_slip39_basic.py::test_cardano_sign_tx[764824073-1-inputs1-outputs1-42-10-in": "7abf2e87a9b1e50afdf3502ba9480b07a59d59ccccf24915b46fb81285ae3fa8", "test_msg_change_wipe_code_t2.py::test_set_pin_to_wipe_code": "b9c44290bfef91baa76a43fcf72e41092c716c79e5c21ccc368a817e8e52739f", "test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "d280ed129a2ea4781af9e35542aa31ecf63da75fc6812ed3bd05107809f836a4", "test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "c128b6317db1219a88cea645aabead10eae7ba478f344af97b0b09b5cd4b1404",