added new composer libraries
This commit is contained in:
4
.env
4
.env
@@ -10,8 +10,8 @@ DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=w4rpservices2
|
||||
DB_USERNAME=minerva
|
||||
DB_PASSWORD=strtmage
|
||||
DB_USERNAME=w4rpservices
|
||||
DB_PASSWORD=FuckingShit12
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
|
||||
@@ -18,7 +18,11 @@
|
||||
"laravelcollective/html": "^6.0",
|
||||
"predis/predis": "^1.1",
|
||||
"spatie/laravel-rate-limited-job-middleware": "^1.5",
|
||||
"twbs/bootstrap": "^4.5"
|
||||
"twbs/bootstrap": "^4.5",
|
||||
"web-token/jwt-easy": "^2.2",
|
||||
"web-token/jwt-signature-algorithm-ecdsa": "^2.2",
|
||||
"web-token/jwt-signature-algorithm-hmac": "^2.2",
|
||||
"web-token/jwt-signature-algorithm-rsa": "^2.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"beyondcode/laravel-dump-server": "^1.0",
|
||||
|
||||
101
composer.lock
generated
101
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "ea02a28c4e0e5b626127a2be8c62c3d9",
|
||||
"content-hash": "351c6a21f60967e95e902b9f70f8ed7b",
|
||||
"packages": [
|
||||
{
|
||||
"name": "brick/math",
|
||||
@@ -5392,16 +5392,16 @@
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-easy",
|
||||
"version": "v2.2.6",
|
||||
"version": "v2.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/web-token/jwt-easy.git",
|
||||
"reference": "cc59f479dd6b5014586be5d2d40ce84bbd9b4539"
|
||||
"reference": "b4d1a4581a796244fdd69694548766403daeca97"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-easy/zipball/cc59f479dd6b5014586be5d2d40ce84bbd9b4539",
|
||||
"reference": "cc59f479dd6b5014586be5d2d40ce84bbd9b4539",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-easy/zipball/b4d1a4581a796244fdd69694548766403daeca97",
|
||||
"reference": "b4d1a4581a796244fdd69694548766403daeca97",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5409,9 +5409,6 @@
|
||||
"web-token/jwt-encryption": "^2.1",
|
||||
"web-token/jwt-signature": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"suggest": {
|
||||
"web-token/jwt-encryption-algorithm-aescbc": "Adds AES-CBC based encryption algorithms",
|
||||
"web-token/jwt-encryption-algorithm-aesgcm": "Adds AES-GCM based encryption algorithms",
|
||||
@@ -5428,15 +5425,6 @@
|
||||
"web-token/jwt-signature-algorithm-rsa": "Adds RSA based signature algorithms"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Jose\\Easy\\": ""
|
||||
@@ -5477,7 +5465,7 @@
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/web-token/jwt-easy/tree/v2.2.6"
|
||||
"source": "https://github.com/web-token/jwt-easy/tree/v2.2.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5485,7 +5473,7 @@
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2020-12-07T21:10:31+00:00"
|
||||
"time": "2021-01-21T19:18:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-encryption",
|
||||
@@ -5670,36 +5658,23 @@
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-signature-algorithm-ecdsa",
|
||||
"version": "v2.2.6",
|
||||
"version": "v2.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/web-token/jwt-signature-algorithm-ecdsa.git",
|
||||
"reference": "3ae6e56ccf34e8b7b65ec988497d5d1bceca9864"
|
||||
"reference": "44cbbb4374c51f1cf48b82ae761efbf24e1a8591"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-ecdsa/zipball/3ae6e56ccf34e8b7b65ec988497d5d1bceca9864",
|
||||
"reference": "3ae6e56ccf34e8b7b65ec988497d5d1bceca9864",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-ecdsa/zipball/44cbbb4374c51f1cf48b82ae761efbf24e1a8591",
|
||||
"reference": "44cbbb4374c51f1cf48b82ae761efbf24e1a8591",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-openssl": "*",
|
||||
"web-token/jwt-signature": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Jose\\Component\\Signature\\Algorithm\\": ""
|
||||
@@ -5740,7 +5715,7 @@
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-ecdsa/tree/v2.2"
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-ecdsa/tree/v2.2.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5748,39 +5723,26 @@
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2020-08-22T13:17:25+00:00"
|
||||
"time": "2021-01-21T19:18:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-signature-algorithm-hmac",
|
||||
"version": "v2.2.6",
|
||||
"version": "v2.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/web-token/jwt-signature-algorithm-hmac.git",
|
||||
"reference": "f4fd8166e6830298fc820a8d5776c124cc2496c4"
|
||||
"reference": "d208b1c50b408fa711bfeedeed9fb5d9be1d3080"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-hmac/zipball/f4fd8166e6830298fc820a8d5776c124cc2496c4",
|
||||
"reference": "f4fd8166e6830298fc820a8d5776c124cc2496c4",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-hmac/zipball/d208b1c50b408fa711bfeedeed9fb5d9be1d3080",
|
||||
"reference": "d208b1c50b408fa711bfeedeed9fb5d9be1d3080",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"web-token/jwt-signature": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Jose\\Component\\Signature\\Algorithm\\": ""
|
||||
@@ -5821,7 +5783,7 @@
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-hmac/tree/v2.2.2"
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-hmac/tree/v2.2.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5829,20 +5791,20 @@
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2020-08-01T11:48:26+00:00"
|
||||
"time": "2021-01-21T19:18:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-signature-algorithm-rsa",
|
||||
"version": "v2.2.6",
|
||||
"version": "v2.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/web-token/jwt-signature-algorithm-rsa.git",
|
||||
"reference": "ba94b8868bd8fdd481f448097ab900a8cb2c0eed"
|
||||
"reference": "513ad90eb5ef1886ff176727a769bda4618141b0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-rsa/zipball/ba94b8868bd8fdd481f448097ab900a8cb2c0eed",
|
||||
"reference": "ba94b8868bd8fdd481f448097ab900a8cb2c0eed",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-rsa/zipball/513ad90eb5ef1886ff176727a769bda4618141b0",
|
||||
"reference": "513ad90eb5ef1886ff176727a769bda4618141b0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5850,24 +5812,11 @@
|
||||
"ext-openssl": "*",
|
||||
"web-token/jwt-signature": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-bcmath": "GMP or BCMath is highly recommended to improve the library performance",
|
||||
"ext-gmp": "GMP or BCMath is highly recommended to improve the library performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Jose\\Component\\Signature\\Algorithm\\": ""
|
||||
@@ -5908,7 +5857,7 @@
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-rsa/tree/v2.2"
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-rsa/tree/v2.2.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5916,7 +5865,7 @@
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2020-08-22T13:37:56+00:00"
|
||||
"time": "2021-01-21T19:18:03+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
|
||||
10
public/vendor/horizon/app-dark.css
vendored
10
public/vendor/horizon/app-dark.css
vendored
File diff suppressed because one or more lines are too long
10
public/vendor/horizon/app.css
vendored
10
public/vendor/horizon/app.css
vendored
File diff suppressed because one or more lines are too long
3
public/vendor/horizon/app.js
vendored
3
public/vendor/horizon/app.js
vendored
File diff suppressed because one or more lines are too long
6
public/vendor/horizon/mix-manifest.json
vendored
6
public/vendor/horizon/mix-manifest.json
vendored
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"/app.js": "/app.js?id=216ac977397857c5c8db",
|
||||
"/app.css": "/app.css?id=cefed9132a927b70fdd6",
|
||||
"/app-dark.css": "/app-dark.css?id=596688837e7ffbb58e37"
|
||||
"/app.js": "/app.js?id=a2e36b7a4f248973b22b",
|
||||
"/app.css": "/app.css?id=9ce01eaaba790566b895",
|
||||
"/app-dark.css": "/app-dark.css?id=821c845f9bf3b7853c33"
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
28
vendor/composer/InstalledVersions.php
vendored
28
vendor/composer/InstalledVersions.php
vendored
@@ -29,7 +29,7 @@ private static $installed = array (
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'df510b86806490c95eaa14064e89e5968cc541e0',
|
||||
'reference' => '0a11a5d23d14c0dbc4537b5219a99b5ffa1a03fd',
|
||||
'name' => 'laravel/laravel',
|
||||
),
|
||||
'versions' =>
|
||||
@@ -463,7 +463,7 @@ private static $installed = array (
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'df510b86806490c95eaa14064e89e5968cc541e0',
|
||||
'reference' => '0a11a5d23d14c0dbc4537b5219a99b5ffa1a03fd',
|
||||
),
|
||||
'laravel/socialite' =>
|
||||
array (
|
||||
@@ -1284,12 +1284,12 @@ private static $installed = array (
|
||||
),
|
||||
'web-token/jwt-easy' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'pretty_version' => 'v2.2.8',
|
||||
'version' => '2.2.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cc59f479dd6b5014586be5d2d40ce84bbd9b4539',
|
||||
'reference' => 'b4d1a4581a796244fdd69694548766403daeca97',
|
||||
),
|
||||
'web-token/jwt-encryption' =>
|
||||
array (
|
||||
@@ -1311,30 +1311,30 @@ private static $installed = array (
|
||||
),
|
||||
'web-token/jwt-signature-algorithm-ecdsa' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'pretty_version' => 'v2.2.8',
|
||||
'version' => '2.2.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3ae6e56ccf34e8b7b65ec988497d5d1bceca9864',
|
||||
'reference' => '44cbbb4374c51f1cf48b82ae761efbf24e1a8591',
|
||||
),
|
||||
'web-token/jwt-signature-algorithm-hmac' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'pretty_version' => 'v2.2.8',
|
||||
'version' => '2.2.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f4fd8166e6830298fc820a8d5776c124cc2496c4',
|
||||
'reference' => 'd208b1c50b408fa711bfeedeed9fb5d9be1d3080',
|
||||
),
|
||||
'web-token/jwt-signature-algorithm-rsa' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'pretty_version' => 'v2.2.8',
|
||||
'version' => '2.2.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'ba94b8868bd8fdd481f448097ab900a8cb2c0eed',
|
||||
'reference' => '513ad90eb5ef1886ff176727a769bda4618141b0',
|
||||
),
|
||||
'webmozart/assert' =>
|
||||
array (
|
||||
|
||||
16
vendor/composer/autoload_classmap.php
vendored
16
vendor/composer/autoload_classmap.php
vendored
@@ -43,6 +43,8 @@ return array(
|
||||
'App\\Http\\Controllers\\Logistics\\FuelController' => $baseDir . '/app/Http/Controllers/Logistics/FuelController.php',
|
||||
'App\\Http\\Controllers\\Logistics\\StructureRequestAdminController' => $baseDir . '/app/Http/Controllers/Logistics/StructureRequestAdminController.php',
|
||||
'App\\Http\\Controllers\\Logistics\\StructureRequestController' => $baseDir . '/app/Http/Controllers/Logistics/StructureRequestController.php',
|
||||
'App\\Http\\Controllers\\MiningTaxes\\MiningTaxesAdminController' => $baseDir . '/app/Http/Controllers/MiningTaxes/MiningTaxesAdminController.php',
|
||||
'App\\Http\\Controllers\\MiningTaxes\\MiningTaxesController' => $baseDir . '/app/Http/Controllers/MiningTaxes/MiningTaxesController.php',
|
||||
'App\\Http\\Controllers\\Moons\\MoonLedgerController' => $baseDir . '/app/Http/Controllers/Moons/MoonLedgerController.php',
|
||||
'App\\Http\\Controllers\\Moons\\MoonsAdminController' => $baseDir . '/app/Http/Controllers/Moons/MoonsAdminController.php',
|
||||
'App\\Http\\Controllers\\Moons\\MoonsController' => $baseDir . '/app/Http/Controllers/Moons/MoonsController.php',
|
||||
@@ -67,6 +69,7 @@ return array(
|
||||
'App\\Jobs\\Commands\\Finances\\ProcessWalletJournalJob' => $baseDir . '/app/Jobs/Commands/Finances/ProcessWalletJournalJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\CalculateMiningTaxesJob' => $baseDir . '/app/Jobs/Commands/MiningTaxes/CalculateMiningTaxesJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\CreateMiningTaxesInvoiceJob' => $baseDir . '/app/Jobs/Commands/MiningTaxes/CreateMiningTaxesInvoiceJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\FetchMiningTaxesLedgersJob' => $baseDir . '/app/Jobs/Commands/MiningTaxes/FetchMiningTaxesLedgersJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\FetchMiningTaxesObserversJob' => $baseDir . '/app/Jobs/Commands/MiningTaxes/FetchMiningTaxesObserversJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\MailMiningTaxesInvoiceJob' => $baseDir . '/app/Jobs/Commands/MiningTaxes/MailMiningTaxesInvoiceJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\ProcessMiningTaxesPaymentsJob' => $baseDir . '/app/Jobs/Commands/MiningTaxes/ProcessMiningTaxesPaymentsJob.php',
|
||||
@@ -2133,15 +2136,6 @@ return array(
|
||||
'Jose\\Component\\Signature\\Algorithm\\RSAPKCS1' => $vendorDir . '/web-token/jwt-signature-algorithm-rsa/RSAPKCS1.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\RSAPSS' => $vendorDir . '/web-token/jwt-signature-algorithm-rsa/RSAPSS.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\SignatureAlgorithm' => $vendorDir . '/web-token/jwt-signature/Algorithm/SignatureAlgorithm.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\ECDSAFromRFC6979Test' => $vendorDir . '/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSAFromRFC6979Test.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\ECDSAFromRFC7520Test' => $vendorDir . '/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSAFromRFC7520Test.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\ECDSASignatureTest' => $vendorDir . '/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSASignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\HMACFromRFC7520Test' => $vendorDir . '/web-token/jwt-signature-algorithm-hmac/Tests/HMACFromRFC7520Test.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\HMACSignatureTest' => $vendorDir . '/web-token/jwt-signature-algorithm-hmac/Tests/HMACSignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\RSA15SignatureTest' => $vendorDir . '/web-token/jwt-signature-algorithm-rsa/Tests/RSA15SignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\RSAKeyWithoutAllPrimesTest' => $vendorDir . '/web-token/jwt-signature-algorithm-rsa/Tests/RSAKeyWithoutAllPrimesTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\RSAPSSSignatureTest' => $vendorDir . '/web-token/jwt-signature-algorithm-rsa/Tests/RSAPSSSignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\RSASignatureTest' => $vendorDir . '/web-token/jwt-signature-algorithm-rsa/Tests/RSASignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Util\\RSA' => $vendorDir . '/web-token/jwt-signature-algorithm-rsa/Util/RSA.php',
|
||||
'Jose\\Component\\Signature\\JWS' => $vendorDir . '/web-token/jwt-signature/JWS.php',
|
||||
'Jose\\Component\\Signature\\JWSBuilder' => $vendorDir . '/web-token/jwt-signature/JWSBuilder.php',
|
||||
@@ -2180,10 +2174,6 @@ return array(
|
||||
'Jose\\Easy\\JWT' => $vendorDir . '/web-token/jwt-easy/JWT.php',
|
||||
'Jose\\Easy\\Load' => $vendorDir . '/web-token/jwt-easy/Load.php',
|
||||
'Jose\\Easy\\ParameterBag' => $vendorDir . '/web-token/jwt-easy/ParameterBag.php',
|
||||
'Jose\\Easy\\Tests\\AlgorithmProviderTest' => $vendorDir . '/web-token/jwt-easy/Tests/AlgorithmProviderTest.php',
|
||||
'Jose\\Easy\\Tests\\EncryptionTest' => $vendorDir . '/web-token/jwt-easy/Tests/EncryptionTest.php',
|
||||
'Jose\\Easy\\Tests\\ParameterBagTest' => $vendorDir . '/web-token/jwt-easy/Tests/ParameterBagTest.php',
|
||||
'Jose\\Easy\\Tests\\SignatureTest' => $vendorDir . '/web-token/jwt-easy/Tests/SignatureTest.php',
|
||||
'Jose\\Easy\\Validate' => $vendorDir . '/web-token/jwt-easy/Validate.php',
|
||||
'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
|
||||
'Khill\\Lavacharts\\Builders\\ChartBuilder' => $vendorDir . '/khill/lavacharts/src/Builders/ChartBuilder.php',
|
||||
|
||||
2
vendor/composer/autoload_psr4.php
vendored
2
vendor/composer/autoload_psr4.php
vendored
@@ -62,7 +62,7 @@ return array(
|
||||
'Laravel\\Horizon\\' => array($vendorDir . '/laravel/horizon/src'),
|
||||
'Khill\\Lavacharts\\' => array($vendorDir . '/khill/lavacharts/src'),
|
||||
'Jose\\Easy\\' => array($vendorDir . '/web-token/jwt-easy'),
|
||||
'Jose\\Component\\Signature\\Algorithm\\' => array($vendorDir . '/web-token/jwt-signature-algorithm-ecdsa', $vendorDir . '/web-token/jwt-signature-algorithm-hmac', $vendorDir . '/web-token/jwt-signature-algorithm-rsa'),
|
||||
'Jose\\Component\\Signature\\Algorithm\\' => array($vendorDir . '/web-token/jwt-signature-algorithm-hmac', $vendorDir . '/web-token/jwt-signature-algorithm-rsa', $vendorDir . '/web-token/jwt-signature-algorithm-ecdsa'),
|
||||
'Jose\\Component\\Signature\\' => array($vendorDir . '/web-token/jwt-signature'),
|
||||
'Jose\\Component\\Encryption\\' => array($vendorDir . '/web-token/jwt-encryption'),
|
||||
'Jose\\Component\\Core\\' => array($vendorDir . '/web-token/jwt-core'),
|
||||
|
||||
22
vendor/composer/autoload_static.php
vendored
22
vendor/composer/autoload_static.php
vendored
@@ -416,9 +416,9 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9
|
||||
),
|
||||
'Jose\\Component\\Signature\\Algorithm\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-ecdsa',
|
||||
1 => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-hmac',
|
||||
2 => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa',
|
||||
0 => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-hmac',
|
||||
1 => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa',
|
||||
2 => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-ecdsa',
|
||||
),
|
||||
'Jose\\Component\\Signature\\' =>
|
||||
array (
|
||||
@@ -578,6 +578,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9
|
||||
'App\\Http\\Controllers\\Logistics\\FuelController' => __DIR__ . '/../..' . '/app/Http/Controllers/Logistics/FuelController.php',
|
||||
'App\\Http\\Controllers\\Logistics\\StructureRequestAdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/Logistics/StructureRequestAdminController.php',
|
||||
'App\\Http\\Controllers\\Logistics\\StructureRequestController' => __DIR__ . '/../..' . '/app/Http/Controllers/Logistics/StructureRequestController.php',
|
||||
'App\\Http\\Controllers\\MiningTaxes\\MiningTaxesAdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/MiningTaxes/MiningTaxesAdminController.php',
|
||||
'App\\Http\\Controllers\\MiningTaxes\\MiningTaxesController' => __DIR__ . '/../..' . '/app/Http/Controllers/MiningTaxes/MiningTaxesController.php',
|
||||
'App\\Http\\Controllers\\Moons\\MoonLedgerController' => __DIR__ . '/../..' . '/app/Http/Controllers/Moons/MoonLedgerController.php',
|
||||
'App\\Http\\Controllers\\Moons\\MoonsAdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/Moons/MoonsAdminController.php',
|
||||
'App\\Http\\Controllers\\Moons\\MoonsController' => __DIR__ . '/../..' . '/app/Http/Controllers/Moons/MoonsController.php',
|
||||
@@ -602,6 +604,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9
|
||||
'App\\Jobs\\Commands\\Finances\\ProcessWalletJournalJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/Finances/ProcessWalletJournalJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\CalculateMiningTaxesJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/CalculateMiningTaxesJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\CreateMiningTaxesInvoiceJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/CreateMiningTaxesInvoiceJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\FetchMiningTaxesLedgersJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/FetchMiningTaxesLedgersJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\FetchMiningTaxesObserversJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/FetchMiningTaxesObserversJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\MailMiningTaxesInvoiceJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/MailMiningTaxesInvoiceJob.php',
|
||||
'App\\Jobs\\Commands\\MiningTaxes\\ProcessMiningTaxesPaymentsJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/ProcessMiningTaxesPaymentsJob.php',
|
||||
@@ -2668,15 +2671,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9
|
||||
'Jose\\Component\\Signature\\Algorithm\\RSAPKCS1' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa/RSAPKCS1.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\RSAPSS' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa/RSAPSS.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\SignatureAlgorithm' => __DIR__ . '/..' . '/web-token/jwt-signature/Algorithm/SignatureAlgorithm.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\ECDSAFromRFC6979Test' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSAFromRFC6979Test.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\ECDSAFromRFC7520Test' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSAFromRFC7520Test.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\ECDSASignatureTest' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSASignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\HMACFromRFC7520Test' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-hmac/Tests/HMACFromRFC7520Test.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\HMACSignatureTest' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-hmac/Tests/HMACSignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\RSA15SignatureTest' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa/Tests/RSA15SignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\RSAKeyWithoutAllPrimesTest' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa/Tests/RSAKeyWithoutAllPrimesTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\RSAPSSSignatureTest' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa/Tests/RSAPSSSignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Tests\\RSASignatureTest' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa/Tests/RSASignatureTest.php',
|
||||
'Jose\\Component\\Signature\\Algorithm\\Util\\RSA' => __DIR__ . '/..' . '/web-token/jwt-signature-algorithm-rsa/Util/RSA.php',
|
||||
'Jose\\Component\\Signature\\JWS' => __DIR__ . '/..' . '/web-token/jwt-signature/JWS.php',
|
||||
'Jose\\Component\\Signature\\JWSBuilder' => __DIR__ . '/..' . '/web-token/jwt-signature/JWSBuilder.php',
|
||||
@@ -2715,10 +2709,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9
|
||||
'Jose\\Easy\\JWT' => __DIR__ . '/..' . '/web-token/jwt-easy/JWT.php',
|
||||
'Jose\\Easy\\Load' => __DIR__ . '/..' . '/web-token/jwt-easy/Load.php',
|
||||
'Jose\\Easy\\ParameterBag' => __DIR__ . '/..' . '/web-token/jwt-easy/ParameterBag.php',
|
||||
'Jose\\Easy\\Tests\\AlgorithmProviderTest' => __DIR__ . '/..' . '/web-token/jwt-easy/Tests/AlgorithmProviderTest.php',
|
||||
'Jose\\Easy\\Tests\\EncryptionTest' => __DIR__ . '/..' . '/web-token/jwt-easy/Tests/EncryptionTest.php',
|
||||
'Jose\\Easy\\Tests\\ParameterBagTest' => __DIR__ . '/..' . '/web-token/jwt-easy/Tests/ParameterBagTest.php',
|
||||
'Jose\\Easy\\Tests\\SignatureTest' => __DIR__ . '/..' . '/web-token/jwt-easy/Tests/SignatureTest.php',
|
||||
'Jose\\Easy\\Validate' => __DIR__ . '/..' . '/web-token/jwt-easy/Validate.php',
|
||||
'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
|
||||
'Khill\\Lavacharts\\Builders\\ChartBuilder' => __DIR__ . '/..' . '/khill/lavacharts/src/Builders/ChartBuilder.php',
|
||||
|
||||
107
vendor/composer/installed.json
vendored
107
vendor/composer/installed.json
vendored
@@ -7214,17 +7214,17 @@
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-easy",
|
||||
"version": "v2.2.6",
|
||||
"version_normalized": "2.2.6.0",
|
||||
"version": "v2.2.8",
|
||||
"version_normalized": "2.2.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/web-token/jwt-easy.git",
|
||||
"reference": "cc59f479dd6b5014586be5d2d40ce84bbd9b4539"
|
||||
"reference": "b4d1a4581a796244fdd69694548766403daeca97"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-easy/zipball/cc59f479dd6b5014586be5d2d40ce84bbd9b4539",
|
||||
"reference": "cc59f479dd6b5014586be5d2d40ce84bbd9b4539",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-easy/zipball/b4d1a4581a796244fdd69694548766403daeca97",
|
||||
"reference": "b4d1a4581a796244fdd69694548766403daeca97",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -7232,9 +7232,6 @@
|
||||
"web-token/jwt-encryption": "^2.1",
|
||||
"web-token/jwt-signature": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"suggest": {
|
||||
"web-token/jwt-encryption-algorithm-aescbc": "Adds AES-CBC based encryption algorithms",
|
||||
"web-token/jwt-encryption-algorithm-aesgcm": "Adds AES-GCM based encryption algorithms",
|
||||
@@ -7250,17 +7247,8 @@
|
||||
"web-token/jwt-signature-algorithm-none": "Adds none signature algorithms",
|
||||
"web-token/jwt-signature-algorithm-rsa": "Adds RSA based signature algorithms"
|
||||
},
|
||||
"time": "2020-12-07T21:10:31+00:00",
|
||||
"time": "2021-01-21T19:18:03+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
@@ -7302,7 +7290,7 @@
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/web-token/jwt-easy/tree/v2.2.6"
|
||||
"source": "https://github.com/web-token/jwt-easy/tree/v2.2.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -7501,38 +7489,25 @@
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-signature-algorithm-ecdsa",
|
||||
"version": "v2.2.6",
|
||||
"version_normalized": "2.2.6.0",
|
||||
"version": "v2.2.8",
|
||||
"version_normalized": "2.2.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/web-token/jwt-signature-algorithm-ecdsa.git",
|
||||
"reference": "3ae6e56ccf34e8b7b65ec988497d5d1bceca9864"
|
||||
"reference": "44cbbb4374c51f1cf48b82ae761efbf24e1a8591"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-ecdsa/zipball/3ae6e56ccf34e8b7b65ec988497d5d1bceca9864",
|
||||
"reference": "3ae6e56ccf34e8b7b65ec988497d5d1bceca9864",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-ecdsa/zipball/44cbbb4374c51f1cf48b82ae761efbf24e1a8591",
|
||||
"reference": "44cbbb4374c51f1cf48b82ae761efbf24e1a8591",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-openssl": "*",
|
||||
"web-token/jwt-signature": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"time": "2020-08-22T13:17:25+00:00",
|
||||
"time": "2021-01-21T19:18:03+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
@@ -7574,7 +7549,7 @@
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-ecdsa/tree/v2.2"
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-ecdsa/tree/v2.2.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -7586,37 +7561,24 @@
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-signature-algorithm-hmac",
|
||||
"version": "v2.2.6",
|
||||
"version_normalized": "2.2.6.0",
|
||||
"version": "v2.2.8",
|
||||
"version_normalized": "2.2.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/web-token/jwt-signature-algorithm-hmac.git",
|
||||
"reference": "f4fd8166e6830298fc820a8d5776c124cc2496c4"
|
||||
"reference": "d208b1c50b408fa711bfeedeed9fb5d9be1d3080"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-hmac/zipball/f4fd8166e6830298fc820a8d5776c124cc2496c4",
|
||||
"reference": "f4fd8166e6830298fc820a8d5776c124cc2496c4",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-hmac/zipball/d208b1c50b408fa711bfeedeed9fb5d9be1d3080",
|
||||
"reference": "d208b1c50b408fa711bfeedeed9fb5d9be1d3080",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"web-token/jwt-signature": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"time": "2020-08-01T11:48:26+00:00",
|
||||
"time": "2021-01-21T19:18:03+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
@@ -7658,7 +7620,7 @@
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-hmac/tree/v2.2.2"
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-hmac/tree/v2.2.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -7670,17 +7632,17 @@
|
||||
},
|
||||
{
|
||||
"name": "web-token/jwt-signature-algorithm-rsa",
|
||||
"version": "v2.2.6",
|
||||
"version_normalized": "2.2.6.0",
|
||||
"version": "v2.2.8",
|
||||
"version_normalized": "2.2.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/web-token/jwt-signature-algorithm-rsa.git",
|
||||
"reference": "ba94b8868bd8fdd481f448097ab900a8cb2c0eed"
|
||||
"reference": "513ad90eb5ef1886ff176727a769bda4618141b0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-rsa/zipball/ba94b8868bd8fdd481f448097ab900a8cb2c0eed",
|
||||
"reference": "ba94b8868bd8fdd481f448097ab900a8cb2c0eed",
|
||||
"url": "https://api.github.com/repos/web-token/jwt-signature-algorithm-rsa/zipball/513ad90eb5ef1886ff176727a769bda4618141b0",
|
||||
"reference": "513ad90eb5ef1886ff176727a769bda4618141b0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -7688,25 +7650,12 @@
|
||||
"ext-openssl": "*",
|
||||
"web-token/jwt-signature": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-bcmath": "GMP or BCMath is highly recommended to improve the library performance",
|
||||
"ext-gmp": "GMP or BCMath is highly recommended to improve the library performance"
|
||||
},
|
||||
"time": "2020-08-22T13:37:56+00:00",
|
||||
"time": "2021-01-21T19:18:03+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
@@ -7748,7 +7697,7 @@
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-rsa/tree/v2.2"
|
||||
"source": "https://github.com/web-token/jwt-signature-algorithm-rsa/tree/v2.2.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
||||
28
vendor/composer/installed.php
vendored
28
vendor/composer/installed.php
vendored
@@ -6,7 +6,7 @@
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'df510b86806490c95eaa14064e89e5968cc541e0',
|
||||
'reference' => '0a11a5d23d14c0dbc4537b5219a99b5ffa1a03fd',
|
||||
'name' => 'laravel/laravel',
|
||||
),
|
||||
'versions' =>
|
||||
@@ -440,7 +440,7 @@
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'df510b86806490c95eaa14064e89e5968cc541e0',
|
||||
'reference' => '0a11a5d23d14c0dbc4537b5219a99b5ffa1a03fd',
|
||||
),
|
||||
'laravel/socialite' =>
|
||||
array (
|
||||
@@ -1261,12 +1261,12 @@
|
||||
),
|
||||
'web-token/jwt-easy' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'pretty_version' => 'v2.2.8',
|
||||
'version' => '2.2.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cc59f479dd6b5014586be5d2d40ce84bbd9b4539',
|
||||
'reference' => 'b4d1a4581a796244fdd69694548766403daeca97',
|
||||
),
|
||||
'web-token/jwt-encryption' =>
|
||||
array (
|
||||
@@ -1288,30 +1288,30 @@
|
||||
),
|
||||
'web-token/jwt-signature-algorithm-ecdsa' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'pretty_version' => 'v2.2.8',
|
||||
'version' => '2.2.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3ae6e56ccf34e8b7b65ec988497d5d1bceca9864',
|
||||
'reference' => '44cbbb4374c51f1cf48b82ae761efbf24e1a8591',
|
||||
),
|
||||
'web-token/jwt-signature-algorithm-hmac' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'pretty_version' => 'v2.2.8',
|
||||
'version' => '2.2.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'f4fd8166e6830298fc820a8d5776c124cc2496c4',
|
||||
'reference' => 'd208b1c50b408fa711bfeedeed9fb5d9be1d3080',
|
||||
),
|
||||
'web-token/jwt-signature-algorithm-rsa' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'pretty_version' => 'v2.2.8',
|
||||
'version' => '2.2.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'ba94b8868bd8fdd481f448097ab900a8cb2c0eed',
|
||||
'reference' => '513ad90eb5ef1886ff176727a769bda4618141b0',
|
||||
),
|
||||
'webmozart/assert' =>
|
||||
array (
|
||||
|
||||
@@ -96,16 +96,19 @@ abstract class AbstractBuilder
|
||||
public function alg($alg): self
|
||||
{
|
||||
$clone = clone $this;
|
||||
|
||||
switch (true) {
|
||||
case $alg instanceof JoseAlgorithm:
|
||||
$clone->algorithms[] = $alg;
|
||||
$clone->jwt->header->set('alg', $alg->name());
|
||||
|
||||
break;
|
||||
|
||||
case is_string($alg):
|
||||
$clone->jwt->header->set('alg', $alg);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException('Invalid parameter "alg". Shall be a string or an algorithm instance.');
|
||||
}
|
||||
|
||||
17
vendor/web-token/jwt-easy/AbstractLoader.php
vendored
17
vendor/web-token/jwt-easy/AbstractLoader.php
vendored
@@ -118,16 +118,19 @@ abstract class AbstractLoader
|
||||
switch (true) {
|
||||
case $checker instanceof Checker\ClaimChecker:
|
||||
break;
|
||||
|
||||
case is_callable($checker):
|
||||
$checker = new CallableChecker($key, $checker);
|
||||
|
||||
break;
|
||||
|
||||
case is_array($checker):
|
||||
$checker = new CallableChecker($key, static function ($value) use ($checker) {return in_array($value, $checker, true); });
|
||||
$checker = new CallableChecker($key, static function ($value) use ($checker): bool {return in_array($value, $checker, true); });
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
$checker = new CallableChecker($key, static function ($value) use ($checker) {return $value === $checker; });
|
||||
$checker = new CallableChecker($key, static function ($value) use ($checker): bool {return $value === $checker; });
|
||||
}
|
||||
|
||||
$clone->claimCheckers[$key] = $checker;
|
||||
@@ -206,16 +209,19 @@ abstract class AbstractLoader
|
||||
public function alg($alg): self
|
||||
{
|
||||
$clone = clone $this;
|
||||
|
||||
switch (true) {
|
||||
case is_string($alg):
|
||||
$clone->allowedAlgorithms[] = $alg;
|
||||
|
||||
return $clone;
|
||||
|
||||
case $alg instanceof Algorithm:
|
||||
$clone->algorithms[$alg->name()] = $alg;
|
||||
$clone->allowedAlgorithms[] = $alg->name();
|
||||
|
||||
return $clone;
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException('Invalid parameter "alg". Shall be a string or an algorithm instance.');
|
||||
}
|
||||
@@ -249,16 +255,19 @@ abstract class AbstractLoader
|
||||
switch (true) {
|
||||
case $checker instanceof Checker\HeaderChecker:
|
||||
break;
|
||||
|
||||
case is_callable($checker):
|
||||
$checker = new CallableChecker($key, $checker);
|
||||
|
||||
break;
|
||||
|
||||
case is_array($checker):
|
||||
$checker = new CallableChecker($key, static function ($value) use ($checker) {return in_array($value, $checker, true); });
|
||||
$checker = new CallableChecker($key, static function ($value) use ($checker): bool {return in_array($value, $checker, true); });
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
$checker = new CallableChecker($key, static function ($value) use ($checker) {return $value === $checker; });
|
||||
$checker = new CallableChecker($key, static function ($value) use ($checker): bool {return $value === $checker; });
|
||||
}
|
||||
|
||||
$clone->headerCheckers[$key] = $checker;
|
||||
|
||||
3
vendor/web-token/jwt-easy/Decrypt.php
vendored
3
vendor/web-token/jwt-easy/Decrypt.php
vendored
@@ -61,16 +61,19 @@ class Decrypt extends AbstractLoader
|
||||
public function enc($enc): self
|
||||
{
|
||||
$clone = clone $this;
|
||||
|
||||
switch (true) {
|
||||
case is_string($enc):
|
||||
$clone->allowedContentEncryptionAlgorithms[] = $enc;
|
||||
|
||||
return $clone;
|
||||
|
||||
case $enc instanceof Algorithm:
|
||||
$clone->algorithms[$enc->name()] = $enc;
|
||||
$clone->allowedContentEncryptionAlgorithms[] = $enc->name();
|
||||
|
||||
return $clone;
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException('Invalid parameter "enc". Shall be a string or an algorithm instance.');
|
||||
}
|
||||
|
||||
6
vendor/web-token/jwt-easy/JWEBuilder.php
vendored
6
vendor/web-token/jwt-easy/JWEBuilder.php
vendored
@@ -50,16 +50,19 @@ class JWEBuilder extends AbstractBuilder
|
||||
public function enc($enc): self
|
||||
{
|
||||
$clone = clone $this;
|
||||
|
||||
switch (true) {
|
||||
case $enc instanceof Algorithm:
|
||||
$clone->algorithms[] = $enc;
|
||||
$clone->jwt->header->set('enc', $enc->name());
|
||||
|
||||
break;
|
||||
|
||||
case is_string($enc):
|
||||
$clone->jwt->header->set('enc', $enc);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException('Invalid algorithm');
|
||||
}
|
||||
@@ -75,16 +78,19 @@ class JWEBuilder extends AbstractBuilder
|
||||
public function zip($zip): self
|
||||
{
|
||||
$clone = clone $this;
|
||||
|
||||
switch (true) {
|
||||
case $zip instanceof CompressionMethod:
|
||||
$clone->compressionMethods[] = $zip;
|
||||
$clone->jwt->header->set('zip', $zip->name());
|
||||
|
||||
break;
|
||||
|
||||
case is_string($zip):
|
||||
$clone->jwt->header->set('zip', $zip);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException('Invalid compression method');
|
||||
}
|
||||
|
||||
@@ -1,168 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Easy\Tests;
|
||||
|
||||
use BadFunctionCallException;
|
||||
use function get_class;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Encryption\Algorithm\ContentEncryption;
|
||||
use Jose\Component\Encryption\Algorithm\KeyEncryption;
|
||||
use Jose\Component\Signature\Algorithm;
|
||||
use Jose\Easy\AlgorithmProvider;
|
||||
use PHPUnit\Framework\Exception;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @group easy
|
||||
*
|
||||
* @internal
|
||||
* @covers \Jose\Easy\AlgorithmProvider
|
||||
*/
|
||||
final class AlgorithmProviderTest extends TestCase
|
||||
{
|
||||
private const ALL_ALGORITHMS = [
|
||||
Algorithm\HS256::class,
|
||||
Algorithm\HS384::class,
|
||||
Algorithm\HS512::class,
|
||||
Algorithm\RS256::class,
|
||||
Algorithm\RS384::class,
|
||||
Algorithm\RS512::class,
|
||||
Algorithm\PS256::class,
|
||||
Algorithm\PS384::class,
|
||||
Algorithm\PS512::class,
|
||||
Algorithm\ES256::class,
|
||||
Algorithm\ES384::class,
|
||||
Algorithm\ES512::class,
|
||||
Algorithm\EdDSA::class,
|
||||
KeyEncryption\A128GCMKW::class,
|
||||
KeyEncryption\A192GCMKW::class,
|
||||
KeyEncryption\A256GCMKW::class,
|
||||
KeyEncryption\A128KW::class,
|
||||
KeyEncryption\A192KW::class,
|
||||
KeyEncryption\A256KW::class,
|
||||
KeyEncryption\Dir::class,
|
||||
KeyEncryption\ECDHES::class,
|
||||
KeyEncryption\ECDHESA128KW::class,
|
||||
KeyEncryption\ECDHESA192KW::class,
|
||||
KeyEncryption\ECDHESA256KW::class,
|
||||
KeyEncryption\PBES2HS256A128KW::class,
|
||||
KeyEncryption\PBES2HS384A192KW::class,
|
||||
KeyEncryption\PBES2HS512A256KW::class,
|
||||
KeyEncryption\RSA15::class,
|
||||
KeyEncryption\RSAOAEP::class,
|
||||
KeyEncryption\RSAOAEP256::class,
|
||||
ContentEncryption\A128GCM::class,
|
||||
ContentEncryption\A192GCM::class,
|
||||
ContentEncryption\A256GCM::class,
|
||||
ContentEncryption\A128CBCHS256::class,
|
||||
ContentEncryption\A192CBCHS384::class,
|
||||
ContentEncryption\A256CBCHS512::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @throws ExpectationFailedException
|
||||
*/
|
||||
public function itReturnsAllAlgorithmClasses(): void
|
||||
{
|
||||
$algorithmProvider = new AlgorithmProvider(self::ALL_ALGORITHMS);
|
||||
static::assertSame(self::ALL_ALGORITHMS, $algorithmProvider->getAlgorithmClasses());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @throws Exception
|
||||
* @throws ExpectationFailedException
|
||||
*/
|
||||
public function itReturnsTheAvailableAlgorithms(): void
|
||||
{
|
||||
$algorithmProvider = new AlgorithmProvider(self::ALL_ALGORITHMS);
|
||||
foreach ($algorithmProvider->getAvailableAlgorithms() as $algorithm) {
|
||||
static::assertContains(get_class($algorithm), self::ALL_ALGORITHMS);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @throws ExpectationFailedException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function itAllowsNonExistingClasses(): void
|
||||
{
|
||||
$nonExistingClassName = 'NonExistingClass'.bin2hex(random_bytes(31));
|
||||
$algorithmProvider = new AlgorithmProvider([$nonExistingClassName]);
|
||||
|
||||
static::assertSame([$nonExistingClassName], $algorithmProvider->getAlgorithmClasses());
|
||||
static::assertSame([], $algorithmProvider->getAvailableAlgorithms());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @throws ExpectationFailedException
|
||||
*/
|
||||
public function itCanHandleClassesWithExceptions(): void
|
||||
{
|
||||
$test = [$this->createAlgorithmClassWithExceptionMock()];
|
||||
$algorithmProvider = new AlgorithmProvider($test);
|
||||
|
||||
static::assertSame($test, $algorithmProvider->getAlgorithmClasses());
|
||||
static::assertSame([], $algorithmProvider->getAvailableAlgorithms());
|
||||
}
|
||||
|
||||
private function createAlgorithmClassWithExceptionMock(): string
|
||||
{
|
||||
$mockClass = new class() implements Algorithm\SignatureAlgorithm {
|
||||
/** @var bool */
|
||||
private static $throw;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
if (null === self::$throw) {
|
||||
self::$throw = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
throw new BadFunctionCallException('should not be called');
|
||||
}
|
||||
|
||||
public function name(): string
|
||||
{
|
||||
throw new BadFunctionCallException('should not be called');
|
||||
}
|
||||
|
||||
public function allowedKeyTypes(): array
|
||||
{
|
||||
throw new BadFunctionCallException('should not be called');
|
||||
}
|
||||
|
||||
public function sign(JWK $key, string $input): string
|
||||
{
|
||||
throw new BadFunctionCallException('should not be called');
|
||||
}
|
||||
|
||||
public function verify(JWK $key, string $input, string $signature): bool
|
||||
{
|
||||
throw new BadFunctionCallException('should not be called');
|
||||
}
|
||||
};
|
||||
|
||||
return get_class($mockClass);
|
||||
}
|
||||
}
|
||||
141
vendor/web-token/jwt-easy/Tests/EncryptionTest.php
vendored
141
vendor/web-token/jwt-easy/Tests/EncryptionTest.php
vendored
@@ -1,141 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Easy\Tests;
|
||||
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Encryption\Algorithm\ContentEncryption\A256CCM_16_128;
|
||||
use Jose\Component\Encryption\Algorithm\KeyEncryption\RSAOAEP512;
|
||||
use Jose\Easy\Build;
|
||||
use Jose\Easy\Load;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @group easy
|
||||
*
|
||||
* @internal
|
||||
* @covers \Jose\Easy\Build
|
||||
* @covers \Jose\Easy\JWEBuilder
|
||||
* @covers \Jose\Easy\JWT
|
||||
*/
|
||||
class EncryptionTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function jweCanBeCreated(): void
|
||||
{
|
||||
$time = time();
|
||||
$jwe = Build::jwe()
|
||||
->exp($time + 3600)
|
||||
->iat($time)
|
||||
->nbf($time)
|
||||
->jti('0123456789', true)
|
||||
->iss('issuer')
|
||||
->aud('audience1')
|
||||
->aud('audience2')
|
||||
->sub('subject')
|
||||
->alg('RSA-OAEP-256')
|
||||
->enc('A256GCM')
|
||||
->zip('DEF')
|
||||
->claim('is_root', true)
|
||||
->claim('roles', ['ROLE1' => true, 'ROLE2' => 0.007])
|
||||
->crit(['alg', 'enc'])
|
||||
->encrypt($this->rsaKey())
|
||||
;
|
||||
|
||||
$jwt = Load::jwe($jwe)
|
||||
->algs(['RSA-OAEP', 'RSA-OAEP-256'])
|
||||
->encs(['A128GCM', 'A256GCM'])
|
||||
->exp()
|
||||
->iat()
|
||||
->nbf()
|
||||
->aud('audience1')
|
||||
->iss('issuer')
|
||||
->sub('subject')
|
||||
->jti('0123456789')
|
||||
->key($this->rsaKey())
|
||||
->run()
|
||||
;
|
||||
|
||||
static::assertEquals($time, $jwt->claims->iat());
|
||||
static::assertEquals($time, $jwt->claims->nbf());
|
||||
static::assertEquals($time + 3600, $jwt->claims->exp());
|
||||
static::assertEquals('0123456789', $jwt->claims->jti());
|
||||
static::assertEquals('issuer', $jwt->claims->iss());
|
||||
static::assertEquals('subject', $jwt->claims->sub());
|
||||
static::assertEquals(['audience1', 'audience2'], $jwt->claims->aud());
|
||||
static::assertEquals(true, $jwt->claims->is_root());
|
||||
static::assertEquals(['ROLE1' => true, 'ROLE2' => 0.007], $jwt->claims->roles());
|
||||
|
||||
static::assertEquals(['jti' => '0123456789', 'alg' => 'RSA-OAEP-256', 'enc' => 'A256GCM', 'crit' => ['alg', 'enc'], 'zip' => 'DEF'], $jwt->header->all());
|
||||
static::assertEquals('RSA-OAEP-256', $jwt->header->alg());
|
||||
static::assertEquals('A256GCM', $jwt->header->enc());
|
||||
static::assertEquals('0123456789', $jwt->header->jti());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function jweCanBeCreatedWithCustomAlgorithm(): void
|
||||
{
|
||||
$time = time();
|
||||
$jwe = Build::jwe()
|
||||
->exp($time + 3600)
|
||||
->iat($time)
|
||||
->nbf($time)
|
||||
->jti('0123456789')
|
||||
->alg(new RSAOAEP512())
|
||||
->enc(new A256CCM_16_128())
|
||||
->encrypt($this->rsaKey())
|
||||
;
|
||||
|
||||
$jwt = Load::jwe($jwe)
|
||||
->algs(['RSA-OAEP', new RSAOAEP512()])
|
||||
->encs(['A128GCM', new A256CCM_16_128()])
|
||||
->exp()
|
||||
->iat()
|
||||
->nbf()
|
||||
->aud('audience1')
|
||||
->iss('issuer')
|
||||
->sub('subject')
|
||||
->jti('0123456789')
|
||||
->key($this->rsaKey())
|
||||
->run()
|
||||
;
|
||||
static::assertEquals($time, $jwt->claims->iat());
|
||||
static::assertEquals($time, $jwt->claims->nbf());
|
||||
static::assertEquals($time + 3600, $jwt->claims->exp());
|
||||
static::assertEquals('0123456789', $jwt->claims->jti());
|
||||
|
||||
static::assertEquals('RSA-OAEP-512', $jwt->header->alg());
|
||||
static::assertEquals('A256CCM-16-128', $jwt->header->enc());
|
||||
}
|
||||
|
||||
private function rsaKey(): JWK
|
||||
{
|
||||
return new JWK([
|
||||
'kty' => 'RSA',
|
||||
'kid' => 'bilbo.baggins@hobbiton.example',
|
||||
'use' => 'enc',
|
||||
'n' => 'n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'bWUC9B-EFRIo8kpGfh0ZuyGPvMNKvYWNtB_ikiH9k20eT-O1q_I78eiZkpXxXQ0UTEs2LsNRS-8uJbvQ-A1irkwMSMkK1J3XTGgdrhCku9gRldY7sNA_AKZGh-Q661_42rINLRCe8W-nZ34ui_qOfkLnK9QWDDqpaIsA-bMwWWSDFu2MUBYwkHTMEzLYGqOe04noqeq1hExBTHBOBdkMXiuFhUq1BU6l-DqEiWxqg82sXt2h-LMnT3046AOYJoRioz75tSUQfGCshWTBnP5uDjd18kKhyv07lhfSJdrPdM5Plyl21hsFf4L_mHCuoFau7gdsPfHPxxjVOcOpBrQzwQ',
|
||||
'p' => '3Slxg_DwTXJcb6095RoXygQCAZ5RnAvZlno1yhHtnUex_fp7AZ_9nRaO7HX_-SFfGQeutao2TDjDAWU4Vupk8rw9JR0AzZ0N2fvuIAmr_WCsmGpeNqQnev1T7IyEsnh8UMt-n5CafhkikzhEsrmndH6LxOrvRJlsPp6Zv8bUq0k',
|
||||
'q' => 'uKE2dh-cTf6ERF4k4e_jy78GfPYUIaUyoSSJuBzp3Cubk3OCqs6grT8bR_cu0Dm1MZwWmtdqDyI95HrUeq3MP15vMMON8lHTeZu2lmKvwqW7anV5UzhM1iZ7z4yMkuUwFWoBvyY898EXvRD-hdqRxHlSqAZ192zB3pVFJ0s7pFc',
|
||||
'dp' => 'B8PVvXkvJrj2L-GYQ7v3y9r6Kw5g9SahXBwsWUzp19TVlgI-YV85q1NIb1rxQtD-IsXXR3-TanevuRPRt5OBOdiMGQp8pbt26gljYfKU_E9xn-RULHz0-ed9E9gXLKD4VGngpz-PfQ_q29pk5xWHoJp009Qf1HvChixRX59ehik',
|
||||
'dq' => 'CLDmDGduhylc9o7r84rEUVn7pzQ6PF83Y-iBZx5NT-TpnOZKF1pErAMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJKbi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdKT1cYF8',
|
||||
'qi' => '3PiqvXQN0zwMeE-sBvZgi289XP9XCQF3VWqPzMKnIgQp7_Tugo6-NZBKCQsMf3HaEGBjTVJs_jcK8-TRXvaKe-7ZMaQj8VfBdYkssbu0NKDDhjJ-GtiseaDVWt7dcH0cfwxgFUHpQh7FoCrjFJ6h6ZEpMF6xmujs4qMpPz8aaI4',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Easy\Tests;
|
||||
|
||||
use Jose\Easy\ParameterBag;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @group easy
|
||||
*
|
||||
* @internal
|
||||
* @covers \Jose\Easy\ParameterBag
|
||||
*/
|
||||
class ParameterBagTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function basicCalls(): void
|
||||
{
|
||||
$bag = new ParameterBag();
|
||||
$bag->iss('iss');
|
||||
$bag->alg('alg');
|
||||
$bag->aud(['aud']);
|
||||
|
||||
static::assertEquals(['aud'], $bag->aud());
|
||||
static::assertEquals('iss', $bag->get('iss'));
|
||||
static::assertEquals('alg', $bag->get('alg'));
|
||||
}
|
||||
}
|
||||
268
vendor/web-token/jwt-easy/Tests/SignatureTest.php
vendored
268
vendor/web-token/jwt-easy/Tests/SignatureTest.php
vendored
@@ -1,268 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Easy\Tests;
|
||||
|
||||
use Exception;
|
||||
use InvalidArgumentException;
|
||||
use Jose\Component\Checker\InvalidClaimException;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm\HS1;
|
||||
use Jose\Easy\Build;
|
||||
use Jose\Easy\Load;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @group easy
|
||||
*
|
||||
* @covers \Jose\Easy\Build
|
||||
* @covers \Jose\Easy\JWSBuilder
|
||||
* @covers \Jose\Easy\JWT
|
||||
* @covers \Jose\Easy\Validate
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class SignatureTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function jwsCanBeCreated(): void
|
||||
{
|
||||
$time = time();
|
||||
$jws = Build::jws()
|
||||
->exp($time + 3600)
|
||||
->iat($time)
|
||||
->nbf($time)
|
||||
->jti('0123456789', true)
|
||||
->alg('RS512')
|
||||
->iss('issuer')
|
||||
->aud('audience1')
|
||||
->aud('audience2')
|
||||
->sub('subject')
|
||||
->claim('is_root', true)
|
||||
->claim('roles', ['ROLE1' => true, 'ROLE2' => 0.007])
|
||||
->crit(['alg'])
|
||||
->sign($this->rsaKey())
|
||||
;
|
||||
|
||||
$jwt = Load::jws($jws)
|
||||
->algs(['RS256', 'RS512'])
|
||||
->exp()
|
||||
->iat()
|
||||
->nbf()
|
||||
->aud('audience1')
|
||||
->iss('issuer')
|
||||
->sub('subject')
|
||||
->jti('0123456789')
|
||||
->key($this->rsaKey())
|
||||
->run()
|
||||
;
|
||||
|
||||
static::assertEquals($time, $jwt->claims->iat());
|
||||
static::assertEquals($time, $jwt->claims->nbf());
|
||||
static::assertEquals($time + 3600, $jwt->claims->exp());
|
||||
static::assertEquals('0123456789', $jwt->claims->jti());
|
||||
static::assertEquals('issuer', $jwt->claims->iss());
|
||||
static::assertEquals('subject', $jwt->claims->sub());
|
||||
static::assertEquals(['audience1', 'audience2'], $jwt->claims->aud());
|
||||
static::assertEquals(true, $jwt->claims->is_root());
|
||||
static::assertEquals(['ROLE1' => true, 'ROLE2' => 0.007], $jwt->claims->roles());
|
||||
|
||||
static::assertEquals(['jti' => '0123456789', 'alg' => 'RS512', 'crit' => ['alg']], $jwt->header->all());
|
||||
static::assertEquals('RS512', $jwt->header->alg());
|
||||
static::assertEquals('0123456789', $jwt->header->jti());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function invalidSignatureRejectsTheToken(): void
|
||||
{
|
||||
$this->expectException(Exception::class);
|
||||
$this->expectExceptionMessage('Invalid signature');
|
||||
$time = time();
|
||||
$jws = Build::jws()
|
||||
->exp($time + 3600)
|
||||
->iat($time)
|
||||
->nbf($time)
|
||||
->jti('0123456789', true)
|
||||
->alg('HS256')
|
||||
->iss('issuer')
|
||||
->aud('audience1')
|
||||
->aud('audience2')
|
||||
->sub('subject')
|
||||
->claim('is_root', true)
|
||||
->claim('roles', ['ROLE1' => true, 'ROLE2' => 0.007])
|
||||
->crit(['alg'])
|
||||
->sign(new JWK(['kty' => 'oct', 'k' => 'foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo']))
|
||||
;
|
||||
|
||||
Load::jws($jws)
|
||||
->algs(['HS256'])
|
||||
->exp()
|
||||
->iat()
|
||||
->nbf()
|
||||
->aud('audience1')
|
||||
->iss('issuer')
|
||||
->sub('subject')
|
||||
->jti('0123456789')
|
||||
->key(new JWK(['kty' => 'oct', 'k' => 'BARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBAR']))
|
||||
->run()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function algorithmIsNotAllowed(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('The algorithm "none" is not supported.');
|
||||
$time = time();
|
||||
$jws = Build::jws()
|
||||
->exp($time + 3600)
|
||||
->iat($time)
|
||||
->nbf($time)
|
||||
->jti('0123456789', true)
|
||||
->alg('none')
|
||||
->iss('issuer')
|
||||
->aud('audience1')
|
||||
->aud('audience2')
|
||||
->sub('subject')
|
||||
->claim('is_root', true)
|
||||
->claim('roles', ['ROLE1' => true, 'ROLE2' => 0.007])
|
||||
->crit(['alg'])
|
||||
->sign($this->noneKey())
|
||||
;
|
||||
|
||||
Load::jws($jws)
|
||||
->algs(['HS256'])
|
||||
->exp()
|
||||
->iat()
|
||||
->nbf()
|
||||
->aud('audience1')
|
||||
->iss('issuer')
|
||||
->sub('subject')
|
||||
->jti('0123456789')
|
||||
->key(new JWK(['kty' => 'oct', 'k' => 'BARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBARBAR']))
|
||||
->run()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function tokenExpired(): void
|
||||
{
|
||||
$this->expectException(InvalidClaimException::class);
|
||||
$this->expectExceptionMessage('The token expired.');
|
||||
$time = time();
|
||||
$jws = Build::jws()
|
||||
->exp($time - 1)
|
||||
->iat($time)
|
||||
->nbf($time)
|
||||
->jti('0123456789', true)
|
||||
->alg('RS256')
|
||||
->iss('issuer')
|
||||
->aud('audience1')
|
||||
->aud('audience2')
|
||||
->sub('subject')
|
||||
->claim('is_root', true)
|
||||
->claim('roles', ['ROLE1' => true, 'ROLE2' => 0.007])
|
||||
->crit(['alg'])
|
||||
->sign($this->rsaKey())
|
||||
;
|
||||
|
||||
Load::jws($jws)
|
||||
->algs(['RS256'])
|
||||
->exp()
|
||||
->iat()
|
||||
->nbf()
|
||||
->aud('audience1')
|
||||
->iss('issuer')
|
||||
->sub('subject')
|
||||
->jti('0123456789')
|
||||
->key($this->rsaKey())
|
||||
->run()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function jwsCanBeCreatedWithCustomAlgorithm(): void
|
||||
{
|
||||
$time = time();
|
||||
$jws = Build::jws()
|
||||
->exp($time + 3600)
|
||||
->iat($time)
|
||||
->nbf($time)
|
||||
->jti('0123456789')
|
||||
->alg(new HS1())
|
||||
->sign($this->octKey())
|
||||
;
|
||||
|
||||
$jwt = Load::jws($jws)
|
||||
->algs(['RS256', new HS1()])
|
||||
->exp()
|
||||
->iat()
|
||||
->nbf()
|
||||
->aud('audience1')
|
||||
->iss('issuer')
|
||||
->sub('subject')
|
||||
->jti('0123456789')
|
||||
->key($this->octKey())
|
||||
->run()
|
||||
;
|
||||
|
||||
static::assertEquals($time, $jwt->claims->iat());
|
||||
static::assertEquals($time, $jwt->claims->nbf());
|
||||
static::assertEquals($time + 3600, $jwt->claims->exp());
|
||||
static::assertEquals('0123456789', $jwt->claims->jti());
|
||||
|
||||
static::assertEquals('HS1', $jwt->header->alg());
|
||||
}
|
||||
|
||||
private function rsaKey(): JWK
|
||||
{
|
||||
return new JWK([
|
||||
'kty' => 'RSA',
|
||||
'kid' => 'bilbo.baggins@hobbiton.example',
|
||||
'use' => 'sig',
|
||||
'n' => 'n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'bWUC9B-EFRIo8kpGfh0ZuyGPvMNKvYWNtB_ikiH9k20eT-O1q_I78eiZkpXxXQ0UTEs2LsNRS-8uJbvQ-A1irkwMSMkK1J3XTGgdrhCku9gRldY7sNA_AKZGh-Q661_42rINLRCe8W-nZ34ui_qOfkLnK9QWDDqpaIsA-bMwWWSDFu2MUBYwkHTMEzLYGqOe04noqeq1hExBTHBOBdkMXiuFhUq1BU6l-DqEiWxqg82sXt2h-LMnT3046AOYJoRioz75tSUQfGCshWTBnP5uDjd18kKhyv07lhfSJdrPdM5Plyl21hsFf4L_mHCuoFau7gdsPfHPxxjVOcOpBrQzwQ',
|
||||
'p' => '3Slxg_DwTXJcb6095RoXygQCAZ5RnAvZlno1yhHtnUex_fp7AZ_9nRaO7HX_-SFfGQeutao2TDjDAWU4Vupk8rw9JR0AzZ0N2fvuIAmr_WCsmGpeNqQnev1T7IyEsnh8UMt-n5CafhkikzhEsrmndH6LxOrvRJlsPp6Zv8bUq0k',
|
||||
'q' => 'uKE2dh-cTf6ERF4k4e_jy78GfPYUIaUyoSSJuBzp3Cubk3OCqs6grT8bR_cu0Dm1MZwWmtdqDyI95HrUeq3MP15vMMON8lHTeZu2lmKvwqW7anV5UzhM1iZ7z4yMkuUwFWoBvyY898EXvRD-hdqRxHlSqAZ192zB3pVFJ0s7pFc',
|
||||
'dp' => 'B8PVvXkvJrj2L-GYQ7v3y9r6Kw5g9SahXBwsWUzp19TVlgI-YV85q1NIb1rxQtD-IsXXR3-TanevuRPRt5OBOdiMGQp8pbt26gljYfKU_E9xn-RULHz0-ed9E9gXLKD4VGngpz-PfQ_q29pk5xWHoJp009Qf1HvChixRX59ehik',
|
||||
'dq' => 'CLDmDGduhylc9o7r84rEUVn7pzQ6PF83Y-iBZx5NT-TpnOZKF1pErAMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJKbi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdKT1cYF8',
|
||||
'qi' => '3PiqvXQN0zwMeE-sBvZgi289XP9XCQF3VWqPzMKnIgQp7_Tugo6-NZBKCQsMf3HaEGBjTVJs_jcK8-TRXvaKe-7ZMaQj8VfBdYkssbu0NKDDhjJ-GtiseaDVWt7dcH0cfwxgFUHpQh7FoCrjFJ6h6ZEpMF6xmujs4qMpPz8aaI4',
|
||||
]);
|
||||
}
|
||||
|
||||
private function octKey(): JWK
|
||||
{
|
||||
return new JWK([
|
||||
'kty' => 'oct',
|
||||
'k' => 'foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo',
|
||||
]);
|
||||
}
|
||||
|
||||
private function noneKey(): JWK
|
||||
{
|
||||
return new JWK([
|
||||
'kty' => 'none',
|
||||
]);
|
||||
}
|
||||
}
|
||||
15
vendor/web-token/jwt-easy/composer.json
vendored
15
vendor/web-token/jwt-easy/composer.json
vendored
@@ -38,20 +38,5 @@
|
||||
"web-token/jwt-signature-algorithm-none": "Adds none signature algorithms",
|
||||
"web-token/jwt-signature-algorithm-hmac": "Adds HMAC based signature algorithms",
|
||||
"web-token/jwt-signature-algorithm-rsa": "Adds RSA based signature algorithms"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
}
|
||||
}
|
||||
|
||||
29
vendor/web-token/jwt-easy/phpunit.xml.dist
vendored
29
vendor/web-token/jwt-easy/phpunit.xml.dist
vendored
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit
|
||||
backupGlobals="false"
|
||||
backupStaticAttributes="false"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
syntaxCheck="true"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true">
|
||||
<testsuites>
|
||||
<testsuite name="Test Suite">
|
||||
<directory>./Tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">./</directory>
|
||||
<exclude>
|
||||
<directory>./vendor</directory>
|
||||
<directory>./Tests</directory>
|
||||
<directory suffix="Test.php">./src</directory>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
@@ -1,169 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use Base64Url\Base64Url;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm\ES256;
|
||||
use Jose\Component\Signature\Algorithm\ES384;
|
||||
use Jose\Component\Signature\Algorithm\ES512;
|
||||
use Jose\Component\Signature\Algorithm\SignatureAlgorithm;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc6979#appendix-A.2.5
|
||||
* @see https://tools.ietf.org/html/rfc6979#appendix-A.2.6
|
||||
* @see https://tools.ietf.org/html/rfc6979#appendix-A.2.7
|
||||
*
|
||||
* Note that we only test
|
||||
* * P-256 key with SHA-256
|
||||
* * P-384 key with SHA-384
|
||||
* * P-521 key with SHA-512
|
||||
*
|
||||
* Other curves or hash method combinaisons are not used by the Jot specification
|
||||
*
|
||||
* @group RFC6979
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class ECDSAFromRFC6979Test extends TestCase
|
||||
{
|
||||
/**
|
||||
* @param string $message
|
||||
* @param string $signature
|
||||
*
|
||||
* @dataProvider dataWithVectors
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function withVectors(SignatureAlgorithm $algorithm, $message, JWK $key, $signature): void
|
||||
{
|
||||
$is_valid = $algorithm->verify($key, $message, $signature);
|
||||
|
||||
static::assertTrue($is_valid);
|
||||
}
|
||||
|
||||
public function dataWithVectors(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
new ES256(),
|
||||
'sample',
|
||||
new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'd' => Base64Url::encode($this->convertHexToBin('C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721')),
|
||||
'x' => Base64Url::encode($this->convertHexToBin('60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6')),
|
||||
'y' => Base64Url::encode($this->convertHexToBin('7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299')),
|
||||
]),
|
||||
sprintf(
|
||||
'%s%s',
|
||||
$this->convertHexToBin('EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716'),
|
||||
$this->convertHexToBin('F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8')
|
||||
),
|
||||
],
|
||||
[
|
||||
new ES256(),
|
||||
'test',
|
||||
new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'd' => Base64Url::encode($this->convertHexToBin('C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721')),
|
||||
'x' => Base64Url::encode($this->convertHexToBin('60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6')),
|
||||
'y' => Base64Url::encode($this->convertHexToBin('7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299')),
|
||||
]),
|
||||
sprintf(
|
||||
'%s%s',
|
||||
$this->convertHexToBin('F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D38367'),
|
||||
$this->convertHexToBin('019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083')
|
||||
),
|
||||
],
|
||||
[
|
||||
new ES384(),
|
||||
'sample',
|
||||
new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-384',
|
||||
'd' => Base64Url::encode($this->convertHexToBin('6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5')),
|
||||
'x' => Base64Url::encode($this->convertHexToBin('EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13')),
|
||||
'y' => Base64Url::encode($this->convertHexToBin('8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720')),
|
||||
]),
|
||||
sprintf(
|
||||
'%s%s',
|
||||
$this->convertHexToBin('94EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C81A648152E44ACF96E36DD1E80FABE46'),
|
||||
$this->convertHexToBin('99EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94FA329C145786E679E7B82C71A38628AC8')
|
||||
),
|
||||
],
|
||||
[
|
||||
new ES384(),
|
||||
'test',
|
||||
new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-384',
|
||||
'd' => Base64Url::encode($this->convertHexToBin('6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5')),
|
||||
'x' => Base64Url::encode($this->convertHexToBin('EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13')),
|
||||
'y' => Base64Url::encode($this->convertHexToBin('8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720')),
|
||||
]),
|
||||
sprintf(
|
||||
'%s%s',
|
||||
$this->convertHexToBin('8203B63D3C853E8D77227FB377BCF7B7B772E97892A80F36AB775D509D7A5FEB0542A7F0812998DA8F1DD3CA3CF023DB'),
|
||||
$this->convertHexToBin('DDD0760448D42D8A43AF45AF836FCE4DE8BE06B485E9B61B827C2F13173923E06A739F040649A667BF3B828246BAA5A5')
|
||||
),
|
||||
],
|
||||
// A zero has been added at the beginning of each value from the RFC (cannot convert to binary of not an even length).
|
||||
[
|
||||
new ES512(),
|
||||
'sample',
|
||||
new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-521',
|
||||
'd' => Base64Url::encode($this->convertHexToBin('00FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538')),
|
||||
'x' => Base64Url::encode($this->convertHexToBin('01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4')),
|
||||
'y' => Base64Url::encode($this->convertHexToBin('00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5')),
|
||||
]),
|
||||
sprintf(
|
||||
'%s%s',
|
||||
$this->convertHexToBin('00C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F174E25A1EE9017B5D450606ADD152B534931D7D4E8455CC91F9B15BF05EC36E377FA'),
|
||||
$this->convertHexToBin('00617CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF282623EAA63E5B5C0723D8B8C37FF0777B1A20F8CCB1DCCC43997F1EE0E44DA4A67A')
|
||||
),
|
||||
],
|
||||
[
|
||||
new ES512(),
|
||||
'test',
|
||||
new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-521',
|
||||
'd' => Base64Url::encode($this->convertHexToBin('00FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538')),
|
||||
'x' => Base64Url::encode($this->convertHexToBin('01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4')),
|
||||
'y' => Base64Url::encode($this->convertHexToBin('00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5')),
|
||||
]),
|
||||
sprintf(
|
||||
'%s%s',
|
||||
$this->convertHexToBin('013E99020ABF5CEE7525D16B69B229652AB6BDF2AFFCAEF38773B4B7D08725F10CDB93482FDCC54EDCEE91ECA4166B2A7C6265EF0CE2BD7051B7CEF945BABD47EE6D'),
|
||||
$this->convertHexToBin('01FBD0013C674AA79CB39849527916CE301C66EA7CE8B80682786AD60F98F7E78A19CA69EFF5C57400E3B3A0AD66CE0978214D13BAF4E9AC60752F7B155E2DE4DCE3')
|
||||
),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $data
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function convertHexToBin($data)
|
||||
{
|
||||
return hex2bin($data);
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use Jose\Component\Core\AlgorithmManager;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm\ES512;
|
||||
use Jose\Component\Signature\JWSBuilder;
|
||||
use Jose\Component\Signature\JWSVerifier;
|
||||
use Jose\Component\Signature\Serializer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.3
|
||||
*
|
||||
* @group RFC7520
|
||||
* @group unit
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class ECDSAFromRFC7520Test extends TestCase
|
||||
{
|
||||
/**
|
||||
* Please note that we cannot create the signature and get the same result as the example (ECDSA signatures are always different).
|
||||
* This test case create a signature and verifies it.
|
||||
* Then the output given in the RFC is used and verified.
|
||||
* This way, we can say that the library is able to create/verify ECDSA signatures and verify signature from test vectors.
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function eS512(): void
|
||||
{
|
||||
/*
|
||||
* Payload
|
||||
* EC public key
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-3.2
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.3.1
|
||||
*/
|
||||
$payload = "It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to.";
|
||||
$private_key = new JWK([
|
||||
'kty' => 'EC',
|
||||
'kid' => 'bilbo.baggins@hobbiton.example',
|
||||
'use' => 'sig',
|
||||
'crv' => 'P-521',
|
||||
'x' => 'AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9A5RkTKqjqvjyekWF-7ytDyRXYgCF5cj0Kt',
|
||||
'y' => 'AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVySsUdaQkAgDPrwQrJmbnX9cwlGfP-HqHZR1',
|
||||
'd' => 'AAhRON2r9cqXX1hg-RoI6R1tX5p2rUAYdmpHZoC1XNM56KtscrX6zbKipQrCW9CGZH3T4ubpnoTKLDYJ_fF3_rJt',
|
||||
]);
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.3.2
|
||||
*/
|
||||
$header = [
|
||||
'alg' => 'ES512',
|
||||
'kid' => 'bilbo.baggins@hobbiton.example',
|
||||
];
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new ES512()])
|
||||
);
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new ES512()])
|
||||
);
|
||||
$compactSerializer = new Serializer\CompactSerializer(
|
||||
);
|
||||
$jsonFlattenedSerializer = new Serializer\JSONFlattenedSerializer(
|
||||
);
|
||||
$jsonGeneralSerializer = new Serializer\JSONGeneralSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload($payload)
|
||||
->addSignature($private_key, $header)
|
||||
->build()
|
||||
;
|
||||
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($jws, $private_key, 0));
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.3.3
|
||||
*/
|
||||
$expected_compact_json = 'eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9.SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4.AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2';
|
||||
$expected_flattened_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","protected":"eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9","signature":"AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2"}';
|
||||
$expected_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","signatures":[{"protected":"eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9","signature":"AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sDDyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBpHABlsbEPX6sFY8OcGDqoRuBomu9xQ2"}]}';
|
||||
|
||||
$loaded_compact_json = $compactSerializer->unserialize($expected_compact_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_compact_json, $private_key, 0));
|
||||
|
||||
$loaded_flattened_json = $jsonFlattenedSerializer->unserialize($expected_flattened_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_flattened_json, $private_key, 0));
|
||||
|
||||
$loaded_json = $jsonGeneralSerializer->unserialize($expected_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_json, $private_key, 0));
|
||||
}
|
||||
}
|
||||
@@ -1,205 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use Base64Url\Base64Url;
|
||||
use InvalidArgumentException;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm\ES256;
|
||||
use Jose\Component\Signature\Algorithm\ES384;
|
||||
use Jose\Component\Signature\Algorithm\ES512;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @group ECDSA
|
||||
* @group unit
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class ECDSASignatureTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @test
|
||||
* @covers \Jose\Component\Signature\Algorithm\ES256
|
||||
*/
|
||||
public function invalidKey(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('Wrong key type.');
|
||||
$key = new JWK([
|
||||
'kty' => 'RSA',
|
||||
]);
|
||||
|
||||
$ecdsa = new ES256();
|
||||
$data = 'Live long and Prosper.';
|
||||
|
||||
$ecdsa->sign($key, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers \Jose\Component\Signature\Algorithm\ES256
|
||||
*/
|
||||
public function eS256Verify(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
|
||||
'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
|
||||
'd' => 'jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI',
|
||||
]);
|
||||
|
||||
$ecdsa = new ES256();
|
||||
$data = 'eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ';
|
||||
$signature = 'DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q';
|
||||
|
||||
$sign = $ecdsa->sign($key, $data);
|
||||
|
||||
static::assertTrue($ecdsa->verify($key, $data, $sign));
|
||||
static::assertTrue($ecdsa->verify($key, $data, Base64Url::decode($signature)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers \Jose\Component\Signature\Algorithm\ES256
|
||||
*/
|
||||
public function eS256SignVerify(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
|
||||
'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
|
||||
'd' => 'jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI',
|
||||
]);
|
||||
|
||||
$ecdsa = new ES256();
|
||||
|
||||
$data = 'eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ';
|
||||
$signature = $ecdsa->sign($key, $data);
|
||||
|
||||
static::assertTrue($ecdsa->verify($key, $data, $signature));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers \Jose\Component\Signature\Algorithm\ES256
|
||||
*/
|
||||
public function keyNotPrivate(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('The EC key is not private');
|
||||
$key = new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
|
||||
'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
|
||||
]);
|
||||
|
||||
$ecdsa = new ES256();
|
||||
|
||||
$data = 'eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ';
|
||||
$ecdsa->sign($key, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers \Jose\Component\Signature\Algorithm\ES384
|
||||
*/
|
||||
public function eS384SignVerify(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-384',
|
||||
'd' => 'pcSSXrbeZEOaBIs7IwqcU9M_OOM81XhZuOHoGgmS_2PdECwcdQcXzv7W8-lYL0cr',
|
||||
'x' => '6f-XZsg2Tvn0EoEapQ-ylMYNtsm8CPf0cb8HI2EkfY9Bqpt3QMzwlM7mVsFRmaMZ',
|
||||
'y' => 'b8nOnRwmpmEnvA2U8ydS-dbnPv7bwYl-q1qNeh8Wpjor3VO-RTt4ce0Pn25oGGWU',
|
||||
]);
|
||||
|
||||
$ecdsa = new ES384();
|
||||
|
||||
$data = 'eyJhbGciOiJFUzUxMiJ9.UGF5bG9hZA';
|
||||
$signature = $ecdsa->sign($key, $data);
|
||||
|
||||
static::assertTrue($ecdsa->verify($key, $data, $signature));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers \Jose\Component\Signature\Algorithm\ES512
|
||||
*/
|
||||
public function eS512Verify(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-521',
|
||||
'x' => 'AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk',
|
||||
'y' => 'ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2',
|
||||
'd' => 'AY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPAxerEzgdRhajnu0ferB0d53vM9mE15j2C',
|
||||
]);
|
||||
|
||||
$ecdsa = new ES512();
|
||||
$data = 'eyJhbGciOiJFUzUxMiJ9.UGF5bG9hZA';
|
||||
$signature = 'AdwMgeerwtHoh-l192l60hp9wAHZFVJbLfD_UxMi70cwnZOYaRI1bKPWROc-mZZqwqT2SI-KGDKB34XO0aw_7XdtAG8GaSwFKdCAPZgoXD2YBJZCPEX3xKpRwcdOO8KpEHwJjyqOgzDO7iKvU8vcnwNrmxYbSW9ERBXukOXolLzeO_Jn';
|
||||
|
||||
$sign = $ecdsa->sign($key, $data);
|
||||
|
||||
static::assertTrue($ecdsa->verify($key, $data, $sign));
|
||||
static::assertTrue($ecdsa->verify($key, $data, Base64Url::decode($signature)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers \Jose\Component\Signature\Algorithm\ES512
|
||||
*/
|
||||
public function eS512SignVerify(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-521',
|
||||
'x' => 'AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk',
|
||||
'y' => 'ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2',
|
||||
'd' => 'AY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPAxerEzgdRhajnu0ferB0d53vM9mE15j2C',
|
||||
]);
|
||||
|
||||
$ecdsa = new ES512();
|
||||
|
||||
$data = 'eyJhbGciOiJFUzUxMiJ9.UGF5bG9hZA';
|
||||
$signature = $ecdsa->sign($key, $data);
|
||||
|
||||
static::assertTrue($ecdsa->verify($key, $data, $signature));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers \Jose\Component\Signature\Algorithm\ES256
|
||||
*/
|
||||
public function badSignature(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
|
||||
'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
|
||||
]);
|
||||
|
||||
$ecdsa = new ES256();
|
||||
|
||||
$data = 'eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ';
|
||||
$signature = 'DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3';
|
||||
|
||||
static::assertFalse($ecdsa->verify($key, $data, Base64Url::decode($signature)));
|
||||
}
|
||||
}
|
||||
@@ -22,21 +22,5 @@
|
||||
"require": {
|
||||
"ext-openssl": "*",
|
||||
"web-token/jwt-signature": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit
|
||||
backupGlobals="false"
|
||||
backupStaticAttributes="false"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
syntaxCheck="true"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true">
|
||||
<testsuites>
|
||||
<testsuite name="Test Suite">
|
||||
<directory>./Tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">./</directory>
|
||||
<exclude>
|
||||
<directory>./vendor</directory>
|
||||
<directory>./Tests</directory>
|
||||
<directory suffix="Test.php">./src</directory>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
@@ -1,317 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use Jose\Component\Core\AlgorithmManager;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm\HS256;
|
||||
use Jose\Component\Signature\JWSBuilder;
|
||||
use Jose\Component\Signature\JWSVerifier;
|
||||
use Jose\Component\Signature\Serializer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.4
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.5
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.6
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.7
|
||||
*
|
||||
* @group HMAC
|
||||
* @group RFC7520
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class HMACFromRFC7520Test extends TestCase
|
||||
{
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.4
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function hS256(): void
|
||||
{
|
||||
/*
|
||||
* Payload
|
||||
* Symmetric Key
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-3.5
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.4.1
|
||||
*/
|
||||
$payload = "It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to.";
|
||||
$key = new JWK([
|
||||
'kty' => 'oct',
|
||||
'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
|
||||
'use' => 'sig',
|
||||
'alg' => 'HS256',
|
||||
'k' => 'hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg',
|
||||
]);
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.4.2
|
||||
*/
|
||||
$header = [
|
||||
'alg' => 'HS256',
|
||||
'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
|
||||
];
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new HS256()])
|
||||
);
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new HS256()])
|
||||
);
|
||||
$compactSerializer = new Serializer\CompactSerializer(
|
||||
);
|
||||
$jsonFlattenedSerializer = new Serializer\JSONFlattenedSerializer(
|
||||
);
|
||||
$jsonGeneralSerializer = new Serializer\JSONGeneralSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload($payload)
|
||||
->addSignature($key, $header)
|
||||
->build()
|
||||
;
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.4.3
|
||||
*/
|
||||
$expected_compact_json = 'eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9.SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4.s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0';
|
||||
$expected_flattened_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","protected":"eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9","signature":"s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"}';
|
||||
$expected_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","signatures":[{"protected":"eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9","signature":"s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"}]}';
|
||||
|
||||
static::assertEquals($expected_compact_json, $compactSerializer->serialize($jws, 0));
|
||||
|
||||
// We decode the json to compare the 2 arrays otherwise the test may fail as the order may be different
|
||||
static::assertEquals(json_decode($expected_flattened_json, true), json_decode($jsonFlattenedSerializer->serialize($jws, 0), true));
|
||||
static::assertEquals(json_decode($expected_json, true), json_decode($jsonGeneralSerializer->serialize($jws, 0), true));
|
||||
|
||||
$loaded_compact_json = $compactSerializer->unserialize($expected_compact_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_compact_json, $key, 0));
|
||||
|
||||
$loaded_flattened_json = $jsonFlattenedSerializer->unserialize($expected_flattened_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_flattened_json, $key, 0));
|
||||
|
||||
$loaded_json = $jsonGeneralSerializer->unserialize($expected_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_json, $key, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.5
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function hS256WithDetachedPayload(): void
|
||||
{
|
||||
/*
|
||||
* Payload
|
||||
* Symmetric Key
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-3.5
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.5.1
|
||||
*/
|
||||
$payload = "It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to.";
|
||||
$key = new JWK([
|
||||
'kty' => 'oct',
|
||||
'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
|
||||
'use' => 'sig',
|
||||
'alg' => 'HS256',
|
||||
'k' => 'hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg',
|
||||
]);
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.5.2
|
||||
*/
|
||||
$header = [
|
||||
'alg' => 'HS256',
|
||||
'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
|
||||
];
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new HS256()])
|
||||
);
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new HS256()])
|
||||
);
|
||||
$compactSerializer = new Serializer\CompactSerializer(
|
||||
);
|
||||
$jsonFlattenedSerializer = new Serializer\JSONFlattenedSerializer(
|
||||
);
|
||||
$jsonGeneralSerializer = new Serializer\JSONGeneralSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload($payload, true)
|
||||
->addSignature($key, $header)
|
||||
->build()
|
||||
;
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.5.3
|
||||
*/
|
||||
$expected_compact_json = 'eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9..s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0';
|
||||
$expected_flattened_json = '{"protected":"eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9","signature":"s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"}';
|
||||
$expected_json = '{"signatures":[{"protected":"eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9","signature":"s0h6KThzkfBBBkLspW1h84VsJZFTsPPqMDA7g1Md7p0"}]}';
|
||||
|
||||
static::assertEquals($expected_compact_json, $compactSerializer->serialize($jws, 0));
|
||||
|
||||
// We decode the json to compare the 2 arrays otherwise the test may fail as the order may be different
|
||||
static::assertEquals(json_decode($expected_flattened_json, true), json_decode($jsonFlattenedSerializer->serialize($jws, 0), true));
|
||||
|
||||
static::assertEquals(json_decode($expected_json, true), json_decode($jsonGeneralSerializer->serialize($jws, 0), true));
|
||||
|
||||
$loaded_compact_json = $compactSerializer->unserialize($expected_compact_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_compact_json, $key, 0, $payload));
|
||||
|
||||
$loaded_flattened_json = $jsonFlattenedSerializer->unserialize($expected_flattened_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_flattened_json, $key, 0, $payload));
|
||||
|
||||
$loaded_json = $jsonGeneralSerializer->unserialize($expected_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_json, $key, 0, $payload));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.6
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function hS256WithUnprotectedHeader(): void
|
||||
{
|
||||
/*
|
||||
* Payload
|
||||
* Symmetric Key
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-3.5
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.6.1
|
||||
*/
|
||||
$payload = "It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to.";
|
||||
$key = new JWK([
|
||||
'kty' => 'oct',
|
||||
'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
|
||||
'use' => 'sig',
|
||||
'alg' => 'HS256',
|
||||
'k' => 'hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg',
|
||||
]);
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.6.2
|
||||
*/
|
||||
$protectedHeader = [
|
||||
'alg' => 'HS256',
|
||||
];
|
||||
$unprotectedHeader = [
|
||||
'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
|
||||
];
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new HS256()])
|
||||
);
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new HS256()])
|
||||
);
|
||||
$compactSerializer = new Serializer\CompactSerializer(
|
||||
);
|
||||
$jsonFlattenedSerializer = new Serializer\JSONFlattenedSerializer(
|
||||
);
|
||||
$jsonGeneralSerializer = new Serializer\JSONGeneralSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload($payload)
|
||||
->addSignature($key, $protectedHeader, $unprotectedHeader)
|
||||
->build()
|
||||
;
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.6.3
|
||||
*/
|
||||
$expected_flattened_json = '{"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","protected": "eyJhbGciOiJIUzI1NiJ9","header": {"kid": "018c0ae5-4d9b-471b-bfd6-eef314bc7037"},"signature": "bWUSVaxorn7bEF1djytBd0kHv70Ly5pvbomzMWSOr20"}';
|
||||
$expected_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","signatures":[{"protected":"eyJhbGciOiJIUzI1NiJ9","header":{"kid":"018c0ae5-4d9b-471b-bfd6-eef314bc7037"},"signature":"bWUSVaxorn7bEF1djytBd0kHv70Ly5pvbomzMWSOr20"}]}';
|
||||
|
||||
// We decode the json to compare the 2 arrays otherwise the test may fail as the order may be different
|
||||
static::assertEquals(json_decode($expected_flattened_json, true), json_decode($jsonFlattenedSerializer->serialize($jws, 0), true));
|
||||
static::assertEquals(json_decode($expected_json, true), json_decode($jsonGeneralSerializer->serialize($jws, 0), true));
|
||||
|
||||
$loaded_flattened_json = $jsonFlattenedSerializer->unserialize($expected_flattened_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_flattened_json, $key, 0));
|
||||
|
||||
$loaded_json = $jsonGeneralSerializer->unserialize($expected_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_json, $key, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.7
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function hS256WithoutProtectedHeader(): void
|
||||
{
|
||||
/*
|
||||
* Payload
|
||||
* Symmetric Key
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-3.5
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.7.1
|
||||
*/
|
||||
$payload = "It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to.";
|
||||
$key = new JWK([
|
||||
'kty' => 'oct',
|
||||
'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
|
||||
'use' => 'sig',
|
||||
'alg' => 'HS256',
|
||||
'k' => 'hJtXIZ2uSN5kbQfbtTNWbpdmhkV8FJG-Onbc6mxCcYg',
|
||||
]);
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.7.2
|
||||
*/
|
||||
$unprotectedHeader = [
|
||||
'alg' => 'HS256',
|
||||
'kid' => '018c0ae5-4d9b-471b-bfd6-eef314bc7037',
|
||||
];
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new HS256()])
|
||||
);
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new HS256()])
|
||||
);
|
||||
$jsonFlattenedSerializer = new Serializer\JSONFlattenedSerializer(
|
||||
);
|
||||
$jsonGeneralSerializer = new Serializer\JSONGeneralSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload($payload)
|
||||
->addSignature($key, [], $unprotectedHeader)
|
||||
->build()
|
||||
;
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.7.3
|
||||
*/
|
||||
$expected_flattened_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","header":{"alg":"HS256","kid":"018c0ae5-4d9b-471b-bfd6-eef314bc7037"},"signature":"xuLifqLGiblpv9zBpuZczWhNj1gARaLV3UxvxhJxZuk"}';
|
||||
$expected_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","signatures":[{"header":{"alg":"HS256","kid":"018c0ae5-4d9b-471b-bfd6-eef314bc7037"},"signature":"xuLifqLGiblpv9zBpuZczWhNj1gARaLV3UxvxhJxZuk"}]}';
|
||||
|
||||
// We decode the json to compare the 2 arrays otherwise the test may fail as the order may be different
|
||||
static::assertEquals(json_decode($expected_flattened_json, true), json_decode($jsonFlattenedSerializer->serialize($jws, 0), true));
|
||||
static::assertEquals(json_decode($expected_json, true), json_decode($jsonGeneralSerializer->serialize($jws, 0), true));
|
||||
|
||||
$loaded_flattened_json = $jsonFlattenedSerializer->unserialize($expected_flattened_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_flattened_json, $key, 0));
|
||||
|
||||
$loaded_json = $jsonGeneralSerializer->unserialize($expected_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_json, $key, 0));
|
||||
}
|
||||
}
|
||||
@@ -1,116 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm\HS256;
|
||||
use Jose\Component\Signature\Algorithm\HS384;
|
||||
use Jose\Component\Signature\Algorithm\HS512;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @group HMAC
|
||||
* @group unit
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class HMACSignatureTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function invalidKey(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('Wrong key type.');
|
||||
$key = new JWK([
|
||||
'kty' => 'EC',
|
||||
]);
|
||||
|
||||
$hmac = new HS256();
|
||||
$data = 'Live long and Prosper.';
|
||||
|
||||
$hmac->hash($key, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function signatureHasBadBadLength(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'oct',
|
||||
'k' => 'foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo',
|
||||
]);
|
||||
$hmac = new HS256();
|
||||
$data = 'Live long and Prosper.';
|
||||
|
||||
static::assertFalse($hmac->verify($key, $data, hex2bin('326eb338c465d3587f3349df0b96ba81')));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function hS256SignAndVerify(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'oct',
|
||||
'k' => 'foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo',
|
||||
]);
|
||||
$hmac = new HS256();
|
||||
$data = 'Live long and Prosper.';
|
||||
|
||||
$signature = $hmac->hash($key, $data);
|
||||
|
||||
static::assertEquals(hex2bin('7ed268ef179f530a4a1c56225c352a6782cf5379085c484b4f355b6744d6f19d'), $signature);
|
||||
static::assertTrue($hmac->verify($key, $data, $signature));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function hS384SignAndVerify(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'oct',
|
||||
'k' => 'foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo',
|
||||
]);
|
||||
$hmac = new HS384();
|
||||
$data = 'Live long and Prosper.';
|
||||
|
||||
$signature = $hmac->hash($key, $data);
|
||||
|
||||
static::assertEquals(hex2bin('903ce2ef2878090d6117f88210d5a822d260fae66760186cb3326770748b9fa47c2d4531a4d5d868f99bcf7ea45c1ab4'), $signature);
|
||||
static::assertTrue($hmac->verify($key, $data, $signature));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function hS512SignAndVerify(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'oct',
|
||||
'k' => 'foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo',
|
||||
]);
|
||||
$hmac = new HS512();
|
||||
$data = 'Live long and Prosper.';
|
||||
|
||||
$signature = $hmac->hash($key, $data);
|
||||
|
||||
static::assertEquals(hex2bin('e8b36712b6c6dc422eec77f31ce372ccac769450413238158bd702069630456a148d0c10dd3a661a774217fb90b0d5f94fa6c3c985438bade92ff975b9e4dc04'), $signature);
|
||||
static::assertTrue($hmac->verify($key, $data, $signature));
|
||||
}
|
||||
}
|
||||
@@ -21,21 +21,5 @@
|
||||
},
|
||||
"require": {
|
||||
"web-token/jwt-signature": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit
|
||||
backupGlobals="false"
|
||||
backupStaticAttributes="false"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
syntaxCheck="true"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true">
|
||||
<testsuites>
|
||||
<testsuite name="Test Suite">
|
||||
<directory>./Tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">./</directory>
|
||||
<exclude>
|
||||
<directory>./vendor</directory>
|
||||
<directory>./Tests</directory>
|
||||
<directory suffix="Test.php">./src</directory>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
@@ -1,109 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use Jose\Component\Core\AlgorithmManager;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm\RS256;
|
||||
use Jose\Component\Signature\JWSBuilder;
|
||||
use Jose\Component\Signature\JWSVerifier;
|
||||
use Jose\Component\Signature\Serializer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.1
|
||||
*
|
||||
* @group RFC7520
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class RSA15SignatureTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function rS256(): void
|
||||
{
|
||||
/*
|
||||
* Payload,
|
||||
* RSA private key
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-3.4
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.1.1
|
||||
*/
|
||||
$payload = "It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to.";
|
||||
$privateKey = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'kid' => 'bilbo.baggins@hobbiton.example',
|
||||
'use' => 'sig',
|
||||
'n' => 'n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'bWUC9B-EFRIo8kpGfh0ZuyGPvMNKvYWNtB_ikiH9k20eT-O1q_I78eiZkpXxXQ0UTEs2LsNRS-8uJbvQ-A1irkwMSMkK1J3XTGgdrhCku9gRldY7sNA_AKZGh-Q661_42rINLRCe8W-nZ34ui_qOfkLnK9QWDDqpaIsA-bMwWWSDFu2MUBYwkHTMEzLYGqOe04noqeq1hExBTHBOBdkMXiuFhUq1BU6l-DqEiWxqg82sXt2h-LMnT3046AOYJoRioz75tSUQfGCshWTBnP5uDjd18kKhyv07lhfSJdrPdM5Plyl21hsFf4L_mHCuoFau7gdsPfHPxxjVOcOpBrQzwQ',
|
||||
'p' => '3Slxg_DwTXJcb6095RoXygQCAZ5RnAvZlno1yhHtnUex_fp7AZ_9nRaO7HX_-SFfGQeutao2TDjDAWU4Vupk8rw9JR0AzZ0N2fvuIAmr_WCsmGpeNqQnev1T7IyEsnh8UMt-n5CafhkikzhEsrmndH6LxOrvRJlsPp6Zv8bUq0k',
|
||||
'q' => 'uKE2dh-cTf6ERF4k4e_jy78GfPYUIaUyoSSJuBzp3Cubk3OCqs6grT8bR_cu0Dm1MZwWmtdqDyI95HrUeq3MP15vMMON8lHTeZu2lmKvwqW7anV5UzhM1iZ7z4yMkuUwFWoBvyY898EXvRD-hdqRxHlSqAZ192zB3pVFJ0s7pFc',
|
||||
'dp' => 'B8PVvXkvJrj2L-GYQ7v3y9r6Kw5g9SahXBwsWUzp19TVlgI-YV85q1NIb1rxQtD-IsXXR3-TanevuRPRt5OBOdiMGQp8pbt26gljYfKU_E9xn-RULHz0-ed9E9gXLKD4VGngpz-PfQ_q29pk5xWHoJp009Qf1HvChixRX59ehik',
|
||||
'dq' => 'CLDmDGduhylc9o7r84rEUVn7pzQ6PF83Y-iBZx5NT-TpnOZKF1pErAMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJKbi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdKT1cYF8',
|
||||
'qi' => '3PiqvXQN0zwMeE-sBvZgi289XP9XCQF3VWqPzMKnIgQp7_Tugo6-NZBKCQsMf3HaEGBjTVJs_jcK8-TRXvaKe-7ZMaQj8VfBdYkssbu0NKDDhjJ-GtiseaDVWt7dcH0cfwxgFUHpQh7FoCrjFJ6h6ZEpMF6xmujs4qMpPz8aaI4',
|
||||
]);
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.1.2
|
||||
*/
|
||||
$header = [
|
||||
'alg' => 'RS256',
|
||||
'kid' => 'bilbo.baggins@hobbiton.example',
|
||||
];
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new RS256()])
|
||||
);
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new RS256()])
|
||||
);
|
||||
$compactSerializer = new Serializer\CompactSerializer(
|
||||
);
|
||||
$jsonFlattenedSerializer = new Serializer\JSONFlattenedSerializer(
|
||||
);
|
||||
$jsonGeneralSerializer = new Serializer\JSONGeneralSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload($payload)
|
||||
->addSignature($privateKey, $header)
|
||||
->build()
|
||||
;
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.1.3
|
||||
*/
|
||||
$expected_compact_json = 'eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9.SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4.MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmKZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4JIwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_fcIe8u9ipH84ogoree7vjbU5y18kDquDg';
|
||||
$expected_flattened_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","protected":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9","signature":"MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmKZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4JIwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_fcIe8u9ipH84ogoree7vjbU5y18kDquDg"}';
|
||||
$expected_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","signatures":[{"protected":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9","signature":"MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmKZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4JIwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8wW1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluPxUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_fcIe8u9ipH84ogoree7vjbU5y18kDquDg"}]}';
|
||||
|
||||
static::assertEquals($expected_compact_json, $compactSerializer->serialize($jws, 0));
|
||||
|
||||
// We decode the json to compare the 2 arrays otherwise the test may fail as the order may be different
|
||||
static::assertEquals(json_decode($expected_flattened_json, true), json_decode($jsonFlattenedSerializer->serialize($jws, 0), true));
|
||||
static::assertEquals(json_decode($expected_json, true), json_decode($jsonGeneralSerializer->serialize($jws, 0), true));
|
||||
|
||||
$loaded_compact_json = $compactSerializer->unserialize($expected_compact_json);
|
||||
$jwsVerifier->verifyWithKey($loaded_compact_json, $privateKey, 0);
|
||||
|
||||
$loaded_flattened_json = $jsonFlattenedSerializer->unserialize($expected_flattened_json);
|
||||
$jwsVerifier->verifyWithKey($loaded_flattened_json, $privateKey, 0);
|
||||
|
||||
$loaded_json = $jsonGeneralSerializer->unserialize($expected_json);
|
||||
$jwsVerifier->verifyWithKey($loaded_json, $privateKey, 0);
|
||||
}
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use Jose\Component\Core\AlgorithmManager;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm;
|
||||
use Jose\Component\Signature\JWSBuilder;
|
||||
use Jose\Component\Signature\JWSVerifier;
|
||||
use Jose\Component\Signature\Serializer\CompactSerializer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @group RSA2
|
||||
* @group unit
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class RSAKeyWithoutAllPrimesTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider dataSignatureAlgorithms
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function signatureAlgorithms(string $signature_algorithm): void
|
||||
{
|
||||
$algorithm = new $signature_algorithm();
|
||||
$key = $this->getPrivateKey();
|
||||
|
||||
$claims = json_encode(['foo' => 'bar']);
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([$algorithm])
|
||||
);
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([$algorithm])
|
||||
);
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload($claims)
|
||||
->addSignature($key, ['alg' => $algorithm->name()])
|
||||
->build()
|
||||
;
|
||||
$jws = $serializer->serialize($jws, 0);
|
||||
|
||||
$loaded = $serializer->unserialize($jws);
|
||||
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded, $key, 0));
|
||||
}
|
||||
|
||||
public function dataSignatureAlgorithms(): array
|
||||
{
|
||||
return [
|
||||
[Algorithm\RS256::class],
|
||||
[Algorithm\RS384::class],
|
||||
[Algorithm\RS512::class],
|
||||
[Algorithm\PS256::class],
|
||||
[Algorithm\PS384::class],
|
||||
[Algorithm\PS512::class],
|
||||
];
|
||||
}
|
||||
|
||||
public function dataSignatureAlgorithmsWithSimpleKey(): array
|
||||
{
|
||||
return [
|
||||
[Algorithm\PS256::class],
|
||||
[Algorithm\PS384::class],
|
||||
[Algorithm\PS512::class],
|
||||
];
|
||||
}
|
||||
|
||||
private function getPrivateKey(): JWK
|
||||
{
|
||||
return new JWK([
|
||||
'kty' => 'RSA',
|
||||
'kid' => 'private',
|
||||
'n' => '2NRPORHXd7wPU6atHqmSfWgEPvsP8HVUkY2AwQQAc8x1J509X5HFxeSXnQym9eAnZHl0JCPbvHoPH4QHlvITYoh0MSgFm2aOPyqOD-XcNdKWtnNX2JIurUCyVlwSwtlmy2ZbCz8YuUmFO0iacahfK1wbWT5QoY-pU3UxnMzDhlBslZN5uL7nRE8Sh_8BthsrMdYeGIMY55kh-P7xTs3MHzpOKhFSrOhdN6aO3HWYUuMAdoMNB-hJvckb2PbCy0_K1Wm3SBHtXn-cuMIUF00W9AR3amp3u3hLa2rcz29jEFXTr2FxKyLH4SdlnFFMJl2vaXuxM4PXgLN33Kj34PfKgc8ljDJ7oaSI9bKt7gunXOLv_o4XWYDq91cvUkOIDAsvqxzzHPZBt0Hru7roW3btkUOiqR6RWy-Cw272yiSEC5QA93m_vklD1KajoFeWN0BW2lWGlfGieZldvKX0sumk1TZuLhlHPHSKYcpeCfahT-jLr1yAeHql6qRN_a0BiHu-SSSjts6InmF1pAELznZ3Jn9-QXX78LsY3xaqOlYqHbCohxXorlYRi4so6eMGILtXjqHOoISb13Ez4YNOQmV4ygmyABRkE0AQG5KLy5cZB7LZn7zqw869UjXxWrmiOaBeDqOkxww6qiWIEDwPIouRLwOfPFtC4LGlb9LmG9Hlhp8',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'PsMls2VAsz3SSepjDg8Tgg1LvVc6w-WSdxc4f6ZC40H5X2AaVcGCN8f1QtZYta8Od_zX62Ydwq6qFftHnx-vEMRirZ_iD5td7VbKDDwCw-mTCnjUorGdpTSm6mx4WcJICPQ1wkmfRHLNh916JxAPjCN7Hxf0iu9kme3AUJzMs-IvrBQmFZ3cn18sBAWCX0358NEDoSDBYrhmpwZUnvTe8uMToQWmoroX0XX6wEGht8xRY_yHFxTb032U-_ZhaCxOj_uru8bEqKfTm39CBYSg8j0gu8LZqYAmhI9IHxsk16OgRJG2CkBlDv0yYk799dUEY0oUfs7Y4D4SoeKe7ZWMHgKMEqa7ONz18ORznxqKSQhi4hfNVgwMzaM0IoYP4KOfHuaK263zhJU0hMzURJ8KifECeOsDHBR6BhLJ9TYzUe4c9UU55nFNgRBwknKHFFrRAsgVETEzmZWHzWwGQIFtKIAVZ1cjkdMEL3BlbzzXVofXfbbCrPQqcABYx2BZ-J_P8-UFjeMo83VLrR5IHj0_8IhQZUmxZYJcpTIwrf-1A4JGlN2_eLqRymF8tZI6zIPJyo1C0M1CIB3EeHzi-70SbF8xFtGUB7hR234yo_SM-KqVdIk2Sjjta2bQ1KXjSEcvrS_358AMiP0-9JT_fHxTCyzra-SNYoZhdnrEFzoVwQE',
|
||||
'p' => '6fWvnj34kJtfMnO1j-qbPjFnaTevREBGAypMvUBU3Fx1Xx0nE7zdc7lln2Qq5-yTQtOQ2lpiE69HkQLR4pMU6V44SjFgVzcTzbFCnNgknEV54S5dyp4KojSWxBi6bt5GwaACkiElDEw9wgc-8JgaEkv4F7e-w44HBwPDECTjE_N0vIawpbD_y6zpifB8ziaAI3xTG4ssA1dt8WZuyQW8SR4FRsYnfkqy0twwHn02gs7XSl4NepkhSO7CY5-YC3U6LazAEZi2NTiUuZSw7F6KaRhsA8CnXTDE5JqFks_fXfLNCbtClON2JtrB1zY-l-2bHyh2a6unDtGn9ZN-Ec7BXw',
|
||||
'q' => '7UF_NblAyTxmj7Z2Jz1sZmz-Q3YHOcta00DjmHBhR9ItYRMQFMj-SUGPAtwvN-sk3_ThugaQt46SLT_I3Gy8433cHdW7o3So6HiMYVunyfhqnWznSWs6SvIoEh8rJOXkkIZ-DlRP8XyW5OOvi0cbWEQ1f1jbFyistMmnBClPvf2TKKPvShUl9qmvLxuU87j-_bgQmjVmtwZadnPOyPAxQ4_qqSfIiTOvMSxSycr58rTyu3khHQapGHkS5-2Y_w40GUSfVJ3XP48delYpK-PZP71hn89MJTnnfPOtvJAk1wbEev5wQFTJd-PGOudkGkuEIXryF4TGxRPltl5UeF0CwQ',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use Jose\Component\Core\AlgorithmManager;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Signature\Algorithm\PS384;
|
||||
use Jose\Component\Signature\JWSBuilder;
|
||||
use Jose\Component\Signature\JWSVerifier;
|
||||
use Jose\Component\Signature\Serializer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.2
|
||||
*
|
||||
* @group RFC7520
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class RSAPSSSignatureTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Please note that we cannot create the signature and get the same result as the example (RSA-PSS signatures are always different).
|
||||
* This test case create a signature and verifies it.
|
||||
* Then the output given in the RFC is used and verified.
|
||||
* This way, we can say that the library is able to create/verify RSA-PSS signatures and verify signature from test vectors.
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function pS384(): void
|
||||
{
|
||||
/*
|
||||
* Payload,
|
||||
* RSA private key
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-3.4
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.2.1
|
||||
*/
|
||||
$payload = "It\xe2\x80\x99s a dangerous business, Frodo, going out your door. You step onto the road, and if you don't keep your feet, there\xe2\x80\x99s no knowing where you might be swept off to.";
|
||||
$privateKey = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'kid' => 'bilbo.baggins@hobbiton.example',
|
||||
'use' => 'sig',
|
||||
'n' => 'n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'bWUC9B-EFRIo8kpGfh0ZuyGPvMNKvYWNtB_ikiH9k20eT-O1q_I78eiZkpXxXQ0UTEs2LsNRS-8uJbvQ-A1irkwMSMkK1J3XTGgdrhCku9gRldY7sNA_AKZGh-Q661_42rINLRCe8W-nZ34ui_qOfkLnK9QWDDqpaIsA-bMwWWSDFu2MUBYwkHTMEzLYGqOe04noqeq1hExBTHBOBdkMXiuFhUq1BU6l-DqEiWxqg82sXt2h-LMnT3046AOYJoRioz75tSUQfGCshWTBnP5uDjd18kKhyv07lhfSJdrPdM5Plyl21hsFf4L_mHCuoFau7gdsPfHPxxjVOcOpBrQzwQ',
|
||||
'p' => '3Slxg_DwTXJcb6095RoXygQCAZ5RnAvZlno1yhHtnUex_fp7AZ_9nRaO7HX_-SFfGQeutao2TDjDAWU4Vupk8rw9JR0AzZ0N2fvuIAmr_WCsmGpeNqQnev1T7IyEsnh8UMt-n5CafhkikzhEsrmndH6LxOrvRJlsPp6Zv8bUq0k',
|
||||
'q' => 'uKE2dh-cTf6ERF4k4e_jy78GfPYUIaUyoSSJuBzp3Cubk3OCqs6grT8bR_cu0Dm1MZwWmtdqDyI95HrUeq3MP15vMMON8lHTeZu2lmKvwqW7anV5UzhM1iZ7z4yMkuUwFWoBvyY898EXvRD-hdqRxHlSqAZ192zB3pVFJ0s7pFc',
|
||||
'dp' => 'B8PVvXkvJrj2L-GYQ7v3y9r6Kw5g9SahXBwsWUzp19TVlgI-YV85q1NIb1rxQtD-IsXXR3-TanevuRPRt5OBOdiMGQp8pbt26gljYfKU_E9xn-RULHz0-ed9E9gXLKD4VGngpz-PfQ_q29pk5xWHoJp009Qf1HvChixRX59ehik',
|
||||
'dq' => 'CLDmDGduhylc9o7r84rEUVn7pzQ6PF83Y-iBZx5NT-TpnOZKF1pErAMVeKzFEl41DlHHqqBLSM0W1sOFbwTxYWZDm6sI6og5iTbwQGIC3gnJKbi_7k_vJgGHwHxgPaX2PnvP-zyEkDERuf-ry4c_Z11Cq9AqC2yeL6kdKT1cYF8',
|
||||
'qi' => '3PiqvXQN0zwMeE-sBvZgi289XP9XCQF3VWqPzMKnIgQp7_Tugo6-NZBKCQsMf3HaEGBjTVJs_jcK8-TRXvaKe-7ZMaQj8VfBdYkssbu0NKDDhjJ-GtiseaDVWt7dcH0cfwxgFUHpQh7FoCrjFJ6h6ZEpMF6xmujs4qMpPz8aaI4',
|
||||
]);
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.2.2
|
||||
*/
|
||||
$header = [
|
||||
'alg' => 'PS384',
|
||||
'kid' => 'bilbo.baggins@hobbiton.example',
|
||||
];
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new PS384()])
|
||||
);
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new PS384()])
|
||||
);
|
||||
$compactSerializer = new Serializer\CompactSerializer(
|
||||
);
|
||||
$jsonFlattenedSerializer = new Serializer\JSONFlattenedSerializer(
|
||||
);
|
||||
$jsonGeneralSerializer = new Serializer\JSONGeneralSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload($payload)
|
||||
->addSignature($privateKey, $header)
|
||||
->build()
|
||||
;
|
||||
|
||||
$jwsVerifier->verifyWithKey($jws, $privateKey, 0);
|
||||
|
||||
/*
|
||||
* Header
|
||||
* @see https://tools.ietf.org/html/rfc7520#section-4.2.3
|
||||
*/
|
||||
$expected_compact_json = 'eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9.SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4.cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42miAh2qyBzk1xEsnk2IpN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllVo6_1OLPpcbUrhiUSMxbbXUvdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRXe8P_ijQ7p8Vdz0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT0qI0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw';
|
||||
$expected_flattened_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","protected":"eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9","signature":"cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42miAh2qyBzk1xEsnk2IpN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllVo6_1OLPpcbUrhiUSMxbbXUvdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRXe8P_ijQ7p8Vdz0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT0qI0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw"}';
|
||||
$expected_json = '{"payload":"SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4","signatures":[{"protected":"eyJhbGciOiJQUzM4NCIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9","signature":"cu22eBqkYDKgIlTpzDXGvaFfz6WGoz7fUDcfT0kkOy42miAh2qyBzk1xEsnk2IpN6-tPid6VrklHkqsGqDqHCdP6O8TTB5dDDItllVo6_1OLPpcbUrhiUSMxbbXUvdvWXzg-UD8biiReQFlfz28zGWVsdiNAUf8ZnyPEgVFn442ZdNqiVJRmBqrYRXe8P_ijQ7p8Vdz0TTrxUeT3lm8d9shnr2lfJT8ImUjvAA2Xez2Mlp8cBE5awDzT0qI0n6uiP1aCN_2_jLAeQTlqRHtfa64QQSUmFAAjVKPbByi7xho0uTOcbH510a6GYmJUAfmWjwZ6oD4ifKo8DYM-X72Eaw"}]}';
|
||||
|
||||
$loaded_compact_json = $compactSerializer->unserialize($expected_compact_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_compact_json, $privateKey, 0));
|
||||
|
||||
$loaded_flattened_json = $jsonFlattenedSerializer->unserialize($expected_flattened_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_flattened_json, $privateKey, 0));
|
||||
|
||||
$loaded_json = $jsonGeneralSerializer->unserialize($expected_json);
|
||||
static::assertTrue($jwsVerifier->verifyWithKey($loaded_json, $privateKey, 0));
|
||||
}
|
||||
}
|
||||
@@ -1,599 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2020 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Jose\Component\Signature\Algorithm\Tests;
|
||||
|
||||
use Base64Url\Base64Url;
|
||||
use InvalidArgumentException;
|
||||
use Jose\Component\Core\AlgorithmManager;
|
||||
use Jose\Component\Core\JWK;
|
||||
use Jose\Component\Core\JWKSet;
|
||||
use Jose\Component\Signature\Algorithm;
|
||||
use Jose\Component\Signature\JWSBuilder;
|
||||
use Jose\Component\Signature\JWSVerifier;
|
||||
use Jose\Component\Signature\Serializer\CompactSerializer;
|
||||
use Jose\Component\Signature\Serializer\JSONGeneralSerializer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @group RSA
|
||||
* @group unit
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class RSASignatureTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function completeRS256Sign(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
'p' => '5BGU1c7af_5sFyfsa-onIJgo5BZu8uHvz3Uyb8OA0a-G9UPO1ShLYjX0wUfhZcFB7fwPtgmmYAN6wKGVce9eMAbX4PliPk3r-BcpZuPKkuLk_wFvgWAQ5Hqw2iEuwXLV0_e8c2gaUt_hyMC5-nFc4v0Bmv6NT6Pfry-UrK3BKWc',
|
||||
'd' => 'Kp0KuZwCZGL1BLgsVM-N0edMNitl9wN5Hf2WOYDoIqOZNAEKzdJuenIMhITJjRFUX05GVL138uyp2js_pqDdY9ipA7rAKThwGuDdNphZHech9ih3DGEPXs-YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1_BpJthrFxjDRhw9DxJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEmtGoJnd9RE4oywKhgN7_TK7wXRlqA4UoRPiH2ACrdU-_cLQL9Jc0u0GqZJK31LDbOeN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn-CAQ',
|
||||
'q' => 'zPD-B-nrngwF-O99BHvb47XGKR7ON8JCI6JxavzIkusMXCB8rMyYW8zLs68L8JLAzWZ34oMq0FPUnysBxc5nTF8Nb4BZxTZ5-9cHfoKrYTI3YWsmVW2FpCJFEjMs4NXZ28PBkS9b4zjfS2KhNdkmCeOYU0tJpNfwmOTI90qeUdU',
|
||||
'dp' => 'aJrzw_kjWK9uDlTeaES2e4muv6bWbopYfrPHVWG7NPGoGdhnBnd70-jhgMEiTZSNU8VXw2u7prAR3kZ-kAp1DdwlqedYOzFsOJcPA0UZhbORyrBy30kbll_7u6CanFm6X4VyJxCpejd7jKNw6cCTFP1sfhWg5NVJ5EUTkPwE66M',
|
||||
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
|
||||
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
|
||||
]);
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new Algorithm\RS256()])
|
||||
);
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload('Live long and Prosper.')
|
||||
->addSignature(
|
||||
$key,
|
||||
[
|
||||
'alg' => 'RS256',
|
||||
'jwk' => [
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
],
|
||||
]
|
||||
)
|
||||
->build()
|
||||
;
|
||||
|
||||
static::assertEquals('eyJhbGciOiJSUzI1NiIsImp3ayI6eyJrdHkiOiJSU0EiLCJuIjoidHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3IiwiZSI6IkFRQUIifX0.TGl2ZSBsb25nIGFuZCBQcm9zcGVyLg.QyRlOCcNBMvCEkJRCQA71y2bVX690g0A6wsC2YXf9_VxOYK-g9-xy-1KjghVXkDPe1gDvYSYnL9oWs1PaFKV0_-ijvvJQE6_5pheKTfIVN3Qbkzjxsm4qXTeChBI5MKeBR8z8iWLFT4xPO8NkelwbS2tSUCHrejio6lDDlWhsqSUP8NjHJhqCSZuCDGu3fMMA24cZrYev3tQRc7HHjyi3q_17NZri7feBd7w3NEDkJp7wT_ZclJrYoucHIo1ypaDPJtM-W1-W-lAVREka6Xq4Bg60zdSZ83ODRQTP_IwQrv7hrIcbrRwn1Za_ORZPRPQDP0CMgkb7TkWDZnbPsAzlQ', $serializer->serialize($jws, 0));
|
||||
$jws = $serializer->serialize($jws, 0);
|
||||
$result = $serializer->unserialize($jws);
|
||||
|
||||
static::assertEquals('Live long and Prosper.', $result->getPayload());
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('RS256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function completeRS256SignWithDetachedPayload(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
'p' => '5BGU1c7af_5sFyfsa-onIJgo5BZu8uHvz3Uyb8OA0a-G9UPO1ShLYjX0wUfhZcFB7fwPtgmmYAN6wKGVce9eMAbX4PliPk3r-BcpZuPKkuLk_wFvgWAQ5Hqw2iEuwXLV0_e8c2gaUt_hyMC5-nFc4v0Bmv6NT6Pfry-UrK3BKWc',
|
||||
'd' => 'Kp0KuZwCZGL1BLgsVM-N0edMNitl9wN5Hf2WOYDoIqOZNAEKzdJuenIMhITJjRFUX05GVL138uyp2js_pqDdY9ipA7rAKThwGuDdNphZHech9ih3DGEPXs-YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1_BpJthrFxjDRhw9DxJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEmtGoJnd9RE4oywKhgN7_TK7wXRlqA4UoRPiH2ACrdU-_cLQL9Jc0u0GqZJK31LDbOeN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn-CAQ',
|
||||
'q' => 'zPD-B-nrngwF-O99BHvb47XGKR7ON8JCI6JxavzIkusMXCB8rMyYW8zLs68L8JLAzWZ34oMq0FPUnysBxc5nTF8Nb4BZxTZ5-9cHfoKrYTI3YWsmVW2FpCJFEjMs4NXZ28PBkS9b4zjfS2KhNdkmCeOYU0tJpNfwmOTI90qeUdU',
|
||||
'dp' => 'aJrzw_kjWK9uDlTeaES2e4muv6bWbopYfrPHVWG7NPGoGdhnBnd70-jhgMEiTZSNU8VXw2u7prAR3kZ-kAp1DdwlqedYOzFsOJcPA0UZhbORyrBy30kbll_7u6CanFm6X4VyJxCpejd7jKNw6cCTFP1sfhWg5NVJ5EUTkPwE66M',
|
||||
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
|
||||
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
|
||||
]);
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new Algorithm\RS256()])
|
||||
);
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload('Live long and Prosper.', true)
|
||||
->addSignature(
|
||||
$key,
|
||||
[
|
||||
'alg' => 'RS256',
|
||||
'jwk' => [
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
],
|
||||
]
|
||||
)
|
||||
->build()
|
||||
;
|
||||
|
||||
static::assertEquals('eyJhbGciOiJSUzI1NiIsImp3ayI6eyJrdHkiOiJSU0EiLCJuIjoidHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3IiwiZSI6IkFRQUIifX0..QyRlOCcNBMvCEkJRCQA71y2bVX690g0A6wsC2YXf9_VxOYK-g9-xy-1KjghVXkDPe1gDvYSYnL9oWs1PaFKV0_-ijvvJQE6_5pheKTfIVN3Qbkzjxsm4qXTeChBI5MKeBR8z8iWLFT4xPO8NkelwbS2tSUCHrejio6lDDlWhsqSUP8NjHJhqCSZuCDGu3fMMA24cZrYev3tQRc7HHjyi3q_17NZri7feBd7w3NEDkJp7wT_ZclJrYoucHIo1ypaDPJtM-W1-W-lAVREka6Xq4Bg60zdSZ83ODRQTP_IwQrv7hrIcbrRwn1Za_ORZPRPQDP0CMgkb7TkWDZnbPsAzlQ', $serializer->serialize($jws, 0));
|
||||
$jws = $serializer->serialize($jws, 0);
|
||||
$result = $serializer->unserialize($jws);
|
||||
|
||||
static::assertNull($result->getPayload());
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('RS256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function completeRS384Sign(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
'p' => '5BGU1c7af_5sFyfsa-onIJgo5BZu8uHvz3Uyb8OA0a-G9UPO1ShLYjX0wUfhZcFB7fwPtgmmYAN6wKGVce9eMAbX4PliPk3r-BcpZuPKkuLk_wFvgWAQ5Hqw2iEuwXLV0_e8c2gaUt_hyMC5-nFc4v0Bmv6NT6Pfry-UrK3BKWc',
|
||||
'd' => 'Kp0KuZwCZGL1BLgsVM-N0edMNitl9wN5Hf2WOYDoIqOZNAEKzdJuenIMhITJjRFUX05GVL138uyp2js_pqDdY9ipA7rAKThwGuDdNphZHech9ih3DGEPXs-YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1_BpJthrFxjDRhw9DxJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEmtGoJnd9RE4oywKhgN7_TK7wXRlqA4UoRPiH2ACrdU-_cLQL9Jc0u0GqZJK31LDbOeN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn-CAQ',
|
||||
'q' => 'zPD-B-nrngwF-O99BHvb47XGKR7ON8JCI6JxavzIkusMXCB8rMyYW8zLs68L8JLAzWZ34oMq0FPUnysBxc5nTF8Nb4BZxTZ5-9cHfoKrYTI3YWsmVW2FpCJFEjMs4NXZ28PBkS9b4zjfS2KhNdkmCeOYU0tJpNfwmOTI90qeUdU',
|
||||
'dp' => 'aJrzw_kjWK9uDlTeaES2e4muv6bWbopYfrPHVWG7NPGoGdhnBnd70-jhgMEiTZSNU8VXw2u7prAR3kZ-kAp1DdwlqedYOzFsOJcPA0UZhbORyrBy30kbll_7u6CanFm6X4VyJxCpejd7jKNw6cCTFP1sfhWg5NVJ5EUTkPwE66M',
|
||||
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
|
||||
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
|
||||
]);
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new Algorithm\RS384()])
|
||||
);
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload('Live long and Prosper.')
|
||||
->addSignature(
|
||||
$key,
|
||||
[
|
||||
'alg' => 'RS384',
|
||||
'jwk' => [
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
],
|
||||
]
|
||||
)
|
||||
->build()
|
||||
;
|
||||
|
||||
static::assertEquals('eyJhbGciOiJSUzM4NCIsImp3ayI6eyJrdHkiOiJSU0EiLCJuIjoidHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3IiwiZSI6IkFRQUIifX0.TGl2ZSBsb25nIGFuZCBQcm9zcGVyLg.gsBhyBOEDPpHBR8OM2Xb5tybKGeijREZN-smEkvI2188pytujFevbDQJ10afbcdjh5LNKO7U_VD3hGPrC7MIkdtJw4c2d0JnVyhiZT5sFnncnCFjll-Y9GkK7a7jWJJTgF_5LmVEeJSFEEgwT1Stxb-TtZCGqc5ExYizLiuQ2IGB6Sq-hTkpWAXJfmHchE_TxV9A4iLWCMTVM6LsLV6NzDtf2a0iu9XvN1MEdzqM7FNdqNCGN43FveTA0hX8OoFfB2ZjYAjbixUCT4VVI2PuuRyu_Lr8cA73eisolBQLQemPyrCo1s560v2tKD7ICS8Teo1PCJ4HnCuO8bvufI2dKA', $serializer->serialize($jws, 0));
|
||||
$jws = $serializer->serialize($jws, 0);
|
||||
$result = $serializer->unserialize($jws);
|
||||
|
||||
static::assertEquals('Live long and Prosper.', $result->getPayload());
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('RS384', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function completeRS512Sign(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
'p' => '5BGU1c7af_5sFyfsa-onIJgo5BZu8uHvz3Uyb8OA0a-G9UPO1ShLYjX0wUfhZcFB7fwPtgmmYAN6wKGVce9eMAbX4PliPk3r-BcpZuPKkuLk_wFvgWAQ5Hqw2iEuwXLV0_e8c2gaUt_hyMC5-nFc4v0Bmv6NT6Pfry-UrK3BKWc',
|
||||
'd' => 'Kp0KuZwCZGL1BLgsVM-N0edMNitl9wN5Hf2WOYDoIqOZNAEKzdJuenIMhITJjRFUX05GVL138uyp2js_pqDdY9ipA7rAKThwGuDdNphZHech9ih3DGEPXs-YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1_BpJthrFxjDRhw9DxJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEmtGoJnd9RE4oywKhgN7_TK7wXRlqA4UoRPiH2ACrdU-_cLQL9Jc0u0GqZJK31LDbOeN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn-CAQ',
|
||||
'q' => 'zPD-B-nrngwF-O99BHvb47XGKR7ON8JCI6JxavzIkusMXCB8rMyYW8zLs68L8JLAzWZ34oMq0FPUnysBxc5nTF8Nb4BZxTZ5-9cHfoKrYTI3YWsmVW2FpCJFEjMs4NXZ28PBkS9b4zjfS2KhNdkmCeOYU0tJpNfwmOTI90qeUdU',
|
||||
'dp' => 'aJrzw_kjWK9uDlTeaES2e4muv6bWbopYfrPHVWG7NPGoGdhnBnd70-jhgMEiTZSNU8VXw2u7prAR3kZ-kAp1DdwlqedYOzFsOJcPA0UZhbORyrBy30kbll_7u6CanFm6X4VyJxCpejd7jKNw6cCTFP1sfhWg5NVJ5EUTkPwE66M',
|
||||
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
|
||||
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
|
||||
]);
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new Algorithm\RS512()])
|
||||
);
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload('Live long and Prosper.')
|
||||
->addSignature(
|
||||
$key,
|
||||
[
|
||||
'alg' => 'RS512',
|
||||
'jwk' => [
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
],
|
||||
]
|
||||
)
|
||||
->build()
|
||||
;
|
||||
|
||||
static::assertEquals('eyJhbGciOiJSUzUxMiIsImp3ayI6eyJrdHkiOiJSU0EiLCJuIjoidHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3IiwiZSI6IkFRQUIifX0.TGl2ZSBsb25nIGFuZCBQcm9zcGVyLg.OMttEbx9fWoJl4gJwp8m249P87nNENhy5RzH84S1iR8b-upQNy8dqHoIVsQ6qINDjDL5YTl4UWvChIr5AO433LjNUimIeEp2cfiqrszTTwhv-EF3Lp3Ft9NmTb-3ZWvDo1WwwUrD0qro7bynaz5O06DxQfTROcrC6hNX05y6nW_-21exs2_w2OoOWA0Ebx9ev1ayZJh1AQ6q18Ajb0Gk1RST1PFjz0Sk_YiUIYRSVJzgv2Lf7R_Lyi5A5OkIfLOyJmKBi6m0FOLoynq_fT96wCbf5Nkhx-RiuFEcefGhgDav7Wfim3zA3ZAHeNWe58BZOf-8v1kXsV-yd6zQlVa8iw', $serializer->serialize($jws, 0));
|
||||
|
||||
$jws = $serializer->serialize($jws, 0);
|
||||
$result = $serializer->unserialize($jws);
|
||||
|
||||
static::assertEquals('Live long and Prosper.', $result->getPayload());
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('RS512', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function completePS256Sign(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'key_ops' => ['sign'],
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
'p' => '5BGU1c7af_5sFyfsa-onIJgo5BZu8uHvz3Uyb8OA0a-G9UPO1ShLYjX0wUfhZcFB7fwPtgmmYAN6wKGVce9eMAbX4PliPk3r-BcpZuPKkuLk_wFvgWAQ5Hqw2iEuwXLV0_e8c2gaUt_hyMC5-nFc4v0Bmv6NT6Pfry-UrK3BKWc',
|
||||
'd' => 'Kp0KuZwCZGL1BLgsVM-N0edMNitl9wN5Hf2WOYDoIqOZNAEKzdJuenIMhITJjRFUX05GVL138uyp2js_pqDdY9ipA7rAKThwGuDdNphZHech9ih3DGEPXs-YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1_BpJthrFxjDRhw9DxJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEmtGoJnd9RE4oywKhgN7_TK7wXRlqA4UoRPiH2ACrdU-_cLQL9Jc0u0GqZJK31LDbOeN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn-CAQ',
|
||||
'q' => 'zPD-B-nrngwF-O99BHvb47XGKR7ON8JCI6JxavzIkusMXCB8rMyYW8zLs68L8JLAzWZ34oMq0FPUnysBxc5nTF8Nb4BZxTZ5-9cHfoKrYTI3YWsmVW2FpCJFEjMs4NXZ28PBkS9b4zjfS2KhNdkmCeOYU0tJpNfwmOTI90qeUdU',
|
||||
'dp' => 'aJrzw_kjWK9uDlTeaES2e4muv6bWbopYfrPHVWG7NPGoGdhnBnd70-jhgMEiTZSNU8VXw2u7prAR3kZ-kAp1DdwlqedYOzFsOJcPA0UZhbORyrBy30kbll_7u6CanFm6X4VyJxCpejd7jKNw6cCTFP1sfhWg5NVJ5EUTkPwE66M',
|
||||
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
|
||||
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
|
||||
]);
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new Algorithm\PS256()])
|
||||
);
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload('Live long and Prosper.')
|
||||
->addSignature(
|
||||
$key,
|
||||
[
|
||||
'alg' => 'PS256',
|
||||
'jwk' => [
|
||||
'kty' => 'RSA',
|
||||
'key_ops' => ['verify'],
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
],
|
||||
]
|
||||
)
|
||||
->build()
|
||||
;
|
||||
|
||||
$jws = $serializer->serialize($jws, 0);
|
||||
$result = $serializer->unserialize($jws);
|
||||
|
||||
static::assertEquals('Live long and Prosper.', $result->getPayload());
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('PS256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function completePS384Sign(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
'p' => '5BGU1c7af_5sFyfsa-onIJgo5BZu8uHvz3Uyb8OA0a-G9UPO1ShLYjX0wUfhZcFB7fwPtgmmYAN6wKGVce9eMAbX4PliPk3r-BcpZuPKkuLk_wFvgWAQ5Hqw2iEuwXLV0_e8c2gaUt_hyMC5-nFc4v0Bmv6NT6Pfry-UrK3BKWc',
|
||||
'd' => 'Kp0KuZwCZGL1BLgsVM-N0edMNitl9wN5Hf2WOYDoIqOZNAEKzdJuenIMhITJjRFUX05GVL138uyp2js_pqDdY9ipA7rAKThwGuDdNphZHech9ih3DGEPXs-YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1_BpJthrFxjDRhw9DxJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEmtGoJnd9RE4oywKhgN7_TK7wXRlqA4UoRPiH2ACrdU-_cLQL9Jc0u0GqZJK31LDbOeN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn-CAQ',
|
||||
'q' => 'zPD-B-nrngwF-O99BHvb47XGKR7ON8JCI6JxavzIkusMXCB8rMyYW8zLs68L8JLAzWZ34oMq0FPUnysBxc5nTF8Nb4BZxTZ5-9cHfoKrYTI3YWsmVW2FpCJFEjMs4NXZ28PBkS9b4zjfS2KhNdkmCeOYU0tJpNfwmOTI90qeUdU',
|
||||
'dp' => 'aJrzw_kjWK9uDlTeaES2e4muv6bWbopYfrPHVWG7NPGoGdhnBnd70-jhgMEiTZSNU8VXw2u7prAR3kZ-kAp1DdwlqedYOzFsOJcPA0UZhbORyrBy30kbll_7u6CanFm6X4VyJxCpejd7jKNw6cCTFP1sfhWg5NVJ5EUTkPwE66M',
|
||||
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
|
||||
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
|
||||
]);
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new Algorithm\PS384()])
|
||||
);
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload('Live long and Prosper.')
|
||||
->addSignature(
|
||||
$key,
|
||||
[
|
||||
'alg' => 'PS384',
|
||||
'jwk' => [
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
],
|
||||
]
|
||||
)
|
||||
->build()
|
||||
;
|
||||
|
||||
$jws = $serializer->serialize($jws, 0);
|
||||
$result = $serializer->unserialize($jws);
|
||||
|
||||
static::assertEquals('Live long and Prosper.', $result->getPayload());
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('PS384', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function completePS512Sign(): void
|
||||
{
|
||||
$key = new JWK([
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
'p' => '5BGU1c7af_5sFyfsa-onIJgo5BZu8uHvz3Uyb8OA0a-G9UPO1ShLYjX0wUfhZcFB7fwPtgmmYAN6wKGVce9eMAbX4PliPk3r-BcpZuPKkuLk_wFvgWAQ5Hqw2iEuwXLV0_e8c2gaUt_hyMC5-nFc4v0Bmv6NT6Pfry-UrK3BKWc',
|
||||
'd' => 'Kp0KuZwCZGL1BLgsVM-N0edMNitl9wN5Hf2WOYDoIqOZNAEKzdJuenIMhITJjRFUX05GVL138uyp2js_pqDdY9ipA7rAKThwGuDdNphZHech9ih3DGEPXs-YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1_BpJthrFxjDRhw9DxJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEmtGoJnd9RE4oywKhgN7_TK7wXRlqA4UoRPiH2ACrdU-_cLQL9Jc0u0GqZJK31LDbOeN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn-CAQ',
|
||||
'q' => 'zPD-B-nrngwF-O99BHvb47XGKR7ON8JCI6JxavzIkusMXCB8rMyYW8zLs68L8JLAzWZ34oMq0FPUnysBxc5nTF8Nb4BZxTZ5-9cHfoKrYTI3YWsmVW2FpCJFEjMs4NXZ28PBkS9b4zjfS2KhNdkmCeOYU0tJpNfwmOTI90qeUdU',
|
||||
'dp' => 'aJrzw_kjWK9uDlTeaES2e4muv6bWbopYfrPHVWG7NPGoGdhnBnd70-jhgMEiTZSNU8VXw2u7prAR3kZ-kAp1DdwlqedYOzFsOJcPA0UZhbORyrBy30kbll_7u6CanFm6X4VyJxCpejd7jKNw6cCTFP1sfhWg5NVJ5EUTkPwE66M',
|
||||
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
|
||||
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
|
||||
]);
|
||||
|
||||
$jwsBuilder = new JWSBuilder(
|
||||
new AlgorithmManager([new Algorithm\PS512()])
|
||||
);
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$jws = $jwsBuilder
|
||||
->create()->withPayload('Live long and Prosper.')
|
||||
->addSignature(
|
||||
$key,
|
||||
[
|
||||
'alg' => 'PS512',
|
||||
'jwk' => [
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
],
|
||||
]
|
||||
)
|
||||
->build()
|
||||
;
|
||||
|
||||
$jws = $serializer->serialize($jws, 0);
|
||||
$result = $serializer->unserialize($jws);
|
||||
|
||||
static::assertEquals('Live long and Prosper.', $result->getPayload());
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('PS512', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7516#appendix-A.4
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function loadJWSJSONSerialization(): void
|
||||
{
|
||||
$serializer = new JSONGeneralSerializer(
|
||||
);
|
||||
$result = $serializer->unserialize('{"payload":"eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ","signatures":[{"protected":"eyJhbGciOiJSUzI1NiJ9","header":{"kid":"2010-12-29"},"signature":"cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw"},{"protected":"eyJhbGciOiJFUzI1NiJ9","header":{"kid":"e9bc097a-ce51-4036-9562-d2ade882db0d"},"signature":"DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"}]}');
|
||||
|
||||
$claims = json_decode($result->getPayload(), true);
|
||||
static::assertEquals(['iss' => 'joe', 'exp' => 1300819380, 'http://example.com/is_root' => true], $claims);
|
||||
static::assertEquals(2, $result->countSignatures());
|
||||
static::assertEquals('RS256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
static::assertEquals('ES256', $result->getSignature(1)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7516#appendix-A.4
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function loadJWSJSONSerializationWithDetachedPayload(): void
|
||||
{
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new Algorithm\RS256()])
|
||||
);
|
||||
$serializer = new JSONGeneralSerializer(
|
||||
);
|
||||
$result = $serializer->unserialize('{"signatures":[{"protected":"eyJhbGciOiJSUzI1NiJ9","header":{"kid":"2010-12-29"},"signature":"cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw"},{"protected":"eyJhbGciOiJFUzI1NiJ9","header":{"kid":"e9bc097a-ce51-4036-9562-d2ade882db0d"},"signature":"DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"}]}');
|
||||
|
||||
static::assertEquals(2, $result->countSignatures());
|
||||
static::assertEquals('RS256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
static::assertEquals('ES256', $result->getSignature(1)->getProtectedHeaderParameter('alg'));
|
||||
$jwsVerifier->verifyWithKeySet($result, $this->getPrivateKeySet(), 0, Base64Url::decode('eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function loadJWSJSONSerializationWithDetachedPayloadAndPayloadInJWS(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('A detached payload is set, but the JWS already has a payload');
|
||||
$jwsVerifier = new JWSVerifier(
|
||||
new AlgorithmManager([new Algorithm\RS256()])
|
||||
);
|
||||
$serializer = new JSONGeneralSerializer(
|
||||
);
|
||||
$result = $serializer->unserialize('{"payload":"eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ","signatures":[{"protected":"eyJhbGciOiJSUzI1NiJ9","header":{"kid":"2010-12-29"},"signature":"cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw"},{"protected":"eyJhbGciOiJFUzI1NiJ9","header":{"kid":"e9bc097a-ce51-4036-9562-d2ade882db0d"},"signature":"DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"}]}');
|
||||
|
||||
static::assertEquals(2, $result->countSignatures());
|
||||
static::assertEquals('RS256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
|
||||
$jwsVerifier->verifyWithKeySet($result, $this->getPrivateKeySet(), 0, 'eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ');
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function loadInvalidInput(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('Unsupported input');
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$serializer->unserialize('DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q');
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function loadInvalidInput2(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('Unsupported input');
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$serializer->unserialize('DtEhU3ljb.Eg8L.38VWAf.UAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7515#appendix-A.1
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function loadIETFExample1(): void
|
||||
{
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$result = $serializer->unserialize('eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk');
|
||||
|
||||
static::assertEquals(['iss' => 'joe', 'exp' => 1300819380, 'http://example.com/is_root' => true], json_decode($result->getPayload(), true));
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('HS256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7515#appendix-A.2
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function loadIETFExample2(): void
|
||||
{
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$result = $serializer->unserialize('eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw');
|
||||
|
||||
static::assertEquals(['iss' => 'joe', 'exp' => 1300819380, 'http://example.com/is_root' => true], json_decode($result->getPayload(), true));
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('RS256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7515#appendix-A.3
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function loadIETFExample3(): void
|
||||
{
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$result = $serializer->unserialize('eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q');
|
||||
|
||||
static::assertEquals(['iss' => 'joe', 'exp' => 1300819380, 'http://example.com/is_root' => true], json_decode($result->getPayload(), true));
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('ES256', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://tools.ietf.org/html/rfc7515#appendix-A.4
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function loadIETFExample4(): void
|
||||
{
|
||||
$serializer = new CompactSerializer(
|
||||
);
|
||||
$result = $serializer->unserialize('eyJhbGciOiJFUzUxMiJ9.UGF5bG9hZA.AdwMgeerwtHoh-l192l60hp9wAHZFVJbLfD_UxMi70cwnZOYaRI1bKPWROc-mZZqwqT2SI-KGDKB34XO0aw_7XdtAG8GaSwFKdCAPZgoXD2YBJZCPEX3xKpRwcdOO8KpEHwJjyqOgzDO7iKvU8vcnwNrmxYbSW9ERBXukOXolLzeO_Jn');
|
||||
|
||||
static::assertEquals('Payload', $result->getPayload());
|
||||
static::assertEquals(1, $result->countSignatures());
|
||||
static::assertEquals('ES512', $result->getSignature(0)->getProtectedHeaderParameter('alg'));
|
||||
}
|
||||
|
||||
private function getPrivateKeySet(): JWKSet
|
||||
{
|
||||
$keys = ['keys' => [
|
||||
[
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'x' => 'weNJy2HscCSM6AEDTDg04biOvhFhyyWvOHQfeF_PxMQ',
|
||||
'y' => 'e8lnCO-AlStT-NJVX-crhB7QRYhiix03illJOVAOyck',
|
||||
'd' => 'VEmDZpDXXK8p8N0Cndsxs924q6nS1RXFASRl6BfUqdw',
|
||||
],
|
||||
[
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'x' => 'gI0GAILBdu7T53akrFmMyGcsF3n5dO7MmwNBHKW5SV0',
|
||||
'y' => 'SLW_xSffzlPWrHEVI30DHM_4egVwt3NQqeUD7nMFpps',
|
||||
'd' => '0_NxaRPUMQoAJt50Gz8YiTr8gRTwyEaCumd-MToTmIo',
|
||||
],
|
||||
[
|
||||
'kid' => '2010-12-29',
|
||||
'kty' => 'RSA',
|
||||
'n' => 'ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddxHmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMsD1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSHSXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'Eq5xpGnNCivDflJsRQBXHx1hdR1k6Ulwe2JZD50LpXyWPEAeP88vLNO97IjlA7_GQ5sLKMgvfTeXZx9SE-7YwVol2NXOoAJe46sui395IW_GO-pWJ1O0BkTGoVEn2bKVRUCgu-GjBVaYLU6f3l9kJfFNS3E0QbVdxzubSu3Mkqzjkn439X0M_V51gfpRLI9JYanrC4D4qAdGcopV_0ZHHzQlBjudU2QvXt4ehNYTCBr6XCLQUShb1juUO1ZdiYoFaFQT5Tw8bGUl_x_jTj3ccPDVZFD9pIuhLhBOneufuBiB4cS98l2SR_RQyGWSeWjnczT0QU91p1DhOVRuOopznQ',
|
||||
],
|
||||
[
|
||||
'kid' => 'e9bc097a-ce51-4036-9562-d2ade882db0d',
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-256',
|
||||
'x' => 'f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU',
|
||||
'y' => 'x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0',
|
||||
'd' => 'jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI',
|
||||
],
|
||||
[
|
||||
'kid' => '123456789',
|
||||
'kty' => 'RSA',
|
||||
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
|
||||
'e' => 'AQAB',
|
||||
'p' => '5BGU1c7af_5sFyfsa-onIJgo5BZu8uHvz3Uyb8OA0a-G9UPO1ShLYjX0wUfhZcFB7fwPtgmmYAN6wKGVce9eMAbX4PliPk3r-BcpZuPKkuLk_wFvgWAQ5Hqw2iEuwXLV0_e8c2gaUt_hyMC5-nFc4v0Bmv6NT6Pfry-UrK3BKWc',
|
||||
'd' => 'Kp0KuZwCZGL1BLgsVM-N0edMNitl9wN5Hf2WOYDoIqOZNAEKzdJuenIMhITJjRFUX05GVL138uyp2js_pqDdY9ipA7rAKThwGuDdNphZHech9ih3DGEPXs-YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1_BpJthrFxjDRhw9DxJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEmtGoJnd9RE4oywKhgN7_TK7wXRlqA4UoRPiH2ACrdU-_cLQL9Jc0u0GqZJK31LDbOeN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn-CAQ',
|
||||
'q' => 'zPD-B-nrngwF-O99BHvb47XGKR7ON8JCI6JxavzIkusMXCB8rMyYW8zLs68L8JLAzWZ34oMq0FPUnysBxc5nTF8Nb4BZxTZ5-9cHfoKrYTI3YWsmVW2FpCJFEjMs4NXZ28PBkS9b4zjfS2KhNdkmCeOYU0tJpNfwmOTI90qeUdU',
|
||||
'dp' => 'aJrzw_kjWK9uDlTeaES2e4muv6bWbopYfrPHVWG7NPGoGdhnBnd70-jhgMEiTZSNU8VXw2u7prAR3kZ-kAp1DdwlqedYOzFsOJcPA0UZhbORyrBy30kbll_7u6CanFm6X4VyJxCpejd7jKNw6cCTFP1sfhWg5NVJ5EUTkPwE66M',
|
||||
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
|
||||
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
|
||||
],
|
||||
[
|
||||
'kty' => 'RSA',
|
||||
'n' => 'oahUIoWw0K0usKNuOR6H4wkf4oBUXHTxRvgb48E-BVvxkeDNjbC4he8rUWcJoZmds2h7M70imEVhRU5djINXtqllXI4DFqcI1DgjT9LewND8MW2Krf3Spsk_ZkoFnilakGygTwpZ3uesH-PFABNIUYpOiN15dsQRkgr0vEhxN92i2asbOenSZeyaxziK72UwxrrKoExv6kc5twXTq4h-QChLOln0_mtUZwfsRaMStPs6mS6XrgxnxbWhojf663tuEQueGC-FCMfra36C9knDFGzKsNa7LZK2djYgyD3JR_MB_4NUJW_TqOQtwHYbxevoJArm-L5StowjzGy-_bq6Gw',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'kLdtIj6GbDks_ApCSTYQtelcNttlKiOyPzMrXHeI-yk1F7-kpDxY4-WY5NWV5KntaEeXS1j82E375xxhWMHXyvjYecPT9fpwR_M9gV8n9Hrh2anTpTD93Dt62ypW3yDsJzBnTnrYu1iwWRgBKrEYY46qAZIrA2xAwnm2X7uGR1hghkqDp0Vqj3kbSCz1XyfCs6_LehBwtxHIyh8Ripy40p24moOAbgxVw3rxT_vlt3UVe4WO3JkJOzlpUf-KTVI2Ptgm-dARxTEtE-id-4OJr0h-K-VFs3VSndVTIznSxfyrj8ILL6MG_Uv8YAu7VILSB3lOW085-4qE3DzgrTjgyQ',
|
||||
'p' => '1r52Xk46c-LsfB5P442p7atdPUrxQSy4mti_tZI3Mgf2EuFVbUoDBvaRQ-SWxkbkmoEzL7JXroSBjSrK3YIQgYdMgyAEPTPjXv_hI2_1eTSPVZfzL0lffNn03IXqWF5MDFuoUYE0hzb2vhrlN_rKrbfDIwUbTrjjgieRbwC6Cl0',
|
||||
'q' => 'wLb35x7hmQWZsWJmB_vle87ihgZ19S8lBEROLIsZG4ayZVe9Hi9gDVCOBmUDdaDYVTSNx_8Fyw1YYa9XGrGnDew00J28cRUoeBB_jKI1oma0Orv1T9aXIWxKwd4gvxFImOWr3QRL9KEBRzk2RatUBnmDZJTIAfwTs0g68UZHvtc',
|
||||
'dp' => 'ZK-YwE7diUh0qR1tR7w8WHtolDx3MZ_OTowiFvgfeQ3SiresXjm9gZ5KLhMXvo-uz-KUJWDxS5pFQ_M0evdo1dKiRTjVw_x4NyqyXPM5nULPkcpU827rnpZzAJKpdhWAgqrXGKAECQH0Xt4taznjnd_zVpAmZZq60WPMBMfKcuE',
|
||||
'dq' => 'Dq0gfgJ1DdFGXiLvQEZnuKEN0UUmsJBxkjydc3j4ZYdBiMRAy86x0vHCjywcMlYYg4yoC4YZa9hNVcsjqA3FeiL19rk8g6Qn29Tt0cj8qqyFpz9vNDBUfCAiJVeESOjJDZPYHdHY8v1b-o-Z2X5tvLx-TCekf7oxyeKDUqKWjis',
|
||||
'qi' => 'VIMpMYbPf47dT1w_zDUXfPimsSegnMOA1zTaX7aGk_8urY6R8-ZW1FxU7AlWAyLWybqq6t16VFd7hQd0y6flUK4SlOydB61gwanOsXGOAOv82cHq0E3eL4HrtZkUuKvnPrMnsUUFlfUdybVzxyjz9JF_XyaY14ardLSjf4L_FNY',
|
||||
],
|
||||
[
|
||||
'kty' => 'RSA',
|
||||
'n' => 'sXchDaQebHnPiGvyDOAT4saGEUetSyo9MKLOoWFsueri23bOdgWp4Dy1WlUzewbgBHod5pcM9H95GQRV3JDXboIRROSBigeC5yjU1hGzHHyXss8UDprecbAYxknTcQkhslANGRUZmdTOQ5qTRsLAt6BTYuyvVRdhS8exSZEy_c4gs_7svlJJQ4H9_NxsiIoLwAEk7-Q3UXERGYw_75IDrGA84-lA_-Ct4eTlXHBIY2EaV7t7LjJaynVJCpkv4LKjTTAumiGUIuQhrNhZLuF_RJLqHpM2kgWFLU7-VTdL1VbC2tejvcI2BlMkEpk1BzBZI0KQB0GaDWFLN-aEAw3vRw',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'VFCWOqXr8nvZNyaaJLXdnNPXZKRaWCjkU5Q2egQQpTBMwhprMzWzpR8Sxq1OPThh_J6MUD8Z35wky9b8eEO0pwNS8xlh1lOFRRBoNqDIKVOku0aZb-rynq8cxjDTLZQ6Fz7jSjR1Klop-YKaUHc9GsEofQqYruPhzSA-QgajZGPbE_0ZaVDJHfyd7UUBUKunFMScbflYAAOYJqVIVwaYR5zWEEceUjNnTNo_CVSj-VvXLO5VZfCUAVLgW4dpf1SrtZjSt34YLsRarSb127reG_DUwg9Ch-KyvjT1SkHgUWRVGcyly7uvVGRSDwsXypdrNinPA4jlhoNdizK2zF2CWQ',
|
||||
'p' => '9gY2w6I6S6L0juEKsbeDAwpd9WMfgqFoeA9vEyEUuk4kLwBKcoe1x4HG68ik918hdDSE9vDQSccA3xXHOAFOPJ8R9EeIAbTi1VwBYnbTp87X-xcPWlEPkrdoUKW60tgs1aNd_Nnc9LEVVPMS390zbFxt8TN_biaBgelNgbC95sM',
|
||||
'q' => 'uKlCKvKv_ZJMVcdIs5vVSU_6cPtYI1ljWytExV_skstvRSNi9r66jdd9-yBhVfuG4shsp2j7rGnIio901RBeHo6TPKWVVykPu1iYhQXw1jIABfw-MVsN-3bQ76WLdt2SDxsHs7q7zPyUyHXmps7ycZ5c72wGkUwNOjYelmkiNS0',
|
||||
'dp' => 'w0kZbV63cVRvVX6yk3C8cMxo2qCM4Y8nsq1lmMSYhG4EcL6FWbX5h9yuvngs4iLEFk6eALoUS4vIWEwcL4txw9LsWH_zKI-hwoReoP77cOdSL4AVcraHawlkpyd2TWjE5evgbhWtOxnZee3cXJBkAi64Ik6jZxbvk-RR3pEhnCs',
|
||||
'dq' => 'o_8V14SezckO6CNLKs_btPdFiO9_kC1DsuUTd2LAfIIVeMZ7jn1Gus_Ff7B7IVx3p5KuBGOVF8L-qifLb6nQnLysgHDh132NDioZkhH7mI7hPG-PYE_odApKdnqECHWw0J-F0JWnUd6D2B_1TvF9mXA2Qx-iGYn8OVV1Bsmp6qU',
|
||||
'qi' => 'eNho5yRBEBxhGBtQRww9QirZsB66TrfFReG_CcteI1aCneT0ELGhYlRlCtUkTRclIfuEPmNsNDPbLoLqqCVznFbvdB7x-Tl-m0l_eFTj2KiqwGqE9PZB9nNTwMVvH3VRRSLWACvPnSiwP8N5Usy-WRXS-V7TbpxIhvepTfE0NNo',
|
||||
],
|
||||
[
|
||||
'kty' => 'RSA',
|
||||
'n' => 'ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddxHmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMsD1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSHSXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ',
|
||||
'e' => 'AQAB',
|
||||
'd' => 'Eq5xpGnNCivDflJsRQBXHx1hdR1k6Ulwe2JZD50LpXyWPEAeP88vLNO97IjlA7_GQ5sLKMgvfTeXZx9SE-7YwVol2NXOoAJe46sui395IW_GO-pWJ1O0BkTGoVEn2bKVRUCgu-GjBVaYLU6f3l9kJfFNS3E0QbVdxzubSu3Mkqzjkn439X0M_V51gfpRLI9JYanrC4D4qAdGcopV_0ZHHzQlBjudU2QvXt4ehNYTCBr6XCLQUShb1juUO1ZdiYoFaFQT5Tw8bGUl_x_jTj3ccPDVZFD9pIuhLhBOneufuBiB4cS98l2SR_RQyGWSeWjnczT0QU91p1DhOVRuOopznQ',
|
||||
'p' => '4BzEEOtIpmVdVEZNCqS7baC4crd0pqnRH_5IB3jw3bcxGn6QLvnEtfdUdiYrqBdss1l58BQ3KhooKeQTa9AB0Hw_Py5PJdTJNPY8cQn7ouZ2KKDcmnPGBY5t7yLc1QlQ5xHdwW1VhvKn-nXqhJTBgIPgtldC-KDV5z-y2XDwGUc',
|
||||
'q' => 'uQPEfgmVtjL0Uyyx88GZFF1fOunH3-7cepKmtH4pxhtCoHqpWmT8YAmZxaewHgHAjLYsp1ZSe7zFYHj7C6ul7TjeLQeZD_YwD66t62wDmpe_HlB-TnBA-njbglfIsRLtXlnDzQkv5dTltRJ11BKBBypeeF6689rjcJIDEz9RWdc',
|
||||
'dp' => 'BwKfV3Akq5_MFZDFZCnW-wzl-CCo83WoZvnLQwCTeDv8uzluRSnm71I3QCLdhrqE2e9YkxvuxdBfpT_PI7Yz-FOKnu1R6HsJeDCjn12Sk3vmAktV2zb34MCdy7cpdTh_YVr7tss2u6vneTwrA86rZtu5Mbr1C1XsmvkxHQAdYo0',
|
||||
'dq' => 'h_96-mK1R_7glhsum81dZxjTnYynPbZpHziZjeeHcXYsXaaMwkOlODsWa7I9xXDoRwbKgB719rrmI2oKr6N3Do9U0ajaHF-NKJnwgjMd2w9cjz3_-kyNlxAr2v4IKhGNpmM5iIgOS1VZnOZ68m6_pbLBSp3nssTdlqvd0tIiTHU',
|
||||
'qi' => 'IYd7DHOhrWvxkwPQsRM2tOgrjbcrfvtQJipd-DlcxyVuuM9sQLdgjVk2oy26F0EmpScGLq2MowX7fhd_QJQ3ydy5cY7YIBi87w93IKLEdfnbJtoOPLUW0ITrJReOgo1cq9SbsxYawBgfp_gh6A5603k2-ZQwVK0JKSHuLFkuQ3U',
|
||||
],
|
||||
[
|
||||
'kty' => 'EC',
|
||||
'crv' => 'P-521',
|
||||
'x' => 'AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk',
|
||||
'y' => 'ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2',
|
||||
'd' => 'AY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPAxerEzgdRhajnu0ferB0d53vM9mE15j2C',
|
||||
],
|
||||
]];
|
||||
|
||||
return JWKSet::createFromKeyData($keys);
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,7 @@ class RSA
|
||||
switch ($mode) {
|
||||
case self::SIGNATURE_PSS:
|
||||
return self::signWithPSS($key, $message, $hash);
|
||||
|
||||
case self::SIGNATURE_PKCS1:
|
||||
$result = openssl_sign($message, $signature, $key->toPEM(), $hash);
|
||||
if (true !== $result) {
|
||||
@@ -52,6 +53,7 @@ class RSA
|
||||
}
|
||||
|
||||
return $signature;
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException('Unsupported mode.');
|
||||
}
|
||||
@@ -91,8 +93,10 @@ class RSA
|
||||
switch ($mode) {
|
||||
case self::SIGNATURE_PSS:
|
||||
return self::verifyWithPSS($key, $message, $signature, $hash);
|
||||
|
||||
case self::SIGNATURE_PKCS1:
|
||||
return 1 === openssl_verify($message, $signature, $key->toPEM(), $hash);
|
||||
|
||||
default:
|
||||
throw new InvalidArgumentException('Unsupported mode.');
|
||||
}
|
||||
|
||||
@@ -27,21 +27,5 @@
|
||||
"suggest": {
|
||||
"ext-gmp": "GMP or BCMath is highly recommended to improve the library performance",
|
||||
"ext-bcmath": "GMP or BCMath is highly recommended to improve the library performance"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"v1.0": "1.0.x-dev",
|
||||
"v1.1": "1.1.x-dev",
|
||||
"v1.2": "1.2.x-dev",
|
||||
"v1.3": "1.3.x-dev",
|
||||
"v2.0": "2.0.x-dev",
|
||||
"v2.1": "2.1.x-dev"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit
|
||||
backupGlobals="false"
|
||||
backupStaticAttributes="false"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
syntaxCheck="true"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true">
|
||||
<testsuites>
|
||||
<testsuite name="Test Suite">
|
||||
<directory>./Tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">./</directory>
|
||||
<exclude>
|
||||
<directory>./vendor</directory>
|
||||
<directory>./Tests</directory>
|
||||
<directory suffix="Test.php">./src</directory>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
Reference in New Issue
Block a user