|
2 | 2 | from joserfc import jwe |
3 | 3 | from joserfc.jwe import GeneralJSONEncryption |
4 | 4 | from joserfc.jwk import KeySet, RSAKey, ECKey, OctKey |
5 | | -from joserfc.errors import ConflictAlgorithmError |
| 5 | +from joserfc.errors import ( |
| 6 | + DecodeError, |
| 7 | + ConflictAlgorithmError, |
| 8 | + InvalidKeyTypeError, |
| 9 | +) |
6 | 10 |
|
7 | 11 |
|
8 | 12 | class TestJWEJSON(TestCase): |
@@ -43,3 +47,27 @@ def test_with_aad(self): |
43 | 47 | value = jwe.encrypt_json(obj, None) |
44 | 48 | obj1 = jwe.decrypt_json(value, key1) |
45 | 49 | self.assertEqual(obj1.aad, b"foo") |
| 50 | + |
| 51 | + def test_decode_multiple_recipients(self): |
| 52 | + key1 = RSAKey.generate_key() |
| 53 | + key2 = ECKey.generate_key() |
| 54 | + obj = GeneralJSONEncryption({"enc": "A128CBC-HS256"}, b"i") |
| 55 | + obj.add_recipient({"alg": "RSA-OAEP"}, key1) |
| 56 | + obj.add_recipient({"alg": "ECDH-ES+A128KW"}, key2) |
| 57 | + value = jwe.encrypt_json(obj, None) |
| 58 | + self.assertRaises( |
| 59 | + InvalidKeyTypeError, |
| 60 | + jwe.decrypt_json, |
| 61 | + value, key1, |
| 62 | + ) |
| 63 | + registry = jwe.JWERegistry(verify_all_recipients=False) |
| 64 | + obj1 = jwe.decrypt_json(value, key1, registry=registry) |
| 65 | + self.assertEqual(obj1.plaintext, b"i") |
| 66 | + |
| 67 | + key3 = OctKey.generate_key() |
| 68 | + self.assertRaises( |
| 69 | + DecodeError, |
| 70 | + jwe.decrypt_json, |
| 71 | + value, key3, |
| 72 | + registry=registry, |
| 73 | + ) |
0 commit comments