@anycon/protocol 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +146 -0
  3. package/README.zh-CN.md +118 -0
  4. package/dist/constants.d.ts +151 -0
  5. package/dist/constants.d.ts.map +1 -0
  6. package/dist/constants.js +159 -0
  7. package/dist/constants.js.map +1 -0
  8. package/dist/crypto.d.ts +202 -0
  9. package/dist/crypto.d.ts.map +1 -0
  10. package/dist/crypto.js +218 -0
  11. package/dist/crypto.js.map +1 -0
  12. package/dist/envelope.d.ts +105 -0
  13. package/dist/envelope.d.ts.map +1 -0
  14. package/dist/envelope.js +390 -0
  15. package/dist/envelope.js.map +1 -0
  16. package/dist/errors.d.ts +5 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +5 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/generated.d.ts +2007 -0
  21. package/dist/generated.d.ts.map +1 -0
  22. package/dist/generated.js +4 -0
  23. package/dist/generated.js.map +1 -0
  24. package/dist/index.d.ts +17 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +16 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/method-types.d.ts +293 -0
  29. package/dist/method-types.d.ts.map +1 -0
  30. package/dist/method-types.js +2 -0
  31. package/dist/method-types.js.map +1 -0
  32. package/dist/rpc.d.ts +70 -0
  33. package/dist/rpc.d.ts.map +1 -0
  34. package/dist/rpc.js +310 -0
  35. package/dist/rpc.js.map +1 -0
  36. package/package.json +62 -0
  37. package/src/constants.ts +173 -0
  38. package/src/crypto.ts +427 -0
  39. package/src/envelope.ts +469 -0
  40. package/src/errors.ts +4 -0
  41. package/src/generated.ts +2094 -0
  42. package/src/index.ts +18 -0
  43. package/src/method-types.ts +183 -0
  44. package/src/rpc.ts +377 -0
  45. package/wasm/THIRD-PARTY-LICENSES.txt +1957 -0
  46. package/wasm/anycon_crypto.d.ts +248 -0
  47. package/wasm/anycon_crypto.js +1250 -0
  48. package/wasm/anycon_crypto_bg.wasm +0 -0
  49. package/wasm/anycon_crypto_bg.wasm.d.ts +48 -0
@@ -0,0 +1,248 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /**
5
+ * 一方的 CPace 状态。新设备用 `"initiator"`。`finish` 会消费本对象(之后再碰会抛 null pointer 错误)。
6
+ */
7
+ export class WasmCpace {
8
+ free(): void;
9
+ [Symbol.dispose](): void;
10
+ /**
11
+ * 用对方的份额得到 32 字节 PSK。份额不合法时抛 `invalid key`。
12
+ */
13
+ finish(role: string, peerShare: Uint8Array): Uint8Array;
14
+ /**
15
+ * `prs`:口令的 `deriveEnrollPasswordPrs`,或规范化后 6 位码的 ASCII 字节;`ci`:`enrollChannelId`;`sid`:`enrollSid`。
16
+ */
17
+ constructor(prs: Uint8Array, ci: Uint8Array, sid: Uint8Array);
18
+ /**
19
+ * 自己的份额(32 字节),发给对方。
20
+ */
21
+ readonly share: Uint8Array;
22
+ }
23
+
24
+ /**
25
+ * 进行中的握手。
26
+ */
27
+ export class WasmHandshake {
28
+ private constructor();
29
+ free(): void;
30
+ [Symbol.dispose](): void;
31
+ /**
32
+ * 握手完成后换成传输通道。会消费本对象。
33
+ */
34
+ intoTransport(): WasmTransport;
35
+ isFinished(): boolean;
36
+ isMyTurn(): boolean;
37
+ /**
38
+ * 配对握手(XXpsk3)。joiner 传 `"initiator"`,host 传 `"responder"`。
39
+ */
40
+ static pairing(role: string, kp: WasmKeypair, psk: Uint8Array): WasmHandshake;
41
+ /**
42
+ * 读对方的握手消息,返回对方带的 payload。
43
+ */
44
+ read(message: Uint8Array): Uint8Array;
45
+ /**
46
+ * 重连握手(IK)。initiator 必须传 `remotePublic`;responder 不传(或传期望的 initiator 公钥做钉扎)。
47
+ */
48
+ static reconnect(role: string, kp: WasmKeypair, remotePublic?: Uint8Array | null): WasmHandshake;
49
+ /**
50
+ * 对方静态公钥;还不知道时是 `undefined`。
51
+ */
52
+ remotePublic(): Uint8Array | undefined;
53
+ /**
54
+ * 写下一条握手消息,返回要发给对方的字节。
55
+ */
56
+ write(payload: Uint8Array): Uint8Array;
57
+ }
58
+
59
+ /**
60
+ * X25519 静态密钥对。
61
+ */
62
+ export class WasmKeypair {
63
+ private constructor();
64
+ free(): void;
65
+ [Symbol.dispose](): void;
66
+ /**
67
+ * 由 32 字节私钥还原。
68
+ */
69
+ static fromSecret(secret: Uint8Array): WasmKeypair;
70
+ /**
71
+ * 用 `crypto.getRandomValues` 生成新密钥对。
72
+ */
73
+ static generate(): WasmKeypair;
74
+ readonly public: Uint8Array;
75
+ readonly secret: Uint8Array;
76
+ }
77
+
78
+ /**
79
+ * 一次 Argon2id 得到的 `matchId` + `psk`。用完 `.free()`(PSK 会被清零)。
80
+ */
81
+ export class WasmPairSecrets {
82
+ private constructor();
83
+ free(): void;
84
+ [Symbol.dispose](): void;
85
+ readonly matchId: string;
86
+ /**
87
+ * 32 字节 PSK 的拷贝,调用方用完 `fill(0)`。
88
+ */
89
+ readonly psk: Uint8Array;
90
+ }
91
+
92
+ /**
93
+ * 握手完成后的双向加密通道。
94
+ */
95
+ export class WasmTransport {
96
+ private constructor();
97
+ free(): void;
98
+ [Symbol.dispose](): void;
99
+ decrypt(ciphertext: Uint8Array): Uint8Array;
100
+ /**
101
+ * 加密任意长度明文;超过 65519 字节自动分片(`[u16 be 长度][密文]` 拼接)。
102
+ */
103
+ encrypt(plaintext: Uint8Array): Uint8Array;
104
+ remotePublic(): Uint8Array;
105
+ }
106
+
107
+ /**
108
+ * 节点口令 → CPace 的口令输入:`Argon2id(NFC(口令), salt)`,浏览器里约 0.5–1 s。`salt` 必须是 16 字节。
109
+ */
110
+ export function deriveEnrollPasswordPrs(password: string, salt: Uint8Array): Uint8Array;
111
+
112
+ /**
113
+ * 扫码接入的 PSK。`secret` 必须是 32 字节。
114
+ */
115
+ export function deriveEnrollScanPsk(secret: Uint8Array, nodeId: string): Uint8Array;
116
+
117
+ /**
118
+ * 短码 → hub 撮合用的 match id(一次完整 KDF)。
119
+ */
120
+ export function deriveMatchId(code: string): string;
121
+
122
+ /**
123
+ * 短码 → `{ matchId, psk }`,一次 KDF(Argon2id,64 MiB × 3 轮,浏览器里约 0.5–1 s)。
124
+ * 配对时用它,不要分别调 `deriveMatchId` 和 `derivePsk`(会算两次)。短码无效时抛 `invalid pair code`。
125
+ */
126
+ export function derivePairSecrets(code: string): WasmPairSecrets;
127
+
128
+ /**
129
+ * 短码 → 32 字节 PSK(一次完整 KDF)。短码无效时抛 `invalid pair code`。
130
+ */
131
+ export function derivePsk(code: string): Uint8Array;
132
+
133
+ /**
134
+ * CPace 信道标识。`method` 是 `"code"` 或 `"password"`。
135
+ */
136
+ export function enrollChannelId(nodeId: string, method: string): Uint8Array;
137
+
138
+ /**
139
+ * CPace 会话标识:新设备的 nonce ‖ daemon 的 nonce。
140
+ */
141
+ export function enrollSid(initiatorNonce: Uint8Array, responderNonce: Uint8Array): Uint8Array;
142
+
143
+ /**
144
+ * 公钥指纹,如 `3f:a2:…`(8 字节)。公钥必须是 32 字节。
145
+ */
146
+ export function fingerprint(_public: Uint8Array): string;
147
+
148
+ /**
149
+ * 16 字节随机数(`EnrollHello.nonce`)。
150
+ */
151
+ export function generateEnrollNonce(): Uint8Array;
152
+
153
+ /**
154
+ * 32 字节扫码密钥(放进二维码)。
155
+ */
156
+ export function generateEnrollSecret(): Uint8Array;
157
+
158
+ /**
159
+ * 生成 `XXXX-XXXX` 形式的 8 位短码。
160
+ */
161
+ export function generatePairCode(): string;
162
+
163
+ export function generatePairCodeLong(): string;
164
+
165
+ export function normalizeCode(code: string): string;
166
+
167
+ /**
168
+ * 接入码规范化:去掉空白和 `-`,必须是 6 个数字,否则抛 `invalid pair code`。
169
+ */
170
+ export function normalizeEnrollCode(code: string): string;
171
+
172
+ /**
173
+ * 节点口令校验(设置时用):NFC 之后至少 8 个字符,否则抛 `enroll password too short`。
174
+ */
175
+ export function validateEnrollPassword(password: string): void;
176
+
177
+ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
178
+
179
+ export interface InitOutput {
180
+ readonly memory: WebAssembly.Memory;
181
+ readonly __wbg_wasmcpace_free: (a: number, b: number) => void;
182
+ readonly __wbg_wasmhandshake_free: (a: number, b: number) => void;
183
+ readonly __wbg_wasmkeypair_free: (a: number, b: number) => void;
184
+ readonly __wbg_wasmpairsecrets_free: (a: number, b: number) => void;
185
+ readonly __wbg_wasmtransport_free: (a: number, b: number) => void;
186
+ readonly deriveEnrollPasswordPrs: (a: number, b: number, c: number, d: number, e: number) => void;
187
+ readonly deriveEnrollScanPsk: (a: number, b: number, c: number, d: number, e: number) => void;
188
+ readonly deriveMatchId: (a: number, b: number, c: number) => void;
189
+ readonly derivePairSecrets: (a: number, b: number, c: number) => void;
190
+ readonly derivePsk: (a: number, b: number, c: number) => void;
191
+ readonly enrollChannelId: (a: number, b: number, c: number, d: number, e: number) => void;
192
+ readonly enrollSid: (a: number, b: number, c: number, d: number, e: number) => void;
193
+ readonly fingerprint: (a: number, b: number, c: number) => void;
194
+ readonly generateEnrollNonce: (a: number) => void;
195
+ readonly generateEnrollSecret: (a: number) => void;
196
+ readonly generatePairCode: (a: number) => void;
197
+ readonly generatePairCodeLong: (a: number) => void;
198
+ readonly normalizeCode: (a: number, b: number, c: number) => void;
199
+ readonly normalizeEnrollCode: (a: number, b: number, c: number) => void;
200
+ readonly validateEnrollPassword: (a: number, b: number, c: number) => void;
201
+ readonly wasmcpace_finish: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
202
+ readonly wasmcpace_new: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
203
+ readonly wasmcpace_share: (a: number, b: number) => void;
204
+ readonly wasmhandshake_intoTransport: (a: number, b: number) => void;
205
+ readonly wasmhandshake_isFinished: (a: number) => number;
206
+ readonly wasmhandshake_isMyTurn: (a: number) => number;
207
+ readonly wasmhandshake_pairing: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
208
+ readonly wasmhandshake_read: (a: number, b: number, c: number, d: number) => void;
209
+ readonly wasmhandshake_reconnect: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
210
+ readonly wasmhandshake_remotePublic: (a: number, b: number) => void;
211
+ readonly wasmhandshake_write: (a: number, b: number, c: number, d: number) => void;
212
+ readonly wasmkeypair_fromSecret: (a: number, b: number, c: number) => void;
213
+ readonly wasmkeypair_generate: () => number;
214
+ readonly wasmkeypair_public: (a: number, b: number) => void;
215
+ readonly wasmkeypair_secret: (a: number, b: number) => void;
216
+ readonly wasmpairsecrets_matchId: (a: number, b: number) => void;
217
+ readonly wasmpairsecrets_psk: (a: number, b: number) => void;
218
+ readonly wasmtransport_decrypt: (a: number, b: number, c: number, d: number) => void;
219
+ readonly wasmtransport_encrypt: (a: number, b: number, c: number, d: number) => void;
220
+ readonly wasmtransport_remotePublic: (a: number, b: number) => void;
221
+ readonly __wbindgen_export: (a: number) => void;
222
+ readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
223
+ readonly __wbindgen_export2: (a: number, b: number) => number;
224
+ readonly __wbindgen_export3: (a: number, b: number, c: number, d: number) => number;
225
+ readonly __wbindgen_export4: (a: number, b: number, c: number) => void;
226
+ }
227
+
228
+ export type SyncInitInput = BufferSource | WebAssembly.Module;
229
+
230
+ /**
231
+ * Instantiates the given `module`, which can either be bytes or
232
+ * a precompiled `WebAssembly.Module`.
233
+ *
234
+ * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
235
+ *
236
+ * @returns {InitOutput}
237
+ */
238
+ export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
239
+
240
+ /**
241
+ * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
242
+ * for everything else, calls `WebAssembly.instantiate` directly.
243
+ *
244
+ * @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
245
+ *
246
+ * @returns {Promise<InitOutput>}
247
+ */
248
+ export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;