Merge pull request #999 from alex/remove-out-of-date-comment
Removed out of date comment
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index de87750..80ad872 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -16,6 +16,10 @@
:class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`
and encryption support to
:class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`.
+* Added signature support to
+ :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey`
+ and verification support to
+ :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`.
0.3 - 2014-03-27
~~~~~~~~~~~~~~~~
diff --git a/cryptography/hazmat/backends/multibackend.py b/cryptography/hazmat/backends/multibackend.py
index 981a60b..753f4fc 100644
--- a/cryptography/hazmat/backends/multibackend.py
+++ b/cryptography/hazmat/backends/multibackend.py
@@ -158,6 +158,31 @@
raise UnsupportedAlgorithm("DSA is not supported by the backend",
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
+ def create_dsa_verification_ctx(self, public_key, signature, algorithm):
+ for b in self._filtered_backends(DSABackend):
+ return b.create_dsa_verification_ctx(public_key, signature,
+ algorithm)
+ raise UnsupportedAlgorithm("DSA is not supported by the backend",
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
+
+ def create_dsa_signature_ctx(self, private_key, algorithm):
+ for b in self._filtered_backends(DSABackend):
+ return b.create_dsa_signature_ctx(private_key, algorithm)
+ raise UnsupportedAlgorithm("DSA is not supported by the backend",
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
+
+ def dsa_hash_supported(self, algorithm):
+ for b in self._filtered_backends(DSABackend):
+ return b.dsa_hash_supported(algorithm)
+ raise UnsupportedAlgorithm("DSA is not supported by the backend",
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
+
+ def dsa_parameters_supported(self, p, q, g):
+ for b in self._filtered_backends(DSABackend):
+ return b.dsa_parameters_supported(p, q, g)
+ raise UnsupportedAlgorithm("DSA is not supported by the backend",
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
+
def cmac_algorithm_supported(self, algorithm):
return any(
b.cmac_algorithm_supported(algorithm)
diff --git a/docs/hazmat/primitives/asymmetric/dsa.rst b/docs/hazmat/primitives/asymmetric/dsa.rst
index 1d58cce..f7abaf0 100644
--- a/docs/hazmat/primitives/asymmetric/dsa.rst
+++ b/docs/hazmat/primitives/asymmetric/dsa.rst
@@ -103,7 +103,7 @@
Sign data which can be verified later by others using the public key.
- .. code-block:: pycon
+ .. doctest::
>>> from cryptography.hazmat.backends import default_backend
>>> from cryptography.hazmat.primitives import hashes
@@ -167,7 +167,7 @@
Verify data was signed by the private key associated with this public
key.
- .. code-block:: pycon
+ .. doctest::
>>> from cryptography.hazmat.backends import default_backend
>>> from cryptography.hazmat.primitives import hashes
diff --git a/tests/hazmat/backends/test_multibackend.py b/tests/hazmat/backends/test_multibackend.py
index d8c09bd..fd2a30c 100644
--- a/tests/hazmat/backends/test_multibackend.py
+++ b/tests/hazmat/backends/test_multibackend.py
@@ -107,6 +107,18 @@
def generate_dsa_private_key(self, parameters):
pass
+ def create_dsa_signature_ctx(self, private_key, algorithm):
+ pass
+
+ def create_dsa_verification_ctx(self, public_key, signature, algorithm):
+ pass
+
+ def dsa_hash_supported(self, algorithm):
+ pass
+
+ def dsa_parameters_supported(self, p, q, g):
+ pass
+
@utils.register_interface(CMACBackend)
class DummyCMACBackend(object):
@@ -227,6 +239,11 @@
parameters = object()
backend.generate_dsa_private_key(parameters)
+ backend.create_dsa_verification_ctx("public_key", "sig", hashes.SHA1())
+ backend.create_dsa_signature_ctx("private_key", hashes.SHA1())
+ backend.dsa_hash_supported(hashes.SHA1())
+ backend.dsa_parameters_supported(1, 2, 3)
+
backend = MultiBackend([])
with raises_unsupported_algorithm(
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM
@@ -238,6 +255,28 @@
):
backend.generate_dsa_private_key(parameters)
+ with raises_unsupported_algorithm(
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM
+ ):
+ backend.create_dsa_signature_ctx("private_key", hashes.SHA1())
+
+ with raises_unsupported_algorithm(
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM
+ ):
+ backend.create_dsa_verification_ctx(
+ "public_key", b"sig", hashes.SHA1()
+ )
+
+ with raises_unsupported_algorithm(
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM
+ ):
+ backend.dsa_hash_supported(hashes.SHA1())
+
+ with raises_unsupported_algorithm(
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM
+ ):
+ backend.dsa_parameters_supported('p', 'q', 'g')
+
def test_cmac(self):
backend = MultiBackend([
DummyCMACBackend([algorithms.AES])