diff options
author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-05-03 13:40:34 -0500 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-05-03 13:40:34 -0500 |
commit | aadca86bbf564cc3128f2a7d85dc00e3e30fdfae (patch) | |
tree | dae81f0fece1ae430ff3c47632d315e71e0be334 /docs/development/custom-vectors/secp256k1/verify_secp256k1.py | |
parent | 38478bf890eae525c2c5061ea7ae17db708b2b39 (diff) | |
parent | e0afa5d8394e32369a0bec9486b5eb44193412b6 (diff) | |
download | cryptography-aadca86bbf564cc3128f2a7d85dc00e3e30fdfae.tar.gz cryptography-aadca86bbf564cc3128f2a7d85dc00e3e30fdfae.tar.bz2 cryptography-aadca86bbf564cc3128f2a7d85dc00e3e30fdfae.zip |
Merge pull request #1867 from public/secp256k1-vectors
Script for generating SECP256K1 vectors
Diffstat (limited to 'docs/development/custom-vectors/secp256k1/verify_secp256k1.py')
-rw-r--r-- | docs/development/custom-vectors/secp256k1/verify_secp256k1.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/docs/development/custom-vectors/secp256k1/verify_secp256k1.py b/docs/development/custom-vectors/secp256k1/verify_secp256k1.py new file mode 100644 index 00000000..3d2c25b9 --- /dev/null +++ b/docs/development/custom-vectors/secp256k1/verify_secp256k1.py @@ -0,0 +1,59 @@ +from __future__ import absolute_import, print_function + +import os + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives.asymmetric import ec +from cryptography.hazmat.primitives.asymmetric.utils import ( + encode_rfc6979_signature +) + +from tests.utils import ( + load_fips_ecdsa_signing_vectors, load_vectors_from_file +) + +CRYPTOGRAPHY_HASH_TYPES = { + "SHA-1": hashes.SHA1, + "SHA-224": hashes.SHA224, + "SHA-256": hashes.SHA256, + "SHA-384": hashes.SHA384, + "SHA-512": hashes.SHA512, +} + + +def verify_one_vector(vector): + digest_algorithm = vector['digest_algorithm'] + message = vector['message'] + x = vector['x'] + y = vector['y'] + signature = encode_rfc6979_signature(vector['r'], vector['s']) + + numbers = ec.EllipticCurvePublicNumbers( + x, y, + ec.SECP256K1() + ) + + key = numbers.public_key(default_backend()) + + verifier = key.verifier( + signature, + ec.ECDSA(CRYPTOGRAPHY_HASH_TYPES[digest_algorithm]()) + ) + verifier.update(message) + return verifier.verify() + + +def verify_vectors(vectors): + for vector in vectors: + assert verify_one_vector(vector) + + +vector_path = os.path.join("asymmetric", "ECDSA", "SECP256K1", "SigGen.txt") + +secp256k1_vectors = load_vectors_from_file( + vector_path, + load_fips_ecdsa_signing_vectors +) + +verify_vectors(secp256k1_vectors) |