aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2015-03-05 21:17:45 -0600
committerPaul Kehrer <paul.l.kehrer@gmail.com>2015-03-08 17:25:28 -0500
commita5515c7cdd535b0a2d09ac472c4bb4758491cf4e (patch)
treed432e69a52c41986a1d447bb7c19ffe9dfb34b60 /src
parent785cb422767cb7a99fa71d28e2e2e13b16f35c90 (diff)
downloadcryptography-a5515c7cdd535b0a2d09ac472c4bb4758491cf4e.tar.gz
cryptography-a5515c7cdd535b0a2d09ac472c4bb4758491cf4e.tar.bz2
cryptography-a5515c7cdd535b0a2d09ac472c4bb4758491cf4e.zip
DSA public key serialization
Diffstat (limited to 'src')
-rw-r--r--src/cryptography/hazmat/backends/openssl/dsa.py23
-rw-r--r--src/cryptography/hazmat/primitives/asymmetric/dsa.py19
2 files changed, 40 insertions, 2 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/dsa.py b/src/cryptography/hazmat/backends/openssl/dsa.py
index 8d02e492..0089f58c 100644
--- a/src/cryptography/hazmat/backends/openssl/dsa.py
+++ b/src/cryptography/hazmat/backends/openssl/dsa.py
@@ -7,7 +7,7 @@ from __future__ import absolute_import, division, print_function
from cryptography import utils
from cryptography.exceptions import InvalidSignature
from cryptography.hazmat.backends.openssl.utils import _truncate_digest
-from cryptography.hazmat.primitives import hashes
+from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import (
AsymmetricSignatureContext, AsymmetricVerificationContext, dsa
)
@@ -208,3 +208,24 @@ class _DSAPublicKey(object):
dsa_cdata.q = self._backend._lib.BN_dup(self._dsa_cdata.q)
dsa_cdata.g = self._backend._lib.BN_dup(self._dsa_cdata.g)
return _DSAParameters(self._backend, dsa_cdata)
+
+ def public_bytes(self, encoding, format):
+ if format is serialization.PublicFormat.PKCS1:
+ raise ValueError(
+ "DSA public keys do not support PKCS1 serialization"
+ )
+
+ evp_pkey = self._backend._lib.EVP_PKEY_new()
+ assert evp_pkey != self._backend._ffi.NULL
+ evp_pkey = self._backend._ffi.gc(
+ evp_pkey, self._backend._lib.EVP_PKEY_free
+ )
+ res = self._backend._lib.EVP_PKEY_set1_DSA(evp_pkey, self._dsa_cdata)
+ assert res == 1
+ return self._backend._public_key_bytes(
+ encoding,
+ format,
+ None,
+ evp_pkey,
+ None
+ )
diff --git a/src/cryptography/hazmat/primitives/asymmetric/dsa.py b/src/cryptography/hazmat/primitives/asymmetric/dsa.py
index 084686e4..4d332f2a 100644
--- a/src/cryptography/hazmat/primitives/asymmetric/dsa.py
+++ b/src/cryptography/hazmat/primitives/asymmetric/dsa.py
@@ -104,13 +104,30 @@ class DSAPublicKey(object):
@six.add_metaclass(abc.ABCMeta)
-class DSAPublicKeyWithNumbers(DSAPublicKey):
+class DSAPublicKeyWithSerialization(DSAPublicKey):
@abc.abstractmethod
def public_numbers(self):
"""
Returns a DSAPublicNumbers.
"""
+ @abc.abstractmethod
+ def public_bytes(self, encoding, format):
+ """
+ Returns the key serialized as bytes.
+ """
+
+
+DSAPublicKeyWithNumbers = utils.deprecated(
+ DSAPublicKeyWithSerialization,
+ __name__,
+ (
+ "The DSAPublicKeyWithNumbers interface has been renamed to "
+ "DSAPublicKeyWithSerialization"
+ ),
+ utils.DeprecatedIn08
+)
+
def generate_parameters(key_size, backend):
return backend.generate_dsa_parameters(key_size)