@agentunion/fastaun-browser 0.2.20 → 0.3.1

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.
Files changed (128) hide show
  1. package/CHANGELOG.md +66 -26
  2. package/README.md +0 -1
  3. package/_packed_docs/CHANGELOG.md +66 -26
  4. package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +542 -0
  5. package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1 -24
  6. 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
  7. package/_packed_docs/protocol/index.md +13 -3
  8. package/_packed_docs/python-sdk-v2-only-changelog.md +189 -0
  9. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +39 -16
  10. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +131 -39
  11. package/_packed_docs/sdk/09-message-rpc-manual.md +30 -67
  12. package/dist/auth.d.ts.map +1 -1
  13. package/dist/auth.js +25 -5
  14. package/dist/auth.js.map +1 -1
  15. package/dist/bundle.js +15042 -0
  16. package/dist/client.d.ts +179 -187
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +3148 -3993
  19. package/dist/client.js.map +1 -1
  20. package/dist/config.d.ts +0 -4
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +0 -4
  23. package/dist/config.js.map +1 -1
  24. package/dist/crypto.d.ts +8 -1
  25. package/dist/crypto.d.ts.map +1 -1
  26. package/dist/crypto.js +114 -1
  27. package/dist/crypto.js.map +1 -1
  28. package/dist/e2ee.d.ts +5 -210
  29. package/dist/e2ee.d.ts.map +1 -1
  30. package/dist/e2ee.js +4 -1379
  31. package/dist/e2ee.js.map +1 -1
  32. package/dist/index.d.ts +7 -3
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +5 -4
  35. package/dist/index.js.map +1 -1
  36. package/dist/namespaces/auth.d.ts +9 -0
  37. package/dist/namespaces/auth.d.ts.map +1 -1
  38. package/dist/namespaces/auth.js +248 -4
  39. package/dist/namespaces/auth.js.map +1 -1
  40. package/dist/protected-headers.d.ts +14 -0
  41. package/dist/protected-headers.d.ts.map +1 -0
  42. package/dist/protected-headers.js +47 -0
  43. package/dist/protected-headers.js.map +1 -0
  44. package/dist/seq-tracker.d.ts +7 -2
  45. package/dist/seq-tracker.d.ts.map +1 -1
  46. package/dist/seq-tracker.js +33 -13
  47. package/dist/seq-tracker.js.map +1 -1
  48. package/dist/transport.d.ts +9 -1
  49. package/dist/transport.d.ts.map +1 -1
  50. package/dist/transport.js +262 -10
  51. package/dist/transport.js.map +1 -1
  52. package/dist/v2/crypto/aead.d.ts +26 -0
  53. package/dist/v2/crypto/aead.d.ts.map +1 -0
  54. package/dist/v2/crypto/aead.js +63 -0
  55. package/dist/v2/crypto/aead.js.map +1 -0
  56. package/dist/v2/crypto/canonical.d.ts +21 -0
  57. package/dist/v2/crypto/canonical.d.ts.map +1 -0
  58. package/dist/v2/crypto/canonical.js +111 -0
  59. package/dist/v2/crypto/canonical.js.map +1 -0
  60. package/dist/v2/crypto/dh-path.d.ts +21 -0
  61. package/dist/v2/crypto/dh-path.d.ts.map +1 -0
  62. package/dist/v2/crypto/dh-path.js +50 -0
  63. package/dist/v2/crypto/dh-path.js.map +1 -0
  64. package/dist/v2/crypto/ecdh.d.ts +19 -0
  65. package/dist/v2/crypto/ecdh.d.ts.map +1 -0
  66. package/dist/v2/crypto/ecdh.js +101 -0
  67. package/dist/v2/crypto/ecdh.js.map +1 -0
  68. package/dist/v2/crypto/ecdsa.d.ts +16 -0
  69. package/dist/v2/crypto/ecdsa.d.ts.map +1 -0
  70. package/dist/v2/crypto/ecdsa.js +52 -0
  71. package/dist/v2/crypto/ecdsa.js.map +1 -0
  72. package/dist/v2/crypto/hkdf.d.ts +21 -0
  73. package/dist/v2/crypto/hkdf.d.ts.map +1 -0
  74. package/dist/v2/crypto/hkdf.js +32 -0
  75. package/dist/v2/crypto/hkdf.js.map +1 -0
  76. package/dist/v2/crypto/index.d.ts +9 -0
  77. package/dist/v2/crypto/index.d.ts.map +1 -0
  78. package/dist/v2/crypto/index.js +8 -0
  79. package/dist/v2/crypto/index.js.map +1 -0
  80. package/dist/v2/crypto/recipients.d.ts +43 -0
  81. package/dist/v2/crypto/recipients.d.ts.map +1 -0
  82. package/dist/v2/crypto/recipients.js +188 -0
  83. package/dist/v2/crypto/recipients.js.map +1 -0
  84. package/dist/v2/e2ee/decrypt.d.ts +13 -0
  85. package/dist/v2/e2ee/decrypt.d.ts.map +1 -0
  86. package/dist/v2/e2ee/decrypt.js +176 -0
  87. package/dist/v2/e2ee/decrypt.js.map +1 -0
  88. package/dist/v2/e2ee/encrypt-group.d.ts +14 -0
  89. package/dist/v2/e2ee/encrypt-group.d.ts.map +1 -0
  90. package/dist/v2/e2ee/encrypt-group.js +196 -0
  91. package/dist/v2/e2ee/encrypt-group.js.map +1 -0
  92. package/dist/v2/e2ee/encrypt-p2p.d.ts +15 -0
  93. package/dist/v2/e2ee/encrypt-p2p.d.ts.map +1 -0
  94. package/dist/v2/e2ee/encrypt-p2p.js +240 -0
  95. package/dist/v2/e2ee/encrypt-p2p.js.map +1 -0
  96. package/dist/v2/e2ee/index.d.ts +9 -0
  97. package/dist/v2/e2ee/index.d.ts.map +1 -0
  98. package/dist/v2/e2ee/index.js +9 -0
  99. package/dist/v2/e2ee/index.js.map +1 -0
  100. package/dist/v2/e2ee/metadata-auth.d.ts +9 -0
  101. package/dist/v2/e2ee/metadata-auth.d.ts.map +1 -0
  102. package/dist/v2/e2ee/metadata-auth.js +60 -0
  103. package/dist/v2/e2ee/metadata-auth.js.map +1 -0
  104. package/dist/v2/e2ee/types.d.ts +57 -0
  105. package/dist/v2/e2ee/types.d.ts.map +1 -0
  106. package/dist/v2/e2ee/types.js +7 -0
  107. package/dist/v2/e2ee/types.js.map +1 -0
  108. package/dist/v2/session/index.d.ts +4 -0
  109. package/dist/v2/session/index.d.ts.map +1 -0
  110. package/dist/v2/session/index.js +3 -0
  111. package/dist/v2/session/index.js.map +1 -0
  112. package/dist/v2/session/keystore.d.ts +57 -0
  113. package/dist/v2/session/keystore.d.ts.map +1 -0
  114. package/dist/v2/session/keystore.js +244 -0
  115. package/dist/v2/session/keystore.js.map +1 -0
  116. package/dist/v2/session/session.d.ts +121 -0
  117. package/dist/v2/session/session.d.ts.map +1 -0
  118. package/dist/v2/session/session.js +344 -0
  119. package/dist/v2/session/session.js.map +1 -0
  120. package/dist/v2/state/commitment.d.ts +10 -0
  121. package/dist/v2/state/commitment.d.ts.map +1 -0
  122. package/dist/v2/state/commitment.js +86 -0
  123. package/dist/v2/state/commitment.js.map +1 -0
  124. package/dist/v2/state/index.d.ts +2 -0
  125. package/dist/v2/state/index.d.ts.map +1 -0
  126. package/dist/v2/state/index.js +2 -0
  127. package/dist/v2/state/index.js.map +1 -0
  128. package/package.json +8 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../../src/v2/crypto/recipients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 解密 V2 加密消息(P2P 或 Group)。
3
+ *
4
+ * @param envelope 完整 envelope dict
5
+ * @param selfAid 接收方 AID
6
+ * @param selfDeviceId 接收方 device_id
7
+ * @param selfIkPriv 接收方 IK 私钥(32B scalar)
8
+ * @param selfSpkPriv 接收方 SPK 私钥(32B scalar);undefined 表示无 SPK(1DH)
9
+ * @param senderPubDer 发送方 AID 主公钥(DER),用于验签
10
+ * @returns 解密后的 payload;null 表示找不到自己的 recipient 行
11
+ */
12
+ export declare function decryptMessage(envelope: Record<string, unknown>, selfAid: string, selfDeviceId: string, selfIkPriv: Uint8Array, selfSpkPriv: Uint8Array | undefined, senderPubDer: Uint8Array): Promise<Record<string, unknown> | null>;
13
+ //# sourceMappingURL=decrypt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../src/v2/e2ee/decrypt.ts"],"names":[],"mappings":"AA2EA;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,UAAU,GAAG,SAAS,EACnC,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CA4FzC"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * AUN E2EE V2: 统一解密引擎(浏览器版,async)
3
+ *
4
+ * 支持 P2P 和 Group 消息解密(按 envelope.type 分流)。纯计算,无 IO。
5
+ *
6
+ * 规范引用: §4.6 / §5.5
7
+ *
8
+ * 参考实现: python/src/aun_core/v2/e2ee/decrypt.py
9
+ */
10
+ import { canonicalJson } from '../crypto/canonical';
11
+ import { ecdsaVerifyRaw } from '../crypto/ecdsa';
12
+ import { ecdhComputeShared } from '../crypto/ecdh';
13
+ import { hkdfSha256 } from '../crypto/hkdf';
14
+ import { aesGcmDecrypt } from '../crypto/aead';
15
+ import { computeLeafHash, computeMerkleRoot, verifyMerkleProof, } from '../crypto/recipients';
16
+ import { SUITE_NAME } from './types';
17
+ const encoder = new TextEncoder();
18
+ const INFO_3DH = encoder.encode('AUN-V2-3DH');
19
+ const INFO_1DH = encoder.encode('AUN-V2-1DH');
20
+ async function sha256(data) {
21
+ const buf = await crypto.subtle.digest('SHA-256', data.slice().buffer);
22
+ return new Uint8Array(buf);
23
+ }
24
+ function base64ToBytes(s) {
25
+ const bin = atob(s);
26
+ const out = new Uint8Array(bin.length);
27
+ for (let i = 0; i < bin.length; i++)
28
+ out[i] = bin.charCodeAt(i);
29
+ return out;
30
+ }
31
+ function hexToBytes(s) {
32
+ if (s.length % 2 !== 0)
33
+ throw new Error('hex length must be even');
34
+ const out = new Uint8Array(s.length / 2);
35
+ for (let i = 0; i < out.length; i++) {
36
+ const hi = parseInt(s.charAt(i * 2), 16);
37
+ const lo = parseInt(s.charAt(i * 2 + 1), 16);
38
+ if (Number.isNaN(hi) || Number.isNaN(lo))
39
+ throw new Error('invalid hex char');
40
+ out[i] = (hi << 4) | lo;
41
+ }
42
+ return out;
43
+ }
44
+ /**
45
+ * 解密 V2 加密消息(P2P 或 Group)。
46
+ *
47
+ * @param envelope 完整 envelope dict
48
+ * @param selfAid 接收方 AID
49
+ * @param selfDeviceId 接收方 device_id
50
+ * @param selfIkPriv 接收方 IK 私钥(32B scalar)
51
+ * @param selfSpkPriv 接收方 SPK 私钥(32B scalar);undefined 表示无 SPK(1DH)
52
+ * @param senderPubDer 发送方 AID 主公钥(DER),用于验签
53
+ * @returns 解密后的 payload;null 表示找不到自己的 recipient 行
54
+ */
55
+ export async function decryptMessage(envelope, selfAid, selfDeviceId, selfIkPriv, selfSpkPriv, senderPubDer) {
56
+ const env = envelope;
57
+ // 1. 验 sender_signature
58
+ if (!(await verifySenderSignature(env, senderPubDer))) {
59
+ throw new Error('sender_signature verification failed');
60
+ }
61
+ // 2. 找自己的 row(完整 recipients 数组 / 单个 recipient + merkle_proof)
62
+ let row = null;
63
+ if (Array.isArray(env.recipients)) {
64
+ const rows = env.recipients;
65
+ const expected = await computeMerkleRoot(rows);
66
+ if (expected !== env.recipients_digest) {
67
+ throw new Error('recipients_digest mismatch');
68
+ }
69
+ row = findMyRow(rows, selfAid, selfDeviceId);
70
+ if (!row)
71
+ return null;
72
+ }
73
+ else if (env.recipient && typeof env.recipient === 'object') {
74
+ const r = env.recipient;
75
+ row = [
76
+ r.aid ?? '',
77
+ r.device_id ?? '',
78
+ r.role ?? '',
79
+ r.key_source ?? '',
80
+ r.fp ?? '',
81
+ r.spk_id ?? '',
82
+ r.wrap_nonce ?? '',
83
+ r.wrapped_key ?? '',
84
+ ];
85
+ // 服务端拆分后存储:用 Merkle proof 验证 wrap 在签名集中
86
+ const proof = env.merkle_proof;
87
+ const expectedRoot = env.recipients_digest;
88
+ if (proof != null && expectedRoot) {
89
+ const leaf = await computeLeafHash(row);
90
+ const ok = await verifyMerkleProof(leaf, proof, expectedRoot);
91
+ if (!ok) {
92
+ // 服务端篡改/替换 wrap,拒绝
93
+ return null;
94
+ }
95
+ }
96
+ }
97
+ else {
98
+ return null;
99
+ }
100
+ // 3. wrap_salt = SHA256(canonical_aad || sender_session_pk_der || suite)[:16]
101
+ const senderSessionPkDer = base64ToBytes(env.sender_session_pk);
102
+ const aadBytes = canonicalJson(env.aad);
103
+ const suiteStr = env.suite ?? SUITE_NAME;
104
+ const suiteBytes = encoder.encode(suiteStr);
105
+ const saltInput = new Uint8Array(aadBytes.length + senderSessionPkDer.length + suiteBytes.length);
106
+ saltInput.set(aadBytes, 0);
107
+ saltInput.set(senderSessionPkDer, aadBytes.length);
108
+ saltInput.set(suiteBytes, aadBytes.length + senderSessionPkDer.length);
109
+ const wrapSalt = (await sha256(saltInput)).subarray(0, 16);
110
+ // 4. compute wrap_key
111
+ const wrapKey = await computeWrapKey(row, selfIkPriv, selfSpkPriv, senderSessionPkDer, senderPubDer, wrapSalt);
112
+ // 5. decrypt master_key(wrapped_key = ciphertext(32B) + tag(16B) = 48B)
113
+ const wrapNonce = base64ToBytes(row[6]);
114
+ const wrappedKey = base64ToBytes(row[7]);
115
+ if (wrappedKey.length < 16) {
116
+ throw new Error(`wrapped_key too short: ${wrappedKey.length}`);
117
+ }
118
+ const wrappedCt = wrappedKey.subarray(0, wrappedKey.length - 16);
119
+ const wrappedTag = wrappedKey.subarray(wrappedKey.length - 16);
120
+ const masterKey = await aesGcmDecrypt(wrapKey, wrapNonce, wrappedCt, wrappedTag, new Uint8Array(0));
121
+ // 6. decrypt body
122
+ const msgNonce = base64ToBytes(env.nonce);
123
+ const ct = base64ToBytes(env.ciphertext);
124
+ const tag = base64ToBytes(env.tag);
125
+ const plaintext = await aesGcmDecrypt(masterKey, msgNonce, ct, tag, aadBytes);
126
+ // 7. 解析 payload
127
+ return JSON.parse(new TextDecoder().decode(plaintext));
128
+ }
129
+ async function verifySenderSignature(env, senderPubDer) {
130
+ const sig = base64ToBytes(env.sender_signature);
131
+ const ct = base64ToBytes(env.ciphertext);
132
+ const tag = base64ToBytes(env.tag);
133
+ const aadBytes = canonicalJson(env.aad);
134
+ const digestBytes = hexToBytes(env.recipients_digest);
135
+ const signInput = new Uint8Array(ct.length + tag.length + aadBytes.length + digestBytes.length);
136
+ let pos = 0;
137
+ signInput.set(ct, pos);
138
+ pos += ct.length;
139
+ signInput.set(tag, pos);
140
+ pos += tag.length;
141
+ signInput.set(aadBytes, pos);
142
+ pos += aadBytes.length;
143
+ signInput.set(digestBytes, pos);
144
+ return ecdsaVerifyRaw(senderPubDer, sig, signInput);
145
+ }
146
+ function findMyRow(recipients, selfAid, selfDeviceId) {
147
+ for (const row of recipients) {
148
+ if (row[0] === selfAid && row[1] === selfDeviceId)
149
+ return row;
150
+ }
151
+ return null;
152
+ }
153
+ async function computeWrapKey(row, selfIkPriv, selfSpkPriv, senderSessionPkDer, senderMasterPkDer, salt) {
154
+ const spkId = row[5];
155
+ if (spkId && selfSpkPriv) {
156
+ // 3DH 接收方路径
157
+ // dh1 = ECDH(self_ik_priv, sender_session_pk)
158
+ // dh2 = ECDH(self_spk_priv, sender_master_pk)
159
+ // dh3 = ECDH(self_spk_priv, sender_session_pk)
160
+ const dh1 = await ecdhComputeShared(selfIkPriv, senderSessionPkDer);
161
+ const dh2 = await ecdhComputeShared(selfSpkPriv, senderMasterPkDer);
162
+ const dh3 = await ecdhComputeShared(selfSpkPriv, senderSessionPkDer);
163
+ if (dh1.length !== 32 || dh2.length !== 32 || dh3.length !== 32) {
164
+ throw new Error(`3DH expected 32B shares, got dh1=${dh1.length} dh2=${dh2.length} dh3=${dh3.length}`);
165
+ }
166
+ const ikm = new Uint8Array(96);
167
+ ikm.set(dh1, 0);
168
+ ikm.set(dh2, 32);
169
+ ikm.set(dh3, 64);
170
+ return hkdfSha256(ikm, salt, INFO_3DH, 32);
171
+ }
172
+ // 1DH 接收方路径
173
+ const dh1 = await ecdhComputeShared(selfIkPriv, senderSessionPkDer);
174
+ return hkdfSha256(dh1, salt, INFO_1DH, 32);
175
+ }
176
+ //# sourceMappingURL=decrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../src/v2/e2ee/decrypt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type Sender, type Target, type EncryptOptions, type StateCommitmentAAD } from './types';
2
+ /**
3
+ * 构造完整的 V2 Group 加密 envelope。
4
+ *
5
+ * @param sender 发送方身份
6
+ * @param groupId 群 ID
7
+ * @param epoch 当前加密 epoch
8
+ * @param targets 所有接收设备列表
9
+ * @param payload 业务 payload(将被加密)
10
+ * @param opts 可选参数(messageId / timestamp)
11
+ * @param stateCommitment 绑定到 AAD 的 state 信息;缺省 → sv=0 占位
12
+ */
13
+ export declare function encryptGroupMessage(sender: Sender, groupId: string, epoch: number, targets: Target[], payload: Record<string, unknown>, opts?: EncryptOptions, stateCommitment?: Partial<StateCommitmentAAD>): Promise<Record<string, unknown>>;
14
+ //# sourceMappingURL=encrypt-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt-group.d.ts","sourceRoot":"","sources":["../../../src/v2/e2ee/encrypt-group.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAExB,MAAM,SAAS,CAAC;AAwDjB;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,GAAE,cAAmB,EACzB,eAAe,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiHlC"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * AUN E2EE V2: Group 加密引擎(浏览器版,async)
3
+ *
4
+ * 构造完整的 e2ee.group_encrypted envelope。纯计算,无 IO。
5
+ * 与 P2P 引擎同构,差异在 AAD(含 group_id/epoch/state_commitment)。
6
+ *
7
+ * 参考实现: python/src/aun_core/v2/e2ee/encrypt_group.py
8
+ */
9
+ import { canonicalJson } from '../crypto/canonical';
10
+ import { ecdsaSignRaw } from '../crypto/ecdsa';
11
+ import { aesGcmEncrypt } from '../crypto/aead';
12
+ import { generateP256Keypair } from '../crypto/ecdh';
13
+ import { compute3DHWrap, compute1DHWrap } from '../crypto/dh-path';
14
+ import { sortRecipients, computeRecipientsDigest } from '../crypto/recipients';
15
+ import { SUITE_NAME, } from './types';
16
+ import { withMetadataAuth, PROTECTED_HEADERS_DOMAIN, PROTECTED_CONTEXT_DOMAIN, } from './metadata-auth';
17
+ import { normalizeProtectedHeaders } from './encrypt-p2p';
18
+ const encoder = new TextEncoder();
19
+ async function sha256(data) {
20
+ const buf = await crypto.subtle.digest('SHA-256', data.slice().buffer);
21
+ return new Uint8Array(buf);
22
+ }
23
+ function bytesToBase64(b) {
24
+ let bin = '';
25
+ for (let i = 0; i < b.length; i++)
26
+ bin += String.fromCharCode(b[i]);
27
+ return btoa(bin);
28
+ }
29
+ function bytesToHex(b) {
30
+ let s = '';
31
+ for (let i = 0; i < b.length; i++)
32
+ s += b[i].toString(16).padStart(2, '0');
33
+ return s;
34
+ }
35
+ function hexToBytes(s) {
36
+ if (s.length % 2 !== 0)
37
+ throw new Error('hex length must be even');
38
+ const out = new Uint8Array(s.length / 2);
39
+ for (let i = 0; i < out.length; i++) {
40
+ const hi = parseInt(s.charAt(i * 2), 16);
41
+ const lo = parseInt(s.charAt(i * 2 + 1), 16);
42
+ if (Number.isNaN(hi) || Number.isNaN(lo))
43
+ throw new Error('invalid hex char');
44
+ out[i] = (hi << 4) | lo;
45
+ }
46
+ return out;
47
+ }
48
+ function uuid4Hex() {
49
+ if (typeof crypto.randomUUID === 'function') {
50
+ return crypto.randomUUID().replace(/-/g, '');
51
+ }
52
+ const b = new Uint8Array(16);
53
+ crypto.getRandomValues(b);
54
+ b[6] = (b[6] & 0x0f) | 0x40;
55
+ b[8] = (b[8] & 0x3f) | 0x80;
56
+ return bytesToHex(b);
57
+ }
58
+ function randomBytes(n) {
59
+ const b = new Uint8Array(n);
60
+ crypto.getRandomValues(b);
61
+ return b;
62
+ }
63
+ /**
64
+ * 构造完整的 V2 Group 加密 envelope。
65
+ *
66
+ * @param sender 发送方身份
67
+ * @param groupId 群 ID
68
+ * @param epoch 当前加密 epoch
69
+ * @param targets 所有接收设备列表
70
+ * @param payload 业务 payload(将被加密)
71
+ * @param opts 可选参数(messageId / timestamp)
72
+ * @param stateCommitment 绑定到 AAD 的 state 信息;缺省 → sv=0 占位
73
+ */
74
+ export async function encryptGroupMessage(sender, groupId, epoch, targets, payload, opts = {}, stateCommitment) {
75
+ const masterKey = randomBytes(32);
76
+ const msgNonce = randomBytes(12);
77
+ const messageId = opts.messageId ?? `m-${uuid4Hex()}`;
78
+ const timestamp = opts.timestamp ?? Date.now();
79
+ const protocolSet = new Set();
80
+ for (const t of targets) {
81
+ if (t.spkPkDer
82
+ && (t.keySource === 'peer_device_prekey' || t.keySource === 'group_device_prekey')) {
83
+ protocolSet.add('3DH');
84
+ }
85
+ else {
86
+ protocolSet.add('1DH');
87
+ }
88
+ }
89
+ const wrapProtocolStr = protocolSet.size > 0 ? [...protocolSet].sort().join('+') : '1DH';
90
+ const sc = stateCommitment ?? {};
91
+ const stateCommitmentAad = {
92
+ state_version: Math.trunc(Number(sc.state_version ?? 0)) || 0,
93
+ state_hash: String(sc.state_hash ?? ''),
94
+ state_chain: String(sc.state_chain ?? ''),
95
+ };
96
+ const aad = {
97
+ from: sender.aid,
98
+ from_device: sender.deviceId,
99
+ group_id: groupId,
100
+ epoch,
101
+ message_id: messageId,
102
+ timestamp,
103
+ suite: SUITE_NAME,
104
+ wrap_protocol: wrapProtocolStr,
105
+ state_commitment: stateCommitmentAad,
106
+ };
107
+ const plaintextBytes = canonicalJson(payload);
108
+ const aadBytes = canonicalJson(aad);
109
+ const { ciphertext, tag } = await aesGcmEncrypt(masterKey, msgNonce, plaintextBytes, aadBytes);
110
+ const [senderSessionPriv, senderSessionPubDer] = await generateP256Keypair();
111
+ const suiteBytes = encoder.encode(SUITE_NAME);
112
+ const saltInput = new Uint8Array(aadBytes.length + senderSessionPubDer.length + suiteBytes.length);
113
+ saltInput.set(aadBytes, 0);
114
+ saltInput.set(senderSessionPubDer, aadBytes.length);
115
+ saltInput.set(suiteBytes, aadBytes.length + senderSessionPubDer.length);
116
+ const wrapSalt = (await sha256(saltInput)).subarray(0, 16);
117
+ const recipientsRows = [];
118
+ for (const target of targets) {
119
+ recipientsRows.push(await wrapForRecipient(target, masterKey, senderSessionPriv, sender.ikPriv, wrapSalt));
120
+ }
121
+ const sortedRows = sortRecipients(recipientsRows);
122
+ const digestHex = await computeRecipientsDigest(sortedRows);
123
+ const digestBytes = hexToBytes(digestHex);
124
+ const signInput = new Uint8Array(ciphertext.length + tag.length + aadBytes.length + digestBytes.length);
125
+ let pos = 0;
126
+ signInput.set(ciphertext, pos);
127
+ pos += ciphertext.length;
128
+ signInput.set(tag, pos);
129
+ pos += tag.length;
130
+ signInput.set(aadBytes, pos);
131
+ pos += aadBytes.length;
132
+ signInput.set(digestBytes, pos);
133
+ const senderSig = await ecdsaSignRaw(sender.ikPriv, signInput);
134
+ const certFpHash = bytesToHex(await sha256(sender.ikPubDer));
135
+ const certFp = `sha256:${certFpHash.substring(0, 16)}`;
136
+ const envelope = {
137
+ type: 'e2ee.group_encrypted',
138
+ version: 'v2',
139
+ suite: SUITE_NAME,
140
+ msg_type: 'original',
141
+ group_id: groupId,
142
+ epoch,
143
+ t_send: timestamp,
144
+ t_server: null,
145
+ nonce: bytesToBase64(msgNonce),
146
+ ciphertext: bytesToBase64(ciphertext),
147
+ tag: bytesToBase64(tag),
148
+ sender_signature: bytesToBase64(senderSig),
149
+ sender_cert_fingerprint: certFp,
150
+ sender_session_pk: bytesToBase64(senderSessionPubDer),
151
+ recipients_digest: digestHex,
152
+ recipients: sortedRows,
153
+ aad,
154
+ };
155
+ // protected_headers / context:HMAC 签名(与 V1 对齐),不进 AAD
156
+ // payload_type 自动注入 + value 转 string(与 Python _normalize_headers 对齐)
157
+ const { context } = opts;
158
+ const normalizedHeaders = normalizeProtectedHeaders(opts.protectedHeaders, payload);
159
+ if (Object.keys(normalizedHeaders).length > 0) {
160
+ envelope.protected_headers = await withMetadataAuth(normalizedHeaders, masterKey, PROTECTED_HEADERS_DOMAIN);
161
+ }
162
+ if (context && typeof context === 'object' && Object.keys(context).length > 0) {
163
+ envelope.context = await withMetadataAuth(context, masterKey, PROTECTED_CONTEXT_DOMAIN);
164
+ }
165
+ return envelope;
166
+ }
167
+ async function wrapForRecipient(target, masterKey, senderSessionPriv, senderMasterPriv, wrapSalt) {
168
+ const role = target.role ?? 'member';
169
+ const keySource = target.keySource ?? 'aid_master';
170
+ const fpHash = bytesToHex(await sha256(target.ikPkDer));
171
+ const fp = `sha256:${fpHash.substring(0, 16)}`;
172
+ const wrapNonce = randomBytes(12);
173
+ let wrapKey;
174
+ if (target.spkPkDer
175
+ && (keySource === 'peer_device_prekey' || keySource === 'group_device_prekey')) {
176
+ wrapKey = await compute3DHWrap(senderSessionPriv, senderMasterPriv, target.ikPkDer, target.spkPkDer, wrapSalt);
177
+ }
178
+ else {
179
+ wrapKey = await compute1DHWrap(senderSessionPriv, target.ikPkDer, wrapSalt);
180
+ }
181
+ const { ciphertext: wrappedCt, tag: wrappedTag } = await aesGcmEncrypt(wrapKey, wrapNonce, masterKey, new Uint8Array(0));
182
+ const wrappedKey = new Uint8Array(wrappedCt.length + wrappedTag.length);
183
+ wrappedKey.set(wrappedCt, 0);
184
+ wrappedKey.set(wrappedTag, wrappedCt.length);
185
+ return [
186
+ target.aid,
187
+ target.deviceId,
188
+ role,
189
+ keySource,
190
+ fp,
191
+ target.spkId ?? '',
192
+ bytesToBase64(wrapNonce),
193
+ bytesToBase64(wrappedKey),
194
+ ];
195
+ }
196
+ //# sourceMappingURL=encrypt-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt-group.js","sourceRoot":"","sources":["../../../src/v2/e2ee/encrypt-group.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type Sender, type TargetSet, type EncryptOptions } from './types';
2
+ /**
3
+ * 构造完整的 V2 P2P 加密 envelope。
4
+ *
5
+ * 与 Python `encrypt_p2p_message` 字节级对齐(除了随机字段:master_key/msg_nonce/
6
+ * sender_session keypair/wrap_nonce/message_id/timestamp,以及由此影响的 ciphertext/
7
+ * tag/recipients_digest/sender_signature)。
8
+ */
9
+ export declare function encryptP2PMessage(sender: Sender, targetSet: TargetSet, payload: Record<string, unknown>, opts?: EncryptOptions): Promise<Record<string, unknown>>;
10
+ /**
11
+ * 规范化 protected_headers:value 转 string + 自动注入 payload_type。
12
+ * 与 Python `_normalize_headers` 对齐。
13
+ */
14
+ export declare function normalizeProtectedHeaders(headers: Record<string, unknown> | undefined | null, payload: Record<string, unknown>): Record<string, string>;
15
+ //# sourceMappingURL=encrypt-p2p.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt-p2p.d.ts","sourceRoot":"","sources":["../../../src/v2/e2ee/encrypt-p2p.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,MAAM,EAEX,KAAK,SAAS,EACd,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAC;AAyDjB;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA+IlC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,EACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB"}