@agentunion/fastaun 0.2.20 → 0.3.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/CHANGELOG.md +46 -23
- package/_packed_docs/CHANGELOG.md +46 -23
- package/_packed_docs/protocol/15-/347/246/273/347/272/277/346/216/250/351/200/201/351/200/232/347/237/245/345/215/217/350/256/256.md +419 -0
- package/_packed_docs/protocol/index.md +13 -3
- package/_packed_docs/python-sdk-v2-only-changelog.md +189 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +39 -16
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +90 -39
- package/dist/auth.js +24 -7
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +115 -166
- package/dist/client.js +2006 -3427
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +0 -4
- package/dist/config.js +0 -4
- package/dist/config.js.map +1 -1
- package/dist/e2ee.d.ts +5 -139
- package/dist/e2ee.js +4 -1151
- package/dist/e2ee.js.map +1 -1
- package/dist/errors.d.ts +0 -8
- package/dist/errors.js +0 -14
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/keystore/aid-db.d.ts +12 -61
- package/dist/keystore/aid-db.js +41 -539
- package/dist/keystore/aid-db.js.map +1 -1
- package/dist/keystore/file.d.ts +5 -41
- package/dist/keystore/file.js +8 -64
- package/dist/keystore/file.js.map +1 -1
- package/dist/keystore/index.d.ts +1 -49
- package/dist/namespaces/auth.js +4 -2
- package/dist/namespaces/auth.js.map +1 -1
- package/dist/protected-headers.d.ts +13 -0
- package/dist/protected-headers.js +47 -0
- package/dist/protected-headers.js.map +1 -0
- package/dist/seq-tracker.d.ts +7 -2
- package/dist/seq-tracker.js +31 -10
- package/dist/seq-tracker.js.map +1 -1
- package/dist/types.d.ts +0 -56
- package/dist/v2/crypto/aead.d.ts +20 -0
- package/dist/v2/crypto/aead.js +59 -0
- package/dist/v2/crypto/aead.js.map +1 -0
- package/dist/v2/crypto/canonical.d.ts +20 -0
- package/dist/v2/crypto/canonical.js +119 -0
- package/dist/v2/crypto/canonical.js.map +1 -0
- package/dist/v2/crypto/dh-path.d.ts +39 -0
- package/dist/v2/crypto/dh-path.js +55 -0
- package/dist/v2/crypto/dh-path.js.map +1 -0
- package/dist/v2/crypto/ecdh.d.ts +29 -0
- package/dist/v2/crypto/ecdh.js +122 -0
- package/dist/v2/crypto/ecdh.js.map +1 -0
- package/dist/v2/crypto/ecdsa.d.ts +29 -0
- package/dist/v2/crypto/ecdsa.js +120 -0
- package/dist/v2/crypto/ecdsa.js.map +1 -0
- package/dist/v2/crypto/hkdf.d.ts +19 -0
- package/dist/v2/crypto/hkdf.js +47 -0
- package/dist/v2/crypto/hkdf.js.map +1 -0
- package/dist/v2/crypto/index.d.ts +8 -0
- package/dist/v2/crypto/index.js +8 -0
- package/dist/v2/crypto/index.js.map +1 -0
- package/dist/v2/crypto/recipients.d.ts +32 -0
- package/dist/v2/crypto/recipients.js +183 -0
- package/dist/v2/crypto/recipients.js.map +1 -0
- package/dist/v2/e2ee/decrypt.d.ts +29 -0
- package/dist/v2/e2ee/decrypt.js +159 -0
- package/dist/v2/e2ee/decrypt.js.map +1 -0
- package/dist/v2/e2ee/encrypt-group.d.ts +17 -0
- package/dist/v2/e2ee/encrypt-group.js +143 -0
- package/dist/v2/e2ee/encrypt-group.js.map +1 -0
- package/dist/v2/e2ee/encrypt-p2p.d.ts +31 -0
- package/dist/v2/e2ee/encrypt-p2p.js +190 -0
- package/dist/v2/e2ee/encrypt-p2p.js.map +1 -0
- package/dist/v2/e2ee/index.d.ts +9 -0
- package/dist/v2/e2ee/index.js +9 -0
- package/dist/v2/e2ee/index.js.map +1 -0
- package/dist/v2/e2ee/metadata-auth.d.ts +15 -0
- package/dist/v2/e2ee/metadata-auth.js +50 -0
- package/dist/v2/e2ee/metadata-auth.js.map +1 -0
- package/dist/v2/e2ee/types.d.ts +57 -0
- package/dist/v2/e2ee/types.js +7 -0
- package/dist/v2/e2ee/types.js.map +1 -0
- package/dist/v2/session/index.d.ts +4 -0
- package/dist/v2/session/index.js +3 -0
- package/dist/v2/session/index.js.map +1 -0
- package/dist/v2/session/keystore.d.ts +41 -0
- package/dist/v2/session/keystore.js +103 -0
- package/dist/v2/session/keystore.js.map +1 -0
- package/dist/v2/session/session.d.ts +97 -0
- package/dist/v2/session/session.js +242 -0
- package/dist/v2/session/session.js.map +1 -0
- package/dist/v2/state/commitment.d.ts +58 -0
- package/dist/v2/state/commitment.js +85 -0
- package/dist/v2/state/commitment.js.map +1 -0
- package/dist/v2/state/index.d.ts +2 -0
- package/dist/v2/state/index.js +2 -0
- package/dist/v2/state/index.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protected-headers.js","sourceRoot":"","sources":["../src/protected-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAIpC,qCAAqC;AACrC,MAAM,OAAO,gBAAgB;IACnB,MAAM,GAA2B,EAAE,CAAC;IAE5C,YAAY,MAAuC;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,GAAY;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrD,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,KAAK,KAAK,mBAAmB,EAAE,CAAC;YAClC,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAc;QAC7B,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,eAA8B,IAAI;QACjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;YAClE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACzB,CAAC,CAAC,YAAY,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,MAAuC;QACjD,OAAO,IAAI,gBAAgB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
package/dist/seq-tracker.d.ts
CHANGED
|
@@ -10,8 +10,13 @@ export declare class SeqTracker {
|
|
|
10
10
|
setBaseline(ns: string, baselineSeq: number): void;
|
|
11
11
|
/** 记录收到的 seq,返回 true 表示需要 pull 补齐空洞 */
|
|
12
12
|
onMessageSeq(ns: string, seq: number): boolean;
|
|
13
|
-
/** pull 返回后更新 tracker
|
|
14
|
-
|
|
13
|
+
/** pull 返回后更新 tracker 状态。
|
|
14
|
+
*
|
|
15
|
+
* afterSeq: pull 请求使用的 after_seq 参数。如果等于当前 contiguousSeq(gap fill 场景),
|
|
16
|
+
* 直接把 pull 到的最大 seq 作为新的 contiguousSeq——服务端返回的就是当前可用的全部消息,
|
|
17
|
+
* 中间的空洞是永久性的(竞态跳跃/未持久化/过期清理),不应阻塞后续消息投递。
|
|
18
|
+
*/
|
|
19
|
+
onPullResult(ns: string, messages: JsonObject[], afterSeq?: number): void;
|
|
15
20
|
/** P1-07: 内存保护 — 当 receivedSeqs 超过上限时,
|
|
16
21
|
* 找到最小 seq 强制推进 contiguousSeq,释放已无意义的条目。 */
|
|
17
22
|
private _forceCompact;
|
package/dist/seq-tracker.js
CHANGED
|
@@ -103,8 +103,13 @@ export class SeqTracker {
|
|
|
103
103
|
}
|
|
104
104
|
return true;
|
|
105
105
|
}
|
|
106
|
-
/** pull 返回后更新 tracker
|
|
107
|
-
|
|
106
|
+
/** pull 返回后更新 tracker 状态。
|
|
107
|
+
*
|
|
108
|
+
* afterSeq: pull 请求使用的 after_seq 参数。如果等于当前 contiguousSeq(gap fill 场景),
|
|
109
|
+
* 直接把 pull 到的最大 seq 作为新的 contiguousSeq——服务端返回的就是当前可用的全部消息,
|
|
110
|
+
* 中间的空洞是永久性的(竞态跳跃/未持久化/过期清理),不应阻塞后续消息投递。
|
|
111
|
+
*/
|
|
112
|
+
onPullResult(ns, messages, afterSeq) {
|
|
108
113
|
const t = this._get(ns);
|
|
109
114
|
const pulledSeqs = new Set();
|
|
110
115
|
for (const m of messages) {
|
|
@@ -112,6 +117,28 @@ export class SeqTracker {
|
|
|
112
117
|
if (typeof s === 'number' && s > 0)
|
|
113
118
|
pulledSeqs.add(s);
|
|
114
119
|
}
|
|
120
|
+
// 将 pulled 的 seq 加入 receivedSeqs
|
|
121
|
+
for (const s of pulledSeqs) {
|
|
122
|
+
t.receivedSeqs.add(s);
|
|
123
|
+
}
|
|
124
|
+
// gap fill 场景:从 contiguousSeq 开始 pull,直接推进到 pull 返回的最大 seq
|
|
125
|
+
if (pulledSeqs.size > 0 && afterSeq !== undefined && afterSeq === t.contiguousSeq) {
|
|
126
|
+
const maxPulled = Math.max(...pulledSeqs);
|
|
127
|
+
if (maxPulled > t.contiguousSeq) {
|
|
128
|
+
t.contiguousSeq = maxPulled;
|
|
129
|
+
// 清理被跳过区间内的 pendingGaps
|
|
130
|
+
for (const [key, probe] of t.pendingGaps) {
|
|
131
|
+
if (probe.gapEnd <= t.contiguousSeq) {
|
|
132
|
+
t.pendingGaps.delete(key);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// 清理 receivedSeqs 中 <= contiguousSeq 的条目
|
|
136
|
+
for (const s of t.receivedSeqs) {
|
|
137
|
+
if (s <= t.contiguousSeq)
|
|
138
|
+
t.receivedSeqs.delete(s);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
115
142
|
const now = nowMs();
|
|
116
143
|
for (const [key, probe] of t.pendingGaps) {
|
|
117
144
|
if (probe.resolved)
|
|
@@ -119,13 +146,10 @@ export class SeqTracker {
|
|
|
119
146
|
probe.lastProbeAt = now;
|
|
120
147
|
probe.probeCount += 1;
|
|
121
148
|
let allCovered = true;
|
|
122
|
-
let anyHit = false;
|
|
123
149
|
for (let s = probe.gapStart; s <= probe.gapEnd; s++) {
|
|
124
|
-
if (pulledSeqs.has(s)) {
|
|
125
|
-
anyHit = true;
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
150
|
+
if (!pulledSeqs.has(s)) {
|
|
128
151
|
allCovered = false;
|
|
152
|
+
break;
|
|
129
153
|
}
|
|
130
154
|
}
|
|
131
155
|
if (allCovered) {
|
|
@@ -133,9 +157,6 @@ export class SeqTracker {
|
|
|
133
157
|
}
|
|
134
158
|
// S2: 不再因 probeCount >= 3 自动 resolved;仅由完整补齐 / 服务端 tombstone 驱动。
|
|
135
159
|
}
|
|
136
|
-
for (const s of pulledSeqs) {
|
|
137
|
-
t.receivedSeqs.add(s);
|
|
138
|
-
}
|
|
139
160
|
if (pulledSeqs.size) {
|
|
140
161
|
t.maxSeenSeq = Math.max(t.maxSeenSeq, Math.max(...pulledSeqs));
|
|
141
162
|
}
|
package/dist/seq-tracker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seq-tracker.js","sourceRoot":"","sources":["../src/seq-tracker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"seq-tracker.js","sourceRoot":"","sources":["../src/seq-tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -51,57 +51,11 @@ export interface KeyPairRecord extends JsonObject {
|
|
|
51
51
|
public_key_der_b64?: string;
|
|
52
52
|
curve?: string;
|
|
53
53
|
}
|
|
54
|
-
/** E2EE prekey 记录 */
|
|
55
|
-
export interface PrekeyRecord extends JsonObject {
|
|
56
|
-
prekey_id?: string;
|
|
57
|
-
public_key?: string;
|
|
58
|
-
signature?: string;
|
|
59
|
-
private_key_pem?: string;
|
|
60
|
-
created_at?: number;
|
|
61
|
-
updated_at?: number;
|
|
62
|
-
expires_at?: number;
|
|
63
|
-
}
|
|
64
|
-
/** prekey 映射 */
|
|
65
|
-
export type PrekeyMap = Record<string, PrekeyRecord>;
|
|
66
|
-
/** 群组旧 epoch 记录 */
|
|
67
|
-
export interface GroupOldEpochRecord extends JsonObject {
|
|
68
|
-
epoch?: number;
|
|
69
|
-
secret?: string;
|
|
70
|
-
commitment?: string;
|
|
71
|
-
member_aids?: string[];
|
|
72
|
-
epoch_chain?: string;
|
|
73
|
-
epoch_chain_unverified?: boolean;
|
|
74
|
-
epoch_chain_unverified_reason?: string;
|
|
75
|
-
pending_rotation_id?: string;
|
|
76
|
-
pending_created_at?: number;
|
|
77
|
-
secret_protection?: JsonObject;
|
|
78
|
-
created_at?: number;
|
|
79
|
-
updated_at?: number;
|
|
80
|
-
expires_at?: number;
|
|
81
|
-
}
|
|
82
|
-
/** 群组密钥状态 */
|
|
83
|
-
export interface GroupSecretRecord extends JsonObject {
|
|
84
|
-
group_id?: string;
|
|
85
|
-
epoch?: number;
|
|
86
|
-
secret?: string;
|
|
87
|
-
commitment?: string;
|
|
88
|
-
member_aids?: string[];
|
|
89
|
-
epoch_chain?: string;
|
|
90
|
-
epoch_chain_unverified?: boolean;
|
|
91
|
-
epoch_chain_unverified_reason?: string;
|
|
92
|
-
pending_rotation_id?: string;
|
|
93
|
-
pending_created_at?: number;
|
|
94
|
-
updated_at?: number;
|
|
95
|
-
secret_protection?: JsonObject;
|
|
96
|
-
old_epochs?: GroupOldEpochRecord[];
|
|
97
|
-
}
|
|
98
54
|
/** metadata 记录 */
|
|
99
55
|
export interface MetadataRecord extends JsonObject {
|
|
100
56
|
access_token?: string;
|
|
101
57
|
refresh_token?: string;
|
|
102
58
|
kite_token?: string;
|
|
103
|
-
e2ee_prekeys?: PrekeyMap;
|
|
104
|
-
e2ee_sessions?: JsonObject[];
|
|
105
59
|
}
|
|
106
60
|
/** 身份记录 */
|
|
107
61
|
export interface IdentityRecord extends MetadataRecord, KeyPairRecord {
|
|
@@ -112,16 +66,6 @@ export interface IdentityRecord extends MetadataRecord, KeyPairRecord {
|
|
|
112
66
|
token_exp?: number;
|
|
113
67
|
expires_at?: number;
|
|
114
68
|
}
|
|
115
|
-
/** E2EE session 记录 */
|
|
116
|
-
export interface SessionRecord extends JsonObject {
|
|
117
|
-
session_id?: string;
|
|
118
|
-
key?: string;
|
|
119
|
-
key_protection?: JsonObject;
|
|
120
|
-
peer_aid?: string;
|
|
121
|
-
created_at?: number;
|
|
122
|
-
updated_at?: number;
|
|
123
|
-
expires_at?: number;
|
|
124
|
-
}
|
|
125
69
|
/** SecretStore 加密记录 */
|
|
126
70
|
export interface SecretRecord extends JsonObject {
|
|
127
71
|
scheme?: string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUN E2EE V2: AES-256-GCM AEAD
|
|
3
|
+
*
|
|
4
|
+
* 规范引用:§3.1
|
|
5
|
+
* - 256-bit 密钥,96-bit nonce,128-bit tag
|
|
6
|
+
* - AAD:上下文绑定(from/to/group_id 等的 canonical_json)
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* AES-256-GCM 加密。
|
|
10
|
+
*
|
|
11
|
+
* @returns ciphertext 与 tag(16 字节)分离返回
|
|
12
|
+
*/
|
|
13
|
+
export declare function aesGcmEncrypt(key: Uint8Array, nonce: Uint8Array, plaintext: Uint8Array, aad: Uint8Array): {
|
|
14
|
+
ciphertext: Uint8Array;
|
|
15
|
+
tag: Uint8Array;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* AES-256-GCM 解密。tag 校验失败抛错。
|
|
19
|
+
*/
|
|
20
|
+
export declare function aesGcmDecrypt(key: Uint8Array, nonce: Uint8Array, ciphertext: Uint8Array, tag: Uint8Array, aad: Uint8Array): Uint8Array;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUN E2EE V2: AES-256-GCM AEAD
|
|
3
|
+
*
|
|
4
|
+
* 规范引用:§3.1
|
|
5
|
+
* - 256-bit 密钥,96-bit nonce,128-bit tag
|
|
6
|
+
* - AAD:上下文绑定(from/to/group_id 等的 canonical_json)
|
|
7
|
+
*/
|
|
8
|
+
import { createCipheriv, createDecipheriv } from 'node:crypto';
|
|
9
|
+
const KEY_LEN = 32;
|
|
10
|
+
const NONCE_LEN = 12;
|
|
11
|
+
const TAG_LEN = 16;
|
|
12
|
+
/**
|
|
13
|
+
* AES-256-GCM 加密。
|
|
14
|
+
*
|
|
15
|
+
* @returns ciphertext 与 tag(16 字节)分离返回
|
|
16
|
+
*/
|
|
17
|
+
export function aesGcmEncrypt(key, nonce, plaintext, aad) {
|
|
18
|
+
if (key.length !== KEY_LEN) {
|
|
19
|
+
throw new Error(`AES-256-GCM key must be ${KEY_LEN} bytes, got ${key.length}`);
|
|
20
|
+
}
|
|
21
|
+
if (nonce.length !== NONCE_LEN) {
|
|
22
|
+
throw new Error(`AES-256-GCM nonce must be ${NONCE_LEN} bytes, got ${nonce.length}`);
|
|
23
|
+
}
|
|
24
|
+
const cipher = createCipheriv('aes-256-gcm', Buffer.from(key), Buffer.from(nonce));
|
|
25
|
+
if (aad.length > 0) {
|
|
26
|
+
cipher.setAAD(Buffer.from(aad));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
cipher.setAAD(Buffer.alloc(0));
|
|
30
|
+
}
|
|
31
|
+
const ct = Buffer.concat([cipher.update(Buffer.from(plaintext)), cipher.final()]);
|
|
32
|
+
const tag = cipher.getAuthTag();
|
|
33
|
+
return { ciphertext: new Uint8Array(ct), tag: new Uint8Array(tag) };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* AES-256-GCM 解密。tag 校验失败抛错。
|
|
37
|
+
*/
|
|
38
|
+
export function aesGcmDecrypt(key, nonce, ciphertext, tag, aad) {
|
|
39
|
+
if (key.length !== KEY_LEN) {
|
|
40
|
+
throw new Error(`AES-256-GCM key must be ${KEY_LEN} bytes, got ${key.length}`);
|
|
41
|
+
}
|
|
42
|
+
if (nonce.length !== NONCE_LEN) {
|
|
43
|
+
throw new Error(`AES-256-GCM nonce must be ${NONCE_LEN} bytes, got ${nonce.length}`);
|
|
44
|
+
}
|
|
45
|
+
if (tag.length !== TAG_LEN) {
|
|
46
|
+
throw new Error(`AES-256-GCM tag must be ${TAG_LEN} bytes, got ${tag.length}`);
|
|
47
|
+
}
|
|
48
|
+
const decipher = createDecipheriv('aes-256-gcm', Buffer.from(key), Buffer.from(nonce));
|
|
49
|
+
if (aad.length > 0) {
|
|
50
|
+
decipher.setAAD(Buffer.from(aad));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
decipher.setAAD(Buffer.alloc(0));
|
|
54
|
+
}
|
|
55
|
+
decipher.setAuthTag(Buffer.from(tag));
|
|
56
|
+
const pt = Buffer.concat([decipher.update(Buffer.from(ciphertext)), decipher.final()]);
|
|
57
|
+
return new Uint8Array(pt);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=aead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aead.js","sourceRoot":"","sources":["../../../src/v2/crypto/aead.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical JSON 序列化 — AUN E2EE V2 协议要求所有 SDK 输出字节级一致。
|
|
3
|
+
*
|
|
4
|
+
* 规则:
|
|
5
|
+
* - 对象键递归字典序排序
|
|
6
|
+
* - UTF-8 直出(非 ASCII 字符不转义)
|
|
7
|
+
* - 数值:整数无小数点,浮点数无前导零、不用科学计数法
|
|
8
|
+
* - 字符串最小转义:仅 " \ \b \f \n \r \t,其它控制字符 \u00XX
|
|
9
|
+
* - 紧凑格式(无空格)
|
|
10
|
+
* - null / true / false 字面量
|
|
11
|
+
* - 数组顺序保留
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* 将任意 JSON 值序列化为 canonical JSON 的 UTF-8 字节。
|
|
15
|
+
*/
|
|
16
|
+
export declare function canonicalJson(obj: unknown): Uint8Array;
|
|
17
|
+
/**
|
|
18
|
+
* 将任意 JSON 值序列化为 canonical JSON 字符串。
|
|
19
|
+
*/
|
|
20
|
+
export declare function canonicalStringify(value: unknown): string;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical JSON 序列化 — AUN E2EE V2 协议要求所有 SDK 输出字节级一致。
|
|
3
|
+
*
|
|
4
|
+
* 规则:
|
|
5
|
+
* - 对象键递归字典序排序
|
|
6
|
+
* - UTF-8 直出(非 ASCII 字符不转义)
|
|
7
|
+
* - 数值:整数无小数点,浮点数无前导零、不用科学计数法
|
|
8
|
+
* - 字符串最小转义:仅 " \ \b \f \n \r \t,其它控制字符 \u00XX
|
|
9
|
+
* - 紧凑格式(无空格)
|
|
10
|
+
* - null / true / false 字面量
|
|
11
|
+
* - 数组顺序保留
|
|
12
|
+
*/
|
|
13
|
+
const encoder = new TextEncoder();
|
|
14
|
+
/**
|
|
15
|
+
* 将任意 JSON 值序列化为 canonical JSON 的 UTF-8 字节。
|
|
16
|
+
*/
|
|
17
|
+
export function canonicalJson(obj) {
|
|
18
|
+
return encoder.encode(canonicalStringify(obj));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 将任意 JSON 值序列化为 canonical JSON 字符串。
|
|
22
|
+
*/
|
|
23
|
+
export function canonicalStringify(value) {
|
|
24
|
+
if (value === null)
|
|
25
|
+
return 'null';
|
|
26
|
+
if (value === true)
|
|
27
|
+
return 'true';
|
|
28
|
+
if (value === false)
|
|
29
|
+
return 'false';
|
|
30
|
+
if (typeof value === 'number') {
|
|
31
|
+
return formatNumber(value);
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === 'string') {
|
|
34
|
+
return escapeString(value);
|
|
35
|
+
}
|
|
36
|
+
if (Array.isArray(value)) {
|
|
37
|
+
const items = value.map((item) => canonicalStringify(item));
|
|
38
|
+
return '[' + items.join(',') + ']';
|
|
39
|
+
}
|
|
40
|
+
if (typeof value === 'object') {
|
|
41
|
+
const keys = Object.keys(value).sort();
|
|
42
|
+
const pairs = keys.map((k) => escapeString(k) +
|
|
43
|
+
':' +
|
|
44
|
+
canonicalStringify(value[k]));
|
|
45
|
+
return '{' + pairs.join(',') + '}';
|
|
46
|
+
}
|
|
47
|
+
// undefined 等不可序列化类型 — 按 JSON 规范不应出现
|
|
48
|
+
throw new Error(`canonicalJson: unsupported type ${typeof value}`);
|
|
49
|
+
}
|
|
50
|
+
function formatNumber(n) {
|
|
51
|
+
if (!isFinite(n)) {
|
|
52
|
+
throw new Error(`canonicalJson: cannot serialize ${n}`);
|
|
53
|
+
}
|
|
54
|
+
// 整数输出不带小数点
|
|
55
|
+
if (Number.isInteger(n)) {
|
|
56
|
+
// 用 toFixed(0) 避免科学计数法(如 1e21)
|
|
57
|
+
// 但 toFixed 对超大数会失败,改用条件判断
|
|
58
|
+
if (Math.abs(n) < 1e21) {
|
|
59
|
+
return n.toFixed(0);
|
|
60
|
+
}
|
|
61
|
+
// 超大整数:toString 可能用科学计数法,需要手动展开
|
|
62
|
+
return bigIntegerToString(n);
|
|
63
|
+
}
|
|
64
|
+
// 浮点数:使用 toString 输出(不用科学计数法的范围内)
|
|
65
|
+
return n.toString();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 将超大整数(>= 1e21)转为不带科学计数法的字符串。
|
|
69
|
+
*/
|
|
70
|
+
function bigIntegerToString(n) {
|
|
71
|
+
// 利用 BigInt 来避免科学计数法
|
|
72
|
+
return BigInt(n).toString();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 最小转义字符串序列化。
|
|
76
|
+
* 仅转义:" \ \b \f \n \r \t 和其它控制字符(U+0000..U+001F)用 \u00XX。
|
|
77
|
+
* 非 ASCII 字符直接 UTF-8 输出,不转义。
|
|
78
|
+
*/
|
|
79
|
+
function escapeString(s) {
|
|
80
|
+
let result = '"';
|
|
81
|
+
for (let i = 0; i < s.length; i++) {
|
|
82
|
+
const ch = s.charCodeAt(i);
|
|
83
|
+
switch (ch) {
|
|
84
|
+
case 0x22: // "
|
|
85
|
+
result += '\\"';
|
|
86
|
+
break;
|
|
87
|
+
case 0x5c: // \
|
|
88
|
+
result += '\\\\';
|
|
89
|
+
break;
|
|
90
|
+
case 0x08: // \b
|
|
91
|
+
result += '\\b';
|
|
92
|
+
break;
|
|
93
|
+
case 0x0c: // \f
|
|
94
|
+
result += '\\f';
|
|
95
|
+
break;
|
|
96
|
+
case 0x0a: // \n
|
|
97
|
+
result += '\\n';
|
|
98
|
+
break;
|
|
99
|
+
case 0x0d: // \r
|
|
100
|
+
result += '\\r';
|
|
101
|
+
break;
|
|
102
|
+
case 0x09: // \t
|
|
103
|
+
result += '\\t';
|
|
104
|
+
break;
|
|
105
|
+
default:
|
|
106
|
+
if (ch < 0x20) {
|
|
107
|
+
// 其它控制字符用 \u00XX
|
|
108
|
+
result += '\\u' + ch.toString(16).padStart(4, '0');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// 普通字符(含非 ASCII)直接输出
|
|
112
|
+
result += s[i];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
result += '"';
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../src/v2/crypto/canonical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUN E2EE V2: 1DH / 3DH wrap_key 派生
|
|
3
|
+
*
|
|
4
|
+
* 规范引用:§4.x
|
|
5
|
+
*
|
|
6
|
+
* 3DH(活跃会话):
|
|
7
|
+
* DH1 = ECDH(senderSessionPriv, recvIKPub)
|
|
8
|
+
* DH2 = ECDH(senderMasterPriv, recvSPKPub)
|
|
9
|
+
* DH3 = ECDH(senderSessionPriv, recvSPKPub)
|
|
10
|
+
* ikm = DH1 || DH2 || DH3
|
|
11
|
+
* wrap_key = HKDF-SHA256(ikm, salt, info="AUN-V2-3DH", 32)
|
|
12
|
+
*
|
|
13
|
+
* 1DH(无 SPK 的回退路径):
|
|
14
|
+
* DH = ECDH(senderSessionPriv, recvIKPub)
|
|
15
|
+
* wrap_key = HKDF-SHA256(DH, salt, info="AUN-V2-1DH", 32)
|
|
16
|
+
*/
|
|
17
|
+
export declare const INFO_3DH: Uint8Array;
|
|
18
|
+
export declare const INFO_1DH: Uint8Array;
|
|
19
|
+
export declare const WRAP_KEY_LENGTH = 32;
|
|
20
|
+
/**
|
|
21
|
+
* 计算 3DH wrap_key。
|
|
22
|
+
*
|
|
23
|
+
* @param senderSessionPriv 发送方会话私钥(32B 标量)
|
|
24
|
+
* @param senderMasterPriv 发送方 AID 长期主私钥(32B 标量)
|
|
25
|
+
* @param recvIKPub 接收方身份公钥 IK(DER SPKI)
|
|
26
|
+
* @param recvSPKPub 接收方 Signed PreKey 公钥 SPK(DER SPKI)
|
|
27
|
+
* @param salt HKDF salt
|
|
28
|
+
* @returns 32 字节 wrap_key
|
|
29
|
+
*/
|
|
30
|
+
export declare function compute3DHWrap(senderSessionPriv: Uint8Array, senderMasterPriv: Uint8Array, recvIKPub: Uint8Array, recvSPKPub: Uint8Array, salt: Uint8Array): Uint8Array;
|
|
31
|
+
/**
|
|
32
|
+
* 计算 1DH wrap_key(fallback)。
|
|
33
|
+
*
|
|
34
|
+
* @param senderSessionPriv 发送方会话私钥(32B 标量)
|
|
35
|
+
* @param recvIKPub 接收方身份公钥 IK(DER SPKI)
|
|
36
|
+
* @param salt HKDF salt
|
|
37
|
+
* @returns 32 字节 wrap_key
|
|
38
|
+
*/
|
|
39
|
+
export declare function compute1DHWrap(senderSessionPriv: Uint8Array, recvIKPub: Uint8Array, salt: Uint8Array): Uint8Array;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUN E2EE V2: 1DH / 3DH wrap_key 派生
|
|
3
|
+
*
|
|
4
|
+
* 规范引用:§4.x
|
|
5
|
+
*
|
|
6
|
+
* 3DH(活跃会话):
|
|
7
|
+
* DH1 = ECDH(senderSessionPriv, recvIKPub)
|
|
8
|
+
* DH2 = ECDH(senderMasterPriv, recvSPKPub)
|
|
9
|
+
* DH3 = ECDH(senderSessionPriv, recvSPKPub)
|
|
10
|
+
* ikm = DH1 || DH2 || DH3
|
|
11
|
+
* wrap_key = HKDF-SHA256(ikm, salt, info="AUN-V2-3DH", 32)
|
|
12
|
+
*
|
|
13
|
+
* 1DH(无 SPK 的回退路径):
|
|
14
|
+
* DH = ECDH(senderSessionPriv, recvIKPub)
|
|
15
|
+
* wrap_key = HKDF-SHA256(DH, salt, info="AUN-V2-1DH", 32)
|
|
16
|
+
*/
|
|
17
|
+
import { ecdhComputeShared } from './ecdh.js';
|
|
18
|
+
import { hkdfSha256 } from './hkdf.js';
|
|
19
|
+
const TEXT = new TextEncoder();
|
|
20
|
+
export const INFO_3DH = TEXT.encode('AUN-V2-3DH');
|
|
21
|
+
export const INFO_1DH = TEXT.encode('AUN-V2-1DH');
|
|
22
|
+
export const WRAP_KEY_LENGTH = 32;
|
|
23
|
+
/**
|
|
24
|
+
* 计算 3DH wrap_key。
|
|
25
|
+
*
|
|
26
|
+
* @param senderSessionPriv 发送方会话私钥(32B 标量)
|
|
27
|
+
* @param senderMasterPriv 发送方 AID 长期主私钥(32B 标量)
|
|
28
|
+
* @param recvIKPub 接收方身份公钥 IK(DER SPKI)
|
|
29
|
+
* @param recvSPKPub 接收方 Signed PreKey 公钥 SPK(DER SPKI)
|
|
30
|
+
* @param salt HKDF salt
|
|
31
|
+
* @returns 32 字节 wrap_key
|
|
32
|
+
*/
|
|
33
|
+
export function compute3DHWrap(senderSessionPriv, senderMasterPriv, recvIKPub, recvSPKPub, salt) {
|
|
34
|
+
const dh1 = ecdhComputeShared(senderSessionPriv, recvIKPub);
|
|
35
|
+
const dh2 = ecdhComputeShared(senderMasterPriv, recvSPKPub);
|
|
36
|
+
const dh3 = ecdhComputeShared(senderSessionPriv, recvSPKPub);
|
|
37
|
+
const ikm = new Uint8Array(96);
|
|
38
|
+
ikm.set(dh1, 0);
|
|
39
|
+
ikm.set(dh2, 32);
|
|
40
|
+
ikm.set(dh3, 64);
|
|
41
|
+
return hkdfSha256(ikm, salt, INFO_3DH, WRAP_KEY_LENGTH);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 计算 1DH wrap_key(fallback)。
|
|
45
|
+
*
|
|
46
|
+
* @param senderSessionPriv 发送方会话私钥(32B 标量)
|
|
47
|
+
* @param recvIKPub 接收方身份公钥 IK(DER SPKI)
|
|
48
|
+
* @param salt HKDF salt
|
|
49
|
+
* @returns 32 字节 wrap_key
|
|
50
|
+
*/
|
|
51
|
+
export function compute1DHWrap(senderSessionPriv, recvIKPub, salt) {
|
|
52
|
+
const dh = ecdhComputeShared(senderSessionPriv, recvIKPub);
|
|
53
|
+
return hkdfSha256(dh, salt, INFO_1DH, WRAP_KEY_LENGTH);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=dh-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dh-path.js","sourceRoot":"","sources":["../../../src/v2/crypto/dh-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAe,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,QAAQ,GAAe,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,iBAA6B,EAC7B,gBAA4B,EAC5B,SAAqB,EACrB,UAAsB,EACtB,IAAgB;IAEhB,MAAM,GAAG,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjB,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,iBAA6B,EAC7B,SAAqB,EACrB,IAAgB;IAEhB,MAAM,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC3D,OAAO,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ECDH P-256 — AUN E2EE V2 协议要求所有 SDK 的 ECDH 输出字节级一致。
|
|
3
|
+
*
|
|
4
|
+
* 共享秘密为 P-256 曲线点乘后的 X 坐标(32 字节,big-endian)。
|
|
5
|
+
*
|
|
6
|
+
* 实现选型:
|
|
7
|
+
* - 使用 Node `crypto` 模块(非 WebCrypto,TS SDK 目标为 Node 环境)
|
|
8
|
+
* - `createECDH('prime256v1')` 计算 X 坐标
|
|
9
|
+
* - 公钥使用 DER SubjectPublicKeyInfo 编码(与 Python/Go SDK 对齐)
|
|
10
|
+
* - 通过 JWK 中转完成 DER ↔ 未压缩点(0x04 || X || Y)的转换
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* 计算 ECDH 共享秘密(P-256 X 坐标,32 字节)。
|
|
14
|
+
*
|
|
15
|
+
* @param privateKeyScalar 32 字节 P-256 私钥标量(big-endian)
|
|
16
|
+
* @param peerPublicKeyDer DER SubjectPublicKeyInfo 编码的对端公钥
|
|
17
|
+
* @returns 32 字节共享秘密(X 坐标 big-endian)
|
|
18
|
+
*/
|
|
19
|
+
export declare function ecdhComputeShared(privateKeyScalar: Uint8Array, peerPublicKeyDer: Uint8Array): Uint8Array;
|
|
20
|
+
/**
|
|
21
|
+
* 生成 P-256 密钥对。
|
|
22
|
+
*
|
|
23
|
+
* @returns [privateKeyScalar 32B, publicKeyDer SPKI]
|
|
24
|
+
*/
|
|
25
|
+
export declare function generateP256Keypair(): [Uint8Array, Uint8Array];
|
|
26
|
+
/**
|
|
27
|
+
* 从私钥标量导出公钥 DER(SPKI 编码)。
|
|
28
|
+
*/
|
|
29
|
+
export declare function privateToPublicDer(privateKeyScalar: Uint8Array): Uint8Array;
|