Completed
Push — v2.0.x ( 11273c...f488cd )
by Florent
04:53 queued 01:28
created

JWKTest::testKeySet2()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 31
Code Lines 24

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 31
rs 8.8571
cc 1
eloc 24
nc 1
nop 0
1
<?php
2
3
/*
4
 * The MIT License (MIT)
5
 *
6
 * Copyright (c) 2014-2016 Spomky-Labs
7
 *
8
 * This software may be modified and distributed under the terms
9
 * of the MIT license.  See the LICENSE file for details.
10
 */
11
12
use Jose\Object\JWK;
13
use Jose\Object\JWKSet;
14
15
/**
16
 * Class JWKTest.
17
 */
18
class JWKTest extends \PHPUnit_Framework_TestCase
19
{
20
    /**
21
     *
22
     */
23
    public function testKey()
24
    {
25
        $jwk = new JWK([
26
            'kty'     => 'EC',
27
            'crv'     => 'P-256',
28
            'x'       => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
29
            'y'       => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
30
            'use'     => 'sign',
31
            'key_ops' => ['sign'],
32
            'alg'     => 'ES256',
33
            'bar'     => 'plic',
34
        ]);
35
36
        $this->assertEquals(['kty', 'crv', 'x', 'y', 'use', 'key_ops', 'alg', 'bar'], $jwk->getKeys());
37
        $this->assertEquals('EC', $jwk->get('kty'));
38
        $this->assertEquals('ES256', $jwk->get('alg'));
39
        $this->assertEquals('sign', $jwk->get('use'));
40
        $this->assertFalse($jwk->has('kid'));
41
        $this->assertEquals(['sign'], $jwk->get('key_ops'));
42
        $this->assertEquals('P-256', $jwk->get('crv'));
43
        $this->assertFalse($jwk->has('x5u'));
44
        $this->assertFalse($jwk->has('x5c'));
45
        $this->assertFalse($jwk->has('x5t'));
46
        $this->assertFalse($jwk->has('x5t#256'));
47
        $this->assertEquals('f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU', $jwk->get('x'));
48
        $this->assertEquals('x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0', $jwk->get('y'));
49
        $this->assertEquals('{"kty":"EC","crv":"P-256","x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU","y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0","use":"sign","key_ops":["sign"],"alg":"ES256","bar":"plic"}', json_encode($jwk));
50
    }
51
52
    /**
53
     * @expectedException \InvalidArgumentException
54
     * @expectedExceptionMessage The parameter "kty" is mandatory.
55
     */
56
    public function testBadConstruction()
57
    {
58
        new JWK([]);
59
    }
60
61
    /**
62
     * @expectedException \InvalidArgumentException
63
     * @expectedExceptionMessage The value identified by "ABCD" does not exist.
64
     */
65
    public function testBadCall()
66
    {
67
        $jwk = new JWK([
68
            'kty'     => 'EC',
69
            'crv'     => 'P-256',
70
            'x'       => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
71
            'y'       => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
72
            'use'     => 'sign',
73
            'key_ops' => ['sign'],
74
            'alg'     => 'ES256',
75
            'bar'     => 'plic',
76
        ]);
77
78
        $jwk->get('ABCD');
79
    }
80
81
    /**
82
     *
83
     */
84
    public function testKeySet()
85
    {
86
        $jwk1 = new JWK([
87
            'kty'     => 'EC',
88
            'crv'     => 'P-256',
89
            'x'       => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
90
            'y'       => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
91
            'use'     => 'sign',
92
            'key_ops' => ['sign'],
93
            'alg'     => 'ES256',
94
            'kid'     => '0123456789',
95
        ]);
96
97
        $jwk2 = new JWK([
98
            'kty'     => 'EC',
99
            'crv'     => 'P-256',
100
            'x'       => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
101
            'y'       => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
102
            'd'       => 'jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI',
103
            'use'     => 'sign',
104
            'key_ops' => ['verify'],
105
            'alg'     => 'ES256',
106
            'kid'     => '9876543210',
107
        ]);
108
109
        $jwkset = new JWKSet();
110
        $jwkset = $jwkset->addKey($jwk1);
111
        $jwkset = $jwkset->addKey($jwk2);
112
113
        $this->assertEquals('{"keys":[{"kty":"EC","crv":"P-256","x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU","y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0","use":"sign","key_ops":["sign"],"alg":"ES256","kid":"0123456789"},{"kty":"EC","crv":"P-256","x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU","y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0","d":"jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI","use":"sign","key_ops":["verify"],"alg":"ES256","kid":"9876543210"}]}', json_encode($jwkset));
114
        $this->assertEquals(2, count($jwkset));
115
        $this->assertEquals(2, $jwkset->count());
116
117
        foreach ($jwkset as $key) {
118
            $this->assertEquals('EC', $key->get('kty'));
119
        }
120
        $this->assertEquals(2, $jwkset->key());
121
122
        $this->assertEquals('9876543210', $jwkset->getKey(1)->get('kid'));
123
        $jwkset = $jwkset->removeKey(1);
124
        $jwkset = $jwkset->removeKey(1);
125
126
        $this->assertEquals(1, count($jwkset));
127
        $this->assertEquals(1, $jwkset->count());
128
129
        $this->assertInstanceOf('\Jose\Object\JWKInterface', $jwkset->getKey(0));
130
    }
131
132
    /**
133
     * @expectedException \InvalidArgumentException
134
     * @expectedExceptionMessage Undefined index.
135
     */
136
    public function testKeySet2()
137
    {
138
        $jwk1 = new JWK([
139
            'kty'     => 'EC',
140
            'crv'     => 'P-256',
141
            'x'       => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
142
            'y'       => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
143
            'use'     => 'sign',
144
            'key_ops' => ['sign'],
145
            'alg'     => 'ES256',
146
            'kid'     => '0123456789',
147
        ]);
148
149
        $jwk2 = new JWK([
150
            'kty'     => 'EC',
151
            'crv'     => 'P-256',
152
            'x'       => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
153
            'y'       => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
154
            'd'       => 'jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI',
155
            'use'     => 'sign',
156
            'key_ops' => ['verify'],
157
            'alg'     => 'ES256',
158
            'kid'     => '9876543210',
159
        ]);
160
161
        $jwkset = new JWKSet();
162
        $jwkset = $jwkset->addKey($jwk1);
163
        $jwkset = $jwkset->addKey($jwk2);
164
165
        $jwkset->getKey(2);
166
    }
167
}
168