| 23 | reason="Multiple crypto backends not available for backend compatibility tests", |
| 24 | ) |
| 25 | class TestBackendRsaCompatibility: |
| 26 | @pytest.mark.parametrize("BackendSign", CRYPTO_BACKENDS) |
| 27 | @pytest.mark.parametrize("BackendVerify", CRYPTO_BACKENDS) |
| 28 | @pytest.mark.parametrize("private_key", PRIVATE_KEYS) |
| 29 | def test_signing_parity(self, BackendSign, BackendVerify, private_key): |
| 30 | key_sign = BackendSign(private_key, ALGORITHMS.RS256) |
| 31 | key_verify = BackendVerify(private_key, ALGORITHMS.RS256).public_key() |
| 32 | |
| 33 | msg = b"test" |
| 34 | sig = key_sign.sign(msg) |
| 35 | |
| 36 | # valid signature |
| 37 | assert key_verify.verify(msg, sig) |
| 38 | |
| 39 | # invalid signature |
| 40 | assert not key_verify.verify(msg, b"n" * 64) |
| 41 | |
| 42 | @pytest.mark.parametrize("encoding", ENCODINGS) |
| 43 | @pytest.mark.parametrize("BackendFrom", CRYPTO_BACKENDS) |
| 44 | @pytest.mark.parametrize("BackendTo", CRYPTO_BACKENDS) |
| 45 | @pytest.mark.parametrize("private_key", PRIVATE_KEYS) |
| 46 | def test_public_key_to_pem(self, BackendFrom, BackendTo, encoding, private_key): |
| 47 | key = BackendFrom(private_key, ALGORITHMS.RS256) |
| 48 | key2 = BackendTo(private_key, ALGORITHMS.RS256) |
| 49 | |
| 50 | key1_pem = key.public_key().to_pem(pem_format=encoding).strip() |
| 51 | key2_pem = key2.public_key().to_pem(pem_format=encoding).strip() |
| 52 | assert key1_pem == key2_pem |
| 53 | |
| 54 | @pytest.mark.parametrize("encoding", ENCODINGS) |
| 55 | @pytest.mark.parametrize("BackendFrom", CRYPTO_BACKENDS) |
| 56 | @pytest.mark.parametrize("BackendTo", CRYPTO_BACKENDS) |
| 57 | @pytest.mark.parametrize("private_key", PRIVATE_KEYS) |
| 58 | def test_private_key_to_pem(self, BackendFrom, BackendTo, encoding, private_key): |
| 59 | key = BackendFrom(private_key, ALGORITHMS.RS256) |
| 60 | key2 = BackendTo(private_key, ALGORITHMS.RS256) |
| 61 | |
| 62 | key1_pem = key.to_pem(pem_format=encoding).strip() |
| 63 | key2_pem = key2.to_pem(pem_format=encoding).strip() |
| 64 | |
| 65 | import base64 |
| 66 | |
| 67 | a = base64.b64decode(key1_pem[key1_pem.index(b"\n") : key1_pem.rindex(b"\n")]) |
| 68 | b = base64.b64decode(key2_pem[key2_pem.index(b"\n") : key2_pem.rindex(b"\n")]) |
| 69 | assert a == b |
| 70 | |
| 71 | assert key1_pem == key2_pem |
| 72 | |
| 73 | @pytest.mark.parametrize("encoding_save", ENCODINGS) |
| 74 | @pytest.mark.parametrize("encoding_load", ENCODINGS) |
| 75 | @pytest.mark.parametrize("BackendFrom", CRYPTO_BACKENDS) |
| 76 | @pytest.mark.parametrize("BackendTo", CRYPTO_BACKENDS) |
| 77 | @pytest.mark.parametrize("private_key", PRIVATE_KEYS) |
| 78 | def test_public_key_load_cycle(self, BackendFrom, BackendTo, encoding_save, encoding_load, private_key): |
| 79 | key = BackendFrom(private_key, ALGORITHMS.RS256) |
| 80 | |
| 81 | pem_pub_reference = key.public_key().to_pem(pem_format=encoding_save).strip() |
| 82 | pem_pub_load = key.public_key().to_pem(pem_format=encoding_load).strip() |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…