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