From e85ed74f8fe8e44179a0689bff845bdd44806fce Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Wed, 13 Jan 2021 23:00:00 +0100 Subject: [PATCH] core: implement GetAddress.ignore_xpub_magic --- core/src/apps/bitcoin/get_address.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/core/src/apps/bitcoin/get_address.py b/core/src/apps/bitcoin/get_address.py index b0832e64e..a7b64d4f0 100644 --- a/core/src/apps/bitcoin/get_address.py +++ b/core/src/apps/bitcoin/get_address.py @@ -19,7 +19,11 @@ if False: async def show_xpubs( - ctx: wire.Context, coin: CoinInfo, pubnodes: List[HDNodeType], multisig_index: int + ctx: wire.Context, + coin: CoinInfo, + xpub_magic: int, + pubnodes: List[HDNodeType], + multisig_index: int, ) -> bool: for i, pubnode in enumerate(pubnodes): cancel = "Next" if i < len(pubnodes) - 1 else "Address" @@ -31,7 +35,7 @@ async def show_xpubs( public_key=pubnode.public_key, curve_name=coin.curve_name, ) - xpub = node.serialize_public(coin.xpub_magic) + xpub = node.serialize_public(xpub_magic) desc = "XPUB #%d" % (i + 1) desc += " (yours)" if i == multisig_index else " (others)" if await show_xpub(ctx, xpub, desc=desc, cancel=cancel): @@ -56,13 +60,27 @@ async def get_address( address = addresses.get_address(msg.script_type, coin, node, msg.multisig) address_short = addresses.address_short(coin, address) - if msg.script_type == InputScriptType.SPENDWITNESS: + if coin.segwit and msg.script_type == InputScriptType.SPENDWITNESS: address_qr = address.upper() # bech32 address elif coin.cashaddr_prefix is not None: address_qr = address.upper() # cashaddr address else: address_qr = address # base58 address + if msg.multisig: + multisig_xpub_magic = coin.xpub_magic + if coin.segwit and not msg.ignore_xpub_magic: + if ( + msg.script_type == InputScriptType.SPENDWITNESS + and coin.xpub_magic_multisig_segwit_native is not None + ): + multisig_xpub_magic = coin.xpub_magic_multisig_segwit_native + elif ( + msg.script_type == InputScriptType.SPENDP2SHWITNESS + and coin.xpub_magic_multisig_segwit_p2sh is not None + ): + multisig_xpub_magic = coin.xpub_magic_multisig_segwit_p2sh + if msg.show_display: if msg.multisig: if msg.multisig.nodes: @@ -76,7 +94,9 @@ async def get_address( break if await show_qr(ctx, address_qr, desc=desc, cancel="XPUBs"): break - if await show_xpubs(ctx, coin, pubnodes, multisig_index): + if await show_xpubs( + ctx, coin, multisig_xpub_magic, pubnodes, multisig_index + ): break else: desc = address_n_to_str(msg.address_n)