diff options
-rw-r--r-- | cryptography/hazmat/primitives/asymmetric/rsa.py | 40 | ||||
-rw-r--r-- | tests/hazmat/primitives/test_rsa.py | 88 |
2 files changed, 128 insertions, 0 deletions
diff --git a/cryptography/hazmat/primitives/asymmetric/rsa.py b/cryptography/hazmat/primitives/asymmetric/rsa.py index 18fcac26..024f1103 100644 --- a/cryptography/hazmat/primitives/asymmetric/rsa.py +++ b/cryptography/hazmat/primitives/asymmetric/rsa.py @@ -262,6 +262,40 @@ class RSAPrivateKey(object): class RSAPrivateNumbers(object): def __init__(self, p, q, d, dmp1, dmq1, iqmp, public_numbers): + if not isinstance(p, six.integer_types): + raise TypeError( + "RSAPrivateNumbers' p argument must be an integer." + ) + if not isinstance(q, six.integer_types): + raise TypeError( + "RSAPrivateNumbers' q argument must be an integer." + ) + + if not isinstance(d, six.integer_types): + raise TypeError( + "RSAPrivateNumbers' d argument must be an integer." + ) + + if not isinstance(dmp1, six.integer_types): + raise TypeError( + "RSAPrivateNumbers' dmp1 argument must be an integer." + ) + if not isinstance(dmq1, six.integer_types): + raise TypeError( + "RSAPrivateNumbers' dmq1 argument must be an integer." + ) + + if not isinstance(iqmp, six.integer_types): + raise TypeError( + "RSAPrivateNumbers' iqmp argument must be an integer." + ) + + if not isinstance(public_numbers, RSAPublicNumbers): + raise TypeError( + "RSAPrivateNumbers' public_numbers must be an RSAPublicNumbers" + " instance." + ) + self._p = p self._q = q self._d = d @@ -301,6 +335,12 @@ class RSAPrivateNumbers(object): class RSAPublicNumbers(object): def __init__(self, e, n): + if ( + not isinstance(e, six.integer_types) or + not isinstance(n, six.integer_types) + ): + raise TypeError("RSAPrivateNumbers arguments must be integers.") + self._e = e self._n = n diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py index 6d3bf2ec..b9011e1e 100644 --- a/tests/hazmat/primitives/test_rsa.py +++ b/tests/hazmat/primitives/test_rsa.py @@ -1510,3 +1510,91 @@ class TestRSANumbers(object): assert private_numbers.dmq1 == 1 assert private_numbers.iqmp == 2 assert private_numbers.public_numbers == public_numbers + + def test_public_numbers_invalid_types(self): + with pytest.raises(TypeError): + rsa.RSAPublicNumbers(e=None, n=15) + + with pytest.raises(TypeError): + rsa.RSAPublicNumbers(e=1, n=None) + + def test_private_numbers_invalid_types(self): + public_numbers = rsa.RSAPublicNumbers(e=1, n=15) + + with pytest.raises(TypeError): + rsa.RSAPrivateNumbers( + p=None, + q=5, + d=1, + dmp1=1, + dmq1=1, + iqmp=2, + public_numbers=public_numbers + ) + + with pytest.raises(TypeError): + rsa.RSAPrivateNumbers( + p=3, + q=None, + d=1, + dmp1=1, + dmq1=1, + iqmp=2, + public_numbers=public_numbers + ) + + with pytest.raises(TypeError): + rsa.RSAPrivateNumbers( + p=3, + q=5, + d=None, + dmp1=1, + dmq1=1, + iqmp=2, + public_numbers=public_numbers + ) + + with pytest.raises(TypeError): + rsa.RSAPrivateNumbers( + p=3, + q=5, + d=1, + dmp1=None, + dmq1=1, + iqmp=2, + public_numbers=public_numbers + ) + + with pytest.raises(TypeError): + rsa.RSAPrivateNumbers( + p=3, + q=5, + d=1, + dmp1=1, + dmq1=None, + iqmp=2, + public_numbers=public_numbers + ) + + with pytest.raises(TypeError): + rsa.RSAPrivateNumbers( + p=3, + q=5, + d=1, + dmp1=1, + dmq1=1, + iqmp=None, + public_numbers=public_numbers + ) + + with pytest.raises(TypeError): + rsa.RSAPrivateNumbers( + p=3, + q=5, + d=1, + dmp1=1, + dmq1=1, + iqmp=2, + public_numbers=None + ) + |