fix(tests): fix illegal paths in device tests

pull/1328/head
matejcik 4 years ago committed by matejcik
parent eadf8ab25f
commit f3b6de399a

@ -189,7 +189,7 @@ class TestMsgApplysettings:
assert client.features.safety_checks == messages.SafetyCheckLevel.PromptAlways
with client:
client.set_expected_responses([messages.ButtonRequest, messages.Address])
client.set_expected_responses([messages.Address])
get_bad_address()
with client:
@ -217,7 +217,7 @@ class TestMsgApplysettings:
)
with client:
client.set_expected_responses([messages.ButtonRequest, messages.Address])
client.set_expected_responses([messages.Address])
get_bad_address()
@pytest.mark.skip_t1

@ -17,42 +17,25 @@
import pytest
from trezorlib import ethereum
from trezorlib.tools import H_
from trezorlib.tools import parse_path
from ..common import MNEMONIC12
VECTORS = ( # path, address
("m/44'/60'/0'", "0xdA0b608bdb1a4A154325C854607c68950b4F1a34"),
("m/44'/60'/100'", "0x93Fb0Ff84F5BB6E7b6a9835C7AA6dE7a76794266"),
("m/44'/60'/0'/0/0", "0x73d0385F4d8E00C5e6504C6030F47BF6212736A8"),
("m/44'/60'/0'/0/100", "0x1e6E3708a059aEa1241a81c7aAe84b6CDbC54d59"),
# ETC
("m/44'/61'/0'/0/0", "0xF410e37E9C8BCf8CF319c84Ae9dCEbe057804a04"),
# GoChain
("m/44'/6060'/0'/0/0", "0xA26a450ef46a5f11a510eBA2119A3236fa0Aca92"),
# Wanchain
("m/44'/5718350'/0'/0/0", "0xe432a7533D689ceed00B7EE91d9368b8A1693bD2"),
)
@pytest.mark.altcoin
@pytest.mark.ethereum
class TestMsgEthereumGetaddress:
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
def test_ethereum_getaddress(self, client):
assert (
ethereum.get_address(client, [H_(44), H_(60)])
== "0xE025dfbE2C53638E547C6487DED34Add7b8Aafc1"
)
assert (
ethereum.get_address(client, [H_(44), H_(60), 1])
== "0xeD46C856D0c79661cF7d40FFE0C0C5077c00E898"
)
assert (
ethereum.get_address(client, [H_(44), H_(60), 0, H_(1)])
== "0x6682Fa7F3eC58581b1e576268b5463B4b5c93839"
)
assert (
ethereum.get_address(client, [H_(44), H_(60), H_(9), 0])
== "0xFb3BE0F9717fF5fCF3C58EB49a9Ed67F1BD89D4E"
)
assert (
ethereum.get_address(client, [H_(44), H_(60), 0, 9999999])
== "0x6b909b50d88c9A8E02453A87b3662E3e7a5E0CF1"
)
assert (
ethereum.get_address(client, [H_(44), H_(6060), 0, 9999999])
== "0x98b8e926bd224764De2A0E4f4CBe1521474050AF"
)
# Wanchain SLIP44 id
assert (
ethereum.get_address(client, [H_(44), H_(5718350), H_(0)])
== "0x4d643B1b556E14A27143a38bcE61230FFf5AFca8"
)
@pytest.mark.parametrize("path, address", VECTORS)
def test_ethereum_getaddress(client, path, address):
address_n = parse_path(path)
assert ethereum.get_address(client, address_n) == address

@ -17,55 +17,50 @@
import pytest
from trezorlib import ethereum
from trezorlib.tools import H_
from trezorlib.tools import parse_path
from ..common import MNEMONIC12
PATH = parse_path("m/44h/60h/0h/0/0")
ADDRESS = "0x73d0385F4d8E00C5e6504C6030F47BF6212736A8"
VECTORS = ( # message, signature
(
"This is an example of a signed message.",
"af4eac50f21acc6daeb0ab036f616f5d19fccade46e47100642b3dfc798c9b740d5873887bdc2f02502c90777a082d10dca113bd1ec29d08108396401421c8cc1b",
),
(
"VeryLongMessage!" * 64,
"e9b3648fe10146a7c5c73ae1e42468273b945554b13769be19c3658e5b55c62d7036b56c1e094dc364060b798b120a528f31d91e815d0612c367bf7471519c761c",
),
(
"MsgLenIs9",
"495b5b021517cd01cb05f02dfb6a1f79a8d9e4f82e8fb01d44ebf7d1218333f1528b67043ffc25c5b64b1e5a182f5d7d5707fcb639092af708969f90038155a91c",
),
(
"MsgLenIs10",
"0c8eb57decbb95d2a783e69d444b3747c49ebcceb14f24287732ba77c39aa5cd2c66f7ec545b8108ef7ce078edac4588c70ab6249fc626114a95606783828f041b",
),
(
"MsgLenIs11!",
"5f1ab8940c2137baf69a2b94f55f0f7e53a022b9e363b564744616271eb89b66145055fc9923c6ead63dd784854c742f4f5651c8257d70cbce5a96ce2986dd311c",
),
(
"This message has length 99" + 73 * "!",
"f2c3d9c81fe35a6bc68f0ace01bd7209baf11e455e7335903e7ad2879ce5d7bc2199bf8bafc1efe1ff2cfdf2963cd5767911a641c9445cca6f37dc6da72fd1611b",
),
(
"This message has length 100" + 73 * "!",
"a6d05d98180246cbd7084f191465d02c4242bc7f856632a2b5b43acd496c46c03a36cc60bfeca6ca98fd210748a3aa68aa7ebba71b39adcad7f88325fc34131a1b",
),
(
"This message has length 101" + 74 * "!",
"fa9d60644436f27eb88956a50893e9a47f67c42fb1b57a44bde4c6e127ab777e0c23b234b6ec9327ffd0620daaa514243ebb5a3652a1bac2d720e0f5555b2e071c",
),
)
@pytest.mark.altcoin
@pytest.mark.ethereum
class TestMsgEthereumSignmessage:
PATH = [H_(44), H_(60), H_(0), 0]
ADDRESS = "0xEa53AF85525B1779eE99ece1a5560C0b78537C3b"
VECTORS = [
(
"This is an example of a signed message.",
"9bacd833b51fde010bab53bafd9d832eadd3b175d2af2e629bb2944fcc987dce7ff68bb3571ed25a720c220f2f9538bc8d04f582bee002c9af086590a49805901c",
),
(
"VeryLongMessage!" * 64,
"752d283b3aea1eb44fd09203f4d5c430a6544e399b8500b02722b54325f6d8d457fd83460a31045cb0d6e8356240954ba072fdfe5cdb3f16d416e2acf1a180a51c",
),
(
"MsgLenIs9",
"6570bd48d38a68ade78273fca18943ed36ec48cb2eb5b6792bc56f20588b1c75020f04b86740321e562eb2ec2022eec4ad673dc120c6895983856e5437cb95c91c",
),
(
"MsgLenIs10",
"5f26de400e53a333479ce9518ef0724b81615b3e3842c3205754f48a9ff1a3fc0e383ccb7dabdfd8e284abe69c0065f15f033f37210f5efeccfc9a6b0813a2af1b",
),
(
"MsgLenIs11!",
"7d8c1deec29c01c1982f46a91e1d9d99e399374b8aac875703ca947583ec6d944e7579d3934ac10e910a2959daa9e89fa5f4c0fc62bacdc8ec788d09b22e2ad61c",
),
(
"This message has length 99" + 73 * "!",
"ac255920b53788eb81f5debd3792554ee4666d38059c8c39f74abd4032483fce2365af2236b8edf83801ad6e57f1e126e55a7757f2a2ebc991efe495b48d16d01c",
),
(
"This message has length 100" + 73 * "!",
"47a70be8e7161a2c597de2237ba3846218e86561e9b5115b7fe9604ab63c05f85456204ba309e11e3b242a8c09a166ce611fb34bf1c54598162bbcce749549ea1b",
),
(
"This message has length 101" + 74 * "!",
"0f413d3eff519c52ba01333b8bd132d20c2e62e3a77483e6a803dc3b711e3c2e11548f21687764a7290347079c00fc9dd976e060600d774bf1ae2f99bd8803bf1c",
),
]
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
def test_sign(self, client):
for msg, sig in self.VECTORS:
res = ethereum.sign_message(client, self.PATH, msg)
assert res.address == self.ADDRESS
assert res.signature.hex() == sig
@pytest.mark.parametrize("message, signature", VECTORS)
def test_sign(client, message, signature):
res = ethereum.sign_message(client, PATH, message)
assert res.address == ADDRESS
assert res.signature.hex() == signature

@ -16,8 +16,9 @@
import pytest
from trezorlib import btc, messages
from trezorlib import btc, messages, device
from trezorlib.exceptions import TrezorFailure
from trezorlib.messages import SafetyCheckLevel
from trezorlib.tools import parse_path
from .. import bip32
@ -227,6 +228,13 @@ def test_invalid_path(client):
@pytest.mark.skip_t1
def test_unknown_path(client):
with pytest.raises(TrezorFailure, match="Forbidden key path"):
# account number is too high
btc.get_address(client, "Bitcoin", parse_path("m/44'/0'/101'/0/0"))
# disable safety checks
device.apply_settings(client, safety_checks=SafetyCheckLevel.PromptTemporarily)
with client:
client.set_expected_responses(
[
@ -236,8 +244,8 @@ def test_unknown_path(client):
messages.Address,
]
)
# account number is too high
btc.get_address(client, "Bitcoin", parse_path("m/44'/0'/21'/0/0"))
# try again with a warning
btc.get_address(client, "Bitcoin", parse_path("m/44'/0'/101'/0/0"))
@pytest.mark.altcoin

@ -101,31 +101,31 @@ class TestMsgGetaddressSegwitNative:
for index in range(1, 4)
]
multisig1 = proto.MultisigRedeemScriptType(
nodes=nodes, address_n=[2, 0], signatures=[b"", b"", b""], m=2
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
)
multisig2 = proto.MultisigRedeemScriptType(
nodes=nodes, address_n=[2, 1], signatures=[b"", b"", b""], m=2
nodes=nodes, address_n=[0, 1], signatures=[b"", b"", b""], m=2
)
for i in [1, 2, 3]:
assert (
btc.get_address(
client,
"Testnet",
parse_path("84'/1'/%d'/2/1" % i),
parse_path("84'/1'/%d'/0/1" % i),
False,
multisig2,
script_type=proto.InputScriptType.SPENDWITNESS,
)
== "tb1qnqlw0gwzpcdken0sarskrgxf7l36pprlfy4uk7yf98jz9rfd36ss2tc6ja"
== "tb1qauuv4e2pwjkr4ws5f8p20hu562jlqpe5h74whxqrwf7pufsgzcms9y8set"
)
assert (
btc.get_address(
client,
"Testnet",
parse_path("84'/1'/%d'/2/0" % i),
parse_path("84'/1'/%d'/0/0" % i),
False,
multisig1,
script_type=proto.InputScriptType.SPENDWITNESS,
)
== "tb1qaqrlzu8unz58p77d30ej85n3gv5574alkqw0qcjsyd2hs9frp2vstew67z"
== "tb1qgvn67p4twmpqhs8c39tukmu9geamtf7x0z3flwf9rrw4ff3h6d2qt0czq3"
)

@ -54,7 +54,7 @@ def test_show(client, path, script_type, address):
@pytest.mark.multisig
def test_show_multisig_3(client):
node = btc.get_public_node(
client, tools.parse_path("44h/0h/0h/0"), coin_name="Bitcoin"
client, tools.parse_path("45h/0/0"), coin_name="Bitcoin"
).node
multisig = messages.MultisigRedeemScriptType(
pubkeys=[
@ -71,11 +71,11 @@ def test_show_multisig_3(client):
btc.get_address(
client,
"Bitcoin",
tools.parse_path(f"44h/0h/0h/0/{i}"),
tools.parse_path(f"45h/0/0/{i}"),
show_display=True,
multisig=multisig,
)
== "36AvLYugbb9CsN8sQ5k7kJ2diWF54msYKs"
== "35Q3tgZZfr9GhVpaqz7fbDK8WXV1V1KxfD"
)
@ -84,7 +84,7 @@ def test_show_multisig_3(client):
def test_show_multisig_xpubs(client):
nodes = [
btc.get_public_node(
client, tools.parse_path(f"48h/0h/{i}h"), coin_name="Bitcoin"
client, tools.parse_path(f"48h/0h/{i}h/0h"), coin_name="Bitcoin"
)
for i in range(3)
]
@ -103,8 +103,8 @@ def test_show_multisig_xpubs(client):
yield # show address
assert client.debug.wait_layout().lines == [
"Multisig 2 of 3",
"34yJV2b2GtbmxfZNw",
"jPyuyUYkUbUnogqa8",
"33TU5DyVi2kFSGQUf",
"mZxNHgPDPqruwdesY",
]
client.debug.press_no()
@ -146,7 +146,7 @@ def test_show_multisig_xpubs(client):
btc.get_address(
client,
"Bitcoin",
tools.parse_path(f"48h/0h/{i}h/0/0"),
tools.parse_path(f"48h/0h/{i}h/0h/0/0"),
show_display=True,
multisig=multisig,
script_type=messages.InputScriptType.SPENDMULTISIG,
@ -156,7 +156,7 @@ def test_show_multisig_xpubs(client):
@pytest.mark.multisig
def test_show_multisig_15(client):
node = btc.get_public_node(
client, tools.parse_path("44h/0h/0h/0"), coin_name="Bitcoin"
client, tools.parse_path("45h/0/0"), coin_name="Bitcoin"
).node
pubs = [messages.HDNodePathType(node=node, address_n=[x]) for x in range(15)]
@ -170,9 +170,9 @@ def test_show_multisig_15(client):
btc.get_address(
client,
"Bitcoin",
tools.parse_path(f"44h/0h/0h/0/{i}"),
tools.parse_path(f"45h/0/0/{i}"),
show_display=True,
multisig=multisig,
)
== "3D9EDNTZde5KizWdjidELFzx7xtrcdM7AG"
== "3GG78bp1hA3mu9xv1vZLXiENmeabmi7WKQ"
)

@ -19,20 +19,18 @@ import pytest
from trezorlib import lisk
from trezorlib.tools import parse_path
from ..common import MNEMONIC12
LISK_PATH = parse_path("m/44h/134h/0h/1h")
@pytest.mark.altcoin
@pytest.mark.lisk
class TestMsgLiskGetaddress:
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
def test_lisk_getaddress(self, client):
assert lisk.get_address(client, LISK_PATH[:2]) == "1431530009238518937L"
assert lisk.get_address(client, LISK_PATH[:3]) == "17563781916205589679L"
assert lisk.get_address(client, LISK_PATH) == "1874186517773691964L"
assert (
lisk.get_address(client, parse_path("m/44h/134h/999h/999h"))
== "16295203558710684671L"
)
@pytest.mark.parametrize(
"path, address",
(
("m/44h/134h/0h", "3685460048641680438L"),
("m/44h/134h/1h", "2178885030141662239L"),
("m/44h/134h/100h", "7191894793645699638L"),
("m/44h/1h/0h", "8365436719773013410L"),
),
)
def test_lisk_getaddress(client, path, address):
address_n = parse_path(path)
assert lisk.get_address(client, address_n) == address

@ -19,18 +19,12 @@ import pytest
from trezorlib import lisk
from trezorlib.tools import parse_path
from ..common import MNEMONIC12
LISK_PATH = parse_path("m/44h/134h/0h/0h")
@pytest.mark.altcoin
@pytest.mark.lisk
class TestMsgLiskGetPublicKey:
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
def test_lisk_get_public_key(self, client):
sig = lisk.get_public_key(client, LISK_PATH)
assert (
sig.public_key.hex()
== "eb56d7bbb5e8ea9269405f7a8527fe126023d1db2c973cfac6f760b60ae27294"
)
def test_lisk_get_public_key(client):
sig = lisk.get_public_key(client, parse_path("m/44h/134h/0h"))
assert (
sig.public_key.hex()
== "68ffcc8fd29675264ba2c01e0926697b66b197179e130d4996ee07cd13892c1c"
)

@ -19,36 +19,28 @@ import pytest
from trezorlib import lisk
from trezorlib.tools import parse_path
from ..common import MNEMONIC12
LISK_PATH = parse_path("m/44h/134h/0h/0h")
LISK_PATH = parse_path("m/44h/134h/0h")
LISK_PUBKEY = "68ffcc8fd29675264ba2c01e0926697b66b197179e130d4996ee07cd13892c1c"
@pytest.mark.altcoin
@pytest.mark.lisk
class TestMsgLiskSignmessage:
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
def test_sign(self, client):
sig = lisk.sign_message(
client, LISK_PATH, "This is an example of a signed message."
)
assert (
sig.public_key.hex()
== "eb56d7bbb5e8ea9269405f7a8527fe126023d1db2c973cfac6f760b60ae27294"
)
assert (
sig.signature.hex()
== "7858ae7cd52ea6d4b17e800ca60144423db5560bfd618b663ffbf26ab66758563df45cbffae8463db22dc285dd94309083b8c807776085b97d05374d79867d05"
)
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
def test_sign_long(self, client):
sig = lisk.sign_message(client, LISK_PATH, "VeryLongMessage!" * 64)
assert (
sig.public_key.hex()
== "eb56d7bbb5e8ea9269405f7a8527fe126023d1db2c973cfac6f760b60ae27294"
)
assert (
sig.signature.hex()
== "19c26f4b6f2ecf2feef57d22237cf97eb7862fdc2fb8c303878843f5dd728191f7837cf8d0ed41f8e470b15181223a3a5131881add9c22b2453b01be4edef104"
)
@pytest.mark.parametrize(
"message, signature",
(
pytest.param(
"This is an example of a signed message.",
"96dbdc588b6ec21a17b3d6d6c3c323179376302094c1125f106c9df2d44df9e8f579c8ea241caed7796feb490a7f3ffb8ff4a54a1f8cc437fa59381c32a01408",
id="short",
),
pytest.param(
"VeryLongMessage!" * 64,
"fdac2a32d0d2f39a5ad189daa843ccae6816f0cee17f54667edbbc4119aea2dbce2877e4c660ec4d9a916cb122674efdb435ff0de08a1950e71958b4ae450609",
id="long",
),
),
)
def test_sign(client, message, signature):
sig = lisk.sign_message(client, LISK_PATH, message)
assert sig.public_key.hex() == LISK_PUBKEY
assert sig.signature.hex() == signature

@ -50,37 +50,6 @@ class TestMsgLiskSignTx:
},
)
@pytest.mark.skip_t1
def test_lisk_sign_tx_send_wrong_path(self, client):
with client:
client.set_expected_responses(
[
proto.ButtonRequest(
code=proto.ButtonRequestType.UnknownDerivationPath
),
proto.ButtonRequest(code=proto.ButtonRequestType.SignTx),
proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput),
proto.LiskSignedTx(
signature=bytes.fromhex(
"cdce9eba2ea8fa75f90fbc725f0d9de6152c7189a3044ab2fe307d9ff54754856e09125d7a15376eaf4bb5451b63881821948222ccd9ffb5da4d9b1aa8bd4904"
)
),
]
)
lisk.sign_tx(
client,
parse_path("m/44'/134'/123456'/123456'/123456'/123456'/123456'"),
{
"amount": "10000000",
"recipientId": "9971262264659915921L",
"timestamp": 57525937,
"type": 0,
"fee": "10000000",
"asset": {},
},
)
def test_lisk_sign_tx_send_with_data(self, client):
with client:
client.set_expected_responses(

@ -255,7 +255,7 @@ class TestMsgSigntxBch:
def test_send_bch_multisig_wrongchange(self, client):
nodes = [
btc.get_public_node(
client, parse_path(f"48'/145'/{i}'"), coin_name="Bcash"
client, parse_path(f"48'/145'/{i}'/0'"), coin_name="Bcash"
).node
for i in range(1, 4)
]
@ -280,7 +280,7 @@ class TestMsgSigntxBch:
"304402207274b5a4d15e75f3df7319a375557b0efba9b27bc63f9f183a17da95a6125c94022000efac57629f1522e2d3958430e2ef073b0706cfac06cce492651b79858f09ae"
)
inp1 = proto.TxInputType(
address_n=parse_path("48'/145'/1'/1/0"),
address_n=parse_path("48'/145'/1'/0'/1/0"),
multisig=getmultisig(1, 0, [b"", sig, b""]),
# bitcoincash:pp6kcpkhua7789g2vyj0qfkcux3yvje7euhyhltn0a
amount=24000,
@ -289,7 +289,7 @@ class TestMsgSigntxBch:
script_type=proto.InputScriptType.SPENDMULTISIG,
)
out1 = proto.TxOutputType(
address_n=parse_path("48'/145'/1'/1/1"),
address_n=parse_path("48'/145'/1'/0'/1/1"),
multisig=proto.MultisigRedeemScriptType(
pubkeys=[
proto.HDNodePathType(node=nodes[0], address_n=[1, 1]),
@ -324,18 +324,18 @@ class TestMsgSigntxBch:
)
assert (
signatures1[0].hex()
== "304402201badcdcafef4855ed58621f95935efcbc72068510472140f4ec5e252faa0af93022003310a43488288f70aedee96a5af2643a255268a6858cda9ae3001ea5e3c7557"
== "304402205ce02f7bf3ef225e4a17e2b5a98dc6ca5536a6b68088f94200390a1d505c4f3e022045657781095e01422736c5541b03b014101d76e54089eda030cb016dfce10e98"
)
assert (
serialized_tx.hex()
== "01000000015f3d291cae106548f3be5ed0f4cbedc65668fa881d60347ab0d512df10af8cf601000000fc0047304402201badcdcafef4855ed58621f95935efcbc72068510472140f4ec5e252faa0af93022003310a43488288f70aedee96a5af2643a255268a6858cda9ae3001ea5e3c75574147304402207274b5a4d15e75f3df7319a375557b0efba9b27bc63f9f183a17da95a6125c94022000efac57629f1522e2d3958430e2ef073b0706cfac06cce492651b79858f09ae414c69522102245739b55787a27228a4fe78b3a324366cc645fbaa708cad45da351a334341192102debbdcb0b6970d5ade84a50fdbda1c701cdde5c9925d9b6cd8e05a9a15dbef352102ffe5fa04547b2b0c3cfbc21c08a1ddfb147025fee10274cdcd5c1bdeee88eae253aeffffffff01d85900000000000017a914a23eb2a1ed4003d357770120f5c370e199ee55468700000000"
== "01000000015f3d291cae106548f3be5ed0f4cbedc65668fa881d60347ab0d512df10af8cf601000000fc0047304402205ce02f7bf3ef225e4a17e2b5a98dc6ca5536a6b68088f94200390a1d505c4f3e022045657781095e01422736c5541b03b014101d76e54089eda030cb016dfce10e984147304402207274b5a4d15e75f3df7319a375557b0efba9b27bc63f9f183a17da95a6125c94022000efac57629f1522e2d3958430e2ef073b0706cfac06cce492651b79858f09ae414c69522102962724052105f03332ab700812afc5ca665d264b13339be1fe7f7fdd3a2a685821024364cd1fdc2aa05bc8b09874a57aa1082a47ac9062d35f22ed5f4afefb3f67fc21024d375b44804f3b0c3493ea0806eb25cc85f51e0d616d6bd6e4ef0388e71cd29e53aeffffffff01d85900000000000017a9140d5566bfc721e6c3d5ab583841d387f3939ffed38700000000"
)
@pytest.mark.multisig
def test_send_bch_multisig_change(self, client):
nodes = [
btc.get_public_node(
client, parse_path(f"48'/145'/{i}'"), coin_name="Bcash"
client, parse_path(f"48'/145'/{i}'/0'"), coin_name="Bcash"
).node
for i in range(1, 4)
]
@ -346,7 +346,7 @@ class TestMsgSigntxBch:
)
inp1 = proto.TxInputType(
address_n=parse_path("48'/145'/3'/0/0"),
address_n=parse_path("48'/145'/3'/0'/0/0"),
multisig=getmultisig(0, 0),
amount=48490,
prev_hash=TXHASH_8b6db9,
@ -359,7 +359,7 @@ class TestMsgSigntxBch:
script_type=proto.OutputScriptType.PAYTOADDRESS,
)
out2 = proto.TxOutputType(
address_n=parse_path("48'/145'/3'/1/0"),
address_n=parse_path("48'/145'/3'/0'/1/0"),
multisig=getmultisig(1, 0),
script_type=proto.OutputScriptType.PAYTOMULTISIG,
amount=24000,
@ -388,11 +388,11 @@ class TestMsgSigntxBch:
assert (
signatures1[0].hex()
== "3045022100a05f77bb39515c21c43e6c4ba401f39ed5d409dc3cfcd90f9a8345a08cc4bc8202205faf8f3b0775748278495324fdd60f370460452e4995e546450209ec4804a0f3"
== "304402202b75dbb307d2556b9a85851d27ab118b3f06344bccb6e21b0a5dfcf74e0e644f02206611c59396d44741d34fd7bb602be06ef91690b22b47c3f3c271e15e20176ac0"
)
inp1 = proto.TxInputType(
address_n=parse_path("48'/145'/1'/0/0"),
address_n=parse_path("48'/145'/1'/0'/0/0"),
multisig=getmultisig(0, 0, [b"", b"", signatures1[0]]),
# bitcoincash:pqguz4nqq64jhr5v3kvpq4dsjrkda75hwy86gq0qzw
amount=48490,
@ -426,11 +426,11 @@ class TestMsgSigntxBch:
assert (
signatures1[0].hex()
== "3044022006f239ef1f065a70873ab9d2c81a623a04ec7a37a0ec5299d3c585668f441f49022032b2f9ef13bc61230d14f6d79b9ad1bbebdf47b95e4757e9af1b1dcdf520d3ab"
== "3045022100cc12faf18a489d8014e978ef7ca0760aa6487cdb40b49dd991bfe9c66625f5a802206088fef49ecad30679d55eaa870741bbb8b83fac08eb078872ac276c8139015d"
)
assert (
serialized_tx.hex()
== "0100000001a07660b10df9868df9393c9cf8962bc34f48cb2cea53b0865d2324bab8b96d8b00000000fdfd0000473044022006f239ef1f065a70873ab9d2c81a623a04ec7a37a0ec5299d3c585668f441f49022032b2f9ef13bc61230d14f6d79b9ad1bbebdf47b95e4757e9af1b1dcdf520d3ab41483045022100a05f77bb39515c21c43e6c4ba401f39ed5d409dc3cfcd90f9a8345a08cc4bc8202205faf8f3b0775748278495324fdd60f370460452e4995e546450209ec4804a0f3414c69522102f8ca0d9665af03de32a7c19a167a4f6e97e4e0ed9505f75d11f7a45ab60b1f4d2103263d87cefd687bc15b4ef7801f9f538267b66d46f18e9fccc41d54071cfdd1ce210388568bf42f02298308eb6fa2fa4b446d544600253b4409be27e2c0c1a71c424853aeffffffff02c05d0000000000001976a91400741952f6a6eab5394f366db5cc5a54b0c2429f88acc05d00000000000017a91478574751407449b97f8054be2e40e684ad07d3738700000000"
== "0100000001a07660b10df9868df9393c9cf8962bc34f48cb2cea53b0865d2324bab8b96d8b00000000fdfd0000483045022100cc12faf18a489d8014e978ef7ca0760aa6487cdb40b49dd991bfe9c66625f5a802206088fef49ecad30679d55eaa870741bbb8b83fac08eb078872ac276c8139015d4147304402202b75dbb307d2556b9a85851d27ab118b3f06344bccb6e21b0a5dfcf74e0e644f02206611c59396d44741d34fd7bb602be06ef91690b22b47c3f3c271e15e20176ac0414c6952210290cc724ccb90a6c7c1c3b291938449464ea474390183909e51bcd2807ecb779d210222f537684e2933563f737192fbf1947fd9034402e5708d10f6decd8e1f03e172210350df5cb41013d6b06581230556006b0a85ccccd205745cc10c927755193c241b53aeffffffff02c05d0000000000001976a91400741952f6a6eab5394f366db5cc5a54b0c2429f88acc05d00000000000017a914dfc8c2dda26f7151ed7df8aeeca24089e6410fdd8700000000"
)
@pytest.mark.skip_t1

@ -197,7 +197,7 @@ class TestMsgSigntxBitcoinGold:
def test_send_btg_multisig_change(self, client):
nodes = [
btc.get_public_node(
client, parse_path(f"48'/156'/{i}'"), coin_name="Bgold"
client, parse_path(f"48'/156'/{i}'/0'"), coin_name="Bgold"
).node
for i in range(1, 4)
]
@ -208,7 +208,7 @@ class TestMsgSigntxBitcoinGold:
)
inp1 = proto.TxInputType(
address_n=parse_path("48'/156'/3'/0/0"),
address_n=parse_path("48'/156'/3'/0'/0/0"),
multisig=getmultisig(0, 0),
# 33Ju286QvonBz5N1V754ZekQv4GLJqcc5R
amount=1252382934,
@ -222,7 +222,7 @@ class TestMsgSigntxBitcoinGold:
script_type=proto.OutputScriptType.PAYTOADDRESS,
)
out2 = proto.TxOutputType(
address_n=parse_path("48'/156'/3'/1/0"),
address_n=parse_path("48'/156'/3'/0'/1/0"),
multisig=getmultisig(1, 0),
script_type=proto.OutputScriptType.PAYTOMULTISIG,
amount=1252382934 - 24000 - 1000,
@ -252,11 +252,11 @@ class TestMsgSigntxBitcoinGold:
assert (
signatures[0].hex()
== "30440220271c46ef3d7c37bd499804128623da3aa0014f3b4447dd39c4573b23c4537f6902205329167b9eb48427af62b04bf5138295f4c38613f6ba955934d15c499bff0d8a"
== "30440220263c427e6e889c161206edee39b9b969350c154ddd8eb76d2ab8ca8e0fc083b702200fb1d0ef430fa2d0293dcbb0b237775d4f9748222a6ed9fc3ff747837b99020a"
)
inp1 = proto.TxInputType(
address_n=parse_path("48'/156'/1'/0/0"),
address_n=parse_path("48'/156'/1'/0'/0/0"),
multisig=getmultisig(0, 0, [b"", b"", signatures[0]]),
amount=1252382934,
prev_hash=TXHASH_25526b,
@ -290,11 +290,11 @@ class TestMsgSigntxBitcoinGold:
assert (
signatures[0].hex()
== "3045022100bdf8c4bd14217c183612c7e8f79691f6479bcb35aa403f77d70182f58633ac6e02205b10a79b7894bb40248a120c8fcb7096a46950593e4c5b48a20bc5ebe53d85fa"
== "3045022100c9094b060b4b095e78403493912b0e06ca12ffbdc0f2fbeec20b02d7eaa73f8702206813e33e04a2b9c4493ecfa2024f2e9d69b5a2ab5c10433d9ab762add5bdde27"
)
assert (
btc_hash(serialized_tx)[::-1].hex()
== "b45ba21b69e1e1c6ad79f5408fe70d92fb861742d239cb6a952213f60c253e40"
== "2677130ec0c5eea2249787fe17b85770cfb35dfce550830a7fb6c6acd9375114"
)
def test_send_p2sh(self, client):

@ -181,7 +181,7 @@ class TestMsgSigntxDecred:
@pytest.mark.multisig
def test_decred_multisig_change(self, client):
paths = [parse_path("m/48'/1'/%d'" % index) for index in range(3)]
paths = [parse_path(f"m/48'/1'/{index}'/0'") for index in range(3)]
nodes = [
btc.get_public_node(client, address_n, coin_name="Decred Testnet").node
for address_n in paths
@ -278,5 +278,5 @@ class TestMsgSigntxDecred:
assert (
serialized_tx.hex()
== "01000000023f4c9e61b1cf469cad3785a03566ef23876217fe657561e78783d32155397c3f0100000000ffffffffa806ca135db5160eb91202506ce2645b215805149ce730a6850d74525018da160000000000ffffffff02605af40500000000000017a9142eea8efc154375a0e95fa7849a84cbce38fc9e138700a3e1110000000000001976a9143eb656115197956125365348c542e37b6d3d259988ac00000000000000000200c2eb0b0000000000000000fffffffffb47304402205aa748d00fbf632fb85bdb31f52713413d455c560aca2243d3ad6605ee6c590c02200c15581cd87a3454a2f1cccf9660d3a3af94763133721202992e8e44ac9051cd01473044022030ee91f21a813dc36af48da4c57c0043c08c6669b831f4b45e1fb62bf627992c02205643c5150e47528d696cc912d7f542788c31affdf903e38f70f97f4056805b3f014c69522102af12ddd0d55e4fa2fcd084148eaf5b0b641320d0431d63d1e9a90f3cbd0d54072102b952c919f91b8252fc1ccd3aed5c16364e19f11063a9c0da35c7142cc5d5dea4210386037d07c629b9a6cd9e966894527f6bfaf6a13e5c18396f536d360ecae35b7c53ae00c2eb0b0000000000000000fffffffffc4730440220643f64dcdfe8ed70120f6bb7b32b57acf2136e82f74a88baa8d5603448dd46f9022000f324eba92d79d688afff68704600949bd2f8f47f6fa932e333810b19efe8d701483045022100fe8e52118e769af69028b47acb62d21c3f9f417afa5d217d8351b26c942c9bf5022020ae88a2fa109be7e3ba3936db1435a3e04123e91811949d166d9c808f45f681014c69522102faf963264abfdc1907f0fbfea80e2d7b79c6e017b57ad9f18e89222382137440210240f15dc02925879548f66c8cfde23309dfda287a50b277bd6a4c736725a699592102f1897184f21c582fcf1dabcc15c87668de7ca98b32579b9d092ce4b4db0e16c053ae"
== "01000000023f4c9e61b1cf469cad3785a03566ef23876217fe657561e78783d32155397c3f0100000000ffffffffa806ca135db5160eb91202506ce2645b215805149ce730a6850d74525018da160000000000ffffffff02605af40500000000000017a914d4ea4e064d969064ca56a4cede56f7bf6cf62f118700a3e1110000000000001976a9143eb656115197956125365348c542e37b6d3d259988ac00000000000000000200c2eb0b0000000000000000fffffffffc483045022100a35fd1ed579362ac65b583ba910a3d814c5e9b87da835993bf4166a6b3a8482b02204b3e167fad7d37dd62aa585c68d3c8e00c3c43bf7a25d74f6407870a4a7499e9014730440220720fd7b6dfd337056c5e6dad76e307b3758e702ccfd39471bf90e0db3a5f5eba02205bd062c78fcdd56057723a0e39d661a790f325e59e643b54c47b7218a5781684014c69522103defea6f243b97354449bb348446a97e38df2fbed33afc3a7185bfdd26757cfdb2103725d6c5253f2040a9a73af24bcc196bf302d6cc94374dd7197b138e10912670121038924e94fff15302a3fb45ad4fc0ed17178800f0f1c2bdacb1017f4db951aa9f153ae00c2eb0b0000000000000000fffffffffc4730440220625357288f0880be21d6a44275033fd84cf04bc23227eef810455ad711507e4402207d303548bb0476f98c52f223fe4430f82a78a73f757b186453948b0908f5af3101483045022100e140f586e370824b13576c77cf9f2855294fd415316f2a130126d8412a7cf08c0220308d1f5c83847458b271c93bfca5eba7fc1691b9c5d6e57955985affd1110e24014c695221021ef4b5d81f21593071b993bd4d8c564c569a6f84de0d4511135cbc66d8bf7bcd2103f1e53b6e0ff99adf7e8fa826a94bdac83163d8abbc1d19a8d6b88a4af91b9a67210390c8ea70e1f2f60e0052be65183c43bb01b2f02dfa4e448f74e359997f74e6ad53ae"
)

@ -42,7 +42,7 @@ class TestMultisig:
@pytest.mark.multisig
def test_2_of_3(self, client):
nodes = [
btc.get_public_node(client, parse_path("48'/0'/%d'" % index)).node
btc.get_public_node(client, parse_path(f"48'/0'/{index}'/0'")).node
for index in range(1, 4)
]
@ -51,7 +51,7 @@ class TestMultisig:
)
# Let's go to sign with key 1
inp1 = proto.TxInputType(
address_n=parse_path("48'/0'/1'/0/0"),
address_n=parse_path("48'/0'/1'/0'/0/0"),
amount=100000,
prev_hash=TXHASH_c6091a,
prev_index=1,
@ -91,7 +91,7 @@ class TestMultisig:
assert (
signatures1[0].hex()
== "3044022052f4a3dc5ca3e86ed66abb1e2b4d9b9ace7d96f5615944beea19e58280847c2902201bd3ff32a38366a4eed0373e27da26ebc0d2a4c2bbeffd83e8a60e313d95b9e3"
== "30450221009276eea820aa54a24bd9f1a056cb09a15f50c0816570a7c7878bd1c5ee7248540220677d200aec5e2f25bcf4000bdfab3faa9e1746d7f80c4ae4bfa1f5892eb5dcbf"
)
# ---------------------------------------
@ -110,7 +110,7 @@ class TestMultisig:
# Let's do a second signature with key 3
inp3 = proto.TxInputType(
address_n=parse_path("48'/0'/3'/0/0"),
address_n=parse_path("48'/0'/3'/0'/0/0"),
amount=100000,
prev_hash=TXHASH_c6091a,
prev_index=1,
@ -142,21 +142,21 @@ class TestMultisig:
assert (
signatures2[0].hex()
== "304402203828fd48540811be6a1b12967e7012587c46e6f05c78d42471e7b25c06bc7afc0220749274bc1aa698335b00400c5ba946a70b6b46c711324fbc4989279737a57f49"
== "3045022100c2a9fbfbff1be87036d8a6a22745512b158154f7f3d8f4cad4ba7ed130b37b83022058f5299b4c26222588dcc669399bd88b6f2bc6e04b48276373683853187a4fd6"
)
assert (
serialized_tx.hex()
== "010000000152ba4dfcde9c4bed88f55479cdea03e711ae586e9a89352a98230c4cdf1a09c601000000fc00473044022052f4a3dc5ca3e86ed66abb1e2b4d9b9ace7d96f5615944beea19e58280847c2902201bd3ff32a38366a4eed0373e27da26ebc0d2a4c2bbeffd83e8a60e313d95b9e30147304402203828fd48540811be6a1b12967e7012587c46e6f05c78d42471e7b25c06bc7afc0220749274bc1aa698335b00400c5ba946a70b6b46c711324fbc4989279737a57f49014c6952210203ed6187880ae932660086e55d4561a57952dd200aa3ed2aa66b73e5723a0ce7210360e7f32fd3c8dee27a166f6614c598929699ee66acdcbda5fb24571bf2ae1ca021037c4c7e5d3293ab0f97771dcfdf83caadab341f427f54713da8b2c590a834f03b53aeffffffff01a0860100000000001976a91412e8391ad256dcdc023365978418d658dfecba1c88ac00000000"
== "010000000152ba4dfcde9c4bed88f55479cdea03e711ae586e9a89352a98230c4cdf1a09c601000000fdfe00004830450221009276eea820aa54a24bd9f1a056cb09a15f50c0816570a7c7878bd1c5ee7248540220677d200aec5e2f25bcf4000bdfab3faa9e1746d7f80c4ae4bfa1f5892eb5dcbf01483045022100c2a9fbfbff1be87036d8a6a22745512b158154f7f3d8f4cad4ba7ed130b37b83022058f5299b4c26222588dcc669399bd88b6f2bc6e04b48276373683853187a4fd6014c69522103dc0ff15b9c85c0d2c87099758bf47d36229c2514aeefcf8dea123f0f93c679762102bfe426e8671601ad46d54d09ee15aa035610d36d411961c87474908d403fbc122102a5d57129c6c96df663ad29492aa18605dad97231e043be8a92f9406073815c5d53aeffffffff01a0860100000000001976a91412e8391ad256dcdc023365978418d658dfecba1c88ac00000000"
)
@pytest.mark.multisig
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
def test_15_of_15(self, client):
node = btc.get_public_node(
client, parse_path("48h/0h/1h/0"), coin_name="Bitcoin"
client, parse_path("48h/0h/1h/0h"), coin_name="Bitcoin"
).node
pubs = [proto.HDNodePathType(node=node, address_n=[x]) for x in range(15)]
pubs = [proto.HDNodePathType(node=node, address_n=[0, x]) for x in range(15)]
signatures = [b""] * 15
@ -172,7 +172,7 @@ class TestMultisig:
)
inp1 = proto.TxInputType(
address_n=parse_path(f"48h/0h/1h/0/{x}"),
address_n=parse_path(f"48h/0h/1h/0h/0/{x}"),
amount=20000,
prev_hash=TXHASH_6189e3,
prev_index=1,
@ -188,14 +188,14 @@ class TestMultisig:
assert (
tx_hash(serialized_tx).hex()
== "3bffdb495711c57b0e2cd4e0dbd0ddbccf28052aa67466eafa2d4f666e797e5f"
== "63b16e3107df552c5c74bb5d91bb8fcd0069bac461fb42ebef982c5b2cfc4cf4"
)
@pytest.mark.multisig
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
def test_missing_pubkey(self, client):
node = btc.get_public_node(
client, parse_path("48h/0h/1h/0"), coin_name="Bitcoin"
client, parse_path("48h/0h/1h/0h/0"), coin_name="Bitcoin"
).node
multisig = proto.MultisigRedeemScriptType(
@ -210,7 +210,7 @@ class TestMultisig:
# Let's go to sign with key 10, which is NOT in pubkeys
inp1 = proto.TxInputType(
address_n=parse_path("48h/0h/1h/0/10"),
address_n=parse_path("48h/0h/1h/0h/0/10"),
amount=100000,
prev_hash=TXHASH_c6091a,
prev_index=1,
@ -234,7 +234,7 @@ class TestMultisig:
attacker to provide a 1-of-2 multisig change address. When `input_real`
is provided in the signing phase, an error must occur.
"""
address_n = parse_path("48'/1'/0'/0/0")
address_n = parse_path("48'/1'/0'/1'/0/0")
attacker_multisig_public_key = bytes.fromhex(
"03653a148b68584acb97947344a7d4fd6a6f8b8485cad12987ff8edac874268088"
)

Loading…
Cancel
Save