diff --git a/trezorlib/tests/device_tests/test_msg_ethereum_signtx.py b/trezorlib/tests/device_tests/test_msg_ethereum_signtx.py index a4746de..8011736 100644 --- a/trezorlib/tests/device_tests/test_msg_ethereum_signtx.py +++ b/trezorlib/tests/device_tests/test_msg_ethereum_signtx.py @@ -17,6 +17,7 @@ # along with this library. If not, see . from .common import * +from trezorlib import messages as proto class TestMsgEthereumSigntx(TrezorTest): @@ -24,24 +25,39 @@ class TestMsgEthereumSigntx(TrezorTest): def test_ethereum_signtx_nodata(self): self.setup_mnemonic_nopin_nopassphrase() - sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( - n=[0, 0], - nonce=0, - gas_price=20, - gas_limit=20, - to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), - value=10) + with self.client: + self.client.set_expected_responses([ + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.EthereumTxRequest(data_length=None), # v,r,s checked with assert + ]) + + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( + n=[0, 0], + nonce=0, + gas_price=20, + gas_limit=20, + to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), + value=10) + assert sig_v == 27 assert hexlify(sig_r) == b'9b61192a161d056c66cfbbd331edb2d783a0193bd4f65f49ee965f791d898f72' assert hexlify(sig_s) == b'49c0bbe35131592c6ed5c871ac457feeb16a1493f64237387fab9b83c1a202f7' - sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( - n=[0, 0], - nonce=123456, - gas_price=20000, - gas_limit=20000, - to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), - value=12345678901234567890) + with self.client: + self.client.set_expected_responses([ + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.EthereumTxRequest(data_length=None), + ]) + + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( + n=[0, 0], + nonce=123456, + gas_price=20000, + gas_limit=20000, + to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), + value=12345678901234567890) assert sig_v == 28 assert hexlify(sig_r) == b'6de597b8ec1b46501e5b159676e132c1aa78a95bd5892ef23560a9867528975a' assert hexlify(sig_s) == b'6e33c4230b1ecf96a8dbb514b4aec0a6d6ba53f8991c8143f77812aa6daa993f' @@ -49,26 +65,47 @@ class TestMsgEthereumSigntx(TrezorTest): def test_ethereum_signtx_data(self): self.setup_mnemonic_nopin_nopassphrase() - sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( - n=[0, 0], - nonce=0, - gas_price=20, - gas_limit=20, - to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), - value=10, - data=b'abcdefghijklmnop' * 16) + with self.client: + self.client.set_expected_responses([ + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.EthereumTxRequest(data_length=None), + ]) + + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( + n=[0, 0], + nonce=0, + gas_price=20, + gas_limit=20, + to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), + value=10, + data=b'abcdefghijklmnop' * 16) assert sig_v == 28 assert hexlify(sig_r) == b'6da89ed8627a491bedc9e0382f37707ac4e5102e25e7a1234cb697cedb7cd2c0' assert hexlify(sig_s) == b'691f73b145647623e2d115b208a7c3455a6a8a83e3b4db5b9c6d9bc75825038a' - sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( - n=[0, 0], - nonce=123456, - gas_price=20000, - gas_limit=20000, - to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), - value=12345678901234567890, - data=b'ABCDEFGHIJKLMNOP' * 256 + b'!!!') + + with self.client: + self.client.set_expected_responses([ + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.EthereumTxRequest(data_length=1024, signature_r=None, signature_s=None, signature_v=None), + proto.EthereumTxRequest(data_length=1024), + proto.EthereumTxRequest(data_length=1024), + proto.EthereumTxRequest(data_length=3), + proto.EthereumTxRequest(), + ]) + + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( + n=[0, 0], + nonce=123456, + gas_price=20000, + gas_limit=20000, + to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), + value=12345678901234567890, + data=b'ABCDEFGHIJKLMNOP' * 256 + b'!!!') assert sig_v == 28 assert hexlify(sig_r) == b'4e90b13c45c6a9bf4aaad0e5427c3e62d76692b36eb727c78d332441b7400404' assert hexlify(sig_s) == b'3ff236e7d05f0f9b1ee3d70599bb4200638f28388a8faf6bb36db9e04dc544be' @@ -76,14 +113,26 @@ class TestMsgEthereumSigntx(TrezorTest): def test_ethereum_signtx_message(self): self.setup_mnemonic_nopin_nopassphrase() - sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( - n=[0, 0], - nonce=0, - gas_price=20000, - gas_limit=20000, - to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), - value=0, - data=b'ABCDEFGHIJKLMNOP' * 256 + b'!!!') + with self.client: + self.client.set_expected_responses([ + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.EthereumTxRequest(data_length=1024, signature_r=None, signature_s=None, signature_v=None), + proto.EthereumTxRequest(data_length=1024), + proto.EthereumTxRequest(data_length=1024), + proto.EthereumTxRequest(data_length=3), + proto.EthereumTxRequest(), + ]) + + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( + n=[0, 0], + nonce=0, + gas_price=20000, + gas_limit=20000, + to=unhexlify('1d1c328764a41bda0492b66baa30c4a339ff85ef'), + value=0, + data=b'ABCDEFGHIJKLMNOP' * 256 + b'!!!') assert sig_v == 28 assert hexlify(sig_r) == b'070e9dafda4d9e733fa7b6747a75f8a4916459560efb85e3e73cd39f31aa160d' assert hexlify(sig_s) == b'7842db33ef15c27049ed52741db41fe3238a6fa3a6a0888fcfb74d6917600e41' @@ -102,14 +151,26 @@ class TestMsgEthereumSigntx(TrezorTest): value=12345678901234567890 ) - sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( - n=[0, 0], - nonce=0, - gas_price=20000, - gas_limit=20000, - to='', - value=12345678901234567890, - data=b'ABCDEFGHIJKLMNOP' * 256 + b'!!!') + with self.client: + self.client.set_expected_responses([ + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.EthereumTxRequest(data_length=1024, signature_r=None, signature_s=None, signature_v=None), + proto.EthereumTxRequest(data_length=1024), + proto.EthereumTxRequest(data_length=1024), + proto.EthereumTxRequest(data_length=3), + proto.EthereumTxRequest(), + ]) + + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( + n=[0, 0], + nonce=0, + gas_price=20000, + gas_limit=20000, + to='', + value=12345678901234567890, + data=b'ABCDEFGHIJKLMNOP' * 256 + b'!!!') assert sig_v == 28 assert hexlify(sig_r) == b'b401884c10ae435a2e792303b5fc257a09f94403b2883ad8c0ac7a7282f5f1f9' assert hexlify(sig_s) == b'4742fc9e6a5fa8db3db15c2d856914a7f3daab21603a6c1ce9e9927482f8352e' @@ -159,18 +220,27 @@ class TestMsgEthereumSigntx(TrezorTest): def test_ethereum_signtx_nodata_eip155(self): self.setup_mnemonic_allallall() - sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( - n=[0x80000000 | 44, 0x80000000 | 1, 0x80000000, 0, 0], - nonce=0, - gas_price=20000000000, - gas_limit=21000, - to=unhexlify('8ea7a3fccc211ed48b763b4164884ddbcf3b0a98'), - value=100000000000000000, - chain_id=3) + + with self.client: + self.client.set_expected_responses([ + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.EthereumTxRequest(), + ]) + + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( + n=[0x80000000 | 44, 0x80000000 | 1, 0x80000000, 0, 0], + nonce=0, + gas_price=20000000000, + gas_limit=21000, + to=unhexlify('8ea7a3fccc211ed48b763b4164884ddbcf3b0a98'), + value=100000000000000000, + chain_id=3) assert sig_v == 41 assert hexlify(sig_r) == b'a90d0bc4f8d63be69453dd62f2bb5fff53c610000abf956672564d8a654d401a' assert hexlify(sig_s) == b'544a2e57bc8b4da18660a1e6036967ea581cc635f5137e3ba97a750867c27cf2' + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( n=[0x80000000 | 44, 0x80000000 | 1, 0x80000000, 0, 0], nonce=1, @@ -186,15 +256,23 @@ class TestMsgEthereumSigntx(TrezorTest): def test_ethereum_signtx_data_eip155(self): self.setup_mnemonic_allallall() - sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( - n=[0x80000000 | 44, 0x80000000 | 1, 0x80000000, 0, 0], - nonce=2, - gas_price=20000000000, - gas_limit=21004, - to=unhexlify('8ea7a3fccc211ed48b763b4164884ddbcf3b0a98'), - value=100000000000000000, - data=b'\0', - chain_id=3) + with self.client: + self.client.set_expected_responses([ + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput), + proto.ButtonRequest(code=proto.ButtonRequestType.SignTx), + proto.EthereumTxRequest(), + ]) + + sig_v, sig_r, sig_s = self.client.ethereum_sign_tx( + n=[0x80000000 | 44, 0x80000000 | 1, 0x80000000, 0, 0], + nonce=2, + gas_price=20000000000, + gas_limit=21004, + to=unhexlify('8ea7a3fccc211ed48b763b4164884ddbcf3b0a98'), + value=100000000000000000, + data=b'\0', + chain_id=3) assert sig_v == 42 assert hexlify(sig_r) == b'ba85b622a8bb82606ba96c132e81fa8058172192d15bc41d7e57c031bca17df4' assert hexlify(sig_s) == b'6473b75997634b6f692f8d672193591d299d5bf1c2d6e51f1a14ed0530b91c7d'