diff options
Diffstat (limited to 'tests/hazmat/primitives')
| -rw-r--r-- | tests/hazmat/primitives/test_rsa.py | 173 | 
1 files changed, 173 insertions, 0 deletions
diff --git a/tests/hazmat/primitives/test_rsa.py b/tests/hazmat/primitives/test_rsa.py new file mode 100644 index 00000000..e2aca028 --- /dev/null +++ b/tests/hazmat/primitives/test_rsa.py @@ -0,0 +1,173 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#    http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from __future__ import absolute_import, division, print_function + +import os + +import pytest + +from cryptography.hazmat.primitives.asymmetric import rsa + +from ...utils import load_pkcs1_vectors, load_vectors_from_file + + +class TestRSA(object): +    @pytest.mark.parametrize( +        "pkcs1_example", +        load_vectors_from_file( +            os.path.join( +                "asymmetric", "RSA", "pkcs-1v2-1d2-vec", "pss-vect.txt"), +            load_pkcs1_vectors +        ) +    ) +    def test_load_pss_vect_example_keys(self, pkcs1_example): +        secret, public = pkcs1_example + +        skey = rsa.RSAPrivateKey(**secret) +        pkey = rsa.RSAPublicKey(**public) +        pkey2 = skey.public_key() + +        assert skey and pkey and pkey2 + +        assert skey.modulus +        assert skey.modulus == pkey.modulus +        assert skey.modulus == skey.n +        assert skey.public_exponent == pkey.public_exponent +        assert skey.public_exponent == skey.e +        assert skey.private_exponent == skey.d + +        assert pkey.modulus +        assert pkey.modulus == pkey2.modulus +        assert pkey.modulus == pkey.n +        assert pkey.public_exponent == pkey2.public_exponent +        assert pkey.public_exponent == pkey.e + +        assert skey.key_size +        assert skey.key_size == pkey.key_size +        assert skey.key_size == pkey2.key_size + +        assert skey.p * skey.q == skey.modulus + +    def test_invalid_private_key_argument_types(self): +        with pytest.raises(TypeError): +            rsa.RSAPrivateKey(None, None, None, None, None) + +    def test_invalid_public_key_argument_types(self): +        with pytest.raises(TypeError): +            rsa.RSAPublicKey(None, None) + +    def test_invalid_private_key_argument_values(self): +        # Start with p=3, q=5, private_exponent=14, 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.RSAPrivateKey( +                p=3, +                q=5, +                private_exponent=14, +                public_exponent=7, +                modulus=2 +            ) + +        # Test a modulus != p * q. +        with pytest.raises(ValueError): +            rsa.RSAPrivateKey( +                p=3, +                q=5, +                private_exponent=14, +                public_exponent=7, +                modulus=16 +            ) + +        # Test a p > modulus. +        with pytest.raises(ValueError): +            rsa.RSAPrivateKey( +                p=16, +                q=5, +                private_exponent=14, +                public_exponent=7, +                modulus=15 +            ) + +        # Test a q > modulus. +        with pytest.raises(ValueError): +            rsa.RSAPrivateKey( +                p=3, +                q=16, +                private_exponent=14, +                public_exponent=7, +                modulus=15 +            ) + +        # Test a private_exponent > modulus +        with pytest.raises(ValueError): +            rsa.RSAPrivateKey( +                p=3, +                q=5, +                private_exponent=16, +                public_exponent=7, +                modulus=15 +            ) + +        # Test a public_exponent < 3 +        with pytest.raises(ValueError): +            rsa.RSAPrivateKey( +                p=3, +                q=5, +                private_exponent=14, +                public_exponent=1, +                modulus=15 +            ) + +        # Test a public_exponent > modulus +        with pytest.raises(ValueError): +            rsa.RSAPrivateKey( +                p=3, +                q=5, +                private_exponent=14, +                public_exponent=17, +                modulus=15 +            ) + +        # Test a public_exponent that is not odd. +        with pytest.raises(ValueError): +            rsa.RSAPrivateKey( +                p=3, +                q=5, +                private_exponent=14, +                public_exponent=6, +                modulus=15 +            ) + +    def test_invalid_public_key_argument_values(self): +        # 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.RSAPublicKey(public_exponent=7, modulus=2) + +        # Test a public_exponent < 3 +        with pytest.raises(ValueError): +            rsa.RSAPublicKey(public_exponent=1, modulus=15) + +        # Test a public_exponent > modulus +        with pytest.raises(ValueError): +            rsa.RSAPublicKey(public_exponent=17, modulus=15) + +        # Test a public_exponent that is not odd. +        with pytest.raises(ValueError): +            rsa.RSAPublicKey(public_exponent=6, modulus=15)  | 
