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.
- package/dist/crypto.d.ts +9 -4
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +34 -26
- package/dist/crypto.js.map +1 -1
- package/dist/dat.bank.d.ts +3 -4
- package/dist/dat.bank.d.ts.map +1 -1
- package/dist/dat.bank.js +17 -23
- package/dist/dat.bank.js.map +1 -1
- package/dist/dat.d.ts +22 -0
- package/dist/dat.d.ts.map +1 -0
- package/dist/dat.js +51 -0
- package/dist/dat.js.map +1 -0
- package/dist/dat.key.d.ts +3 -4
- package/dist/dat.key.d.ts.map +1 -1
- package/dist/dat.key.js +26 -31
- package/dist/dat.key.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/signature.d.ts +10 -4
- package/dist/signature.d.ts.map +1 -1
- package/dist/signature.js +119 -94
- package/dist/signature.js.map +1 -1
- package/dist/util.base64.d.ts +6 -0
- package/dist/util.base64.d.ts.map +1 -0
- package/dist/util.base64.js +29 -0
- package/dist/util.base64.js.map +1 -0
- package/dist/util.bytes.d.ts +17 -0
- package/dist/util.bytes.d.ts.map +1 -0
- package/dist/util.bytes.js +86 -0
- package/dist/util.bytes.js.map +1 -0
- package/dist/util.hex.d.ts +3 -0
- package/dist/util.hex.d.ts.map +1 -0
- package/dist/util.hex.js +14 -0
- package/dist/util.hex.js.map +1 -0
- package/dist/util.misc.d.ts +4 -0
- package/dist/util.misc.d.ts.map +1 -0
- package/dist/util.misc.js +22 -0
- package/dist/util.misc.js.map +1 -0
- package/package.json +3 -3
- package/dist/util.d.ts +0 -30
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js +0 -110
- package/dist/util.js.map +0 -1
package/dist/signature.js
CHANGED
|
@@ -1,106 +1,81 @@
|
|
|
1
|
-
import {
|
|
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 =
|
|
44
|
+
this.config = config;
|
|
20
45
|
}
|
|
21
46
|
static async generate(algorithm) {
|
|
22
|
-
const config =
|
|
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(
|
|
29
|
-
|
|
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
|
|
54
|
+
throw errorInvalidKeyFormat();
|
|
38
55
|
}
|
|
39
|
-
const
|
|
40
|
-
let signingKeyBase64 =
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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 (
|
|
64
|
-
if (
|
|
65
|
-
signingKeyBase64 =
|
|
64
|
+
else if (parts.length == 2) {
|
|
65
|
+
if (parts[0]) {
|
|
66
|
+
signingKeyBase64 = parts[0] || null;
|
|
66
67
|
}
|
|
67
|
-
if (
|
|
68
|
-
|
|
68
|
+
if (parts[1]) {
|
|
69
|
+
verifyingKeyBase64 = parts[1] || null;
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
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
|
|
86
|
+
throw errorVerifyingOnly();
|
|
112
87
|
}
|
|
113
88
|
}
|
|
114
89
|
if (option == "FULL" || option == "VERIFYING") {
|
|
115
|
-
rv += '~' +
|
|
90
|
+
rv += '~' + toBase64Url(await crypto.subtle.exportKey("raw", this.verifyingKey));
|
|
116
91
|
}
|
|
117
92
|
return rv;
|
|
118
93
|
}
|
|
119
|
-
async sign(
|
|
94
|
+
async sign(body) {
|
|
120
95
|
if (!this.signingKey) {
|
|
121
|
-
throw
|
|
96
|
+
throw errorVerifyingOnly();
|
|
122
97
|
}
|
|
123
|
-
if (!
|
|
124
|
-
throw
|
|
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
|
|
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
|
package/dist/signature.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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":"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"}
|
|
@@ -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"}
|
package/dist/util.hex.js
ADDED
|
@@ -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
|
|
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
|
package/dist/util.d.ts.map
DELETED
|
@@ -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"}
|