import os.path from sys import exit from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import ec # Simple tool to generate an ECDSA private key using the secp256k1 curve and save private and public keys # as 'pisa_sk.pem' 'and pisa_pk.pem', respectively. SK_FILE_NAME = 'pisa_sk.pem' PK_FILE_NAME = 'pisa_pk.pem' def save_sk(sk, filename): pem = sk.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption() ) with open(filename, 'wb') as pem_out: pem_out.write(pem) def save_pk(pk, filename): pem = pk.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ) with open(filename, 'wb') as pem_out: pem_out.write(pem) if __name__ == '__main__': if os.path.exists(SK_FILE_NAME): print("A key with name \"{}\" already exists. Aborting.".format(SK_FILE_NAME)) exit(1) sk = ec.generate_private_key( ec.SECP256K1, default_backend() ) pk = sk.public_key() save_sk(sk, SK_FILE_NAME) save_pk(pk, PK_FILE_NAME) print("Saved private key \"{}\" and public key \"{}\".".format(SK_FILE_NAME, PK_FILE_NAME))