saro-dat 2.0.1 → 3.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/README.md +40 -66
- package/dist/dat.bank.d.ts.map +1 -1
- package/dist/dat.bank.js +52 -30
- package/dist/dat.bank.js.map +1 -1
- package/dist/dat.certificate.d.ts +16 -0
- package/dist/dat.certificate.d.ts.map +1 -0
- package/dist/dat.certificate.js +64 -0
- package/dist/dat.certificate.js.map +1 -0
- package/dist/dat.d.ts +7 -7
- package/dist/dat.d.ts.map +1 -1
- package/dist/dat.js +14 -14
- package/dist/dat.js.map +1 -1
- package/dist/dat.key.js +68 -55
- package/dist/dat.key.js.map +1 -1
- package/dist/dat.manager.d.ts +15 -0
- package/dist/dat.manager.d.ts.map +1 -0
- package/dist/dat.manager.js +76 -0
- package/dist/dat.manager.js.map +1 -0
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,66 +1,12 @@
|
|
|
1
1
|
# DAT - Distributed Access Token
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
```
|
|
5
|
-
saro-dat
|
|
6
|
-
```
|
|
7
|
-
|
|
8
|
-
# DAT
|
|
9
|
-
```
|
|
10
|
-
# Example
|
|
11
|
-
signature_algorithm: P256
|
|
12
|
-
crypto_algorithm: AES128GCMN
|
|
13
|
-
plain: 123
|
|
14
|
-
secure: asdf
|
|
15
|
-
|
|
16
|
-
# DAT result Example
|
|
17
|
-
1776530737.11.MTIz.8yKUvzs7mg3tDwdeA9I2gNOliewpTgm9OVbEY3Qh6io.qfnqmXKuNE3MfRr576rxNMCchxbY1iqC07-woJcbCudt2O0BAyK_86ypaSfLJjkGq9FZxpGrsgBDkk-xQhGvmA
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
> ```expire```.```kid```.```plain```.```secure```.```sign```
|
|
3
|
+
## Document
|
|
21
4
|
|
|
22
|
-
|
|
23
|
-
- Unix-Timestamp (sec)
|
|
24
|
-
- ```kid```: stringifiable
|
|
25
|
-
- key id
|
|
26
|
-
- ```plain```: base64 url no pad
|
|
27
|
-
- Text Data
|
|
28
|
-
- ```secure```: base64 url no pad
|
|
29
|
-
- Encrypted Text Data
|
|
30
|
-
- ```sign```: base64 url no pad
|
|
31
|
-
- dat-bank\[kid\].sign(expire.kid.plain.secure)
|
|
5
|
+
### [DAT Run Online](https://dat.saro.me)
|
|
32
6
|
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
# Example
|
|
36
|
-
1.2.P256.DErFl-U5h4fdbnAXTTs2GikkJgZwYXV25v2EdFeXIXs.AES128GCMN.5VEziIzCu2LRsK1XS6OYxA.1776541326.1776544626.1800
|
|
37
|
-
```
|
|
38
|
-
> ```version```.```kid```.```signature-algorithm```.```signature-key```.```crypto-algorithm```.```crypto-key```.```issue-begin```.```issue-end```.```token-ttl```
|
|
39
|
-
|
|
40
|
-
- ```version```: number
|
|
41
|
-
- dat-key format version
|
|
42
|
-
- ```kid```: stringifiable
|
|
43
|
-
- key id
|
|
44
|
-
- ```signature-algorithm```: text
|
|
45
|
-
- sign algorithm
|
|
46
|
-
- ```signature-key```: base64 url no pad
|
|
47
|
-
> The signature-key is categorized into three types: FULL (signing-key~verifying-key), SIGNING (signing-key), and VERIFYING (~verifying-key).
|
|
48
|
-
>
|
|
49
|
-
> Whether a key is for sign or verify can be distinguished by the presence of a leading tilde (~). Generally, if you output the sign key alone, the public key can be derived from it (using the private key). However, depending on the platform, this derivation feature may not be available; in such cases, you should output the full key and parse it for use.
|
|
50
|
-
- FULL: \<signing key base64\>~\<verifying key base64\>
|
|
51
|
-
- SIGNING: \<signing key base64\>
|
|
52
|
-
- VERIFYING: ~\<verifying key base64\>
|
|
53
|
-
- ```crypto-algorithm```: text
|
|
54
|
-
- crypto algorithm,
|
|
55
|
-
- ```crypto-key```: base64 url no pad
|
|
56
|
-
- crypto key
|
|
57
|
-
- ```issue-begin```: number
|
|
58
|
-
- issue begin time
|
|
59
|
-
- ```issue-end```: number
|
|
60
|
-
- issue end time
|
|
61
|
-
- ```token-ttl```: number
|
|
62
|
-
- token(dat) TTL
|
|
7
|
+
### [What is DAT](https://dat.saro.me/--/intro)
|
|
63
8
|
|
|
9
|
+
### [Example](https://dat.saro.me/--/libs/npm-saro-dat)
|
|
64
10
|
|
|
65
11
|
## support signature algorithm
|
|
66
12
|
| name | algorithm |
|
|
@@ -76,11 +22,39 @@ secure: asdf
|
|
|
76
22
|
| AES256GCMN | aes-256-cbc n(nonce + body) |
|
|
77
23
|
|
|
78
24
|
|
|
79
|
-
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
25
|
+
# Performance
|
|
26
|
+
- random plain and secure test
|
|
27
|
+
- mac mini m4 2024 basic (10 core)
|
|
28
|
+
- [bench.test.ts](src/bench.test.ts)
|
|
29
|
+
```
|
|
30
|
+
plain: DUOLyFJcrYDzdNK2FdADCJahjrWdbbtahFZszhTpxN8hOzhHuJOiDB436uzpY7cWwlWWrjyY7CxWhPalNEwQDXsHAUJMNW7feU3O
|
|
31
|
+
secure: VyxyrpfzpEJBaGfwxp7doVdEBT8Sg0vqFFLYpWV87b3q2sUfiflOIRsb8lxcQuvZCTgs0Bx7xEDns4iHbuGILX7s2bOz26Zy6RBB
|
|
32
|
+
|
|
33
|
+
Multi-Thread
|
|
34
|
+
P256 AES128GCMN Issue * 10000 : 214ms
|
|
35
|
+
P256 AES128GCMN Parse * 10000 : 219ms
|
|
36
|
+
P256 AES256GCMN Issue * 10000 : 193ms
|
|
37
|
+
P256 AES256GCMN Parse * 10000 : 181ms
|
|
38
|
+
P384 AES128GCMN Issue * 10000 : 1028ms
|
|
39
|
+
P384 AES128GCMN Parse * 10000 : 868ms
|
|
40
|
+
P384 AES256GCMN Issue * 10000 : 1105ms
|
|
41
|
+
P384 AES256GCMN Parse * 10000 : 865ms
|
|
42
|
+
P521 AES128GCMN Issue * 10000 : 2602ms
|
|
43
|
+
P521 AES128GCMN Parse * 10000 : 1893ms
|
|
44
|
+
P521 AES256GCMN Issue * 10000 : 2624ms
|
|
45
|
+
P521 AES256GCMN Parse * 10000 : 1922ms
|
|
46
|
+
|
|
47
|
+
Single-Thread
|
|
48
|
+
P256 AES128GCMN Issue * 10000 : 452ms
|
|
49
|
+
P256 AES128GCMN Parse * 10000 : 709ms
|
|
50
|
+
P256 AES256GCMN Issue * 10000 : 465ms
|
|
51
|
+
P256 AES256GCMN Parse * 10000 : 744ms
|
|
52
|
+
P384 AES128GCMN Issue * 10000 : 4592ms
|
|
53
|
+
P384 AES128GCMN Parse * 10000 : 3656ms
|
|
54
|
+
P384 AES256GCMN Issue * 10000 : 4412ms
|
|
55
|
+
P384 AES256GCMN Parse * 10000 : 3682ms
|
|
56
|
+
P521 AES128GCMN Issue * 10000 : 10517ms
|
|
57
|
+
P521 AES128GCMN Parse * 10000 : 7502ms
|
|
58
|
+
P521 AES256GCMN Issue * 10000 : 10444ms
|
|
59
|
+
P521 AES256GCMN Parse * 10000 : 7541ms
|
|
60
|
+
```
|
package/dist/dat.bank.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dat.bank.d.ts","sourceRoot":"","sources":["../src/dat.bank.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAG,MAAM,YAAY,CAAC;AAE/E,qBAAa,OAAO;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,QAAQ,GAAE,MAAM,GAAG,IAAW,EAAE,UAAU,GAAE,MAAM,EAAO;WAKxD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"dat.bank.d.ts","sourceRoot":"","sources":["../src/dat.bank.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAG,MAAM,YAAY,CAAC;AAE/E,qBAAa,OAAO;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,QAAQ,GAAE,MAAM,GAAG,IAAW,EAAE,UAAU,GAAE,MAAM,EAAO;WAKxD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BhD,OAAO,CAAC,wBAAwB,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlF,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI1B,KAAK,CAAC,KAAK,EAAE,eAAe,GAAC,UAAU,GAAC,MAAM,GAAC,IAAI,GAAC,SAAS,EAAE,MAAM,EAAE,eAAe,GAAC,UAAU,GAAC,MAAM,GAAC,IAAI,GAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAOzI,SAAS,CAAC,GAAG,EAAE,GAAG,GAAC,MAAM,GAAC,SAAS,GAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;CAUvE"}
|
package/dist/dat.bank.js
CHANGED
|
@@ -1,46 +1,68 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
1
10
|
import { Dat, DatKey, } from "./index.js";
|
|
2
11
|
export class DatBank {
|
|
3
|
-
issueKey;
|
|
4
|
-
verifyKeys;
|
|
5
12
|
constructor(issueKey = null, verifyKeys = []) {
|
|
6
13
|
this.issueKey = issueKey;
|
|
7
14
|
this.verifyKeys = verifyKeys;
|
|
8
15
|
}
|
|
9
|
-
static
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
static imports(format) {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const lines = format.split('\n').map(e => e.trim()).filter(e => !!e);
|
|
19
|
+
let keys = [];
|
|
20
|
+
for (const line of lines) {
|
|
21
|
+
const key = yield DatKey.imports(line);
|
|
22
|
+
if (keys.find(e => e.kid === key.kid)) {
|
|
23
|
+
throw new Error(`Invalid DAT KEYS - Duplicate KID ${key.kid}`);
|
|
24
|
+
}
|
|
25
|
+
keys.push(key);
|
|
16
26
|
}
|
|
17
|
-
keys.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
27
|
+
keys.sort((a, b) => a.issueBegin - b.issueBegin);
|
|
28
|
+
let issueKey = null;
|
|
29
|
+
for (let i = keys.length - 1; i >= 0; i--) {
|
|
30
|
+
const key = keys[i];
|
|
31
|
+
if (key.isIssuable()) {
|
|
32
|
+
issueKey = key;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return new DatBank(issueKey, keys);
|
|
37
|
+
});
|
|
22
38
|
}
|
|
23
|
-
|
|
24
|
-
return (
|
|
39
|
+
exports(datSignatureKeyOutOption) {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
return (yield Promise.all(this.verifyKeys.map(e => e.exports(datSignatureKeyOutOption)))).join('\n');
|
|
42
|
+
});
|
|
25
43
|
}
|
|
26
44
|
find(kid) {
|
|
27
45
|
return this.verifyKeys.find(e => e.kid === kid) || null;
|
|
28
46
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
47
|
+
toDat(plain, secure) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
if (this.issueKey) {
|
|
50
|
+
return yield this.issueKey.toDat(plain, secure);
|
|
51
|
+
}
|
|
52
|
+
throw new Error("Invalid DAT: Signing Key Does Not Exist");
|
|
53
|
+
});
|
|
34
54
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
55
|
+
toPayload(dat) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
if (!(dat = Dat.from(dat)).format) {
|
|
58
|
+
throw new Error("Invalid DAT: Format");
|
|
59
|
+
}
|
|
60
|
+
const key = this.find(dat.kid);
|
|
61
|
+
if (key != null) {
|
|
62
|
+
return key.toPayload(dat);
|
|
63
|
+
}
|
|
64
|
+
throw new Error("Invalid DAT: KID Not Found");
|
|
65
|
+
});
|
|
44
66
|
}
|
|
45
67
|
}
|
|
46
68
|
//# sourceMappingURL=dat.bank.js.map
|
package/dist/dat.bank.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dat.bank.js","sourceRoot":"","sources":["../src/dat.bank.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,MAAM,GAAyC,MAAM,YAAY,CAAC;AAE/E,MAAM,OAAO,OAAO;
|
|
1
|
+
{"version":3,"file":"dat.bank.js","sourceRoot":"","sources":["../src/dat.bank.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DatCryptoKey, DatSignatureKey, DatSignatureKeyOutOption } from "./index.js";
|
|
2
|
+
export declare class DatCertificate {
|
|
3
|
+
readonly cid: number;
|
|
4
|
+
readonly _signatureKey: DatSignatureKey;
|
|
5
|
+
readonly _cryptoKey: DatCryptoKey;
|
|
6
|
+
readonly _datIssueBegin: number;
|
|
7
|
+
readonly _datIssueEnd: number;
|
|
8
|
+
readonly _datTtl: number;
|
|
9
|
+
constructor(cid: number, signatureKey: DatSignatureKey, cryptoKey: DatCryptoKey, datIssueBegin: number, datIssueEnd: number, datTtl: number);
|
|
10
|
+
exports(datSignatureKeyOutOption: DatSignatureKeyOutOption): Promise<string>;
|
|
11
|
+
static imports(format: string): Promise<DatCertificate>;
|
|
12
|
+
issuable(): boolean;
|
|
13
|
+
expired(): boolean;
|
|
14
|
+
hasSigningKey(): boolean;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=dat.certificate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat.certificate.d.ts","sourceRoot":"","sources":["../src/dat.certificate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAc,eAAe,EAAE,wBAAwB,EAAe,MAAM,YAAY,CAAC;AAE7G,qBAAa,cAAc;IACvB,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,aAAa,EAAE,eAAe,CAAC;IAC/C,SAAgB,UAAU,EAAE,YAAY,CAAC;IACzC,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAG5B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,eAAe,EAC7B,SAAS,EAAE,YAAY,EACvB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM;IAsBZ,OAAO,CAAC,wBAAwB,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;WAYrE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAc7D,QAAQ,IAAI,OAAO;IAKnB,OAAO,IAAI,OAAO;IAIlB,aAAa,IAAI,OAAO;CAG3B"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { DatCryptoKey, DatInteger, DatSignatureKey, DatUnixtime, } from "./index.js";
|
|
2
|
+
export class DatCertificate {
|
|
3
|
+
cid;
|
|
4
|
+
_signatureKey;
|
|
5
|
+
_cryptoKey;
|
|
6
|
+
_datIssueBegin;
|
|
7
|
+
_datIssueEnd;
|
|
8
|
+
_datTtl;
|
|
9
|
+
constructor(cid, signatureKey, cryptoKey, datIssueBegin, datIssueEnd, datTtl) {
|
|
10
|
+
if (!DatInteger.isBetween(cid, 0)) {
|
|
11
|
+
throw new Error(`Invalid cid(Certificate ID) is HEX ${cid}`);
|
|
12
|
+
}
|
|
13
|
+
if (!DatInteger.isBetween(datIssueBegin, 0)) {
|
|
14
|
+
throw new Error(`Invalid issueBegin: issueBegin is positive int or 0 ${datIssueBegin}`);
|
|
15
|
+
}
|
|
16
|
+
if (!DatInteger.isBetween(datIssueEnd, 0)) {
|
|
17
|
+
throw new Error(`Invalid issueEnd: issueEnd is positive int or 0 ${datIssueEnd}`);
|
|
18
|
+
}
|
|
19
|
+
if (!DatInteger.isBetween(datTtl, 1)) {
|
|
20
|
+
throw new Error(`Invalid datTtl: datTtl is positive int ${datTtl}`);
|
|
21
|
+
}
|
|
22
|
+
this.cid = cid;
|
|
23
|
+
this._signatureKey = signatureKey;
|
|
24
|
+
this._cryptoKey = cryptoKey;
|
|
25
|
+
this._datIssueBegin = Math.floor(datIssueBegin);
|
|
26
|
+
this._datIssueEnd = Math.floor(datIssueEnd);
|
|
27
|
+
this._datTtl = Math.floor(datTtl);
|
|
28
|
+
}
|
|
29
|
+
async exports(datSignatureKeyOutOption) {
|
|
30
|
+
const cid = this.cid.toString(16);
|
|
31
|
+
const signatureAlgorithm = this._signatureKey.algorithm;
|
|
32
|
+
const signatureKey = await this._signatureKey.exports(datSignatureKeyOutOption);
|
|
33
|
+
const cryptoAlg = this._cryptoKey.algorithm;
|
|
34
|
+
const cryptoKey = await this._cryptoKey.exports();
|
|
35
|
+
const datIssueBegin = this._datIssueBegin;
|
|
36
|
+
const datIssueEnd = this._datIssueEnd;
|
|
37
|
+
const datTtl = this._datTtl;
|
|
38
|
+
return `${cid}.${signatureAlgorithm}.${signatureKey}.${cryptoAlg}.${cryptoKey}.${datIssueBegin}.${datIssueEnd}.${datTtl}`;
|
|
39
|
+
}
|
|
40
|
+
static async imports(format) {
|
|
41
|
+
const split = format.split(".");
|
|
42
|
+
if (split.length == 8) {
|
|
43
|
+
const cid = Number.parseInt(split[0], 16);
|
|
44
|
+
const signatureKey = await DatSignatureKey.imports(split[1], split[2]);
|
|
45
|
+
const cryptoKey = await DatCryptoKey.imports(split[3], split[4]);
|
|
46
|
+
const datIssueBegin = Number(split[5]);
|
|
47
|
+
const datIssueEnd = Number(split[6]);
|
|
48
|
+
const datTtl = Number(split[7]);
|
|
49
|
+
return new DatCertificate(cid, signatureKey, cryptoKey, datIssueBegin, datIssueEnd, datTtl);
|
|
50
|
+
}
|
|
51
|
+
throw new Error("Invalid Certificate format");
|
|
52
|
+
}
|
|
53
|
+
issuable() {
|
|
54
|
+
const now = DatUnixtime.now();
|
|
55
|
+
return this.hasSigningKey() && now >= this._datIssueBegin && now <= this._datIssueEnd;
|
|
56
|
+
}
|
|
57
|
+
expired() {
|
|
58
|
+
return DatUnixtime.isPast(this._datIssueEnd + this._datTtl);
|
|
59
|
+
}
|
|
60
|
+
hasSigningKey() {
|
|
61
|
+
return this._signatureKey.hasSigningKey();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=dat.certificate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat.certificate.js","sourceRoot":"","sources":["../src/dat.certificate.ts"],"names":[],"mappings":"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"}
|
package/dist/dat.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export declare class Dat {
|
|
2
|
-
readonly format: boolean;
|
|
3
2
|
readonly dat: string;
|
|
4
|
-
readonly
|
|
5
|
-
readonly
|
|
6
|
-
readonly
|
|
7
|
-
readonly
|
|
8
|
-
readonly
|
|
3
|
+
readonly _format: boolean;
|
|
4
|
+
readonly _expire: number;
|
|
5
|
+
readonly _cid: number;
|
|
6
|
+
readonly _plain: ArrayBuffer;
|
|
7
|
+
readonly _secure: ArrayBuffer;
|
|
8
|
+
readonly _signature: ArrayBuffer;
|
|
9
9
|
constructor(dat: string | undefined | null);
|
|
10
10
|
static from(dat: Dat | string | undefined | null): Dat;
|
|
11
11
|
expired(): boolean;
|
|
12
|
-
|
|
12
|
+
_body(): string;
|
|
13
13
|
}
|
|
14
14
|
export declare class DatPayload {
|
|
15
15
|
readonly expire: number;
|
package/dist/dat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dat.d.ts","sourceRoot":"","sources":["../src/dat.ts"],"names":[],"mappings":"AAOA,qBAAa,GAAG;IACZ,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"dat.d.ts","sourceRoot":"","sources":["../src/dat.ts"],"names":[],"mappings":"AAOA,qBAAa,GAAG;IACZ,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAM;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAS;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAK;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAK;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAsB;IAClD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAsB;IACnD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAsB;gBAE1C,GAAG,EAAE,MAAM,GAAC,SAAS,GAAC,IAAI;IAgBtC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAC,MAAM,GAAC,SAAS,GAAC,IAAI,GAAG,GAAG;IAOhD,OAAO,IAAI,OAAO;IAIlB,KAAK,IAAI,MAAM;CAGlB;AAED,qBAAa,UAAU;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;gBAEtB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW;IAMnE,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,MAAM,IAAI,MAAM,CAEnB;CACJ"}
|
package/dist/dat.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { DatBytes, DatArrayBuffer, DatInteger, DatUnixtime, } from "./index.js";
|
|
2
2
|
export class Dat {
|
|
3
|
-
format = false;
|
|
4
3
|
dat = '';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
_format = false;
|
|
5
|
+
_expire = 0;
|
|
6
|
+
_cid = 0;
|
|
7
|
+
_plain = new ArrayBuffer(0);
|
|
8
|
+
_secure = new ArrayBuffer(0);
|
|
9
|
+
_signature = new ArrayBuffer(0);
|
|
10
10
|
constructor(dat) {
|
|
11
11
|
if (dat) {
|
|
12
12
|
const parts = (this.dat = dat || '').split('.');
|
|
13
13
|
if (dat && parts.length == 5) {
|
|
14
14
|
try {
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
15
|
+
this._expire = DatInteger.parse(parts[0]);
|
|
16
|
+
this._cid = Number.parseInt(parts[1], 16);
|
|
17
|
+
this._plain = DatArrayBuffer.fromBase64Url(parts[2]);
|
|
18
|
+
this._secure = DatArrayBuffer.fromBase64Url(parts[3]);
|
|
19
|
+
this._signature = DatArrayBuffer.fromBase64Url(parts[4]);
|
|
20
|
+
this._format = (this._signature.byteLength > 0 && this._expire >= 0);
|
|
21
21
|
}
|
|
22
22
|
catch (e) { }
|
|
23
23
|
}
|
|
@@ -30,9 +30,9 @@ export class Dat {
|
|
|
30
30
|
return new Dat(dat);
|
|
31
31
|
}
|
|
32
32
|
expired() {
|
|
33
|
-
return !this.
|
|
33
|
+
return !this._format || DatUnixtime.isPast(this._expire);
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
_body() {
|
|
36
36
|
return this.dat.substring(0, this.dat.lastIndexOf('.'));
|
|
37
37
|
}
|
|
38
38
|
}
|
package/dist/dat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dat.js","sourceRoot":"","sources":["../src/dat.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,cAAc,EACd,UAAU,EACV,WAAW,GACd,MAAM,YAAY,CAAC;AAEpB,MAAM,OAAO,GAAG;IACH,
|
|
1
|
+
{"version":3,"file":"dat.js","sourceRoot":"","sources":["../src/dat.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,cAAc,EACd,UAAU,EACV,WAAW,GACd,MAAM,YAAY,CAAC;AAEpB,MAAM,OAAO,GAAG;IACH,GAAG,GAAW,EAAE,CAAC;IACjB,OAAO,GAAY,KAAK,CAAC;IACzB,OAAO,GAAW,CAAC,CAAC;IACpB,IAAI,GAAW,CAAC,CAAC;IACjB,MAAM,GAAgB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,GAAgB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1C,UAAU,GAAgB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAEtD,YAAY,GAA0B;QAClC,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1C,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzD,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;gBACzE,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;YAClB,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAA8B;QACtC,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC;QACf,CAAC;QACD,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACH,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;CACJ;AAED,MAAM,OAAO,UAAU;IACV,MAAM,CAAS;IACf,UAAU,CAAc;IACxB,WAAW,CAAc;IAElC,YAAY,MAAc,EAAE,KAAkB,EAAE,MAAmB;QAC/D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,MAAM;QACN,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;CACJ"}
|
package/dist/dat.key.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
1
10
|
import { Dat, DAT_VERSION, DatArrayBuffer, DatBytes, DatCryptoKey, DatInteger, DatPayload, DatSignatureKey, DatUnixtime, } from "./index.js";
|
|
2
11
|
export class DatKey {
|
|
3
|
-
kid;
|
|
4
|
-
signatureKey;
|
|
5
|
-
cryptoKey;
|
|
6
|
-
issueBegin;
|
|
7
|
-
issueEnd;
|
|
8
|
-
tokenTtl;
|
|
9
12
|
constructor(kid, signatureKey, cryptoKey, issueBegin, issueEnd, tokenTtl) {
|
|
10
13
|
if (kid.match(/[.\r\n]/) != null) {
|
|
11
14
|
throw new Error(`Invalid Kid: kid is not allowed ".", "\\r", "\\n"" ${kid}`);
|
|
@@ -26,59 +29,69 @@ export class DatKey {
|
|
|
26
29
|
this.issueEnd = Math.floor(issueEnd);
|
|
27
30
|
this.tokenTtl = Math.floor(tokenTtl);
|
|
28
31
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
exports(datSignatureKeyOutOption) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const kid = this.kid;
|
|
35
|
+
const signAlg = this.signatureKey.algorithm;
|
|
36
|
+
const signKey = yield this.signatureKey.exports(datSignatureKeyOutOption);
|
|
37
|
+
const cryptoAlg = this.cryptoKey.algorithm;
|
|
38
|
+
const cryptoKey = yield this.cryptoKey.exports();
|
|
39
|
+
const issueBegin = this.issueBegin;
|
|
40
|
+
const issueEnd = this.issueEnd;
|
|
41
|
+
const tokenTtl = this.tokenTtl;
|
|
42
|
+
return `${DAT_VERSION}.${kid}.${signAlg}.${signKey}.${cryptoAlg}.${cryptoKey}.${issueBegin}.${issueEnd}.${tokenTtl}`;
|
|
43
|
+
});
|
|
39
44
|
}
|
|
40
|
-
static
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
static imports(format) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
const split = format.split(".");
|
|
48
|
+
switch (split[0] || '0') {
|
|
49
|
+
case '2':
|
|
50
|
+
case '1':
|
|
51
|
+
if (split.length == 9) {
|
|
52
|
+
return yield DatKey._import_ver_2(split);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
throw new Error("Invalid format");
|
|
56
|
+
});
|
|
50
57
|
}
|
|
51
|
-
static
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
static _import_ver_2(split) {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
const kid = split[1];
|
|
61
|
+
const signKey = yield DatSignatureKey.imports(split[2], split[3]);
|
|
62
|
+
const cryptoKey = yield DatCryptoKey.imports(split[4], split[5]);
|
|
63
|
+
const issueBegin = Number(split[6]);
|
|
64
|
+
const issueEnd = Number(split[7]);
|
|
65
|
+
const tokenTtl = Number(split[8]);
|
|
66
|
+
return new DatKey(kid, signKey, cryptoKey, issueBegin, issueEnd, tokenTtl);
|
|
67
|
+
});
|
|
59
68
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
toDat(plain, secure) {
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
const now = DatUnixtime.now();
|
|
72
|
+
const exp = now + this.tokenTtl;
|
|
73
|
+
const kid = this.kid;
|
|
74
|
+
const plainBase64 = DatBytes.toBase64Url(plain);
|
|
75
|
+
const securedBase64 = DatArrayBuffer.toBase64Url(yield this.cryptoKey.encrypt(DatArrayBuffer.from(secure)));
|
|
76
|
+
const body = `${exp}.${kid}.${plainBase64}.${securedBase64}`;
|
|
77
|
+
const sign = DatArrayBuffer.toBase64Url(yield this.signatureKey.sign(body));
|
|
78
|
+
return `${body}.${sign}`;
|
|
79
|
+
});
|
|
69
80
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
toPayload(dat) {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
dat = Dat.from(dat);
|
|
84
|
+
if (!dat.format) {
|
|
85
|
+
throw new Error("Invalid DAT: Format");
|
|
86
|
+
}
|
|
87
|
+
if (dat.expired()) {
|
|
88
|
+
throw new Error("Invalid DAT: Expired");
|
|
89
|
+
}
|
|
90
|
+
if (!(yield this.signatureKey.verify(dat.body(), dat.signature))) {
|
|
91
|
+
throw new Error('Invalid DAT: Signature');
|
|
92
|
+
}
|
|
93
|
+
return new DatPayload(dat.expire, dat.plain, yield this.cryptoKey.decrypt(dat.secure));
|
|
94
|
+
});
|
|
82
95
|
}
|
|
83
96
|
isPreIssuance() {
|
|
84
97
|
return DatUnixtime.now() <= this.issueBegin;
|
package/dist/dat.key.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dat.key.js","sourceRoot":"","sources":["../src/dat.key.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,GAAG,EACH,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,eAAe,EAEf,WAAW,GACd,MAAM,YAAY,CAAC;AAEpB,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"dat.key.js","sourceRoot":"","sources":["../src/dat.key.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Dat, DatCertificate, DatPayload, DatSignatureKeyOutOption } from "./index.js";
|
|
2
|
+
export declare class DatManager {
|
|
3
|
+
private readonly issuer;
|
|
4
|
+
private readonly certificates;
|
|
5
|
+
constructor(issuer?: DatCertificate | null, certificates?: DatCertificate[]);
|
|
6
|
+
static from(inputCertificates: DatCertificate[]): DatManager;
|
|
7
|
+
static imports(format: string): Promise<DatManager>;
|
|
8
|
+
exports(datSignatureKeyOutOption: DatSignatureKeyOutOption): Promise<string>;
|
|
9
|
+
find(cid: number): DatCertificate | null;
|
|
10
|
+
issue(plain: ArrayBufferLike | Uint8Array | string | null | undefined, secure: ArrayBufferLike | Uint8Array | string | null | undefined): Promise<string>;
|
|
11
|
+
parse(dat: Dat | string | undefined | null): Promise<DatPayload>;
|
|
12
|
+
static issue(certificate: DatCertificate, plain: ArrayBufferLike | Uint8Array | string | null | undefined, secure: ArrayBufferLike | Uint8Array | string | null | undefined): Promise<string>;
|
|
13
|
+
static parse(certificate: DatCertificate, dat: Dat | string | undefined | null): Promise<DatPayload>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=dat.manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat.manager.d.ts","sourceRoot":"","sources":["../src/dat.manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,GAAG,EAGH,cAAc,EACd,UAAU,EACV,wBAAwB,EAE3B,MAAM,YAAY,CAAC;AAEpB,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;gBAEpC,MAAM,GAAE,cAAc,GAAG,IAAW,EAAE,YAAY,GAAE,cAAc,EAAO;IAKrF,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,cAAc,EAAE,GAAG,UAAU;WAoB/C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IASnD,OAAO,CAAC,wBAAwB,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlF,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIlC,KAAK,CAAC,KAAK,EAAE,eAAe,GAAC,UAAU,GAAC,MAAM,GAAC,IAAI,GAAC,SAAS,EAAE,MAAM,EAAE,eAAe,GAAC,UAAU,GAAC,MAAM,GAAC,IAAI,GAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAOzI,KAAK,CAAC,GAAG,EAAE,GAAG,GAAC,MAAM,GAAC,SAAS,GAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;WAWnD,KAAK,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,GAAC,UAAU,GAAC,MAAM,GAAC,IAAI,GAAC,SAAS,EAAE,MAAM,EAAE,eAAe,GAAC,UAAU,GAAC,MAAM,GAAC,IAAI,GAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;WAWtK,KAAK,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAC,MAAM,GAAC,SAAS,GAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;CAavG"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Dat, DatArrayBuffer, DatBytes, DatCertificate, DatPayload, DatUnixtime, } from "./index.js";
|
|
2
|
+
export class DatManager {
|
|
3
|
+
issuer;
|
|
4
|
+
certificates;
|
|
5
|
+
constructor(issuer = null, certificates = []) {
|
|
6
|
+
this.issuer = issuer;
|
|
7
|
+
this.certificates = certificates;
|
|
8
|
+
}
|
|
9
|
+
static from(inputCertificates) {
|
|
10
|
+
let certificates = [];
|
|
11
|
+
for (const certificate of inputCertificates) {
|
|
12
|
+
if (certificates.find(e => e.cid === certificate.cid)) {
|
|
13
|
+
throw new Error(`Invalid DAT Certificates - Duplicate CID(Certificate ID) ${certificate.cid}`);
|
|
14
|
+
}
|
|
15
|
+
if (certificate.expired()) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
certificates.push(certificate);
|
|
19
|
+
}
|
|
20
|
+
certificates.sort((a, b) => a._datIssueEnd - b._datIssueEnd);
|
|
21
|
+
const issuer = certificates.findLast(e => e.issuable()) || null;
|
|
22
|
+
return new DatManager(issuer, certificates);
|
|
23
|
+
}
|
|
24
|
+
static async imports(format) {
|
|
25
|
+
const certificates = await Promise.all(format.split('\n')
|
|
26
|
+
.map(async (e) => await DatCertificate.imports(e.trim()))
|
|
27
|
+
.filter(e => !!e));
|
|
28
|
+
return DatManager.from(certificates);
|
|
29
|
+
}
|
|
30
|
+
async exports(datSignatureKeyOutOption) {
|
|
31
|
+
return (await Promise.all(this.certificates.map(e => e.exports(datSignatureKeyOutOption)))).join('\n');
|
|
32
|
+
}
|
|
33
|
+
find(cid) {
|
|
34
|
+
return this.certificates.find(e => e.cid === cid) || null;
|
|
35
|
+
}
|
|
36
|
+
async issue(plain, secure) {
|
|
37
|
+
if (this.issuer) {
|
|
38
|
+
return await DatManager.issue(this.issuer, plain, secure);
|
|
39
|
+
}
|
|
40
|
+
throw new Error("Invalid DAT: Signing Key Does Not Exist");
|
|
41
|
+
}
|
|
42
|
+
async parse(dat) {
|
|
43
|
+
if (!(dat = Dat.from(dat))._format) {
|
|
44
|
+
throw new Error("Invalid DAT: Format");
|
|
45
|
+
}
|
|
46
|
+
const certificate = this.find(dat._cid);
|
|
47
|
+
if (certificate != null) {
|
|
48
|
+
return DatManager.parse(certificate, dat);
|
|
49
|
+
}
|
|
50
|
+
throw new Error("Invalid DAT: CID(Certificate ID) Not Found");
|
|
51
|
+
}
|
|
52
|
+
static async issue(certificate, plain, secure) {
|
|
53
|
+
const now = DatUnixtime.now();
|
|
54
|
+
const expire = now + certificate._datTtl;
|
|
55
|
+
const cid = certificate.cid.toString(16);
|
|
56
|
+
const plainBase64 = DatBytes.toBase64Url(plain);
|
|
57
|
+
const securedBase64 = DatArrayBuffer.toBase64Url(await certificate._cryptoKey.encrypt(DatArrayBuffer.from(secure)));
|
|
58
|
+
const body = `${expire}.${cid}.${plainBase64}.${securedBase64}`;
|
|
59
|
+
const signature = DatArrayBuffer.toBase64Url(await certificate._signatureKey.sign(body));
|
|
60
|
+
return `${body}.${signature}`;
|
|
61
|
+
}
|
|
62
|
+
static async parse(certificate, dat) {
|
|
63
|
+
dat = Dat.from(dat);
|
|
64
|
+
if (!dat._format) {
|
|
65
|
+
throw new Error("Invalid DAT: Format");
|
|
66
|
+
}
|
|
67
|
+
if (dat.expired()) {
|
|
68
|
+
throw new Error("Invalid DAT: Expired");
|
|
69
|
+
}
|
|
70
|
+
if (!await certificate._signatureKey.verify(dat._body(), dat._signature)) {
|
|
71
|
+
throw new Error('Invalid DAT: Signature');
|
|
72
|
+
}
|
|
73
|
+
return new DatPayload(dat._expire, dat._plain, await certificate._cryptoKey.decrypt(dat._secure));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=dat.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat.manager.js","sourceRoot":"","sources":["../src/dat.manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export declare const DAT_VERSION = "2";
|
|
2
1
|
export * as DatInteger from "./util/DatInteger.js";
|
|
3
2
|
export * as DatUnixtime from "./util/DatUnixtime.js";
|
|
4
3
|
export * as DatBytes from "./util/DatBytes.js";
|
|
@@ -8,6 +7,6 @@ export * as DatUint8Array from "./util/DatUint8Array.js";
|
|
|
8
7
|
export * from "./crypto.js";
|
|
9
8
|
export * from "./signature.js";
|
|
10
9
|
export * from "./dat.js";
|
|
11
|
-
export * from "./dat.
|
|
12
|
-
export * from "./dat.
|
|
10
|
+
export * from "./dat.certificate";
|
|
11
|
+
export * from "./dat.manager";
|
|
13
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,kBAAkB,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,aAAa,MAAM,yBAAyB,CAAC;AACzD,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export const DAT_VERSION = "2";
|
|
2
1
|
export * as DatInteger from "./util/DatInteger.js";
|
|
3
2
|
export * as DatUnixtime from "./util/DatUnixtime.js";
|
|
4
3
|
export * as DatBytes from "./util/DatBytes.js";
|
|
@@ -8,6 +7,6 @@ export * as DatUint8Array from "./util/DatUint8Array.js";
|
|
|
8
7
|
export * from "./crypto.js";
|
|
9
8
|
export * from "./signature.js";
|
|
10
9
|
export * from "./dat.js";
|
|
11
|
-
export * from "./dat.
|
|
12
|
-
export * from "./dat.
|
|
10
|
+
export * from "./dat.certificate";
|
|
11
|
+
export * from "./dat.manager";
|
|
13
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,kBAAkB,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,aAAa,MAAM,yBAAyB,CAAC;AACzD,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "saro-dat",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Distributed Access Token",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dat",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"scripts": {
|
|
37
37
|
"build": "tsc && tsc -p tsconfig.json",
|
|
38
38
|
"test": "vitest run",
|
|
39
|
+
"bench": "cross-env BENCH=TEST vitest run bench.test.ts --reporter=dot",
|
|
39
40
|
"prepublishOnly": "npm run build"
|
|
40
41
|
},
|
|
41
42
|
"dependencies": {
|
|
@@ -44,6 +45,8 @@
|
|
|
44
45
|
"devDependencies": {
|
|
45
46
|
"@types/node": "^25.6.0",
|
|
46
47
|
"typescript": "^6.0.3",
|
|
47
|
-
"vitest": "^4.1.5"
|
|
48
|
+
"vitest": "^4.1.5",
|
|
49
|
+
"cross-env": "^10.1.0",
|
|
50
|
+
"@types/p-limit": "^2.2.0"
|
|
48
51
|
}
|
|
49
52
|
}
|