radarrplexorganizrnginxsonarrdashboardembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdall
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							117 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							117 lines
						
					
					
						
							3.2 KiB
						
					
					
				
								<?php
							 | 
						|
								/**
							 | 
						|
								 * This file is part of Lcobucci\JWT, a simple library to handle JWT and JWS
							 | 
						|
								 *
							 | 
						|
								 * @license http://opensource.org/licenses/BSD-3-Clause BSD-3-Clause
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								namespace Lcobucci\JWT\Signer;
							 | 
						|
								
							 | 
						|
								use Lcobucci\JWT\Keys;
							 | 
						|
								use Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter;
							 | 
						|
								use const OPENSSL_ALGO_SHA256;
							 | 
						|
								use function openssl_pkey_get_private;
							 | 
						|
								use function openssl_pkey_get_public;
							 | 
						|
								use function openssl_sign;
							 | 
						|
								use function openssl_verify;
							 | 
						|
								
							 | 
						|
								class EcdsaTest extends \PHPUnit\Framework\TestCase
							 | 
						|
								{
							 | 
						|
								    use Keys;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @var MultibyteStringConverter
							 | 
						|
								     */
							 | 
						|
								    private $pointsManipulator;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @before
							 | 
						|
								     */
							 | 
						|
								    public function createDependencies()
							 | 
						|
								    {
							 | 
						|
								        $this->pointsManipulator = new MultibyteStringConverter();
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    private function getSigner()
							 | 
						|
								    {
							 | 
						|
								        $signer = $this->getMockForAbstractClass(Ecdsa::class, [$this->pointsManipulator]);
							 | 
						|
								
							 | 
						|
								        $signer->method('getAlgorithm')
							 | 
						|
								            ->willReturn(OPENSSL_ALGO_SHA256);
							 | 
						|
								
							 | 
						|
								        $signer->method('getAlgorithmId')
							 | 
						|
								            ->willReturn('ES256');
							 | 
						|
								
							 | 
						|
								        $signer->method('getKeyLength')
							 | 
						|
								            ->willReturn(64);
							 | 
						|
								
							 | 
						|
								        return $signer;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\Ecdsa::createHash
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\Ecdsa::getKeyType
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\OpenSSL
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\BaseSigner
							 | 
						|
								     *
							 | 
						|
								     * @uses \Lcobucci\JWT\Signer\Ecdsa::__construct
							 | 
						|
								     * @uses \Lcobucci\JWT\Signer\Key
							 | 
						|
								     * @uses \Lcobucci\JWT\Signature
							 | 
						|
								     */
							 | 
						|
								    public function createHashShouldReturnTheAHashBasedOnTheOpenSslSignature()
							 | 
						|
								    {
							 | 
						|
								        $payload = 'testing';
							 | 
						|
								
							 | 
						|
								        $signer    = $this->getSigner();
							 | 
						|
								        $signature = $signer->sign($payload, self::$ecdsaKeys['private']);
							 | 
						|
								
							 | 
						|
								        $publicKey = openssl_pkey_get_public(self::$ecdsaKeys['public1']->getContent());
							 | 
						|
								
							 | 
						|
								        self::assertInternalType('resource', $publicKey);
							 | 
						|
								        self::assertSame(
							 | 
						|
								            1,
							 | 
						|
								            openssl_verify(
							 | 
						|
								                $payload,
							 | 
						|
								                $this->pointsManipulator->toAsn1($signature, $signer->getKeyLength()),
							 | 
						|
								                $publicKey,
							 | 
						|
								                OPENSSL_ALGO_SHA256
							 | 
						|
								            )
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\Ecdsa::doVerify
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\Ecdsa::getKeyType
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\OpenSSL
							 | 
						|
								     * @covers \Lcobucci\JWT\Signer\BaseSigner
							 | 
						|
								     *
							 | 
						|
								     * @uses \Lcobucci\JWT\Signer\Ecdsa::__construct
							 | 
						|
								     * @uses \Lcobucci\JWT\Signer\Key
							 | 
						|
								     */
							 | 
						|
								    public function doVerifyShouldDelegateToEcdsaSignerUsingPublicKey()
							 | 
						|
								    {
							 | 
						|
								        $payload    = 'testing';
							 | 
						|
								        $privateKey = openssl_pkey_get_private(self::$ecdsaKeys['private']->getContent());
							 | 
						|
								
							 | 
						|
								        self::assertInternalType('resource', $privateKey);
							 | 
						|
								
							 | 
						|
								        $signature = '';
							 | 
						|
								        openssl_sign($payload, $signature, $privateKey, OPENSSL_ALGO_SHA256);
							 | 
						|
								
							 | 
						|
								        $signer = $this->getSigner();
							 | 
						|
								
							 | 
						|
								        self::assertTrue(
							 | 
						|
								            $signer->verify(
							 | 
						|
								                $this->pointsManipulator->fromAsn1($signature, $signer->getKeyLength()),
							 | 
						|
								                $payload,
							 | 
						|
								                self::$ecdsaKeys['public1']
							 | 
						|
								            )
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |