aboutsummaryrefslogtreecommitdiffstats
path: root/cryptography
diff options
context:
space:
mode:
authorAlex Stapleton <alexs@prol.etari.at>2014-05-03 21:50:39 +0100
committerAlex Stapleton <alexs@prol.etari.at>2014-05-03 21:50:39 +0100
commit595393dd4d84f1bbb6541082b837c6cfb1aaa71b (patch)
treebdd6ac952da562695ebaab440aeeb75dbbfd221f /cryptography
parentd798d7a65ec94a990bd2fd17c864f80c30b01960 (diff)
downloadcryptography-595393dd4d84f1bbb6541082b837c6cfb1aaa71b.tar.gz
cryptography-595393dd4d84f1bbb6541082b837c6cfb1aaa71b.tar.bz2
cryptography-595393dd4d84f1bbb6541082b837c6cfb1aaa71b.zip
DSA support
Diffstat (limited to 'cryptography')
-rw-r--r--cryptography/hazmat/backends/openssl/backend.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/cryptography/hazmat/backends/openssl/backend.py b/cryptography/hazmat/backends/openssl/backend.py
index aa3a9350..5a434dcd 100644
--- a/cryptography/hazmat/backends/openssl/backend.py
+++ b/cryptography/hazmat/backends/openssl/backend.py
@@ -396,9 +396,23 @@ class Backend(object):
assert rsa_cdata != self._ffi.NULL
rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free)
return self._rsa_cdata_to_private_key(rsa_cdata)
+ elif type == self._lib.EVP_PKEY_DSA:
+ dsa_cdata = self._lib.EVP_PKEY_get1_DSA(evp_pkey)
+ assert dsa_cdata != self._ffi.NULL
+ dsa_cdata = self._ffi.gc(dsa_cdata, self._lib.DSA_free)
+ return self._dsa_cdata_to_private_key(dsa_cdata)
else:
raise UnsupportedAlgorithm("Unsupported key type.")
+ def _dsa_cdata_to_private_key(self, cdata):
+ return dsa.DSAPrivateKey(
+ modulus=self._bn_to_int(cdata.p),
+ subgroup_order=self._bn_to_int(cdata.q),
+ generator=self._bn_to_int(cdata.g),
+ x=self._bn_to_int(cdata.priv_key),
+ y=self._bn_to_int(cdata.pub_key)
+ )
+
def _rsa_cdata_to_private_key(self, cdata):
return rsa.RSAPrivateKey(
p=self._bn_to_int(cdata.p),