aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/hazmat/primitives/test_dsa.py104
1 files changed, 99 insertions, 5 deletions
diff --git a/tests/hazmat/primitives/test_dsa.py b/tests/hazmat/primitives/test_dsa.py
index bc3b1db6..3e37fdf4 100644
--- a/tests/hazmat/primitives/test_dsa.py
+++ b/tests/hazmat/primitives/test_dsa.py
@@ -18,13 +18,15 @@ import os
import pytest
-from cryptography.exceptions import _Reasons
+from cryptography.exceptions import (
+ AlreadyFinalized, InvalidSignature, _Reasons)
+from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import dsa
from cryptography.utils import bit_length
from ...utils import (
- load_fips_dsa_key_pair_vectors, load_vectors_from_file,
- raises_unsupported_algorithm
+ load_fips_dsa_key_pair_vectors, load_fips_dsa_sig_vectors,
+ load_vectors_from_file, raises_unsupported_algorithm
)
@@ -720,12 +722,104 @@ class TestDSA(object):
)
+@pytest.mark.dsa
+class TestDSAVerification(object):
+ @pytest.mark.parametrize(
+ "vector",
+ load_vectors_from_file(
+ os.path.join(
+ "asymmetric", "DSA", "FIPS_186-3", "SigVer.rsp"),
+ load_fips_dsa_sig_vectors
+ )
+ )
+ def test_dsa_verification(self, vector, backend):
+ public_key = dsa.DSAPublicKey(vector['p'], vector['q'], vector['g'],
+ vector['y'])
+
+ digest_algorithm = vector['digest_algorithm'].replace("-", "")
+ algorithms_dict = {
+ 'SHA1': hashes.SHA1,
+ 'SHA224': hashes.SHA224,
+ 'SHA256': hashes.SHA256,
+ 'SHA384': hashes.SHA384,
+ 'SHA512': hashes.SHA512}
+
+ algorithm = algorithms_dict[digest_algorithm]
+
+ if (
+ backend.dsa_parameters_supported(vector['p'], vector['q'])
+ and backend.dsa_hash_supported(algorithm)
+ ):
+ sig_buf = backend.dsa_signature_from_components(
+ vector['r'], vector['s'])
+
+ verifier = public_key.verifier(
+ sig_buf, algorithm(), backend)
+
+ verifier.update(vector['msg'])
+
+ if vector['result'] == "F":
+ with pytest.raises(InvalidSignature):
+ verifier.verify()
+ else:
+ verifier.verify()
+ with pytest.raises(AlreadyFinalized):
+ verifier.verify()
+ with pytest.raises(AlreadyFinalized):
+ verifier.update(b"more data")
+
+ @pytest.mark.parametrize(
+ "vector",
+ load_vectors_from_file(
+ os.path.join(
+ "asymmetric", "DSA", "FIPS_186-3", "SigVer.rsp"),
+ load_fips_dsa_sig_vectors
+ )
+ )
+ def test_dsa_verifier_invalid_digest_algorithm(self, vector, backend):
+ public_key = dsa.DSAPublicKey(vector['p'], vector['q'], vector['g'],
+ vector['y'])
+
+ digest_algorithm = vector['digest_algorithm'].replace("-", "")
+ algorithms_dict = {
+ 'SHA1': hashes.SHA1,
+ 'SHA224': hashes.SHA224,
+ 'SHA256': hashes.SHA256,
+ 'SHA384': hashes.SHA384,
+ 'SHA512': hashes.SHA512}
+
+ algorithm = algorithms_dict[digest_algorithm]
+
+ if (
+ backend.dsa_parameters_supported(vector['p'], vector['q'])
+ and backend.dsa_hash_supported(algorithm)
+ ):
+ sig_buf = backend.dsa_signature_from_components(
+ vector['r'], vector['s'])
+
+ with raises_unsupported_algorithm(
+ _Reasons.UNSUPPORTED_HASH):
+ public_key.verifier(sig_buf, hashes.MD5(), backend)
+
+ def test_dsa_verifier_invalid_backend(self, backend):
+ pretend_backend = object()
+ params = dsa.DSAParameters.generate(1024, backend)
+ private_key = dsa.DSAPrivateKey.generate(params, backend)
+ public_key = private_key.public_key()
+
+ with raises_unsupported_algorithm(
+ _Reasons.BACKEND_MISSING_INTERFACE):
+ public_key.verifier(b"sig", hashes.SHA1(), pretend_backend)
+
+
def test_dsa_generate_invalid_backend():
pretend_backend = object()
- with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE):
+ with raises_unsupported_algorithm(
+ _Reasons.BACKEND_MISSING_INTERFACE):
dsa.DSAParameters.generate(1024, pretend_backend)
pretend_parameters = object()
- with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE):
+ with raises_unsupported_algorithm(
+ _Reasons.BACKEND_MISSING_INTERFACE):
dsa.DSAPrivateKey.generate(pretend_parameters, pretend_backend)