@kangwifi-pro/waliwa 1.1.2 → 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 +29 -17
- package/dist/socket/ws-socket.d.ts.map +1 -1
- package/dist/socket/ws-socket.js +86 -42
- 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 +91 -42
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,29 +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
|
-
* Wrap
|
|
69
|
-
* Format: [0x57, 0x41,
|
|
71
|
+
* Wrap handshake init message (Message 1)
|
|
72
|
+
* Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
|
|
73
|
+
*/
|
|
74
|
+
private wrapHandshakeInit;
|
|
75
|
+
/**
|
|
76
|
+
* Wrap post-handshake messages (Messages 2+)
|
|
77
|
+
* Format: [3-byte length] + [payload]
|
|
78
|
+
*/
|
|
79
|
+
private wrapPostHandshake;
|
|
80
|
+
/**
|
|
81
|
+
* Unwrap incoming message (Messages 2+)
|
|
82
|
+
* Strip 3-byte length prefix
|
|
70
83
|
*/
|
|
71
|
-
private
|
|
84
|
+
private unwrapIncoming;
|
|
72
85
|
/**
|
|
73
|
-
*
|
|
74
|
-
* Returns just the payload
|
|
86
|
+
* Hex dump utility for debugging
|
|
75
87
|
*/
|
|
76
|
-
private
|
|
88
|
+
private hexDump;
|
|
77
89
|
/**
|
|
78
90
|
* Wait for a single WebSocket message with timeout
|
|
79
91
|
*/
|
|
@@ -85,12 +97,12 @@ export declare class WAWebSocket extends EventEmitter {
|
|
|
85
97
|
private generatePairingKey;
|
|
86
98
|
/**
|
|
87
99
|
* Handle incoming message - decrypt jika handshake done
|
|
88
|
-
*
|
|
100
|
+
* Post-handshake messages use 3-byte length prefix
|
|
89
101
|
*/
|
|
90
102
|
private handleMessage;
|
|
91
103
|
/**
|
|
92
104
|
* Send encrypted frame ke server
|
|
93
|
-
*
|
|
105
|
+
* Post-handshake messages use 3-byte length prefix (no WA magic)
|
|
94
106
|
*/
|
|
95
107
|
send(plaintext: Uint8Array): void;
|
|
96
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,73 +134,117 @@ 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
|
-
|
|
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);
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
+
let serverPayload = null;
|
|
163
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
164
|
+
const serverData = await this.waitForMessage(15000);
|
|
165
|
+
const bytes = new Uint8Array(serverData);
|
|
166
|
+
this.logger.info(`Received msg ${attempt + 1} (${serverData.length} bytes): ${this.hexDump(bytes)}`);
|
|
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
|
+
}
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
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;
|
|
182
|
+
}
|
|
183
|
+
if (!serverPayload || serverPayload.length < 80) {
|
|
184
|
+
throw new Error(`Invalid handshake response (payload ${serverPayload?.length ?? 0} bytes, need ≥ 80)`);
|
|
185
|
+
}
|
|
186
|
+
// Process server Noise data (NoiseHandshake will parse protobuf internally)
|
|
162
187
|
this.handshake.readResponderHandshake(serverPayload);
|
|
163
|
-
this.logger.
|
|
188
|
+
this.logger.info('Server handshake response processed');
|
|
164
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)
|
|
165
192
|
const clientPayload = this.buildClientPayload();
|
|
166
193
|
const clientResponse = this.handshake.writeClientResponse(clientPayload);
|
|
167
|
-
const wrappedResponse = this.
|
|
168
|
-
this.logger.
|
|
194
|
+
const wrappedResponse = this.wrapPostHandshake(clientResponse);
|
|
195
|
+
this.logger.info(`Sending client response (${wrappedResponse.length} bytes): ${this.hexDump(wrappedResponse)}`);
|
|
169
196
|
this.ws.send(Buffer.from(wrappedResponse));
|
|
170
197
|
// === Finalize: derive traffic keys ===
|
|
171
198
|
const { sendKey, recvKey } = this.handshake.finalize();
|
|
172
199
|
this.trafficCipher = new noise_js_1.TrafficCipher(sendKey, recvKey);
|
|
173
|
-
this.logger.
|
|
200
|
+
this.logger.info('Noise handshake completed, traffic keys derived');
|
|
174
201
|
}
|
|
175
202
|
/**
|
|
176
|
-
* Wrap
|
|
177
|
-
* Format: [0x57, 0x41,
|
|
203
|
+
* Wrap handshake init message (Message 1)
|
|
204
|
+
* Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
|
|
178
205
|
*/
|
|
179
|
-
|
|
206
|
+
wrapHandshakeInit(payload) {
|
|
180
207
|
const len = payload.length;
|
|
181
208
|
const header = new Uint8Array(7);
|
|
182
209
|
header[0] = 0x57; // 'W'
|
|
183
210
|
header[1] = 0x41; // 'A'
|
|
184
|
-
header[2] =
|
|
185
|
-
header[3] =
|
|
211
|
+
header[2] = 0x06; // version/flag
|
|
212
|
+
header[3] = 0x02; // version/flag
|
|
186
213
|
header[4] = (len >> 16) & 0xff;
|
|
187
214
|
header[5] = (len >> 8) & 0xff;
|
|
188
215
|
header[6] = len & 0xff;
|
|
189
216
|
return (0, crypto_js_1.concatBytes)(header, payload);
|
|
190
217
|
}
|
|
191
218
|
/**
|
|
192
|
-
*
|
|
193
|
-
*
|
|
219
|
+
* Wrap post-handshake messages (Messages 2+)
|
|
220
|
+
* Format: [3-byte length] + [payload]
|
|
194
221
|
*/
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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`);
|
|
202
237
|
}
|
|
203
|
-
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}`;
|
|
204
248
|
}
|
|
205
249
|
/**
|
|
206
250
|
* Wait for a single WebSocket message with timeout
|
|
@@ -246,7 +290,7 @@ class WAWebSocket extends events_1.EventEmitter {
|
|
|
246
290
|
}
|
|
247
291
|
/**
|
|
248
292
|
* Handle incoming message - decrypt jika handshake done
|
|
249
|
-
*
|
|
293
|
+
* Post-handshake messages use 3-byte length prefix
|
|
250
294
|
*/
|
|
251
295
|
handleMessage(data) {
|
|
252
296
|
if (!this.isHandshakeDone) {
|
|
@@ -254,8 +298,8 @@ class WAWebSocket extends events_1.EventEmitter {
|
|
|
254
298
|
return;
|
|
255
299
|
}
|
|
256
300
|
try {
|
|
257
|
-
// Strip
|
|
258
|
-
const payload = this.
|
|
301
|
+
// Strip 3-byte length prefix then decrypt
|
|
302
|
+
const payload = this.unwrapIncoming(new Uint8Array(data));
|
|
259
303
|
const plaintext = this.trafficCipher.decrypt(payload);
|
|
260
304
|
this.emit('message', plaintext);
|
|
261
305
|
}
|
|
@@ -266,14 +310,14 @@ class WAWebSocket extends events_1.EventEmitter {
|
|
|
266
310
|
}
|
|
267
311
|
/**
|
|
268
312
|
* Send encrypted frame ke server
|
|
269
|
-
*
|
|
313
|
+
* Post-handshake messages use 3-byte length prefix (no WA magic)
|
|
270
314
|
*/
|
|
271
315
|
send(plaintext) {
|
|
272
316
|
if (!this.isHandshakeDone || !this.trafficCipher) {
|
|
273
317
|
throw new Error('Cannot send before handshake complete');
|
|
274
318
|
}
|
|
275
319
|
const ciphertext = this.trafficCipher.encrypt(plaintext);
|
|
276
|
-
const frame = this.
|
|
320
|
+
const frame = this.wrapPostHandshake(ciphertext);
|
|
277
321
|
this.ws.send(Buffer.from(frame));
|
|
278
322
|
}
|
|
279
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":"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"}
|
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,62 +171,92 @@ 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
|
-
|
|
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);
|
|
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
|
-
|
|
202
|
+
let serverPayload: Uint8Array | null = null;
|
|
203
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
204
|
+
const serverData = await this.waitForMessage(15000);
|
|
205
|
+
const bytes = new Uint8Array(serverData);
|
|
206
|
+
this.logger.info(`Received msg ${attempt + 1} (${serverData.length} bytes): ${this.hexDump(bytes)}`);
|
|
207
|
+
|
|
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
|
+
}
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
197
218
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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;
|
|
224
|
+
}
|
|
201
225
|
|
|
202
|
-
|
|
226
|
+
if (!serverPayload || serverPayload.length < 80) {
|
|
227
|
+
throw new Error(`Invalid handshake response (payload ${serverPayload?.length ?? 0} bytes, need ≥ 80)`);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Process server Noise data (NoiseHandshake will parse protobuf internally)
|
|
203
231
|
this.handshake.readResponderHandshake(serverPayload);
|
|
204
|
-
this.logger.
|
|
232
|
+
this.logger.info('Server handshake response processed');
|
|
205
233
|
|
|
206
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)
|
|
207
237
|
const clientPayload = this.buildClientPayload();
|
|
208
238
|
const clientResponse = this.handshake.writeClientResponse(clientPayload);
|
|
209
|
-
const wrappedResponse = this.
|
|
210
|
-
this.logger.
|
|
239
|
+
const wrappedResponse = this.wrapPostHandshake(clientResponse);
|
|
240
|
+
this.logger.info(`Sending client response (${wrappedResponse.length} bytes): ${this.hexDump(wrappedResponse)}`);
|
|
211
241
|
this.ws!.send(Buffer.from(wrappedResponse));
|
|
212
242
|
|
|
213
243
|
// === Finalize: derive traffic keys ===
|
|
214
244
|
const { sendKey, recvKey } = this.handshake.finalize();
|
|
215
245
|
this.trafficCipher = new TrafficCipher(sendKey, recvKey);
|
|
216
|
-
this.logger.
|
|
246
|
+
this.logger.info('Noise handshake completed, traffic keys derived');
|
|
217
247
|
}
|
|
218
248
|
|
|
219
249
|
/**
|
|
220
|
-
* Wrap
|
|
221
|
-
* Format: [0x57, 0x41,
|
|
250
|
+
* Wrap handshake init message (Message 1)
|
|
251
|
+
* Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
|
|
222
252
|
*/
|
|
223
|
-
private
|
|
253
|
+
private wrapHandshakeInit(payload: Uint8Array): Uint8Array {
|
|
224
254
|
const len = payload.length;
|
|
225
255
|
const header = new Uint8Array(7);
|
|
226
256
|
header[0] = 0x57; // 'W'
|
|
227
257
|
header[1] = 0x41; // 'A'
|
|
228
|
-
header[2] =
|
|
229
|
-
header[3] =
|
|
258
|
+
header[2] = 0x06; // version/flag
|
|
259
|
+
header[3] = 0x02; // version/flag
|
|
230
260
|
header[4] = (len >> 16) & 0xff;
|
|
231
261
|
header[5] = (len >> 8) & 0xff;
|
|
232
262
|
header[6] = len & 0xff;
|
|
@@ -234,18 +264,37 @@ export class WAWebSocket extends EventEmitter {
|
|
|
234
264
|
}
|
|
235
265
|
|
|
236
266
|
/**
|
|
237
|
-
*
|
|
238
|
-
*
|
|
267
|
+
* Wrap post-handshake messages (Messages 2+)
|
|
268
|
+
* Format: [3-byte length] + [payload]
|
|
239
269
|
*/
|
|
240
|
-
private
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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`);
|
|
247
286
|
}
|
|
248
|
-
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}`;
|
|
249
298
|
}
|
|
250
299
|
|
|
251
300
|
/**
|
|
@@ -298,7 +347,7 @@ export class WAWebSocket extends EventEmitter {
|
|
|
298
347
|
|
|
299
348
|
/**
|
|
300
349
|
* Handle incoming message - decrypt jika handshake done
|
|
301
|
-
*
|
|
350
|
+
* Post-handshake messages use 3-byte length prefix
|
|
302
351
|
*/
|
|
303
352
|
private handleMessage(data: Buffer): void {
|
|
304
353
|
if (!this.isHandshakeDone) {
|
|
@@ -306,8 +355,8 @@ export class WAWebSocket extends EventEmitter {
|
|
|
306
355
|
return;
|
|
307
356
|
}
|
|
308
357
|
try {
|
|
309
|
-
// Strip
|
|
310
|
-
const payload = this.
|
|
358
|
+
// Strip 3-byte length prefix then decrypt
|
|
359
|
+
const payload = this.unwrapIncoming(new Uint8Array(data));
|
|
311
360
|
const plaintext = this.trafficCipher!.decrypt(payload);
|
|
312
361
|
this.emit('message', plaintext);
|
|
313
362
|
} catch (err: any) {
|
|
@@ -318,14 +367,14 @@ export class WAWebSocket extends EventEmitter {
|
|
|
318
367
|
|
|
319
368
|
/**
|
|
320
369
|
* Send encrypted frame ke server
|
|
321
|
-
*
|
|
370
|
+
* Post-handshake messages use 3-byte length prefix (no WA magic)
|
|
322
371
|
*/
|
|
323
372
|
send(plaintext: Uint8Array): void {
|
|
324
373
|
if (!this.isHandshakeDone || !this.trafficCipher) {
|
|
325
374
|
throw new Error('Cannot send before handshake complete');
|
|
326
375
|
}
|
|
327
376
|
const ciphertext = this.trafficCipher.encrypt(plaintext);
|
|
328
|
-
const frame = this.
|
|
377
|
+
const frame = this.wrapPostHandshake(ciphertext);
|
|
329
378
|
this.ws!.send(Buffer.from(frame));
|
|
330
379
|
}
|
|
331
380
|
|