b0y-101 Mini Shell


Current Path : E:/www/b-group.old/spfin/mainpay/jwt-framework/tests/Component/KeyManagement/
File Upload :
Current File : E:/www/b-group.old/spfin/mainpay/jwt-framework/tests/Component/KeyManagement/JWKAnalyzerTest.php

<?php

declare(strict_types=1);

namespace Jose\Tests\Component\KeyManagement;

use Jose\Component\Core\JWK;
use Jose\Component\KeyManagement\Analyzer\AlgorithmAnalyzer;
use Jose\Component\KeyManagement\Analyzer\ES256KeyAnalyzer;
use Jose\Component\KeyManagement\Analyzer\ES384KeyAnalyzer;
use Jose\Component\KeyManagement\Analyzer\ES512KeyAnalyzer;
use Jose\Component\KeyManagement\Analyzer\HS256KeyAnalyzer;
use Jose\Component\KeyManagement\Analyzer\HS384KeyAnalyzer;
use Jose\Component\KeyManagement\Analyzer\HS512KeyAnalyzer;
use Jose\Component\KeyManagement\Analyzer\KeyAnalyzerManager;
use Jose\Component\KeyManagement\Analyzer\KeyIdentifierAnalyzer;
use Jose\Component\KeyManagement\Analyzer\NoneAnalyzer;
use Jose\Component\KeyManagement\Analyzer\OctAnalyzer;
use Jose\Component\KeyManagement\Analyzer\RsaAnalyzer;
use Jose\Component\KeyManagement\Analyzer\UsageAnalyzer;
use Jose\Component\KeyManagement\Analyzer\ZxcvbnKeyAnalyzer;
use Jose\Component\KeyManagement\JWKFactory;
use PHPUnit\Framework\Attributes\DoesNotPerformAssertions;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;

/**
 * @internal
 */
final class JWKAnalyzerTest extends TestCase
{
    private ?KeyAnalyzerManager $keyAnalyzerManager = null;

    #[Test]
    public function iCanAnalyzeANoneKeyAndGetMessages(): void
    {
        $key = JWKFactory::createNoneKey();
        $messages = $this->getKeyAnalyzer()
            ->analyze($key);

        static::assertNotEmpty($messages);
    }

    #[Test]
    public function iCanAnalyzeAnRsaKeyAndGetMessages(): void
    {
        $key = new JWK([
            'kty' => 'RSA',
            'n' => 'oaAQyGUwgwCfZQym0QQCeCJu6GfApv6nQBKJ3MgzT85kCUO3xDiudiDbJqgqn2ol',
            'e' => 'AQAB',
            'd' => 'asuBS2jRbT50FCkP8PxdRVQ7RIWJ3s5UWAi-c233cQam1kRjGN2QzAv79hrpjLQB',
        ]);
        $messages = $this->getKeyAnalyzer()
            ->analyze($key);

        static::assertNotEmpty($messages);
    }

    #[Test]
    #[DoesNotPerformAssertions]
    public function theRsaKeyHasALowExponent(): void
    {
        $key = JWK::createFromJson(
            '{"kty":"RSA","n":"sv2gihrIZaT4tkxb0B70Aw","e":"Aw","d":"d1PAXBHa7mzdZNOkuSwnSw","p":"4Kz0hhYYddk","q":"y_IaXqREQzs","dp":"lcijBA66-Ts","dq":"h_a8Pxgtgic","qi":"YehXzJzN5bw"}'
        );
        $messages = $this->getKeyAnalyzer()
            ->analyze($key);

        foreach ($messages->all() as $message) {
            if ($message->getMessage() === 'The exponent is too low. It should be at least 65537.') {
                return; // Message found. OK
            }
        }
        static::fail('The low exponent should be catched');
    }

    #[Test]
    public function iCanAnalyzeAnOctKeyAndGetMessages(): void
    {
        $key = JWKFactory::createOctKey(16, [
            'use' => 'foo',
            'key_ops' => 'foo',
        ]);
        $messages = $this->getKeyAnalyzer()
            ->analyze($key);

        static::assertNotEmpty($messages);
    }

    #[Test]
    public function iCanAnalyzeAnES521OctKeyAndGetMessages(): void
    {
        $key = JWKFactory::createECKey('P-521', [
            'kid' => '0123456789',
            'alg' => 'ES521',
            'use' => 'sig',
        ]);
        $messages = $this->getKeyAnalyzer()
            ->analyze($key);
        static::assertEmpty($messages);
    }

    private function getKeyAnalyzer(): KeyAnalyzerManager
    {
        if ($this->keyAnalyzerManager === null) {
            $this->keyAnalyzerManager = new KeyAnalyzerManager();
            $this->keyAnalyzerManager->add(new AlgorithmAnalyzer());
            $this->keyAnalyzerManager->add(new ES256KeyAnalyzer());
            $this->keyAnalyzerManager->add(new ES384KeyAnalyzer());
            $this->keyAnalyzerManager->add(new ES512KeyAnalyzer());
            $this->keyAnalyzerManager->add(new HS256KeyAnalyzer());
            $this->keyAnalyzerManager->add(new HS384KeyAnalyzer());
            $this->keyAnalyzerManager->add(new HS512KeyAnalyzer());
            $this->keyAnalyzerManager->add(new KeyIdentifierAnalyzer());
            $this->keyAnalyzerManager->add(new NoneAnalyzer());
            $this->keyAnalyzerManager->add(new OctAnalyzer());
            $this->keyAnalyzerManager->add(new RsaAnalyzer());
            $this->keyAnalyzerManager->add(new UsageAnalyzer());
            $this->keyAnalyzerManager->add(new ZxcvbnKeyAnalyzer());
        }

        return $this->keyAnalyzerManager;
    }
}

Copyright © 2019 by b0y-101