fixes for old keystore
This commit is contained in:
parent
5be93bdb73
commit
d471d4b905
|
@ -170,7 +170,7 @@ class Deterministic_KeyStore(Software_KeyStore):
|
|||
def add_seed(self, seed):
|
||||
if self.seed:
|
||||
raise Exception("a seed exists")
|
||||
self.seed_version, self.seed = self.format_seed(seed)
|
||||
self.seed = self.format_seed(seed)
|
||||
|
||||
def get_seed(self, password):
|
||||
return pw_decode(self.seed, password).encode('utf8')
|
||||
|
@ -233,7 +233,7 @@ class BIP32_KeyStore(Deterministic_KeyStore, Xpub):
|
|||
self.xprv = d.get('xprv')
|
||||
|
||||
def format_seed(self, seed):
|
||||
return NEW_SEED_VERSION, ' '.join(seed.split())
|
||||
return ' '.join(seed.split())
|
||||
|
||||
def dump(self):
|
||||
d = Deterministic_KeyStore.dump(self)
|
||||
|
@ -325,19 +325,20 @@ class Old_KeyStore(Deterministic_KeyStore):
|
|||
|
||||
def __init__(self, d):
|
||||
Deterministic_KeyStore.__init__(self, d)
|
||||
self.mpk = d.get('mpk').decode('hex')
|
||||
self.mpk = d.get('mpk')
|
||||
|
||||
def dump(self):
|
||||
d = Deterministic_KeyStore.dump(self)
|
||||
d['mpk'] = self.mpk.encode('hex')
|
||||
d['mpk'] = self.mpk
|
||||
d['type'] = 'old'
|
||||
return d
|
||||
|
||||
def add_seed(self, seed):
|
||||
Deterministic_KeyStore.add_seed(self, seed)
|
||||
self.mpk = self.mpk_from_seed(seed)
|
||||
def add_seed(self, seedphrase):
|
||||
Deterministic_KeyStore.add_seed(self, seedphrase)
|
||||
self.mpk = self.mpk_from_seed(self.seed)
|
||||
|
||||
def add_master_public_key(self, mpk):
|
||||
self.mpk = mpk.decode('hex')
|
||||
self.mpk = mpk
|
||||
|
||||
def format_seed(self, seed):
|
||||
import old_mnemonic
|
||||
|
@ -353,7 +354,7 @@ class Old_KeyStore(Deterministic_KeyStore):
|
|||
seed = old_mnemonic.mn_decode(words)
|
||||
if not seed:
|
||||
raise Exception("Invalid seed")
|
||||
return OLD_SEED_VERSION, seed
|
||||
return seed
|
||||
|
||||
def get_mnemonic(self, password):
|
||||
import old_mnemonic
|
||||
|
@ -365,7 +366,7 @@ class Old_KeyStore(Deterministic_KeyStore):
|
|||
secexp = klass.stretch_key(seed)
|
||||
master_private_key = ecdsa.SigningKey.from_secret_exponent(secexp, curve = SECP256k1)
|
||||
master_public_key = master_private_key.get_verifying_key().to_string()
|
||||
return master_public_key
|
||||
return master_public_key.encode('hex')
|
||||
|
||||
@classmethod
|
||||
def stretch_key(self, seed):
|
||||
|
@ -376,7 +377,7 @@ class Old_KeyStore(Deterministic_KeyStore):
|
|||
|
||||
@classmethod
|
||||
def get_sequence(self, mpk, for_change, n):
|
||||
return string_to_number(Hash("%d:%d:"%(n, for_change) + mpk))
|
||||
return string_to_number(Hash("%d:%d:"%(n, for_change) + mpk.decode('hex')))
|
||||
|
||||
def get_address(self, for_change, n):
|
||||
pubkey = self.get_pubkey(for_change, n)
|
||||
|
@ -386,7 +387,7 @@ class Old_KeyStore(Deterministic_KeyStore):
|
|||
@classmethod
|
||||
def get_pubkey_from_mpk(self, mpk, for_change, n):
|
||||
z = self.get_sequence(mpk, for_change, n)
|
||||
master_public_key = ecdsa.VerifyingKey.from_string(mpk, curve = SECP256k1)
|
||||
master_public_key = ecdsa.VerifyingKey.from_string(mpk.decode('hex'), curve = SECP256k1)
|
||||
pubkey_point = master_public_key.pubkey.point + z*SECP256k1.generator
|
||||
public_key2 = ecdsa.VerifyingKey.from_public_point(pubkey_point, curve = SECP256k1)
|
||||
return '04' + public_key2.to_string().encode('hex')
|
||||
|
@ -413,8 +414,8 @@ class Old_KeyStore(Deterministic_KeyStore):
|
|||
secexp = self.stretch_key(seed)
|
||||
master_private_key = ecdsa.SigningKey.from_secret_exponent( secexp, curve = SECP256k1 )
|
||||
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'))
|
||||
if master_public_key != self.mpk.decode('hex'):
|
||||
print_error('invalid password (mpk)', self.mpk, master_public_key.encode('hex'))
|
||||
raise InvalidPassword()
|
||||
|
||||
def check_password(self, password):
|
||||
|
@ -422,12 +423,11 @@ class Old_KeyStore(Deterministic_KeyStore):
|
|||
self.check_seed(seed)
|
||||
|
||||
def get_master_public_key(self):
|
||||
return self.mpk.encode('hex')
|
||||
return self.mpk
|
||||
|
||||
def get_xpubkey(self, for_change, n):
|
||||
s = ''.join(map(lambda x: bitcoin.int_to_hex(x,2), (for_change, n)))
|
||||
mpk = self.mpk.encode('hex')
|
||||
x_pubkey = 'fe' + mpk + s
|
||||
x_pubkey = 'fe' + self.mpk + s
|
||||
return x_pubkey
|
||||
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in New Issue