use dumpprivkeys to efficiently dump private keys
This commit is contained in:
@@ -435,13 +435,16 @@ class DeterministicSequence:
|
||||
public_key2 = ecdsa.VerifyingKey.from_public_point( pubkey_point, curve = SECP256k1 )
|
||||
return '04' + public_key2.to_string().encode('hex')
|
||||
|
||||
def get_private_key(self, n, for_change, seed):
|
||||
def get_private_key_from_stretched_exponent(self, n, for_change, secexp):
|
||||
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
|
||||
return SecretToASecret( pk, compressed )
|
||||
|
||||
def get_private_key(self, n, for_change, seed):
|
||||
secexp = self.stretch_key(seed)
|
||||
return self.get_private_key_from_stretched_exponent(n, for_change, secexp)
|
||||
|
||||
def check_seed(self, seed):
|
||||
curve = SECP256k1
|
||||
|
||||
@@ -22,7 +22,7 @@ from bitcoin import *
|
||||
from decimal import Decimal
|
||||
import bitcoin
|
||||
|
||||
protected_commands = ['payto', 'password', 'mktx', 'get_seed', 'importprivkey','signmessage', 'signrawtransaction','dumpprivkey' ]
|
||||
protected_commands = ['payto', 'password', 'mktx', 'get_seed', 'importprivkey','signmessage', 'signrawtransaction', 'dumpprivkey', 'dumpprivkeys' ]
|
||||
|
||||
class Commands:
|
||||
|
||||
@@ -135,8 +135,11 @@ class Commands:
|
||||
print_msg(self.wallet.unprioritize(addr))
|
||||
|
||||
def dumpprivkey(self, addr):
|
||||
sec = self.wallet.get_private_key(addr, self.password)
|
||||
print_msg( sec )
|
||||
print_msg( self.wallet.get_private_key(addr, self.password) )
|
||||
|
||||
def dumpprivkeys(self, addresses):
|
||||
print_json( self.wallet.get_private_keys(addresses, self.password) )
|
||||
|
||||
|
||||
def validateaddress(self,addr):
|
||||
is_valid = self.wallet.is_valid(addr)
|
||||
|
||||
@@ -213,23 +213,29 @@ class Wallet:
|
||||
return seed
|
||||
|
||||
def get_private_key(self, address, password):
|
||||
return self.get_private_keys([address], password)[address]
|
||||
|
||||
def get_private_keys(self, addresses, password):
|
||||
# decode seed in any case, in order to test the password
|
||||
seed = self.decode_seed(password)
|
||||
|
||||
if address in self.imported_keys.keys():
|
||||
return pw_decode( self.imported_keys[address], password )
|
||||
else:
|
||||
if address in self.addresses:
|
||||
n = self.addresses.index(address)
|
||||
for_change = False
|
||||
elif address in self.change_addresses:
|
||||
n = self.change_addresses.index(address)
|
||||
for_change = True
|
||||
secexp = self.sequence.stretch_key(seed)
|
||||
out = {}
|
||||
for address in addresses:
|
||||
if address in self.imported_keys.keys():
|
||||
pk = pw_decode( self.imported_keys[address], password )
|
||||
else:
|
||||
raise BaseException("unknown address", address)
|
||||
if address in self.addresses:
|
||||
n = self.addresses.index(address)
|
||||
for_change = False
|
||||
elif address in self.change_addresses:
|
||||
n = self.change_addresses.index(address)
|
||||
for_change = True
|
||||
else:
|
||||
raise BaseException("unknown address", address)
|
||||
pk = self.sequence.get_private_key_from_stretched_exponent(n, for_change, secexp)
|
||||
out[address] = pk
|
||||
return out
|
||||
|
||||
return self.sequence.get_private_key(n, for_change, seed)
|
||||
|
||||
|
||||
def sign_message(self, address, message, password):
|
||||
|
||||
Reference in New Issue
Block a user