Skip to content

Commit aee17a4

Browse files
committed
fix: signature generation flow
1 parent ede6e10 commit aee17a4

File tree

4 files changed

+46
-37
lines changed

4 files changed

+46
-37
lines changed

phpunit.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<env name="APP_DEBUG" value="false"/>
2424
<!-- <env name="SYMFONY_DEPRECATIONS_HELPER" value="weak"/>-->
2525
<env name="XDEBUG_MODE" value="coverage"/>
26-
<server name="KERNEL_CLASS" value="Tests\Functional\app\AppKernel"/>
26+
<server name="KERNEL_CLASS" value="Tests\Functional\app\AppKernel" />
2727
</php>
2828
<testsuites>
2929
<testsuite name="Project Test Suite">

src/Providers/ImgProxy/Security.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,19 @@ public function __construct(string $key, string $salt, private readonly int $siz
1111
{
1212
if ($key !== '') {
1313
try {
14-
$this->key = \pack('H', \mb_strtoupper($key));
14+
$key = \mb_strtoupper($key);
15+
\pack('H', $key);
16+
$this->key = \hex2bin($key);
1517
} catch (\Throwable $e) {
1618
throw new \InvalidArgumentException('The sign key must be hex-encoded string', $e->getCode(), $e);
1719
}
1820
}
1921

2022
if ($salt !== '') {
2123
try {
22-
$this->salt = \pack('H', \mb_strtoupper($salt));
24+
$salt = \mb_strtoupper($salt);
25+
\pack('H', $salt);
26+
$this->salt = \hex2bin($salt);
2327
} catch (\Throwable $e) {
2428
throw new \InvalidArgumentException('The sign key must be hex-encoded string', $e->getCode(), $e);
2529
}
@@ -33,7 +37,12 @@ public function __construct(string $key, string $salt, private readonly int $siz
3337
*/
3438
public function sign(string $payload): string
3539
{
36-
$signature = \hash_hmac('sha256', $this->salt . $payload, $this->key, true);
40+
$payload = \implode('/', [
41+
$this->salt,
42+
$payload
43+
]);
44+
45+
$signature = \hash_hmac('sha256', $payload, $this->key, true);
3746

3847
return $this->encode($this->crop($signature));
3948
}

tests/Providers/ImgProxy/BuilderTest.php

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,13 @@ public function generateCrop()
7979
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
8080
[
8181
true,
82-
'4ZuzK5flQncpAJTm06kNLZgjfBF9Uvg-9IbzUzgQiFU',
82+
'jtQ3I5whBLtbs85xD26yECxFIm29nzNrn9ROk5vBfuQ',
8383
ImgProxy::SOURCE_TYPE_PLAIN,
8484
'plain/https://awesome.com/awesome/image.jpg@webp',
8585
],
8686
[
8787
true,
88-
'ZDEAv4k8CrDcXwcOeqNkb5zK3pdyF8k21KIT_zlQ8zM',
88+
'ah29tGoAcM97vqM0dGjcRIwQ3Mdgz7NPCrOT-1o9pMg',
8989
ImgProxy::SOURCE_TYPE_BASE64,
9090
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
9191
],
@@ -121,13 +121,13 @@ public function generateCropGravity()
121121
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
122122
[
123123
true,
124-
'WhFQ9qDT8x7AJ-kkZ8r1B2FGZR4cBxC5nAl-Tn2fRlk',
124+
'E1cBecdqB6zkXp041gbvcNJldc7dOxeqvTCDo_33HNM',
125125
ImgProxy::SOURCE_TYPE_PLAIN,
126126
'plain/https://awesome.com/awesome/image.jpg@webp',
127127
],
128128
[
129129
true,
130-
'VZDWTO4t5emfTedoHXDlRjThxFmUOIoGVvysZLDvF0E',
130+
'rq4N9iEMrGUAhIpMypbK-7dLr3WX-gpa0n8q4TR8iI8',
131131
ImgProxy::SOURCE_TYPE_BASE64,
132132
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
133133
],
@@ -163,13 +163,13 @@ public function generateDpr()
163163
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
164164
[
165165
true,
166-
'rvd5ARX2BnIEUX-YdG6pjW9sJJxtObJeq-7qqasvVB0',
166+
'QqY3iTkr42sC4qFsU-G9HVACtRro-8Rf72EcoUGPAcI',
167167
ImgProxy::SOURCE_TYPE_PLAIN,
168168
'plain/https://awesome.com/awesome/image.jpg@webp',
169169
],
170170
[
171171
true,
172-
'1w7nIfoTrCIIQPBl71RkQ368qXXImiVPVEe1gVCpG98',
172+
'OTfaX-TMSPFNeKgPPN3RZ4Q3WICT67bhuIQxIs9X1CI',
173173
ImgProxy::SOURCE_TYPE_BASE64,
174174
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
175175
],
@@ -205,13 +205,13 @@ public function generateEnlarge()
205205
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
206206
[
207207
true,
208-
'KusQZACqKGtRROqNRw9XI-FymSN5_jF1Uf5vw9o6fAY',
208+
'rAZRT3ErCkjspdBOuWa0pxQ3GK1T0w_yn55V51gyorg',
209209
ImgProxy::SOURCE_TYPE_PLAIN,
210210
'plain/https://awesome.com/awesome/image.jpg@webp',
211211
],
212212
[
213213
true,
214-
'WivjLnXvjCvdIxgwa5HSTEgbOQimJYB6K0WgPNrUjhw',
214+
'I8ds9XUcaCC5dJjzGyvpyqJgGY20wi-Q8wZSp51deGA',
215215
ImgProxy::SOURCE_TYPE_BASE64,
216216
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
217217
],
@@ -247,13 +247,13 @@ public function generateExtend()
247247
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
248248
[
249249
true,
250-
'fIMZOe6sFyHfg7nOPC1RE2n5FPnGUN0cF_XAc73iciE',
250+
'hpijWw5oUgIJjl-ShSXNH9zW3qOH4wf_5RW3bwxAyDI',
251251
ImgProxy::SOURCE_TYPE_PLAIN,
252252
'plain/https://awesome.com/awesome/image.jpg@webp',
253253
],
254254
[
255255
true,
256-
'ws3sBthJ0pC3mgQLzZAbtyJJA1MkF4x38e416US-B6c',
256+
'ywgqQUBVIDOCqTBMPmx1HXktlxqv2xZRd8FQ8G5jsFI',
257257
ImgProxy::SOURCE_TYPE_BASE64,
258258
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
259259
],
@@ -289,13 +289,13 @@ public function generateExtendGravity()
289289
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
290290
[
291291
true,
292-
'cjrByJoooiA-fuulQXeyYQ__PCswuFgUc9IFRCTCQas',
292+
'7ROyDkctUWjsWkdJAnUvN1TS8uYpD5EGv-RSN8utBaU',
293293
ImgProxy::SOURCE_TYPE_PLAIN,
294294
'plain/https://awesome.com/awesome/image.jpg@webp',
295295
],
296296
[
297297
true,
298-
'x--ZvCZEDxLDm--6BMFQ_SOmWbRdtl55mfR4z7Mpbfc',
298+
'FqEm3K5tQMdbDYrglmOmJGuWH895bT9PyviwjG781Qo',
299299
ImgProxy::SOURCE_TYPE_BASE64,
300300
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
301301
],
@@ -331,13 +331,13 @@ public function generateExtendAspectRatio()
331331
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
332332
[
333333
true,
334-
'6QtWBzsJzMgYlZp3skIw1yqlUiOzBkLCqi3Yka9ZfFg',
334+
'HsNGkuQkgZ9S-KtPrPLv71t2wHGZjj8NtVgRsyg8Q0w',
335335
ImgProxy::SOURCE_TYPE_PLAIN,
336336
'plain/https://awesome.com/awesome/image.jpg@webp',
337337
],
338338
[
339339
true,
340-
'mLtLRKOlWlUOetwm2dDDDCsnS4JJRBCtxaDdMk8IMoo',
340+
'IGcZECl0lUi-MRYYbd49RSiqloSlJUEAC5bqAuIONXc',
341341
ImgProxy::SOURCE_TYPE_BASE64,
342342
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
343343
],
@@ -373,13 +373,13 @@ public function generateExtendAspectRatioGravity()
373373
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
374374
[
375375
true,
376-
'IYf2dFQH2b0h5-EZWdfnmQ2p5-DIWvdIQ32mJK7CtOw',
376+
'x6gIo8cmk4PnLLEMQn1Zb6a-d8S9Qm-YRtWf_csy6cA',
377377
ImgProxy::SOURCE_TYPE_PLAIN,
378378
'plain/https://awesome.com/awesome/image.jpg@webp',
379379
],
380380
[
381381
true,
382-
'UeX7qMDFxjxrja21_UlTeDNd3-aoFtXgk6MFngLrKCw',
382+
'1JSwN3pL0S-4XAePoOgdYc-Y0J3iOUnE5y3a_Itmok8',
383383
ImgProxy::SOURCE_TYPE_BASE64,
384384
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
385385
],
@@ -415,13 +415,13 @@ public function generateGravity()
415415
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
416416
[
417417
true,
418-
'pvUSHMEoxBpdO04lSb86hVute9llZ5Je8KMrPZkqQ1o',
418+
'wAwihJuBjiSnEOOPJ976VEaNRRMnp6T03xCWU-sZno8',
419419
ImgProxy::SOURCE_TYPE_PLAIN,
420420
'plain/https://awesome.com/awesome/image.jpg@webp',
421421
],
422422
[
423423
true,
424-
'jqagygpgF6xWEEHfMAYvTFedqjmEbyNZf1_-G-6tr2g',
424+
'iV92ktHke8mSHYo0bL2v_dyKdYN7vAZvnKB34utKStE',
425425
ImgProxy::SOURCE_TYPE_BASE64,
426426
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
427427
],
@@ -452,8 +452,8 @@ public function generateResize()
452452
return [
453453
[false, 'unsafe', ImgProxy::RESIZE_TYPE_FIT],
454454
[false, 'unsafe', ImgProxy::RESIZE_TYPE_FILL],
455-
[true, 'bAdpOGNzrgE8q2SHx6r9reD-dknZHEoSGRp9X1aUdXM', ImgProxy::RESIZE_TYPE_FIT],
456-
[true, 'UPaXrIMHuY-Or_qibSLlfg0wV2QnIcShX0i0hB3ST9c', ImgProxy::RESIZE_TYPE_FILL],
455+
[true, 'rHQIIV3WcYtFMhdv0bDv1dmAjlGURAth3a_VkyXy1dA', ImgProxy::RESIZE_TYPE_FIT],
456+
[true, 'tcLCrY0E0v9xbZupH55LoI9GQC1slCPZcrcjb110jps', ImgProxy::RESIZE_TYPE_FILL],
457457
];
458458
}
459459

@@ -487,13 +487,13 @@ public function generateResizeAlgo()
487487
[false, 'unsafe', ImgProxy::SOURCE_TYPE_BASE64, 'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp'],
488488
[
489489
true,
490-
'gZySmmOp7MjA2pUDCakkhrvmO7BnWfldVDK_53o0u3k',
490+
'bNGfNfBusP3uznF8u6nvaVGA8V3muAUWqDT1OeS_2NM',
491491
ImgProxy::SOURCE_TYPE_PLAIN,
492492
'plain/https://awesome.com/awesome/image.jpg@webp',
493493
],
494494
[
495495
true,
496-
'IaW0BovXjOMZAzC9edAIOy2Gf2XCuNbkt3bTzjnH2Y4',
496+
'qzF_0UlpGZ3mTtOjms8ouyrl-on-w35KmKup8dKqjak',
497497
ImgProxy::SOURCE_TYPE_BASE64,
498498
'aHR0cHM6Ly9hd2Vzb21lLmNvbS9hd2Vzb21lL2ltYW/dlLmpwZw.webp',
499499
],
@@ -525,9 +525,9 @@ public function generateZoom()
525525
[false, 'unsafe', 'z:0.5', 0.5, null],
526526
[false, 'unsafe', 'z:0.5:0.7', 0.5, 0.7],
527527
[false, 'unsafe', 'z:0.33', 0.33, 0.33],
528-
[true, 'sNFs_ZM5cBSSRXb6hZsbyzPYUhx6P4xJseppd4MIeYc', 'z:0.5', 0.5, null],
529-
[true, 'RNi4R9HNy-uZ7IfsAGh4zPxBWM4_9uETOGaLjjZWQqY', 'z:0.5:0.7', 0.5, 0.7],
530-
[true, 'xc_MFz4udqxjn-tkJ7yBwhWX1J9MLft9Puiw8jfUcK8', 'z:0.33', 0.33, 0.33],
528+
[true, 'kao3RgWcIBtFxsYahGXd2-Mm-nZCytph7vpmIDNY-b4', 'z:0.5', 0.5, null],
529+
[true, 'zPMU7alxq-7MG1cddx8mmbKSJxXJY008xSdaR_Fm2eI', 'z:0.5:0.7', 0.5, 0.7],
530+
[true, '2_9bzlV9YdbCbrsACGNcZaIFKq5q15OYl2YkYZqgodU', 'z:0.33', 0.33, 0.33],
531531
];
532532
}
533533

@@ -559,9 +559,9 @@ public function generateImageType()
559559
[false, 'unsafe', 'toPng', 'png'],
560560
[false, 'unsafe', 'toJpeg', 'jpg'],
561561
[false, 'unsafe', 'toWebP', 'webp'],
562-
[true, '6ZwNkrNUfCyPIB20pjsJSEvVxpAqo2y_K07j9fwL4vA', 'toPng', 'png'],
563-
[true, 'ujhiDwdFuobz7gVIbodu6qYnlvtv5dqZde0K4u4632E', 'toJpeg', 'jpg'],
564-
[true, '8bG3BQeX_0CfrQyUufqJ1xe_ERMsuaMtnQXS3qWONJ8', 'toWebP', 'webp'],
562+
[true, '1MXYS2HZX_kx4Mc48G2A3FHYBbFQcdZOG93cGF36lBI', 'toPng', 'png'],
563+
[true, 'B4C-i6nQK7BcM1pkDur2ASESNFXFqJj9yFoFFAgpf80', 'toJpeg', 'jpg'],
564+
[true, '8k-2Oaymn9_jlxxMWXra6E0UeSwTSb1O83Kx0iYwBSI', 'toWebP', 'webp'],
565565
];
566566
}
567567

@@ -600,9 +600,9 @@ public function generateComplexBuildProcess()
600600
[false, 'unsafe', 'toPng', 'png'],
601601
[false, 'unsafe', 'toJpeg', 'jpg'],
602602
[false, 'unsafe', 'toWebP', 'webp'],
603-
[true, 'ednUiSeCvzf3vDi8Eu5ag8btNC4dh2HlgxPc3SPu8GM', 'toPng', 'png'],
604-
[true, 'IRdxxLt4cpMIyXejdaFixyP5duHGtRsxZp_gRygnUr8', 'toJpeg', 'jpg'],
605-
[true, 'wqauSTfykiNRShXvrXrEwg7QRKekEWXJvVzvzewoEW4', 'toWebP', 'webp'],
603+
[true, 'C1eUqt2bBdFHw9mNIkUfXtljxzu1AknswKYvApjOyKM', 'toPng', 'png'],
604+
[true, 'hqdxqvP2M0v6z8exnu87mJFI4BMKpi6uTZ3RoeSN7cE', 'toJpeg', 'jpg'],
605+
[true, 'o5KSJpzJ_KNTZrAF-HbnLle8Zcg7VLatlo8et5adfTQ', 'toWebP', 'webp'],
606606
];
607607
}
608608
}

tests/Providers/ImgProxy/SecurityTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function testSignPayload()
4444

4545
$signature = $s->sign($payload);
4646

47-
self::assertEquals('cG5bAdaEMad0FFsvykeU-BxWXvCBQFuHNk8twTgbRRM', $signature);
47+
self::assertEquals('T5v8rp-cI42Iq_ycqYt3y9iYcxHKcGiKkID4KIJblmU', $signature);
4848
self::assertFalse(\mb_strpos($signature, '='));
4949
self::assertFalse(\mb_strpos($signature, '+'));
5050
self::assertFalse(\mb_strpos($signature, '/'));
@@ -57,7 +57,7 @@ public function testCoppedSignaturePayload()
5757

5858
$signature = $s->sign($payload);
5959

60-
self::assertEquals('cG5bAdaEMac', $signature);
60+
self::assertEquals('T5v8rp-cI40', $signature);
6161
self::assertFalse(\mb_strpos($signature, '='));
6262
self::assertFalse(\mb_strpos($signature, '+'));
6363
self::assertFalse(\mb_strpos($signature, '/'));

0 commit comments

Comments
 (0)