add InvalidPassword exception
This commit is contained in:
parent
0e3500469e
commit
63c7a27d7e
4
electrum
4
electrum
|
@ -45,7 +45,7 @@ if __builtin__.use_local_modules:
|
|||
|
||||
from electrum import util
|
||||
from electrum import SimpleConfig, Network, Wallet, WalletStorage, NetworkProxy, Commands, known_commands, pick_random_server
|
||||
from electrum.util import print_msg, print_stderr, print_json, set_verbosity
|
||||
from electrum.util import print_msg, print_stderr, print_json, set_verbosity, InvalidPassword
|
||||
from electrum.daemon import get_daemon
|
||||
from electrum.plugins import init_plugins
|
||||
|
||||
|
@ -360,7 +360,7 @@ if __name__ == '__main__':
|
|||
# check password
|
||||
try:
|
||||
seed = wallet.get_seed(password)
|
||||
except Exception:
|
||||
except InvalidPassword:
|
||||
print_msg("Error: This password does not decode this wallet.")
|
||||
sys.exit(1)
|
||||
else:
|
||||
|
|
|
@ -24,7 +24,7 @@ import gi
|
|||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk, Gdk, GObject, cairo
|
||||
from decimal import Decimal
|
||||
from electrum.util import print_error
|
||||
from electrum.util import print_error, InvalidPassword
|
||||
from electrum.bitcoin import is_valid
|
||||
from electrum import WalletStorage, Wallet
|
||||
|
||||
|
@ -596,7 +596,7 @@ class ElectrumWindow:
|
|||
|
||||
try:
|
||||
wallet.get_seed(password)
|
||||
except Exception:
|
||||
except InvalidPassword:
|
||||
show_message("Incorrect password")
|
||||
return
|
||||
|
||||
|
|
|
@ -1912,8 +1912,8 @@ class ElectrumWindow(QMainWindow):
|
|||
|
||||
try:
|
||||
mnemonic = self.wallet.get_mnemonic(password)
|
||||
except Exception:
|
||||
QMessageBox.warning(self, _('Error'), _('Incorrect Password'), _('OK'))
|
||||
except BaseException as e:
|
||||
QMessageBox.warning(self, _('Error'), str(e), _('OK'))
|
||||
return
|
||||
from seed_dialog import SeedDialog
|
||||
d = SeedDialog(self, mnemonic, self.wallet.has_imported_keys())
|
||||
|
@ -2312,10 +2312,10 @@ class ElectrumWindow(QMainWindow):
|
|||
|
||||
try:
|
||||
mnemonic = self.wallet.get_mnemonic(password)
|
||||
except Exception:
|
||||
QMessageBox.warning(self, _('Error'), _('Incorrect Password'), _('OK'))
|
||||
except Exception as e:
|
||||
QMessageBox.warning(self, _('Error'), str(e), _('OK'))
|
||||
return
|
||||
|
||||
|
||||
d = QDialog(self)
|
||||
d.setWindowTitle(_('Private keys'))
|
||||
d.setMinimumSize(850, 300)
|
||||
|
|
|
@ -157,8 +157,8 @@ class PasswordDialog(QDialog):
|
|||
|
||||
try:
|
||||
self.wallet.check_password(password)
|
||||
except Exception:
|
||||
QMessageBox.warning(self.parent, _('Error'), _('Incorrect Password'), _('OK'))
|
||||
except BaseException as e:
|
||||
QMessageBox.warning(self.parent, _('Error'), str(e), _('OK'))
|
||||
return False, None, None
|
||||
|
||||
try:
|
||||
|
|
|
@ -20,7 +20,7 @@ import bitcoin
|
|||
from bitcoin import *
|
||||
from i18n import _
|
||||
from transaction import Transaction, is_extended_pubkey
|
||||
from util import print_msg
|
||||
from util import print_msg, InvalidPassword
|
||||
|
||||
|
||||
class Account(object):
|
||||
|
@ -145,7 +145,8 @@ class ImportedAccount(Account):
|
|||
address = self.get_addresses(0)[i]
|
||||
pk = pw_decode(self.keypairs[address][1], password)
|
||||
# this checks the password
|
||||
assert address == address_from_private_key(pk)
|
||||
if address != address_from_private_key(pk):
|
||||
raise InvalidPassword()
|
||||
return [pk]
|
||||
|
||||
def has_change(self):
|
||||
|
@ -242,7 +243,7 @@ class OldAccount(Account):
|
|||
master_public_key = master_private_key.get_verifying_key().to_string()
|
||||
if master_public_key != self.mpk:
|
||||
print_error('invalid password (mpk)', self.mpk.encode('hex'), master_public_key.encode('hex'))
|
||||
raise Exception('Invalid password')
|
||||
raise InvalidPassword()
|
||||
return True
|
||||
|
||||
def get_master_pubkeys(self):
|
||||
|
|
|
@ -24,7 +24,7 @@ import sys
|
|||
import hmac
|
||||
|
||||
import version
|
||||
from util import print_error
|
||||
from util import print_error, InvalidPassword
|
||||
|
||||
try:
|
||||
import ecdsa
|
||||
|
@ -98,7 +98,7 @@ def pw_decode(s, password):
|
|||
try:
|
||||
d = DecodeAES(secret, s).decode("utf8")
|
||||
except Exception:
|
||||
raise Exception('Invalid password')
|
||||
raise InvalidPassword()
|
||||
return d
|
||||
else:
|
||||
return s
|
||||
|
|
|
@ -2,10 +2,14 @@ import os, sys, re, json
|
|||
import platform
|
||||
import shutil
|
||||
from datetime import datetime
|
||||
is_verbose = False
|
||||
from i18n import _
|
||||
|
||||
class NotEnoughFunds(Exception): pass
|
||||
|
||||
class InvalidPassword(Exception):
|
||||
def __str__(self):
|
||||
return _("Incorrect password")
|
||||
|
||||
class MyEncoder(json.JSONEncoder):
|
||||
def default(self, obj):
|
||||
from transaction import Transaction
|
||||
|
@ -14,6 +18,7 @@ class MyEncoder(json.JSONEncoder):
|
|||
return super(MyEncoder, self).default(obj)
|
||||
|
||||
|
||||
is_verbose = False
|
||||
def set_verbosity(b):
|
||||
global is_verbose
|
||||
is_verbose = b
|
||||
|
|
|
@ -230,7 +230,8 @@ class Abstract_Wallet(object):
|
|||
sec = pw_decode(v, password)
|
||||
pubkey = public_key_from_private_key(sec)
|
||||
address = public_key_to_bc_address(pubkey.decode('hex'))
|
||||
assert address == k
|
||||
if address != k:
|
||||
raise InvalidPassword()
|
||||
self.import_key(sec, password)
|
||||
self.imported_keys.pop(k)
|
||||
self.storage.put('imported_keys', self.imported_keys)
|
||||
|
@ -713,8 +714,6 @@ class Abstract_Wallet(object):
|
|||
if total >= amount + fee: break
|
||||
else:
|
||||
raise NotEnoughFunds()
|
||||
#print_error("Not enough funds", total, amount, fee)
|
||||
#return None
|
||||
|
||||
# change address
|
||||
if not change_addr:
|
||||
|
@ -1284,12 +1283,17 @@ class BIP32_Wallet(Deterministic_Wallet):
|
|||
k = self.master_private_keys.get(account)
|
||||
if not k: return
|
||||
xprv = pw_decode(k, password)
|
||||
try:
|
||||
deserialize_xkey(xprv)
|
||||
except:
|
||||
raise InvalidPassword()
|
||||
return xprv
|
||||
|
||||
def check_password(self, password):
|
||||
xpriv = self.get_master_private_key(self.root_name, password)
|
||||
xpub = self.master_public_keys[self.root_name]
|
||||
assert deserialize_xkey(xpriv)[3] == deserialize_xkey(xpub)[3]
|
||||
if deserialize_xkey(xpriv)[3] != deserialize_xkey(xpub)[3]:
|
||||
raise InvalidPassword()
|
||||
|
||||
def add_master_public_key(self, name, xpub):
|
||||
self.master_public_keys[name] = xpub
|
||||
|
|
Loading…
Reference in New Issue