Failed Conditions
Push — v7 ( 334279...19cd68 )
by Florent
01:45
created

MultipleSignaturesTest::testMultipleSignatures()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 102
Code Lines 55

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 55
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\Signature\Tests\RFC7520;
15
16
use Jose\Component\Core\JWAManager;
17
use Jose\Component\Core\JWK;
18
use Jose\Component\Signature\Algorithm\ES512;
19
use Jose\Component\Signature\Algorithm\HS256;
20
use Jose\Component\Signature\Algorithm\RS256;
21
use Jose\Component\Signature\JWSBuilder;
22
use Jose\Component\Signature\JWSLoader;
23
use Jose\Component\Signature\Verifier;
24
use PHPUnit\Framework\TestCase;
25
26
/**
27
 * @see https://tools.ietf.org/html/rfc7520#section-4.8
28
 *
29
 * @group RFC7520
30
 */
31
final class MultipleSignaturesTest extends TestCase
32
{
33
    public function testMultipleSignatures()
34
    {
35
        /*
36
         * Payload,
37
         * @see https://tools.ietf.org/html/rfc7520#section-4.8.1
38
         */
39
        $payload = "It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to.";
40
        //$jws = JWSFactory::createJWS($payload);
41
42
        $rsa_private_key = JWK::create([
43
            'kty' => 'RSA',
44
            'kid' => '[email protected]',
45
            'use' => 'sig',
46
            'n' => 'n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw',
47
            'e' => 'AQAB',
48
            'd' => 'bWUC9B-EFRIo8kpGfh0ZuyGPvMNKvYWNtB_ikiH9k20eT-O1q_I78eiZkpXxXQ0UTEs2LsNRS-8uJbvQ-A1irkwMSMkK1J3XTGgdrhCku9gRldY7sNA_AKZGh-Q661_42rINLRCe8W-nZ34ui_qOfkLnK9QWDDqpaIsA-bMwWWSDFu2MUBYwkHTMEzLYGqOe04noqeq1hExBTHBOBdkMXiuFhUq1BU6l-DqEiWxqg82sXt2h-LMnT3046AOYJoRioz75tSUQfGCshWTBnP5uDjd18kKhyv07lhfSJdrPdM5Plyl21hsFf4L_mHCuoFau7gdsPfHPxxjVOcOpBrQzwQ',
49
            'p' => '3Slxg_DwTXJcb6095RoXygQCAZ5RnAvZlno1yhHtnUex_fp7AZ_9nRaO7HX_-SFfGQeutao2TDjDAWU4Vupk8rw9JR0AzZ0N2fvuIAmr_WCsmGpeNqQnev1T7IyEsnh8UMt-n5CafhkikzhEsrmndH6LxOrvRJlsPp6Zv8bUq0k',
50
            'q' => 'uKE2dh-cTf6ERF4k4e_jy78GfPYUIaUyoSSJuBzp3Cubk3OCqs6grT8bR_cu0Dm1MZwWmtdqDyI95HrUeq3MP15vMMON8lHTeZu2lmKvwqW7anV5UzhM1iZ7z4yMkuUwFWoBvyY898EXvRD-hdqRxHlSqAZ192zB3pVFJ0s7pFc',
51
            'dp' => 'B8PVvXkvJrj2L-GYQ7v3y9r6Kw5g9SahXBwsWUzp19TVlgI-YV85q1NIb1rxQtD-IsXXR3-TanevuRPRt5OBOdiMGQp8pbt26gljYfKU_E9xn-RULHz0-ed9E9gXLKD4VGngpz-PfQ_q29pk5xWHoJp009Qf1HvChixRX59ehik',
52
            'dq' => 'CLDmDGduhylc9o7r84rEUVn7pzQ6PF83Y-iBZx5NT-TpnOZKF1pErAMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJKbi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdKT1cYF8',
53
            'qi' => '3PiqvXQN0zwMeE-sBvZgi289XP9XCQF3VWqPzMKnIgQp7_Tugo6-NZBKCQsMf3HaEGBjTVJs_jcK8-TRXvaKe-7ZMaQj8VfBdYkssbu0NKDDhjJ-GtiseaDVWt7dcH0cfwxgFUHpQh7FoCrjFJ6h6ZEpMF6xmujs4qMpPz8aaI4',
54
        ]);
55
56
        $ecdsa_private_key = JWK::create([
57
            'kty' => 'EC',
58
            'kid' => '[email protected]',
59
            'use' => 'sig',
60
            'crv' => 'P-521',
61
            'x' => 'AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9A5RkTKqjqvjyekWF-7ytDyRXYgCF5cj0Kt',
62
            'y' => 'AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVySsUdaQkAgDPrwQrJmbnX9cwlGfP-HqHZR1',
63
            'd' => 'AAhRON2r9cqXX1hg-RoI6R1tX5p2rUAYdmpHZoC1XNM56KtscrX6zbKipQrCW9CGZH3T4ubpnoTKLDYJ_fF3_rJt',
64
        ]);
65
66
        $symmetric_key = JWK::create([
67
            'kty' => 'oct',
68
            'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
69
            'use' => 'sig',
70
            'alg' => 'HS256',
71
            'k' => 'hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg',
72
        ]);
73
74
        $signatureAlgorithmManager = JWAManager::create([new RS256(), new ES512(), new HS256()]);
75
        $jwsBuilder = new JWSBuilder($signatureAlgorithmManager);
76
        $jwsBuilder = $jwsBuilder->withPayload($payload);
77
78
        /*
79
         * @see https://tools.ietf.org/html/rfc7520#section-4.8.2
80
         */
81
        $jwsBuilder = $jwsBuilder->addSignature(
82
                $ecdsa_private_key,
83
                [],
84
                [
85
                    'alg' => 'ES512',
86
                    'kid' => '[email protected]',
87
                ]
88
            );
89
90
        /*
91
         * @see https://tools.ietf.org/html/rfc7520#section-4.8.3
92
         */
93
        $jwsBuilder = $jwsBuilder->addSignature(
94
            $rsa_private_key,
95
            [
96
                'alg' => 'RS256',
97
            ],
98
            [
99
                'kid' => '[email protected]',
100
            ]
101
        );
102
103
        /*
104
         * @see https://tools.ietf.org/html/rfc7520#section-4.8.4
105
         */
106
        $jwsBuilder = $jwsBuilder->addSignature(
107
            $symmetric_key,
108
            [
109
                'alg' => 'HS256',
110
                'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
111
            ]
112
        );
113
114
        $jws = $jwsBuilder->build();
115
116
        $this->assertEquals(3, $jws->countSignatures());
117
        $verifier = new Verifier($signatureAlgorithmManager);
118
119
        $verifier->verifyWithKey($jws, $rsa_private_key);
120
        $verifier->verifyWithKey($jws, $ecdsa_private_key);
121
        $verifier->verifyWithKey($jws, $symmetric_key);
122
123
        /*
124
         * @see https://tools.ietf.org/html/rfc7520#section-4.8.5
125
         */
126
        $expected_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","signatures":[{"protected":"eyJhbGciOiJSUzI1NiJ9","header":{"kid":"[email protected]"},"signature":"MIsjqtVlOpa71KE-Mss8_Nq2YH4FGhiocsqrgi5NvyG53uoimic1tcMdSg-qptrzZc7CG6Svw2Y13TDIqHzTUrL_lR2ZFcryNFiHkSw129EghGpwkpxaTn_THJTCglNbADko1MZBCdwzJxwqZc-1RlpO2HibUYyXSwO97BSe0_evZKdjvvKSgsIqjytKSeAMbhMBdMma622_BG5t4sdbuCHtFjp9iJmkio47AIwqkZV1aIZsv33uPUqBBCXbYoQJwt7mxPftHmNlGoOSMxR_3thmXTCm4US-xiNOyhbm8afKK64jU6_TPtQHiJeQJxz9G3Tx-083B745_AfYOnlC9w"},{"header":{"alg":"ES512","kid":"[email protected]"},"signature":"ARcVLnaJJaUWG8fG-8t5BREVAuTY8n8YHjwDO1muhcdCoFZFFjfISu0Cdkn9Ybdlmi54ho0x924DUz8sK7ZXkhc7AFM8ObLfTvNCrqcI3Jkl2U5IX3utNhODH6v7xgy1Qahsn0fyb4zSAkje8bAWz4vIfj5pCMYxxm4fgV3q7ZYhm5eD"},{"protected":"eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9","signature":"s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"}]}';
127
        $loaded_json = JWSLoader::load($expected_json);
128
129
        $this->assertEquals(3, $loaded_json->countSignatures());
130
131
        $verifier->verifyWithKey($loaded_json, $rsa_private_key);
132
        $verifier->verifyWithKey($loaded_json, $ecdsa_private_key);
133
        $verifier->verifyWithKey($loaded_json, $symmetric_key);
134
    }
135
}
136