device: release HID handle before failing
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user