SimpleJWSTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace Namshi\JOSE\Test;
  3. use DateTime;
  4. use Namshi\JOSE\SimpleJWS;
  5. use PHPUnit_Framework_TestCase as TestCase;
  6. class SimpleJWSTest extends TestCase
  7. {
  8. const SSL_KEY_PASSPHRASE = 'tests';
  9. public function setup()
  10. {
  11. $date = new DateTime('tomorrow');
  12. $data = array(
  13. 'a' => 'b',
  14. 'exp' => $date->format('U'),
  15. );
  16. $this->jws = new SimpleJWS(array('alg' => 'RS256'));
  17. $this->jws->setPayload($data);
  18. }
  19. public function testConstruction()
  20. {
  21. $this->assertSame($this->jws->getHeader(), array('alg' => 'RS256', 'typ' => 'JWS'));
  22. $this->assertTrue(is_int($this->jws->getPayload()['iat']), 'iat property should be integer value (from construction)');
  23. }
  24. public function testValidationOfAValidSimpleJWS()
  25. {
  26. $privateKey = openssl_pkey_get_private(SSL_KEYS_PATH.'private.key', self::SSL_KEY_PASSPHRASE);
  27. $this->jws->sign($privateKey);
  28. $jws = SimpleJWS::load($this->jws->getTokenString());
  29. $public_key = openssl_pkey_get_public(SSL_KEYS_PATH.'public.key');
  30. $this->assertTrue($jws->isValid($public_key, 'RS256'));
  31. }
  32. public function testValidationOfInvalidSimpleJWS()
  33. {
  34. $date = new DateTime('yesterday');
  35. $this->jws->setPayload(array(
  36. 'exp' => $date->format('U'),
  37. ));
  38. $privateKey = openssl_pkey_get_private(SSL_KEYS_PATH.'private.key', self::SSL_KEY_PASSPHRASE);
  39. $this->jws->sign($privateKey);
  40. $jws = SimpleJWS::load($this->jws->getTokenString());
  41. $public_key = openssl_pkey_get_public(SSL_KEYS_PATH.'public.key');
  42. $this->assertFalse($jws->isValid($public_key, 'RS256'));
  43. }
  44. public function testValidationOfValidSimpleJWSWithStringIat()
  45. {
  46. $date = new DateTime('tomorrow');
  47. $data = array(
  48. 'a' => 'b',
  49. 'exp' => $date->format('U'),
  50. 'iat' => time()
  51. );
  52. $this->jws->setPayload($data);
  53. $privateKey = openssl_pkey_get_private(SSL_KEYS_PATH.'private.key', self::SSL_KEY_PASSPHRASE);
  54. $this->jws->sign($privateKey);
  55. $jws = SimpleJWS::load($this->jws->getTokenString());
  56. $public_key = openssl_pkey_get_public(SSL_KEYS_PATH.'public.key');
  57. $this->assertTrue($jws->isValid($public_key, 'RS256'));
  58. }
  59. public function testValidationOfValidSimpleJWSWithExpAsInt()
  60. {
  61. $date = new DateTime('tomorrow');
  62. $data = array(
  63. 'a' => 'b',
  64. 'exp' => $date->getTimestamp(),
  65. 'iat' => time()
  66. );
  67. $this->jws->setPayload($data);
  68. $privateKey = openssl_pkey_get_private(SSL_KEYS_PATH.'private.key', self::SSL_KEY_PASSPHRASE);
  69. $this->jws->sign($privateKey);
  70. $jws = SimpleJWS::load($this->jws->getTokenString());
  71. $public_key = openssl_pkey_get_public(SSL_KEYS_PATH.'public.key');
  72. $this->assertTrue($jws->isValid($public_key, 'RS256'));
  73. }
  74. public function testValidationOfInvalidSimpleJWSWithExpAsInt()
  75. {
  76. $date = new DateTime('yesterday');
  77. $data = array(
  78. 'a' => 'b',
  79. 'exp' => $date->getTimestamp(),
  80. 'iat' => time()
  81. );
  82. $this->jws->setPayload($data);
  83. $privateKey = openssl_pkey_get_private(SSL_KEYS_PATH.'private.key', self::SSL_KEY_PASSPHRASE);
  84. $this->jws->sign($privateKey);
  85. $jws = SimpleJWS::load($this->jws->getTokenString());
  86. $public_key = openssl_pkey_get_public(SSL_KEYS_PATH.'public.key');
  87. $this->assertFalse($jws->isValid($public_key, 'RS256'));
  88. }
  89. }