parametrize a bunch of tests (#4365)

diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py
index ffe6259..268ee9d 100644
--- a/tests/hazmat/primitives/test_rsa.py
+++ b/tests/hazmat/primitives/test_rsa.py
@@ -1853,304 +1853,81 @@
         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)
-
+    @pytest.mark.parametrize(
+        ("p", "q", "d", "dmp1", "dmq1", "iqmp", "public_numbers"),
+        [
+            (None, 5, 1, 1, 1, 2, rsa.RSAPublicNumbers(e=1, n=15)),
+            (3, None, 1, 1, 1, 2, rsa.RSAPublicNumbers(e=1, n=15)),
+            (3, 5, None, 1, 1, 2, rsa.RSAPublicNumbers(e=1, n=15)),
+            (3, 5, 1, None, 1, 2, rsa.RSAPublicNumbers(e=1, n=15)),
+            (3, 5, 1, 1, None, 2, rsa.RSAPublicNumbers(e=1, n=15)),
+            (3, 5, 1, 1, 1, None, rsa.RSAPublicNumbers(e=1, n=15)),
+            (3, 5, 1, 1, 1, 2, None),
+        ]
+    )
+    def test_private_numbers_invalid_types(self, p, q, d, dmp1, dmq1, iqmp,
+                                           public_numbers):
         with pytest.raises(TypeError):
             rsa.RSAPrivateNumbers(
-                p=None,
-                q=5,
-                d=1,
-                dmp1=1,
-                dmq1=1,
-                iqmp=2,
+                p=p, q=q,
+                d=d,
+                dmp1=dmp1,
+                dmq1=dmq1,
+                iqmp=iqmp,
                 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
-            )
-
-    def test_invalid_public_numbers_argument_values(self, backend):
+    @pytest.mark.parametrize(
+        ("e", "n"),
+        [
+            (7, 2),  # modulus < 3
+            (1, 15),  # public_exponent < 3
+            (17, 15),  # public_exponent > modulus
+            (14, 15),  # public_exponent not odd
+        ]
+    )
+    def test_invalid_public_numbers_argument_values(self, e, n, backend):
         # Start with public_exponent=7, modulus=15. Then change one value at a
         # time to test the bounds.
 
-        # Test a modulus < 3.
-
         with pytest.raises(ValueError):
-            rsa.RSAPublicNumbers(e=7, n=2).public_key(backend)
+            rsa.RSAPublicNumbers(e=e, n=n).public_key(backend)
 
-        # Test a public_exponent < 3
-        with pytest.raises(ValueError):
-            rsa.RSAPublicNumbers(e=1, n=15).public_key(backend)
-
-        # Test a public_exponent > modulus
-        with pytest.raises(ValueError):
-            rsa.RSAPublicNumbers(e=17, n=15).public_key(backend)
-
-        # Test a public_exponent that is not odd.
-        with pytest.raises(ValueError):
-            rsa.RSAPublicNumbers(e=14, n=15).public_key(backend)
-
-    def test_invalid_private_numbers_argument_values(self, backend):
+    @pytest.mark.parametrize(
+        ("p", "q", "d", "dmp1", "dmq1", "iqmp", "e", "n"),
+        [
+            (3, 11, 3, 1, 3, 2, 7, 2),  # modulus < 3
+            (3, 11, 3, 1, 3, 2, 7, 35),  # modulus != p * q
+            (37, 11, 3, 1, 3, 2, 7, 33),  # p > modulus
+            (3, 37, 3, 1, 3, 2, 7, 33),  # q > modulus
+            (3, 11, 3, 35, 3, 2, 7, 33),  # dmp1 > modulus
+            (3, 11, 3, 1, 35, 2, 7, 33),  # dmq1 > modulus
+            (3, 11, 3, 1, 3, 35, 7, 33),  # iqmp > modulus
+            (3, 11, 37, 1, 3, 2, 7, 33),  # d > modulus
+            (3, 11, 3, 1, 3, 2, 1, 33),  # public_exponent < 3
+            (3, 11, 3, 1, 3, 35, 65537, 33),  # public_exponent > modulus
+            (3, 11, 3, 1, 3, 2, 6, 33),  # public_exponent is not odd
+            (3, 11, 3, 2, 3, 2, 7, 33),  # dmp1 is not odd
+            (3, 11, 3, 1, 4, 2, 7, 33),  # dmq1 is not odd
+        ]
+    )
+    def test_invalid_private_numbers_argument_values(self, p, q, d, dmp1, dmq1,
+                                                     iqmp, e, n, backend):
         # Start with p=3, q=11, private_exponent=3, public_exponent=7,
         # modulus=33, dmp1=1, dmq1=3, iqmp=2. Then change one value at
         # a time to test the bounds.
 
-        # Test a modulus < 3.
         with pytest.raises(ValueError):
             rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=3,
-                iqmp=2,
+                p=p,
+                q=q,
+                d=d,
+                dmp1=dmp1,
+                dmq1=dmq1,
+                iqmp=iqmp,
                 public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=2
-                )
-            ).private_key(backend)
-
-        # Test a modulus != p * q.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=3,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=35
-                )
-            ).private_key(backend)
-
-        # Test a p > modulus.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=37,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=3,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a q > modulus.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=37,
-                d=3,
-                dmp1=1,
-                dmq1=3,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a dmp1 > modulus.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=35,
-                dmq1=3,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a dmq1 > modulus.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=35,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test an iqmp > modulus.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=3,
-                iqmp=35,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a private_exponent > modulus
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=37,
-                dmp1=1,
-                dmq1=3,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a public_exponent < 3
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=3,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=1,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a public_exponent > modulus
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=3,
-                iqmp=35,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=65537,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a public_exponent that is not odd.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=3,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=6,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a dmp1 that is not odd.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=2,
-                dmq1=3,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=33
-                )
-            ).private_key(backend)
-
-        # Test a dmq1 that is not odd.
-        with pytest.raises(ValueError):
-            rsa.RSAPrivateNumbers(
-                p=3,
-                q=11,
-                d=3,
-                dmp1=1,
-                dmq1=4,
-                iqmp=2,
-                public_numbers=rsa.RSAPublicNumbers(
-                    e=7,
-                    n=33
+                    e=e,
+                    n=n
                 )
             ).private_key(backend)