tdetect when trying to sign with a hw wallet offline in a not supported config - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 3b8c1c6c04effe94ffe50ad2076840ef6439835d DIR parent 4ff3791cb93fcdda0b534bc2be575121f4d59705 HTML Author: SomberNight <somber.night@protonmail.com> Date: Fri, 6 Apr 2018 18:29:41 +0200 detect when trying to sign with a hw wallet offline in a not supported config closes #4229 Diffstat: M plugins/keepkey/plugin.py | 4 +++- M plugins/ledger/ledger.py | 3 +++ M plugins/trezor/trezor.py | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) --- DIR diff --git a/plugins/keepkey/plugin.py b/plugins/keepkey/plugin.py t@@ -7,7 +7,7 @@ from electrum.bitcoin import (b58_address_to_hash160, xpub_from_pubkey, from electrum import constants from electrum.i18n import _ from electrum.plugins import BasePlugin -from electrum.transaction import deserialize +from electrum.transaction import deserialize, Transaction from electrum.keystore import Hardware_KeyStore, is_xpubkey, parse_xpubkey from electrum.base_wizard import ScriptTypeNotSupported t@@ -48,6 +48,8 @@ class KeepKeyCompatibleKeyStore(Hardware_KeyStore): for txin in tx.inputs(): pubkeys, x_pubkeys = tx.get_sorted_pubkeys(txin) tx_hash = txin['prevout_hash'] + if txin.get('prev_tx') is None and not Transaction.is_segwit_input(txin): + raise Exception(_('Offline signing with {} is not supported for legacy inputs.').format(self.device)) prev_tx[tx_hash] = txin['prev_tx'] for x_pubkey in x_pubkeys: if not is_xpubkey(x_pubkey): DIR diff --git a/plugins/ledger/ledger.py b/plugins/ledger/ledger.py t@@ -350,6 +350,9 @@ class Ledger_KeyStore(Hardware_KeyStore): self.give_error("No matching x_key for sign_transaction") # should never happen redeemScript = Transaction.get_preimage_script(txin) + if txin.get('prev_tx') is None: # and not Transaction.is_segwit_input(txin): + # note: offline signing does not work atm even with segwit inputs for ledger + raise Exception(_('Offline signing with {} is not supported.').format(self.device)) inputs.append([txin['prev_tx'].raw, txin['prevout_n'], redeemScript, txin['prevout_hash'], signingPos, txin.get('sequence', 0xffffffff - 1) ]) inputsPaths.append(hwAddress) pubKeys.append(pubkeys) DIR diff --git a/plugins/trezor/trezor.py b/plugins/trezor/trezor.py t@@ -6,7 +6,7 @@ from electrum.bitcoin import (b58_address_to_hash160, xpub_from_pubkey, from electrum import constants from electrum.i18n import _ from electrum.plugins import BasePlugin, Device -from electrum.transaction import deserialize +from electrum.transaction import deserialize, Transaction from electrum.keystore import Hardware_KeyStore, is_xpubkey, parse_xpubkey from ..hw_wallet import HW_PluginBase t@@ -63,6 +63,8 @@ class TrezorKeyStore(Hardware_KeyStore): for txin in tx.inputs(): pubkeys, x_pubkeys = tx.get_sorted_pubkeys(txin) tx_hash = txin['prevout_hash'] + if txin.get('prev_tx') is None and not Transaction.is_segwit_input(txin): + raise Exception(_('Offline signing with {} is not supported for legacy inputs.').format(self.device)) prev_tx[tx_hash] = txin['prev_tx'] for x_pubkey in x_pubkeys: if not is_xpubkey(x_pubkey):