save_and_load_private_key_file_ewif.py 1.71 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
from duniterpy.key import SigningKey
import getpass
import os

if "XDG_CONFIG_HOME" in os.environ:
    home_path = os.environ["XDG_CONFIG_HOME"]
elif "HOME" in os.environ:
    home_path = os.environ["HOME"]
elif "APPDATA" in os.environ:
    home_path = os.environ["APPDATA"]
else:
    home_path = os.path.dirname(__file__)

# CONFIG #######################################

# WARNING : Hide this file in a safe and secure place
# If one day you forget your credentials,
# you'll have to use one of your private keys instead
PRIVATE_KEY_FILE_PATH = os.path.join(home_path, ".duniter_account_ewif_v1.duniterkey")

################################################

# prompt hidden user entry
salt = getpass.getpass("Enter your passphrase (salt): ")

# prompt hidden user entry
password = getpass.getpass("Enter your password: ")

# prompt public key
pubkey = input("Enter your public key: ")

# init signer instance
signer = SigningKey.from_credentials(salt, password)

# check public key
if signer.pubkey != pubkey:
    print("Bad credentials!")
    exit(1)

# prompt hidden user entry
ewif_password = getpass.getpass("Enter an encryption password: ")

# save private key in a file (EWIF v1 format)
signer.save_ewif_file(PRIVATE_KEY_FILE_PATH, ewif_password)

# document saved
47 48 49
print(
    "Private key for public key %s saved in %s" % (signer.pubkey, PRIVATE_KEY_FILE_PATH)
)
50 51 52

try:
    # load private keys from file
53 54 55
    loaded_signer = SigningKey.from_ewif_file(
        PRIVATE_KEY_FILE_PATH, ewif_password
    )  # type: SigningKey
56 57

    # check public key from file
58 59 60 61
    print(
        "Public key %s loaded from file %s"
        % (loaded_signer.pubkey, PRIVATE_KEY_FILE_PATH)
    )
62

63 64
except IOError as error:
    print(error)
65 66 67 68
    exit(1)


exit(0)