Failed Conditions
Push — v7 ( e44e34...2109ab )
by Florent
04:36
created

testMultipleRecipientEncryption()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 102
Code Lines 77

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 77
nc 1
nop 0
dl 0
loc 102
rs 8.2857
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * The MIT License (MIT)
7
 *
8
 * Copyright (c) 2014-2017 Spomky-Labs
9
 *
10
 * This software may be modified and distributed under the terms
11
 * of the MIT license.  See the LICENSE file for details.
12
 */
13
14
namespace Jose\Component\Encryption\Tests\RFC7520;
15
16
use Base64Url\Base64Url;
17
use Jose\Component\Core\JWAManager;
18
use Jose\Component\Core\JWK;
19
use Jose\Component\Encryption\Algorithm\ContentEncryption\A128CBCHS256;
20
use Jose\Component\Encryption\Algorithm\KeyEncryption\A256GCMKW;
21
use Jose\Component\Encryption\Algorithm\KeyEncryption\ECDHESA256KW;
22
use Jose\Component\Encryption\Algorithm\KeyEncryption\RSA15;
23
use Jose\Component\Encryption\Compression\CompressionMethodsManager;
24
use Jose\Component\Encryption\Compression\Deflate;
25
use Jose\Component\Encryption\Decrypter;
26
use Jose\Component\Encryption\JWELoader;
27
use Jose\Component\Encryption\Tests\AbstractEncryptionTest;
28
29
/**
30
 * @see https://tools.ietf.org/html/rfc7520#section-5.13
31
 *
32
 * @group RFC7520
33
 */
34
final class MultipleRecipientEncryptionTest extends AbstractEncryptionTest
35
{
36
    /**
37
     * Please note that we cannot the encryption and get the same result as the example (IV, TAG and other data are always different).
38
     * The output given in the RFC is used and only decrypted.
39
     */
40
    public function testMultipleRecipientEncryption()
41
    {
42
        $expected_payload = "You can trust us to stick with you through thick and thin\xe2\x80\x93to the bitter end. And you can trust us to keep any secret of yours\xe2\x80\x93closer than you keep it yourself. But you cannot trust us to let you face trouble alone, and go off without a word. We are your friends, Frodo.";
43
44
        $recipient_1_private_key = JWK::create([
45
            'kty' => 'RSA',
46
            'kid' => '[email protected]',
47
            'use' => 'enc',
48
            'n' => 'maxhbsmBtdQ3CNrKvprUE6n9lYcregDMLYNeTAWcLj8NnPU9XIYegTHVHQjxKDSHP2l-F5jS7sppG1wgdAqZyhnWvXhYNvcM7RfgKxqNx_xAHx6f3yy7s-M9PSNCwPC2lh6UAkR4I00EhV9lrypM9Pi4lBUop9t5fS9W5UNwaAllhrd-osQGPjIeI1deHTwx-ZTHu3C60Pu_LJIl6hKn9wbwaUmA4cR5Bd2pgbaY7ASgsjCUbtYJaNIHSoHXprUdJZKUMAzV0WOKPfA6OPI4oypBadjvMZ4ZAj3BnXaSYsEZhaueTXvZB4eZOAjIyh2e_VOIKVMsnDrJYAVotGlvMQ',
49
            'e' => 'AQAB',
50
            'd' => 'Kn9tgoHfiTVi8uPu5b9TnwyHwG5dK6RE0uFdlpCGnJN7ZEi963R7wybQ1PLAHmpIbNTztfrheoAniRV1NCIqXaW_qS461xiDTp4ntEPnqcKsyO5jMAji7-CL8vhpYYowNFvIesgMoVaPRYMYT9TW63hNM0aWs7USZ_hLg6Oe1mY0vHTI3FucjSM86Nff4oIENt43r2fspgEPGRrdE6fpLc9Oaq-qeP1GFULimrRdndm-P8q8kvN3KHlNAtEgrQAgTTgz80S-3VD0FgWfgnb1PNmiuPUxO8OpI9KDIfu_acc6fg14nsNaJqXe6RESvhGPH2afjHqSy_Fd2vpzj85bQQ',
51
            'p' => '2DwQmZ43FoTnQ8IkUj3BmKRf5Eh2mizZA5xEJ2MinUE3sdTYKSLtaEoekX9vbBZuWxHdVhM6UnKCJ_2iNk8Z0ayLYHL0_G21aXf9-unynEpUsH7HHTklLpYAzOOx1ZgVljoxAdWNn3hiEFrjZLZGS7lOH-a3QQlDDQoJOJ2VFmU',
52
            'q' => 'te8LY4-W7IyaqH1ExujjMqkTAlTeRbv0VLQnfLY2xINnrWdwiQ93_VF099aP1ESeLja2nw-6iKIe-qT7mtCPozKfVtUYfz5HrJ_XY2kfexJINb9lhZHMv5p1skZpeIS-GPHCC6gRlKo1q-idn_qxyusfWv7WAxlSVfQfk8d6Et0',
53
            'dp' => 'UfYKcL_or492vVc0PzwLSplbg4L3-Z5wL48mwiswbpzOyIgd2xHTHQmjJpFAIZ8q-zf9RmgJXkDrFs9rkdxPtAsL1WYdeCT5c125Fkdg317JVRDo1inX7x2Kdh8ERCreW8_4zXItuTl_KiXZNU5lvMQjWbIw2eTx1lpsflo0rYU',
54
            'dq' => 'iEgcO-QfpepdH8FWd7mUFyrXdnOkXJBCogChY6YKuIHGc_p8Le9MbpFKESzEaLlN1Ehf3B6oGBl5Iz_ayUlZj2IoQZ82znoUrpa9fVYNot87ACfzIG7q9Mv7RiPAderZi03tkVXAdaBau_9vs5rS-7HMtxkVrxSUvJY14TkXlHE',
55
            'qi' => 'kC-lzZOqoFaZCr5l0tOVtREKoVqaAYhQiqIRGL-MzS4sCmRkxm5vZlXYx6RtE1n_AagjqajlkjieGlxTTThHD8Iga6foGBMaAr5uR1hGQpSc7Gl7CF1DZkBJMTQN6EshYzZfxW08mIO8M6Rzuh0beL6fG9mkDcIyPrBXx2bQ_mM',
56
        ]);
57
58
        $recipient_2_private_key = JWK::create([
59
            'kty' => 'EC',
60
            'kid' => '[email protected]',
61
            'use' => 'enc',
62
            'crv' => 'P-384',
63
            'x' => 'YU4rRUzdmVqmRtWOs2OpDE_T5fsNIodcG8G5FWPrTPMyxpzsSOGaQLpe2FpxBmu2',
64
            'y' => 'A8-yxCHxkfBz3hKZfI1jUYMjUhsEveZ9THuwFjH2sCNdtksRJU7D5-SkgaFL1ETP',
65
            'd' => 'iTx2pk7wW-GqJkHcEkFQb2EFyYcO7RugmaW3mRrQVAOUiPommT0IdnYK2xDlZh-j',
66
        ]);
67
68
        $recipient_3_private_key = JWK::create([
69
            'kty' => 'oct',
70
            'kid' => '18ec08e1-bfa9-4d95-b205-2b4dd1d4321d',
71
            'use' => 'enc',
72
            'alg' => 'A256GCMKW',
73
            'k' => 'qC57l_uxcm7Nm3K-ct4GFjx8tM1U8CZ0NLBvdQstiS8',
74
        ]);
75
76
        $protected_headers = [
77
            'enc' => 'A128CBC-HS256',
78
        ];
79
80
        $headers = [
81
            'cty' => 'text/plain',
82
        ];
83
84
        $recipient_1_headers = [
85
            'alg' => 'RSA1_5',
86
            'kid' => '[email protected]',
87
        ];
88
89
        $recipient_2_headers = [
90
            'alg' => 'ECDH-ES+A256KW',
91
            'kid' => '[email protected]',
92
            'epk' => [
93
                'kty' => 'EC',
94
                'crv' => 'P-384',
95
                'x' => 'Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhsE2xAn2DtMRb25Ma2CX',
96
                'y' => 'VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEjI1pOMbw91fzZ84pbfm',
97
        ], ];
98
99
        $recipient_3_headers = [
100
            'alg' => 'A256GCMKW',
101
            'kid' => '18ec08e1-bfa9-4d95-b205-2b4dd1d4321d',
102
            'tag' => '59Nqh1LlYtVIhfD3pgRGvw',
103
            'iv' => 'AvpeoPZ9Ncn9mkBn',
104
        ];
105
106
        $expected_json = '{"recipients":[{"encrypted_key":"dYOD28kab0Vvf4ODgxVAJXgHcSZICSOp8M51zjwj4w6Y5G4XJQsNNIBiqyvUUAOcpL7S7-cFe7Pio7gV_Q06WmCSa-vhW6me4bWrBf7cHwEQJdXihidAYWVajJIaKMXMvFRMV6iDlRr076DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYSrRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-dbHcGlihqc_wGgho9fLMK8JOArYLcMDNQ","header":{"alg":"RSA1_5","kid":"[email protected]"}},{"encrypted_key":"ExInT0io9BqBMYF6-maw5tZlgoZXThD1zWKsHixJuw_elY4gSSId_w","header":{"alg":"ECDH-ES+A256KW","kid":"[email protected]","epk":{"kty":"EC","crv":"P-384","x":"Uzdvk3pi5wKCRc1izp5_r0OjeqT-I68i8g2b8mva8diRhsE2xAn2DtMRb25Ma2CX","y":"VDrRyFJh-Kwd1EjAgmj5Eo-CTHAZ53MC7PjjpLioy3ylEjI1pOMbw91fzZ84pbfm"}}},{"encrypted_key":"a7CclAejo_7JSuPB8zeagxXRam8dwCfmkt9-WyTpS1E","header":{"alg":"A256GCMKW","kid":"18ec08e1-bfa9-4d95-b205-2b4dd1d4321d","tag":"59Nqh1LlYtVIhfD3pgRGvw","iv":"AvpeoPZ9Ncn9mkBn"}}],"unprotected":{"cty":"text/plain"},"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","iv":"VgEIHY20EnzUtZFl2RpB1g","ciphertext":"ajm2Q-OpPXCr7-MHXicknb1lsxLdXxK_yLds0KuhJzfWK04SjdxQeSw2L9mu3a_k1C55kCQ_3xlkcVKC5yr__Is48VOoK0k63_QRM9tBURMFqLByJ8vOYQX0oJW4VUHJLmGhF-tVQWB7Kz8mr8zeE7txF0MSaP6ga7-siYxStR7_G07Thd1jh-zGT0wxM5g-VRORtq0K6AXpLlwEqRp7pkt2zRM0ZAXqSpe1O6FJ7FHLDyEFnD-zDIZukLpCbzhzMDLLw2-8I14FQrgi-iEuzHgIJFIJn2wh9Tj0cg_kOZy9BqMRZbmYXMY9YQjorZ_P_JYG3ARAIF3OjDNqpdYe-K_5Q5crGJSDNyij_ygEiItR5jssQVH2ofDQdLChtazE","tag":"BESYyFN7T09KY7i8zKs5_g"}';
107
        $expected_iv = 'VgEIHY20EnzUtZFl2RpB1g';
108
        $expected_recipient_1_encrypted_key = 'dYOD28kab0Vvf4ODgxVAJXgHcSZICSOp8M51zjwj4w6Y5G4XJQsNNIBiqyvUUAOcpL7S7-cFe7Pio7gV_Q06WmCSa-vhW6me4bWrBf7cHwEQJdXihidAYWVajJIaKMXMvFRMV6iDlRr076DFthg2_AV0_tSiV6xSEIFqt1xnYPpmP91tc5WJDOGb-wqjw0-b-S1laS11QVbuP78dQ7Fa0zAVzzjHX-xvyM2wxj_otxr9clN1LnZMbeYSrRicJK5xodvWgkpIdkMHo4LvdhRRvzoKzlic89jFWPlnBq_V4n5trGuExtp_-dbHcGlihqc_wGgho9fLMK8JOArYLcMDNQ';
109
        $expected_recipient_2_encrypted_key = 'ExInT0io9BqBMYF6-maw5tZlgoZXThD1zWKsHixJuw_elY4gSSId_w';
110
        $expected_recipient_3_encrypted_key = 'a7CclAejo_7JSuPB8zeagxXRam8dwCfmkt9-WyTpS1E';
111
        $expected_ciphertext = 'ajm2Q-OpPXCr7-MHXicknb1lsxLdXxK_yLds0KuhJzfWK04SjdxQeSw2L9mu3a_k1C55kCQ_3xlkcVKC5yr__Is48VOoK0k63_QRM9tBURMFqLByJ8vOYQX0oJW4VUHJLmGhF-tVQWB7Kz8mr8zeE7txF0MSaP6ga7-siYxStR7_G07Thd1jh-zGT0wxM5g-VRORtq0K6AXpLlwEqRp7pkt2zRM0ZAXqSpe1O6FJ7FHLDyEFnD-zDIZukLpCbzhzMDLLw2-8I14FQrgi-iEuzHgIJFIJn2wh9Tj0cg_kOZy9BqMRZbmYXMY9YQjorZ_P_JYG3ARAIF3OjDNqpdYe-K_5Q5crGJSDNyij_ygEiItR5jssQVH2ofDQdLChtazE';
112
        $expected_tag = 'BESYyFN7T09KY7i8zKs5_g';
113
114
        $keyEncryptionAlgorithmManager = JWAManager::create([new RSA15(), new ECDHESA256KW(), new A256GCMKW()]);
115
        $contentEncryptionAlgorithmManager = JWAManager::create([new A128CBCHS256()]);
116
        $compressionManager = CompressionMethodsManager::create([new Deflate()]);
117
        $decrypter = new Decrypter($keyEncryptionAlgorithmManager, $contentEncryptionAlgorithmManager, $compressionManager);
118
119
        $loaded_json = JWELoader::load($expected_json);
120
        $decrypter->decryptUsingKey($loaded_json, $recipient_1_private_key);
121
122
        $loaded_json = JWELoader::load($expected_json);
123
        $decrypter->decryptUsingKey($loaded_json, $recipient_2_private_key);
124
125
        $loaded_json = JWELoader::load($expected_json);
126
        $loaded_json = $decrypter->decryptUsingKey($loaded_json, $recipient_3_private_key);
127
128
        $this->assertEquals($expected_ciphertext, Base64Url::encode($loaded_json->getCiphertext()));
129
        $this->assertEquals($protected_headers, $loaded_json->getSharedProtectedHeaders());
130
        $this->assertEquals($expected_iv, Base64Url::encode($loaded_json->getIV()));
131
        $this->assertEquals($expected_recipient_1_encrypted_key, Base64Url::encode($loaded_json->getRecipient(0)->getEncryptedKey()));
132
        $this->assertEquals($expected_recipient_2_encrypted_key, Base64Url::encode($loaded_json->getRecipient(1)->getEncryptedKey()));
133
        $this->assertEquals($expected_recipient_3_encrypted_key, Base64Url::encode($loaded_json->getRecipient(2)->getEncryptedKey()));
134
        $this->assertEquals($recipient_1_headers, $loaded_json->getRecipient(0)->getHeaders());
135
        $this->assertEquals($recipient_2_headers, $loaded_json->getRecipient(1)->getHeaders());
136
        $this->assertEquals($recipient_3_headers, $loaded_json->getRecipient(2)->getHeaders());
137
        $this->assertEquals($headers, $loaded_json->getSharedHeaders());
138
        $this->assertEquals($expected_tag, Base64Url::encode($loaded_json->getTag()));
139
140
        $this->assertEquals($expected_payload, $loaded_json->getPayload());
141
    }
142
143
    /**
144
     * Same input as before, but we perform the encryption first.
145
     */
146
    public function testMultipleRecipientEncryptionBis()
147
    {
148
        $expected_payload = "You can trust us to stick with you through thick and thin\xe2\x80\x93to the bitter end. And you can trust us to keep any secret of yours\xe2\x80\x93closer than you keep it yourself. But you cannot trust us to let you face trouble alone, and go off without a word. We are your friends, Frodo.";
149
150
        $recipient_1_private_key = JWK::create([
151
            'kty' => 'RSA',
152
            'kid' => '[email protected]',
153
            'use' => 'enc',
154
            'n' => 'maxhbsmBtdQ3CNrKvprUE6n9lYcregDMLYNeTAWcLj8NnPU9XIYegTHVHQjxKDSHP2l-F5jS7sppG1wgdAqZyhnWvXhYNvcM7RfgKxqNx_xAHx6f3yy7s-M9PSNCwPC2lh6UAkR4I00EhV9lrypM9Pi4lBUop9t5fS9W5UNwaAllhrd-osQGPjIeI1deHTwx-ZTHu3C60Pu_LJIl6hKn9wbwaUmA4cR5Bd2pgbaY7ASgsjCUbtYJaNIHSoHXprUdJZKUMAzV0WOKPfA6OPI4oypBadjvMZ4ZAj3BnXaSYsEZhaueTXvZB4eZOAjIyh2e_VOIKVMsnDrJYAVotGlvMQ',
155
            'e' => 'AQAB',
156
            'd' => 'Kn9tgoHfiTVi8uPu5b9TnwyHwG5dK6RE0uFdlpCGnJN7ZEi963R7wybQ1PLAHmpIbNTztfrheoAniRV1NCIqXaW_qS461xiDTp4ntEPnqcKsyO5jMAji7-CL8vhpYYowNFvIesgMoVaPRYMYT9TW63hNM0aWs7USZ_hLg6Oe1mY0vHTI3FucjSM86Nff4oIENt43r2fspgEPGRrdE6fpLc9Oaq-qeP1GFULimrRdndm-P8q8kvN3KHlNAtEgrQAgTTgz80S-3VD0FgWfgnb1PNmiuPUxO8OpI9KDIfu_acc6fg14nsNaJqXe6RESvhGPH2afjHqSy_Fd2vpzj85bQQ',
157
            'p' => '2DwQmZ43FoTnQ8IkUj3BmKRf5Eh2mizZA5xEJ2MinUE3sdTYKSLtaEoekX9vbBZuWxHdVhM6UnKCJ_2iNk8Z0ayLYHL0_G21aXf9-unynEpUsH7HHTklLpYAzOOx1ZgVljoxAdWNn3hiEFrjZLZGS7lOH-a3QQlDDQoJOJ2VFmU',
158
            'q' => 'te8LY4-W7IyaqH1ExujjMqkTAlTeRbv0VLQnfLY2xINnrWdwiQ93_VF099aP1ESeLja2nw-6iKIe-qT7mtCPozKfVtUYfz5HrJ_XY2kfexJINb9lhZHMv5p1skZpeIS-GPHCC6gRlKo1q-idn_qxyusfWv7WAxlSVfQfk8d6Et0',
159
            'dp' => 'UfYKcL_or492vVc0PzwLSplbg4L3-Z5wL48mwiswbpzOyIgd2xHTHQmjJpFAIZ8q-zf9RmgJXkDrFs9rkdxPtAsL1WYdeCT5c125Fkdg317JVRDo1inX7x2Kdh8ERCreW8_4zXItuTl_KiXZNU5lvMQjWbIw2eTx1lpsflo0rYU',
160
            'dq' => 'iEgcO-QfpepdH8FWd7mUFyrXdnOkXJBCogChY6YKuIHGc_p8Le9MbpFKESzEaLlN1Ehf3B6oGBl5Iz_ayUlZj2IoQZ82znoUrpa9fVYNot87ACfzIG7q9Mv7RiPAderZi03tkVXAdaBau_9vs5rS-7HMtxkVrxSUvJY14TkXlHE',
161
            'qi' => 'kC-lzZOqoFaZCr5l0tOVtREKoVqaAYhQiqIRGL-MzS4sCmRkxm5vZlXYx6RtE1n_AagjqajlkjieGlxTTThHD8Iga6foGBMaAr5uR1hGQpSc7Gl7CF1DZkBJMTQN6EshYzZfxW08mIO8M6Rzuh0beL6fG9mkDcIyPrBXx2bQ_mM',
162
        ]);
163
164
        $recipient_2_public_key = JWK::create([
165
            'kty' => 'EC',
166
            'kid' => '[email protected]',
167
            'use' => 'enc',
168
            'crv' => 'P-384',
169
            'x' => 'YU4rRUzdmVqmRtWOs2OpDE_T5fsNIodcG8G5FWPrTPMyxpzsSOGaQLpe2FpxBmu2',
170
            'y' => 'A8-yxCHxkfBz3hKZfI1jUYMjUhsEveZ9THuwFjH2sCNdtksRJU7D5-SkgaFL1ETP',
171
        ]);
172
173
        $recipient_2_private_key = JWK::create([
174
            'kty' => 'EC',
175
            'kid' => '[email protected]',
176
            'use' => 'enc',
177
            'crv' => 'P-384',
178
            'x' => 'YU4rRUzdmVqmRtWOs2OpDE_T5fsNIodcG8G5FWPrTPMyxpzsSOGaQLpe2FpxBmu2',
179
            'y' => 'A8-yxCHxkfBz3hKZfI1jUYMjUhsEveZ9THuwFjH2sCNdtksRJU7D5-SkgaFL1ETP',
180
            'd' => 'iTx2pk7wW-GqJkHcEkFQb2EFyYcO7RugmaW3mRrQVAOUiPommT0IdnYK2xDlZh-j',
181
        ]);
182
183
        $recipient_3_private_key = JWK::create([
184
            'kty' => 'oct',
185
            'kid' => '18ec08e1-bfa9-4d95-b205-2b4dd1d4321d',
186
            'use' => 'enc',
187
            'alg' => 'A256GCMKW',
188
            'k' => 'qC57l_uxcm7Nm3K-ct4GFjx8tM1U8CZ0NLBvdQstiS8',
189
        ]);
190
191
        $protected_headers = [
192
            'enc' => 'A128CBC-HS256',
193
        ];
194
195
        $headers = [
196
            'cty' => 'text/plain',
197
        ];
198
199
        $recipient_1_headers = [
200
            'alg' => 'RSA1_5',
201
            'kid' => '[email protected]',
202
        ];
203
204
        $recipient_2_headers = [
205
            'alg' => 'ECDH-ES+A256KW',
206
            'kid' => '[email protected]',
207
        ];
208
209
        $recipient_3_headers = [
210
            'alg' => 'A256GCMKW',
211
            'kid' => '18ec08e1-bfa9-4d95-b205-2b4dd1d4321d',
212
        ];
213
214
        $keyEncryptionAlgorithmManager = JWAManager::create([new RSA15(), new ECDHESA256KW(), new A256GCMKW()]);
215
        $contentEncryptionAlgorithmManager = JWAManager::create([new A128CBCHS256()]);
216
        $compressionManager = CompressionMethodsManager::create([new Deflate()]);
217
        $jweBuilder = $this->getJWEBuilderFactory()->create(['RSA1_5', 'ECDH-ES+A256KW', 'A256GCMKW'], ['A128CBC-HS256'], ['DEF']);
218
        $decrypter = new Decrypter($keyEncryptionAlgorithmManager, $contentEncryptionAlgorithmManager, $compressionManager);
219
220
        $jwe = $jweBuilder
221
            ->withPayload($expected_payload)
222
            ->withSharedProtectedHeaders($protected_headers)
223
            ->withSharedHeaders($headers)
224
            ->addRecipient($recipient_1_private_key, $recipient_1_headers)
225
            ->addRecipient($recipient_2_public_key, $recipient_2_headers)
226
            ->addRecipient($recipient_3_private_key, $recipient_3_headers)
227
            ->build();
228
229
        $loaded_json = JWELoader::load($jwe->toJSON());
230
        $decrypter->decryptUsingKey($loaded_json, $recipient_1_private_key);
231
232
        $loaded_json = JWELoader::load($jwe->toJSON());
233
        $decrypter->decryptUsingKey($loaded_json, $recipient_2_private_key);
234
235
        $loaded_json = JWELoader::load($jwe->toJSON());
236
        $loaded_json = $decrypter->decryptUsingKey($loaded_json, $recipient_3_private_key);
237
238
        $this->assertEquals($protected_headers, $loaded_json->getSharedProtectedHeaders());
239
        $this->assertEquals($recipient_1_headers, $loaded_json->getRecipient(0)->getHeaders());
240
        $this->assertTrue(array_key_exists('epk', $loaded_json->getRecipient(1)->getHeaders()));
241
        $this->assertTrue(array_key_exists('iv', $loaded_json->getRecipient(2)->getHeaders()));
242
        $this->assertTrue(array_key_exists('tag', $loaded_json->getRecipient(2)->getHeaders()));
243
        $this->assertEquals($headers, $loaded_json->getSharedHeaders());
244
245
        $this->assertEquals($expected_payload, $loaded_json->getPayload());
246
    }
247
}
248