digitalbitbox: correctly handle user aborts

1. When the pairing is being forced and the user clicks 'No', the tx
was cancelled completely because the UserCancelled exception was
accidentally converted to an Exception.
2. Same with user aborting the signing process with a short touch on
the device (or a timeout).
This commit is contained in:
Marko Bencun 2017-11-24 10:09:59 +01:00
parent 9fc946492b
commit f3092a8b50
1 changed files with 6 additions and 1 deletions

View File

@ -11,7 +11,7 @@ try:
from electrum.i18n import _ from electrum.i18n import _
from electrum.keystore import Hardware_KeyStore from electrum.keystore import Hardware_KeyStore
from ..hw_wallet import HW_PluginBase from ..hw_wallet import HW_PluginBase
from electrum.util import print_error, to_string from electrum.util import print_error, to_string, UserCancelled
import time import time
import hid import hid
@ -588,6 +588,9 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
self.handler.finished() self.handler.finished()
if 'error' in reply: if 'error' in reply:
if reply["error"].get('code') in (600, 601):
# aborted via LED short touch or timeout
raise UserCancelled()
raise Exception(reply['error']['message']) raise Exception(reply['error']['message'])
if 'sign' not in reply: if 'sign' not in reply:
@ -623,6 +626,8 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
sig = sigencode_der(sig_r, sig_s, generator_secp256k1.order()) sig = sigencode_der(sig_r, sig_s, generator_secp256k1.order())
txin['signatures'][ii] = to_hexstr(sig) + '01' txin['signatures'][ii] = to_hexstr(sig) + '01'
tx._inputs[i] = txin tx._inputs[i] = txin
except UserCancelled:
raise
except BaseException as e: except BaseException as e:
self.give_error(e, True) self.give_error(e, True)
else: else: