aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2014-02-07 16:07:55 -0600
committerPaul Kehrer <paul.l.kehrer@gmail.com>2014-02-07 16:07:55 -0600
commit41ace0a57d8e45b8034237a617ccc9fcaf45f4d4 (patch)
treec7d1f625ad79724b77ff55a80dabd37376403325 /tests
parentde0019fe6943215746d385f65f6fa4e7e2725dd1 (diff)
parentbc29f5b7741f1593234c6cae9df58e2ed8345f92 (diff)
downloadcryptography-41ace0a57d8e45b8034237a617ccc9fcaf45f4d4.tar.gz
cryptography-41ace0a57d8e45b8034237a617ccc9fcaf45f4d4.tar.bz2
cryptography-41ace0a57d8e45b8034237a617ccc9fcaf45f4d4.zip
Merge pull request #559 from public/rsa-keys
RSA keys
Diffstat (limited to 'tests')
-rw-r--r--tests/hazmat/primitives/test_rsa.py173
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)