personal key import – Changing compressed WIF to uncompressed WIF so it really works with bitcoinaddress Python library

0
52


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:

LEAVE A REPLY

Please enter your comment!
Please enter your name here