1from __future__ import absolute_import, print_function 2 3import os 4 5from cryptography.hazmat.backends import default_backend 6from cryptography.hazmat.primitives import hashes 7from cryptography.hazmat.primitives.asymmetric import ec 8from cryptography.hazmat.primitives.asymmetric.utils import ( 9 encode_dss_signature, 10) 11 12from tests.utils import load_fips_ecdsa_signing_vectors, load_vectors_from_file 13 14CRYPTOGRAPHY_HASH_TYPES = { 15 "SHA-1": hashes.SHA1, 16 "SHA-224": hashes.SHA224, 17 "SHA-256": hashes.SHA256, 18 "SHA-384": hashes.SHA384, 19 "SHA-512": hashes.SHA512, 20} 21 22 23def verify_one_vector(vector): 24 digest_algorithm = vector["digest_algorithm"] 25 message = vector["message"] 26 x = vector["x"] 27 y = vector["y"] 28 signature = encode_dss_signature(vector["r"], vector["s"]) 29 30 numbers = ec.EllipticCurvePublicNumbers(x, y, ec.SECP256K1()) 31 32 key = numbers.public_key(default_backend()) 33 34 verifier = key.verifier( 35 signature, ec.ECDSA(CRYPTOGRAPHY_HASH_TYPES[digest_algorithm]()) 36 ) 37 verifier.update(message) 38 verifier.verify() 39 40 41def verify_vectors(vectors): 42 for vector in vectors: 43 verify_one_vector(vector) 44 45 46vector_path = os.path.join("asymmetric", "ECDSA", "SECP256K1", "SigGen.txt") 47 48secp256k1_vectors = load_vectors_from_file( 49 vector_path, load_fips_ecdsa_signing_vectors 50) 51 52verify_vectors(secp256k1_vectors) 53