add InvalidPassword exception

This commit is contained in:
ThomasV 2014-12-03 22:35:05 +01:00
parent 0e3500469e
commit 63c7a27d7e
8 changed files with 31 additions and 21 deletions

View File

@ -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:

View File

@ -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

View File

@ -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)

View File

@ -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:

View File

@ -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):

View File

@ -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

View File

@ -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

View File

@ -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