@deepwhale/core 1.0.9 → 1.0.10
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/LICENSE +21 -0
- package/package.json +2 -2
- package/dist/session/crypto.d.ts +0 -91
- package/dist/session/crypto.d.ts.map +0 -1
- package/dist/session/crypto.js +0 -155
- package/dist/session/crypto.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 yysf1949
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepwhale/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "Core primitives for DeepWhale: i18n, session JSONL, compaction, types",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -54,4 +54,4 @@
|
|
|
54
54
|
"dev": "tsc -b --watch",
|
|
55
55
|
"clean": "rm -rf dist .tsbuildinfo"
|
|
56
56
|
}
|
|
57
|
-
}
|
|
57
|
+
}
|
package/dist/session/crypto.d.ts
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Encryption — Sprint 1c-revive-2-D-6-1
|
|
3
|
-
*
|
|
4
|
-
* AES-256-GCM encryption for SessionEvent lines at rest.
|
|
5
|
-
*
|
|
6
|
-
* 决策来源 (X-pickup A+A+A, 2026-06-04 决策):
|
|
7
|
-
* - 算法: AES-256-GCM (jsonl.ts 注释已定, AEAD 推荐)
|
|
8
|
-
* - 32 byte key (256 bit)
|
|
9
|
-
* - 12 byte IV (96 bit, GCM 推荐, nonce-misuse resistance 最佳)
|
|
10
|
-
* - 16 byte auth tag (128 bit, GCM 默认)
|
|
11
|
-
* - key 来源: DEEPWHALE_SESSION_KEY env (X4 c 决策: key 永不出 ~/.deepwhale/)
|
|
12
|
-
* - API 决策: 透明包装 (SessionWriter/Reader 接 optional `key`, 不暴露 cipher API)
|
|
13
|
-
*
|
|
14
|
-
* Line format (D-6-1):
|
|
15
|
-
* - 明文 (v1.0 兼容): `{"kind":"user",...}` — 不变, Reader 用 JSON.parse
|
|
16
|
-
* - 加密 (D-6): `enc:<base64(iv || ciphertext || authTag)>` — Reader 用 `enc:` 前缀判
|
|
17
|
-
*
|
|
18
|
-
* 为什么不写独立 CryptoSessionWriter/Reader:
|
|
19
|
-
* - 决策 A (X-pickup): 透明包装 = 最小 API surface
|
|
20
|
-
* - 验证 v1.0 Reader 用 JSON.parse 即可区分 (JSON 必以 `{` 开始, enc 以 `e` 开始,
|
|
21
|
-
* 无 collision)
|
|
22
|
-
*
|
|
23
|
-
* AAD (Associated Authenticated Data) 决策:
|
|
24
|
-
* - 决策 = 'deepwhale-session-v1' (AAD 含 version + namespace)
|
|
25
|
-
* - 防 line swap 攻击: 1 个 cipher 块从 line A 换到 line B 也解不出来
|
|
26
|
-
* (GCM 把 AAD 算进 auth tag, AAD 一变就 decrypt 失败)
|
|
27
|
-
*
|
|
28
|
-
* 不做 rekey: D-6-1 不轮换 key, key 不变 (= env 一直)
|
|
29
|
-
* D-6+ 待办: key 轮换 (e.g. key version tag) 留 next sprint
|
|
30
|
-
*
|
|
31
|
-
* @module @deepwhale/core/session/crypto
|
|
32
|
-
*/
|
|
33
|
-
/** AES-256 key 长度 = 32 byte (256 bit) */
|
|
34
|
-
export declare const SESSION_KEY_LENGTH = 32;
|
|
35
|
-
/** GCM IV 长度 = 12 byte (96 bit, GCM 推荐) */
|
|
36
|
-
export declare const GCM_IV_LENGTH = 12;
|
|
37
|
-
/** GCM auth tag 长度 = 16 byte (128 bit, GCM 默认) */
|
|
38
|
-
export declare const GCM_AUTH_TAG_LENGTH = 16;
|
|
39
|
-
/** 加密行 magic prefix (Reader 用 prefix 来 detect encrypted vs plaintext) */
|
|
40
|
-
export declare const ENCRYPTED_LINE_PREFIX = "enc:";
|
|
41
|
-
/** AAD 决策 — 含 version + namespace (防 line swap 攻击) */
|
|
42
|
-
export declare const SESSION_AAD = "deepwhale-session-v1";
|
|
43
|
-
/** Env var 名 — key 来源 (X4 c 决策: key 永不出 ~/.deepwhale/, 只通过 process.env) */
|
|
44
|
-
export declare const SESSION_KEY_ENV = "DEEPWHALE_SESSION_KEY";
|
|
45
|
-
/** Session 加密 key (32 byte) — env hex 64 char / base64 44 char, 解析成 Buffer */
|
|
46
|
-
export declare function readSessionKey(env?: NodeJS.ProcessEnv): Buffer | null;
|
|
47
|
-
/**
|
|
48
|
-
* 解析 key string → 32 byte Buffer.
|
|
49
|
-
*
|
|
50
|
-
* 决策格式 (按优先级):
|
|
51
|
-
* 1. hex 64 char → Buffer.from(hex, 'hex') (32 byte)
|
|
52
|
-
* 2. base64 44 char → Buffer.from(b64, 'base64') (32 byte)
|
|
53
|
-
* 3. 其他 — 抛错 (不静默 fallback, 避免 silent weak key)
|
|
54
|
-
*
|
|
55
|
-
* 边界: 长度 < 32 byte, 返回 = 抛 (不静默, key 错 = null)
|
|
56
|
-
*/
|
|
57
|
-
export declare function parseSessionKey(raw: string): Buffer;
|
|
58
|
-
/**
|
|
59
|
-
* 加密 1 line (SessionEvent JSON → encrypted line).
|
|
60
|
-
*
|
|
61
|
-
* 决策: 把 plaintext 当 UTF-8, 生成随机 IV (12 byte), GCM 加密,
|
|
62
|
-
* 把 base64 拼接 (iv || ciphertext || authTag) → `enc:<base64>` 输出.
|
|
63
|
-
*
|
|
64
|
-
* 约束: key 必须 32 byte (AES-256); 不是 32 byte 抛错
|
|
65
|
-
*/
|
|
66
|
-
export declare function encryptLine(plaintext: string, key: Buffer): string;
|
|
67
|
-
/**
|
|
68
|
-
* 解密 1 line (encrypted line → SessionEvent JSON).
|
|
69
|
-
*
|
|
70
|
-
* 决策: 验证 `enc:` prefix → base64 decode → 拆 iv / ciphertext / authTag →
|
|
71
|
-
* GCM 解密, 验 AAD, 验 auth tag.
|
|
72
|
-
*
|
|
73
|
-
* 错误:
|
|
74
|
-
* - 缺 `enc:` prefix → 抛错 (提示 plaintext 误传 — 让 plaintext detect 走 Reader)
|
|
75
|
-
* - 不是 32 byte key → 抛错
|
|
76
|
-
* - auth tag 失败 (cipher 错 / AAD 错 / line swap 攻击) → 抛 'auth tag mismatch'
|
|
77
|
-
* - base64 错 / length 错 → 抛 'malformed encrypted line'
|
|
78
|
-
*/
|
|
79
|
-
export declare function decryptLine(line: string, key: Buffer): string;
|
|
80
|
-
/**
|
|
81
|
-
* 快速判断: 是 plaintext JSON 行 (用于让 Reader 知道是 plaintext).
|
|
82
|
-
*
|
|
83
|
-
* 决策理由 (决策沿用 Reader 已有拍):
|
|
84
|
-
* - JSON 行必以 `{` 开始 (明文事件), 加密行必以 `e` (`enc:` 开头)
|
|
85
|
-
* - 不存文字冲突 (明文 SessionEvent 不会以 `enc:` 开头)
|
|
86
|
-
*
|
|
87
|
-
* 边界: D-6-1 不支持 mix (一行 plaintext + 一行 encrypted 交错) —
|
|
88
|
-
* 一旦传 key 整个 session 必须用 key 写到底 (跟 GCM nonce 不能重用的语义一致)
|
|
89
|
-
*/
|
|
90
|
-
export declare function isEncryptedLine(line: string): boolean;
|
|
91
|
-
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/session/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,yCAAyC;AACzC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,2CAA2C;AAC3C,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,kDAAkD;AAClD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAE5C,sDAAsD;AACtD,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAElD,2EAA2E;AAC3E,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CAIlF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBnD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAclE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkC7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
package/dist/session/crypto.js
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Encryption — Sprint 1c-revive-2-D-6-1
|
|
3
|
-
*
|
|
4
|
-
* AES-256-GCM encryption for SessionEvent lines at rest.
|
|
5
|
-
*
|
|
6
|
-
* 决策来源 (X-pickup A+A+A, 2026-06-04 决策):
|
|
7
|
-
* - 算法: AES-256-GCM (jsonl.ts 注释已定, AEAD 推荐)
|
|
8
|
-
* - 32 byte key (256 bit)
|
|
9
|
-
* - 12 byte IV (96 bit, GCM 推荐, nonce-misuse resistance 最佳)
|
|
10
|
-
* - 16 byte auth tag (128 bit, GCM 默认)
|
|
11
|
-
* - key 来源: DEEPWHALE_SESSION_KEY env (X4 c 决策: key 永不出 ~/.deepwhale/)
|
|
12
|
-
* - API 决策: 透明包装 (SessionWriter/Reader 接 optional `key`, 不暴露 cipher API)
|
|
13
|
-
*
|
|
14
|
-
* Line format (D-6-1):
|
|
15
|
-
* - 明文 (v1.0 兼容): `{"kind":"user",...}` — 不变, Reader 用 JSON.parse
|
|
16
|
-
* - 加密 (D-6): `enc:<base64(iv || ciphertext || authTag)>` — Reader 用 `enc:` 前缀判
|
|
17
|
-
*
|
|
18
|
-
* 为什么不写独立 CryptoSessionWriter/Reader:
|
|
19
|
-
* - 决策 A (X-pickup): 透明包装 = 最小 API surface
|
|
20
|
-
* - 验证 v1.0 Reader 用 JSON.parse 即可区分 (JSON 必以 `{` 开始, enc 以 `e` 开始,
|
|
21
|
-
* 无 collision)
|
|
22
|
-
*
|
|
23
|
-
* AAD (Associated Authenticated Data) 决策:
|
|
24
|
-
* - 决策 = 'deepwhale-session-v1' (AAD 含 version + namespace)
|
|
25
|
-
* - 防 line swap 攻击: 1 个 cipher 块从 line A 换到 line B 也解不出来
|
|
26
|
-
* (GCM 把 AAD 算进 auth tag, AAD 一变就 decrypt 失败)
|
|
27
|
-
*
|
|
28
|
-
* 不做 rekey: D-6-1 不轮换 key, key 不变 (= env 一直)
|
|
29
|
-
* D-6+ 待办: key 轮换 (e.g. key version tag) 留 next sprint
|
|
30
|
-
*
|
|
31
|
-
* @module @deepwhale/core/session/crypto
|
|
32
|
-
*/
|
|
33
|
-
import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';
|
|
34
|
-
/** AES-256 key 长度 = 32 byte (256 bit) */
|
|
35
|
-
export const SESSION_KEY_LENGTH = 32;
|
|
36
|
-
/** GCM IV 长度 = 12 byte (96 bit, GCM 推荐) */
|
|
37
|
-
export const GCM_IV_LENGTH = 12;
|
|
38
|
-
/** GCM auth tag 长度 = 16 byte (128 bit, GCM 默认) */
|
|
39
|
-
export const GCM_AUTH_TAG_LENGTH = 16;
|
|
40
|
-
/** 加密行 magic prefix (Reader 用 prefix 来 detect encrypted vs plaintext) */
|
|
41
|
-
export const ENCRYPTED_LINE_PREFIX = 'enc:';
|
|
42
|
-
/** AAD 决策 — 含 version + namespace (防 line swap 攻击) */
|
|
43
|
-
export const SESSION_AAD = 'deepwhale-session-v1';
|
|
44
|
-
/** Env var 名 — key 来源 (X4 c 决策: key 永不出 ~/.deepwhale/, 只通过 process.env) */
|
|
45
|
-
export const SESSION_KEY_ENV = 'DEEPWHALE_SESSION_KEY';
|
|
46
|
-
/** Session 加密 key (32 byte) — env hex 64 char / base64 44 char, 解析成 Buffer */
|
|
47
|
-
export function readSessionKey(env = process.env) {
|
|
48
|
-
const raw = env[SESSION_KEY_ENV];
|
|
49
|
-
if (!raw)
|
|
50
|
-
return null;
|
|
51
|
-
return parseSessionKey(raw);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* 解析 key string → 32 byte Buffer.
|
|
55
|
-
*
|
|
56
|
-
* 决策格式 (按优先级):
|
|
57
|
-
* 1. hex 64 char → Buffer.from(hex, 'hex') (32 byte)
|
|
58
|
-
* 2. base64 44 char → Buffer.from(b64, 'base64') (32 byte)
|
|
59
|
-
* 3. 其他 — 抛错 (不静默 fallback, 避免 silent weak key)
|
|
60
|
-
*
|
|
61
|
-
* 边界: 长度 < 32 byte, 返回 = 抛 (不静默, key 错 = null)
|
|
62
|
-
*/
|
|
63
|
-
export function parseSessionKey(raw) {
|
|
64
|
-
const trimmed = raw.trim();
|
|
65
|
-
if (trimmed.length === 0) {
|
|
66
|
-
throw new Error(`parseSessionKey: empty string`);
|
|
67
|
-
}
|
|
68
|
-
// hex 优先 (64 char = 32 byte)
|
|
69
|
-
if (/^[0-9a-fA-F]{64}$/.test(trimmed)) {
|
|
70
|
-
return Buffer.from(trimmed, 'hex');
|
|
71
|
-
}
|
|
72
|
-
// base64 兜底 (44 char = 32 byte unpadded, 或 43 char 不带 padding)
|
|
73
|
-
if (/^[A-Za-z0-9+/=]{43,44}$/.test(trimmed)) {
|
|
74
|
-
const buf = Buffer.from(trimmed, 'base64');
|
|
75
|
-
if (buf.length === SESSION_KEY_LENGTH)
|
|
76
|
-
return buf;
|
|
77
|
-
}
|
|
78
|
-
// 不是 32 byte 编码
|
|
79
|
-
throw new Error(`parseSessionKey: must be 64-char hex or 44-char base64 encoding 32 bytes, got length=${trimmed.length}`);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* 加密 1 line (SessionEvent JSON → encrypted line).
|
|
83
|
-
*
|
|
84
|
-
* 决策: 把 plaintext 当 UTF-8, 生成随机 IV (12 byte), GCM 加密,
|
|
85
|
-
* 把 base64 拼接 (iv || ciphertext || authTag) → `enc:<base64>` 输出.
|
|
86
|
-
*
|
|
87
|
-
* 约束: key 必须 32 byte (AES-256); 不是 32 byte 抛错
|
|
88
|
-
*/
|
|
89
|
-
export function encryptLine(plaintext, key) {
|
|
90
|
-
if (key.length !== SESSION_KEY_LENGTH) {
|
|
91
|
-
throw new Error(`encryptLine: key must be ${SESSION_KEY_LENGTH} bytes, got ${key.length}`);
|
|
92
|
-
}
|
|
93
|
-
const iv = randomBytes(GCM_IV_LENGTH);
|
|
94
|
-
const cipher = createCipheriv('aes-256-gcm', key, iv);
|
|
95
|
-
cipher.setAAD(Buffer.from(SESSION_AAD, 'utf8'));
|
|
96
|
-
const enc = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
|
|
97
|
-
const authTag = cipher.getAuthTag();
|
|
98
|
-
// 拼接: iv(12) || ciphertext(?) || authTag(16)
|
|
99
|
-
const packed = Buffer.concat([iv, enc, authTag]);
|
|
100
|
-
return ENCRYPTED_LINE_PREFIX + packed.toString('base64');
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* 解密 1 line (encrypted line → SessionEvent JSON).
|
|
104
|
-
*
|
|
105
|
-
* 决策: 验证 `enc:` prefix → base64 decode → 拆 iv / ciphertext / authTag →
|
|
106
|
-
* GCM 解密, 验 AAD, 验 auth tag.
|
|
107
|
-
*
|
|
108
|
-
* 错误:
|
|
109
|
-
* - 缺 `enc:` prefix → 抛错 (提示 plaintext 误传 — 让 plaintext detect 走 Reader)
|
|
110
|
-
* - 不是 32 byte key → 抛错
|
|
111
|
-
* - auth tag 失败 (cipher 错 / AAD 错 / line swap 攻击) → 抛 'auth tag mismatch'
|
|
112
|
-
* - base64 错 / length 错 → 抛 'malformed encrypted line'
|
|
113
|
-
*/
|
|
114
|
-
export function decryptLine(line, key) {
|
|
115
|
-
if (key.length !== SESSION_KEY_LENGTH) {
|
|
116
|
-
throw new Error(`decryptLine: key must be ${SESSION_KEY_LENGTH} bytes, got ${key.length}`);
|
|
117
|
-
}
|
|
118
|
-
if (!line.startsWith(ENCRYPTED_LINE_PREFIX)) {
|
|
119
|
-
throw new Error(`decryptLine: line does not start with "${ENCRYPTED_LINE_PREFIX}" prefix`);
|
|
120
|
-
}
|
|
121
|
-
const b64 = line.slice(ENCRYPTED_LINE_PREFIX.length);
|
|
122
|
-
const packed = Buffer.from(b64, 'base64');
|
|
123
|
-
// 最小 length: iv(12) + authTag(16) = 28 byte (ciphertext 可以是 0+)
|
|
124
|
-
if (packed.length < GCM_IV_LENGTH + GCM_AUTH_TAG_LENGTH) {
|
|
125
|
-
throw new Error(`decryptLine: malformed encrypted line (packed length ${packed.length} < ${GCM_IV_LENGTH + GCM_AUTH_TAG_LENGTH})`);
|
|
126
|
-
}
|
|
127
|
-
const iv = packed.subarray(0, GCM_IV_LENGTH);
|
|
128
|
-
const authTag = packed.subarray(packed.length - GCM_AUTH_TAG_LENGTH);
|
|
129
|
-
const ciphertext = packed.subarray(GCM_IV_LENGTH, packed.length - GCM_AUTH_TAG_LENGTH);
|
|
130
|
-
const decipher = createDecipheriv('aes-256-gcm', key, iv);
|
|
131
|
-
decipher.setAAD(Buffer.from(SESSION_AAD, 'utf8'));
|
|
132
|
-
decipher.setAuthTag(authTag);
|
|
133
|
-
try {
|
|
134
|
-
const dec = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
135
|
-
return dec.toString('utf8');
|
|
136
|
-
}
|
|
137
|
-
catch (err) {
|
|
138
|
-
// GCM auth tag 失败 / AAD 失败 / ciphertext 破坏 — 统一抛 'auth tag mismatch'
|
|
139
|
-
throw new Error(`decryptLine: auth tag mismatch (${err instanceof Error ? err.message : String(err)})`);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* 快速判断: 是 plaintext JSON 行 (用于让 Reader 知道是 plaintext).
|
|
144
|
-
*
|
|
145
|
-
* 决策理由 (决策沿用 Reader 已有拍):
|
|
146
|
-
* - JSON 行必以 `{` 开始 (明文事件), 加密行必以 `e` (`enc:` 开头)
|
|
147
|
-
* - 不存文字冲突 (明文 SessionEvent 不会以 `enc:` 开头)
|
|
148
|
-
*
|
|
149
|
-
* 边界: D-6-1 不支持 mix (一行 plaintext + 一行 encrypted 交错) —
|
|
150
|
-
* 一旦传 key 整个 session 必须用 key 写到底 (跟 GCM nonce 不能重用的语义一致)
|
|
151
|
-
*/
|
|
152
|
-
export function isEncryptedLine(line) {
|
|
153
|
-
return line.startsWith(ENCRYPTED_LINE_PREFIX);
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=crypto.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/session/crypto.ts"],"names":[],"mappings":"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"}
|