Created
November 8, 2024 20:01
-
-
Save kdmukai/0cf06126cc957fed613249fcfe963a31 to your computer and use it in GitHub Desktop.
Testing `embit` secp256k1 python bindings, custom binary execution times
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import time | |
from embit.util import secp256k1 | |
import hashlib | |
from binascii import hexlify | |
def secp256k1_example(): | |
"""Usage example for secp256k1 usermodule""" | |
# randomize context from time to time | |
# - it helps against sidechannel attacks | |
# secp256k1.context_randomize(os.urandom(32)) | |
# some random secret key | |
secret = hashlib.sha256(b"secret key").digest() | |
print("Secret key:", hexlify(secret).decode()) | |
# Makes sense to check if secret key is valid. | |
# It will be ok in most cases, only if secret > N it will be invalid | |
if not secp256k1.ec_seckey_verify(secret): | |
raise ValueError("Secret key is invalid") | |
# computing corresponding pubkey | |
pubkey = secp256k1.ec_pubkey_create(secret) | |
# serialize the pubkey in compressed format | |
sec = secp256k1.ec_pubkey_serialize(pubkey, secp256k1.EC_COMPRESSED) | |
print("Public key:", hexlify(sec).decode()) | |
# this is how you parse the pubkey | |
pubkey = secp256k1.ec_pubkey_parse(sec) | |
# Signature generation: | |
# hash of the string "hello" | |
msg = hashlib.sha256(b"hello").digest() | |
t1 = time.time() | |
# signing | |
sig = secp256k1.ecdsa_sign(msg, secret) | |
print(f"secp256k1.ecdsa_sign: {1000*(time.time() - t1)}ms") | |
# serialization | |
der = secp256k1.ecdsa_signature_serialize_der(sig) | |
print("Signature:", hexlify(der).decode()) | |
# verification | |
if secp256k1.ecdsa_verify(sig, msg, pubkey): | |
print("Signature is valid") | |
else: | |
printf("Invalid signature") | |
if __name__ == '__main__': | |
start = time.time() | |
secp256k1_example() | |
end = time.time() | |
print(f"{1000*(end - start)}ms") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment