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.
 

45 lines
1.4 KiB

<?php
namespace p3k\WebSub\Tests;
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\Attributes\DataProvider;
use p3k\WebSub\Client;
class VerifySignatureTest extends TestCase {
public static function signatureAlgorithms() {
return [['sha1'], ['sha256'], ['sha384'], ['sha512']];
}
/**
* @dataProvider signatureAlgorithms
*/
#[DataProvider('signatureAlgorithms')]
public function testAcceptsValidSignature($alg) {
$body = '{"hello":"world"}';
$header = $alg.'='.hash_hmac($alg, $body, 's3cret');
$this->assertTrue(Client::verify_signature($body, $header, 's3cret'));
}
public function testRejectsWrongSecret() {
$body = '{"hello":"world"}';
$header = 'sha256='.hash_hmac('sha256', $body, 's3cret');
$this->assertFalse(Client::verify_signature($body, $header, 'wrong'));
}
public function testRejectsModifiedBody() {
$header = 'sha256='.hash_hmac('sha256', 'original', 's3cret');
$this->assertFalse(Client::verify_signature('modified', $header, 's3cret'));
}
public function testRejectsMissingOrMalformedHeader() {
$this->assertFalse(Client::verify_signature('body', null, 's3cret'));
$this->assertFalse(Client::verify_signature('body', '', 's3cret'));
$this->assertFalse(Client::verify_signature('body', 'md5=abc', 's3cret'));
$this->assertFalse(Client::verify_signature('body', ['sha256=abc'], 's3cret'));
}
}