Skip to content

Instantly share code, notes, and snippets.

@hclivess
Created June 21, 2022 01:30
Show Gist options
  • Save hclivess/4810e431fde96c875b86394d2732b282 to your computer and use it in GitHub Desktop.
Save hclivess/4810e431fde96c875b86394d2732b282 to your computer and use it in GitHub Desktop.
Curve25519.py keygen and signing
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey, Ed25519PublicKey
from cryptography.hazmat.primitives import serialization
def unhex(hexed):
return b''.fromhex(hexed)
def sign(private_key, message):
private_bytes = unhex(private_key)
private_key_raw = Ed25519PrivateKey.generate().from_private_bytes(private_bytes)
signature = private_key_raw.sign(message.encode()).hex()
return signature
def verify(signature, public_key, message):
public_bytes = unhex(public_key)
public_key_raw = Ed25519PublicKey.from_public_bytes(public_bytes)
public_key_raw.verify(unhex(signature), message.encode())
return True
def generate_keypair():
private_key_raw= Ed25519PrivateKey.generate()
public_key_raw = private_key_raw.public_key()
private_bytes = private_key_raw.private_bytes(
encoding=serialization.Encoding.Raw,
format=serialization.PrivateFormat.Raw,
encryption_algorithm=serialization.NoEncryption()
)
public_bytes = public_key_raw.public_bytes(
encoding=serialization.Encoding.Raw,
format=serialization.PublicFormat.Raw
)
keypair_dict = {"private_key": private_bytes.hex(),
"public_key": public_bytes.hex()
}
return keypair_dict
if __name__ == "__main__":
keypair_dict = generate_keypair()
print (keypair_dict["private_key"])
print (keypair_dict["public_key"])
signature = sign(private_key=keypair_dict["private_key"], message="test message")
print(signature)
print (verify(message="test message",public_key=keypair_dict["public_key"], signature=signature))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment