Ejemplo n.º 1
0
 def check_password(self):
     self.xpub = self.master_public_keys[self.root_name]
     self.decoded_xprv = pw_decode(self.master_private_keys[self.root_name],
                                   self._password)
     if deserialize_xkey(self.decoded_xprv)[3] == deserialize_xkey(
             self.xpub)[3]:
         return True
     raise ParamsError('51001')
Ejemplo n.º 2
0
 def derive_pubkeys(self, for_change, n):
     xpub = self.xpub_change if for_change else self.xpub_receive
     if xpub is None:
         xpub = bip32_public_derivation(self.xpub, "", "/%d" % for_change)
         if for_change:
             self.xpub_change = xpub
         else:
             self.xpub_receive = xpub
     _, _, _, c, cK = deserialize_xkey(xpub)
     cK, c = CKD_pub(cK, c, n)
     result = cK.encode('hex')
     return result
Ejemplo n.º 3
0
 def get_private_key(self, sequence, wallet, password):
     out = []
     xpubs = self.get_master_pubkeys()
     roots = [k for k, v in wallet.master_public_keys.iteritems() if v in xpubs]
     for root in roots:
         xpriv = wallet.get_master_private_key(root, password)
         if not xpriv:
             continue
         _, _, _, c, k = deserialize_xkey(xpriv)
         pk = bip32_private_key(sequence, k, c)
         out.append(pk)
     return out
Ejemplo n.º 4
0
 def get_private_key_from_xpubkey(self, x_pubkey):
     if x_pubkey[0:2] in ['02', '03', '04']:
         addr = public_key_to_bc_address(x_pubkey.decode('hex'))
         if self.is_mine(addr):
             return self.get_private_key(addr)[0]
     elif x_pubkey[0:2] == 'ff':
         xpub, sequence = BIP32_Account.parse_xpubkey(x_pubkey)
         for k, v in self.master_public_keys.items():
             if v == xpub:
                 xprv = self.decoded_xprv
                 if xprv:
                     _, _, _, c, k = deserialize_xkey(xprv)
                     return bip32_private_key(sequence, k, c)
     elif x_pubkey[0:2] == 'fd':
         addrtype = ord(x_pubkey[2:4].decode('hex'))
         addr = hash_160_to_bc_address(x_pubkey[4:].decode('hex'), addrtype)
         if self.is_mine(addr):
             return self.get_private_key(addr)[0]
     else:
         raise BaseException("z")
Ejemplo n.º 5
0
 def derive_pubkey_from_xpub(cls, xpub, for_change, n):
     _, _, _, c, cK = deserialize_xkey(xpub)
     for i in [for_change, n]:
         cK, c = CKD_pub(cK, c, i)
     return cK.encode('hex')