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.keystore import Hardware_KeyStore
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 hid
@ -588,6 +588,9 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
self.handler.finished()
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'])
if 'sign' not in reply:
@ -623,6 +626,8 @@ class DigitalBitbox_KeyStore(Hardware_KeyStore):
sig = sigencode_der(sig_r, sig_s, generator_secp256k1.order())
txin['signatures'][ii] = to_hexstr(sig) + '01'
tx._inputs[i] = txin
except UserCancelled:
raise
except BaseException as e:
self.give_error(e, True)
else: