commit 76439beec53e545ef33f083a0c98f27a867ff732
parent 5d6496f1f920aa70b129f1e54321ddd59c766b51
Author: thomasv <thomasv@gitorious>
Date: Fri, 22 Feb 2013 17:27:19 +0100
simplify get_private_key, use base58
Diffstat:
3 files changed, 15 insertions(+), 31 deletions(-)
diff --git a/electrum b/electrum
@@ -561,7 +561,7 @@ if __name__ == '__main__':
else: b=''
m_addr = "%34s"%addr
if options.show_keys:
- m_addr += ':' + str(wallet.get_private_key_base58(addr, password))
+ m_addr += ':' + str(wallet.get_private_key(addr, password))
print_msg(flags, m_addr, b, label)
if cmd == 'history':
@@ -703,7 +703,7 @@ if __name__ == '__main__':
elif cmd == 'dumpprivkey':
addr = args[1]
- sec = wallet.get_private_key_base58(addr, password)
+ sec = wallet.get_private_key(addr, password)
print_msg( sec )
@@ -770,7 +770,7 @@ if __name__ == '__main__':
if not private_keys:
for txin in tx.inputs:
addr = txin['address']
- private_keys[addr] = wallet.get_private_key_base58(addr, password)
+ private_keys[addr] = wallet.get_private_key(addr, password)
else:
pk = {}
for sec in private_keys:
diff --git a/lib/gui_qt.py b/lib/gui_qt.py
@@ -1456,7 +1456,7 @@ class ElectrumWindow(QMainWindow):
password = None
try:
- pk = self.wallet.get_private_key_base58(address, password)
+ pk = self.wallet.get_private_key(address, password)
except BaseException, e:
self.show_message(str(e))
return
@@ -1748,7 +1748,7 @@ class ElectrumWindow(QMainWindow):
for addr in self.wallet.all_addresses():
m_addr = "%34s"%addr
- transaction.writerow([m_addr, str(self.wallet.get_private_key_base58(addr, password))])
+ transaction.writerow([m_addr, str(self.wallet.get_private_key(addr, password))])
self.show_message(_("Private keys exported."))
diff --git a/lib/wallet.py b/lib/wallet.py
@@ -174,23 +174,14 @@ class Wallet:
def get_sequence(self,n,for_change):
return string_to_number( Hash( "%d:%d:"%(n,for_change) + self.master_public_key.decode('hex') ) )
- def get_private_key_base58(self, address, password):
- secexp, compressed = self.get_private_key(address, password)
- if secexp is None: return None
- pk = number_to_string( secexp, generator_secp256k1.order() )
- return SecretToASecret( pk, compressed )
-
def get_private_key(self, address, password):
""" Privatekey(type,n) = Master_private_key + H(n|S|type) """
- order = generator_secp256k1.order()
-
+
+ # decode seed in any case, in order to make test the password
+ seed = self.decode_seed(password)
+
if address in self.imported_keys.keys():
- sec = self.pw_decode( self.imported_keys[address], password )
- if not sec: return None, None
- pkey = regenerate_key(sec)
- compressed = is_compressed(sec)
- secexp = pkey.secret
-
+ return self.pw_decode( self.imported_keys[address], password )
else:
if address in self.addresses:
n = self.addresses.index(address)
@@ -201,23 +192,16 @@ class Wallet:
else:
raise BaseException("unknown address", address)
- seed = self.pw_decode( self.seed, password)
- if not seed: return None
+ order = generator_secp256k1.order()
secexp = self.stretch_key(seed)
secexp = ( secexp + self.get_sequence(n,for_change) ) % order
+ pk = number_to_string( secexp, generator_secp256k1.order() )
compressed = False
- pkey = EC_KEY(secexp)
-
- public_key = GetPubKey(pkey.pubkey, compressed)
- addr = public_key_to_bc_address(public_key)
- if addr != address:
- print_error('Invalid password with correct decoding')
- raise BaseException('Invalid password')
+ return SecretToASecret( pk, compressed )
- return secexp, compressed
def sign_message(self, address, message, password):
- sec = self.get_private_key_base58(address, password)
+ sec = self.get_private_key(address, password)
key = regenerate_key(sec)
compressed = is_compressed(sec)
return key.sign_message(message, compressed, address)
@@ -762,7 +746,7 @@ class Wallet:
private_keys = {}
for txin in tx.inputs:
addr = txin['address']
- sec = self.get_private_key_base58(addr, password)
+ sec = self.get_private_key(addr, password)
private_keys[addr] = sec
tx.sign(private_keys)
return str(tx)