diff --git a/common/protob/messages-bitcoin.proto b/common/protob/messages-bitcoin.proto
index 9635cc8bebe..a5bc87838c8 100644
--- a/common/protob/messages-bitcoin.proto
+++ b/common/protob/messages-bitcoin.proto
@@ -85,6 +85,7 @@ message GetPublicKey {
optional string coin_name = 4 [default='Bitcoin']; // coin to use for verifying
optional InputScriptType script_type = 5 [default=SPENDADDRESS]; // used to distinguish between various address formats (non-segwit, segwit, etc.)
optional bool ignore_xpub_magic = 6; // ignore SLIP-0132 XPUB magic, use xpub/tpub prefix for all account types
+ optional bool multisig_xpub_magic = 7; // use Ypub/Zpub prefix for SegWit script types
}
/**
diff --git a/core/.changelog.d/2658.added b/core/.changelog.d/2658.added
new file mode 100644
index 00000000000..1d290b5c18a
--- /dev/null
+++ b/core/.changelog.d/2658.added
@@ -0,0 +1 @@
+Add multisig_xpub_magic option to GetPublicKey.
diff --git a/core/src/apps/bitcoin/common.py b/core/src/apps/bitcoin/common.py
index 92f63be59b9..206a0eb34c2 100644
--- a/core/src/apps/bitcoin/common.py
+++ b/core/src/apps/bitcoin/common.py
@@ -190,6 +190,14 @@ def input_is_external_unverified(txi: TxInput) -> bool:
)
+def sanitize_input_script_type(coin: CoinInfo, script_type: InputScriptType) -> None:
+ if script_type in SEGWIT_INPUT_SCRIPT_TYPES and not coin.segwit:
+ raise wire.DataError("Segwit not enabled on this coin.")
+
+ if script_type == InputScriptType.SPENDTAPROOT and not coin.taproot:
+ raise wire.DataError("Taproot not enabled on this coin")
+
+
def tagged_hashwriter(tag: bytes) -> HashWriter:
from trezor.crypto.hashlib import sha256
from trezor.utils import HashWriter
@@ -263,3 +271,30 @@ def _polymod(c: int, val: int) -> int:
for j in range(0, 8):
ret[j] = CHECKSUM_CHARSET[(c >> (5 * (7 - j))) & 31]
return "".join(ret)
+
+
+def get_xpub_magic(
+ coin: CoinInfo,
+ script_type: InputScriptType,
+ ignore_xpub_magic: bool | None,
+ is_multisig: bool | None,
+) -> int:
+ from trezor.enums import InputScriptType
+
+ xpub_magic = None
+ if not ignore_xpub_magic:
+ # Handle SegWit v0 script types.
+ # When coin.segwit is true, cointool.py guarantees that the corresponding xpub_magic_* attributes not None.
+ if not is_multisig:
+ if script_type == InputScriptType.SPENDP2SHWITNESS:
+ xpub_magic = coin.xpub_magic_segwit_p2sh
+ elif script_type == InputScriptType.SPENDWITNESS:
+ xpub_magic = coin.xpub_magic_segwit_native
+ else:
+ if script_type == InputScriptType.SPENDWITNESS:
+ xpub_magic = coin.xpub_magic_multisig_segwit_native
+ elif script_type == InputScriptType.SPENDP2SHWITNESS:
+ xpub_magic = coin.xpub_magic_multisig_segwit_p2sh
+
+ # SPENDADDRESS, SPENDMULTISIG, SPENDTAPROOT, ignore_xpub_magic or fallback.
+ return xpub_magic or coin.xpub_magic
diff --git a/core/src/apps/bitcoin/get_address.py b/core/src/apps/bitcoin/get_address.py
index 9bbd8e845e2..8468eb378f5 100644
--- a/core/src/apps/bitcoin/get_address.py
+++ b/core/src/apps/bitcoin/get_address.py
@@ -39,6 +39,7 @@ async def get_address(msg: GetAddress, keychain: Keychain, coin: CoinInfo) -> Ad
from apps.common.paths import address_n_to_str, validate_path
from . import addresses
+ from .common import get_xpub_magic
from .keychain import (
address_n_to_name_or_unknown,
validate_path_against_script_type,
@@ -72,20 +73,7 @@ async def get_address(msg: GetAddress, keychain: Keychain, coin: CoinInfo) -> Ad
address_case_sensitive = False # cashaddr address
mac: bytes | None = None
- multisig_xpub_magic = coin.xpub_magic
- if multisig:
- if coin.segwit and not msg.ignore_xpub_magic:
- if (
- script_type == InputScriptType.SPENDWITNESS
- and coin.xpub_magic_multisig_segwit_native is not None
- ):
- multisig_xpub_magic = coin.xpub_magic_multisig_segwit_native
- elif (
- script_type == InputScriptType.SPENDP2SHWITNESS
- and coin.xpub_magic_multisig_segwit_p2sh is not None
- ):
- multisig_xpub_magic = coin.xpub_magic_multisig_segwit_p2sh
- else:
+ if not multisig:
# Attach a MAC for single-sig addresses, but only if the path is standard
# or if the user explicitly confirms a non-standard path.
if msg.show_display or (
@@ -97,6 +85,10 @@ async def get_address(msg: GetAddress, keychain: Keychain, coin: CoinInfo) -> Ad
if msg.show_display:
path = address_n_to_str(address_n)
if multisig:
+ multisig_xpub_magic = get_xpub_magic(
+ coin, script_type, msg.ignore_xpub_magic, is_multisig=True
+ )
+
if multisig.nodes:
pubnodes = multisig.nodes
else:
diff --git a/core/src/apps/bitcoin/get_ownership_id.py b/core/src/apps/bitcoin/get_ownership_id.py
index dec6af56197..24247285ac2 100644
--- a/core/src/apps/bitcoin/get_ownership_id.py
+++ b/core/src/apps/bitcoin/get_ownership_id.py
@@ -13,7 +13,6 @@
async def get_ownership_id(
msg: GetOwnershipId, keychain: Keychain, coin: CoinInfo
) -> OwnershipId:
- from trezor.enums import InputScriptType
from trezor.messages import OwnershipId
from trezor.wire import DataError
@@ -34,11 +33,7 @@ async def get_ownership_id(
if script_type not in common.INTERNAL_INPUT_SCRIPT_TYPES:
raise DataError("Invalid script type")
- if script_type in common.SEGWIT_INPUT_SCRIPT_TYPES and not coin.segwit:
- raise DataError("Segwit not enabled on this coin")
-
- if script_type == InputScriptType.SPENDTAPROOT and not coin.taproot:
- raise DataError("Taproot not enabled on this coin")
+ common.sanitize_input_script_type(coin, script_type)
node = keychain.derive(msg.address_n)
address = addresses.get_address(script_type, coin, node, msg.multisig)
diff --git a/core/src/apps/bitcoin/get_ownership_proof.py b/core/src/apps/bitcoin/get_ownership_proof.py
index 1bb2fe27c6e..0e365b86166 100644
--- a/core/src/apps/bitcoin/get_ownership_proof.py
+++ b/core/src/apps/bitcoin/get_ownership_proof.py
@@ -19,7 +19,6 @@ async def get_ownership_proof(
authorization: CoinJoinAuthorization | None = None,
) -> OwnershipProof:
from trezor import TR
- from trezor.enums import InputScriptType
from trezor.messages import OwnershipProof
from trezor.ui.layouts import confirm_action, confirm_blob
from trezor.wire import DataError, ProcessError
@@ -46,11 +45,7 @@ async def get_ownership_proof(
if script_type not in common.INTERNAL_INPUT_SCRIPT_TYPES:
raise DataError("Invalid script type")
- if script_type in common.SEGWIT_INPUT_SCRIPT_TYPES and not coin.segwit:
- raise DataError("Segwit not enabled on this coin")
-
- if script_type == InputScriptType.SPENDTAPROOT and not coin.taproot:
- raise DataError("Taproot not enabled on this coin")
+ common.sanitize_input_script_type(coin, script_type)
node = keychain.derive(msg.address_n)
address = addresses.get_address(script_type, coin, node, msg.multisig)
diff --git a/core/src/apps/bitcoin/get_public_key.py b/core/src/apps/bitcoin/get_public_key.py
index f852b1d134c..3d0637b1ecf 100644
--- a/core/src/apps/bitcoin/get_public_key.py
+++ b/core/src/apps/bitcoin/get_public_key.py
@@ -10,20 +10,20 @@
async def get_public_key(
msg: GetPublicKey, auth_msg: MessageType | None = None
) -> PublicKey:
- from trezor import TR, wire
+ from trezor import TR
from trezor.enums import InputScriptType
from trezor.messages import HDNodeType, PublicKey, UnlockPath
from apps.common import coininfo, paths
from apps.common.keychain import FORBIDDEN_KEY_PATH, get_keychain
+ from .common import get_xpub_magic, sanitize_input_script_type
+
coin_name = msg.coin_name or "Bitcoin"
script_type = msg.script_type or InputScriptType.SPENDADDRESS
coin = coininfo.by_name(coin_name)
curve_name = msg.ecdsa_curve_name or coin.curve_name
address_n = msg.address_n # local_cache_attribute
- ignore_xpub_magic = msg.ignore_xpub_magic # local_cache_attribute
- xpub_magic = coin.xpub_magic # local_cache_attribute
if address_n and address_n[0] == paths.SLIP25_PURPOSE:
# UnlockPath is required to access SLIP25 paths.
@@ -38,36 +38,13 @@ async def get_public_key(
node = keychain.derive(address_n)
- if (
- script_type
- in (
- InputScriptType.SPENDADDRESS,
- InputScriptType.SPENDMULTISIG,
- InputScriptType.SPENDTAPROOT,
- )
- and xpub_magic is not None
- ):
- node_xpub = node.serialize_public(xpub_magic)
- elif (
- coin.segwit
- and script_type == InputScriptType.SPENDP2SHWITNESS
- and (ignore_xpub_magic or coin.xpub_magic_segwit_p2sh is not None)
- ):
- assert coin.xpub_magic_segwit_p2sh is not None
- node_xpub = node.serialize_public(
- xpub_magic if ignore_xpub_magic else coin.xpub_magic_segwit_p2sh
- )
- elif (
- coin.segwit
- and script_type == InputScriptType.SPENDWITNESS
- and (ignore_xpub_magic or coin.xpub_magic_segwit_native is not None)
- ):
- assert coin.xpub_magic_segwit_native is not None
- node_xpub = node.serialize_public(
- xpub_magic if ignore_xpub_magic else coin.xpub_magic_segwit_native
+ sanitize_input_script_type(coin, script_type)
+
+ node_xpub = node.serialize_public(
+ get_xpub_magic(
+ coin, script_type, msg.ignore_xpub_magic, msg.multisig_xpub_magic
)
- else:
- raise wire.DataError("Invalid combination of coin and script_type")
+ )
pubkey = node.public_key()
# For curve25519 and ed25519, the public key has the prefix 0x00, as specified by SLIP-10. However, since this prefix is non-standard, it may be removed in the future.
@@ -79,7 +56,7 @@ async def get_public_key(
public_key=pubkey,
)
descriptor = _xpub_descriptor(
- node, xpub_magic, address_n, script_type, keychain.root_fingerprint()
+ node, coin.xpub_magic, address_n, script_type, keychain.root_fingerprint()
)
if msg.show_display:
diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py
index 5a5bb252455..c6ca5141d8d 100644
--- a/core/src/trezor/messages.py
+++ b/core/src/trezor/messages.py
@@ -482,6 +482,7 @@ class GetPublicKey(protobuf.MessageType):
coin_name: "str"
script_type: "InputScriptType"
ignore_xpub_magic: "bool | None"
+ multisig_xpub_magic: "bool | None"
def __init__(
self,
@@ -492,6 +493,7 @@ def __init__(
coin_name: "str | None" = None,
script_type: "InputScriptType | None" = None,
ignore_xpub_magic: "bool | None" = None,
+ multisig_xpub_magic: "bool | None" = None,
) -> None:
pass
diff --git a/legacy/firmware/.changelog.d/2658.added b/legacy/firmware/.changelog.d/2658.added
new file mode 100644
index 00000000000..1d290b5c18a
--- /dev/null
+++ b/legacy/firmware/.changelog.d/2658.added
@@ -0,0 +1 @@
+Add multisig_xpub_magic option to GetPublicKey.
diff --git a/legacy/firmware/fsm_msg_coin.h b/legacy/firmware/fsm_msg_coin.h
index b767859b765..873f226e732 100644
--- a/legacy/firmware/fsm_msg_coin.h
+++ b/legacy/firmware/fsm_msg_coin.h
@@ -17,6 +17,35 @@
* along with this library. If not, see .
*/
+static bool fsm_checkScriptType(const CoinInfo *coin,
+ InputScriptType script_type);
+
+static int fsm_getXpubMagic(const CoinInfo *coin, InputScriptType script_type,
+ bool ignore_xpub_magic, bool is_multisig) {
+ uint32_t xpub_magic = 0;
+ if (!ignore_xpub_magic) {
+ // Handle SegWit v0 script types.
+ // When coin.segwit is true, cointool.py guarantees that the corresponding
+ // xpub_magic_* attributes are defined.
+ if (!is_multisig) {
+ if (script_type == InputScriptType_SPENDP2SHWITNESS) {
+ xpub_magic = coin->xpub_magic_segwit_p2sh;
+ } else if (script_type == InputScriptType_SPENDWITNESS) {
+ xpub_magic = coin->xpub_magic_segwit_native;
+ }
+ } else {
+ if (script_type == InputScriptType_SPENDWITNESS) {
+ xpub_magic = coin->xpub_magic_multisig_segwit_native;
+ } else if (script_type == InputScriptType_SPENDP2SHWITNESS) {
+ xpub_magic = coin->xpub_magic_multisig_segwit_p2sh;
+ }
+ }
+ }
+
+ // SPENDADDRESS, SPENDMULTISIG, SPENDTAPROOT, ignore_xpub_magic or fallback.
+ return (xpub_magic != 0) ? xpub_magic : coin->xpub_magic;
+}
+
void fsm_msgGetPublicKey(const GetPublicKey *msg) {
RESP_INIT(PublicKey);
@@ -80,39 +109,17 @@ void fsm_msgGetPublicKey(const GetPublicKey *msg) {
// removed in the future.
memcpy(resp->node.public_key.bytes, node->public_key, 33);
- if (coin->xpub_magic && (script_type == InputScriptType_SPENDADDRESS ||
- script_type == InputScriptType_SPENDMULTISIG)) {
- hdnode_serialize_public(node, fingerprint, coin->xpub_magic, resp->xpub,
- sizeof(resp->xpub));
- } else if (coin->has_segwit &&
- script_type == InputScriptType_SPENDP2SHWITNESS &&
- !msg->ignore_xpub_magic && coin->xpub_magic_segwit_p2sh) {
- hdnode_serialize_public(node, fingerprint, coin->xpub_magic_segwit_p2sh,
- resp->xpub, sizeof(resp->xpub));
- } else if (coin->has_segwit &&
- script_type == InputScriptType_SPENDP2SHWITNESS &&
- msg->ignore_xpub_magic && coin->xpub_magic) {
- hdnode_serialize_public(node, fingerprint, coin->xpub_magic, resp->xpub,
- sizeof(resp->xpub));
- } else if (coin->has_segwit && script_type == InputScriptType_SPENDWITNESS &&
- !msg->ignore_xpub_magic && coin->xpub_magic_segwit_native) {
- hdnode_serialize_public(node, fingerprint, coin->xpub_magic_segwit_native,
- resp->xpub, sizeof(resp->xpub));
- } else if (coin->has_segwit && script_type == InputScriptType_SPENDWITNESS &&
- msg->ignore_xpub_magic && coin->xpub_magic) {
- hdnode_serialize_public(node, fingerprint, coin->xpub_magic, resp->xpub,
- sizeof(resp->xpub));
- } else if (coin->has_taproot && script_type == InputScriptType_SPENDTAPROOT &&
- coin->xpub_magic) {
- hdnode_serialize_public(node, fingerprint, coin->xpub_magic, resp->xpub,
- sizeof(resp->xpub));
- } else {
- fsm_sendFailure(FailureType_Failure_DataError,
- _("Invalid combination of coin and script_type"));
+ if (!fsm_checkScriptType(coin, msg->script_type)) {
layoutHome();
return;
}
+ uint32_t xpub_magic = fsm_getXpubMagic(
+ coin, script_type, msg->ignore_xpub_magic, msg->multisig_xpub_magic);
+
+ hdnode_serialize_public(node, fingerprint, xpub_magic, resp->xpub,
+ sizeof(resp->xpub));
+
if (msg->has_show_display && msg->show_display) {
for (int page = 0; page < 2; page++) {
layoutXPUB(resp->xpub, page);
@@ -234,7 +241,8 @@ bool fsm_checkCoinPath(const CoinInfo *coin, InputScriptType script_type,
return true;
}
-bool fsm_checkScriptType(const CoinInfo *coin, InputScriptType script_type) {
+static bool fsm_checkScriptType(const CoinInfo *coin,
+ InputScriptType script_type) {
if (!is_internal_input_script_type(script_type)) {
fsm_sendFailure(FailureType_Failure_DataError, _("Invalid script type"));
return false;
@@ -312,18 +320,8 @@ void fsm_msgGetAddress(const GetAddress *msg) {
strlcpy(desc, _("Address:"), sizeof(desc));
}
- uint32_t multisig_xpub_magic = coin->xpub_magic;
- if (msg->has_multisig && coin->has_segwit) {
- if (!msg->has_ignore_xpub_magic || !msg->ignore_xpub_magic) {
- if (msg->script_type == InputScriptType_SPENDWITNESS &&
- coin->xpub_magic_segwit_native) {
- multisig_xpub_magic = coin->xpub_magic_segwit_native;
- } else if (msg->script_type == InputScriptType_SPENDP2SHWITNESS &&
- coin->xpub_magic_segwit_p2sh) {
- multisig_xpub_magic = coin->xpub_magic_segwit_p2sh;
- }
- }
- }
+ uint32_t multisig_xpub_magic = fsm_getXpubMagic(
+ coin, msg->script_type, msg->ignore_xpub_magic, msg->has_multisig);
bool is_cashaddr = coin->cashaddr_prefix != NULL;
if (!fsm_layoutAddress(address, desc, is_cashaddr,
diff --git a/python/.changelog.d/2658.added b/python/.changelog.d/2658.added
new file mode 100644
index 00000000000..0ef29f81f31
--- /dev/null
+++ b/python/.changelog.d/2658.added
@@ -0,0 +1 @@
+Support multisig in get-public-node.
diff --git a/python/src/trezorlib/btc.py b/python/src/trezorlib/btc.py
index a71ead2adc2..acd7f2f2901 100644
--- a/python/src/trezorlib/btc.py
+++ b/python/src/trezorlib/btc.py
@@ -112,6 +112,7 @@ def get_public_node(
coin_name: Optional[str] = None,
script_type: messages.InputScriptType = messages.InputScriptType.SPENDADDRESS,
ignore_xpub_magic: bool = False,
+ multisig_xpub_magic: bool = False,
unlock_path: Optional[List[int]] = None,
unlock_path_mac: Optional[bytes] = None,
) -> "MessageType":
@@ -130,6 +131,7 @@ def get_public_node(
coin_name=coin_name,
script_type=script_type,
ignore_xpub_magic=ignore_xpub_magic,
+ multisig_xpub_magic=multisig_xpub_magic,
)
)
diff --git a/python/src/trezorlib/cli/btc.py b/python/src/trezorlib/cli/btc.py
index dde59a6bc63..ca97118ccad 100644
--- a/python/src/trezorlib/cli/btc.py
+++ b/python/src/trezorlib/cli/btc.py
@@ -28,6 +28,7 @@
from ..client import TrezorClient
PURPOSE_BIP44 = 44
+PURPOSE_BIP45 = 45
PURPOSE_BIP48 = 48
PURPOSE_BIP49 = 49
PURPOSE_BIP84 = 84
@@ -137,6 +138,14 @@ def guess_script_type_from_path(address_n: List[int]) -> messages.InputScriptTyp
return messages.InputScriptType.SPENDADDRESS
+def guess_multisig_from_path(address_n: List[int]) -> bool:
+ if len(address_n) < 1 or not tools.is_hardened(address_n[0]):
+ return False
+
+ purpose = tools.unharden(address_n[0])
+ return purpose in (PURPOSE_BIP45, PURPOSE_BIP48)
+
+
def get_unlock_path(address_n: List[int]) -> Optional[List[int]]:
if address_n and address_n[0] == tools.H_(10025):
return address_n[:1]
@@ -237,6 +246,7 @@ def get_address(
@click.option("-e", "--curve")
@click.option("-t", "--script-type", type=ChoiceType(INPUT_SCRIPTS))
@click.option("-d", "--show-display", is_flag=True)
+@click.option("-m", "--multisig", is_flag=True)
@with_client
def get_public_node(
client: "TrezorClient",
@@ -245,11 +255,13 @@ def get_public_node(
curve: Optional[str],
script_type: Optional[messages.InputScriptType],
show_display: bool,
+ multisig: bool,
) -> dict:
"""Get public node of given path."""
address_n = tools.parse_path(address)
if script_type is None:
script_type = guess_script_type_from_path(address_n)
+ multisig = multisig or guess_multisig_from_path(address_n)
result = btc.get_public_node(
client,
address_n,
@@ -257,6 +269,7 @@ def get_public_node(
show_display=show_display,
coin_name=coin,
script_type=script_type,
+ multisig_xpub_magic=multisig,
unlock_path=get_unlock_path(address_n),
)
return {
diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py
index d8ca51fc8ee..02697132948 100644
--- a/python/src/trezorlib/messages.py
+++ b/python/src/trezorlib/messages.py
@@ -1108,6 +1108,7 @@ class GetPublicKey(protobuf.MessageType):
4: protobuf.Field("coin_name", "string", repeated=False, required=False, default='Bitcoin'),
5: protobuf.Field("script_type", "InputScriptType", repeated=False, required=False, default=InputScriptType.SPENDADDRESS),
6: protobuf.Field("ignore_xpub_magic", "bool", repeated=False, required=False, default=None),
+ 7: protobuf.Field("multisig_xpub_magic", "bool", repeated=False, required=False, default=None),
}
def __init__(
@@ -1119,6 +1120,7 @@ def __init__(
coin_name: Optional["str"] = 'Bitcoin',
script_type: Optional["InputScriptType"] = InputScriptType.SPENDADDRESS,
ignore_xpub_magic: Optional["bool"] = None,
+ multisig_xpub_magic: Optional["bool"] = None,
) -> None:
self.address_n: Sequence["int"] = address_n if address_n is not None else []
self.ecdsa_curve_name = ecdsa_curve_name
@@ -1126,6 +1128,7 @@ def __init__(
self.coin_name = coin_name
self.script_type = script_type
self.ignore_xpub_magic = ignore_xpub_magic
+ self.multisig_xpub_magic = multisig_xpub_magic
class PublicKey(protobuf.MessageType):
diff --git a/rust/trezor-client/src/protos/generated/messages_bitcoin.rs b/rust/trezor-client/src/protos/generated/messages_bitcoin.rs
index 4cd79fe34fd..5edfa6a78b3 100644
--- a/rust/trezor-client/src/protos/generated/messages_bitcoin.rs
+++ b/rust/trezor-client/src/protos/generated/messages_bitcoin.rs
@@ -427,6 +427,8 @@ pub struct GetPublicKey {
pub script_type: ::std::option::Option<::protobuf::EnumOrUnknown>,
// @@protoc_insertion_point(field:hw.trezor.messages.bitcoin.GetPublicKey.ignore_xpub_magic)
pub ignore_xpub_magic: ::std::option::Option,
+ // @@protoc_insertion_point(field:hw.trezor.messages.bitcoin.GetPublicKey.multisig_xpub_magic)
+ pub multisig_xpub_magic: ::std::option::Option,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.bitcoin.GetPublicKey.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@@ -575,8 +577,27 @@ impl GetPublicKey {
self.ignore_xpub_magic = ::std::option::Option::Some(v);
}
+ // optional bool multisig_xpub_magic = 7;
+
+ pub fn multisig_xpub_magic(&self) -> bool {
+ self.multisig_xpub_magic.unwrap_or(false)
+ }
+
+ pub fn clear_multisig_xpub_magic(&mut self) {
+ self.multisig_xpub_magic = ::std::option::Option::None;
+ }
+
+ pub fn has_multisig_xpub_magic(&self) -> bool {
+ self.multisig_xpub_magic.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_multisig_xpub_magic(&mut self, v: bool) {
+ self.multisig_xpub_magic = ::std::option::Option::Some(v);
+ }
+
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
- let mut fields = ::std::vec::Vec::with_capacity(6);
+ let mut fields = ::std::vec::Vec::with_capacity(7);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
"address_n",
@@ -608,6 +629,11 @@ impl GetPublicKey {
|m: &GetPublicKey| { &m.ignore_xpub_magic },
|m: &mut GetPublicKey| { &mut m.ignore_xpub_magic },
));
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "multisig_xpub_magic",
+ |m: &GetPublicKey| { &m.multisig_xpub_magic },
+ |m: &mut GetPublicKey| { &mut m.multisig_xpub_magic },
+ ));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::(
"GetPublicKey",
fields,
@@ -647,6 +673,9 @@ impl ::protobuf::Message for GetPublicKey {
48 => {
self.ignore_xpub_magic = ::std::option::Option::Some(is.read_bool()?);
},
+ 56 => {
+ self.multisig_xpub_magic = ::std::option::Option::Some(is.read_bool()?);
+ },
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@@ -677,6 +706,9 @@ impl ::protobuf::Message for GetPublicKey {
if let Some(v) = self.ignore_xpub_magic {
my_size += 1 + 1;
}
+ if let Some(v) = self.multisig_xpub_magic {
+ my_size += 1 + 1;
+ }
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
@@ -701,6 +733,9 @@ impl ::protobuf::Message for GetPublicKey {
if let Some(v) = self.ignore_xpub_magic {
os.write_bool(6, v)?;
}
+ if let Some(v) = self.multisig_xpub_magic {
+ os.write_bool(7, v)?;
+ }
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@@ -724,6 +759,7 @@ impl ::protobuf::Message for GetPublicKey {
self.coin_name = ::std::option::Option::None;
self.script_type = ::std::option::Option::None;
self.ignore_xpub_magic = ::std::option::Option::None;
+ self.multisig_xpub_magic = ::std::option::Option::None;
self.special_fields.clear();
}
@@ -735,6 +771,7 @@ impl ::protobuf::Message for GetPublicKey {
coin_name: ::std::option::Option::None,
script_type: ::std::option::Option::None,
ignore_xpub_magic: ::std::option::Option::None,
+ multisig_xpub_magic: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@@ -13354,13 +13391,14 @@ static file_descriptor_proto_data: &'static [u8] = b"\
HDNodeTypeR\x05nodes\x12\x1b\n\taddress_n\x18\x05\x20\x03(\rR\x08address\
N\x1ah\n\x0eHDNodePathType\x129\n\x04node\x18\x01\x20\x02(\x0b2%.hw.trez\
or.messages.common.HDNodeTypeR\x04node\x12\x1b\n\taddress_n\x18\x02\x20\
- \x03(\rR\x08addressN\"\xa6\x02\n\x0cGetPublicKey\x12\x1b\n\taddress_n\
+ \x03(\rR\x08addressN\"\xd6\x02\n\x0cGetPublicKey\x12\x1b\n\taddress_n\
\x18\x01\x20\x03(\rR\x08addressN\x12(\n\x10ecdsa_curve_name\x18\x02\x20\
\x01(\tR\x0eecdsaCurveName\x12!\n\x0cshow_display\x18\x03\x20\x01(\x08R\
\x0bshowDisplay\x12$\n\tcoin_name\x18\x04\x20\x01(\t:\x07BitcoinR\x08coi\
nName\x12Z\n\x0bscript_type\x18\x05\x20\x01(\x0e2+.hw.trezor.messages.bi\
tcoin.InputScriptType:\x0cSPENDADDRESSR\nscriptType\x12*\n\x11ignore_xpu\
- b_magic\x18\x06\x20\x01(\x08R\x0fignoreXpubMagic\"\xa5\x01\n\tPublicKey\
+ b_magic\x18\x06\x20\x01(\x08R\x0fignoreXpubMagic\x12.\n\x13multisig_xpub\
+ _magic\x18\x07\x20\x01(\x08R\x11multisigXpubMagic\"\xa5\x01\n\tPublicKey\
\x129\n\x04node\x18\x01\x20\x02(\x0b2%.hw.trezor.messages.common.HDNodeT\
ypeR\x04node\x12\x12\n\x04xpub\x18\x02\x20\x02(\tR\x04xpub\x12)\n\x10roo\
t_fingerprint\x18\x03\x20\x01(\rR\x0frootFingerprint\x12\x1e\n\ndescript\
diff --git a/tests/device_tests/bitcoin/test_getpublickey.py b/tests/device_tests/bitcoin/test_getpublickey.py
index e8b90cbb487..7b040d9f843 100644
--- a/tests/device_tests/bitcoin/test_getpublickey.py
+++ b/tests/device_tests/bitcoin/test_getpublickey.py
@@ -144,37 +144,46 @@ def test_slip25_path(client: Client):
)
-VECTORS_SCRIPT_TYPES = ( # script_type, xpub, xpub_ignored_magic
+VECTORS_SCRIPT_TYPES = ( # script_type, xpub, xpub_ignored_magic, xpub_multisig
(
None,
"xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXFD3YS797S55Y42sm2raxPrXQWAJodn7aXnHJdhz433ZJDhyUztHW55WatHeoYUVqui8cYNX8y",
"xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXFD3YS797S55Y42sm2raxPrXQWAJodn7aXnHJdhz433ZJDhyUztHW55WatHeoYUVqui8cYNX8y",
+ "xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXFD3YS797S55Y42sm2raxPrXQWAJodn7aXnHJdhz433ZJDhyUztHW55WatHeoYUVqui8cYNX8y",
),
(
messages.InputScriptType.SPENDADDRESS,
"xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXFD3YS797S55Y42sm2raxPrXQWAJodn7aXnHJdhz433ZJDhyUztHW55WatHeoYUVqui8cYNX8y",
"xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXFD3YS797S55Y42sm2raxPrXQWAJodn7aXnHJdhz433ZJDhyUztHW55WatHeoYUVqui8cYNX8y",
+ "xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXFD3YS797S55Y42sm2raxPrXQWAJodn7aXnHJdhz433ZJDhyUztHW55WatHeoYUVqui8cYNX8y",
),
(
messages.InputScriptType.SPENDP2SHWITNESS,
"ypub6WYmBsV2xgQueQwhduAUQTFzUuXzQ2HEidmRpwKzX7ox8dsG8RCRD23zYcTkJiHhXDeb2nEGSiPbSaqGhBQu5jkgNvaiEiMxmZyMXEvfNco",
"xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXFD3YS797S55Y42sm2raxPrXQWAJodn7aXnHJdhz433ZJDhyUztHW55WatHeoYUVqui8cYNX8y",
+ "Ypub6hSrK7DUXdyH4z75aZdTEXboChaFcNxq2uR6kCbXtteMkpSAtpahJ8uvMKRDs9WbkgiZuNEPKvn6ZkT2zQZrEDsMDPh7e7pxfJFE77WWd1r",
),
(
messages.InputScriptType.SPENDWITNESS,
"zpub6qP2VY9x7MxPVi8pUFx6cYMVesgSLeGjdkHecLDsu8BqBjgVP5Myq5i8ZpRLJcwcvrmPnFppuNk9KsSqQspusySHFGH8pdBT3J2zujqcVuz",
"xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXFD3YS797S55Y42sm2raxPrXQWAJodn7aXnHJdhz433ZJDhyUztHW55WatHeoYUVqui8cYNX8y",
+ "Zpub72H7cmtPgKWkvHJCQvR5SchJNfihYzxKx1wKXbVRGu2EovFQ9UkFvCa4NXNos4AXAKqNeqpwnb8eT34bi6ys2TYx5jPYE2eSw2JsVjF4phE",
),
)
-@pytest.mark.parametrize("script_type, xpub, xpub_ignored_magic", VECTORS_SCRIPT_TYPES)
-def test_script_type(client: Client, script_type, xpub, xpub_ignored_magic):
+@pytest.mark.parametrize(
+ "script_type, xpub, xpub_ignored_magic, xpub_multisig", VECTORS_SCRIPT_TYPES
+)
+def test_script_type(
+ client: Client, script_type, xpub, xpub_ignored_magic, xpub_multisig
+):
path = parse_path("m/44h/0h/0")
res = btc.get_public_node(
client, path, coin_name="Bitcoin", script_type=script_type
)
assert res.xpub == xpub
+
res = btc.get_public_node(
client,
path,
@@ -183,3 +192,12 @@ def test_script_type(client: Client, script_type, xpub, xpub_ignored_magic):
ignore_xpub_magic=True,
)
assert res.xpub == xpub_ignored_magic
+
+ res = btc.get_public_node(
+ client,
+ path,
+ coin_name="Bitcoin",
+ script_type=script_type,
+ multisig_xpub_magic=True,
+ )
+ assert res.xpub == xpub_multisig
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index a27f55c3d8d..6b7c973b4b4 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -139,10 +139,10 @@
"T1B1_en_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
-"T1B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
-"T1B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
-"T1B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
-"T1B1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+"T1B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+"T1B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+"T1B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+"T1B1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_bitcoin-test_getpublickey.py::test_slip25_path": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1B1_en_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
@@ -1214,10 +1214,10 @@
"T2T1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
"T2T1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
"T2T1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
-"T2T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
-"T2T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
-"T2T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
-"T2T1_cs_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
+"T2T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
+"T2T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
+"T2T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
+"T2T1_cs_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
"T2T1_cs_bitcoin-test_getpublickey.py::test_slip25_path": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
"T2T1_cs_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
"T2T1_cs_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "1f6bdb20db5fd627b7a35e11124951ebbb4fa8d5891f896c5c631864fa9db57c",
@@ -2658,10 +2658,10 @@
"T2T1_de_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
"T2T1_de_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
"T2T1_de_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
-"T2T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
-"T2T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
-"T2T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
-"T2T1_de_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
+"T2T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
+"T2T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
+"T2T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
+"T2T1_de_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
"T2T1_de_bitcoin-test_getpublickey.py::test_slip25_path": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
"T2T1_de_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
"T2T1_de_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "96b3a83a05af35d33094d43598e4efcadb4d00a07141cb79bdfee45365b189d4",
@@ -4102,10 +4102,10 @@
"T2T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
"T2T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
"T2T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
-"T2T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
-"T2T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
-"T2T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
-"T2T1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
+"T2T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
+"T2T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
+"T2T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
+"T2T1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
"T2T1_en_bitcoin-test_getpublickey.py::test_slip25_path": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
"T2T1_en_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
"T2T1_en_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "41a900645bc9366f28d560c3cdc4e0b507a813efeafe7d4e784545fc4db4d0d1",
@@ -5564,10 +5564,10 @@
"T2T1_es_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
"T2T1_es_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
"T2T1_es_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
-"T2T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
-"T2T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
-"T2T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
-"T2T1_es_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
+"T2T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
+"T2T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
+"T2T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
+"T2T1_es_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
"T2T1_es_bitcoin-test_getpublickey.py::test_slip25_path": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
"T2T1_es_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
"T2T1_es_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "ac79464ce2c278a9a54e156b9fee11d6937e14dbb4b099281f740816376efa8a",
@@ -7008,10 +7008,10 @@
"T2T1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
"T2T1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
"T2T1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
-"T2T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
-"T2T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
-"T2T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
-"T2T1_fr_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
+"T2T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
+"T2T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
+"T2T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
+"T2T1_fr_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
"T2T1_fr_bitcoin-test_getpublickey.py::test_slip25_path": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
"T2T1_fr_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
"T2T1_fr_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "1c7a2caf38a46a6fbd9cac51d349454a40a267a6c3220be119770fe2b9f249d2",
@@ -8452,10 +8452,10 @@
"T2T1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
"T2T1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
"T2T1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
-"T2T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
-"T2T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
-"T2T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
-"T2T1_pt_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
+"T2T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
+"T2T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
+"T2T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
+"T2T1_pt_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
"T2T1_pt_bitcoin-test_getpublickey.py::test_slip25_path": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
"T2T1_pt_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
"T2T1_pt_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "c8dd180b3a8e7a34d43048add9ede1704df12cf145d1a8803d896a82b864f344",
@@ -10174,10 +10174,10 @@
"T3B1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
"T3B1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
"T3B1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
-"T3B1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
-"T3B1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
-"T3B1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
-"T3B1_cs_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
+"T3B1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
+"T3B1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
+"T3B1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
+"T3B1_cs_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
"T3B1_cs_bitcoin-test_getpublickey.py::test_slip25_path": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
"T3B1_cs_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
"T3B1_cs_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
@@ -11538,10 +11538,10 @@
"T3B1_de_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
"T3B1_de_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
"T3B1_de_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
-"T3B1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
-"T3B1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
-"T3B1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
-"T3B1_de_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
+"T3B1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
+"T3B1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
+"T3B1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
+"T3B1_de_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
"T3B1_de_bitcoin-test_getpublickey.py::test_slip25_path": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
"T3B1_de_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
"T3B1_de_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
@@ -12902,10 +12902,10 @@
"T3B1_en_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
"T3B1_en_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
"T3B1_en_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
-"T3B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
-"T3B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
-"T3B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
-"T3B1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
+"T3B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
+"T3B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
+"T3B1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
+"T3B1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
"T3B1_en_bitcoin-test_getpublickey.py::test_slip25_path": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
"T3B1_en_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
"T3B1_en_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
@@ -14266,10 +14266,10 @@
"T3B1_es_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
"T3B1_es_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
"T3B1_es_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
-"T3B1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
-"T3B1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
-"T3B1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
-"T3B1_es_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
+"T3B1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
+"T3B1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
+"T3B1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
+"T3B1_es_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
"T3B1_es_bitcoin-test_getpublickey.py::test_slip25_path": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
"T3B1_es_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
"T3B1_es_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
@@ -15630,10 +15630,10 @@
"T3B1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
"T3B1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
"T3B1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
-"T3B1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
-"T3B1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
-"T3B1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
-"T3B1_fr_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
+"T3B1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
+"T3B1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
+"T3B1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
+"T3B1_fr_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
"T3B1_fr_bitcoin-test_getpublickey.py::test_slip25_path": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
"T3B1_fr_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
"T3B1_fr_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "e3c2430161dcb3c785aa1366fe9c249c15a2fba6c9dc932099c591305b88a00c",
@@ -16994,10 +16994,10 @@
"T3B1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
"T3B1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
"T3B1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
-"T3B1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
-"T3B1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
-"T3B1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
-"T3B1_pt_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
+"T3B1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
+"T3B1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
+"T3B1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
+"T3B1_pt_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
"T3B1_pt_bitcoin-test_getpublickey.py::test_slip25_path": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
"T3B1_pt_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
"T3B1_pt_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "666a44b8f08b659b477eeef76082e0777fa42defa7b7ef584b4ca8bce4337424",
@@ -18688,10 +18688,10 @@
"T3T1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
"T3T1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
"T3T1_cs_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
-"T3T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
-"T3T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
-"T3T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
-"T3T1_cs_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
+"T3T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
+"T3T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
+"T3T1_cs_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
+"T3T1_cs_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
"T3T1_cs_bitcoin-test_getpublickey.py::test_slip25_path": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
"T3T1_cs_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
"T3T1_cs_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "e333c4ca5bad56f95c92048d50f9de86ba17177f57345eb1d215f1d5f46d7027",
@@ -20052,10 +20052,10 @@
"T3T1_de_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
"T3T1_de_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
"T3T1_de_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
-"T3T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
-"T3T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
-"T3T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
-"T3T1_de_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
+"T3T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
+"T3T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
+"T3T1_de_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
+"T3T1_de_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
"T3T1_de_bitcoin-test_getpublickey.py::test_slip25_path": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
"T3T1_de_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
"T3T1_de_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "e70bebe8aa868999dc88c44f04d136bbdae30a0abc1af2ed4740bb516b60a202",
@@ -21416,10 +21416,10 @@
"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
"T3T1_en_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
-"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
-"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
-"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
-"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
+"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
+"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
+"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
+"T3T1_en_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
"T3T1_en_bitcoin-test_getpublickey.py::test_slip25_path": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
"T3T1_en_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
"T3T1_en_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "5133fce02dd881612fb121f919b85166d9edf574147fc18d5ab9812f01a17e3a",
@@ -22780,10 +22780,10 @@
"T3T1_es_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
"T3T1_es_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
"T3T1_es_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
-"T3T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
-"T3T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
-"T3T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
-"T3T1_es_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
+"T3T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
+"T3T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
+"T3T1_es_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
+"T3T1_es_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
"T3T1_es_bitcoin-test_getpublickey.py::test_slip25_path": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
"T3T1_es_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
"T3T1_es_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "a44ee27c95d20bca090bfe76b46e7fdbffb1f12802a0a80a87e3e22251b3fe90",
@@ -24144,10 +24144,10 @@
"T3T1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
"T3T1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
"T3T1_fr_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
-"T3T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
-"T3T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
-"T3T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
-"T3T1_fr_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
+"T3T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
+"T3T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
+"T3T1_fr_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
+"T3T1_fr_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
"T3T1_fr_bitcoin-test_getpublickey.py::test_slip25_path": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
"T3T1_fr_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
"T3T1_fr_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "6844430088a65e658ba478d88a3627156d42aaedb444e272757496c676593258",
@@ -25508,10 +25508,10 @@
"T3T1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Bitcoin-path3]": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
"T3T1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Litecoin-path4]": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
"T3T1_pt_bitcoin-test_getpublickey.py::test_invalid_path[Testnet-path1]": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
-"T3T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-9813cc48": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
-"T3T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
-"T3T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
-"T3T1_pt_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
+"T3T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDADDRESS-xpub6BiVtCp7ozs-1fe2aa32": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
+"T3T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-b255fc10": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
+"T3T1_pt_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-bf8bd70e": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
+"T3T1_pt_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-ebea9841": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
"T3T1_pt_bitcoin-test_getpublickey.py::test_slip25_path": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
"T3T1_pt_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",
"T3T1_pt_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "708b1d45065e8456dc4d87f675b4014305d7e197b88b33485c30c10523577104",