diff --git a/libagent/device/trezor.py b/libagent/device/trezor.py index 7440e21..5d7cccf 100644 --- a/libagent/device/trezor.py +++ b/libagent/device/trezor.py @@ -57,21 +57,25 @@ class Trezor(interface.Device): cli_handler = conn.callback_PinMatrixRequest def new_handler(msg): - if _is_open_tty(sys.stdin): - result = cli_handler(msg) # CLI-based PIN handler - else: - scrambled_pin = _message_box( - 'Use the numeric keypad to describe number positions.\n' - 'The layout is:\n' - ' 7 8 9\n' - ' 4 5 6\n' - ' 1 2 3\n' - 'Please enter PIN:') - result = self._defs.PinMatrixAck(pin=scrambled_pin) - if not set(result.pin).issubset('123456789'): - raise self._defs.PinException( - None, 'Invalid scrambled PIN: {!r}'.format(result.pin)) - return result + try: + if _is_open_tty(sys.stdin): + result = cli_handler(msg) # CLI-based PIN handler + else: + scrambled_pin = _message_box( + 'Use the numeric keypad to describe number positions.\n' + 'The layout is:\n' + ' 7 8 9\n' + ' 4 5 6\n' + ' 1 2 3\n' + 'Please enter PIN:') + result = self._defs.PinMatrixAck(pin=scrambled_pin) + if not set(result.pin).issubset('123456789'): + raise self._defs.PinException( + None, 'Invalid scrambled PIN: {!r}'.format(result.pin)) + return result + except: # noqa + conn.init_device() + raise conn.callback_PinMatrixRequest = new_handler @@ -81,20 +85,24 @@ class Trezor(interface.Device): cli_handler = conn.callback_PassphraseRequest def new_handler(msg): - if self.__class__.cached_passphrase_ack: - log.debug('re-using cached %s passphrase', self) - return self.__class__.cached_passphrase_ack - - if _is_open_tty(sys.stdin): - # use CLI-based PIN handler - ack = cli_handler(msg) - else: - passphrase = _message_box('Please enter passphrase:') - passphrase = mnemonic.Mnemonic.normalize_string(passphrase) - ack = self._defs.PassphraseAck(passphrase=passphrase) - - self.__class__.cached_passphrase_ack = ack - return ack + try: + if self.__class__.cached_passphrase_ack: + log.debug('re-using cached %s passphrase', self) + return self.__class__.cached_passphrase_ack + + if _is_open_tty(sys.stdin): + # use CLI-based PIN handler + ack = cli_handler(msg) + else: + passphrase = _message_box('Please enter passphrase:') + passphrase = mnemonic.Mnemonic.normalize_string(passphrase) + ack = self._defs.PassphraseAck(passphrase=passphrase) + + self.__class__.cached_passphrase_ack = ack + return ack + except: # noqa + conn.init_device() + raise conn.callback_PassphraseRequest = new_handler