• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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