im/vendor/qeq66/jwt/test/unit/Signer/EcdsaTest.php

118 lines
3.2 KiB
PHP
Executable File

<?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']
)
);
}
}