electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 6fb7dbd30de507091cd5732f4403b37a316992d6
parent 9b29c6c2e61fc304baac257e2c2b3c2024fb5a21
Author: Neil Booth <kyuupichan@gmail.com>
Date:   Wed,  6 Jan 2016 23:08:02 +0900

Implement passphrase protection toggling.

Along with chicken box.

Diffstat:
Mgui/qt/installwizard.py | 2+-
Mlib/plugins.py | 14++++++--------
Mplugins/trezor/client.py | 9+++++++++
Mplugins/trezor/qt_generic.py | 20+++++++++++++++++++-
4 files changed, 35 insertions(+), 10 deletions(-)

diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py @@ -439,7 +439,6 @@ class InstallWizard(WindowModalDialog, WizardBase): else: text = QTextEdit() text.setMaximumHeight(60) - vbox.addWidget(text) if method == self.TIM_MNEMONIC: msg = _("Enter your BIP39 mnemonic:") else: @@ -451,6 +450,7 @@ class InstallWizard(WindowModalDialog, WizardBase): OK_button.setEnabled(False) vbox.addWidget(QLabel(msg)) + vbox.addWidget(text) pin = QLineEdit() pin.setValidator(QRegExpValidator(QRegExp('[1-9]{0,10}'))) pin.setMaximumWidth(100) diff --git a/lib/plugins.py b/lib/plugins.py @@ -238,14 +238,12 @@ class DeviceMgr(PrintError): a device is plugged into a different port the wallet is automatically re-paired. - Wallets are informed on connect / disconnect / unpairing events. - It must implement connected(), disconnected() and unpaired() - callbacks. Being connected implies a pairing. Being disconnected - doesn't. Callbacks can happen in any thread context, and we do - them without holding the lock. - - This plugin is thread-safe. Currently only USB is implemented. - ''' + Wallets are informed on connect / disconnect events. It must + implement connected(), disconnected() callbacks. Being connected + implies a pairing. Callbacks can happen in any thread context, + and we do them without holding the lock. + + This plugin is thread-safe. Currently only USB is implemented.''' # Client lookup types. CACHED will look up in our client cache # only. PRESENT will do a scan if there is no client in the cache. diff --git a/plugins/trezor/client.py b/plugins/trezor/client.py @@ -16,6 +16,7 @@ class GuiMixin(object): 'default': _("Check %s device to continue"), 'label': _("Confirm label change on %s device to continue"), 'remove pin': _("Confirm removal of PIN on %s device to continue"), + 'passphrase': _("Confirm on %s device to continue"), } def callback_ButtonRequest(self, msg): @@ -126,6 +127,14 @@ def trezor_client_class(protocol_mixin, base_client, proto): def address_from_derivation(self, derivation): return self.get_address('Bitcoin', self.expand_path(derivation)) + def toggle_passphrase(self): + self.msg_code_override = 'passphrase' + try: + enabled = not self.features.passphrase_protection + self.apply_settings(use_passphrase=enabled) + finally: + self.msg_code_override = None + def change_label(self, label): self.msg_code_override = 'label' try: diff --git a/plugins/trezor/qt_generic.py b/plugins/trezor/qt_generic.py @@ -208,6 +208,22 @@ def qt_plugin_class(base_plugin_class): get_client().change_label(str(response[0])) refresh() + def toggle_passphrase(): + title = _("Confirm Toggle Passphrase Protection") + msg = _("This will cause your Electrum wallet to be unpaired " + "unless your passphrase was or will be empty.\n\n" + "This is because addresses will no " + "longer correspond to those used by your %s.\n\n" + "If your passphrase is not or was not empty you will " + "need to create a new Electrum wallet with the install " + "wizard so that they match.\n\n" + "Are you sure you want to proceed?") % device + if not dialog.question(msg, title=title): + return + get_client().toggle_passphrase() + self.device_manager().close_wallet(wallet) # Unpair + refresh() + def set_pin(): get_client().set_pin(remove=False) refresh() @@ -266,6 +282,8 @@ def qt_plugin_class(base_plugin_class): language_label = QLabel() rename_button = QPushButton(_("Rename")) rename_button.clicked.connect(rename) + toggle_passphrase_button = QPushButton(_("Toggle")) + toggle_passphrase_button.clicked.connect(toggle_passphrase) pin_button = QPushButton() pin_button.clicked.connect(set_pin) clear_pin_button = QPushButton(_("Clear")) @@ -273,7 +291,7 @@ def qt_plugin_class(base_plugin_class): add_rows_to_layout(info_layout, [ (_("Device Label"), device_label, rename_button), - (_("Has Passphrase"), passphrase_label), + (_("Has Passphrase"), passphrase_label, toggle_passphrase_button), (_("Has PIN"), pin_label, pin_button, clear_pin_button), (_("Initialized"), initialized_label), (_("Device ID"), device_id_label),