saro-dat 0.0.1 → 0.0.2
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 +5 -4
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +12 -14
- package/dist/crypto.js.map +1 -0
- package/dist/dat.bank.d.ts +10 -9
- package/dist/dat.bank.d.ts.map +1 -0
- package/dist/dat.bank.js +21 -17
- package/dist/dat.bank.js.map +1 -0
- package/dist/dat.key.d.ts +6 -4
- package/dist/dat.key.d.ts.map +1 -0
- package/dist/dat.key.js +41 -16
- package/dist/dat.key.js.map +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -11
- package/dist/index.js.map +1 -0
- package/dist/signature.d.ts +8 -6
- package/dist/signature.d.ts.map +1 -0
- package/dist/signature.js +13 -10
- package/dist/signature.js.map +1 -0
- package/dist/util.d.ts +24 -3
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +37 -14
- package/dist/util.js.map +1 -0
- package/package.json +25 -15
- package/dist/dat.d.ts +0 -1
- package/dist/dat.js +0 -3
package/dist/crypto.d.ts
CHANGED
|
@@ -5,8 +5,9 @@ export declare class DatCryptoKey {
|
|
|
5
5
|
readonly key: CryptoKey;
|
|
6
6
|
constructor(algorithm: DatCryptoAlgorithm, key: CryptoKey);
|
|
7
7
|
static generate(algorithm: DatCryptoAlgorithm): Promise<DatCryptoKey>;
|
|
8
|
-
static
|
|
9
|
-
|
|
10
|
-
encrypt(data:
|
|
11
|
-
decrypt(data: ArrayBuffer
|
|
8
|
+
static imports(algorithmString: string, base64: string): Promise<DatCryptoKey>;
|
|
9
|
+
exports(): Promise<string>;
|
|
10
|
+
encrypt(data: ArrayBuffer): Promise<ArrayBuffer>;
|
|
11
|
+
decrypt(data: ArrayBuffer): Promise<ArrayBuffer>;
|
|
12
12
|
}
|
|
13
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,YAAY,CAAC;AAW7D,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,SAAgB,SAAS,EAAE,kBAAkB,CAAC;IAC9C,SAAgB,GAAG,EAAE,SAAS,CAAC;gBAG3B,SAAS,EAAE,kBAAkB,EAC7B,GAAG,EAAE,SAAS;WAOL,QAAQ,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;WAU9D,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAe9E,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1B,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAehD,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;CAezD"}
|
package/dist/crypto.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const allAlgorithms = ["AES128GCMN", "AES256GCMN"];
|
|
1
|
+
import { concatArrayBufferLike, decodeBase64, encodeBase64Url } from "./index.js";
|
|
2
|
+
const algorithms = ["AES128GCMN", "AES256GCMN"];
|
|
4
3
|
const CRYPTO_CONFIG = {
|
|
5
4
|
AES128GCMN: { name: "AES-GCM", length: 128 },
|
|
6
5
|
AES256GCMN: { name: "AES-GCM", length: 256 },
|
|
@@ -21,8 +20,8 @@ export class DatCryptoKey {
|
|
|
21
20
|
const key = await crypto.subtle.generateKey({ name: config.name, length: config.length }, true, ["encrypt", "decrypt"]);
|
|
22
21
|
return new DatCryptoKey(algorithm, key);
|
|
23
22
|
}
|
|
24
|
-
static async
|
|
25
|
-
if (!
|
|
23
|
+
static async imports(algorithmString, base64) {
|
|
24
|
+
if (!algorithms.includes(algorithmString)) {
|
|
26
25
|
throw new Error(`Unsupported algorithm: ${algorithmString}`);
|
|
27
26
|
}
|
|
28
27
|
const algorithm = algorithmString;
|
|
@@ -33,34 +32,33 @@ export class DatCryptoKey {
|
|
|
33
32
|
const key = await crypto.subtle.importKey("raw", bytes, { name: config.name }, true, ["encrypt", "decrypt"]);
|
|
34
33
|
return new DatCryptoKey(algorithm, key);
|
|
35
34
|
}
|
|
36
|
-
async
|
|
35
|
+
async exports() {
|
|
37
36
|
return encodeBase64Url(await crypto.subtle.exportKey("raw", this.key));
|
|
38
37
|
}
|
|
39
38
|
async encrypt(data) {
|
|
40
|
-
|
|
41
|
-
if (!bytes) {
|
|
39
|
+
if (!data) {
|
|
42
40
|
return new ArrayBuffer(0);
|
|
43
41
|
}
|
|
44
42
|
if (this.config.name == "AES-GCM") {
|
|
45
43
|
const nonce = new Uint8Array(12);
|
|
46
44
|
crypto.getRandomValues(nonce);
|
|
47
|
-
const encrypt = await crypto.subtle.encrypt({ name: this.config.name, iv: nonce }, this.key,
|
|
45
|
+
const encrypt = await crypto.subtle.encrypt({ name: this.config.name, iv: nonce }, this.key, data);
|
|
48
46
|
return concatArrayBufferLike(nonce.buffer, encrypt);
|
|
49
47
|
}
|
|
50
48
|
throw new Error("Unsupported algorithm");
|
|
51
49
|
}
|
|
52
50
|
async decrypt(data) {
|
|
53
|
-
|
|
54
|
-
if (!bytes) {
|
|
51
|
+
if (!data) {
|
|
55
52
|
return new ArrayBuffer(0);
|
|
56
53
|
}
|
|
57
54
|
if (this.config.name == "AES-GCM") {
|
|
58
|
-
if (
|
|
55
|
+
if (data.byteLength <= 12) {
|
|
59
56
|
throw new Error("Invalid data length");
|
|
60
57
|
}
|
|
61
|
-
const nonce =
|
|
62
|
-
return await crypto.subtle.decrypt({ name: this.config.name, iv: nonce }, this.key,
|
|
58
|
+
const nonce = data.slice(0, 12);
|
|
59
|
+
return await crypto.subtle.decrypt({ name: this.config.name, iv: nonce }, this.key, data.slice(12));
|
|
63
60
|
}
|
|
64
61
|
throw new Error("Unsupported algorithm");
|
|
65
62
|
}
|
|
66
63
|
}
|
|
64
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/dat.bank.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { DatKey } from "./index.
|
|
2
|
-
import type { DatSignatureKeyOutOption } from "./index.ts";
|
|
1
|
+
import { DatKey, DatPayload, DatPayloadBuffer, DatSignatureKeyOutOption } from "./index.js";
|
|
3
2
|
export declare class DatBank {
|
|
4
|
-
private issueKey;
|
|
5
|
-
private verifyKeys;
|
|
3
|
+
private readonly issueKey;
|
|
4
|
+
private readonly verifyKeys;
|
|
6
5
|
constructor(issueKey?: DatKey | null, verifyKeys?: DatKey[]);
|
|
7
|
-
static
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
toDat(plain:
|
|
11
|
-
|
|
6
|
+
static imports(format: string): Promise<DatBank>;
|
|
7
|
+
exports(datSignatureKeyOutOption: DatSignatureKeyOutOption): Promise<string>;
|
|
8
|
+
find(kid: string): DatKey | null;
|
|
9
|
+
toDat(plain: string | ArrayBuffer, secure: string | ArrayBuffer): Promise<string>;
|
|
10
|
+
toPayloadBuffer(dat: string): Promise<DatPayloadBuffer>;
|
|
11
|
+
toPayload(dat: string): Promise<DatPayload>;
|
|
12
12
|
}
|
|
13
|
+
//# sourceMappingURL=dat.bank.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat.bank.d.ts","sourceRoot":"","sources":["../src/dat.bank.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,wBAAwB,EAI3B,MAAM,YAAY,CAAC;AAEpB,qBAAa,OAAO;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAC1B,QAAQ,GAAE,MAAM,GAAG,IAAW,EAAE,UAAU,GAAE,MAAM,EAAO;WAKxD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBhD,OAAO,CAAC,wBAAwB,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQlF,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAO7E,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAYvD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAGpD"}
|
package/dist/dat.bank.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { DatKey, } from "./index.ts";
|
|
1
|
+
import { DatKey, serializePayload, splitDat, toArrayBuffer } from "./index.js";
|
|
3
2
|
export class DatBank {
|
|
4
3
|
issueKey;
|
|
5
4
|
verifyKeys;
|
|
@@ -7,44 +6,49 @@ export class DatBank {
|
|
|
7
6
|
this.issueKey = issueKey;
|
|
8
7
|
this.verifyKeys = verifyKeys;
|
|
9
8
|
}
|
|
10
|
-
static async
|
|
9
|
+
static async imports(format) {
|
|
11
10
|
const now = Math.floor(new Date().getTime() / 1000);
|
|
12
11
|
const lines = format.split('\n').map(e => e.trim()).filter(e => !!e);
|
|
13
12
|
let keys = [];
|
|
14
13
|
for (const line of lines) {
|
|
15
14
|
keys.push(await DatKey.import(line));
|
|
16
15
|
}
|
|
16
|
+
if (keys.length != new Set(keys.map(e => e.kid)).size) {
|
|
17
|
+
throw new Error('duplicate kid');
|
|
18
|
+
}
|
|
17
19
|
keys.sort((a, b) => a.issueBegin - b.issueBegin);
|
|
18
|
-
const issueKey = keys.findLast(e => e.issueBegin <= now && e.issueEnd > now) || null;
|
|
20
|
+
const issueKey = keys.findLast(e => e.hasSigningKey() && e.issueBegin <= now && e.issueEnd > now) || null;
|
|
19
21
|
return new DatBank(issueKey, keys);
|
|
20
22
|
}
|
|
21
|
-
async
|
|
23
|
+
async exports(datSignatureKeyOutOption) {
|
|
22
24
|
let lines = [];
|
|
23
25
|
for (const key of this.verifyKeys) {
|
|
24
26
|
lines.push(await key.export(datSignatureKeyOutOption));
|
|
25
27
|
}
|
|
26
28
|
return lines.join('\n');
|
|
27
29
|
}
|
|
28
|
-
|
|
30
|
+
find(kid) {
|
|
29
31
|
return this.verifyKeys.find(e => e.kid === kid) || null;
|
|
30
32
|
}
|
|
31
33
|
async toDat(plain, secure) {
|
|
32
34
|
if (this.issueKey) {
|
|
33
|
-
return this.issueKey.toDat(plain, secure);
|
|
35
|
+
return await this.issueKey.toDat(toArrayBuffer(plain), toArrayBuffer(secure));
|
|
34
36
|
}
|
|
35
37
|
throw new Error("issue key does not exist");
|
|
36
38
|
}
|
|
37
|
-
async
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
async toPayloadBuffer(dat) {
|
|
40
|
+
const parts = splitDat(dat);
|
|
41
|
+
if (parts.error) {
|
|
42
|
+
return Promise.reject("invalid dat format");
|
|
40
43
|
}
|
|
41
|
-
const
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
if (key) {
|
|
45
|
-
return key.toPayload(dat);
|
|
46
|
-
}
|
|
44
|
+
const key = this.find(parts.kid);
|
|
45
|
+
if (key != null) {
|
|
46
|
+
return key.toPayloadBuffer(parts);
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
return Promise.reject("invalid dat");
|
|
49
|
+
}
|
|
50
|
+
async toPayload(dat) {
|
|
51
|
+
return this.toPayloadBuffer(dat).then(serializePayload);
|
|
49
52
|
}
|
|
50
53
|
}
|
|
54
|
+
//# sourceMappingURL=dat.bank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat.bank.js","sourceRoot":"","sources":["../src/dat.bank.ts"],"names":[],"mappings":"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"}
|
package/dist/dat.key.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { DatCryptoKey, DatSignatureKey } from "./index.
|
|
2
|
-
import type { DatSignatureKeyOutOption } from "./index.ts";
|
|
1
|
+
import { DatCryptoKey, type DatParts, type DatPayload, type DatPayloadBuffer, DatSignatureKey, type DatSignatureKeyOutOption } from "./index.js";
|
|
3
2
|
export declare class DatKey {
|
|
4
3
|
readonly kid: string;
|
|
5
4
|
readonly signatureKey: DatSignatureKey;
|
|
@@ -11,6 +10,9 @@ export declare class DatKey {
|
|
|
11
10
|
export(datSignatureKeyOutOption: DatSignatureKeyOutOption): Promise<string>;
|
|
12
11
|
static import(format: string): Promise<DatKey>;
|
|
13
12
|
private static _import_ver_2;
|
|
14
|
-
toDat(
|
|
15
|
-
toPayload(
|
|
13
|
+
toDat(plainIn: ArrayBuffer, secureIn: ArrayBuffer): Promise<string>;
|
|
14
|
+
toPayload(parts: DatParts | string): Promise<DatPayload>;
|
|
15
|
+
toPayloadBuffer(parts: DatParts | string): Promise<DatPayloadBuffer>;
|
|
16
|
+
hasSigningKey(): boolean;
|
|
16
17
|
}
|
|
18
|
+
//# sourceMappingURL=dat.key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat.key.d.ts","sourceRoot":"","sources":["../src/dat.key.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,wBAAwB,EAMhC,MAAM,YAAY,CAAC;AAGpB,qBAAa,MAAM;IACf,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,YAAY,EAAE,eAAe,CAAC;IAC9C,SAAgB,SAAS,EAAE,YAAY,CAAC;IACxC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAG7B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,eAAe,EAC7B,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM;IAgBd,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;WAYpE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;mBAW/B,aAAa;IAU5B,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAWnE,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAC,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAItD,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAC,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwBxE,aAAa,IAAI,OAAO;CAG3B"}
|
package/dist/dat.key.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { DAT_VERSION, DatCryptoKey, DatSignatureKey, toArrayBuffer, } from "./index.ts";
|
|
1
|
+
import { DAT_VERSION, DatCryptoKey, DatSignatureKey, decodeBase64, encodeBase64Url, serializePayload, splitDat, toArrayBuffer } from "./index.js";
|
|
3
2
|
export class DatKey {
|
|
4
3
|
kid;
|
|
5
4
|
signatureKey;
|
|
@@ -24,9 +23,9 @@ export class DatKey {
|
|
|
24
23
|
async export(datSignatureKeyOutOption) {
|
|
25
24
|
const kid = this.kid;
|
|
26
25
|
const signAlg = this.signatureKey.algorithm;
|
|
27
|
-
const signKey = await this.signatureKey.
|
|
26
|
+
const signKey = await this.signatureKey.exports(datSignatureKeyOutOption);
|
|
28
27
|
const cryptoAlg = this.cryptoKey.algorithm;
|
|
29
|
-
const cryptoKey = await this.cryptoKey.
|
|
28
|
+
const cryptoKey = await this.cryptoKey.exports();
|
|
30
29
|
const issueBegin = this.issueBegin;
|
|
31
30
|
const issueEnd = this.issueEnd;
|
|
32
31
|
const tokenTtl = this.tokenTtl;
|
|
@@ -45,24 +44,50 @@ export class DatKey {
|
|
|
45
44
|
}
|
|
46
45
|
static async _import_ver_2(split) {
|
|
47
46
|
const kid = split[1];
|
|
48
|
-
const signKey = await DatSignatureKey.
|
|
49
|
-
const cryptoKey = await DatCryptoKey.
|
|
47
|
+
const signKey = await DatSignatureKey.imports(split[2], split[3]);
|
|
48
|
+
const cryptoKey = await DatCryptoKey.imports(split[4], split[5]);
|
|
50
49
|
const issueBegin = Number(split[6]);
|
|
51
50
|
const issueEnd = Number(split[7]);
|
|
52
51
|
const tokenTtl = Number(split[8]);
|
|
53
52
|
return new DatKey(kid, signKey, cryptoKey, issueBegin, issueEnd, tokenTtl);
|
|
54
53
|
}
|
|
55
|
-
async toDat(
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
async toDat(plainIn, secureIn) {
|
|
55
|
+
const now = Math.floor(new Date().getTime() / 1000);
|
|
56
|
+
const exp = now + this.tokenTtl;
|
|
57
|
+
const kid = this.kid;
|
|
58
|
+
const plain = encodeBase64Url(plainIn || new ArrayBuffer(0));
|
|
59
|
+
const secure = encodeBase64Url(await this.cryptoKey.encrypt(secureIn || new ArrayBuffer(0)));
|
|
60
|
+
const body = `${exp}.${kid}.${plain}.${secure}`;
|
|
61
|
+
const sign = encodeBase64Url(await this.signatureKey.sign(toArrayBuffer(body)));
|
|
62
|
+
return `${body}.${sign}`;
|
|
61
63
|
}
|
|
62
|
-
async toPayload(
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
async toPayload(parts) {
|
|
65
|
+
return this.toPayloadBuffer(parts).then(serializePayload);
|
|
66
|
+
}
|
|
67
|
+
async toPayloadBuffer(parts) {
|
|
68
|
+
if (typeof parts === 'string') {
|
|
69
|
+
parts = splitDat(parts);
|
|
70
|
+
}
|
|
71
|
+
if (parts.error) {
|
|
72
|
+
return Promise.reject("invalid format");
|
|
65
73
|
}
|
|
66
|
-
|
|
74
|
+
const exp = parts.expire;
|
|
75
|
+
if (exp < (new Date().getTime() / 1000)) {
|
|
76
|
+
return Promise.reject('expired');
|
|
77
|
+
}
|
|
78
|
+
if (parts.kid != this.kid) {
|
|
79
|
+
return Promise.reject('invalid kid');
|
|
80
|
+
}
|
|
81
|
+
const body = toArrayBuffer(parts.dat.substring(0, parts.dat.lastIndexOf('.')));
|
|
82
|
+
if (!await this.signatureKey.verify(body, toArrayBuffer(decodeBase64(parts.signature)))) {
|
|
83
|
+
return Promise.reject('invalid signature');
|
|
84
|
+
}
|
|
85
|
+
const plain = decodeBase64(parts.plain);
|
|
86
|
+
const secure = Buffer.from(await this.cryptoKey.decrypt(toArrayBuffer(decodeBase64(parts.secure))));
|
|
87
|
+
return ({ expire: exp, plain, secure, });
|
|
88
|
+
}
|
|
89
|
+
hasSigningKey() {
|
|
90
|
+
return this.signatureKey.hasSigningKey();
|
|
67
91
|
}
|
|
68
92
|
}
|
|
93
|
+
//# sourceMappingURL=dat.key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat.key.js","sourceRoot":"","sources":["../src/dat.key.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare const DAT_VERSION = "2";
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
2
|
+
export * from "./crypto.js";
|
|
3
|
+
export * from "./dat.key.js";
|
|
4
|
+
export * from "./dat.bank.js";
|
|
5
|
+
export * from "./signature.js";
|
|
6
|
+
export * from "./util.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
export const DAT_VERSION =
|
|
2
|
-
|
|
3
|
-
export * from
|
|
4
|
-
|
|
5
|
-
export * from
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// @ts-ignore
|
|
9
|
-
export * from './signature.ts';
|
|
10
|
-
// @ts-ignore
|
|
11
|
-
export * from './util.ts';
|
|
1
|
+
export const DAT_VERSION = "2";
|
|
2
|
+
export * from "./crypto.js";
|
|
3
|
+
export * from "./dat.key.js";
|
|
4
|
+
export * from "./dat.bank.js";
|
|
5
|
+
export * from "./signature.js";
|
|
6
|
+
export * from "./util.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAE/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
|
package/dist/signature.d.ts
CHANGED
|
@@ -3,12 +3,14 @@ export type DatSignatureKeyOutOption = "FULL" | "SIGNING" | "VERIFYING";
|
|
|
3
3
|
export declare class DatSignatureKey {
|
|
4
4
|
private readonly config;
|
|
5
5
|
readonly algorithm: DatSignatureAlgorithm;
|
|
6
|
-
readonly signingKey
|
|
7
|
-
readonly verifyingKey
|
|
6
|
+
private readonly signingKey;
|
|
7
|
+
private readonly verifyingKey;
|
|
8
8
|
constructor(algorithm: DatSignatureAlgorithm, SigningKey: CryptoKey | null, VerifyingKey: CryptoKey);
|
|
9
9
|
static generate(algorithm: DatSignatureAlgorithm): Promise<DatSignatureKey>;
|
|
10
|
-
static
|
|
11
|
-
|
|
12
|
-
sign(data: ArrayBuffer
|
|
13
|
-
verify(
|
|
10
|
+
static imports(algorithmString: string, format: string): Promise<DatSignatureKey>;
|
|
11
|
+
exports(option: DatSignatureKeyOutOption): Promise<string>;
|
|
12
|
+
sign(data: ArrayBuffer): Promise<ArrayBuffer>;
|
|
13
|
+
verify(body: ArrayBuffer, signature: ArrayBuffer): Promise<boolean>;
|
|
14
|
+
hasSigningKey(): boolean;
|
|
14
15
|
}
|
|
16
|
+
//# sourceMappingURL=signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;AAYxE,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,SAAgB,SAAS,EAAE,qBAAqB,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAY;gBAGrC,SAAS,EAAE,qBAAqB,EAChC,UAAU,EAAE,SAAS,GAAG,IAAI,EAC5B,YAAY,EAAE,SAAS;WAQd,QAAQ,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;WAYpE,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAoFjF,OAAO,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB1D,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAgB7C,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAezE,aAAa,IAAI,OAAO;CAG3B"}
|
package/dist/signature.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
import { decodeBase64, encodeBase64Url, normalizeBase64Url } from "./index.ts";
|
|
1
|
+
import { decodeBase64, encodeBase64Url } from "./index.js";
|
|
3
2
|
import { p256, p384, p521 } from '@noble/curves/nist.js';
|
|
4
|
-
const
|
|
3
|
+
const algorithms = ["P256", "P384", "P521"];
|
|
5
4
|
const SIGNATURE_CONFIG = {
|
|
6
5
|
P256: { name: "ECDSA", curve: 'P-256', hash: 'SHA-256' },
|
|
7
6
|
P384: { name: "ECDSA", curve: 'P-384', hash: 'SHA-384' },
|
|
@@ -25,8 +24,8 @@ export class DatSignatureKey {
|
|
|
25
24
|
const { publicKey, privateKey } = await crypto.subtle.generateKey({ name: config.name, namedCurve: config.curve, }, true, ["sign", "verify"]);
|
|
26
25
|
return new DatSignatureKey(algorithm, privateKey, publicKey);
|
|
27
26
|
}
|
|
28
|
-
static async
|
|
29
|
-
if (!
|
|
27
|
+
static async imports(algorithmString, format) {
|
|
28
|
+
if (!algorithms.includes(algorithmString)) {
|
|
30
29
|
throw new Error(`Unsupported algorithm: ${algorithmString}`);
|
|
31
30
|
}
|
|
32
31
|
const algorithm = algorithmString;
|
|
@@ -97,12 +96,12 @@ export class DatSignatureKey {
|
|
|
97
96
|
}
|
|
98
97
|
return new DatSignatureKey(algorithm, signingKey, verifyingKey);
|
|
99
98
|
}
|
|
100
|
-
async
|
|
99
|
+
async exports(option) {
|
|
101
100
|
let rv = "";
|
|
102
101
|
if (option == "FULL" || option == "SIGNING") {
|
|
103
102
|
if (this.signingKey) {
|
|
104
103
|
let jwk = await crypto.subtle.exportKey("jwk", this.signingKey);
|
|
105
|
-
rv +=
|
|
104
|
+
rv += jwk.d;
|
|
106
105
|
}
|
|
107
106
|
else {
|
|
108
107
|
throw new Error("this key is verifying only");
|
|
@@ -125,13 +124,17 @@ export class DatSignatureKey {
|
|
|
125
124
|
hash: { name: this.config.hash },
|
|
126
125
|
}, this.signingKey, data);
|
|
127
126
|
}
|
|
128
|
-
async verify(
|
|
129
|
-
if (!
|
|
127
|
+
async verify(body, signature) {
|
|
128
|
+
if (!body || !signature) {
|
|
130
129
|
return false;
|
|
131
130
|
}
|
|
132
131
|
return crypto.subtle.verify({
|
|
133
132
|
name: this.config.name,
|
|
134
133
|
hash: { name: this.config.hash },
|
|
135
|
-
}, this.verifyingKey, signature,
|
|
134
|
+
}, this.verifyingKey, signature, body);
|
|
135
|
+
}
|
|
136
|
+
hasSigningKey() {
|
|
137
|
+
return this.signingKey !== null;
|
|
136
138
|
}
|
|
137
139
|
}
|
|
140
|
+
//# sourceMappingURL=signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
CHANGED
|
@@ -1,8 +1,29 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type DatParts = {
|
|
2
|
+
error: boolean;
|
|
3
|
+
dat: string;
|
|
4
|
+
expire: number;
|
|
5
|
+
kid: string;
|
|
6
|
+
plain: string;
|
|
7
|
+
secure: string;
|
|
8
|
+
signature: string;
|
|
9
|
+
};
|
|
10
|
+
export type DatPayload = {
|
|
11
|
+
expire: number;
|
|
12
|
+
plain: string;
|
|
13
|
+
secure: string;
|
|
14
|
+
};
|
|
15
|
+
export type DatPayloadBuffer = {
|
|
16
|
+
expire: number;
|
|
17
|
+
plain: Buffer;
|
|
18
|
+
secure: Buffer;
|
|
19
|
+
};
|
|
2
20
|
export declare function encodeBase64Url(data: any): string;
|
|
3
|
-
export declare function decodeBase64String(b64:
|
|
4
|
-
export declare function decodeBase64(b64:
|
|
21
|
+
export declare function decodeBase64String(b64: any): string;
|
|
22
|
+
export declare function decodeBase64(b64: any): Buffer;
|
|
5
23
|
export declare function concatArrayBufferLike(arr1: ArrayBufferLike, arr2: ArrayBufferLike): ArrayBuffer;
|
|
6
24
|
export declare function toArrayBuffer(data: string | ArrayBuffer | Uint8Array | SharedArrayBuffer | Buffer | null | undefined): ArrayBuffer;
|
|
7
25
|
export declare function randomString(length: number, mold: string): string;
|
|
8
26
|
export declare function randomBase62(length: number): string;
|
|
27
|
+
export declare function splitDat(dat: string | null | undefined): DatParts;
|
|
28
|
+
export declare function serializePayload(payloadBuffer: DatPayloadBuffer): DatPayload;
|
|
29
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAIA,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,CA0BlI;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"}
|
package/dist/util.js
CHANGED
|
@@ -1,37 +1,36 @@
|
|
|
1
1
|
const asciiDecoder = new TextDecoder('ascii');
|
|
2
2
|
const textEncoder = new TextEncoder();
|
|
3
3
|
const base62arr = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
4
|
+
// function normalizeBase64Url(base64: string): string {
|
|
5
|
+
// return base64.replace(/[+\/=]/g, (ch: string) => {
|
|
6
|
+
// switch (ch) {
|
|
7
|
+
// case '+': return '-';
|
|
8
|
+
// case '/': return '_';
|
|
9
|
+
// }
|
|
10
|
+
// return '';
|
|
11
|
+
// });
|
|
12
|
+
// }
|
|
13
13
|
export function encodeBase64Url(data) {
|
|
14
14
|
if (!data) {
|
|
15
15
|
return '';
|
|
16
16
|
}
|
|
17
17
|
if (typeof data === 'string') {
|
|
18
|
-
return
|
|
18
|
+
return Buffer.from(data).toString('base64url');
|
|
19
19
|
}
|
|
20
20
|
else if (data instanceof ArrayBuffer) {
|
|
21
|
-
return
|
|
21
|
+
return Buffer.from(data).toString('base64url');
|
|
22
22
|
}
|
|
23
23
|
else if (data instanceof Uint8Array) {
|
|
24
|
-
return
|
|
24
|
+
return Buffer.from(data).toString('base64url');
|
|
25
25
|
}
|
|
26
26
|
else if (data instanceof Buffer) {
|
|
27
|
-
return
|
|
27
|
+
return data.toString('base64url');
|
|
28
28
|
}
|
|
29
29
|
throw new Error('Unsupported data type');
|
|
30
30
|
}
|
|
31
31
|
export function decodeBase64String(b64) {
|
|
32
32
|
return decodeBase64(b64).toString('utf-8');
|
|
33
33
|
}
|
|
34
|
-
// @ts-ignore
|
|
35
34
|
export function decodeBase64(b64) {
|
|
36
35
|
if (!b64) {
|
|
37
36
|
return Buffer.alloc(0);
|
|
@@ -81,3 +80,27 @@ export function randomString(length, mold) {
|
|
|
81
80
|
export function randomBase62(length) {
|
|
82
81
|
return randomString(length, base62arr);
|
|
83
82
|
}
|
|
83
|
+
export function splitDat(dat) {
|
|
84
|
+
const parts = dat?.split('.') || [];
|
|
85
|
+
if (dat && parts.length == 5) {
|
|
86
|
+
let exp = Number(parts[0] || 'x');
|
|
87
|
+
let kid = parts[1];
|
|
88
|
+
let plain = parts[2];
|
|
89
|
+
let secure = parts[3];
|
|
90
|
+
let sign = parts[4];
|
|
91
|
+
if (Number.isInteger(exp) && sign) {
|
|
92
|
+
return ({
|
|
93
|
+
error: false, dat, expire: exp, kid, plain, secure, signature: sign
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return ({ error: true, dat: dat || '', expire: 0, kid: '', plain: '', secure: '', signature: '' });
|
|
98
|
+
}
|
|
99
|
+
export function serializePayload(payloadBuffer) {
|
|
100
|
+
return ({
|
|
101
|
+
expire: payloadBuffer.expire,
|
|
102
|
+
plain: payloadBuffer.plain.toString('utf-8'),
|
|
103
|
+
secure: payloadBuffer.secure.toString('utf-8'),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "saro-dat",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Distributed Access Token",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dat",
|
|
@@ -8,31 +8,41 @@
|
|
|
8
8
|
"access",
|
|
9
9
|
"token"
|
|
10
10
|
],
|
|
11
|
-
"
|
|
11
|
+
"author": "marker",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"homepage": "https://dat.saro.me/",
|
|
12
14
|
"bugs": {
|
|
13
15
|
"url": "https://github.com/saro-lab/dat-npm/issues"
|
|
14
16
|
},
|
|
15
17
|
"repository": {
|
|
16
18
|
"type": "git",
|
|
17
|
-
"url": "
|
|
19
|
+
"url": "https://github.com/saro-lab/dat-npm"
|
|
20
|
+
},
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "./dist/index.cjs",
|
|
23
|
+
"module": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js",
|
|
29
|
+
"require": "./dist/index.cjs"
|
|
30
|
+
}
|
|
18
31
|
},
|
|
19
|
-
"license": "MIT",
|
|
20
|
-
"author": "marker",
|
|
21
|
-
"main": "dist/index.js",
|
|
22
|
-
"types": "dist/index.d.ts",
|
|
23
32
|
"files": [
|
|
24
|
-
"dist
|
|
33
|
+
"dist"
|
|
25
34
|
],
|
|
26
35
|
"scripts": {
|
|
27
|
-
"build": "tsc",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
},
|
|
31
|
-
"devDependencies": {
|
|
32
|
-
"@types/node": "^25.6.0",
|
|
33
|
-
"typescript": "^6.0.3"
|
|
36
|
+
"build": "tsc && tsc -p tsconfig.json",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"prepublishOnly": "npm run build"
|
|
34
39
|
},
|
|
35
40
|
"dependencies": {
|
|
36
41
|
"@noble/curves": "^2.2.0"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^25.6.0",
|
|
45
|
+
"typescript": "^6.0.3",
|
|
46
|
+
"vitest": "^4.1.5"
|
|
37
47
|
}
|
|
38
48
|
}
|
package/dist/dat.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function dat(key: string): string;
|
package/dist/dat.js
DELETED