diff options
author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-03-05 21:17:45 -0600 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-03-08 17:25:28 -0500 |
commit | a5515c7cdd535b0a2d09ac472c4bb4758491cf4e (patch) | |
tree | d432e69a52c41986a1d447bb7c19ffe9dfb34b60 /src | |
parent | 785cb422767cb7a99fa71d28e2e2e13b16f35c90 (diff) | |
download | cryptography-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.py | 23 | ||||
-rw-r--r-- | src/cryptography/hazmat/primitives/asymmetric/dsa.py | 19 |
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) |