device: release HID handle before failing

nistp521
Roman Zeyde 7 years ago
parent f177b0b55a
commit 8cf1f0463a
No known key found for this signature in database
GPG Key ID: 87CAE5FA46917CBB

@ -2,7 +2,7 @@
# pylint: disable=unused-import,import-error
from keepkeylib.client import CallException as Error
from keepkeylib.client import CallException, PinException
from keepkeylib.client import KeepKeyClient as Client
from keepkeylib.messages_pb2 import PassphraseAck, PinMatrixAck
from keepkeylib.transport_hid import HidTransport as Transport

@ -77,7 +77,12 @@ class Trezor(interface.Device):
' (current: {})')
raise ValueError(fmt.format(self, self.required_version,
current_version))
connection.ping(msg='', pin_protection=True) # unlock PIN
try:
connection.ping(msg='', pin_protection=True) # unlock PIN
except Exception as e:
log.exception('ping failed: %s', e)
connection.close() # so the next HID open() will succeed
raise
return connection
raise interface.NotFoundError('{} not connected'.format(self))
@ -117,7 +122,7 @@ class Trezor(interface.Device):
assert len(result.signature) == 65
assert result.signature[:1] == b'\x00'
return result.signature[1:]
except self._defs.Error as e:
except self._defs.CallException as e:
msg = '{} error: {}'.format(self, e)
log.debug(msg, exc_info=True)
raise interface.DeviceError(msg)
@ -136,7 +141,7 @@ class Trezor(interface.Device):
assert len(result.session_key) in {65, 33} # NIST256 or Curve25519
assert result.session_key[:1] == b'\x04'
return result.session_key
except self._defs.Error as e:
except self._defs.CallException as e:
msg = '{} error: {}'.format(self, e)
log.debug(msg, exc_info=True)
raise interface.DeviceError(msg)

@ -2,7 +2,7 @@
# pylint: disable=unused-import,import-error
from trezorlib.client import CallException as Error
from trezorlib.client import CallException, PinException
from trezorlib.client import TrezorClient as Client
from trezorlib.messages_pb2 import PassphraseAck, PinMatrixAck
from trezorlib.transport_bridge import BridgeTransport

Loading…
Cancel
Save