aboutsummaryrefslogtreecommitdiffstats
path: root/cryptography
diff options
context:
space:
mode:
authorAlex Stapleton <alexs@prol.etari.at>2014-05-27 12:33:30 +0100
committerAlex Stapleton <alexs@prol.etari.at>2014-05-27 12:33:30 +0100
commitfd3572923816d3bf89b5a57671ce21ee9959f222 (patch)
treeea22588cb5eed062c9868888d80344613af4732c /cryptography
parent0323a0e474b3606b0d2f68f0cb24bc69be35eeb4 (diff)
parent1b760f1fed81f90506f776b70d2a0eb129ff27b7 (diff)
downloadcryptography-fd3572923816d3bf89b5a57671ce21ee9959f222.tar.gz
cryptography-fd3572923816d3bf89b5a57671ce21ee9959f222.tar.bz2
cryptography-fd3572923816d3bf89b5a57671ce21ee9959f222.zip
Merge pull request #1080 from reaperhulk/generate-rsa-parameters
add generate_rsa_parameters_supported to RSABackend
Diffstat (limited to 'cryptography')
-rw-r--r--cryptography/hazmat/backends/interfaces.py7
-rw-r--r--cryptography/hazmat/backends/multibackend.py8
-rw-r--r--cryptography/hazmat/backends/openssl/backend.py4
3 files changed, 19 insertions, 0 deletions
diff --git a/cryptography/hazmat/backends/interfaces.py b/cryptography/hazmat/backends/interfaces.py
index 11b13788..97a7a4fd 100644
--- a/cryptography/hazmat/backends/interfaces.py
+++ b/cryptography/hazmat/backends/interfaces.py
@@ -135,6 +135,13 @@ class RSABackend(object):
Returns True if the backend supports the given padding options.
"""
+ @abc.abstractmethod
+ def generate_rsa_parameters_supported(self, public_exponent, key_size):
+ """
+ Returns True if the backend supports the given parameters for key
+ generation.
+ """
+
@six.add_metaclass(abc.ABCMeta)
class DSABackend(object):
diff --git a/cryptography/hazmat/backends/multibackend.py b/cryptography/hazmat/backends/multibackend.py
index 21630ba8..b4cb6889 100644
--- a/cryptography/hazmat/backends/multibackend.py
+++ b/cryptography/hazmat/backends/multibackend.py
@@ -132,6 +132,14 @@ class MultiBackend(object):
raise UnsupportedAlgorithm("RSA is not supported by the backend.",
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
+ def generate_rsa_parameters_supported(self, public_exponent, key_size):
+ for b in self._filtered_backends(RSABackend):
+ return b.generate_rsa_parameters_supported(
+ public_exponent, key_size
+ )
+ raise UnsupportedAlgorithm("RSA is not supported by the backend.",
+ _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
+
def create_rsa_signature_ctx(self, private_key, padding, algorithm):
for b in self._filtered_backends(RSABackend):
return b.create_rsa_signature_ctx(private_key, padding, algorithm)
diff --git a/cryptography/hazmat/backends/openssl/backend.py b/cryptography/hazmat/backends/openssl/backend.py
index e5d6eaa1..8d76160d 100644
--- a/cryptography/hazmat/backends/openssl/backend.py
+++ b/cryptography/hazmat/backends/openssl/backend.py
@@ -378,6 +378,10 @@ class Backend(object):
return self._rsa_cdata_to_private_key(ctx)
+ def generate_rsa_parameters_supported(self, public_exponent, key_size):
+ return (public_exponent >= 3 and public_exponent & 1 != 0 and
+ key_size >= 512)
+
def _new_evp_pkey(self):
evp_pkey = self._lib.EVP_PKEY_new()
assert evp_pkey != self._ffi.NULL