Browse Source

fix command line interface for hardware wallets. fixes #3056

seed_v14
ThomasV 7 years ago
parent
commit
24442de8df
  1. 3
      lib/keystore.py
  2. 20
      plugins/digitalbitbox/cmdline.py
  3. 1
      plugins/hw_wallet/__init__.py
  4. 39
      plugins/hw_wallet/cmdline.py
  5. 28
      plugins/keepkey/cmdline.py
  6. 23
      plugins/ledger/cmdline.py
  7. 31
      plugins/trezor/cmdline.py
  8. 2
      plugins/trezor/plugin.py

3
lib/keystore.py

@ -37,7 +37,7 @@ from .bitcoin import *
from .bitcoin import is_old_seed, is_new_seed, is_seed
from .util import PrintError, InvalidPassword, hfu
from .mnemonic import Mnemonic, load_wordlist
from .plugins import run_hook
class KeyStore(PrintError):
@ -488,6 +488,7 @@ class Hardware_KeyStore(KeyStore, Xpub):
self.label = d.get('label')
self.derivation = d.get('derivation')
self.handler = None
run_hook('init_keystore', self)
def set_label(self, label):
self.label = label

20
plugins/digitalbitbox/cmdline.py

@ -1,17 +1,11 @@
from electrum.util import print_msg
from .digitalbitbox import DigitalBitboxPlugin
class DigitalBitboxCmdLineHandler:
def stop(self):
pass
def show_message(self, msg):
print_msg(msg)
def get_passphrase(self, msg, confirm):
import getpass
print_msg(msg)
return getpass.getpass('')
from ..hw_wallet import CmdLineHandler
class Plugin(DigitalBitboxPlugin):
handler = DigitalBitboxCmdLineHandler()
handler = CmdLineHandler()
@hook
def init_keystore(self, keystore):
if not isinstance(keystore, self.keystore_class):
return
keystore.handler = self.handler

1
plugins/hw_wallet/__init__.py

@ -1 +1,2 @@
from .plugin import HW_PluginBase
from .cmdline import CmdLineHandler

39
plugins/hw_wallet/cmdline.py

@ -0,0 +1,39 @@
from electrum.util import print_msg, print_error, raw_input
class CmdLineHandler:
def get_passphrase(self, msg, confirm):
import getpass
print_msg(msg)
return getpass.getpass('')
def get_pin(self, msg):
t = { 'a':'7', 'b':'8', 'c':'9', 'd':'4', 'e':'5', 'f':'6', 'g':'1', 'h':'2', 'i':'3'}
print_msg(msg)
print_msg("a b c\nd e f\ng h i\n-----")
o = raw_input()
return ''.join(map(lambda x: t[x], o))
def prompt_auth(self, msg):
import getpass
print_msg(msg)
response = getpass.getpass('')
if len(response) == 0:
return None
return response
def yes_no_question(self, msg):
print_msg(msg)
return raw_input() in 'yY'
def stop(self):
pass
def show_message(self, msg, on_cancel):
print_msg(msg)
def update_status(self, b):
print_error('trezor status', b)
def finished(self):
pass

28
plugins/keepkey/cmdline.py

@ -1,25 +1,11 @@
from electrum.util import print_msg, raw_input
from .keepkey import KeepKeyPlugin
class KeepKeyCmdLineHandler:
def get_passphrase(self, msg, confirm):
import getpass
print_msg(msg)
return getpass.getpass('')
def get_pin(self, msg):
t = { 'a':'7', 'b':'8', 'c':'9', 'd':'4', 'e':'5', 'f':'6', 'g':'1', 'h':'2', 'i':'3'}
print_msg(msg)
print_msg("a b c\nd e f\ng h i\n-----")
o = raw_input()
return ''.join(map(lambda x: t[x], o))
def stop(self):
pass
def show_message(self, msg):
print_msg(msg)
from ..hw_wallet import CmdLineHandler
class Plugin(KeepKeyPlugin):
handler = KeepKeyCmdLineHandler()
handler = CmdLineHandler()
@hook
def init_keystore(self, keystore):
if not isinstance(keystore, self.keystore_class):
return
keystore.handler = self.handler

23
plugins/ledger/cmdline.py

@ -1,20 +1,11 @@
from electrum.util import print_msg
from .ledger import LedgerPlugin
class BTChipCmdLineHandler:
def stop(self):
pass
def show_message(self, msg):
print_msg(msg)
def prompt_auth(self, msg):
import getpass
print_msg(msg)
response = getpass.getpass('')
if len(response) == 0:
return None
return response
from ..hw_wallet import CmdLineHandler
class Plugin(LedgerPlugin):
handler = BTChipCmdLineHandler()
handler = CmdLineHandler()
@hook
def init_keystore(self, keystore):
if not isinstance(keystore, self.keystore_class):
return
keystore.handler = self.handler

31
plugins/trezor/cmdline.py

@ -1,26 +1,11 @@
from electrum.util import print_msg, raw_input
from electrum.plugins import hook
from .trezor import TrezorPlugin
class TrezorCmdLineHandler:
def get_passphrase(self, msg, confirm):
import getpass
print_msg(msg)
return getpass.getpass('')
def get_pin(self, msg):
t = { 'a':'7', 'b':'8', 'c':'9', 'd':'4', 'e':'5', 'f':'6', 'g':'1', 'h':'2', 'i':'3'}
print_msg(msg)
print_msg("a b c\nd e f\ng h i\n-----")
o = raw_input()
return ''.join(map(lambda x: t[x], o))
def stop(self):
pass
def show_message(self, msg):
print_msg(msg)
from ..hw_wallet import CmdLineHandler
class Plugin(TrezorPlugin):
handler = TrezorCmdLineHandler()
handler = CmdLineHandler()
@hook
def init_keystore(self, keystore):
if not isinstance(keystore, self.keystore_class):
return
keystore.handler = self.handler

2
plugins/trezor/plugin.py

@ -132,8 +132,6 @@ class TrezorCompatiblePlugin(HW_PluginBase):
return client
def get_client(self, keystore, force_pair=True):
# All client interaction should not be in the main GUI thread
assert self.main_thread != threading.current_thread()
devmgr = self.device_manager()
handler = keystore.handler
with devmgr.hid_lock:

Loading…
Cancel
Save