@edgenets/utils 0.0.25 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ export declare class SignatureManager {
2
+ static generateSignature(data: Record<string, unknown>, secretKey: string): string;
3
+ static validateSignature(data: Record<string, unknown>, receivedSignature: string, secretKey: string): boolean;
4
+ private static safeCompare;
5
+ private static sortObjectKeys;
6
+ static signWithTimestampAndNonce(data: Record<string, unknown>, secretKey: string, timestamp?: number, nonce?: string): {
7
+ signature: string;
8
+ timestamp: number;
9
+ nonce: string;
10
+ };
11
+ }
12
+ //# sourceMappingURL=signature.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.util.d.ts","sourceRoot":"","sources":["../../src/utils/signature.util.ts"],"names":[],"mappings":"AAEA,qBAAa,gBAAgB;WAEb,iBAAiB,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,MAAM,GAChB,MAAM;WAqBK,iBAAiB,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO;IAMV,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,OAAO,CAAC,MAAM,CAAC,cAAc;WAmBf,yBAAyB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAmB,EAC9B,KAAK,GAAE,MAAoD,GAC1D;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAK3D"}
@@ -0,0 +1,56 @@
1
+ import { createHmac } from "crypto";
2
+ export class SignatureManager {
3
+ // 生成签名的方法
4
+ static generateSignature(data, secretKey) {
5
+ const sortedData = Object.keys(data)
6
+ .sort() // 按字母顺序排序字段
7
+ .map((key) => {
8
+ const value = data[key];
9
+ if (value && typeof value === "object" && !Array.isArray(value)) {
10
+ const serializedValue = JSON.stringify(this.sortObjectKeys(value));
11
+ return `${key}=${serializedValue}`;
12
+ }
13
+ else {
14
+ const serializedValue = JSON.stringify(value); // 确保值被正确序列化
15
+ return `${key}=${serializedValue}`;
16
+ }
17
+ })
18
+ .join("&");
19
+ return createHmac("sha256", secretKey).update(sortedData).digest("hex");
20
+ }
21
+ // 验证签名的方法
22
+ static validateSignature(data, receivedSignature, secretKey) {
23
+ const calculatedSignature = this.generateSignature(data, secretKey);
24
+ return this.safeCompare(calculatedSignature, receivedSignature);
25
+ }
26
+ // 安全比较函数,防止时间攻击
27
+ static safeCompare(a, b) {
28
+ if (a.length !== b.length)
29
+ return false;
30
+ let result = 0;
31
+ for (let i = 0; i < a.length; i++) {
32
+ result |= a.charCodeAt(i) ^ b.charCodeAt(i);
33
+ }
34
+ return result === 0;
35
+ }
36
+ // 对对象的键进行递归排序
37
+ static sortObjectKeys(obj) {
38
+ return Object.keys(obj)
39
+ .sort()
40
+ .reduce((acc, key) => {
41
+ const value = obj[key];
42
+ acc[key] =
43
+ value && typeof value === "object" && !Array.isArray(value)
44
+ ? this.sortObjectKeys(value)
45
+ : value;
46
+ return acc;
47
+ }, {});
48
+ }
49
+ // 增加时间戳和 nonce 并生成签名
50
+ static signWithTimestampAndNonce(data, secretKey, timestamp = Date.now(), nonce = Math.random().toString(36).substring(2, 15)) {
51
+ const extendedData = { ...data, timestamp, nonce };
52
+ const signature = this.generateSignature(extendedData, secretKey);
53
+ return { signature, timestamp, nonce };
54
+ }
55
+ }
56
+ //# sourceMappingURL=signature.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.util.js","sourceRoot":"","sources":["../../src/utils/signature.util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edgenets/utils",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "Edgenets utilities package containing common types and utilities.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -16,5 +16,8 @@
16
16
  "build": "eslint --fix && tsc -p tsconfig.json",
17
17
  "test": "echo 'Skip Tests'",
18
18
  "public": "pnpm build && npm version patch && npm publish --access public"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "~20.16.15"
19
22
  }
20
23
  }