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 # 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.client import KeepKeyClient as Client
from keepkeylib.messages_pb2 import PassphraseAck, PinMatrixAck from keepkeylib.messages_pb2 import PassphraseAck, PinMatrixAck
from keepkeylib.transport_hid import HidTransport as Transport from keepkeylib.transport_hid import HidTransport as Transport

@ -77,7 +77,12 @@ class Trezor(interface.Device):
' (current: {})') ' (current: {})')
raise ValueError(fmt.format(self, self.required_version, raise ValueError(fmt.format(self, self.required_version,
current_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 return connection
raise interface.NotFoundError('{} not connected'.format(self)) raise interface.NotFoundError('{} not connected'.format(self))
@ -117,7 +122,7 @@ class Trezor(interface.Device):
assert len(result.signature) == 65 assert len(result.signature) == 65
assert result.signature[:1] == b'\x00' assert result.signature[:1] == b'\x00'
return result.signature[1:] return result.signature[1:]
except self._defs.Error as e: except self._defs.CallException as e:
msg = '{} error: {}'.format(self, e) msg = '{} error: {}'.format(self, e)
log.debug(msg, exc_info=True) log.debug(msg, exc_info=True)
raise interface.DeviceError(msg) raise interface.DeviceError(msg)
@ -136,7 +141,7 @@ class Trezor(interface.Device):
assert len(result.session_key) in {65, 33} # NIST256 or Curve25519 assert len(result.session_key) in {65, 33} # NIST256 or Curve25519
assert result.session_key[:1] == b'\x04' assert result.session_key[:1] == b'\x04'
return result.session_key return result.session_key
except self._defs.Error as e: except self._defs.CallException as e:
msg = '{} error: {}'.format(self, e) msg = '{} error: {}'.format(self, e)
log.debug(msg, exc_info=True) log.debug(msg, exc_info=True)
raise interface.DeviceError(msg) raise interface.DeviceError(msg)

@ -2,7 +2,7 @@
# pylint: disable=unused-import,import-error # 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.client import TrezorClient as Client
from trezorlib.messages_pb2 import PassphraseAck, PinMatrixAck from trezorlib.messages_pb2 import PassphraseAck, PinMatrixAck
from trezorlib.transport_bridge import BridgeTransport from trezorlib.transport_bridge import BridgeTransport

Loading…
Cancel
Save