123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <?php
- namespace Tests\Unit\HttpSignatures;
- use GuzzleHttp\Psr7\Request;
- use App\Util\HttpSignatures\Context;
- class HmacContextTest extends \PHPUnit\Framework\TestCase
- {
- private $context;
- public function setUp()
- {
- $this->noDigestContext = new Context([
- 'keys' => ['pda' => 'secret'],
- 'algorithm' => 'hmac-sha256',
- 'headers' => ['(request-target)', 'date'],
- ]);
- $this->withDigestContext = new Context([
- 'keys' => ['pda' => 'secret'],
- 'algorithm' => 'hmac-sha256',
- 'headers' => ['(request-target)', 'date', 'digest'],
- ]);
- }
- public function testSignerNoDigestAction()
- {
- $message = new Request('GET', '/path?query=123', ['date' => 'today', 'accept' => 'llamas']);
- $message = $this->noDigestContext->signer()->sign($message);
- $expectedString = implode(',', [
- 'keyId="pda"',
- 'algorithm="hmac-sha256"',
- 'headers="(request-target) date"',
- 'signature="SFlytCGpsqb/9qYaKCQklGDvwgmrwfIERFnwt+yqPJw="',
- ]);
- $this->assertEquals(
- $expectedString,
- $message->getHeader('Signature')[0]
- );
- $this->assertEquals(
- 'Signature '.$expectedString,
- $message->getHeader('Authorization')[0]
- );
- }
- public function testSignerAddDigestToHeadersList()
- {
- $message = new Request(
- 'POST', '/path/to/things?query=123',
- ['date' => 'today', 'accept' => 'llamas'],
- 'Thing to POST');
- $message = $this->noDigestContext->signer()->signWithDigest($message);
- $expectedString = implode(',', [
- 'keyId="pda"',
- 'algorithm="hmac-sha256"',
- 'headers="(request-target) date digest"',
- 'signature="HH6R3OJmJbKUFqqL0tGVIIb7xi1WbbSh/HBXHUtLkUs="', ]);
- $expectedDigestHeader =
- 'SHA-256=rEcNhYZoBKiR29D30w1JcgArNlF8rXIXf5MnIL/4kcc=';
- $this->assertEquals(
- $expectedString,
- $message->getHeader('Signature')[0]
- );
- $this->assertEquals(
- $expectedDigestHeader,
- $message->getHeader('Digest')[0]
- );
- $this->assertEquals(
- 'Signature '.$expectedString,
- $message->getHeader('Authorization')[0]
- );
- }
- public function testSignerReplaceDigest()
- {
- $message = new Request(
- 'PUT', '/things/thething?query=123',
- ['date' => 'today',
- 'accept' => 'llamas',
- 'Digest' => 'SHA-256=E/P+4y4x6EySO9qNAjCtQKxVwE1xKsNI/k+cjK+vtLU=', ],
- 'Thing to PUT at /things/thething please...');
- $message = $this->noDigestContext->signer()->signWithDigest($message);
- $expectedString = implode(',', [
- 'keyId="pda"',
- 'algorithm="hmac-sha256"',
- 'headers="(request-target) date digest"',
- 'signature="Hyatt1lSR/4XLI9Gcx8XOEKiG8LVktH7Lfr+0tmhwRU="', ]);
- $expectedDigestHeader =
- 'SHA-256=mulOx+77mQU1EbPET50SCGA4P/4bYxVCJA1pTwJsaMw=';
- $this->assertEquals(
- $expectedString,
- $message->getHeader('Signature')[0]
- );
- $this->assertEquals(
- $expectedDigestHeader,
- $message->getHeader('Digest')[0]
- );
- $this->assertEquals(
- 'Signature '.$expectedString,
- $message->getHeader('Authorization')[0]
- );
- }
- public function testSignerNewDigestIsInHeaderList()
- {
- $message = new Request(
- 'POST', '/path?query=123',
- ['date' => 'today',
- 'accept' => 'llamas', ],
- 'Stuff that belongs in /path');
- $message = $this->withDigestContext->signer()->signWithDigest($message);
- $expectedString = implode(',', [
- 'keyId="pda"',
- 'algorithm="hmac-sha256"',
- 'headers="(request-target) date digest"',
- 'signature="p8gQHs59X2WzQLUecfmxm1YO0OBTCNKldRZZBQsepfk="', ]);
- $expectedDigestHeader =
- 'SHA-256=jnSMEfBSum4Rh2k6/IVFyvLuQLmGYwMAGBS9WybyDqQ=';
- $this->assertEquals(
- $expectedString,
- $message->getHeader('Signature')[0]
- );
- $this->assertEquals(
- $expectedDigestHeader,
- $message->getHeader('Digest')[0]
- );
- $this->assertEquals(
- 'Signature '.$expectedString,
- $message->getHeader('Authorization')[0]
- );
- }
- public function testSignerNewDigestWithoutBody()
- {
- $message = new Request(
- 'GET', '/path?query=123',
- ['date' => 'today',
- 'accept' => 'llamas', ]);
- $message = $this->withDigestContext->signer()->signWithDigest($message);
- $expectedString = implode(',', [
- 'keyId="pda"',
- 'algorithm="hmac-sha256"',
- 'headers="(request-target) date digest"',
- 'signature="7iFqqryI6I9opV/Zp3eEg6PDY1tKw/3GqioOM7ACHHA="', ]);
- $zeroLengthStringDigest =
- 'SHA-256=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=';
- $this->assertEquals(
- $expectedString,
- $message->getHeader('Signature')[0]
- );
- $this->assertEquals(
- $zeroLengthStringDigest,
- $message->getHeader('Digest')[0]
- );
- $this->assertEquals(
- 'Signature '.$expectedString,
- $message->getHeader('Authorization')[0]
- );
- }
- public function testVerifier()
- {
- $message = $this->noDigestContext->signer()->sign(new Request('GET', '/path?query=123', [
- 'Signature' => 'keyId="pda",algorithm="hmac-sha1",headers="date",signature="x"',
- 'Date' => 'x',
- ]));
- // assert it works without errors; correctness of results tested elsewhere.
- $this->assertTrue(is_bool($this->noDigestContext->verifier()->isValid($message)));
- }
- }
|