simplify get_private_key, use base58
This commit is contained in:
6
electrum
6
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:
|
||||
|
||||
@@ -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."))
|
||||
|
||||
|
||||
@@ -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)
|
||||
return SecretToASecret( pk, compressed )
|
||||
|
||||
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 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)
|
||||
|
||||
Reference in New Issue
Block a user