aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cryptography/hazmat/primitives/asymmetric/rsa.py40
-rw-r--r--tests/hazmat/primitives/test_rsa.py88
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
+ )
+