From d0b80bddc85ed6fb88194272108f0821607db2ac Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Thu, 16 Apr 2020 14:31:15 +0200 Subject: [PATCH] core/tests: Fix unit tests after sign_tx refactor. --- core/src/trezor/crypto/bech32.py | 13 ++-- core/tests/test_apps.wallet.address.py | 2 +- core/tests/test_apps.wallet.address_grs.py | 2 +- ...apps.wallet.segwit.bip143.native_p2wpkh.py | 11 ++- ...pps.wallet.segwit.bip143.p2wpkh_in_p2sh.py | 11 ++- ...apps.wallet.segwit.signtx.native_p2wpkh.py | 53 ++++++++------ ....wallet.segwit.signtx.native_p2wpkh_grs.py | 42 +++++++---- ...pps.wallet.segwit.signtx.p2wpkh_in_p2sh.py | 70 ++++++++++++------- ...wallet.segwit.signtx.p2wpkh_in_p2sh_grs.py | 45 +++++++----- .../test_apps.wallet.signtx.fee_threshold.py | 26 ++++--- core/tests/test_apps.wallet.signtx.py | 28 ++++---- core/tests/test_apps.wallet.signtx_grs.py | 29 +++++--- core/tests/test_apps.wallet.txweight.py | 19 +++-- core/tests/test_apps.wallet.zcash.zip143.py | 6 +- core/tests/test_apps.wallet.zcash.zip243.py | 6 +- 15 files changed, 226 insertions(+), 137 deletions(-) diff --git a/core/src/trezor/crypto/bech32.py b/core/src/trezor/crypto/bech32.py index ec3f2c4d4e..2cb78141da 100644 --- a/core/src/trezor/crypto/bech32.py +++ b/core/src/trezor/crypto/bech32.py @@ -82,7 +82,7 @@ def bech32_decode(bech: str) -> Tuple[Optional[str], Optional[List[int]]]: def convertbits( data: Iterable[int], frombits: int, tobits: int, pad: bool = True -) -> List[int]: +) -> Optional[List[int]]: """General power-of-2 base conversion.""" acc = 0 bits = 0 @@ -91,7 +91,7 @@ def convertbits( max_acc = (1 << (frombits + tobits - 1)) - 1 for value in data: if value < 0 or (value >> frombits): - raise ValueError + return None acc = ((acc << frombits) | value) & max_acc bits += frombits while bits >= tobits: @@ -101,7 +101,7 @@ def convertbits( if bits: ret.append((acc << (tobits - bits)) & maxv) elif bits >= frombits or ((acc << (tobits - bits)) & maxv): - raise ValueError + return None return ret @@ -111,7 +111,7 @@ def decode(hrp: str, addr: str) -> Tuple[Optional[int], Optional[List[int]]]: if data is None or hrpgot != hrp: return (None, None) decoded = convertbits(data[1:], 5, 8, False) - if len(decoded) < 2 or len(decoded) > 40: + if decoded is None or len(decoded) < 2 or len(decoded) > 40: return (None, None) if data[0] > 16: return (None, None) @@ -122,7 +122,10 @@ def decode(hrp: str, addr: str) -> Tuple[Optional[int], Optional[List[int]]]: def encode(hrp: str, witver: int, witprog: Iterable[int]) -> Optional[str]: """Encode a segwit address.""" - ret = bech32_encode(hrp, [witver] + convertbits(witprog, 8, 5)) + data = convertbits(witprog, 8, 5) + if data is None: + return None + ret = bech32_encode(hrp, [witver] + data) if decode(hrp, ret) == (None, None): return None return ret diff --git a/core/tests/test_apps.wallet.address.py b/core/tests/test_apps.wallet.address.py index ad42e47cae..d2f3cc2367 100644 --- a/core/tests/test_apps.wallet.address.py +++ b/core/tests/test_apps.wallet.address.py @@ -5,8 +5,8 @@ from trezor.utils import HashWriter from apps.wallet.sign_tx.addresses import validate_full_path, validate_path_for_bitcoin_public_key from apps.common.paths import HARDENED from apps.common import coins +from apps.wallet.sign_tx import scripts from apps.wallet.sign_tx.addresses import * -from apps.wallet.sign_tx.signing import * from apps.wallet.sign_tx.writers import * diff --git a/core/tests/test_apps.wallet.address_grs.py b/core/tests/test_apps.wallet.address_grs.py index ccabdfda75..2b85846805 100644 --- a/core/tests/test_apps.wallet.address_grs.py +++ b/core/tests/test_apps.wallet.address_grs.py @@ -1,6 +1,6 @@ from common import * -from apps.wallet.sign_tx.signing import * +from apps.wallet.sign_tx.common import * from apps.wallet.sign_tx.addresses import * from apps.common import coins from trezor.crypto import bip32, bip39 diff --git a/core/tests/test_apps.wallet.segwit.bip143.native_p2wpkh.py b/core/tests/test_apps.wallet.segwit.bip143.native_p2wpkh.py index 5433367d3a..4ed11d7f0d 100644 --- a/core/tests/test_apps.wallet.segwit.bip143.native_p2wpkh.py +++ b/core/tests/test_apps.wallet.segwit.bip143.native_p2wpkh.py @@ -1,11 +1,12 @@ from common import * -from apps.wallet.sign_tx.signing import * +from apps.wallet.sign_tx import bitcoin from apps.wallet.sign_tx.segwit_bip143 import * from apps.common import coins from trezor.messages.SignTx import SignTx from trezor.messages.TxInputType import TxInputType from trezor.messages.TxOutputType import TxOutputType +from trezor.messages import InputScriptType from trezor.messages import OutputScriptType from trezor.crypto import bip32, bip39 @@ -62,13 +63,15 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase): seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '') root = bip32.from_seed(seed, 'secp256k1') coin = coins.by_name(self.tx.coin_name) + coinsig = bitcoin.Bitcoin() + coinsig.initialize(self.tx, root, coin) bip143 = Bip143() for txo in [self.out1, self.out2]: txo_bin = TxOutputBinType() txo_bin.amount = txo.amount - txo_bin.script_pubkey = output_derive_script(txo, coin, root) + txo_bin.script_pubkey = coinsig.output_derive_script(txo) bip143.add_output(txo_bin) self.assertEqual(hexlify(bip143.get_outputs_hash(coin)), @@ -79,6 +82,8 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase): seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '') root = bip32.from_seed(seed, 'secp256k1') coin = coins.by_name(self.tx.coin_name) + coinsig = bitcoin.Bitcoin() + coinsig.initialize(self.tx, root, coin) bip143 = Bip143() bip143.add_prevouts(self.inp1) @@ -89,7 +94,7 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase): for txo in [self.out1, self.out2]: txo_bin = TxOutputBinType() txo_bin.amount = txo.amount - txo_bin.script_pubkey = output_derive_script(txo, coin, root) + txo_bin.script_pubkey = coinsig.output_derive_script(txo) bip143.add_output(txo_bin) # test data public key hash diff --git a/core/tests/test_apps.wallet.segwit.bip143.p2wpkh_in_p2sh.py b/core/tests/test_apps.wallet.segwit.bip143.p2wpkh_in_p2sh.py index 652e82d199..f031c536ff 100644 --- a/core/tests/test_apps.wallet.segwit.bip143.p2wpkh_in_p2sh.py +++ b/core/tests/test_apps.wallet.segwit.bip143.p2wpkh_in_p2sh.py @@ -1,11 +1,12 @@ from common import * -from apps.wallet.sign_tx.signing import * +from apps.wallet.sign_tx import bitcoin from apps.wallet.sign_tx.segwit_bip143 import * from apps.common import coins from trezor.messages.SignTx import SignTx from trezor.messages.TxInputType import TxInputType from trezor.messages.TxOutputType import TxOutputType +from trezor.messages import InputScriptType from trezor.messages import OutputScriptType from trezor.crypto import bip32, bip39 @@ -52,13 +53,15 @@ class TestSegwitBip143(unittest.TestCase): seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '') root = bip32.from_seed(seed, 'secp256k1') coin = coins.by_name(self.tx.coin_name) + coinsig = bitcoin.Bitcoin() + coinsig.initialize(self.tx, root, coin) bip143 = Bip143() for txo in [self.out1, self.out2]: txo_bin = TxOutputBinType() txo_bin.amount = txo.amount - txo_bin.script_pubkey = output_derive_script(txo, coin, root) + txo_bin.script_pubkey = coinsig.output_derive_script(txo) bip143.add_output(txo_bin) self.assertEqual(hexlify(bip143.get_outputs_hash(coin)), @@ -69,6 +72,8 @@ class TestSegwitBip143(unittest.TestCase): seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '') root = bip32.from_seed(seed, 'secp256k1') coin = coins.by_name(self.tx.coin_name) + coinsig = bitcoin.Bitcoin() + coinsig.initialize(self.tx, root, coin) bip143 = Bip143() bip143.add_prevouts(self.inp1) @@ -76,7 +81,7 @@ class TestSegwitBip143(unittest.TestCase): for txo in [self.out1, self.out2]: txo_bin = TxOutputBinType() txo_bin.amount = txo.amount - txo_bin.script_pubkey = output_derive_script(txo, coin, root) + txo_bin.script_pubkey = coinsig.output_derive_script(txo) bip143.add_output(txo_bin) # test data public key hash diff --git a/core/tests/test_apps.wallet.segwit.signtx.native_p2wpkh.py b/core/tests/test_apps.wallet.segwit.signtx.native_p2wpkh.py index 10fb8fa4e6..9a0dbc62f5 100644 --- a/core/tests/test_apps.wallet.segwit.signtx.native_p2wpkh.py +++ b/core/tests/test_apps.wallet.segwit.signtx.native_p2wpkh.py @@ -16,8 +16,11 @@ from trezor.messages import OutputScriptType from apps.common import coins from apps.common.seed import Keychain -from apps.wallet.sign_tx import helpers, signing -from apps.wallet.sign_tx.signing import SigningError +from apps.wallet.sign_tx import helpers, bitcoin +from apps.wallet.sign_tx.common import SigningError + + +EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray()) class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): @@ -26,6 +29,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): def test_send_native_p2wpkh(self): coin = coins.by_name('Testnet') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -58,19 +62,19 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), helpers.UiConfirmForeignAddress(address_n=inp1.address_n), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmOutput(out2, coin), @@ -80,18 +84,21 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): True, # sign tx - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify('01000000000101'), + )), TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify('010000000001018a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff'), + serialized_tx=unhexlify('8a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff02'), )), TxAck(tx=TransactionType(outputs=[out1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify('02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'), + serialized_tx=unhexlify('404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'), signature_index=None, signature=None, )), @@ -114,15 +121,17 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): - self.assertEqual(signer.send(request), response) + res = signer.send(request) + self.assertEqual(res, response) with self.assertRaises(StopIteration): signer.send(None) def test_send_native_p2wpkh_change(self): coin = coins.by_name('Testnet') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -155,38 +164,41 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), helpers.UiConfirmForeignAddress(address_n=inp1.address_n), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmTotal(5000000 + 11000, 11000, coin), True, # sign tx - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify('01000000000101'), + )), TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify('010000000001018a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff'), + serialized_tx=unhexlify('8a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff02'), )), # the out has to be cloned not to send the same object which was modified TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify('02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'), + serialized_tx=unhexlify('404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'), signature_index=None, signature=None, )), @@ -209,7 +221,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): self.assertEqual(signer.send(request), response) with self.assertRaises(StopIteration): @@ -218,6 +230,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): def test_send_native_invalid_address(self): coin = coins.by_name('Testnet') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -243,19 +256,19 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), helpers.UiConfirmForeignAddress(address_n=inp1.address_n), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), None ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): if response is None: with self.assertRaises(SigningError): diff --git a/core/tests/test_apps.wallet.segwit.signtx.native_p2wpkh_grs.py b/core/tests/test_apps.wallet.segwit.signtx.native_p2wpkh_grs.py index 9e13b2483f..c01236e8b0 100644 --- a/core/tests/test_apps.wallet.segwit.signtx.native_p2wpkh_grs.py +++ b/core/tests/test_apps.wallet.segwit.signtx.native_p2wpkh_grs.py @@ -16,7 +16,11 @@ from trezor.messages import OutputScriptType from apps.common import coins from apps.common.seed import Keychain -from apps.wallet.sign_tx import helpers, signing +from apps.wallet.sign_tx import bitcoinlike, helpers + + +EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray()) + # https://groestlsight-test.groestlcoin.org/api/tx/9b5c4859a8a31e69788cb4402812bb28f14ad71cbd8c60b09903478bc56f79a3 @unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin") @@ -26,6 +30,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase): def test_send_native_p2wpkh(self): coin = coins.by_name('Groestlcoin Testnet') + coinsig = bitcoinlike.Bitcoinlike() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -58,16 +63,16 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmOutput(out2, coin), @@ -80,18 +85,21 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase): True, # sign tx - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify('01000000000101'), + )), TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify('01000000000101d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff'), + serialized_tx=unhexlify('d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02'), )), TxAck(tx=TransactionType(outputs=[out1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify('02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'), + serialized_tx=unhexlify('404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'), signature_index=None, signature=None, )), @@ -114,7 +122,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): self.assertEqual(signer.send(request), response) with self.assertRaises(StopIteration): @@ -123,6 +131,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase): def test_send_native_p2wpkh_change(self): coin = coins.by_name('Groestlcoin Testnet') + coinsig = bitcoinlike.Bitcoinlike() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -155,16 +164,16 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmNonDefaultLocktime(tx.lock_time), @@ -174,19 +183,22 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase): True, # sign tx - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify('01000000000101'), + )), TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify('01000000000101d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff'), + serialized_tx=unhexlify('d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02'), )), # the out has to be cloned not to send the same object which was modified TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify('02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'), + serialized_tx=unhexlify('404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'), signature_index=None, signature=None, )), @@ -209,7 +221,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): self.assertEqual(signer.send(request), response) with self.assertRaises(StopIteration): diff --git a/core/tests/test_apps.wallet.segwit.signtx.p2wpkh_in_p2sh.py b/core/tests/test_apps.wallet.segwit.signtx.p2wpkh_in_p2sh.py index bdb6a5391b..812941ff71 100644 --- a/core/tests/test_apps.wallet.segwit.signtx.p2wpkh_in_p2sh.py +++ b/core/tests/test_apps.wallet.segwit.signtx.p2wpkh_in_p2sh.py @@ -16,7 +16,10 @@ from trezor.messages import OutputScriptType from apps.common import coins from apps.common.seed import Keychain -from apps.wallet.sign_tx import helpers, signing +from apps.wallet.sign_tx import bitcoin, common, helpers + + +EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray()) class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): @@ -25,6 +28,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): def test_send_p2wpkh_in_p2sh(self): coin = coins.by_name('Testnet') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -57,16 +61,16 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmOutput(out2, coin), @@ -76,18 +80,21 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): True, # sign tx - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify('01000000000101'), + )), TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify('0100000000010137c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff'), + serialized_tx=unhexlify('37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02'), )), TxAck(tx=TransactionType(outputs=[out1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify('02e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'), + serialized_tx=unhexlify('e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'), signature_index=None, signature=None, )), @@ -110,7 +117,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): self.assertEqual(signer.send(request), response) with self.assertRaises(StopIteration): @@ -119,6 +126,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): def test_send_p2wpkh_in_p2sh_change(self): coin = coins.by_name('Testnet') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -151,18 +159,17 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), - serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), + TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), - serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmTotal(12300000 + 11000, 11000, coin), @@ -170,14 +177,19 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): # sign tx TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), - serialized=None), + serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify( + '01000000000101'), + )), + TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 serialized_tx=unhexlify( - '0100000000010137c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff'), + '37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02'), )), # the out has to be cloned not to send the same object which was modified TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])), @@ -186,7 +198,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): serialized=TxRequestSerializedType( # returned serialized out1 serialized_tx=unhexlify( - '02e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'), + 'e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'), signature_index=None, signature=None, )), @@ -212,7 +224,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): self.assertEqual(signer.send(request), response) with self.assertRaises(StopIteration): @@ -223,6 +235,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): def test_send_p2wpkh_in_p2sh_attack_amount(self): coin = coins.by_name('Testnet') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -265,32 +278,35 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inpattack])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), - serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), - serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmTotal(8, 0, coin), True, TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), - serialized=None), + serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify( + '01000000000101'), + )), + TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inpattack serialized_tx=unhexlify( - '0100000000010137c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff'), + '37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02'), )), # the out has to be cloned not to send the same object which was modified TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])), @@ -299,7 +315,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): serialized=TxRequestSerializedType( # returned serialized out1 serialized_tx=unhexlify( - '0208000000000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'), + '08000000000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'), signature_index=None, signature=None, )), @@ -320,12 +336,12 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) i = 0 messages_count = int(len(messages) / 2) for request, response in chunks(messages, 2): if i == messages_count - 1: # last message should throw SigningError - self.assertRaises(signing.SigningError, signer.send, request) + self.assertRaises(common.SigningError, signer.send, request) else: self.assertEqual(signer.send(request), response) i += 1 diff --git a/core/tests/test_apps.wallet.segwit.signtx.p2wpkh_in_p2sh_grs.py b/core/tests/test_apps.wallet.segwit.signtx.p2wpkh_in_p2sh_grs.py index e62080fa84..6df4203012 100644 --- a/core/tests/test_apps.wallet.segwit.signtx.p2wpkh_in_p2sh_grs.py +++ b/core/tests/test_apps.wallet.segwit.signtx.p2wpkh_in_p2sh_grs.py @@ -16,7 +16,11 @@ from trezor.messages import OutputScriptType from apps.common import coins from apps.common.seed import Keychain -from apps.wallet.sign_tx import helpers, signing +from apps.wallet.sign_tx import bitcoinlike, helpers + + +EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray()) + # https://groestlsight-test.groestlcoin.org/api/tx/4ce0220004bdfe14e3dd49fd8636bcb770a400c0c9e9bff670b6a13bb8f15c72 @unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin") @@ -26,6 +30,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): def test_send_p2wpkh_in_p2sh(self): coin = coins.by_name('Groestlcoin Testnet') + coinsig = bitcoinlike.Bitcoinlike() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -58,16 +63,16 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmOutput(out2, coin), @@ -80,18 +85,21 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): True, # sign tx - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify('01000000000101'), + )), TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 - serialized_tx=unhexlify('01000000000101cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff'), + serialized_tx=unhexlify('cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff02'), )), TxAck(tx=TransactionType(outputs=[out1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized out1 - serialized_tx=unhexlify('02e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac'), + serialized_tx=unhexlify('e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac'), signature_index=None, signature=None, )), @@ -114,7 +122,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): self.assertEqual(signer.send(request), response) with self.assertRaises(StopIteration): @@ -123,6 +131,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): def test_send_p2wpkh_in_p2sh_change(self): coin = coins.by_name('Groestlcoin Testnet') + coinsig = bitcoinlike.Bitcoinlike() seed = bip39.seed(' '.join(['all'] * 12), '') inp1 = TxInputType( @@ -155,18 +164,16 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): None, # check fee - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), - serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), - serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out2])), helpers.UiConfirmNonDefaultLocktime(tx.lock_time), @@ -177,14 +184,18 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): # sign tx TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), - serialized=None), + serialized=TxRequestSerializedType( + # returned serialized header + serialized_tx=unhexlify( + '01000000000101'), + )), TxAck(tx=TransactionType(inputs=[inp1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( # returned serialized inp1 serialized_tx=unhexlify( - '01000000000101cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff'), + 'cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff02'), )), # the out has to be cloned not to send the same object which was modified TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])), @@ -193,7 +204,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): serialized=TxRequestSerializedType( # returned serialized out1 serialized_tx=unhexlify( - '02e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac'), + 'e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac'), signature_index=None, signature=None, )), @@ -218,7 +229,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase): ] keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): self.assertEqual(signer.send(request), response) with self.assertRaises(StopIteration): diff --git a/core/tests/test_apps.wallet.signtx.fee_threshold.py b/core/tests/test_apps.wallet.signtx.fee_threshold.py index 3741e5130f..2ad7c1a19f 100644 --- a/core/tests/test_apps.wallet.signtx.fee_threshold.py +++ b/core/tests/test_apps.wallet.signtx.fee_threshold.py @@ -11,11 +11,15 @@ from trezor.messages.TxAck import TxAck from trezor.messages.TransactionType import TransactionType from trezor.messages.RequestType import TXINPUT, TXOUTPUT, TXMETA from trezor.messages.TxRequestDetailsType import TxRequestDetailsType +from trezor.messages.TxRequestSerializedType import TxRequestSerializedType from trezor.messages import OutputScriptType from apps.common import coins from apps.common.seed import Keychain -from apps.wallet.sign_tx import helpers, signing +from apps.wallet.sign_tx import bitcoin, helpers + + +EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray()) class TestSignTxFeeThreshold(unittest.TestCase): @@ -99,6 +103,7 @@ class TestSignTxFeeThreshold(unittest.TestCase): def test_under_threshold(self): coin_bitcoin = coins.by_name('Bitcoin') + coinsig = bitcoin.Bitcoin() ptx1 = TransactionType(version=1, lock_time=0, inputs_cnt=2, outputs_cnt=1, extra_data_len=0) pinp1 = TxInputType(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'), @@ -134,33 +139,34 @@ class TestSignTxFeeThreshold(unittest.TestCase): messages = [ None, - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), helpers.UiConfirmForeignAddress(address_n=inp1.address_n), True, - TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED), TxAck(tx=ptx1), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[pinp1])), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[pinp2])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(bin_outputs=[pout1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin_bitcoin), True, helpers.UiConfirmTotal(300000 + 90000, 90000, coin_bitcoin), True, - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(serialized_tx=unhexlify('0100000001'))), ] seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '') keychain = Keychain(seed, [[coin_bitcoin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin_bitcoin) for request, response in chunks(messages, 2): - self.assertEqual(signer.send(request), response) + res = signer.send(request) + self.assertEqual(res, response) if __name__ == '__main__': diff --git a/core/tests/test_apps.wallet.signtx.py b/core/tests/test_apps.wallet.signtx.py index a7819d4ba5..716fad2d63 100644 --- a/core/tests/test_apps.wallet.signtx.py +++ b/core/tests/test_apps.wallet.signtx.py @@ -16,7 +16,10 @@ from trezor.messages import OutputScriptType from apps.common import coins from apps.common.seed import Keychain -from apps.wallet.sign_tx import helpers, signing +from apps.wallet.sign_tx import bitcoin, helpers + + +EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray()) class TestSignTx(unittest.TestCase): @@ -27,6 +30,7 @@ class TestSignTx(unittest.TestCase): # input 0: 0.0039 BTC coin_bitcoin = coins.by_name('Bitcoin') + coinsig = bitcoin.Bitcoin() ptx1 = TransactionType(version=1, lock_time=0, inputs_cnt=2, outputs_cnt=1, extra_data_len=0) pinp1 = TxInputType(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'), @@ -60,19 +64,19 @@ class TestSignTx(unittest.TestCase): messages = [ None, - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), helpers.UiConfirmForeignAddress(address_n=inp1.address_n), True, - TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED), TxAck(tx=ptx1), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[pinp1])), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[pinp2])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(bin_outputs=[pout1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin_bitcoin), True, @@ -80,25 +84,25 @@ class TestSignTx(unittest.TestCase): True, # ButtonRequest(code=ButtonRequest_ConfirmOutput), # ButtonRequest(code=ButtonRequest_SignTx), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(serialized_tx=unhexlify('0100000001'))), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( signature_index=0, signature=unhexlify('30450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede781'), - serialized_tx=unhexlify('010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b4830450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede7810121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff'))), + serialized_tx=unhexlify('82488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b4830450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede7810121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff01'))), TxAck(tx=TransactionType(outputs=[out1])), TxRequest(request_type=TXFINISHED, details=None, serialized=TxRequestSerializedType( signature_index=None, signature=None, - serialized_tx=unhexlify('0160cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000'), + serialized_tx=unhexlify('60cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000'), )), ] seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '') keychain = Keychain(seed, [[coin_bitcoin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin_bitcoin) for request, response in chunks(messages, 2): res = signer.send(request) diff --git a/core/tests/test_apps.wallet.signtx_grs.py b/core/tests/test_apps.wallet.signtx_grs.py index 51f004f9f9..cf2d72cc6e 100644 --- a/core/tests/test_apps.wallet.signtx_grs.py +++ b/core/tests/test_apps.wallet.signtx_grs.py @@ -16,7 +16,10 @@ from trezor.messages import OutputScriptType from apps.common import coins from apps.common.seed import Keychain -from apps.wallet.sign_tx import helpers, signing +from apps.wallet.sign_tx import bitcoinlike, helpers + + +EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray()) @unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin") @@ -28,6 +31,7 @@ class TestSignTx_GRS(unittest.TestCase): # ptx1: http://groestlsight.groestlcoin.org/api/tx/cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a coin = coins.by_name('Groestlcoin') + coinsig = bitcoinlike.Bitcoinlike() ptx1 = TransactionType(version=1, lock_time=2160993, inputs_cnt=1, outputs_cnt=1, extra_data_len=0) pinp1 = TxInputType(script_sig=unhexlify('48304502210096a287593b1212a188e778596eb8ecd4cc169b93a4d115226460d8e3deae431c02206c78ec09b3df977f04a6df5eb53181165c4ea5a0b35f826551349130f879d6b8012102cf5126ff54e38a80a919579d7091cafe24840eab1d30fe2b4d59bdd9d267cad8'), @@ -54,15 +58,15 @@ class TestSignTx_GRS(unittest.TestCase): messages = [ None, - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=None), + TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=EMPTY_SERIALIZED), TxAck(tx=ptx1), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(inputs=[pinp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(bin_outputs=[pout1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), helpers.UiConfirmOutput(out1, coin), True, @@ -70,25 +74,28 @@ class TestSignTx_GRS(unittest.TestCase): True, # ButtonRequest(code=ButtonRequest_ConfirmOutput), # ButtonRequest(code=ButtonRequest_SignTx), - TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( + signature_index=None, + signature=None, + serialized_tx=unhexlify('0100000001'))), TxAck(tx=TransactionType(inputs=[inp1])), - TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None), + TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED), TxAck(tx=TransactionType(outputs=[out1])), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( signature_index=0, signature=unhexlify('304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a74302368761'), - serialized_tx=unhexlify('01000000014a9d1fdba915e0907ab02f04f88898863112a2b4fdcf872c7414588c47c874cb000000006a47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e67ffffffff'))), + serialized_tx=unhexlify('4a9d1fdba915e0907ab02f04f88898863112a2b4fdcf872c7414588c47c874cb000000006a47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e67ffffffff01'))), TxAck(tx=TransactionType(outputs=[out1])), TxRequest(request_type=TXFINISHED, details=None, serialized=TxRequestSerializedType( signature_index=None, signature=None, - serialized_tx=unhexlify('01a0330300000000001976a914fe40329c95c5598ac60752a5310b320cb52d18e688ac00000000'), + serialized_tx=unhexlify('a0330300000000001976a914fe40329c95c5598ac60752a5310b320cb52d18e688ac00000000'), )), ] seed = bip39.seed(' '.join(['all'] * 12), '') keychain = Keychain(seed, [[coin.curve_name]]) - signer = signing.sign_tx(tx, keychain) + signer = coinsig.signer(tx, keychain, coin) for request, response in chunks(messages, 2): self.assertEqual(signer.send(request), response) with self.assertRaises(StopIteration): diff --git a/core/tests/test_apps.wallet.txweight.py b/core/tests/test_apps.wallet.txweight.py index becd67ac29..cdd07b3fd6 100644 --- a/core/tests/test_apps.wallet.txweight.py +++ b/core/tests/test_apps.wallet.txweight.py @@ -1,12 +1,13 @@ from common import * from trezor.messages.TxOutputType import TxOutputType +from trezor.messages.SignTx import SignTx from trezor.messages import OutputScriptType from trezor.crypto import bip32, bip39 from apps.common import coins from apps.wallet.sign_tx.tx_weight import * -from apps.wallet.sign_tx import signing +from apps.wallet.sign_tx import bitcoin class TestCalculateTxWeight(unittest.TestCase): @@ -15,9 +16,11 @@ class TestCalculateTxWeight(unittest.TestCase): def test_p2pkh_txweight(self): coin = coins.by_name('Bitcoin') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') root = bip32.from_seed(seed, 'secp256k1') + coinsig.initialize(SignTx(), root, coin) inp1 = TxInputType(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e # amount=390000, @@ -35,7 +38,7 @@ class TestCalculateTxWeight(unittest.TestCase): calculator = TxWeightCalculator(1, 1) calculator.add_input(inp1) - calculator.add_output(signing.output_derive_script(out1, coin, root)) + calculator.add_output(coinsig.output_derive_script(out1)) serialized_tx = '010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b4830450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede7810121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff0160cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000' tx_weight = len(serialized_tx) / 2 * 4 # non-segwit tx's weight is simple length*4 @@ -45,9 +48,11 @@ class TestCalculateTxWeight(unittest.TestCase): def test_p2wpkh_in_p2sh_txweight(self): coin = coins.by_name('Testnet') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') root = bip32.from_seed(seed, 'secp256k1') + coinsig.initialize(SignTx(), root, coin) inp1 = TxInputType( # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX @@ -76,8 +81,8 @@ class TestCalculateTxWeight(unittest.TestCase): calculator = TxWeightCalculator(1, 2) calculator.add_input(inp1) - calculator.add_output(signing.output_derive_script(out1, coin, root)) - calculator.add_output(signing.output_derive_script(out2, coin, root)) + calculator.add_output(coinsig.output_derive_script(out1)) + calculator.add_output(coinsig.output_derive_script(out2)) self.assertEqual(calculator.get_total(), 670) # non-segwit: header, inputs, outputs, locktime 4*(4+65+67+4) = 560 @@ -87,9 +92,11 @@ class TestCalculateTxWeight(unittest.TestCase): def test_native_p2wpkh_txweight(self): coin = coins.by_name('Testnet') + coinsig = bitcoin.Bitcoin() seed = bip39.seed(' '.join(['all'] * 12), '') root = bip32.from_seed(seed, 'secp256k1') + coinsig.initialize(SignTx(), root, coin) inp1 = TxInputType( # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s @@ -118,8 +125,8 @@ class TestCalculateTxWeight(unittest.TestCase): calculator = TxWeightCalculator(1, 2) calculator.add_input(inp1) - calculator.add_output(signing.output_derive_script(out1, coin, root)) - calculator.add_output(signing.output_derive_script(out2, coin, root)) + calculator.add_output(coinsig.output_derive_script(out1)) + calculator.add_output(coinsig.output_derive_script(out2)) self.assertEqual(calculator.get_total(), 566) # non-segwit: header, inputs, outputs, locktime 4*(4+42+64+4) = 456 diff --git a/core/tests/test_apps.wallet.zcash.zip143.py b/core/tests/test_apps.wallet.zcash.zip143.py index 8c7d3eaba2..161702d034 100644 --- a/core/tests/test_apps.wallet.zcash.zip143.py +++ b/core/tests/test_apps.wallet.zcash.zip143.py @@ -169,9 +169,9 @@ class TestZcashZip143(unittest.TestCase): txo.script_pubkey = unhexlify(o["script_pubkey"]) zip143.add_output(txo) - self.assertEqual(hexlify(zip143.get_prevouts_hash()), v["prevouts_hash"]) - self.assertEqual(hexlify(zip143.get_sequence_hash()), v["sequence_hash"]) - self.assertEqual(hexlify(zip143.get_outputs_hash()), v["outputs_hash"]) + self.assertEqual(hexlify(zip143.get_prevouts_hash(coin)), v["prevouts_hash"]) + self.assertEqual(hexlify(zip143.get_sequence_hash(coin)), v["sequence_hash"]) + self.assertEqual(hexlify(zip143.get_outputs_hash(coin)), v["outputs_hash"]) self.assertEqual( hexlify( zip143.preimage_hash( diff --git a/core/tests/test_apps.wallet.zcash.zip243.py b/core/tests/test_apps.wallet.zcash.zip243.py index b4ed1e0792..64eb3a09c3 100644 --- a/core/tests/test_apps.wallet.zcash.zip243.py +++ b/core/tests/test_apps.wallet.zcash.zip243.py @@ -203,9 +203,9 @@ class TestZcashZip243(unittest.TestCase): txo.script_pubkey = unhexlify(o["script_pubkey"]) zip243.add_output(txo) - self.assertEqual(hexlify(zip243.get_prevouts_hash()), v["prevouts_hash"]) - self.assertEqual(hexlify(zip243.get_sequence_hash()), v["sequence_hash"]) - self.assertEqual(hexlify(zip243.get_outputs_hash()), v["outputs_hash"]) + self.assertEqual(hexlify(zip243.get_prevouts_hash(coin)), v["prevouts_hash"]) + self.assertEqual(hexlify(zip243.get_sequence_hash(coin)), v["sequence_hash"]) + self.assertEqual(hexlify(zip243.get_outputs_hash(coin)), v["outputs_hash"]) self.assertEqual( hexlify( zip243.preimage_hash(