diff options
author | Alex Stapleton <alexs@prol.etari.at> | 2014-05-27 12:33:30 +0100 |
---|---|---|
committer | Alex Stapleton <alexs@prol.etari.at> | 2014-05-27 12:33:30 +0100 |
commit | fd3572923816d3bf89b5a57671ce21ee9959f222 (patch) | |
tree | ea22588cb5eed062c9868888d80344613af4732c /cryptography | |
parent | 0323a0e474b3606b0d2f68f0cb24bc69be35eeb4 (diff) | |
parent | 1b760f1fed81f90506f776b70d2a0eb129ff27b7 (diff) | |
download | cryptography-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.py | 7 | ||||
-rw-r--r-- | cryptography/hazmat/backends/multibackend.py | 8 | ||||
-rw-r--r-- | cryptography/hazmat/backends/openssl/backend.py | 4 |
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 |