device: import device-specific `defs` module lazily

It may fail on unsupported platforms (e.g. keepkeylib does not supoprt Python 3)
nistp521
Roman Zeyde 8 years ago
parent 604b2b7e99
commit cad2ec1239
No known key found for this signature in database
GPG Key ID: 87CAE5FA46917CBB

@ -20,7 +20,10 @@ def _verify_support(identity, ecdh):
class KeepKey(trezor.Trezor):
"""Connection to KeepKey device."""
from . import keepkey_defs as defs
@property
def _defs(self):
from . import keepkey_defs
return keepkey_defs
required_version = '>=1.0.4'

@ -12,19 +12,22 @@ log = logging.getLogger(__name__)
class Trezor(interface.Device):
"""Connection to TREZOR device."""
from . import trezor_defs as defs
@property
def _defs(self):
from . import trezor_defs
return trezor_defs
required_version = '>=1.4.0'
def connect(self):
"""Enumerate and connect to the first USB HID interface."""
def empty_passphrase_handler(_):
return self.defs.PassphraseAck(passphrase='')
return self._defs.PassphraseAck(passphrase='')
for d in self.defs.HidTransport.enumerate():
for d in self._defs.HidTransport.enumerate():
log.debug('endpoint: %s', d)
transport = self.defs.HidTransport(d)
connection = self.defs.Client(transport)
transport = self._defs.HidTransport(d)
connection = self._defs.Client(transport)
connection.callback_PassphraseRequest = empty_passphrase_handler
f = connection.features
log.debug('connected to %s %s', self, f.device_id)
@ -60,7 +63,7 @@ class Trezor(interface.Device):
return result.node.public_key
def _identity_proto(self, identity):
result = self.defs.IdentityType()
result = self._defs.IdentityType()
for name, value in identity.items():
setattr(result, name, value)
return result
@ -80,7 +83,7 @@ class Trezor(interface.Device):
assert len(result.signature) == 65
assert result.signature[:1] == b'\x00'
return result.signature[1:]
except self.defs.CallException as e:
except self._defs.CallException as e:
msg = '{} error: {}'.format(self, e)
log.debug(msg, exc_info=True)
raise interface.DeviceError(msg)
@ -99,7 +102,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.CallException as e:
except self._defs.CallException as e:
msg = '{} error: {}'.format(self, e)
log.debug(msg, exc_info=True)
raise interface.DeviceError(msg)

Loading…
Cancel
Save