ldc-legaulois/tests/Unit/Lib/Axepta/AxeptaSignatureVerifierTest.php

79 lines
2.9 KiB
PHP
Raw Permalink Normal View History

<?php
declare(strict_types=1);
2026-09-23 15:55:34 +02:00
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
{
2026-09-25 16:25:31 +02:00
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, []);
2026-09-25 16:25:31 +02:00
$logger = $this->createMock(LoggerInterface::class);
$verifier = new AxeptaSignatureVerifier($config, $logger);
2026-09-25 16:25:31 +02:00
$timestamp = '1782229303';
$signatureHeader = 'v1=3E954907AB5C373D2D98AD3F702CD63819B9735C1C98D23058050FEDE6FA6844';
$base64Payload = 'eyJtZXJjaGFudElkIjogIkJOUF9ERU1PX01JRCIsInBheUlkIjogImEyZTZiMTg5NmUwMzRkNDhhYzU0MDhjYjAzZmE2OWY0IiwidHJhbnNJZCI6ICJRN31DbEouVm8lR1ZBY3dOR0wlKWZQKylJdSVoNX1mNik4fCNnQ2dBRUoyNFF2RjZfWSNeaUo6diZsdDt0PVBBY2Y9IiwieGlkIjogImMyZGM1MzliMjVkNzRhYjRhYzk3NzA0MmE3MjkyNWQxIiwicmVmTnIiOiAiNmpveWEwR1JtMnAyIiwic3RhdHVzIjogIkZBSUxFRCIsInJlc3BvbnNlQ29kZSI6ICIyMDE0MDAwMiIsInJlc3BvbnNlRGVzY3JpcHRpb24iOiAiUGFyYW0gdG9vIGxvbmc6IHRyYW5zaWQiLCJhbW91bnQiOiB7InZhbHVlIjogNDAwLCJjdXJyZW5jeSI6ICJFVVIifSwicGF5bWVudE1ldGhvZHMiOiB7InR5cGUiOiAiQ0FSRCJ9LCJjcmVhdGlvbkRhdGUiOiAiMjAyNi0wNi0yM1QxNTo0MTo0M1oiLCJjaGFubmVsIjogIkVDT00ifQ==';
2026-09-25 16:25:31 +02:00
$rawPayload = base64_decode($base64Payload);
Carbon::setTestNow(Carbon::createFromTimestampUTC((int) $timestamp));
// WHEN
$isValid = $verifier->verify('v1', $signatureHeader, $timestamp, $rawPayload);
// THEN
$this->assertTrue($isValid);
Carbon::setTestNow();
}
2026-09-25 16:25:31 +02:00
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, []);
2026-09-25 16:25:31 +02:00
$logger = $this->createMock(LoggerInterface::class);
$verifier = new AxeptaSignatureVerifier($config, $logger);
// NOTE: 10 Minutes later
Carbon::setTestNow(Carbon::createFromTimestampUTC(1782222184 + 600));
$timestamp = '1782222184';
2026-09-25 16:25:31 +02:00
$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();
}
2026-09-25 16:25:31 +02:00
public function test_cannot_verify_invalid_version(): void
{
// GIVEN
2026-09-25 16:25:31 +02:00
$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);
}
}