tMerge pull request #5205 from keepkeyjon/keepkey-webusb - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit c325f91c81020af4799744bbb387a9e683dbd496 DIR parent a62bf2a53ac3c6a596b2570ba41636fb979df2c5 HTML Author: ghost43 <somber.night@protonmail.com> Date: Mon, 18 Mar 2019 16:57:45 +0100 Merge pull request #5205 from keepkeyjon/keepkey-webusb keepkey: support v6.0.0+ firmwares (webusb) Diffstat: M electrum/plugins/keepkey/keepkey.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) --- DIR diff --git a/electrum/plugins/keepkey/keepkey.py b/electrum/plugins/keepkey/keepkey.py t@@ -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: t@@ -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: t@@ -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