Seditio Source
Root |
./othercms/xenForo 2.2.8/src/vendor/web-token/jwt-core/Tests/JWKSetTest.php
<?php

declare(strict_types=1);

/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014-2018 Spomky-Labs
 *
 * This software may be modified and distributed under the terms
 * of the MIT license.  See the LICENSE file for details.
 */

namespace Jose\Component\Core\Tests;

use
Jose\Component\Core\JWK;
use
Jose\Component\Core\JWKSet;
use
PHPUnit\Framework\TestCase;

/**
 * @group Unit
 * @group JWKSet
 */
class JWKSetTest extends TestCase
{
   
/**
     * @test
     */
   
public function iCanSelectAKeyInAKeySet()
    {
       
$jwkset = $this->getPublicKeySet();

       
$jwk = $jwkset->selectKey('enc');
        static::
assertInstanceOf(JWK::class, $jwk);
    }

   
/**
     * @test
     * @expectedException \InvalidArgumentException
     * @expectedExceptionMessage Allowed key types are "sig" or "enc".
     */
   
public function iCannotSelectAKeyFromAKeySetWithUnsupportedUsageParameter()
    {
       
$jwkset = $this->getPublicKeySet();
       
$jwkset->selectKey('foo');
    }

   
/**
     * @test
     * @expectedException \InvalidArgumentException
     * @expectedExceptionMessage Invalid data.
     */
   
public function iCannotCreateAKeySetWithBadArguments()
    {
       
JWKSet::createFromKeyData(['keys' => true]);
    }

   
/**
     * @test
     */
   
public function iCanGetAllKeysInAKeySet()
    {
       
$jwkset = $this->getPublicKeySet();
        static::
assertEquals(3, \count($jwkset->all()));
    }

   
/**
     * @test
     */
   
public function iCanAddKeysInAKeySet()
    {
       
$jwkset = $this->getPublicKeySet();
       
$new_jwkset = $jwkset->with(new JWK(['kty' => 'none']));
        static::
assertEquals(4, \count($new_jwkset->all()));
        static::
assertNotSame($jwkset, $new_jwkset);
    }

   
/**
     * @test
     */
   
public function iCanSelectAKeyWithAlgorithm()
    {
       
$jwkset = $this->getPublicKeySet();

       
$jwk = $jwkset->selectKey('enc', new FooAlgorithm());
        static::
assertInstanceOf(JWK::class, $jwk);
        static::
assertEquals([
           
'kid' => '71ee230371d19630bc17fb90ccf20ae632ad8cf8',
           
'kty' => 'FOO',
           
'alg' => 'foo',
           
'use' => 'enc',
        ],
           
$jwk->all()
        );
    }

   
/**
     * @test
     */
   
public function iCanSelectAKeyWithAlgorithmAndKeyId()
    {
       
$jwkset = $this->getPublicKeySet();

       
$jwk = $jwkset->selectKey('sig', new FooAlgorithm(), ['kid' => '02491f945c951adf156f370788e8ccdabf8877a8']);
        static::
assertInstanceOf(JWK::class, $jwk);
        static::
assertEquals([
           
'kid' => '02491f945c951adf156f370788e8ccdabf8877a8',
           
'kty' => 'FOO',
           
'alg' => 'foo',
           
'use' => 'sig',
        ],
           
$jwk->all()
        );
    }

   
/**
     * @test
     */
   
public function iCanSelectAKeyWithWithKeyId()
    {
       
$jwkset = $this->getPublicKeySet();

       
$jwk = $jwkset->selectKey('sig', null, ['kid' => '02491f945c951adf156f370788e8ccdabf8877a8']);
        static::
assertInstanceOf(JWK::class, $jwk);
        static::
assertEquals([
           
'kid' => '02491f945c951adf156f370788e8ccdabf8877a8',
           
'kty' => 'FOO',
           
'alg' => 'foo',
           
'use' => 'sig',
        ],
           
$jwk->all()
        );
    }

   
/**
     * @test
     */
   
public function theKeySetDoesNotContainsSuitableAKeyThatFitsOnTheRequirements()
    {
       
$jwkset = $this->getPublicKeySet();

       
$jwk = $jwkset->selectKey('enc', null, ['kid' => '02491f945c951adf156f370788e8ccdabf8877a8']);
        static::
assertNull($jwk);
    }

   
/**
     * @test
     */
   
public function iCanCreateAKeySetUsingValues()
    {
       
$values = ['keys' => [[
           
'kid' => '71ee230371d19630bc17fb90ccf20ae632ad8cf8',
           
'kty' => 'FOO',
           
'alg' => 'foo',
           
'use' => 'sig',
        ]]];
       
$jwkset = JWKSet::createFromKeyData($values);
        static::
assertInstanceOf(JWKSet::class, $jwkset);
        static::
assertEquals(1, \count($jwkset));
        static::
assertTrue($jwkset->has('71ee230371d19630bc17fb90ccf20ae632ad8cf8'));
        static::
assertFalse($jwkset->has(0));
    }

   
/**
     * @test
     */
   
public function keySet()
    {
       
$jwk1 = new JWK([
           
'kty' => 'EC',
           
'crv' => 'P-256',
           
'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
           
'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
           
'use' => 'sign',
           
'key_ops' => ['sign'],
           
'alg' => 'ES256',
           
'kid' => '0123456789',
        ]);

       
$jwk2 = new JWK([
           
'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',
        ]);

       
$jwkset = new JWKSet([$jwk1]);
       
$jwkset = $jwkset->with($jwk2);

        static::
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));
        static::
assertEquals(2, \count($jwkset));
        static::
assertEquals(2, $jwkset->count());
        static::
assertTrue($jwkset->has('0123456789'));
        static::
assertTrue($jwkset->has('9876543210'));
        static::
assertFalse($jwkset->has(0));

        foreach (
$jwkset as $key) {
            static::
assertEquals('EC', $key->get('kty'));
        }

        static::
assertEquals('9876543210', $jwkset->get('9876543210')->get('kid'));
       
$jwkset = $jwkset->without('9876543210');
       
$jwkset = $jwkset->without('9876543210');

        static::
assertEquals(1, \count($jwkset));
        static::
assertEquals(1, $jwkset->count());
        static::
assertInstanceOf(JWK::class, $jwkset->get('0123456789'));

       
$jwkset = $jwkset->without('0123456789');
        static::
assertEquals(0, \count($jwkset));
        static::
assertEquals(0, $jwkset->count());
    }

   
/**
     * @test
     * @expectedException \InvalidArgumentException
     * @expectedExceptionMessage Undefined index.
     */
   
public function keySet2()
    {
       
$jwk1 = new JWK([
           
'kty' => 'EC',
           
'crv' => 'P-256',
           
'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
           
'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
           
'use' => 'sign',
           
'key_ops' => ['sign'],
           
'alg' => 'ES256',
           
'kid' => '0123456789',
        ]);

       
$jwk2 = new JWK([
           
'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',
        ]);

       
$jwkset = new JWKSet([$jwk1, $jwk2]);

       
$jwkset->get(2);
    }

    private function
getPublicKeySet(): JWKSet
   
{
       
$keys = ['keys' => [
            [
               
'kid' => '71ee230371d19630bc17fb90ccf20ae632ad8cf8',
               
'kty' => 'FOO',
               
'alg' => 'foo',
               
'use' => 'enc',
            ],
            [
               
'kid' => '02491f945c951adf156f370788e8ccdabf8877a8',
               
'kty' => 'FOO',
               
'alg' => 'foo',
               
'use' => 'sig',
            ],
            [
               
'kty' => 'EC',
               
'crv' => 'P-256',
               
'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
               
'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
            ],
        ]];

        return
JWKSet::createFromKeyData($keys);
    }
}