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

testEdDSASignAndVerifyAlgorithm()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 29
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 29
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 21
nc 1
nop 0
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;
15
16
use Base64Url\Base64Url;
17
use Jose\Component\Core\JWAManager;
18
use Jose\Component\Core\JWK;
19
use Jose\Component\Signature\Algorithm\EdDSA;
20
use Jose\Component\Signature\JWS;
21
use Jose\Component\Signature\JWSLoader;
22
use Jose\Component\Signature\Verifier;
23
24
/**
25
 * final class EdDSASignatureTest.
26
 *
27
 * @group EdDSA
28
 * @group Unit
29
 */
30
final class EdDSASignatureTest extends AbstractSignatureTest
31
{
32
    /**
33
     * @see https://tools.ietf.org/html/draft-ietf-jose-cfrg-curves-00#appendix-A.5
34
     */
35
    public function testEdDSAVerifyAlgorithm()
36
    {
37
        $key = JWK::create([
38
            'kty' => 'OKP',
39
            'crv' => 'Ed25519',
40
            'd' => 'nWGxne_9WmC6hEr0kuwsxERJxWl7MmkZcDusAxyuf2A',
41
            'x' => '11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo',
42
        ]);
43
44
        $eddsa = new EdDSA();
45
        $input = 'eyJhbGciOiJFZERTQSJ9.RXhhbXBsZSBvZiBFZDI1NTE5IHNpZ25pbmc';
46
        $signature = Base64Url::decode('hgyY0il_MGCjP0JzlnLWG1PPOt7-09PGcvMg3AIbQR6dWbhijcNR4ki4iylGjg5BhVsPt9g7sVvpAr_MuM0KAg');
47
48
        $result = $eddsa->verify($key, $input, $signature);
49
50
        $this->assertTrue($result);
51
    }
52
53
    /**
54
     * @see https://tools.ietf.org/html/draft-ietf-jose-cfrg-curves-00#appendix-A.5
55
     */
56
    public function testEdDSASignAndVerifyAlgorithm()
57
    {
58
        $key = JWK::create([
59
            'kty' => 'OKP',
60
            'crv' => 'Ed25519',
61
            'd' => 'nWGxne_9WmC6hEr0kuwsxERJxWl7MmkZcDusAxyuf2A',
62
            'x' => '11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo',
63
        ]);
64
65
        $header = ['alg' => 'EdDSA'];
66
        $input = Base64Url::decode('RXhhbXBsZSBvZiBFZDI1NTE5IHNpZ25pbmc');
67
68
        $signatureAlgorithmManager = JWAManager::create([new EdDSA()]);
69
        $jwsBuilder = $this->getJWSBuilderFactory()->create(['EdDSA']);
70
        $jws = $jwsBuilder
71
            ->withPayload($input)
72
            ->addSignature($key, $header)
73
            ->build()
74
            ->toCompactJSON(0);
75
76
        $this->assertEquals('eyJhbGciOiJFZERTQSJ9.RXhhbXBsZSBvZiBFZDI1NTE5IHNpZ25pbmc.hgyY0il_MGCjP0JzlnLWG1PPOt7-09PGcvMg3AIbQR6dWbhijcNR4ki4iylGjg5BhVsPt9g7sVvpAr_MuM0KAg', $jws);
77
78
        $loaded = JWSLoader::load($jws);
79
        $verifier = new Verifier($signatureAlgorithmManager);
80
81
        $this->assertInstanceOf(JWS::class, $loaded);
82
        $this->assertEquals(1, $loaded->countSignatures());
83
        $verifier->verifyWithKey($loaded, $key);
84
    }
85
}
86