I am attempting to transform a compressed WIF generated by bitcoinaddress python Library however I could not discover a perform to do the duty so I collected one. I would love somebody to overview my code and possibly take away pointless steps and improve it.
# Script to transform compressed WIF to personal key then to uncompressed WIF.
import hashlib
import base58
import binascii
from binascii import hexlify, unhexlify
def doubleSha256(hex):
"""Double sha256 perform"""
bin = binascii.unhexlify(hex)
# carry out SHA-256 hash on the private_key
hash_1st = hashlib.sha256(bin).digest()
# carry out SHA-256 on the earlier SHA-256 hash
hash_2nd = hashlib.sha256(hash_1st).digest()
return binascii.hexlify(hash_2nd)
# Testnet WIF
private_key_WIF = "cVbZ8ovhye9AoAHFsqobCf7LxbXDAECy9Kb8TZdfsDYMZGBUyCnm" # compressed
# ~ private_key_WIF_uncompressed = "93QEdCzUrzMRsnbx2YuF6MsNjxQA6iWSrv9e2wX4NM4UmYzUsLn"
first_decode = base58.b58decode(private_key_WIF)
private_key_full = binascii.hexlify(first_decode)
# Examine if the bottom line is mainnet or testnet
if private_key_full.startswith(b"80"):
testnet = False
elif private_key_full.startswith(b"ef"):
testnet = True
private_key_full = private_key_full[2:-8]
if private_key_full.endswith(b"01"):
private_key_full = private_key_full[:-2]
if not testnet:
# prepended mainnet model byte to personal key
textual content = b"80" + private_key_full
elif testnet:
# prepended testnet model byte to personal key
textual content = b"ef" + private_key_full
# Perfrom double sha256 on string
double_sha256 = doubleSha256(textual content)
# create a checksum utilizing the primary 4 bytes of the earlier SHA-256 hash
checksum = double_sha256[0:8]
# append the 4 checksum bytes to the private_key
private_key_with_checksum = textual content+checksum
# convert mainnet_private_key + checksum into base58 encoded string
uncompressed_wif = base58.b58encode(binascii.unhexlify(private_key_with_checksum))
print(f"{uncompressed_wif=}")
Sources: