saro-dat 1.0.1 → 1.1.0

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.
Files changed (45) hide show
  1. package/dist/crypto.d.ts +9 -4
  2. package/dist/crypto.d.ts.map +1 -1
  3. package/dist/crypto.js +34 -26
  4. package/dist/crypto.js.map +1 -1
  5. package/dist/dat.bank.d.ts +3 -4
  6. package/dist/dat.bank.d.ts.map +1 -1
  7. package/dist/dat.bank.js +17 -23
  8. package/dist/dat.bank.js.map +1 -1
  9. package/dist/dat.d.ts +22 -0
  10. package/dist/dat.d.ts.map +1 -0
  11. package/dist/dat.js +51 -0
  12. package/dist/dat.js.map +1 -0
  13. package/dist/dat.key.d.ts +3 -4
  14. package/dist/dat.key.d.ts.map +1 -1
  15. package/dist/dat.key.js +26 -31
  16. package/dist/dat.key.js.map +1 -1
  17. package/dist/index.d.ts +5 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +5 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/signature.d.ts +10 -4
  22. package/dist/signature.d.ts.map +1 -1
  23. package/dist/signature.js +119 -94
  24. package/dist/signature.js.map +1 -1
  25. package/dist/util.base64.d.ts +6 -0
  26. package/dist/util.base64.d.ts.map +1 -0
  27. package/dist/util.base64.js +29 -0
  28. package/dist/util.base64.js.map +1 -0
  29. package/dist/util.bytes.d.ts +17 -0
  30. package/dist/util.bytes.d.ts.map +1 -0
  31. package/dist/util.bytes.js +86 -0
  32. package/dist/util.bytes.js.map +1 -0
  33. package/dist/util.hex.d.ts +3 -0
  34. package/dist/util.hex.d.ts.map +1 -0
  35. package/dist/util.hex.js +14 -0
  36. package/dist/util.hex.js.map +1 -0
  37. package/dist/util.misc.d.ts +4 -0
  38. package/dist/util.misc.d.ts.map +1 -0
  39. package/dist/util.misc.js +22 -0
  40. package/dist/util.misc.js.map +1 -0
  41. package/package.json +3 -3
  42. package/dist/util.d.ts +0 -30
  43. package/dist/util.d.ts.map +0 -1
  44. package/dist/util.js +0 -110
  45. package/dist/util.js.map +0 -1
package/dist/signature.js CHANGED
@@ -1,106 +1,81 @@
1
- import { decodeBase64, encodeBase64Url } from "./index.js";
1
+ import { toArrayBuffer, toArrayBufferFromBase64Url, toBase64Url, toUint8ArrayFromBase64Url, } from "./index.js";
2
2
  import { p256, p384, p521 } from '@noble/curves/nist.js';
3
- const algorithms = ["P256", "P384", "P521"];
4
- const options = ["FULL", "SIGNING", "VERIFYING"];
5
3
  const SIGNATURE_CONFIG = {
6
- P256: { name: "ECDSA", curve: 'P-256', hash: 'SHA-256' },
7
- P384: { name: "ECDSA", curve: 'P-384', hash: 'SHA-384' },
8
- P521: { name: "ECDSA", curve: 'P-521', hash: 'SHA-512' },
4
+ "P256": { name: "ECDSA", curve: 'P-256', hash: 'SHA-256' },
5
+ "P384": { name: "ECDSA", curve: 'P-384', hash: 'SHA-384' },
6
+ "P521": { name: "ECDSA", curve: 'P-521', hash: 'SHA-512' },
9
7
  };
8
+ function errorUnsupportedAlgorithm(algorithm) {
9
+ return new Error(`Unsupported DAT Signature Algorithm: ${algorithm}`);
10
+ }
11
+ function errorInvalidKeyFormat() {
12
+ return new Error(`Invalid DAT Signature Key Format`);
13
+ }
14
+ function errorEmptyBody() {
15
+ return new Error(`Sign Error - body is empty`);
16
+ }
17
+ function errorVerifyingOnly() {
18
+ return new Error(`Signature key is not supported - verifying only key`);
19
+ }
20
+ function toDatSignatureKeyOutOption(option) {
21
+ switch (option) {
22
+ case "FULL":
23
+ case "SIGNING":
24
+ case "VERIFYING": return option;
25
+ }
26
+ throw new Error(`Unsupported DAT Signature Key Out Option: ${option}`);
27
+ }
28
+ function getCryptoConfig(algorithm) {
29
+ const config = SIGNATURE_CONFIG[algorithm];
30
+ if (config) {
31
+ return config;
32
+ }
33
+ throw errorUnsupportedAlgorithm(algorithm);
34
+ }
10
35
  export class DatSignatureKey {
11
36
  config;
12
37
  algorithm;
13
38
  signingKey;
14
39
  verifyingKey;
15
- constructor(algorithm, SigningKey, VerifyingKey) {
40
+ constructor(algorithm, SigningKey, VerifyingKey, config = getCryptoConfig(algorithm)) {
16
41
  this.algorithm = algorithm;
17
42
  this.signingKey = SigningKey;
18
43
  this.verifyingKey = VerifyingKey;
19
- this.config = SIGNATURE_CONFIG[algorithm];
44
+ this.config = config;
20
45
  }
21
46
  static async generate(algorithm) {
22
- const config = SIGNATURE_CONFIG[algorithm];
23
- if (!config)
24
- throw new Error(`Unsupported algorithm: ${algorithm}`);
47
+ const config = getCryptoConfig(algorithm);
25
48
  const { publicKey, privateKey } = await crypto.subtle.generateKey({ name: config.name, namedCurve: config.curve, }, true, ["sign", "verify"]);
26
- return new DatSignatureKey(algorithm, privateKey, publicKey);
49
+ return new DatSignatureKey(algorithm, privateKey, publicKey, config);
27
50
  }
28
- static async imports(algorithmString, format) {
29
- if (!algorithms.includes(algorithmString)) {
30
- throw new Error(`Unsupported algorithm: ${algorithmString}`);
31
- }
32
- const algorithm = algorithmString;
33
- const config = SIGNATURE_CONFIG[algorithm];
34
- if (!config)
35
- throw new Error(`Unsupported algorithm: ${algorithm}`);
51
+ static async imports(algorithm, format) {
52
+ const config = getCryptoConfig(algorithm);
36
53
  if (!format) {
37
- throw new Error("Invalid format");
54
+ throw errorInvalidKeyFormat();
38
55
  }
39
- const split = format.split("~");
40
- let signingKeyBase64 = '';
41
- let signingKey = null;
42
- let verifyingKeyBytes = new Uint8Array(0);
43
- let verifyingKey = null;
44
- let ecdsa;
45
- switch (algorithm) {
46
- case "P256":
47
- ecdsa = p256;
48
- break;
49
- case "P384":
50
- ecdsa = p384;
51
- break;
52
- case "P521":
53
- ecdsa = p521;
54
- break;
55
- default:
56
- throw new Error(`Unsupported algorithm: ${algorithm}`);
57
- }
58
- if (split.length == 1) {
59
- if (split[0]) {
60
- signingKeyBase64 = split[0];
56
+ const parts = format.split("~");
57
+ let signingKeyBase64 = null;
58
+ let verifyingKeyBase64 = null;
59
+ if (parts.length == 1) { // signing key only
60
+ if (parts[0]) {
61
+ signingKeyBase64 = parts[0] || null;
61
62
  }
62
63
  }
63
- else if (split.length == 2) {
64
- if (split[0]) {
65
- signingKeyBase64 = split[0];
64
+ else if (parts.length == 2) {
65
+ if (parts[0]) {
66
+ signingKeyBase64 = parts[0] || null;
66
67
  }
67
- if (split[1]) {
68
- verifyingKeyBytes = new Uint8Array(decodeBase64(split[1]));
68
+ if (parts[1]) {
69
+ verifyingKeyBase64 = parts[1] || null;
69
70
  }
70
71
  }
71
- if (signingKeyBase64) {
72
- const dBytes = decodeBase64(signingKeyBase64);
73
- // d로부터 공개 (Point) 계산
74
- const publicPoint = ecdsa.getPublicKey(dBytes, false);
75
- // 곡선별 좌표 길이 계산: (전체 길이 - 1) / 2 - 좌표 추출
76
- const coordinateLen = (publicPoint.length - 1) / 2;
77
- const xBytes = publicPoint.slice(1, 1 + coordinateLen);
78
- const yBytes = publicPoint.slice(1 + coordinateLen, 1 + 2 * coordinateLen);
79
- const jwk = {
80
- kty: "EC",
81
- crv: config.curve,
82
- d: signingKeyBase64,
83
- x: encodeBase64Url(xBytes),
84
- y: encodeBase64Url(yBytes),
85
- ext: true,
86
- };
87
- signingKey = await crypto.subtle.importKey("jwk", jwk, { name: "ECDSA", namedCurve: config.curve }, true, ["sign"]);
88
- }
89
- if (verifyingKeyBytes.byteLength === 0 && signingKeyBase64) {
90
- verifyingKeyBytes = ecdsa.getPublicKey(decodeBase64(signingKeyBase64), false);
91
- }
92
- if (verifyingKeyBytes.byteLength) {
93
- verifyingKey = await crypto.subtle.importKey("raw", verifyingKeyBytes, { name: config.name, namedCurve: config.curve }, true, ["verify"]);
94
- }
95
- else {
96
- throw new Error("Invalid format");
97
- }
98
- return new DatSignatureKey(algorithm, signingKey, verifyingKey);
72
+ // 현재는 EC 계열밖에 없어서 따로 예외처리 하진 않는다.
73
+ // 검증키가 추가되면 이부분도 바뀌어야 한다.
74
+ let keyPair = await toEcdsaKeyPair(config, signingKeyBase64, verifyingKeyBase64);
75
+ return new DatSignatureKey(algorithm, keyPair.privateKey, keyPair.publicKey, config);
99
76
  }
100
77
  async exports(option) {
101
- if (!options.includes(option)) {
102
- throw new Error(`Unsupported option: ${option}`);
103
- }
78
+ option = toDatSignatureKeyOutOption(option);
104
79
  let rv = "";
105
80
  if (option == "FULL" || option == "SIGNING") {
106
81
  if (this.signingKey) {
@@ -108,37 +83,87 @@ export class DatSignatureKey {
108
83
  rv += jwk.d;
109
84
  }
110
85
  else {
111
- throw new Error("this key is verifying only");
86
+ throw errorVerifyingOnly();
112
87
  }
113
88
  }
114
89
  if (option == "FULL" || option == "VERIFYING") {
115
- rv += '~' + encodeBase64Url(await crypto.subtle.exportKey("raw", this.verifyingKey));
90
+ rv += '~' + toBase64Url(await crypto.subtle.exportKey("raw", this.verifyingKey));
116
91
  }
117
92
  return rv;
118
93
  }
119
- async sign(data) {
94
+ async sign(body) {
120
95
  if (!this.signingKey) {
121
- throw new Error("this key is verifying only");
96
+ throw errorVerifyingOnly();
122
97
  }
123
- if (!data?.byteLength) {
124
- throw new Error("data is required");
98
+ if (!(body = toArrayBuffer(body)).byteLength) {
99
+ throw errorEmptyBody();
125
100
  }
126
- return crypto.subtle.sign({
127
- name: this.config.name,
128
- hash: { name: this.config.hash },
129
- }, this.signingKey, data);
101
+ return crypto.subtle.sign({ name: this.config.name, hash: { name: this.config.hash }, }, this.signingKey, body);
130
102
  }
131
103
  async verify(body, signature) {
132
- if (!body?.byteLength || !signature) {
104
+ if (!(body = toArrayBuffer(body)).byteLength) {
105
+ return false;
106
+ }
107
+ if (typeof signature == "string") {
108
+ signature = toArrayBufferFromBase64Url(signature);
109
+ }
110
+ else {
111
+ signature = toArrayBuffer(signature);
112
+ }
113
+ if (!signature.byteLength) {
133
114
  return false;
134
115
  }
135
- return crypto.subtle.verify({
136
- name: this.config.name,
137
- hash: { name: this.config.hash },
138
- }, this.verifyingKey, signature, body);
116
+ return crypto.subtle.verify({ name: this.config.name, hash: { name: this.config.hash }, }, this.verifyingKey, signature, body);
139
117
  }
140
118
  hasSigningKey() {
141
119
  return this.signingKey !== null;
142
120
  }
143
121
  }
122
+ async function toEcdsaKeyPair(config, privateKeyBase64, publicKeyBase64) {
123
+ let ecdsa;
124
+ switch (config.curve) {
125
+ case "P-256":
126
+ ecdsa = p256;
127
+ break;
128
+ case "P-384":
129
+ ecdsa = p384;
130
+ break;
131
+ case "P-521":
132
+ ecdsa = p521;
133
+ break;
134
+ default: throw errorUnsupportedAlgorithm(config.curve);
135
+ }
136
+ let privateKey = null;
137
+ let privateKeyBytes = null;
138
+ if (privateKeyBase64) {
139
+ privateKeyBytes = toUint8ArrayFromBase64Url(privateKeyBase64);
140
+ // d로부터 공개 키(Point) 계산
141
+ const publicPoint = ecdsa.getPublicKey(privateKeyBytes, false);
142
+ // 곡선별 좌표 길이 계산: (전체 길이 - 1) / 2 - 좌표 추출
143
+ const coordinateLen = (publicPoint.length - 1) / 2;
144
+ const xBytes = publicPoint.slice(1, 1 + coordinateLen);
145
+ const yBytes = publicPoint.slice(1 + coordinateLen, 1 + 2 * coordinateLen);
146
+ const jwk = {
147
+ kty: "EC",
148
+ crv: config.curve,
149
+ d: privateKeyBase64,
150
+ x: toBase64Url(xBytes),
151
+ y: toBase64Url(yBytes),
152
+ ext: true,
153
+ };
154
+ privateKey = await crypto.subtle.importKey("jwk", jwk, { name: "ECDSA", namedCurve: config.curve }, true, ["sign"]);
155
+ }
156
+ let publicKeyBytes;
157
+ if (publicKeyBase64) {
158
+ publicKeyBytes = toArrayBufferFromBase64Url(publicKeyBase64);
159
+ }
160
+ else if (privateKeyBytes?.byteLength) {
161
+ publicKeyBytes = toArrayBuffer(ecdsa.getPublicKey(privateKeyBytes, false));
162
+ }
163
+ else {
164
+ throw errorInvalidKeyFormat();
165
+ }
166
+ let publicKey = await crypto.subtle.importKey("raw", publicKeyBytes, { name: config.name, namedCurve: config.curve }, true, ["verify"]);
167
+ return { privateKey, publicKey };
168
+ }
144
169
  //# sourceMappingURL=signature.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function toUint8ArrayFromBase64Url(data: any): Uint8Array;
2
+ export declare function toArrayBufferFromBase64Url(data: any): ArrayBuffer;
3
+ export declare function toUtf8FromBase64Url(data: any): string;
4
+ export declare function toBase64UrlFromUint8Array(data: Uint8Array): string;
5
+ export declare function toBase64Url(data: any): string;
6
+ //# sourceMappingURL=util.base64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.base64.d.ts","sourceRoot":"","sources":["../src/util.base64.ts"],"names":[],"mappings":"AASA,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,GAAG,GAAG,UAAU,CAK/D;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,CAKjE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAErD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAElE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAE7C"}
@@ -0,0 +1,29 @@
1
+ import { toArrayBuffer, toUint8Array, toUtf8 } from "./index.js";
2
+ function toUint8ArrayFromBase64UrlString(data) {
3
+ return Uint8Array.fromBase64(data, {
4
+ "alphabet": "base64url",
5
+ "lastChunkHandling": "loose"
6
+ });
7
+ }
8
+ export function toUint8ArrayFromBase64Url(data) {
9
+ if (typeof data === 'string') {
10
+ return toUint8ArrayFromBase64UrlString(data);
11
+ }
12
+ return toUint8Array(data);
13
+ }
14
+ export function toArrayBufferFromBase64Url(data) {
15
+ if (typeof data === 'string') {
16
+ return toUint8ArrayFromBase64UrlString(data).buffer;
17
+ }
18
+ return toArrayBuffer(data);
19
+ }
20
+ export function toUtf8FromBase64Url(data) {
21
+ return toUtf8(toUint8ArrayFromBase64Url(data));
22
+ }
23
+ export function toBase64UrlFromUint8Array(data) {
24
+ return data.toBase64({ "alphabet": "base64url", omitPadding: true });
25
+ }
26
+ export function toBase64Url(data) {
27
+ return toBase64UrlFromUint8Array(toUint8Array(data));
28
+ }
29
+ //# sourceMappingURL=util.base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.base64.js","sourceRoot":"","sources":["../src/util.base64.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,MAAM,EAAC,MAAM,YAAY,CAAC;AAE/D,SAAS,+BAA+B,CAAC,IAAY;IACjD,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE;QAC/B,UAAU,EAAE,WAAW;QACvB,mBAAmB,EAAE,OAAO;KAC/B,CAAC,CAAA;AACN,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAS;IAC/C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,+BAA+B,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAS;IAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,+BAA+B,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IACvD,CAAC;IACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAS;IACzC,OAAO,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAgB;IACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAC,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAS;IACjC,OAAO,yBAAyB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;AACxD,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Check if the data is empty<br/>
3
+ * Support Types:
4
+ * - null, undefined, boolean, number, string, bigint, ArrayBuffer, SharedArrayBuffer, Uint8Array
5
+ * @param data
6
+ * @returns
7
+ * - false type: undefined, null
8
+ * - auto: boolean, number, string, bigint
9
+ * - check: have length
10
+ */
11
+ export declare function isEmpty(data: any): boolean;
12
+ export declare function concatArrayBuffer(arr1: ArrayBufferLike | Uint8Array, arr2: ArrayBufferLike | Uint8Array): ArrayBuffer;
13
+ export declare function toUint8Array(data: any): Uint8Array;
14
+ export declare function toArrayBuffer(data: any): ArrayBuffer;
15
+ export declare function toSharedArrayBuffer(data: any): SharedArrayBuffer;
16
+ export declare function toUtf8(data: any): string;
17
+ //# sourceMappingURL=util.bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.bytes.d.ts","sourceRoot":"","sources":["../src/util.bytes.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAK1C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAC,UAAU,EAAE,IAAI,EAAE,eAAe,GAAC,UAAU,GAAG,WAAW,CAKjH;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,UAAU,CAclD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,CAmBpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,CAYhE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAWxC"}
@@ -0,0 +1,86 @@
1
+ //const ASCII_DECODER = new TextDecoder('ascii');
2
+ const UTF8_ENCODER = new TextEncoder();
3
+ const UTF8_DECODER = new TextDecoder('utf-8', { fatal: true });
4
+ /**
5
+ * Check if the data is empty<br/>
6
+ * Support Types:
7
+ * - null, undefined, boolean, number, string, bigint, ArrayBuffer, SharedArrayBuffer, Uint8Array
8
+ * @param data
9
+ * @returns
10
+ * - false type: undefined, null
11
+ * - auto: boolean, number, string, bigint
12
+ * - check: have length
13
+ */
14
+ export function isEmpty(data) {
15
+ if (data) {
16
+ return data.length === 0;
17
+ }
18
+ return true;
19
+ }
20
+ export function concatArrayBuffer(arr1, arr2) {
21
+ const buf = new Uint8Array(arr1.byteLength + arr2.byteLength);
22
+ buf.set(arr1 instanceof Uint8Array ? arr1 : new Uint8Array(arr1), 0);
23
+ buf.set(arr2 instanceof Uint8Array ? arr2 : new Uint8Array(arr2), arr1.byteLength);
24
+ return buf.buffer;
25
+ }
26
+ export function toUint8Array(data) {
27
+ if (data instanceof Uint8Array) {
28
+ return data;
29
+ }
30
+ if (isEmpty(data)) {
31
+ return new Uint8Array(0);
32
+ }
33
+ if (typeof data === 'string') {
34
+ return UTF8_ENCODER.encode(data);
35
+ }
36
+ if (data instanceof ArrayBuffer || data instanceof SharedArrayBuffer) {
37
+ return new Uint8Array(data, 0, data.byteLength);
38
+ }
39
+ throw new Error('Unsupported Type\nUse string, ArrayBufferLike, Uint8Array, null, undefined');
40
+ }
41
+ export function toArrayBuffer(data) {
42
+ if (data instanceof ArrayBuffer) {
43
+ return data;
44
+ }
45
+ if (isEmpty(data)) {
46
+ return new ArrayBuffer(0);
47
+ }
48
+ if (typeof data === 'string') {
49
+ return UTF8_ENCODER.encode(data).buffer;
50
+ }
51
+ if (data instanceof Uint8Array) {
52
+ return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
53
+ }
54
+ if (data instanceof SharedArrayBuffer) {
55
+ const buffer = new Uint8Array(data.byteLength);
56
+ buffer.set(new Uint8Array(data));
57
+ return buffer.buffer;
58
+ }
59
+ throw new Error('Unsupported Type\nUse string, ArrayBufferLike, Uint8Array, null, undefined');
60
+ }
61
+ export function toSharedArrayBuffer(data) {
62
+ if (data instanceof SharedArrayBuffer) {
63
+ return data;
64
+ }
65
+ if (isEmpty(data)) {
66
+ return new SharedArrayBuffer(0);
67
+ }
68
+ const uint8Array = toUint8Array(data);
69
+ const sharedArrayBuffer = new SharedArrayBuffer(uint8Array.byteLength);
70
+ const sharedArrayView = new Uint8Array(sharedArrayBuffer);
71
+ sharedArrayView.set(uint8Array);
72
+ return sharedArrayBuffer;
73
+ }
74
+ export function toUtf8(data) {
75
+ if (typeof data === 'string') {
76
+ return data;
77
+ }
78
+ if (isEmpty(data)) {
79
+ return '';
80
+ }
81
+ if (data instanceof Uint8Array || data instanceof ArrayBuffer || data instanceof SharedArrayBuffer) {
82
+ return UTF8_DECODER.decode(data);
83
+ }
84
+ throw new Error('Unsupported Type\nUse string, ArrayBufferLike, Uint8Array, null, undefined');
85
+ }
86
+ //# sourceMappingURL=util.bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.bytes.js","sourceRoot":"","sources":["../src/util.bytes.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;AACvC,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;AAG7D;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,IAAS;IAC7B,IAAI,IAAI,EAAE,CAAC;QACP,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAgC,EAAE,IAAgC;IAChG,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACnF,OAAO,GAAG,CAAC,MAAM,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAS;IAClC,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;QACnE,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAS;IACnC,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAgB,CAAC;IAChG,CAAC;IACD,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAS;IACzC,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,iBAAiB,GAAsB,IAAI,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC1D,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAS;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,IAAI,YAAY,UAAU,IAAI,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;QACjG,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;AAClG,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function toUint8ArrayFromHex(data: any): Uint8Array;
2
+ export declare function toArrayBufferFromHex(data: any): ArrayBuffer;
3
+ //# sourceMappingURL=util.hex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.hex.d.ts","sourceRoot":"","sources":["../src/util.hex.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,UAAU,CAKzD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,CAK3D"}
@@ -0,0 +1,14 @@
1
+ import { toArrayBuffer, toUint8Array } from "./index.js";
2
+ export function toUint8ArrayFromHex(data) {
3
+ if (typeof data === 'string') {
4
+ return Uint8Array.fromHex(data);
5
+ }
6
+ return toUint8Array(data);
7
+ }
8
+ export function toArrayBufferFromHex(data) {
9
+ if (typeof data === 'string') {
10
+ return Uint8Array.fromHex(data).buffer;
11
+ }
12
+ return toArrayBuffer(data);
13
+ }
14
+ //# sourceMappingURL=util.hex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.hex.js","sourceRoot":"","sources":["../src/util.hex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAEvD,MAAM,UAAU,mBAAmB,CAAC,IAAS;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAS;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IAC1C,CAAC;IACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function nowUnixtime(): number;
2
+ export declare function toSafeIntegerOrNaN(no: number | string): number;
3
+ export declare function isIntegerRanged(no: number, min?: number | undefined, max?: number | undefined): boolean;
4
+ //# sourceMappingURL=util.misc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.misc.d.ts","sourceRoot":"","sources":["../src/util.misc.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAC,MAAM,GAAG,MAAM,CAK5D;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,GAAC,SAAqB,EAAE,GAAG,GAAE,MAAM,GAAC,SAAqB,GAAG,OAAO,CAWzH"}
@@ -0,0 +1,22 @@
1
+ export function nowUnixtime() {
2
+ return Math.floor(new Date().getTime() / 1000);
3
+ }
4
+ export function toSafeIntegerOrNaN(no) {
5
+ if (typeof no === 'string') {
6
+ no = no ? Number(no) : Number.NaN;
7
+ }
8
+ return Number.isSafeInteger(no) ? no : Number.NaN;
9
+ }
10
+ export function isIntegerRanged(no, min = undefined, max = undefined) {
11
+ if (!Number.isSafeInteger(no)) {
12
+ return false;
13
+ }
14
+ if (typeof min == 'number' && !(no >= min)) {
15
+ return false;
16
+ }
17
+ if (typeof max == 'number' && !(no <= max)) {
18
+ return false;
19
+ }
20
+ return true;
21
+ }
22
+ //# sourceMappingURL=util.misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.misc.js","sourceRoot":"","sources":["../src/util.misc.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW;IACvB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAiB;IAChD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QACzB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,MAAwB,SAAS,EAAE,MAAwB,SAAS;IAC5G,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "saro-dat",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Distributed Access Token",
5
5
  "keywords": [
6
6
  "dat",
@@ -39,10 +39,10 @@
39
39
  "prepublishOnly": "npm run build"
40
40
  },
41
41
  "dependencies": {
42
- "@noble/curves": "^2.2.0",
43
- "buffer": "^6.0.3"
42
+ "@noble/curves": "^2.2.0"
44
43
  },
45
44
  "devDependencies": {
45
+ "@types/node": "^25.6.0",
46
46
  "typescript": "^6.0.3",
47
47
  "vitest": "^4.1.5"
48
48
  }
package/dist/util.d.ts DELETED
@@ -1,30 +0,0 @@
1
- import { Buffer } from "buffer";
2
- export type DatParts = {
3
- error: boolean;
4
- dat: string;
5
- expire: number;
6
- kid: string;
7
- plain: string;
8
- secure: string;
9
- signature: string;
10
- };
11
- export type DatPayload = {
12
- expire: number;
13
- plain: string;
14
- secure: string;
15
- };
16
- export type DatPayloadBuffer = {
17
- expire: number;
18
- plain: Buffer;
19
- secure: Buffer;
20
- };
21
- export declare function encodeBase64Url(data: any): string;
22
- export declare function decodeBase64String(b64: any): string;
23
- export declare function decodeBase64(b64: any): Buffer;
24
- export declare function concatArrayBufferLike(arr1: ArrayBufferLike, arr2: ArrayBufferLike): ArrayBuffer;
25
- export declare function toArrayBuffer(data: string | ArrayBuffer | Uint8Array | SharedArrayBuffer | Buffer | null | undefined): ArrayBuffer;
26
- export declare function randomString(length: number, mold: string): string;
27
- export declare function randomBase62(length: number): string;
28
- export declare function splitDat(dat: string | null | undefined): DatParts;
29
- export declare function serializePayload(payloadBuffer: DatPayloadBuffer): DatPayload;
30
- //# sourceMappingURL=util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAM9B,MAAM,MAAM,QAAQ,GAAG;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAaF,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAcjD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAEnD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAa7C;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,GAAG,WAAW,CAK/F;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CA+BlI;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAejE;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,GAAG,UAAU,CAM5E"}