RsaContextTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace Tests\Unit\HttpSignatures;
  3. use GuzzleHttp\Psr7\Request;
  4. use App\Util\HttpSignatures\Context;
  5. use Tests\Unit\HttpSignatures\TestKeys;
  6. class RsaContextTest extends \PHPUnit\Framework\TestCase
  7. {
  8. private $context;
  9. public function setUp()
  10. {
  11. $this->sha1context = new Context([
  12. 'keys' => ['rsa1' => TestKeys::rsaPrivateKey],
  13. 'algorithm' => 'rsa-sha1',
  14. 'headers' => ['(request-target)', 'date'],
  15. ]);
  16. $this->sha256context = new Context([
  17. 'keys' => ['rsa1' => TestKeys::rsaPrivateKey],
  18. 'algorithm' => 'rsa-sha256',
  19. 'headers' => ['(request-target)', 'date'],
  20. ]);
  21. }
  22. public function testSha1Signer()
  23. {
  24. $message = new Request('GET', '/path?query=123', ['date' => 'today', 'accept' => 'llamas']);
  25. $message = $this->sha1context->signer()->sign($message);
  26. $expectedSha1String = implode(',', [
  27. 'keyId="rsa1"',
  28. 'algorithm="rsa-sha1"',
  29. 'headers="(request-target) date"',
  30. 'signature="YIR3DteE3Jmz1VAnUMTgjTn3vTKfQuZl1CJhMBvGOZpnzwKeYBXA'.
  31. 'H108FojnbSeVG/AXq9pcrA6AFK0peg0aueqxpaFlo+4L/q5XzJ+QoryY3dlSr'.
  32. 'xwVnE5s5M19xmFm/6YkZR/KPeANCsG4SPL82Um/PCEMU0tmKd6sSx+IIzAYbX'.
  33. 'G/VrFMDeQAdXqpU1EhgxopKEAapN8rChb49+1JfR/RxlSKiLukJJ6auurm2zM'.
  34. 'n2D40fR1d2umA5LAO7vRt2iQwVbtwiFkVlRqkMvGftCNZByu8jJ6StI5H7Efu'.
  35. 'ANSHAZXKXWNH8yxpBUW/QCHCZjPd0ugM0QJJIc7i8JbGlA=="',
  36. ]);
  37. $this->assertEquals(
  38. $expectedSha1String,
  39. $message->getHeader('Signature')[0]
  40. );
  41. }
  42. public function testSha256Signer()
  43. {
  44. $message = new Request('GET', '/path?query=123', ['date' => 'today', 'accept' => 'llamas']);
  45. $message = $this->sha256context->signer()->sign($message);
  46. $expectedSha256String = implode(',', [
  47. 'keyId="rsa1"',
  48. 'algorithm="rsa-sha256"',
  49. 'headers="(request-target) date"',
  50. 'signature="WGIegQCC3GEwxbkuXtq67CAqeDhkwblxAH2uoDx5kfWurhLRA5WB'.
  51. 'FDA/aktsZAjuUoimG1w4CGxSecziER1ez44PBlHP2fCW4ArLgnQgcjkdN2cOf/g'.
  52. 'j0OVL8s2usG4o4tud/+jjF3nxTxLl3HC+erBKsJakwXbw9kt4Cr028BToVfNXsW'.
  53. 'oMFpv0IjcgBH2V41AVlX/mYBMMJAihBCIcpgAcGrrxmG2gkfvSn09wtTttkGHft'.
  54. 'PIp3VpB53zbemlJS9Yw3tmmHr6cvWSXqQy/bTsEOoQJ2REfn5eiyzsJu3GiOpiI'.
  55. 'LK67i/WH9moltJtlfV57TV72cgYtjWa6yqhtFg=="',
  56. ]);
  57. $this->assertEquals(
  58. $expectedSha256String,
  59. $message->getHeader('Signature')[0]
  60. );
  61. }
  62. /**
  63. * @expectedException App\Util\HttpSignatures\AlgorithmException
  64. */
  65. public function testRsaBadalgorithm()
  66. {
  67. $sha224context = new Context([
  68. 'keys' => ['rsa1' => TestKeys::rsaPrivateKey],
  69. 'algorithm' => 'rsa-sha224',
  70. 'headers' => ['(request-target)', 'date'],
  71. ]);
  72. }
  73. }