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

JWKSetTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 143
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 143
rs 10
c 0
b 0
f 0
wmc 7
lcom 1
cbo 2

7 Methods

Rating   Name   Duplication   Size   Complexity  
A testKeySelection() 0 7 1
A testKeySelectionWithAlgorithm() 0 17 1
A testKeySelectionWithAlgorithmAndKeyId() 0 17 1
A testKeySelectionWithKeyId() 0 17 1
A testKeySelectionReturnsNothing() 0 7 1
A testCreateKeySetFromValues() 0 16 1
A getPublicKeySet() 0 50 1
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\Core\Tests;
15
16
use Jose\Component\Core\JWK;
17
use Jose\Component\Core\JWKSet;
18
use PHPUnit\Framework\TestCase;
19
20
/**
21
 * final class JWKTest.
22
 *
23
 * @group Unit
24
 * @group JWKSet
25
 */
26
final class JWKSetTest extends TestCase
27
{
28
    public function testKeySelection()
29
    {
30
        $jwkset = $this->getPublicKeySet();
31
32
        $jwk = $jwkset->selectKey('enc');
33
        $this->assertInstanceOf(JWK::class, $jwk);
34
    }
35
36
    public function testKeySelectionWithAlgorithm()
37
    {
38
        $jwkset = $this->getPublicKeySet();
39
40
        $jwk = $jwkset->selectKey('sig', 'RS256');
41
        $this->assertInstanceOf(JWK::class, $jwk);
42
        $this->assertEquals([
43
                'kid' => '71ee230371d19630bc17fb90ccf20ae632ad8cf8',
44
                'kty' => 'RSA',
45
                'alg' => 'RS256',
46
                'use' => 'sig',
47
                'n' => 'vnMTRCMvsS04M1yaKR112aB8RxOkWHFixZO68wCRlVLxK4ugckXVD_Ebcq-kms1T2XpoWntVfBuX40r2GvcD9UsTFt_MZlgd1xyGwGV6U_tfQUll5mKxCPjr60h83LXKJ_zmLXIqkV8tAoIg78a5VRWoms_0Bn09DKT3-RBWFjk=',
48
                'e' => 'AQAB',
49
            ],
50
            $jwk->all()
51
        );
52
    }
53
54
    public function testKeySelectionWithAlgorithmAndKeyId()
55
    {
56
        $jwkset = $this->getPublicKeySet();
57
58
        $jwk = $jwkset->selectKey('sig', 'RS256', ['kid' => '02491f945c951adf156f370788e8ccdabf8877a8']);
59
        $this->assertInstanceOf(JWK::class, $jwk);
60
        $this->assertEquals([
61
                'kid' => '02491f945c951adf156f370788e8ccdabf8877a8',
62
                'kty' => 'RSA',
63
                'alg' => 'RS256',
64
                'use' => 'sig',
65
                'n' => 'rI67uHIDWDgCy_Ut-FhhjTCkEcqzoO80IRgdpk_fJHlDmXhMTJKPizxbIEMs0wRHRZpwH-4D20thpnQB5Mgx6-XM9kOvcYpHSdcYME77BwX6uQG-hw2w77NOhYiCSZCLzx-5ld5Wjy0dympL-ExqQw-wrWipMX7NQhIbJqVbZ18=',
66
                'e' => 'AQAB',
67
            ],
68
            $jwk->all()
69
        );
70
    }
71
72
    public function testKeySelectionWithKeyId()
73
    {
74
        $jwkset = $this->getPublicKeySet();
75
76
        $jwk = $jwkset->selectKey('sig', null, ['kid' => '02491f945c951adf156f370788e8ccdabf8877a8']);
77
        $this->assertInstanceOf(JWK::class, $jwk);
78
        $this->assertEquals([
79
                'kid' => '02491f945c951adf156f370788e8ccdabf8877a8',
80
                'kty' => 'RSA',
81
                'alg' => 'RS256',
82
                'use' => 'sig',
83
                'n' => 'rI67uHIDWDgCy_Ut-FhhjTCkEcqzoO80IRgdpk_fJHlDmXhMTJKPizxbIEMs0wRHRZpwH-4D20thpnQB5Mgx6-XM9kOvcYpHSdcYME77BwX6uQG-hw2w77NOhYiCSZCLzx-5ld5Wjy0dympL-ExqQw-wrWipMX7NQhIbJqVbZ18=',
84
                'e' => 'AQAB',
85
            ],
86
            $jwk->all()
87
        );
88
    }
89
90
    public function testKeySelectionReturnsNothing()
91
    {
92
        $jwkset = $this->getPublicKeySet();
93
94
        $jwk = $jwkset->selectKey('enc', null, ['kid' => '02491f945c951adf156f370788e8ccdabf8877a8']);
95
        $this->assertNull($jwk);
96
    }
97
98
    public function testCreateKeySetFromValues()
99
    {
100
        $values = ['keys' => [[
101
            'kid' => '71ee230371d19630bc17fb90ccf20ae632ad8cf8',
102
            'kty' => 'RSA',
103
            'alg' => 'RS256',
104
            'use' => 'sig',
105
            'n' => 'vnMTRCMvsS04M1yaKR112aB8RxOkWHFixZO68wCRlVLxK4ugckXVD_Ebcq-kms1T2XpoWntVfBuX40r2GvcD9UsTFt_MZlgd1xyGwGV6U_tfQUll5mKxCPjr60h83LXKJ_zmLXIqkV8tAoIg78a5VRWoms_0Bn09DKT3-RBWFjk=',
106
            'e' => 'AQAB',
107
        ]]];
108
        $jwkset = JWKSet::createFromKeyData($values);
109
        $this->assertInstanceOf(JWKSet::class, $jwkset);
110
        $this->assertEquals(1, count($jwkset));
111
        $this->assertTrue($jwkset->hasKey('71ee230371d19630bc17fb90ccf20ae632ad8cf8'));
112
        $this->assertFalse($jwkset->hasKey(0));
113
    }
114
115
    /**
116
     * @return JWKSet
117
     */
118
    private function getPublicKeySet(): JWKSet
119
    {
120
        $keys = ['keys' => [
121
            [
122
                'kid' => '71ee230371d19630bc17fb90ccf20ae632ad8cf8',
123
                'kty' => 'RSA',
124
                'alg' => 'RS256',
125
                'use' => 'sig',
126
                'n' => 'vnMTRCMvsS04M1yaKR112aB8RxOkWHFixZO68wCRlVLxK4ugckXVD_Ebcq-kms1T2XpoWntVfBuX40r2GvcD9UsTFt_MZlgd1xyGwGV6U_tfQUll5mKxCPjr60h83LXKJ_zmLXIqkV8tAoIg78a5VRWoms_0Bn09DKT3-RBWFjk=',
127
                'e' => 'AQAB',
128
            ],
129
            [
130
                'kid' => '02491f945c951adf156f370788e8ccdabf8877a8',
131
                'kty' => 'RSA',
132
                'alg' => 'RS256',
133
                'use' => 'sig',
134
                'n' => 'rI67uHIDWDgCy_Ut-FhhjTCkEcqzoO80IRgdpk_fJHlDmXhMTJKPizxbIEMs0wRHRZpwH-4D20thpnQB5Mgx6-XM9kOvcYpHSdcYME77BwX6uQG-hw2w77NOhYiCSZCLzx-5ld5Wjy0dympL-ExqQw-wrWipMX7NQhIbJqVbZ18=',
135
                'e' => 'AQAB',
136
            ],
137
            [
138
                'kty' => 'RSA',
139
                'n' => 'oahUIoWw0K0usKNuOR6H4wkf4oBUXHTxRvgb48E-BVvxkeDNjbC4he8rUWcJoZmds2h7M70imEVhRU5djINXtqllXI4DFqcI1DgjT9LewND8MW2Krf3Spsk_ZkoFnilakGygTwpZ3uesH-PFABNIUYpOiN15dsQRkgr0vEhxN92i2asbOenSZeyaxziK72UwxrrKoExv6kc5twXTq4h-QChLOln0_mtUZwfsRaMStPs6mS6XrgxnxbWhojf663tuEQueGC-FCMfra36C9knDFGzKsNa7LZK2djYgyD3JR_MB_4NUJW_TqOQtwHYbxevoJArm-L5StowjzGy-_bq6Gw',
140
                'e' => 'AQAB',
141
            ],
142
            [
143
                'kty' => 'RSA',
144
                'n' => 'sXchDaQebHnPiGvyDOAT4saGEUetSyo9MKLOoWFsueri23bOdgWp4Dy1WlUzewbgBHod5pcM9H95GQRV3JDXboIRROSBigeC5yjU1hGzHHyXss8UDprecbAYxknTcQkhslANGRUZmdTOQ5qTRsLAt6BTYuyvVRdhS8exSZEy_c4gs_7svlJJQ4H9_NxsiIoLwAEk7-Q3UXERGYw_75IDrGA84-lA_-Ct4eTlXHBIY2EaV7t7LjJaynVJCpkv4LKjTTAumiGUIuQhrNhZLuF_RJLqHpM2kgWFLU7-VTdL1VbC2tejvcI2BlMkEpk1BzBZI0KQB0GaDWFLN-aEAw3vRw',
145
                'e' => 'AQAB',
146
            ],
147
            [
148
                'kty' => 'RSA',
149
                'n' => 'ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddxHmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMsD1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSHSXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ',
150
                'e' => 'AQAB',
151
            ],
152
            [
153
                'kty' => 'EC',
154
                'crv' => 'P-256',
155
                'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
156
                'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
157
            ],
158
            [
159
                'kty' => 'EC',
160
                'crv' => 'P-521',
161
                'x' => 'AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk',
162
                'y' => 'ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2',
163
            ],
164
        ]];
165
166
        return JWKSet::createFromKeyData($keys);
167
    }
168
}
169