def toOpensslPublickey(publickey): publickey_bin = btctools.encode_pubkey(publickey, "bin") publickey_bin = publickey_bin[1:] publickey_openssl = '\x02\xca\x00 ' + publickey_bin[: 32] + '\x00 ' + publickey_bin[ 32:] return publickey_openssl
def getEcc(privatekey=None): from lib import pyelliptic global eccs if privatekey not in ecc_cache: if privatekey: publickey_bin = btctools.encode_pubkey(btctools.privtopub(privatekey), "bin") publickey_openssl = toOpensslPublickey(publickey_bin) privatekey_openssl = toOpensslPrivatekey(privatekey) ecc_cache[privatekey] = pyelliptic.ECC(curve='secp256k1', privkey=privatekey_openssl, pubkey=publickey_openssl) else: ecc_cache[None] = pyelliptic.ECC() return ecc_cache[privatekey]
def getEncryptPublickey(self, address, param_index=0): assert param_index >= 0 and param_index <= 1000 site_data = self.getSiteData(address) if site_data.get("cert"): # Different privatekey for different cert provider index = param_index + self.getAddressAuthIndex(site_data["cert"]) else: index = param_index if "encrypt_publickey_%s" % index not in site_data: privatekey = self.getEncryptPrivatekey(address, param_index) publickey = btctools.encode_pubkey(btctools.privtopub(privatekey), "bin_compressed") site_data["encrypt_publickey_%s" % index] = base64.b64encode(publickey) return site_data["encrypt_publickey_%s" % index]
def getEcc(privatekey=None): from lib import pyelliptic global eccs if privatekey not in ecc_cache: if privatekey: publickey_bin = btctools.encode_pubkey( btctools.privtopub(privatekey), "bin") publickey_openssl = toOpensslPublickey(publickey_bin) privatekey_openssl = toOpensslPrivatekey(privatekey) ecc_cache[privatekey] = pyelliptic.ECC(curve='secp256k1', privkey=privatekey_openssl, pubkey=publickey_openssl) else: ecc_cache[None] = pyelliptic.ECC() return ecc_cache[privatekey]
def private_to_public(private): public = btctools.encode_pubkey(btctools.privtopub(private), "bin_compressed") public = base64.b64encode(public) return public
def toOpensslPublickey(publickey): publickey_bin = btctools.encode_pubkey(publickey, "bin") publickey_bin = publickey_bin[1:] publickey_openssl = '\x02\xca\x00 ' + publickey_bin[:32] + '\x00 ' + publickey_bin[32:] return publickey_openssl