def ecdsa_raw_sign_nonce(msghash, priv, nonce): z = hash_to_int(msghash) k = deterministic_generate_k_nonce(msghash, priv, nonce) r, y = fast_multiply(G, k) s = inv(k, N) * (z + r * decode_privkey(priv)) % N v, r, s = 27 + ((y % 2) ^ (0 if s * 2 < N else 1)), r, s if s * 2 < N else N - s if 'compressed' in get_privkey_format(priv): v += 4 return v, r, s
from __future__ import print_function import cryptos # Generate a random private key valid_private_key = False while not valid_private_key: private_key = cryptos.random_key() decoded_private_key = cryptos.decode_privkey(private_key, 'hex') valid_private_key = 0 < decoded_private_key < cryptos.N print("Private Key (hex) is: ", private_key) print("Private Key (decimal) is: ", decoded_private_key) # Convert private key to WIF format wif_encoded_private_key = cryptos.encode_privkey(decoded_private_key, 'wif') print("Private Key (WIF) is: ", wif_encoded_private_key) # Add suffix "01" to indicate a compressed private key compressed_private_key = private_key + '01' print("Private Key Compressed (hex) is: ", compressed_private_key) # Generate a WIF format from the compressed private key (WIF-compressed) wif_compressed_private_key = cryptos.encode_privkey( cryptos.decode_privkey(compressed_private_key, 'hex'), 'wif') print("Private Key (WIF-Compressed) is: ", wif_compressed_private_key) # Multiply the EC generator point G with the private key to get a public key point public_key = cryptos.fast_multiply(cryptos.G, decoded_private_key) print("Public Key (x,y) coordinates is:", public_key) # Encode as hex, prefix 04