diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2015-05-14 23:16:53 -0400 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2015-05-14 23:16:53 -0400 |
commit | 388f92ab5cfd5c60fcd8712e5889c4ded300959b (patch) | |
tree | 4ed919a89157fbf80ef9fbfd7abe56bc58dddd91 /docs/development/custom-vectors/secp256k1/verify_secp256k1.py | |
parent | 4e1dd2e0e35ce3880380af2c6fa278de87b0df2f (diff) | |
parent | f9531ada2f09accdb42156bca7917af5266220c6 (diff) | |
download | cryptography-388f92ab5cfd5c60fcd8712e5889c4ded300959b.tar.gz cryptography-388f92ab5cfd5c60fcd8712e5889c4ded300959b.tar.bz2 cryptography-388f92ab5cfd5c60fcd8712e5889c4ded300959b.zip |
Merge branch 'master' into macstadium-travis
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) |