From c8143957a6a4637e627c6c96267fcf243237beb2 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 17 Mar 2025 16:25:57 +0000 Subject: [PATCH] plugins: keepkey: rm dependence on external keepkeylib we will instead bundle our own fork, as a git submodule, https://github.com/spesmilo/electrum-keepkeylib related https://github.com/spesmilo/electrum/issues/7922 and https://github.com/keepkey/python-keepkey/issues/146 (i.e. upstream keepkeylib is unmaintained) --- .gitmodules | 3 +++ contrib/build-wine/deterministic.spec | 1 - contrib/deterministic-build/requirements-hw.txt | 4 ---- contrib/osx/osx.spec | 1 - contrib/requirements/requirements-hw.txt | 6 +++++- electrum/plugins/keepkey/client.py | 2 +- electrum/plugins/keepkey/keepkey.py | 13 ++++++------- electrum/plugins/keepkey/keepkeylib | 1 + 8 files changed, 16 insertions(+), 15 deletions(-) create mode 160000 electrum/plugins/keepkey/keepkeylib diff --git a/.gitmodules b/.gitmodules index 5bec5e6e2..ce9f6968f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "electrum/www"] path = electrum/plugins/payserver/www url = https://github.com/spesmilo/electrum-http.git +[submodule "electrum/plugins/keepkey/keepkeylib"] + path = electrum/plugins/keepkey/keepkeylib + url = https://github.com/spesmilo/electrum-keepkeylib.git diff --git a/contrib/build-wine/deterministic.spec b/contrib/build-wine/deterministic.spec index c7a24248d..e7fb55270 100644 --- a/contrib/build-wine/deterministic.spec +++ b/contrib/build-wine/deterministic.spec @@ -42,7 +42,6 @@ datas += collect_data_files(f"{PYPKG}.plugins") datas += collect_data_files('trezorlib') # TODO is this needed? and same question for other hww libs datas += collect_data_files('safetlib') datas += collect_data_files('btchip') -datas += collect_data_files('keepkeylib') datas += collect_data_files('ckcc') datas += collect_data_files('bitbox02') diff --git a/contrib/deterministic-build/requirements-hw.txt b/contrib/deterministic-build/requirements-hw.txt index e0d8cd046..0dbef4fff 100644 --- a/contrib/deterministic-build/requirements-hw.txt +++ b/contrib/deterministic-build/requirements-hw.txt @@ -279,10 +279,6 @@ hidapi==0.14.0 \ idna==3.6 \ --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f -keepkey==6.3.1 \ - --hash=sha256:88e2b5291c85c8e8567732f675697b88241082884aa1aba32257f35ee722fc09 \ - --hash=sha256:cef1e862e195ece3e42640a0f57d15a63086fd1dedc8b5ddfcbc9c2657f0bb1e \ - --hash=sha256:f369d640c65fec7fd8e72546304cdc768c04224a6b9b00a19dc2cd06fa9d2a6b ledger-bitcoin==0.3.0 \ --hash=sha256:ad9cdeaf33a45562bbd5bae6751025b869a2f81d6eb0267dd062a01f5925a4d5 \ --hash=sha256:e7c33404d02044c3810b294a510f7ad97bc65ab12dbdd180d873f2b4ebc0711a diff --git a/contrib/osx/osx.spec b/contrib/osx/osx.spec index fce663b9a..0d57467cb 100644 --- a/contrib/osx/osx.spec +++ b/contrib/osx/osx.spec @@ -45,7 +45,6 @@ datas += collect_data_files(f"{PYPKG}.plugins") datas += collect_data_files('trezorlib') # TODO is this needed? and same question for other hww libs datas += collect_data_files('safetlib') datas += collect_data_files('btchip') -datas += collect_data_files('keepkeylib') datas += collect_data_files('ckcc') datas += collect_data_files('bitbox02') diff --git a/contrib/requirements/requirements-hw.txt b/contrib/requirements/requirements-hw.txt index ee15b8c33..ae30ba6fa 100644 --- a/contrib/requirements/requirements-hw.txt +++ b/contrib/requirements/requirements-hw.txt @@ -7,7 +7,11 @@ trezor[hidapi]>=0.13.0,<0.14 safet>=0.1.5 # device plugin: keepkey -keepkey>=6.3.1 +ecdsa>=0.9 +protobuf>=3.0.0 +mnemonic>=0.8 +hidapi>=0.7.99.post15 +libusb1>=1.6 # device plugin: ledger # note: btchip-python only needed for "legacy" protocol and HW.1 support diff --git a/electrum/plugins/keepkey/client.py b/electrum/plugins/keepkey/client.py index 73bf66dc8..8f0d14c50 100644 --- a/electrum/plugins/keepkey/client.py +++ b/electrum/plugins/keepkey/client.py @@ -1,4 +1,4 @@ -from keepkeylib.client import proto, BaseClient, ProtocolMixin +from .keepkeylib.keepkeylib.client import proto, BaseClient, ProtocolMixin from .clientbase import KeepKeyClientBase class KeepKeyClient(KeepKeyClientBase, ProtocolMixin, BaseClient): diff --git a/electrum/plugins/keepkey/keepkey.py b/electrum/plugins/keepkey/keepkey.py index a5f577a53..6dbd7b819 100644 --- a/electrum/plugins/keepkey/keepkey.py +++ b/electrum/plugins/keepkey/keepkey.py @@ -75,10 +75,8 @@ class KeepKeyPlugin(HW_PluginBase): try: from . import client - import keepkeylib - import keepkeylib.ckd_public - import keepkeylib.transport_hid - import keepkeylib.transport_webusb + from .keepkeylib import keepkeylib + from .keepkeylib.keepkeylib import ckd_public, transport_hid, transport_webusb self.client_class = client.KeepKeyClient self.ckd_public = keepkeylib.ckd_public self.types = keepkeylib.client.types @@ -90,11 +88,12 @@ class KeepKeyPlugin(HW_PluginBase): self.device_manager().register_enumerate_func(self.enumerate) self.libraries_available = True except ImportError: + self.logger.debug("error importing keepkeylib", exc_info=True) self.libraries_available = False @runs_in_hwd_thread def enumerate(self): - from keepkeylib.transport_webusb import WebUsbTransport + from .keepkeylib.keepkeylib.transport_webusb import WebUsbTransport results = [] for dev in WebUsbTransport.enumerate(): path = self._dev_to_str(dev) @@ -112,12 +111,12 @@ class KeepKeyPlugin(HW_PluginBase): @runs_in_hwd_thread def hid_transport(self, pair): - from keepkeylib.transport_hid import HidTransport + from .keepkeylib.keepkeylib.transport_hid import HidTransport return HidTransport(pair) @runs_in_hwd_thread def webusb_transport(self, device): - from keepkeylib.transport_webusb import WebUsbTransport + from .keepkeylib.keepkeylib.transport_webusb import WebUsbTransport for dev in WebUsbTransport.enumerate(): if device.path == self._dev_to_str(dev): return WebUsbTransport(dev) diff --git a/electrum/plugins/keepkey/keepkeylib b/electrum/plugins/keepkey/keepkeylib new file mode 160000 index 000000000..fadf5f9fe --- /dev/null +++ b/electrum/plugins/keepkey/keepkeylib @@ -0,0 +1 @@ +Subproject commit fadf5f9fefde39cef61fa553a4dd17132000e3d1