Failed Conditions
Push — v7 ( ae6905...7dd7be )
by Florent
03:50
created

testMultipleRecipientEncryptionBis()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 102
Code Lines 74

Duplication

Lines 0
Ratio 0 %

Importance

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