From 1c4346805a2bf38a3b5774fe3d603223d0bf2c4c Mon Sep 17 00:00:00 2001 From: mahdi msr Date: Fri, 26 Sep 2025 14:54:16 +0330 Subject: [PATCH 1/2] signature: generate dependencies for signature header --- src/Requests/Header.php | 37 +++++++++++++++++++++++++++++++ tests/AuthHeaderTest.php | 48 ++++++++++++++++++++++++++++++++++++++++ tests/ExampleTest.php | 5 ----- 3 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 src/Requests/Header.php create mode 100644 tests/AuthHeaderTest.php delete mode 100644 tests/ExampleTest.php diff --git a/src/Requests/Header.php b/src/Requests/Header.php new file mode 100644 index 0000000..45c3caa --- /dev/null +++ b/src/Requests/Header.php @@ -0,0 +1,37 @@ + $k . $v, + array_keys($sortedParameters), + array_values($sortedParameters) + )); + } + + public static function generateNonce(): ?string + { + return md5(uniqid(mt_rand(), true)); + } +} diff --git a/tests/AuthHeaderTest.php b/tests/AuthHeaderTest.php new file mode 100644 index 0000000..3f39327 --- /dev/null +++ b/tests/AuthHeaderTest.php @@ -0,0 +1,48 @@ +toBeEmpty(); + + $params = [ + 'z_index' => 'z value', + 'a_index' => 'a value', + 'b_index' => 'b value', + ]; + $sortedParams = Header::sortQueryParameters($params); + expect($sortedParams) + ->toMatchArray([ + 'a_index' => 'a value', + 'b_index' => 'b value', + 'z_index' => 'z value', + ]); +}); + +it('get sorted query params as string value', function () { + + $digestedParam = Header::digestQueryParameters([]); + expect($digestedParam)->toBeNull(); + + $params = [ + 'z_index' => 'z_value', + 'a_index' => 'a_value', + 'b_index' => 'b_value', + ]; + $sortedParams = Header::digestQueryParameters($params); + expect($sortedParams)->toEqual('a_indexa_valueb_indexb_valuez_indexz_value'); +}); + +it('get some random string 32 bit', function () { + + $firstRandom = Header::generateNonce(); + $secondRandom = Header::generateNonce(); + + expect($firstRandom) + ->toBeString() + ->toHaveLength(32) + ->not()->toEqual($secondRandom) + ->not()->toBeNull(); +}); diff --git a/tests/ExampleTest.php b/tests/ExampleTest.php deleted file mode 100644 index 5d36321..0000000 --- a/tests/ExampleTest.php +++ /dev/null @@ -1,5 +0,0 @@ -toBeTrue(); -}); From d57006f6c3faf06b74fcf038f2ac42c522906f68 Mon Sep 17 00:00:00 2001 From: mahdi msr Date: Fri, 26 Sep 2025 15:53:16 +0330 Subject: [PATCH 2/2] signature: add generate sign value method --- src/Requests/Header.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Requests/Header.php b/src/Requests/Header.php index 45c3caa..8a4201b 100644 --- a/src/Requests/Header.php +++ b/src/Requests/Header.php @@ -34,4 +34,17 @@ class Header { return md5(uniqid(mt_rand(), true)); } + + public static function generateSignValue(array $queryParams = [], string $body = '', string $randomNonce = ''): string + { + $apiKey = config('bitunix-api.api_key'); + $apiSecret = config('bitunix-api.api_secret'); + $timeStamp = (string)round(microtime(true) * 1000); + $digestedQueryParam = self::digestQueryParameters($queryParams); + + $digestedHeader = $randomNonce . $timeStamp . $apiKey . $digestedQueryParam . $body; + $hash = hash('sha256', $digestedHeader); + $sign = $hash . $apiSecret; + return hash('sha256', $sign); + } }