Ejemplo n.º 1
0
    def ExtendedKey(self,
                    private=True,
                    encoded=True,
                    bip=44,
                    cointype="bitcoin"):
        "Return extended private or public key as string, optionally Base58 encoded"
        if self.public is True and private is True:
            raise Exception(
                "Cannot export an extended private key from a public-only deterministic key"
            )

        version = query_ver(private=private,
                            bip=bip,
                            cointype=cointype,
                            testnet=self.testnet)[0]

        depth = bytes(bytearray([self.depth]))
        fpr = self.parent_fpr
        child = struct.pack('>L', self.index)
        chain = self.C
        if self.public is True or private is False:
            data = self.PublicKey()
        else:
            data = b'\x00' + self.PrivateKey()
        raw = version + depth + fpr + child + chain + data
        if not encoded:
            return raw
        else:
            return Base58.check_encode(raw)
Ejemplo n.º 2
0
 def WalletImportFormat(self):
     "Returns private key encoded for wallet import"
     if self.public:
         raise Exception(
             "Publicly derived deterministic keys have no private half")
     raw = '\x80' + self.k.to_string() + '\x01'  # Always compressed
     return Base58.check_encode(raw)
Ejemplo n.º 3
0
 def WalletImportFormat(self):
     "Returns private key encoded for wallet import"
     if self.public:
         raise Exception(
             "Publicly derived deterministic keys have no private half")
     addressversion = b'\x4c' if not self.testnet else b'\xef'
     raw = addressversion + self.k.to_string(
     ) + b'\x01'  # Always compressed
     return Base58.check_encode(raw)
Ejemplo n.º 4
0
 def P2WPKHoP2SHAddress(self):
     "Return P2WPKH over P2SH segwit address"
     pk_bytes = self.PublicKey()
     assert len(pk_bytes) == 33 and (pk_bytes.startswith(b"\x02") or pk_bytes.startswith(b"\x03")), \
         "Only compressed public keys are compatible with p2sh-p2wpkh addresses. " \
         "See https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki."
     pk_hash = hashlib.new('ripemd160', sha256(pk_bytes).digest()).digest()
     push_20 = bytes.fromhex('0014')
     script_sig = push_20 + pk_hash
     address_bytes = hashlib.new('ripemd160',
                                 sha256(script_sig).digest()).digest()
     prefix = b"\xc4" if self.testnet else b"\x05"
     return Base58.check_encode(prefix + address_bytes)
Ejemplo n.º 5
0
 def ExtendedKey(self, private=True, encoded=True):
     "Return extended private or public key as string, optionally Base58 encoded"
     if self.public is True and private is True:
         raise Exception("Cannot export an extended private key from a public-only deterministic key")
     version = EX_MAIN_PRIVATE if private else EX_MAIN_PUBLIC
     depth = chr(self.depth)
     fpr = self.parent_fpr
     child = struct.pack('>L', self.index)
     chain = self.C
     if self.public is True or private is False:
         data = self.PublicKey()
     else:
         data = '\x00' + self.PrivateKey()
     raw = version+depth+fpr+child+chain+data
     if not encoded:
         return raw
     else:
         return Base58.check_encode(raw)
Ejemplo n.º 6
0
 def ExtendedKey(self, private=True, encoded=True):
     "Return extended private or public key as string, optionally Base58 encoded"
     if self.public is True and private is True:
         raise Exception(
             "Cannot export an extended private key from a public-only deterministic key"
         )
     version = EX_MAIN_PRIVATE if private else EX_MAIN_PUBLIC
     depth = chr(self.depth)
     fpr = self.parent_fpr
     child = struct.pack('>L', self.index)
     chain = self.C
     if self.public is True or private is False:
         data = self.PublicKey()
     else:
         data = '\x00' + self.PrivateKey()
     raw = version + depth + fpr + child + chain + data
     if not encoded:
         return raw
     else:
         return Base58.check_encode(raw)
Ejemplo n.º 7
0
 def Address(self):
     "Return compressed public key address"
     vh160 = '\x00' + self.Identifier()
     return Base58.check_encode(vh160)
Ejemplo n.º 8
0
 def WalletImportFormat(self):
     "Returns private key encoded for wallet import"
     if self.public:
         raise Exception("Publicly derived deterministic keys have no private half")
     raw = '\xBF' + self.k.to_string() + '\x01' # Always compressed
     return Base58.check_encode(raw)
Ejemplo n.º 9
0
 def Address(self):
     "Return compressed public key address"
     vh160 = chr(25) + self.Identifier()
     leadingzbytes = len(re_match('^\x00*', vh160).group(0))
     return 'B' * leadingzbytes + Base58.check_encode(vh160)
Ejemplo n.º 10
0
 def Address(self):
     "Return compressed public key address"
     vh160 = '\x00'+self.Identifier()
     return Base58.check_encode(vh160)
Ejemplo n.º 11
0
 def Address(self):
     "Return compressed public key address"
     addressversion = b'\x42' if not self.testnet else b'\x6f'
     vh160 = addressversion + self.Identifier()
     return Base58.check_encode(vh160)
Ejemplo n.º 12
0
 def Address(self):
     "Return compressed public key address"
     vh160 = chr(25) + self.Identifier()
     leadingzbytes = len(re_match('^\x00*', vh160).group(0))
     return 'B' * leadingzbytes + Base58.check_encode(vh160)