@kangwifi-pro/waliwa 1.1.3 → 1.1.4
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/core/noise.d.ts +47 -8
- package/dist/core/noise.d.ts.map +1 -1
- package/dist/core/noise.js +174 -24
- package/dist/core/noise.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/socket/ws-socket.d.ts +27 -19
- package/dist/socket/ws-socket.d.ts.map +1 -1
- package/dist/socket/ws-socket.js +72 -60
- package/dist/socket/ws-socket.js.map +1 -1
- package/package.json +1 -1
- package/src/core/noise.ts +184 -22
- package/src/index.ts +1 -1
- package/src/socket/ws-socket.ts +75 -60
package/dist/core/noise.d.ts
CHANGED
|
@@ -47,18 +47,48 @@ export declare class NoiseHandshake {
|
|
|
47
47
|
*/
|
|
48
48
|
writeEphemeral(): Uint8Array;
|
|
49
49
|
/**
|
|
50
|
-
* Step 2: Receive
|
|
51
|
-
*
|
|
50
|
+
* Step 2: Receive server response (protobuf-wrapped)
|
|
51
|
+
*
|
|
52
|
+
* Server sends: [protobuf]
|
|
53
|
+
* field 3 (length-delimited): contains
|
|
54
|
+
* field 1 (32 bytes): server ephemeral key
|
|
55
|
+
* field 2 (48 bytes): encrypted server static key (32 ct + 16 GCM tag)
|
|
56
|
+
* [remaining]: encrypted server payload
|
|
57
|
+
*
|
|
58
|
+
* @param payload The protobuf-wrapped server response (after stripping 3-byte length prefix)
|
|
52
59
|
*/
|
|
53
60
|
readResponderHandshake(payload: Uint8Array): {
|
|
54
61
|
plaintext: Uint8Array;
|
|
55
62
|
};
|
|
56
63
|
/**
|
|
57
|
-
*
|
|
58
|
-
* Returns
|
|
59
|
-
|
|
64
|
+
* Extract a protobuf field from a protobuf message
|
|
65
|
+
* Returns the field's value (for length-delimited fields)
|
|
66
|
+
*/
|
|
67
|
+
private extractProtobufField;
|
|
68
|
+
/**
|
|
69
|
+
* Find data after a specific field (for extracting remaining bytes)
|
|
70
|
+
*/
|
|
71
|
+
private findAfterField;
|
|
72
|
+
private readVarint;
|
|
73
|
+
private skipField;
|
|
74
|
+
/**
|
|
75
|
+
* Step 3: Send our static + SE + payload (protobuf-wrapped)
|
|
76
|
+
* Returns: protobuf field 4 containing [field 1: enc_static] [field 3: enc_payload]
|
|
77
|
+
* MUST be called AFTER readResponderHandshake
|
|
60
78
|
*/
|
|
61
79
|
writeClientResponse(payload: Uint8Array): Uint8Array;
|
|
80
|
+
/**
|
|
81
|
+
* Build protobuf field encoding (returns array of byte chunks)
|
|
82
|
+
*/
|
|
83
|
+
private buildProtobufField;
|
|
84
|
+
/**
|
|
85
|
+
* Encode a complete protobuf field (tag + length + value)
|
|
86
|
+
*/
|
|
87
|
+
private encodeProtobufField;
|
|
88
|
+
/**
|
|
89
|
+
* Encode a varint
|
|
90
|
+
*/
|
|
91
|
+
private encodeVarint;
|
|
62
92
|
/**
|
|
63
93
|
* Finalize handshake - split prk into send/recv keys
|
|
64
94
|
*/
|
|
@@ -84,9 +114,18 @@ export declare class NoiseHandshake {
|
|
|
84
114
|
*/
|
|
85
115
|
static encodeClientHello(ephemeralPub: Uint8Array, encryptedStatic: Uint8Array, encryptedPayload: Uint8Array): Uint8Array;
|
|
86
116
|
/**
|
|
87
|
-
* Build initial client hello -
|
|
88
|
-
*
|
|
89
|
-
*
|
|
117
|
+
* Build initial client hello - Message 1 of Noise XX
|
|
118
|
+
*
|
|
119
|
+
* WA Protocol: Wrap ephemeral in protobuf field 2:
|
|
120
|
+
* field 2 (length-delimited): contains
|
|
121
|
+
* field 1 (32 bytes): ephemeral public key
|
|
122
|
+
*
|
|
123
|
+
* Encoding: 12 22 0a 20 [32 bytes ephemeral]
|
|
124
|
+
* - 12 = field 2, wire type 2 (length-delimited)
|
|
125
|
+
* - 22 = length 34
|
|
126
|
+
* - 0a = field 1, wire type 2
|
|
127
|
+
* - 20 = length 32
|
|
128
|
+
* - [32 bytes] = ephemeral public key
|
|
90
129
|
*/
|
|
91
130
|
buildClientHello(): Uint8Array;
|
|
92
131
|
}
|
package/dist/core/noise.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/core/noise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAUL,OAAO,EAER,MAAM,aAAa,CAAC;AAyCrB,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;gBAEnB,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,GAAE,OAAc;IAe1D,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,MAAM;IAad;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;;OAGG;IACI,cAAc,IAAI,UAAU;IAQnC
|
|
1
|
+
{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/core/noise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAUL,OAAO,EAER,MAAM,aAAa,CAAC;AAyCrB,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;gBAEnB,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,GAAE,OAAc;IAe1D,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,MAAM;IAad;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;;OAGG;IACI,cAAc,IAAI,UAAU;IAQnC;;;;;;;;;;OAUG;IACI,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,UAAU,CAAA;KAAE;IAwD7E;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,SAAS;IAcjB;;;;OAIG;IACI,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAsB3D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACI,QAAQ,IAAI;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,UAAU,CAAA;KAAE;IAe/D;;OAEG;WACW,YAAY,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,UAAU,GACpB,UAAU;IAUb;;OAEG;WACW,YAAY,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,UAAU;IAcb;;OAEG;WACW,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAkB1D;;;OAGG;WACW,iBAAiB,CAC7B,YAAY,EAAE,UAAU,EACxB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,UAAU,GAC3B,UAAU;IAIb;;;;;;;;;;;;;OAaG;IACI,gBAAgB,IAAI,UAAU;CAUtC;AAID;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;gBAEpB,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU;IAKpD,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU;IAM1C,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU;IAM3C,KAAK;CAIN;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,CA4BhF"}
|
package/dist/core/noise.js
CHANGED
|
@@ -125,42 +125,146 @@ class NoiseHandshake {
|
|
|
125
125
|
return e.public;
|
|
126
126
|
}
|
|
127
127
|
/**
|
|
128
|
-
* Step 2: Receive
|
|
129
|
-
*
|
|
128
|
+
* Step 2: Receive server response (protobuf-wrapped)
|
|
129
|
+
*
|
|
130
|
+
* Server sends: [protobuf]
|
|
131
|
+
* field 3 (length-delimited): contains
|
|
132
|
+
* field 1 (32 bytes): server ephemeral key
|
|
133
|
+
* field 2 (48 bytes): encrypted server static key (32 ct + 16 GCM tag)
|
|
134
|
+
* [remaining]: encrypted server payload
|
|
135
|
+
*
|
|
136
|
+
* @param payload The protobuf-wrapped server response (after stripping 3-byte length prefix)
|
|
130
137
|
*/
|
|
131
138
|
readResponderHandshake(payload) {
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
139
|
+
// Parse outer protobuf: field 3 contains the handshake data
|
|
140
|
+
const innerData = this.extractProtobufField(payload, 3);
|
|
141
|
+
if (!innerData || innerData.length < 80) {
|
|
142
|
+
throw new Error(`Invalid server handshake: field 3 too short (${innerData?.length ?? 0} bytes)`);
|
|
143
|
+
}
|
|
144
|
+
// Parse inner protobuf
|
|
145
|
+
// field 1: server ephemeral (32 bytes)
|
|
146
|
+
const serverEphemeral = this.extractProtobufField(innerData, 1);
|
|
147
|
+
if (!serverEphemeral || serverEphemeral.length !== 32) {
|
|
148
|
+
throw new Error(`Invalid server ephemeral: ${serverEphemeral?.length ?? 0} bytes (expected 32)`);
|
|
149
|
+
}
|
|
150
|
+
// field 2: encrypted server static (48 bytes = 32 ct + 16 tag)
|
|
151
|
+
const encryptedStatic = this.extractProtobufField(innerData, 2);
|
|
152
|
+
if (!encryptedStatic || encryptedStatic.length !== 48) {
|
|
153
|
+
throw new Error(`Invalid encrypted static: ${encryptedStatic?.length ?? 0} bytes (expected 48)`);
|
|
154
|
+
}
|
|
155
|
+
// === Process Noise handshake ===
|
|
156
|
+
const re = serverEphemeral;
|
|
136
157
|
this.state.re = re;
|
|
137
158
|
this.mixHash(re);
|
|
138
159
|
this.mixKey(re);
|
|
139
160
|
// Ephemeral-ephemeral DH
|
|
140
161
|
const ee = (0, crypto_js_1.curveSharedSecret)(this.state.e.private, re);
|
|
141
162
|
this.mixKey(ee);
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
throw new Error('Handshake too short for static');
|
|
145
|
-
const encryptedStatic = payload.subarray(32, 80);
|
|
146
|
-
const remoteStatic = this.decryptWithHash(encryptedStatic); // 32 bytes
|
|
163
|
+
// Decrypt server static
|
|
164
|
+
const remoteStatic = this.decryptWithHash(encryptedStatic);
|
|
147
165
|
this.state.rs = remoteStatic;
|
|
148
166
|
this.mixHash(remoteStatic);
|
|
149
167
|
// Ephemeral-static DH
|
|
150
168
|
const es = (0, crypto_js_1.curveSharedSecret)(this.state.e.private, remoteStatic);
|
|
151
169
|
this.mixKey(es);
|
|
152
|
-
//
|
|
153
|
-
const encryptedPayload = payload.subarray(80);
|
|
170
|
+
// Find remaining payload after field 2 (encrypted payload)
|
|
154
171
|
let plaintext = new Uint8Array(0);
|
|
155
|
-
|
|
156
|
-
|
|
172
|
+
const afterEphemeral = this.findAfterField(innerData, 1);
|
|
173
|
+
const afterStatic = this.findAfterField(afterEphemeral, 2);
|
|
174
|
+
if (afterStatic && afterStatic.length > 0) {
|
|
175
|
+
// Try to extract field 3 (encrypted payload) if present
|
|
176
|
+
const encPayload = this.extractProtobufField(afterStatic, 3)
|
|
177
|
+
?? this.extractProtobufField(afterStatic, 5)
|
|
178
|
+
?? afterStatic; // fallback: treat all remaining as raw payload
|
|
179
|
+
if (encPayload.length > 0) {
|
|
180
|
+
plaintext = this.decryptWithHash(encPayload);
|
|
181
|
+
}
|
|
157
182
|
}
|
|
158
183
|
return { plaintext };
|
|
159
184
|
}
|
|
160
185
|
/**
|
|
161
|
-
*
|
|
162
|
-
* Returns
|
|
163
|
-
|
|
186
|
+
* Extract a protobuf field from a protobuf message
|
|
187
|
+
* Returns the field's value (for length-delimited fields)
|
|
188
|
+
*/
|
|
189
|
+
extractProtobufField(data, fieldNumber) {
|
|
190
|
+
let pos = 0;
|
|
191
|
+
while (pos < data.length) {
|
|
192
|
+
const startPos = pos;
|
|
193
|
+
const tag = this.readVarint(data, pos);
|
|
194
|
+
pos = tag.nextPos;
|
|
195
|
+
const fn = tag.value >> 3;
|
|
196
|
+
const wireType = tag.value & 7;
|
|
197
|
+
if (fn === fieldNumber && wireType === 2) {
|
|
198
|
+
// Length-delimited field - this is our target
|
|
199
|
+
const len = this.readVarint(data, pos);
|
|
200
|
+
pos = len.nextPos;
|
|
201
|
+
return data.subarray(pos, pos + len.value);
|
|
202
|
+
}
|
|
203
|
+
// Skip this field
|
|
204
|
+
pos = this.skipField(data, pos, wireType);
|
|
205
|
+
if (pos <= startPos)
|
|
206
|
+
break; // safety check
|
|
207
|
+
}
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Find data after a specific field (for extracting remaining bytes)
|
|
212
|
+
*/
|
|
213
|
+
findAfterField(data, fieldNumber) {
|
|
214
|
+
let pos = 0;
|
|
215
|
+
while (pos < data.length) {
|
|
216
|
+
const startPos = pos;
|
|
217
|
+
const tag = this.readVarint(data, pos);
|
|
218
|
+
pos = tag.nextPos;
|
|
219
|
+
const fn = tag.value >> 3;
|
|
220
|
+
const wireType = tag.value & 7;
|
|
221
|
+
if (fn === fieldNumber && wireType === 2) {
|
|
222
|
+
const len = this.readVarint(data, pos);
|
|
223
|
+
pos = len.nextPos;
|
|
224
|
+
const afterField = pos + len.value;
|
|
225
|
+
return data.subarray(afterField);
|
|
226
|
+
}
|
|
227
|
+
pos = this.skipField(data, pos, wireType);
|
|
228
|
+
if (pos <= startPos)
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
return new Uint8Array(0);
|
|
232
|
+
}
|
|
233
|
+
readVarint(data, pos) {
|
|
234
|
+
let result = 0;
|
|
235
|
+
let shift = 0;
|
|
236
|
+
let p = pos;
|
|
237
|
+
while (p < data.length) {
|
|
238
|
+
const b = data[p++];
|
|
239
|
+
result |= (b & 0x7f) << shift;
|
|
240
|
+
if (!(b & 0x80))
|
|
241
|
+
break;
|
|
242
|
+
shift += 7;
|
|
243
|
+
if (shift > 35)
|
|
244
|
+
break; // safety
|
|
245
|
+
}
|
|
246
|
+
return { value: result, nextPos: p };
|
|
247
|
+
}
|
|
248
|
+
skipField(data, pos, wireType) {
|
|
249
|
+
if (wireType === 0) { // varint
|
|
250
|
+
return this.readVarint(data, pos).nextPos;
|
|
251
|
+
}
|
|
252
|
+
else if (wireType === 2) { // length-delimited
|
|
253
|
+
const len = this.readVarint(data, pos);
|
|
254
|
+
return len.nextPos + len.value;
|
|
255
|
+
}
|
|
256
|
+
else if (wireType === 5) { // 32-bit
|
|
257
|
+
return pos + 4;
|
|
258
|
+
}
|
|
259
|
+
else if (wireType === 1) { // 64-bit
|
|
260
|
+
return pos + 8;
|
|
261
|
+
}
|
|
262
|
+
return pos;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Step 3: Send our static + SE + payload (protobuf-wrapped)
|
|
266
|
+
* Returns: protobuf field 4 containing [field 1: enc_static] [field 3: enc_payload]
|
|
267
|
+
* MUST be called AFTER readResponderHandshake
|
|
164
268
|
*/
|
|
165
269
|
writeClientResponse(payload) {
|
|
166
270
|
// Encrypt our static key (32 bytes → 48 bytes with GCM tag)
|
|
@@ -173,7 +277,40 @@ class NoiseHandshake {
|
|
|
173
277
|
this.mixKey(se);
|
|
174
278
|
// Encrypt payload
|
|
175
279
|
const encryptedPayload = this.encryptWithHash(payload);
|
|
176
|
-
|
|
280
|
+
// Build inner protobuf: field 1 (enc static) + field 3 (enc payload)
|
|
281
|
+
const inner = this.buildProtobufField(1, encryptedStatic)
|
|
282
|
+
.concat(this.buildProtobufField(3, encryptedPayload));
|
|
283
|
+
// Wrap in outer protobuf field 4
|
|
284
|
+
const innerBytes = (0, crypto_js_1.concatBytes)(...inner);
|
|
285
|
+
return this.encodeProtobufField(4, innerBytes);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Build protobuf field encoding (returns array of byte chunks)
|
|
289
|
+
*/
|
|
290
|
+
buildProtobufField(fieldNumber, value) {
|
|
291
|
+
const tag = (fieldNumber << 3) | 2; // wire type 2 = length-delimited
|
|
292
|
+
return [this.encodeVarint(tag), this.encodeVarint(value.length), value];
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Encode a complete protobuf field (tag + length + value)
|
|
296
|
+
*/
|
|
297
|
+
encodeProtobufField(fieldNumber, value) {
|
|
298
|
+
const tag = (fieldNumber << 3) | 2;
|
|
299
|
+
const tagBytes = this.encodeVarint(tag);
|
|
300
|
+
const lenBytes = this.encodeVarint(value.length);
|
|
301
|
+
return (0, crypto_js_1.concatBytes)(tagBytes, lenBytes, value);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Encode a varint
|
|
305
|
+
*/
|
|
306
|
+
encodeVarint(value) {
|
|
307
|
+
const bytes = [];
|
|
308
|
+
while (value > 0x7f) {
|
|
309
|
+
bytes.push((value & 0x7f) | 0x80);
|
|
310
|
+
value >>= 7;
|
|
311
|
+
}
|
|
312
|
+
bytes.push(value & 0x7f);
|
|
313
|
+
return new Uint8Array(bytes);
|
|
177
314
|
}
|
|
178
315
|
/**
|
|
179
316
|
* Finalize handshake - split prk into send/recv keys
|
|
@@ -240,13 +377,26 @@ class NoiseHandshake {
|
|
|
240
377
|
return (0, crypto_js_1.concatBytes)(ephemeralPub, encryptedStatic, encryptedPayload);
|
|
241
378
|
}
|
|
242
379
|
/**
|
|
243
|
-
* Build initial client hello -
|
|
244
|
-
*
|
|
245
|
-
*
|
|
380
|
+
* Build initial client hello - Message 1 of Noise XX
|
|
381
|
+
*
|
|
382
|
+
* WA Protocol: Wrap ephemeral in protobuf field 2:
|
|
383
|
+
* field 2 (length-delimited): contains
|
|
384
|
+
* field 1 (32 bytes): ephemeral public key
|
|
385
|
+
*
|
|
386
|
+
* Encoding: 12 22 0a 20 [32 bytes ephemeral]
|
|
387
|
+
* - 12 = field 2, wire type 2 (length-delimited)
|
|
388
|
+
* - 22 = length 34
|
|
389
|
+
* - 0a = field 1, wire type 2
|
|
390
|
+
* - 20 = length 32
|
|
391
|
+
* - [32 bytes] = ephemeral public key
|
|
246
392
|
*/
|
|
247
393
|
buildClientHello() {
|
|
248
|
-
// Message 1: just the ephemeral public key
|
|
249
|
-
|
|
394
|
+
// Message 1: just the ephemeral public key, wrapped in protobuf
|
|
395
|
+
const ephemeral = this.writeEphemeral();
|
|
396
|
+
// Inner protobuf: field 1 = ephemeral (32 bytes)
|
|
397
|
+
const inner = this.encodeProtobufField(1, ephemeral);
|
|
398
|
+
// Outer protobuf: field 2 = inner protobuf
|
|
399
|
+
return this.encodeProtobufField(2, inner);
|
|
250
400
|
}
|
|
251
401
|
}
|
|
252
402
|
exports.NoiseHandshake = NoiseHandshake;
|
package/dist/core/noise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/core/noise.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/core/noise.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -53,7 +53,7 @@ export { RecoveryManager, mapCodeToReason, getActionDescription, getReasonDescri
|
|
|
53
53
|
export { ProfileManager, PrivacyManager, NewsletterManagerExtended, StatusExtended, ContactsManager, BulkOperations, MessageExtras, DisappearingManager, LiveLocationManager, AudioTranscriptionManager, StickerManager, TypingIndicatorTracker, LastSeenTracker, MessageStatusTracker, SelfMessageFilter, ChatStateManager, DeviceInfoTracker, GroupEventsTracker, parseGroupInviteInfo, createCommunityManagers, type ProfileInfo, type PrivacyValue, type PrivacyCategory, type PrivacySettings, type NewsletterMetadata, type NewsletterPost, type StatusView, type StatusInfo, type StatusPrivacyValue, type StatusPrivacy, type ContactInfo, type BulkSendItem, type BulkSendResult, type BulkSendOptions, type AlbumItem, type MessageInfo, type DisappearingTimer, type TIMER_TO_SECONDS, type LiveLocation, type TranscriptionResult, type TranscriptionProvider, type StickerMetadata, type StickerPack, type ChatState, type GroupInviteInfo, type CommunityManagers, type CommunityTrackers } from './community/index.js';
|
|
54
54
|
export { TIMER_TO_SECONDS as DISAPPEARING_TIMERS, SECONDS_TO_TIMER as SECONDS_TO_TIMER, detectLanguageFromText } from './community/index.js';
|
|
55
55
|
export * from './types/index.js';
|
|
56
|
-
export declare const VERSION = "1.1.
|
|
56
|
+
export declare const VERSION = "1.1.4";
|
|
57
57
|
export declare const LIBRARY_NAME = "waliwa";
|
|
58
58
|
export declare const DEFAULT_CONFIG: {
|
|
59
59
|
wsURL: string;
|
package/dist/index.js
CHANGED
|
@@ -252,7 +252,7 @@ Object.defineProperty(exports, "detectLanguageFromText", { enumerable: true, get
|
|
|
252
252
|
// ============== All Types ==============
|
|
253
253
|
__exportStar(require("./types/index.js"), exports);
|
|
254
254
|
// ============== Version ==============
|
|
255
|
-
exports.VERSION = '1.1.
|
|
255
|
+
exports.VERSION = '1.1.4';
|
|
256
256
|
exports.LIBRARY_NAME = 'waliwa';
|
|
257
257
|
// ============== Default Config ==============
|
|
258
258
|
exports.DEFAULT_CONFIG = {
|
|
@@ -51,33 +51,41 @@ export declare class WAWebSocket extends EventEmitter {
|
|
|
51
51
|
/**
|
|
52
52
|
* Start Noise Protocol XX handshake
|
|
53
53
|
*
|
|
54
|
-
* WA Frame Format
|
|
55
|
-
* [0x57, 0x41] (
|
|
56
|
-
* [
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* [
|
|
54
|
+
* WA Frame Format:
|
|
55
|
+
* Message 1: [0x57, 0x41, 0x06, 0x02] (4-byte WA header) + [3-byte length] + [protobuf(ephemeral)]
|
|
56
|
+
* Messages 2+: [3-byte length] + [raw Noise data]
|
|
57
|
+
*
|
|
58
|
+
* Protobuf wrapper for ephemeral (Message 1 only):
|
|
59
|
+
* 12 22 0a 20 [32 bytes ephemeral]
|
|
60
|
+
* - 12 22 = field 2, length 34
|
|
61
|
+
* - 0a 20 = field 1, length 32
|
|
62
|
+
* - [32 bytes] = ephemeral public key
|
|
60
63
|
*
|
|
61
64
|
* Noise XX Pattern (3 messages):
|
|
62
|
-
* 1. Client → Server: WA header + ephemeral
|
|
63
|
-
* 2. Server → Client:
|
|
64
|
-
* 3. Client → Server:
|
|
65
|
+
* 1. Client → Server: WA header + protobuf(ephemeral)
|
|
66
|
+
* 2. Server → Client: ephemeral + enc_static + enc_payload
|
|
67
|
+
* 3. Client → Server: enc_static + enc_payload
|
|
65
68
|
*/
|
|
66
69
|
private startHandshake;
|
|
67
70
|
/**
|
|
68
|
-
*
|
|
71
|
+
* Wrap handshake init message (Message 1)
|
|
72
|
+
* Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
|
|
69
73
|
*/
|
|
70
|
-
private
|
|
74
|
+
private wrapHandshakeInit;
|
|
71
75
|
/**
|
|
72
|
-
* Wrap
|
|
73
|
-
* Format: [
|
|
76
|
+
* Wrap post-handshake messages (Messages 2+)
|
|
77
|
+
* Format: [3-byte length] + [payload]
|
|
74
78
|
*/
|
|
75
|
-
private
|
|
79
|
+
private wrapPostHandshake;
|
|
76
80
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
81
|
+
* Unwrap incoming message (Messages 2+)
|
|
82
|
+
* Strip 3-byte length prefix
|
|
79
83
|
*/
|
|
80
|
-
private
|
|
84
|
+
private unwrapIncoming;
|
|
85
|
+
/**
|
|
86
|
+
* Hex dump utility for debugging
|
|
87
|
+
*/
|
|
88
|
+
private hexDump;
|
|
81
89
|
/**
|
|
82
90
|
* Wait for a single WebSocket message with timeout
|
|
83
91
|
*/
|
|
@@ -89,12 +97,12 @@ export declare class WAWebSocket extends EventEmitter {
|
|
|
89
97
|
private generatePairingKey;
|
|
90
98
|
/**
|
|
91
99
|
* Handle incoming message - decrypt jika handshake done
|
|
92
|
-
*
|
|
100
|
+
* Post-handshake messages use 3-byte length prefix
|
|
93
101
|
*/
|
|
94
102
|
private handleMessage;
|
|
95
103
|
/**
|
|
96
104
|
* Send encrypted frame ke server
|
|
97
|
-
*
|
|
105
|
+
* Post-handshake messages use 3-byte length prefix (no WA magic)
|
|
98
106
|
*/
|
|
99
107
|
send(plaintext: Uint8Array): void;
|
|
100
108
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-socket.d.ts","sourceRoot":"","sources":["../../src/socket/ws-socket.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAEL,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,SAAS,GACT,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IACvD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACtB;AAmCD,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAAa;gBAEnB,IAAI,EAAE,kBAAkB;IAYpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D9B
|
|
1
|
+
{"version":3,"file":"ws-socket.d.ts","sourceRoot":"","sources":["../../src/socket/ws-socket.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAEL,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,SAAS,GACT,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IACvD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACtB;AAmCD,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAAa;gBAEnB,IAAI,EAAE,kBAAkB;IAYpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D9B;;;;;;;;;;;;;;;;;OAiBG;YACW,cAAc;IA4D5B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,OAAO;IAOf;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,kBAAkB;IAK1B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;OAGG;IACH,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IASjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,KAAK,CAAC,IAAI,GAAE,MAAa,EAAE,MAAM,GAAE,MAAiB,GAAG,IAAI;IAa3D;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,IAAI;CAGzC;AAED,eAAe,WAAW,CAAC"}
|
package/dist/socket/ws-socket.js
CHANGED
|
@@ -134,60 +134,64 @@ class WAWebSocket extends events_1.EventEmitter {
|
|
|
134
134
|
/**
|
|
135
135
|
* Start Noise Protocol XX handshake
|
|
136
136
|
*
|
|
137
|
-
* WA Frame Format
|
|
138
|
-
* [0x57, 0x41] (
|
|
139
|
-
* [
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* [
|
|
137
|
+
* WA Frame Format:
|
|
138
|
+
* Message 1: [0x57, 0x41, 0x06, 0x02] (4-byte WA header) + [3-byte length] + [protobuf(ephemeral)]
|
|
139
|
+
* Messages 2+: [3-byte length] + [raw Noise data]
|
|
140
|
+
*
|
|
141
|
+
* Protobuf wrapper for ephemeral (Message 1 only):
|
|
142
|
+
* 12 22 0a 20 [32 bytes ephemeral]
|
|
143
|
+
* - 12 22 = field 2, length 34
|
|
144
|
+
* - 0a 20 = field 1, length 32
|
|
145
|
+
* - [32 bytes] = ephemeral public key
|
|
143
146
|
*
|
|
144
147
|
* Noise XX Pattern (3 messages):
|
|
145
|
-
* 1. Client → Server: WA header + ephemeral
|
|
146
|
-
* 2. Server → Client:
|
|
147
|
-
* 3. Client → Server:
|
|
148
|
+
* 1. Client → Server: WA header + protobuf(ephemeral)
|
|
149
|
+
* 2. Server → Client: ephemeral + enc_static + enc_payload
|
|
150
|
+
* 3. Client → Server: enc_static + enc_payload
|
|
148
151
|
*/
|
|
149
152
|
async startHandshake() {
|
|
150
153
|
this.handshake = new noise_js_1.NoiseHandshake(this.noiseKey, true);
|
|
151
|
-
// === Message 1: Send client ephemeral
|
|
152
|
-
|
|
153
|
-
const
|
|
154
|
+
// === Message 1: Send client ephemeral wrapped in protobuf ===
|
|
155
|
+
// buildClientHello() returns protobuf: 12 22 0a 20 [ephemeral]
|
|
156
|
+
const protobufEphemeral = this.handshake.buildClientHello();
|
|
157
|
+
// Build message 1: WA header (4 bytes) + 3-byte length + protobuf payload
|
|
158
|
+
const clientHello = this.wrapHandshakeInit(protobufEphemeral);
|
|
154
159
|
this.logger.info(`Sending client hello: ${this.hexDump(clientHello)}`);
|
|
155
160
|
this.ws.send(Buffer.from(clientHello));
|
|
156
161
|
// === Message 2: Wait for server response ===
|
|
157
|
-
// Server might send multiple frames - skip short/ack messages until we get the actual handshake
|
|
158
162
|
let serverPayload = null;
|
|
159
163
|
for (let attempt = 0; attempt < 5; attempt++) {
|
|
160
164
|
const serverData = await this.waitForMessage(15000);
|
|
161
165
|
const bytes = new Uint8Array(serverData);
|
|
162
166
|
this.logger.info(`Received msg ${attempt + 1} (${serverData.length} bytes): ${this.hexDump(bytes)}`);
|
|
163
|
-
// Skip short messages (acks,
|
|
164
|
-
if (serverData.length <
|
|
165
|
-
this.logger.info(`Short message
|
|
167
|
+
// Skip very short messages (acks, error frames)
|
|
168
|
+
if (serverData.length < 4) {
|
|
169
|
+
this.logger.info(`Short message, skipping (likely ack/error)`);
|
|
170
|
+
// Check if it's a close frame: 88 02 = WS close, 03 f3 = code 1011
|
|
171
|
+
if (serverData.length === 4 && bytes[0] === 0x88) {
|
|
172
|
+
const closeCode = (bytes[2] << 8) | bytes[3];
|
|
173
|
+
throw new Error(`Server rejected handshake (close code ${closeCode})`);
|
|
174
|
+
}
|
|
166
175
|
continue;
|
|
167
176
|
}
|
|
168
|
-
//
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
catch (err) {
|
|
175
|
-
// Maybe it's raw Noise data without WA header
|
|
176
|
-
this.logger.info(`WA unwrap failed: ${err.message}, trying as raw data`);
|
|
177
|
-
serverPayload = bytes;
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
177
|
+
// Messages 2+ use 3-byte length prefix (no WA magic)
|
|
178
|
+
// Strip the 3-byte length prefix, keep protobuf for NoiseHandshake to parse
|
|
179
|
+
serverPayload = bytes.subarray(3);
|
|
180
|
+
this.logger.info(`Stripped 3-byte length prefix, payload ${serverPayload.length} bytes`);
|
|
181
|
+
break;
|
|
180
182
|
}
|
|
181
|
-
if (!serverPayload || serverPayload.length <
|
|
183
|
+
if (!serverPayload || serverPayload.length < 80) {
|
|
182
184
|
throw new Error(`Invalid handshake response (payload ${serverPayload?.length ?? 0} bytes, need ≥ 80)`);
|
|
183
185
|
}
|
|
184
|
-
// Process server Noise data
|
|
186
|
+
// Process server Noise data (NoiseHandshake will parse protobuf internally)
|
|
185
187
|
this.handshake.readResponderHandshake(serverPayload);
|
|
186
188
|
this.logger.info('Server handshake response processed');
|
|
187
189
|
// === Message 3: Send encrypted static + payload ===
|
|
190
|
+
// writeClientResponse() returns protobuf (field 4 containing enc static + enc payload)
|
|
191
|
+
// Wrap with 3-byte length prefix only (no WA magic)
|
|
188
192
|
const clientPayload = this.buildClientPayload();
|
|
189
193
|
const clientResponse = this.handshake.writeClientResponse(clientPayload);
|
|
190
|
-
const wrappedResponse = this.
|
|
194
|
+
const wrappedResponse = this.wrapPostHandshake(clientResponse);
|
|
191
195
|
this.logger.info(`Sending client response (${wrappedResponse.length} bytes): ${this.hexDump(wrappedResponse)}`);
|
|
192
196
|
this.ws.send(Buffer.from(wrappedResponse));
|
|
193
197
|
// === Finalize: derive traffic keys ===
|
|
@@ -196,43 +200,51 @@ class WAWebSocket extends events_1.EventEmitter {
|
|
|
196
200
|
this.logger.info('Noise handshake completed, traffic keys derived');
|
|
197
201
|
}
|
|
198
202
|
/**
|
|
199
|
-
*
|
|
203
|
+
* Wrap handshake init message (Message 1)
|
|
204
|
+
* Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
|
|
200
205
|
*/
|
|
201
|
-
|
|
202
|
-
const slice = data.subarray(0, Math.min(data.length, maxBytes));
|
|
203
|
-
const hex = Array.from(slice).map(b => b.toString(16).padStart(2, '0')).join(' ');
|
|
204
|
-
const suffix = data.length > maxBytes ? ` ... (${data.length} bytes total)` : '';
|
|
205
|
-
return `[${hex}]${suffix}`;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Wrap payload dengan WA frame header
|
|
209
|
-
* Format: [0x57, 0x41, 0x01, version, len_hi, len_mid, len_lo] + payload
|
|
210
|
-
*/
|
|
211
|
-
wrapWAFrame(payload) {
|
|
206
|
+
wrapHandshakeInit(payload) {
|
|
212
207
|
const len = payload.length;
|
|
213
208
|
const header = new Uint8Array(7);
|
|
214
209
|
header[0] = 0x57; // 'W'
|
|
215
210
|
header[1] = 0x41; // 'A'
|
|
216
|
-
header[2] =
|
|
217
|
-
header[3] =
|
|
211
|
+
header[2] = 0x06; // version/flag
|
|
212
|
+
header[3] = 0x02; // version/flag
|
|
218
213
|
header[4] = (len >> 16) & 0xff;
|
|
219
214
|
header[5] = (len >> 8) & 0xff;
|
|
220
215
|
header[6] = len & 0xff;
|
|
221
216
|
return (0, crypto_js_1.concatBytes)(header, payload);
|
|
222
217
|
}
|
|
223
218
|
/**
|
|
224
|
-
*
|
|
225
|
-
*
|
|
219
|
+
* Wrap post-handshake messages (Messages 2+)
|
|
220
|
+
* Format: [3-byte length] + [payload]
|
|
226
221
|
*/
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
222
|
+
wrapPostHandshake(payload) {
|
|
223
|
+
const len = payload.length;
|
|
224
|
+
const header = new Uint8Array(3);
|
|
225
|
+
header[0] = (len >> 16) & 0xff;
|
|
226
|
+
header[1] = (len >> 8) & 0xff;
|
|
227
|
+
header[2] = len & 0xff;
|
|
228
|
+
return (0, crypto_js_1.concatBytes)(header, payload);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Unwrap incoming message (Messages 2+)
|
|
232
|
+
* Strip 3-byte length prefix
|
|
233
|
+
*/
|
|
234
|
+
unwrapIncoming(data) {
|
|
235
|
+
if (data.length < 3) {
|
|
236
|
+
throw new Error(`Message too short: ${data.length} bytes`);
|
|
234
237
|
}
|
|
235
|
-
return data.subarray(
|
|
238
|
+
return data.subarray(3);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Hex dump utility for debugging
|
|
242
|
+
*/
|
|
243
|
+
hexDump(data, maxBytes = 64) {
|
|
244
|
+
const slice = data.subarray(0, Math.min(data.length, maxBytes));
|
|
245
|
+
const hex = Array.from(slice).map(b => b.toString(16).padStart(2, '0')).join(' ');
|
|
246
|
+
const suffix = data.length > maxBytes ? ` ... (${data.length} bytes total)` : '';
|
|
247
|
+
return `[${hex}]${suffix}`;
|
|
236
248
|
}
|
|
237
249
|
/**
|
|
238
250
|
* Wait for a single WebSocket message with timeout
|
|
@@ -278,7 +290,7 @@ class WAWebSocket extends events_1.EventEmitter {
|
|
|
278
290
|
}
|
|
279
291
|
/**
|
|
280
292
|
* Handle incoming message - decrypt jika handshake done
|
|
281
|
-
*
|
|
293
|
+
* Post-handshake messages use 3-byte length prefix
|
|
282
294
|
*/
|
|
283
295
|
handleMessage(data) {
|
|
284
296
|
if (!this.isHandshakeDone) {
|
|
@@ -286,8 +298,8 @@ class WAWebSocket extends events_1.EventEmitter {
|
|
|
286
298
|
return;
|
|
287
299
|
}
|
|
288
300
|
try {
|
|
289
|
-
// Strip
|
|
290
|
-
const payload = this.
|
|
301
|
+
// Strip 3-byte length prefix then decrypt
|
|
302
|
+
const payload = this.unwrapIncoming(new Uint8Array(data));
|
|
291
303
|
const plaintext = this.trafficCipher.decrypt(payload);
|
|
292
304
|
this.emit('message', plaintext);
|
|
293
305
|
}
|
|
@@ -298,14 +310,14 @@ class WAWebSocket extends events_1.EventEmitter {
|
|
|
298
310
|
}
|
|
299
311
|
/**
|
|
300
312
|
* Send encrypted frame ke server
|
|
301
|
-
*
|
|
313
|
+
* Post-handshake messages use 3-byte length prefix (no WA magic)
|
|
302
314
|
*/
|
|
303
315
|
send(plaintext) {
|
|
304
316
|
if (!this.isHandshakeDone || !this.trafficCipher) {
|
|
305
317
|
throw new Error('Cannot send before handshake complete');
|
|
306
318
|
}
|
|
307
319
|
const ciphertext = this.trafficCipher.encrypt(plaintext);
|
|
308
|
-
const frame = this.
|
|
320
|
+
const frame = this.wrapPostHandshake(ciphertext);
|
|
309
321
|
this.ws.send(Buffer.from(frame));
|
|
310
322
|
}
|
|
311
323
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-socket.js","sourceRoot":"","sources":["../../src/socket/ws-socket.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ws-socket.js","sourceRoot":"","sources":["../../src/socket/ws-socket.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAEH,4CAA2B;AAC3B,mCAAsC;AACtC,+CAG0B;AAC1B,iDAAgE;AAEhE,kDAAkD;AAyBlD,MAAM,cAAc,GAAG,gCAAgC,CAAC;AACxD,MAAM,eAAe,GAA6B,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAE5E,qEAAqE;AAErE;;;GAGG;AACH,MAAM,UAAU;IACN,IAAI,GAAiB,EAAE,CAAC;IACf,OAAO,CAAS;IAChB,UAAU,CAAS;IAEpC,YAAY,aAAqB,IAAI,EAAE,cAAsB,EAAE;QAC7D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,GAAG,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,GAAe;QACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAED,6CAA6C;AAE7C,MAAa,WAAY,SAAQ,qBAAY;IACnC,EAAE,GAAqB,IAAI,CAAC;IAC5B,GAAG,CAAS;IACZ,MAAM,CAAW;IACjB,OAAO,CAA2B;IAClC,gBAAgB,CAAS;IACzB,mBAAmB,CAAS;IAC5B,QAAQ,CAA+C;IACvD,QAAQ,CAAY;IAEpB,aAAa,GAAyB,IAAI,CAAC;IAC3C,SAAS,GAA0B,IAAI,CAAC;IACxC,cAAc,GAA0B,IAAI,CAAC;IAC7C,YAAY,GAA0B,IAAI,CAAC;IAC3C,MAAM,GAAY,KAAK,CAAC;IACxB,eAAe,GAAY,KAAK,CAAC;IACjC,UAAU,GAAa,EAAE,CAAC;IAC1B,UAAU,CAAa;IAE/B,YAAY,IAAwB;QAClC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,wBAAY,EAAE,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC;QACvD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,GAAG,IAAI,YAAS,CAAC,IAAI,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,0BAA0B;gBAClC,OAAO,EAAE;oBACP,QAAQ,EAAE,0BAA0B;oBACpC,YAAY,EAAE,uGAAuG;iBACtH;gBACD,iBAAiB,EAAE,KAAK,EAAE,4CAA4C;gBACtE,UAAU,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,mBAAmB;aACjD,CAAC,CAAC;YAEH,kBAAkB;YAClB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAClC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC;oBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE1B,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC3B,CAAC;gBACD,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBACtD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;oBAClC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;gBACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC3B,CAAC;oBACD,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACK,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEzD,+DAA+D;QAC/D,+DAA+D;QAC/D,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAE5D,0EAA0E;QAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAExC,8CAA8C;QAC9C,IAAI,aAAa,GAAsB,IAAI,CAAC;QAC5C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,OAAO,GAAG,CAAC,KAAK,UAAU,CAAC,MAAM,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAErG,gDAAgD;YAChD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC/D,mEAAmE;gBACnE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACjD,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC7C,MAAM,IAAI,KAAK,CAAC,yCAAyC,SAAS,GAAG,CAAC,CAAC;gBACzE,CAAC;gBACD,SAAS;YACX,CAAC;YAED,qDAAqD;YACrD,4EAA4E;YAC5E,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,aAAa,CAAC,MAAM,QAAQ,CAAC,CAAC;YACzF,MAAM;QACR,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,uCAAuC,aAAa,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACzG,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAExD,qDAAqD;QACrD,uFAAuF;QACvF,oDAAoD;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,eAAe,CAAC,MAAM,YAAY,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAChH,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAE5C,wCAAwC;QACxC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,IAAI,wBAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACK,iBAAiB,CAAC,OAAmB;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM;QACxB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM;QACxB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,eAAe;QACjC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,eAAe;QACjC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;QACvB,OAAO,IAAA,uBAAW,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACK,iBAAiB,CAAC,OAAmB;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;QACvB,OAAO,IAAA,uBAAW,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,IAAgB;QACrC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,OAAO,CAAC,IAAgB,EAAE,WAAmB,EAAE;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,OAAO,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,SAAiB;QACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,EAAG,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACjC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAClD,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;gBAC/B,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,CAAC,EAAG,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAiB,EAAE,CAAC;QAE/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExC,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE9B,4BAA4B;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAEO,kBAAkB;QACxB,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC9D,OAAO,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,IAAY;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,iCAAiC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,aAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,SAAqB;QACxB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACxC,6DAA6D;gBAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC/B,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,kEAAkE;QAClE,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,IAAI;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;YAC7C,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;SACtC,CAAC;QACF,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe,IAAI,EAAE,SAAiB,QAAQ;QAClD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CACF;AA1XD,kCA0XC;AAED,kBAAe,WAAW,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kangwifi-pro/waliwa",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Lightweight, RAM-efficient WhatsApp library with hybrid protocol (WhatsApp Web MD + Mobile API), Multi-Branch SKDM Recovery system, Community features, and 9+ Baileys issue fixes. More complete than Baileys, lighter than ZapoJS.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
package/src/core/noise.ts
CHANGED
|
@@ -182,13 +182,38 @@ export class NoiseHandshake {
|
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
/**
|
|
185
|
-
* Step 2: Receive
|
|
186
|
-
*
|
|
185
|
+
* Step 2: Receive server response (protobuf-wrapped)
|
|
186
|
+
*
|
|
187
|
+
* Server sends: [protobuf]
|
|
188
|
+
* field 3 (length-delimited): contains
|
|
189
|
+
* field 1 (32 bytes): server ephemeral key
|
|
190
|
+
* field 2 (48 bytes): encrypted server static key (32 ct + 16 GCM tag)
|
|
191
|
+
* [remaining]: encrypted server payload
|
|
192
|
+
*
|
|
193
|
+
* @param payload The protobuf-wrapped server response (after stripping 3-byte length prefix)
|
|
187
194
|
*/
|
|
188
195
|
public readResponderHandshake(payload: Uint8Array): { plaintext: Uint8Array } {
|
|
189
|
-
//
|
|
190
|
-
|
|
191
|
-
|
|
196
|
+
// Parse outer protobuf: field 3 contains the handshake data
|
|
197
|
+
const innerData = this.extractProtobufField(payload, 3);
|
|
198
|
+
if (!innerData || innerData.length < 80) {
|
|
199
|
+
throw new Error(`Invalid server handshake: field 3 too short (${innerData?.length ?? 0} bytes)`);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Parse inner protobuf
|
|
203
|
+
// field 1: server ephemeral (32 bytes)
|
|
204
|
+
const serverEphemeral = this.extractProtobufField(innerData, 1);
|
|
205
|
+
if (!serverEphemeral || serverEphemeral.length !== 32) {
|
|
206
|
+
throw new Error(`Invalid server ephemeral: ${serverEphemeral?.length ?? 0} bytes (expected 32)`);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// field 2: encrypted server static (48 bytes = 32 ct + 16 tag)
|
|
210
|
+
const encryptedStatic = this.extractProtobufField(innerData, 2);
|
|
211
|
+
if (!encryptedStatic || encryptedStatic.length !== 48) {
|
|
212
|
+
throw new Error(`Invalid encrypted static: ${encryptedStatic?.length ?? 0} bytes (expected 48)`);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// === Process Noise handshake ===
|
|
216
|
+
const re = serverEphemeral;
|
|
192
217
|
this.state.re = re;
|
|
193
218
|
this.mixHash(re);
|
|
194
219
|
this.mixKey(re);
|
|
@@ -197,10 +222,8 @@ export class NoiseHandshake {
|
|
|
197
222
|
const ee = curveSharedSecret(this.state.e.private, re);
|
|
198
223
|
this.mixKey(ee);
|
|
199
224
|
|
|
200
|
-
//
|
|
201
|
-
|
|
202
|
-
const encryptedStatic = payload.subarray(32, 80);
|
|
203
|
-
const remoteStatic = this.decryptWithHash(encryptedStatic); // 32 bytes
|
|
225
|
+
// Decrypt server static
|
|
226
|
+
const remoteStatic = this.decryptWithHash(encryptedStatic);
|
|
204
227
|
this.state.rs = remoteStatic;
|
|
205
228
|
this.mixHash(remoteStatic);
|
|
206
229
|
|
|
@@ -208,20 +231,107 @@ export class NoiseHandshake {
|
|
|
208
231
|
const es = curveSharedSecret(this.state.e.private, remoteStatic);
|
|
209
232
|
this.mixKey(es);
|
|
210
233
|
|
|
211
|
-
//
|
|
212
|
-
const encryptedPayload = payload.subarray(80);
|
|
234
|
+
// Find remaining payload after field 2 (encrypted payload)
|
|
213
235
|
let plaintext: Uint8Array = new Uint8Array(0);
|
|
214
|
-
|
|
215
|
-
|
|
236
|
+
const afterEphemeral = this.findAfterField(innerData, 1);
|
|
237
|
+
const afterStatic = this.findAfterField(afterEphemeral, 2);
|
|
238
|
+
if (afterStatic && afterStatic.length > 0) {
|
|
239
|
+
// Try to extract field 3 (encrypted payload) if present
|
|
240
|
+
const encPayload = this.extractProtobufField(afterStatic, 3)
|
|
241
|
+
?? this.extractProtobufField(afterStatic, 5)
|
|
242
|
+
?? afterStatic; // fallback: treat all remaining as raw payload
|
|
243
|
+
if (encPayload.length > 0) {
|
|
244
|
+
plaintext = this.decryptWithHash(encPayload);
|
|
245
|
+
}
|
|
216
246
|
}
|
|
217
247
|
|
|
218
248
|
return { plaintext };
|
|
219
249
|
}
|
|
220
250
|
|
|
221
251
|
/**
|
|
222
|
-
*
|
|
223
|
-
* Returns
|
|
224
|
-
|
|
252
|
+
* Extract a protobuf field from a protobuf message
|
|
253
|
+
* Returns the field's value (for length-delimited fields)
|
|
254
|
+
*/
|
|
255
|
+
private extractProtobufField(data: Uint8Array, fieldNumber: number): Uint8Array | null {
|
|
256
|
+
let pos = 0;
|
|
257
|
+
while (pos < data.length) {
|
|
258
|
+
const startPos = pos;
|
|
259
|
+
const tag = this.readVarint(data, pos);
|
|
260
|
+
pos = tag.nextPos;
|
|
261
|
+
const fn = tag.value >> 3;
|
|
262
|
+
const wireType = tag.value & 7;
|
|
263
|
+
|
|
264
|
+
if (fn === fieldNumber && wireType === 2) {
|
|
265
|
+
// Length-delimited field - this is our target
|
|
266
|
+
const len = this.readVarint(data, pos);
|
|
267
|
+
pos = len.nextPos;
|
|
268
|
+
return data.subarray(pos, pos + len.value);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Skip this field
|
|
272
|
+
pos = this.skipField(data, pos, wireType);
|
|
273
|
+
if (pos <= startPos) break; // safety check
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Find data after a specific field (for extracting remaining bytes)
|
|
280
|
+
*/
|
|
281
|
+
private findAfterField(data: Uint8Array, fieldNumber: number): Uint8Array {
|
|
282
|
+
let pos = 0;
|
|
283
|
+
while (pos < data.length) {
|
|
284
|
+
const startPos = pos;
|
|
285
|
+
const tag = this.readVarint(data, pos);
|
|
286
|
+
pos = tag.nextPos;
|
|
287
|
+
const fn = tag.value >> 3;
|
|
288
|
+
const wireType = tag.value & 7;
|
|
289
|
+
|
|
290
|
+
if (fn === fieldNumber && wireType === 2) {
|
|
291
|
+
const len = this.readVarint(data, pos);
|
|
292
|
+
pos = len.nextPos;
|
|
293
|
+
const afterField = pos + len.value;
|
|
294
|
+
return data.subarray(afterField);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
pos = this.skipField(data, pos, wireType);
|
|
298
|
+
if (pos <= startPos) break;
|
|
299
|
+
}
|
|
300
|
+
return new Uint8Array(0);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
private readVarint(data: Uint8Array, pos: number): { value: number; nextPos: number } {
|
|
304
|
+
let result = 0;
|
|
305
|
+
let shift = 0;
|
|
306
|
+
let p = pos;
|
|
307
|
+
while (p < data.length) {
|
|
308
|
+
const b = data[p++];
|
|
309
|
+
result |= (b & 0x7f) << shift;
|
|
310
|
+
if (!(b & 0x80)) break;
|
|
311
|
+
shift += 7;
|
|
312
|
+
if (shift > 35) break; // safety
|
|
313
|
+
}
|
|
314
|
+
return { value: result, nextPos: p };
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
private skipField(data: Uint8Array, pos: number, wireType: number): number {
|
|
318
|
+
if (wireType === 0) { // varint
|
|
319
|
+
return this.readVarint(data, pos).nextPos;
|
|
320
|
+
} else if (wireType === 2) { // length-delimited
|
|
321
|
+
const len = this.readVarint(data, pos);
|
|
322
|
+
return len.nextPos + len.value;
|
|
323
|
+
} else if (wireType === 5) { // 32-bit
|
|
324
|
+
return pos + 4;
|
|
325
|
+
} else if (wireType === 1) { // 64-bit
|
|
326
|
+
return pos + 8;
|
|
327
|
+
}
|
|
328
|
+
return pos;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Step 3: Send our static + SE + payload (protobuf-wrapped)
|
|
333
|
+
* Returns: protobuf field 4 containing [field 1: enc_static] [field 3: enc_payload]
|
|
334
|
+
* MUST be called AFTER readResponderHandshake
|
|
225
335
|
*/
|
|
226
336
|
public writeClientResponse(payload: Uint8Array): Uint8Array {
|
|
227
337
|
// Encrypt our static key (32 bytes → 48 bytes with GCM tag)
|
|
@@ -236,7 +346,44 @@ export class NoiseHandshake {
|
|
|
236
346
|
// Encrypt payload
|
|
237
347
|
const encryptedPayload = this.encryptWithHash(payload);
|
|
238
348
|
|
|
239
|
-
|
|
349
|
+
// Build inner protobuf: field 1 (enc static) + field 3 (enc payload)
|
|
350
|
+
const inner = this.buildProtobufField(1, encryptedStatic)
|
|
351
|
+
.concat(this.buildProtobufField(3, encryptedPayload));
|
|
352
|
+
|
|
353
|
+
// Wrap in outer protobuf field 4
|
|
354
|
+
const innerBytes = concatBytes(...inner);
|
|
355
|
+
return this.encodeProtobufField(4, innerBytes);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Build protobuf field encoding (returns array of byte chunks)
|
|
360
|
+
*/
|
|
361
|
+
private buildProtobufField(fieldNumber: number, value: Uint8Array): Uint8Array[] {
|
|
362
|
+
const tag = (fieldNumber << 3) | 2; // wire type 2 = length-delimited
|
|
363
|
+
return [this.encodeVarint(tag), this.encodeVarint(value.length), value];
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Encode a complete protobuf field (tag + length + value)
|
|
368
|
+
*/
|
|
369
|
+
private encodeProtobufField(fieldNumber: number, value: Uint8Array): Uint8Array {
|
|
370
|
+
const tag = (fieldNumber << 3) | 2;
|
|
371
|
+
const tagBytes = this.encodeVarint(tag);
|
|
372
|
+
const lenBytes = this.encodeVarint(value.length);
|
|
373
|
+
return concatBytes(tagBytes, lenBytes, value);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Encode a varint
|
|
378
|
+
*/
|
|
379
|
+
private encodeVarint(value: number): Uint8Array {
|
|
380
|
+
const bytes: number[] = [];
|
|
381
|
+
while (value > 0x7f) {
|
|
382
|
+
bytes.push((value & 0x7f) | 0x80);
|
|
383
|
+
value >>= 7;
|
|
384
|
+
}
|
|
385
|
+
bytes.push(value & 0x7f);
|
|
386
|
+
return new Uint8Array(bytes);
|
|
240
387
|
}
|
|
241
388
|
|
|
242
389
|
/**
|
|
@@ -329,13 +476,28 @@ export class NoiseHandshake {
|
|
|
329
476
|
}
|
|
330
477
|
|
|
331
478
|
/**
|
|
332
|
-
* Build initial client hello -
|
|
333
|
-
*
|
|
334
|
-
*
|
|
479
|
+
* Build initial client hello - Message 1 of Noise XX
|
|
480
|
+
*
|
|
481
|
+
* WA Protocol: Wrap ephemeral in protobuf field 2:
|
|
482
|
+
* field 2 (length-delimited): contains
|
|
483
|
+
* field 1 (32 bytes): ephemeral public key
|
|
484
|
+
*
|
|
485
|
+
* Encoding: 12 22 0a 20 [32 bytes ephemeral]
|
|
486
|
+
* - 12 = field 2, wire type 2 (length-delimited)
|
|
487
|
+
* - 22 = length 34
|
|
488
|
+
* - 0a = field 1, wire type 2
|
|
489
|
+
* - 20 = length 32
|
|
490
|
+
* - [32 bytes] = ephemeral public key
|
|
335
491
|
*/
|
|
336
492
|
public buildClientHello(): Uint8Array {
|
|
337
|
-
// Message 1: just the ephemeral public key
|
|
338
|
-
|
|
493
|
+
// Message 1: just the ephemeral public key, wrapped in protobuf
|
|
494
|
+
const ephemeral = this.writeEphemeral();
|
|
495
|
+
|
|
496
|
+
// Inner protobuf: field 1 = ephemeral (32 bytes)
|
|
497
|
+
const inner = this.encodeProtobufField(1, ephemeral);
|
|
498
|
+
|
|
499
|
+
// Outer protobuf: field 2 = inner protobuf
|
|
500
|
+
return this.encodeProtobufField(2, inner);
|
|
339
501
|
}
|
|
340
502
|
}
|
|
341
503
|
|
package/src/index.ts
CHANGED
|
@@ -324,7 +324,7 @@ export {
|
|
|
324
324
|
export * from './types/index.js';
|
|
325
325
|
|
|
326
326
|
// ============== Version ==============
|
|
327
|
-
export const VERSION = '1.1.
|
|
327
|
+
export const VERSION = '1.1.4';
|
|
328
328
|
export const LIBRARY_NAME = 'waliwa';
|
|
329
329
|
|
|
330
330
|
// ============== Default Config ==============
|
package/src/socket/ws-socket.ts
CHANGED
|
@@ -171,66 +171,72 @@ export class WAWebSocket extends EventEmitter {
|
|
|
171
171
|
/**
|
|
172
172
|
* Start Noise Protocol XX handshake
|
|
173
173
|
*
|
|
174
|
-
* WA Frame Format
|
|
175
|
-
* [0x57, 0x41] (
|
|
176
|
-
* [
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
* [
|
|
174
|
+
* WA Frame Format:
|
|
175
|
+
* Message 1: [0x57, 0x41, 0x06, 0x02] (4-byte WA header) + [3-byte length] + [protobuf(ephemeral)]
|
|
176
|
+
* Messages 2+: [3-byte length] + [raw Noise data]
|
|
177
|
+
*
|
|
178
|
+
* Protobuf wrapper for ephemeral (Message 1 only):
|
|
179
|
+
* 12 22 0a 20 [32 bytes ephemeral]
|
|
180
|
+
* - 12 22 = field 2, length 34
|
|
181
|
+
* - 0a 20 = field 1, length 32
|
|
182
|
+
* - [32 bytes] = ephemeral public key
|
|
180
183
|
*
|
|
181
184
|
* Noise XX Pattern (3 messages):
|
|
182
|
-
* 1. Client → Server: WA header + ephemeral
|
|
183
|
-
* 2. Server → Client:
|
|
184
|
-
* 3. Client → Server:
|
|
185
|
+
* 1. Client → Server: WA header + protobuf(ephemeral)
|
|
186
|
+
* 2. Server → Client: ephemeral + enc_static + enc_payload
|
|
187
|
+
* 3. Client → Server: enc_static + enc_payload
|
|
185
188
|
*/
|
|
186
189
|
private async startHandshake(): Promise<void> {
|
|
187
190
|
this.handshake = new NoiseHandshake(this.noiseKey, true);
|
|
188
191
|
|
|
189
|
-
// === Message 1: Send client ephemeral
|
|
190
|
-
|
|
191
|
-
const
|
|
192
|
+
// === Message 1: Send client ephemeral wrapped in protobuf ===
|
|
193
|
+
// buildClientHello() returns protobuf: 12 22 0a 20 [ephemeral]
|
|
194
|
+
const protobufEphemeral = this.handshake.buildClientHello();
|
|
195
|
+
|
|
196
|
+
// Build message 1: WA header (4 bytes) + 3-byte length + protobuf payload
|
|
197
|
+
const clientHello = this.wrapHandshakeInit(protobufEphemeral);
|
|
192
198
|
this.logger.info(`Sending client hello: ${this.hexDump(clientHello)}`);
|
|
193
199
|
this.ws!.send(Buffer.from(clientHello));
|
|
194
200
|
|
|
195
201
|
// === Message 2: Wait for server response ===
|
|
196
|
-
// Server might send multiple frames - skip short/ack messages until we get the actual handshake
|
|
197
202
|
let serverPayload: Uint8Array | null = null;
|
|
198
203
|
for (let attempt = 0; attempt < 5; attempt++) {
|
|
199
204
|
const serverData = await this.waitForMessage(15000);
|
|
200
205
|
const bytes = new Uint8Array(serverData);
|
|
201
206
|
this.logger.info(`Received msg ${attempt + 1} (${serverData.length} bytes): ${this.hexDump(bytes)}`);
|
|
202
207
|
|
|
203
|
-
// Skip short messages (acks,
|
|
204
|
-
if (serverData.length <
|
|
205
|
-
this.logger.info(`Short message
|
|
208
|
+
// Skip very short messages (acks, error frames)
|
|
209
|
+
if (serverData.length < 4) {
|
|
210
|
+
this.logger.info(`Short message, skipping (likely ack/error)`);
|
|
211
|
+
// Check if it's a close frame: 88 02 = WS close, 03 f3 = code 1011
|
|
212
|
+
if (serverData.length === 4 && bytes[0] === 0x88) {
|
|
213
|
+
const closeCode = (bytes[2] << 8) | bytes[3];
|
|
214
|
+
throw new Error(`Server rejected handshake (close code ${closeCode})`);
|
|
215
|
+
}
|
|
206
216
|
continue;
|
|
207
217
|
}
|
|
208
218
|
|
|
209
|
-
//
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
} catch (err: any) {
|
|
215
|
-
// Maybe it's raw Noise data without WA header
|
|
216
|
-
this.logger.info(`WA unwrap failed: ${err.message}, trying as raw data`);
|
|
217
|
-
serverPayload = bytes;
|
|
218
|
-
break;
|
|
219
|
-
}
|
|
219
|
+
// Messages 2+ use 3-byte length prefix (no WA magic)
|
|
220
|
+
// Strip the 3-byte length prefix, keep protobuf for NoiseHandshake to parse
|
|
221
|
+
serverPayload = bytes.subarray(3);
|
|
222
|
+
this.logger.info(`Stripped 3-byte length prefix, payload ${serverPayload.length} bytes`);
|
|
223
|
+
break;
|
|
220
224
|
}
|
|
221
225
|
|
|
222
|
-
if (!serverPayload || serverPayload.length <
|
|
226
|
+
if (!serverPayload || serverPayload.length < 80) {
|
|
223
227
|
throw new Error(`Invalid handshake response (payload ${serverPayload?.length ?? 0} bytes, need ≥ 80)`);
|
|
224
228
|
}
|
|
225
229
|
|
|
226
|
-
// Process server Noise data
|
|
230
|
+
// Process server Noise data (NoiseHandshake will parse protobuf internally)
|
|
227
231
|
this.handshake.readResponderHandshake(serverPayload);
|
|
228
232
|
this.logger.info('Server handshake response processed');
|
|
229
233
|
|
|
230
234
|
// === Message 3: Send encrypted static + payload ===
|
|
235
|
+
// writeClientResponse() returns protobuf (field 4 containing enc static + enc payload)
|
|
236
|
+
// Wrap with 3-byte length prefix only (no WA magic)
|
|
231
237
|
const clientPayload = this.buildClientPayload();
|
|
232
238
|
const clientResponse = this.handshake.writeClientResponse(clientPayload);
|
|
233
|
-
const wrappedResponse = this.
|
|
239
|
+
const wrappedResponse = this.wrapPostHandshake(clientResponse);
|
|
234
240
|
this.logger.info(`Sending client response (${wrappedResponse.length} bytes): ${this.hexDump(wrappedResponse)}`);
|
|
235
241
|
this.ws!.send(Buffer.from(wrappedResponse));
|
|
236
242
|
|
|
@@ -241,26 +247,16 @@ export class WAWebSocket extends EventEmitter {
|
|
|
241
247
|
}
|
|
242
248
|
|
|
243
249
|
/**
|
|
244
|
-
*
|
|
250
|
+
* Wrap handshake init message (Message 1)
|
|
251
|
+
* Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
|
|
245
252
|
*/
|
|
246
|
-
private
|
|
247
|
-
const slice = data.subarray(0, Math.min(data.length, maxBytes));
|
|
248
|
-
const hex = Array.from(slice).map(b => b.toString(16).padStart(2, '0')).join(' ');
|
|
249
|
-
const suffix = data.length > maxBytes ? ` ... (${data.length} bytes total)` : '';
|
|
250
|
-
return `[${hex}]${suffix}`;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Wrap payload dengan WA frame header
|
|
255
|
-
* Format: [0x57, 0x41, 0x01, version, len_hi, len_mid, len_lo] + payload
|
|
256
|
-
*/
|
|
257
|
-
private wrapWAFrame(payload: Uint8Array): Uint8Array {
|
|
253
|
+
private wrapHandshakeInit(payload: Uint8Array): Uint8Array {
|
|
258
254
|
const len = payload.length;
|
|
259
255
|
const header = new Uint8Array(7);
|
|
260
256
|
header[0] = 0x57; // 'W'
|
|
261
257
|
header[1] = 0x41; // 'A'
|
|
262
|
-
header[2] =
|
|
263
|
-
header[3] =
|
|
258
|
+
header[2] = 0x06; // version/flag
|
|
259
|
+
header[3] = 0x02; // version/flag
|
|
264
260
|
header[4] = (len >> 16) & 0xff;
|
|
265
261
|
header[5] = (len >> 8) & 0xff;
|
|
266
262
|
header[6] = len & 0xff;
|
|
@@ -268,18 +264,37 @@ export class WAWebSocket extends EventEmitter {
|
|
|
268
264
|
}
|
|
269
265
|
|
|
270
266
|
/**
|
|
271
|
-
*
|
|
272
|
-
*
|
|
267
|
+
* Wrap post-handshake messages (Messages 2+)
|
|
268
|
+
* Format: [3-byte length] + [payload]
|
|
273
269
|
*/
|
|
274
|
-
private
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
270
|
+
private wrapPostHandshake(payload: Uint8Array): Uint8Array {
|
|
271
|
+
const len = payload.length;
|
|
272
|
+
const header = new Uint8Array(3);
|
|
273
|
+
header[0] = (len >> 16) & 0xff;
|
|
274
|
+
header[1] = (len >> 8) & 0xff;
|
|
275
|
+
header[2] = len & 0xff;
|
|
276
|
+
return concatBytes(header, payload);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Unwrap incoming message (Messages 2+)
|
|
281
|
+
* Strip 3-byte length prefix
|
|
282
|
+
*/
|
|
283
|
+
private unwrapIncoming(data: Uint8Array): Uint8Array {
|
|
284
|
+
if (data.length < 3) {
|
|
285
|
+
throw new Error(`Message too short: ${data.length} bytes`);
|
|
281
286
|
}
|
|
282
|
-
return data.subarray(
|
|
287
|
+
return data.subarray(3);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Hex dump utility for debugging
|
|
292
|
+
*/
|
|
293
|
+
private hexDump(data: Uint8Array, maxBytes: number = 64): string {
|
|
294
|
+
const slice = data.subarray(0, Math.min(data.length, maxBytes));
|
|
295
|
+
const hex = Array.from(slice).map(b => b.toString(16).padStart(2, '0')).join(' ');
|
|
296
|
+
const suffix = data.length > maxBytes ? ` ... (${data.length} bytes total)` : '';
|
|
297
|
+
return `[${hex}]${suffix}`;
|
|
283
298
|
}
|
|
284
299
|
|
|
285
300
|
/**
|
|
@@ -332,7 +347,7 @@ export class WAWebSocket extends EventEmitter {
|
|
|
332
347
|
|
|
333
348
|
/**
|
|
334
349
|
* Handle incoming message - decrypt jika handshake done
|
|
335
|
-
*
|
|
350
|
+
* Post-handshake messages use 3-byte length prefix
|
|
336
351
|
*/
|
|
337
352
|
private handleMessage(data: Buffer): void {
|
|
338
353
|
if (!this.isHandshakeDone) {
|
|
@@ -340,8 +355,8 @@ export class WAWebSocket extends EventEmitter {
|
|
|
340
355
|
return;
|
|
341
356
|
}
|
|
342
357
|
try {
|
|
343
|
-
// Strip
|
|
344
|
-
const payload = this.
|
|
358
|
+
// Strip 3-byte length prefix then decrypt
|
|
359
|
+
const payload = this.unwrapIncoming(new Uint8Array(data));
|
|
345
360
|
const plaintext = this.trafficCipher!.decrypt(payload);
|
|
346
361
|
this.emit('message', plaintext);
|
|
347
362
|
} catch (err: any) {
|
|
@@ -352,14 +367,14 @@ export class WAWebSocket extends EventEmitter {
|
|
|
352
367
|
|
|
353
368
|
/**
|
|
354
369
|
* Send encrypted frame ke server
|
|
355
|
-
*
|
|
370
|
+
* Post-handshake messages use 3-byte length prefix (no WA magic)
|
|
356
371
|
*/
|
|
357
372
|
send(plaintext: Uint8Array): void {
|
|
358
373
|
if (!this.isHandshakeDone || !this.trafficCipher) {
|
|
359
374
|
throw new Error('Cannot send before handshake complete');
|
|
360
375
|
}
|
|
361
376
|
const ciphertext = this.trafficCipher.encrypt(plaintext);
|
|
362
|
-
const frame = this.
|
|
377
|
+
const frame = this.wrapPostHandshake(ciphertext);
|
|
363
378
|
this.ws!.send(Buffer.from(frame));
|
|
364
379
|
}
|
|
365
380
|
|