Browse Source

keepkey: support v6.0.0+ firmwares (webusb)

regtest_lnd
keepkeyjon 6 years ago
parent
commit
ef7af73bd3
No known key found for this signature in database GPG Key ID: 1A60E4FE407D43EF
  1. 25
      electrum/plugins/keepkey/keepkey.py

25
electrum/plugins/keepkey/keepkey.py

@ -85,10 +85,12 @@ class KeepKeyPlugin(HW_PluginBase):
import keepkeylib
import keepkeylib.ckd_public
import keepkeylib.transport_hid
import keepkeylib.transport_webusb
self.client_class = client.KeepKeyClient
self.ckd_public = keepkeylib.ckd_public
self.types = keepkeylib.client.types
self.DEVICE_IDS = keepkeylib.transport_hid.DEVICE_IDS
self.DEVICE_IDS = (keepkeylib.transport_hid.DEVICE_IDS +
keepkeylib.transport_webusb.DEVICE_IDS)
self.device_manager().register_devices(self.DEVICE_IDS)
self.libraries_available = True
except ImportError:
@ -98,6 +100,13 @@ class KeepKeyPlugin(HW_PluginBase):
from keepkeylib.transport_hid import HidTransport
return HidTransport(pair)
def webusb_transport(self, device):
from keepkeylib.transport_webusb import WebUsbTransport
for d in WebUsbTransport.enumerate():
if device.id_.startswith(d.getSerialNumber()):
return WebUsbTransport(d)
return WebUsbTransport(device)
def _try_hid(self, device):
self.print_error("Trying to connect over USB...")
if device.interface_number == 1:
@ -113,8 +122,20 @@ class KeepKeyPlugin(HW_PluginBase):
self.print_error("cannot connect at", device.path, str(e))
return None
def _try_webusb(self, device):
self.print_error("Trying to connect over WebUSB...")
try:
return self.webusb_transport(device)
except BaseException as e:
self.print_error("cannot connect at", device.path, str(e))
return None
def create_client(self, device, handler):
transport = self._try_hid(device)
if device.product_key[1] == 2:
transport = self._try_webusb(device)
else:
transport = self._try_hid(device)
if not transport:
self.print_error("cannot connect to device")
return

Loading…
Cancel
Save