78 lines
2.9 KiB
PHP
78 lines
2.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Lib\Axepta;
|
|
|
|
use App\Lib\Axepta\AxeptaConfig;
|
|
use App\Lib\Axepta\AxeptaSignatureVerifier;
|
|
use Carbon\Carbon;
|
|
use Psr\Log\LoggerInterface;
|
|
use Tests\TestCase;
|
|
|
|
class AxeptaSignatureVerifierTest extends TestCase
|
|
{
|
|
public function test_can_verify_real_axepta_signature_from_base64_payload(): void
|
|
{
|
|
// GIVEN
|
|
$secret = '6Gp_A!8f)3zZ9K]gb7S?2*tN(yH54[wB';
|
|
$config = new AxeptaConfig('url', 'm_id', 'key', $secret, []);
|
|
|
|
$logger = $this->createMock(LoggerInterface::class);
|
|
$verifier = new AxeptaSignatureVerifier($config, $logger);
|
|
|
|
$timestamp = '1782229303';
|
|
$signatureHeader = 'v1=3E954907AB5C373D2D98AD3F702CD63819B9735C1C98D23058050FEDE6FA6844';
|
|
|
|
$base64Payload = 'eyJtZXJjaGFudElkIjogIkJOUF9ERU1PX01JRCIsInBheUlkIjogImEyZTZiMTg5NmUwMzRkNDhhYzU0MDhjYjAzZmE2OWY0IiwidHJhbnNJZCI6ICJRN31DbEouVm8lR1ZBY3dOR0wlKWZQKylJdSVoNX1mNik4fCNnQ2dBRUoyNFF2RjZfWSNeaUo6diZsdDt0PVBBY2Y9IiwieGlkIjogImMyZGM1MzliMjVkNzRhYjRhYzk3NzA0MmE3MjkyNWQxIiwicmVmTnIiOiAiNmpveWEwR1JtMnAyIiwic3RhdHVzIjogIkZBSUxFRCIsInJlc3BvbnNlQ29kZSI6ICIyMDE0MDAwMiIsInJlc3BvbnNlRGVzY3JpcHRpb24iOiAiUGFyYW0gdG9vIGxvbmc6IHRyYW5zaWQiLCJhbW91bnQiOiB7InZhbHVlIjogNDAwLCJjdXJyZW5jeSI6ICJFVVIifSwicGF5bWVudE1ldGhvZHMiOiB7InR5cGUiOiAiQ0FSRCJ9LCJjcmVhdGlvbkRhdGUiOiAiMjAyNi0wNi0yM1QxNTo0MTo0M1oiLCJjaGFubmVsIjogIkVDT00ifQ==';
|
|
$rawPayload = base64_decode($base64Payload);
|
|
|
|
Carbon::setTestNow(Carbon::createFromTimestampUTC((int) $timestamp));
|
|
|
|
// WHEN
|
|
$isValid = $verifier->verify('v1', $signatureHeader, $timestamp, $rawPayload);
|
|
|
|
// THEN
|
|
$this->assertTrue($isValid);
|
|
|
|
Carbon::setTestNow();
|
|
}
|
|
|
|
public function test_cannot_verify_with_expired_timestamp(): void
|
|
{
|
|
// GIVEN
|
|
$secret = '6Gp_A!8f)3zZ9K]gb7S?2*tN(yH54[wB';
|
|
$config = new AxeptaConfig('url', 'm_id', 'key', $secret, []);
|
|
|
|
$logger = $this->createMock(LoggerInterface::class);
|
|
$verifier = new AxeptaSignatureVerifier($config, $logger);
|
|
|
|
// NOTE: 10 Minutes later
|
|
Carbon::setTestNow(Carbon::createFromTimestampUTC(1782222184 + 600));
|
|
$timestamp = '1782222184';
|
|
$payload = '{"status":"ok"}';
|
|
|
|
$validHash = hash_hmac('sha256', "{$timestamp}.{$payload}", $secret);
|
|
|
|
// WHEN
|
|
$isValid = $verifier->verify('v1', "v1={$validHash}", $timestamp, $payload);
|
|
|
|
// THEN
|
|
$this->assertFalse($isValid);
|
|
|
|
Carbon::setTestNow();
|
|
}
|
|
|
|
public function test_cannot_verify_invalid_version(): void
|
|
{
|
|
// GIVEN
|
|
$config = new AxeptaConfig('url', 'm_id', 'key', 'secret', []);
|
|
$verifier = new AxeptaSignatureVerifier($config, $this->createMock(LoggerInterface::class));
|
|
|
|
// WHEN
|
|
$isValid = $verifier->verify('v2', 'v1=hash', '123', '{}');
|
|
|
|
// THEN
|
|
$this->assertFalse($isValid);
|
|
}
|
|
}
|