@zapo-js/fake-server 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/README.md +3 -3
  2. package/dist/api/AppStateSyncManager.d.ts +0 -1
  3. package/dist/api/AppStateSyncManager.js +0 -1
  4. package/dist/api/FakePairingDriver.d.ts +0 -1
  5. package/dist/api/FakePairingDriver.js +0 -1
  6. package/dist/api/FakePeer.d.ts +77 -4
  7. package/dist/api/FakePeer.js +201 -1
  8. package/dist/api/FakeWaServer.d.ts +11 -1
  9. package/dist/api/FakeWaServer.js +34 -2
  10. package/dist/api/PreKeyDispenser.d.ts +0 -1
  11. package/dist/api/PreKeyDispenser.js +0 -1
  12. package/dist/api/Scenario.d.ts +0 -1
  13. package/dist/api/Scenario.js +0 -1
  14. package/dist/api/ServerRegistries.d.ts +0 -1
  15. package/dist/api/ServerRegistries.js +0 -1
  16. package/dist/api/iq-handlers.d.ts +0 -1
  17. package/dist/api/iq-handlers.js +0 -1
  18. package/dist/{cli.d.ts → bin.d.ts} +0 -1
  19. package/dist/{cli.js → bin.js} +1 -2
  20. package/dist/esm/api/AppStateSyncManager.js +146 -0
  21. package/dist/esm/api/FakePairingDriver.js +31 -0
  22. package/dist/esm/api/FakePeer.js +604 -0
  23. package/dist/esm/api/FakeWaServer.js +680 -0
  24. package/dist/esm/api/PreKeyDispenser.js +93 -0
  25. package/dist/esm/api/Scenario.js +32 -0
  26. package/dist/esm/api/ServerRegistries.js +261 -0
  27. package/dist/esm/api/iq-handlers.js +492 -0
  28. package/dist/esm/bin.js +246 -0
  29. package/dist/esm/index.js +26 -0
  30. package/dist/esm/infra/WaFakeConnection.js +49 -0
  31. package/dist/esm/infra/WaFakeConnectionPipeline.js +223 -0
  32. package/dist/esm/infra/WaFakeFrameSocket.js +117 -0
  33. package/dist/esm/infra/WaFakeMediaHttpsServer.js +126 -0
  34. package/dist/esm/infra/WaFakeNoiseHandshake.js +67 -0
  35. package/dist/esm/infra/WaFakeTransport.js +31 -0
  36. package/dist/esm/infra/WaFakeWsServer.js +96 -0
  37. package/dist/esm/package.json +3 -0
  38. package/dist/esm/protocol/auth/cert-chain.js +39 -0
  39. package/dist/esm/protocol/auth/client-payload-validate.js +55 -0
  40. package/dist/esm/protocol/auth/fake-primary-device.js +47 -0
  41. package/dist/esm/protocol/auth/pair-device.js +87 -0
  42. package/dist/esm/protocol/auth/success-node.js +26 -0
  43. package/dist/esm/protocol/iq/abprops.js +30 -0
  44. package/dist/esm/protocol/iq/appstate-sync.js +146 -0
  45. package/dist/esm/protocol/iq/business.js +59 -0
  46. package/dist/esm/protocol/iq/dirty-bits.js +19 -0
  47. package/dist/esm/protocol/iq/group-ops.js +154 -0
  48. package/dist/esm/protocol/iq/newsletter.js +14 -0
  49. package/dist/esm/protocol/iq/prekey-fetch.js +88 -0
  50. package/dist/esm/protocol/iq/privacy-token.js +26 -0
  51. package/dist/esm/protocol/iq/privacy.js +123 -0
  52. package/dist/esm/protocol/iq/profile.js +72 -0
  53. package/dist/esm/protocol/iq/router.js +111 -0
  54. package/dist/esm/protocol/iq/usync.js +64 -0
  55. package/dist/esm/protocol/push/app-state-key-share.js +26 -0
  56. package/dist/esm/protocol/push/call-failure.js +27 -0
  57. package/dist/esm/protocol/push/chatstate.js +23 -0
  58. package/dist/esm/protocol/push/error-stanza.js +13 -0
  59. package/dist/esm/protocol/push/history-sync.js +111 -0
  60. package/dist/esm/protocol/push/message.js +38 -0
  61. package/dist/esm/protocol/push/notification.js +29 -0
  62. package/dist/esm/protocol/push/presence.js +14 -0
  63. package/dist/esm/protocol/push/receipt.js +21 -0
  64. package/dist/esm/protocol/signal/fake-app-state-crypto.js +196 -0
  65. package/dist/esm/protocol/signal/fake-peer-double-ratchet.js +398 -0
  66. package/dist/esm/protocol/signal/fake-peer-group-recv-session.js +120 -0
  67. package/dist/esm/protocol/signal/fake-peer-identity.js +8 -0
  68. package/dist/esm/protocol/signal/fake-peer-key-bundle.js +25 -0
  69. package/dist/esm/protocol/signal/fake-sender-key.js +83 -0
  70. package/dist/esm/protocol/signal/prekey-upload.js +107 -0
  71. package/dist/esm/protocol/stream/stream-error.js +56 -0
  72. package/dist/esm/state/fake-app-state-collection.js +134 -0
  73. package/dist/esm/state/fake-media-store.js +53 -0
  74. package/dist/esm/transport/codec.js +8 -0
  75. package/dist/esm/transport/crypto.js +8 -0
  76. package/dist/esm/transport/protos.js +7 -0
  77. package/dist/esm/transport/util.js +8 -0
  78. package/dist/index.d.ts +0 -1
  79. package/dist/index.js +0 -1
  80. package/dist/infra/WaFakeConnection.d.ts +0 -1
  81. package/dist/infra/WaFakeConnection.js +0 -1
  82. package/dist/infra/WaFakeConnectionPipeline.d.ts +0 -1
  83. package/dist/infra/WaFakeConnectionPipeline.js +27 -24
  84. package/dist/infra/WaFakeFrameSocket.d.ts +0 -1
  85. package/dist/infra/WaFakeFrameSocket.js +0 -1
  86. package/dist/infra/WaFakeMediaHttpsServer.d.ts +0 -1
  87. package/dist/infra/WaFakeMediaHttpsServer.js +0 -1
  88. package/dist/infra/WaFakeNoiseHandshake.d.ts +8 -10
  89. package/dist/infra/WaFakeNoiseHandshake.js +19 -24
  90. package/dist/infra/WaFakeTransport.d.ts +2 -4
  91. package/dist/infra/WaFakeTransport.js +2 -1
  92. package/dist/infra/WaFakeWsServer.d.ts +0 -1
  93. package/dist/infra/WaFakeWsServer.js +0 -1
  94. package/dist/protocol/auth/cert-chain.d.ts +0 -1
  95. package/dist/protocol/auth/cert-chain.js +0 -1
  96. package/dist/protocol/auth/client-payload-validate.d.ts +0 -1
  97. package/dist/protocol/auth/client-payload-validate.js +0 -1
  98. package/dist/protocol/auth/fake-primary-device.d.ts +0 -1
  99. package/dist/protocol/auth/fake-primary-device.js +1 -3
  100. package/dist/protocol/auth/pair-device.d.ts +0 -1
  101. package/dist/protocol/auth/pair-device.js +4 -16
  102. package/dist/protocol/auth/success-node.d.ts +0 -1
  103. package/dist/protocol/auth/success-node.js +0 -1
  104. package/dist/protocol/iq/abprops.d.ts +0 -1
  105. package/dist/protocol/iq/abprops.js +0 -1
  106. package/dist/protocol/iq/appstate-sync.d.ts +0 -1
  107. package/dist/protocol/iq/appstate-sync.js +0 -1
  108. package/dist/protocol/iq/business.d.ts +0 -1
  109. package/dist/protocol/iq/business.js +0 -1
  110. package/dist/protocol/iq/dirty-bits.d.ts +0 -1
  111. package/dist/protocol/iq/dirty-bits.js +0 -1
  112. package/dist/protocol/iq/group-ops.d.ts +0 -1
  113. package/dist/protocol/iq/group-ops.js +0 -1
  114. package/dist/protocol/iq/newsletter.d.ts +0 -1
  115. package/dist/protocol/iq/newsletter.js +0 -1
  116. package/dist/protocol/iq/prekey-fetch.d.ts +0 -1
  117. package/dist/protocol/iq/prekey-fetch.js +0 -1
  118. package/dist/protocol/iq/privacy-token.d.ts +0 -1
  119. package/dist/protocol/iq/privacy-token.js +0 -1
  120. package/dist/protocol/iq/privacy.d.ts +0 -1
  121. package/dist/protocol/iq/privacy.js +15 -16
  122. package/dist/protocol/iq/profile.d.ts +0 -1
  123. package/dist/protocol/iq/profile.js +0 -1
  124. package/dist/protocol/iq/router.d.ts +0 -1
  125. package/dist/protocol/iq/router.js +0 -1
  126. package/dist/protocol/iq/usync.d.ts +0 -1
  127. package/dist/protocol/iq/usync.js +0 -1
  128. package/dist/protocol/push/app-state-key-share.d.ts +0 -1
  129. package/dist/protocol/push/app-state-key-share.js +0 -1
  130. package/dist/protocol/push/call-failure.d.ts +0 -1
  131. package/dist/protocol/push/call-failure.js +0 -1
  132. package/dist/protocol/push/chatstate.d.ts +0 -1
  133. package/dist/protocol/push/chatstate.js +0 -1
  134. package/dist/protocol/push/error-stanza.d.ts +0 -1
  135. package/dist/protocol/push/error-stanza.js +0 -1
  136. package/dist/protocol/push/history-sync.d.ts +0 -1
  137. package/dist/protocol/push/history-sync.js +0 -1
  138. package/dist/protocol/push/message.d.ts +0 -1
  139. package/dist/protocol/push/message.js +0 -1
  140. package/dist/protocol/push/notification.d.ts +0 -1
  141. package/dist/protocol/push/notification.js +0 -1
  142. package/dist/protocol/push/presence.d.ts +0 -1
  143. package/dist/protocol/push/presence.js +0 -1
  144. package/dist/protocol/push/receipt.d.ts +0 -1
  145. package/dist/protocol/push/receipt.js +0 -1
  146. package/dist/protocol/signal/fake-app-state-crypto.d.ts +7 -9
  147. package/dist/protocol/signal/fake-app-state-crypto.js +31 -33
  148. package/dist/protocol/signal/fake-peer-double-ratchet.d.ts +0 -1
  149. package/dist/protocol/signal/fake-peer-double-ratchet.js +23 -28
  150. package/dist/protocol/signal/fake-peer-group-recv-session.d.ts +0 -1
  151. package/dist/protocol/signal/fake-peer-group-recv-session.js +6 -10
  152. package/dist/protocol/signal/fake-peer-identity.d.ts +0 -1
  153. package/dist/protocol/signal/fake-peer-identity.js +0 -1
  154. package/dist/protocol/signal/fake-peer-key-bundle.d.ts +0 -1
  155. package/dist/protocol/signal/fake-peer-key-bundle.js +0 -1
  156. package/dist/protocol/signal/fake-sender-key.d.ts +0 -1
  157. package/dist/protocol/signal/fake-sender-key.js +5 -9
  158. package/dist/protocol/signal/prekey-upload.d.ts +0 -1
  159. package/dist/protocol/signal/prekey-upload.js +0 -1
  160. package/dist/protocol/stream/stream-error.d.ts +0 -1
  161. package/dist/protocol/stream/stream-error.js +0 -1
  162. package/dist/state/fake-app-state-collection.d.ts +0 -1
  163. package/dist/state/fake-app-state-collection.js +0 -1
  164. package/dist/state/fake-media-store.d.ts +0 -1
  165. package/dist/state/fake-media-store.js +2 -2
  166. package/dist/transport/codec.d.ts +2 -3
  167. package/dist/transport/codec.js +2 -3
  168. package/dist/transport/crypto.d.ts +5 -7
  169. package/dist/transport/crypto.js +6 -11
  170. package/dist/transport/protos.d.ts +2 -4
  171. package/dist/transport/protos.js +2 -4
  172. package/dist/transport/util.d.ts +8 -0
  173. package/dist/transport/util.js +15 -0
  174. package/package.json +21 -6
  175. package/dist/api/AppStateSyncManager.d.ts.map +0 -1
  176. package/dist/api/AppStateSyncManager.js.map +0 -1
  177. package/dist/api/FakePairingDriver.d.ts.map +0 -1
  178. package/dist/api/FakePairingDriver.js.map +0 -1
  179. package/dist/api/FakePeer.d.ts.map +0 -1
  180. package/dist/api/FakePeer.js.map +0 -1
  181. package/dist/api/FakeWaServer.d.ts.map +0 -1
  182. package/dist/api/FakeWaServer.js.map +0 -1
  183. package/dist/api/PreKeyDispenser.d.ts.map +0 -1
  184. package/dist/api/PreKeyDispenser.js.map +0 -1
  185. package/dist/api/Scenario.d.ts.map +0 -1
  186. package/dist/api/Scenario.js.map +0 -1
  187. package/dist/api/ServerRegistries.d.ts.map +0 -1
  188. package/dist/api/ServerRegistries.js.map +0 -1
  189. package/dist/api/iq-handlers.d.ts.map +0 -1
  190. package/dist/api/iq-handlers.js.map +0 -1
  191. package/dist/cli.d.ts.map +0 -1
  192. package/dist/cli.js.map +0 -1
  193. package/dist/index.d.ts.map +0 -1
  194. package/dist/index.js.map +0 -1
  195. package/dist/infra/WaFakeConnection.d.ts.map +0 -1
  196. package/dist/infra/WaFakeConnection.js.map +0 -1
  197. package/dist/infra/WaFakeConnectionPipeline.d.ts.map +0 -1
  198. package/dist/infra/WaFakeConnectionPipeline.js.map +0 -1
  199. package/dist/infra/WaFakeFrameSocket.d.ts.map +0 -1
  200. package/dist/infra/WaFakeFrameSocket.js.map +0 -1
  201. package/dist/infra/WaFakeMediaHttpsServer.d.ts.map +0 -1
  202. package/dist/infra/WaFakeMediaHttpsServer.js.map +0 -1
  203. package/dist/infra/WaFakeNoiseHandshake.d.ts.map +0 -1
  204. package/dist/infra/WaFakeNoiseHandshake.js.map +0 -1
  205. package/dist/infra/WaFakeTransport.d.ts.map +0 -1
  206. package/dist/infra/WaFakeTransport.js.map +0 -1
  207. package/dist/infra/WaFakeWsServer.d.ts.map +0 -1
  208. package/dist/infra/WaFakeWsServer.js.map +0 -1
  209. package/dist/protocol/auth/cert-chain.d.ts.map +0 -1
  210. package/dist/protocol/auth/cert-chain.js.map +0 -1
  211. package/dist/protocol/auth/client-payload-validate.d.ts.map +0 -1
  212. package/dist/protocol/auth/client-payload-validate.js.map +0 -1
  213. package/dist/protocol/auth/fake-primary-device.d.ts.map +0 -1
  214. package/dist/protocol/auth/fake-primary-device.js.map +0 -1
  215. package/dist/protocol/auth/pair-device.d.ts.map +0 -1
  216. package/dist/protocol/auth/pair-device.js.map +0 -1
  217. package/dist/protocol/auth/success-node.d.ts.map +0 -1
  218. package/dist/protocol/auth/success-node.js.map +0 -1
  219. package/dist/protocol/iq/abprops.d.ts.map +0 -1
  220. package/dist/protocol/iq/abprops.js.map +0 -1
  221. package/dist/protocol/iq/appstate-sync.d.ts.map +0 -1
  222. package/dist/protocol/iq/appstate-sync.js.map +0 -1
  223. package/dist/protocol/iq/business.d.ts.map +0 -1
  224. package/dist/protocol/iq/business.js.map +0 -1
  225. package/dist/protocol/iq/dirty-bits.d.ts.map +0 -1
  226. package/dist/protocol/iq/dirty-bits.js.map +0 -1
  227. package/dist/protocol/iq/group-ops.d.ts.map +0 -1
  228. package/dist/protocol/iq/group-ops.js.map +0 -1
  229. package/dist/protocol/iq/newsletter.d.ts.map +0 -1
  230. package/dist/protocol/iq/newsletter.js.map +0 -1
  231. package/dist/protocol/iq/prekey-fetch.d.ts.map +0 -1
  232. package/dist/protocol/iq/prekey-fetch.js.map +0 -1
  233. package/dist/protocol/iq/privacy-token.d.ts.map +0 -1
  234. package/dist/protocol/iq/privacy-token.js.map +0 -1
  235. package/dist/protocol/iq/privacy.d.ts.map +0 -1
  236. package/dist/protocol/iq/privacy.js.map +0 -1
  237. package/dist/protocol/iq/profile.d.ts.map +0 -1
  238. package/dist/protocol/iq/profile.js.map +0 -1
  239. package/dist/protocol/iq/router.d.ts.map +0 -1
  240. package/dist/protocol/iq/router.js.map +0 -1
  241. package/dist/protocol/iq/usync.d.ts.map +0 -1
  242. package/dist/protocol/iq/usync.js.map +0 -1
  243. package/dist/protocol/push/app-state-key-share.d.ts.map +0 -1
  244. package/dist/protocol/push/app-state-key-share.js.map +0 -1
  245. package/dist/protocol/push/call-failure.d.ts.map +0 -1
  246. package/dist/protocol/push/call-failure.js.map +0 -1
  247. package/dist/protocol/push/chatstate.d.ts.map +0 -1
  248. package/dist/protocol/push/chatstate.js.map +0 -1
  249. package/dist/protocol/push/error-stanza.d.ts.map +0 -1
  250. package/dist/protocol/push/error-stanza.js.map +0 -1
  251. package/dist/protocol/push/history-sync.d.ts.map +0 -1
  252. package/dist/protocol/push/history-sync.js.map +0 -1
  253. package/dist/protocol/push/message.d.ts.map +0 -1
  254. package/dist/protocol/push/message.js.map +0 -1
  255. package/dist/protocol/push/notification.d.ts.map +0 -1
  256. package/dist/protocol/push/notification.js.map +0 -1
  257. package/dist/protocol/push/presence.d.ts.map +0 -1
  258. package/dist/protocol/push/presence.js.map +0 -1
  259. package/dist/protocol/push/receipt.d.ts.map +0 -1
  260. package/dist/protocol/push/receipt.js.map +0 -1
  261. package/dist/protocol/signal/fake-app-state-crypto.d.ts.map +0 -1
  262. package/dist/protocol/signal/fake-app-state-crypto.js.map +0 -1
  263. package/dist/protocol/signal/fake-peer-double-ratchet.d.ts.map +0 -1
  264. package/dist/protocol/signal/fake-peer-double-ratchet.js.map +0 -1
  265. package/dist/protocol/signal/fake-peer-group-recv-session.d.ts.map +0 -1
  266. package/dist/protocol/signal/fake-peer-group-recv-session.js.map +0 -1
  267. package/dist/protocol/signal/fake-peer-identity.d.ts.map +0 -1
  268. package/dist/protocol/signal/fake-peer-identity.js.map +0 -1
  269. package/dist/protocol/signal/fake-peer-key-bundle.d.ts.map +0 -1
  270. package/dist/protocol/signal/fake-peer-key-bundle.js.map +0 -1
  271. package/dist/protocol/signal/fake-peer-recv-session.d.ts +0 -60
  272. package/dist/protocol/signal/fake-peer-recv-session.d.ts.map +0 -1
  273. package/dist/protocol/signal/fake-peer-recv-session.js +0 -284
  274. package/dist/protocol/signal/fake-peer-recv-session.js.map +0 -1
  275. package/dist/protocol/signal/fake-peer-session.d.ts +0 -87
  276. package/dist/protocol/signal/fake-peer-session.d.ts.map +0 -1
  277. package/dist/protocol/signal/fake-peer-session.js +0 -207
  278. package/dist/protocol/signal/fake-peer-session.js.map +0 -1
  279. package/dist/protocol/signal/fake-sender-key.d.ts.map +0 -1
  280. package/dist/protocol/signal/fake-sender-key.js.map +0 -1
  281. package/dist/protocol/signal/prekey-upload.d.ts.map +0 -1
  282. package/dist/protocol/signal/prekey-upload.js.map +0 -1
  283. package/dist/protocol/stream/stream-error.d.ts.map +0 -1
  284. package/dist/protocol/stream/stream-error.js.map +0 -1
  285. package/dist/state/fake-app-state-collection.d.ts.map +0 -1
  286. package/dist/state/fake-app-state-collection.js.map +0 -1
  287. package/dist/state/fake-media-store.d.ts.map +0 -1
  288. package/dist/state/fake-media-store.js.map +0 -1
  289. package/dist/transport/codec.d.ts.map +0 -1
  290. package/dist/transport/codec.js.map +0 -1
  291. package/dist/transport/crypto.d.ts.map +0 -1
  292. package/dist/transport/crypto.js.map +0 -1
  293. package/dist/transport/index.d.ts +0 -4
  294. package/dist/transport/index.d.ts.map +0 -1
  295. package/dist/transport/index.js +0 -20
  296. package/dist/transport/index.js.map +0 -1
  297. package/dist/transport/protos.d.ts.map +0 -1
  298. package/dist/transport/protos.js.map +0 -1
@@ -1,284 +0,0 @@
1
- "use strict";
2
- /**
3
- * Fake-peer-side Signal Protocol RECEIVE session.
4
- *
5
- * Decrypts inbound `PreKeySignalMessage` (`pkmsg`) and `SignalMessage`
6
- * (`msg`) ciphertexts the real `WaClient` sends to the peer. Pairs with
7
- * `FakePeerSession` (the encrypter half) so a fake peer can carry both
8
- * sides of a 1:1 signal conversation.
9
- *
10
- * Sources:
11
- * /deobfuscated/WASignal/WASignalWhitepaper.js
12
- * (initiateSessionIncoming, deriveMsgKey)
13
- * /deobfuscated/WASignal/WASignalCipher.js
14
- * /deobfuscated/pb/WASignalWhisperTextProtocol_pb.js
15
- *
16
- * Cross-checked against the lib's `initiateSessionIncoming` /
17
- * `decryptMsg` (`src/signal/session/SignalSession.ts`,
18
- * `src/signal/session/SignalRatchet.ts`).
19
- *
20
- * Scope: a single chain of pkmsg + subsequent msgs from the client. We
21
- * do NOT implement the full Double Ratchet rotation across multiple
22
- * client→server message bursts (no recv-chain-replace on new ratchet
23
- * keys). The first message uses the "Bob role" X3DH and after that we
24
- * keep deriving from the same chain key. This is enough for tests that
25
- * send 1-N messages in the same chain, which covers the common
26
- * outbound-test scenario.
27
- */
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.FakePeerRecvSession = exports.FakePeerRecvSessionError = void 0;
30
- const crypto_1 = require("../../transport/crypto");
31
- const protos_1 = require("../../transport/protos");
32
- const SIGNAL_VERSION = 3;
33
- const SIGNAL_MAC_SIZE = 8;
34
- const SIGNAL_PREFIX_FF = new Uint8Array(32).fill(0xff);
35
- const MESSAGE_KEY_LABEL = new Uint8Array([1]);
36
- const CHAIN_KEY_LABEL = new Uint8Array([2]);
37
- class FakePeerRecvSessionError extends Error {
38
- constructor(message) {
39
- super(message);
40
- this.name = 'FakePeerRecvSessionError';
41
- }
42
- }
43
- exports.FakePeerRecvSessionError = FakePeerRecvSessionError;
44
- /**
45
- * Per-(remote-identity) recv state on the fake peer side.
46
- *
47
- * The session is bootstrapped lazily on the first inbound `pkmsg` for
48
- * a given remote identity, and reused for subsequent `msg` ciphertexts
49
- * in the same Double Ratchet chain.
50
- */
51
- class FakePeerRecvSession {
52
- constructor(keyBundle) {
53
- /** 33-byte serialized remote identity pubkey (set on first pkmsg). */
54
- this.remoteIdentityPub = null;
55
- this.recvChain = null;
56
- /** Root key from the X3DH derivation, used for the first DR step. */
57
- this.bootstrapRootKey = null;
58
- this.keyBundle = keyBundle;
59
- }
60
- /**
61
- * Decrypts a `<enc type="pkmsg"/>` payload. Bootstraps the recv
62
- * session via the X3DH responder ("Bob") flow on the first call,
63
- * then derives the message key and returns the (still padded)
64
- * plaintext bytes.
65
- */
66
- async decryptPreKeyMessage(envelope) {
67
- const body = readVersionedBody(envelope, 0);
68
- const preKeyMessage = protos_1.proto.PreKeySignalMessage.decode(body);
69
- const baseKey = requireBytes(preKeyMessage.baseKey, 'baseKey');
70
- const remoteIdentity = requireBytes(preKeyMessage.identityKey, 'identityKey');
71
- const innerMessage = requireBytes(preKeyMessage.message, 'message');
72
- const signedPreKeyId = preKeyMessage.signedPreKeyId;
73
- if (signedPreKeyId === null || signedPreKeyId === undefined) {
74
- throw new FakePeerRecvSessionError('PreKeySignalMessage missing signedPreKeyId');
75
- }
76
- if (signedPreKeyId !== this.keyBundle.signedPreKey.id) {
77
- throw new FakePeerRecvSessionError(`signedPreKeyId mismatch: got ${signedPreKeyId}, expected ${this.keyBundle.signedPreKey.id}`);
78
- }
79
- const oneTimePreKeyId = preKeyMessage.preKeyId;
80
- let oneTimePrivKey = null;
81
- if (oneTimePreKeyId !== null && oneTimePreKeyId !== undefined) {
82
- const oneTimeKeyEntry = this.keyBundle.oneTimePreKeys.find((entry) => entry.id === oneTimePreKeyId);
83
- if (!oneTimeKeyEntry) {
84
- throw new FakePeerRecvSessionError(`unknown one-time preKeyId ${oneTimePreKeyId}`);
85
- }
86
- oneTimePrivKey = oneTimeKeyEntry.keyPair.privKey;
87
- }
88
- // Bob-role X3DH:
89
- // DH1 = ECDH(signedPreKey.priv, remote.identityPub)
90
- // DH2 = ECDH(identity.priv, baseKey)
91
- // DH3 = ECDH(signedPreKey.priv, baseKey)
92
- // DH4 = ECDH(oneTimePreKey.priv, baseKey) [optional]
93
- const remoteIdentityRaw = (0, crypto_1.toRawPubKey)(remoteIdentity);
94
- const baseKeyRaw = (0, crypto_1.toRawPubKey)(baseKey);
95
- const signedPriv = this.keyBundle.signedPreKey.keyPair.privKey;
96
- const identityPriv = this.keyBundle.identityKeyPair.privKey;
97
- const [dh1, dh2, dh3, dh4] = await Promise.all([
98
- crypto_1.X25519.scalarMult(signedPriv, remoteIdentityRaw),
99
- crypto_1.X25519.scalarMult(identityPriv, baseKeyRaw),
100
- crypto_1.X25519.scalarMult(signedPriv, baseKeyRaw),
101
- oneTimePrivKey
102
- ? crypto_1.X25519.scalarMult(oneTimePrivKey, baseKeyRaw)
103
- : Promise.resolve(null)
104
- ]);
105
- const sharedParts = [SIGNAL_PREFIX_FF, dh1, dh2, dh3];
106
- if (dh4)
107
- sharedParts.push(dh4);
108
- const shared = concatBytes(sharedParts);
109
- const [rootKey] = await (0, crypto_1.hkdfSplit)(shared, null, 'WhisperText');
110
- // The first inbound message kicks the Double Ratchet once: the
111
- // inner SignalMessage carries Alice's fresh sendRatchet pubkey,
112
- // which we mix with our signedPreKey privkey via calculateRatchet
113
- // to derive the recv chain key. (See SignalSession.calculateRatchet
114
- // and decryptMsgFromSession in the lib.)
115
- this.remoteIdentityPub = (0, crypto_1.toSerializedPubKey)(remoteIdentity);
116
- this.bootstrapRootKey = rootKey;
117
- return this.decryptInnerSignalMessage(innerMessage, true);
118
- }
119
- /**
120
- * Decrypts a `<enc type="msg"/>` payload. Requires the recv chain
121
- * to have been established by a prior `decryptPreKeyMessage` call.
122
- */
123
- async decryptMessage(envelope) {
124
- if (!this.recvChain) {
125
- throw new FakePeerRecvSessionError('recv session is not initialized — call decryptPreKeyMessage first');
126
- }
127
- return this.decryptInnerSignalMessage(envelope, false);
128
- }
129
- async decryptInnerSignalMessage(signalMessageBytes, isBootstrap) {
130
- if (signalMessageBytes.byteLength < 1 + SIGNAL_MAC_SIZE) {
131
- throw new FakePeerRecvSessionError('signal message too short');
132
- }
133
- const versionByte = signalMessageBytes[0];
134
- if (versionByte >>> 4 !== SIGNAL_VERSION) {
135
- throw new FakePeerRecvSessionError(`unsupported signal version ${versionByte >>> 4}`);
136
- }
137
- const macStart = signalMessageBytes.byteLength - SIGNAL_MAC_SIZE;
138
- const versionedBody = signalMessageBytes.subarray(0, macStart);
139
- const macBytes = signalMessageBytes.subarray(macStart);
140
- const protoBody = versionedBody.subarray(1);
141
- const signalMessage = protos_1.proto.SignalMessage.decode(protoBody);
142
- const ratchetKey = requireBytes(signalMessage.ratchetKey, 'ratchetKey');
143
- const counter = signalMessage.counter;
144
- if (counter === null || counter === undefined) {
145
- throw new FakePeerRecvSessionError('SignalMessage missing counter');
146
- }
147
- const ciphertext = requireBytes(signalMessage.ciphertext, 'ciphertext');
148
- // Bootstrap or reuse the recv chain.
149
- if (isBootstrap) {
150
- if (!this.bootstrapRootKey) {
151
- throw new FakePeerRecvSessionError('bootstrap rootKey missing');
152
- }
153
- // Mirror the lib's `calculateRatchet`:
154
- // sharedSecret = ECDH(signedPreKey.priv, alice.ratchetPub)
155
- // [_, chainKey] = HKDF(sharedSecret, rootKey, "WhisperRatchet")
156
- const ratchetRaw = (0, crypto_1.toRawPubKey)(ratchetKey);
157
- const ratchetShared = await crypto_1.X25519.scalarMult(this.keyBundle.signedPreKey.keyPair.privKey, ratchetRaw);
158
- const [, chainKey] = await (0, crypto_1.hkdfSplit)(ratchetShared, this.bootstrapRootKey, 'WhisperRatchet');
159
- this.recvChain = {
160
- ratchetPubKey: (0, crypto_1.toSerializedPubKey)(ratchetKey),
161
- chainKey,
162
- nextIndex: 0
163
- };
164
- this.bootstrapRootKey = null;
165
- }
166
- else if (!this.recvChain) {
167
- throw new FakePeerRecvSessionError('recv chain not bootstrapped');
168
- }
169
- else if (!uint8Equal(this.recvChain.ratchetPubKey, (0, crypto_1.toSerializedPubKey)(ratchetKey))) {
170
- throw new FakePeerRecvSessionError('recv chain ratchet rotation is not implemented in the fake peer');
171
- }
172
- // Walk the chain forward to the requested counter (no out-of-order).
173
- if (counter < this.recvChain.nextIndex) {
174
- throw new FakePeerRecvSessionError(`out-of-order recv counter ${counter} < ${this.recvChain.nextIndex}`);
175
- }
176
- let chainKey = this.recvChain.chainKey;
177
- let messageKey = null;
178
- let nextIndex = this.recvChain.nextIndex;
179
- while (nextIndex <= counter) {
180
- const derived = await deriveMessageKey(chainKey);
181
- chainKey = derived.nextChainKey;
182
- if (nextIndex === counter) {
183
- messageKey = derived.messageKey;
184
- }
185
- nextIndex += 1;
186
- }
187
- if (!messageKey) {
188
- throw new FakePeerRecvSessionError('failed to derive message key');
189
- }
190
- this.recvChain = {
191
- ratchetPubKey: this.recvChain.ratchetPubKey,
192
- chainKey,
193
- nextIndex
194
- };
195
- // Verify MAC.
196
- if (!this.remoteIdentityPub) {
197
- throw new FakePeerRecvSessionError('remoteIdentityPub not set');
198
- }
199
- const localPub = (0, crypto_1.toSerializedPubKey)(this.keyBundle.identityKeyPair.pubKey);
200
- const macInput = concatBytes([this.remoteIdentityPub, localPub, versionedBody]);
201
- const macKeyHandle = await (0, crypto_1.importHmacKey)(messageKey.macKey);
202
- const expectedFullMac = await (0, crypto_1.hmacSign)(macKeyHandle, macInput);
203
- const expectedMac = expectedFullMac.subarray(0, SIGNAL_MAC_SIZE);
204
- if (!uint8Equal(expectedMac, macBytes)) {
205
- throw new FakePeerRecvSessionError('signal message MAC mismatch');
206
- }
207
- // Decrypt the AES-CBC ciphertext.
208
- const cipherKeyHandle = await (0, crypto_1.importAesCbcKey)(messageKey.cipherKey);
209
- const padded = await (0, crypto_1.aesCbcDecrypt)(cipherKeyHandle, messageKey.iv, ciphertext);
210
- return unpadPkcs7(padded);
211
- }
212
- }
213
- exports.FakePeerRecvSession = FakePeerRecvSession;
214
- async function deriveMessageKey(chainKey) {
215
- const hmacKey = await (0, crypto_1.importHmacKey)(chainKey);
216
- const [messageInputKey, nextChainRaw] = await Promise.all([
217
- (0, crypto_1.hmacSign)(hmacKey, MESSAGE_KEY_LABEL),
218
- (0, crypto_1.hmacSign)(hmacKey, CHAIN_KEY_LABEL)
219
- ]);
220
- const expanded = await (0, crypto_1.hkdf)(messageInputKey, null, 'WhisperMessageKeys', 80);
221
- return {
222
- nextChainKey: nextChainRaw.subarray(0, 32),
223
- messageKey: {
224
- cipherKey: expanded.subarray(0, 32),
225
- macKey: expanded.subarray(32, 64),
226
- iv: expanded.subarray(64, 80)
227
- }
228
- };
229
- }
230
- function readVersionedBody(envelope, suffixLength) {
231
- if (envelope.byteLength < 1) {
232
- throw new FakePeerRecvSessionError('signal envelope is empty');
233
- }
234
- const version = envelope[0] >>> 4;
235
- if (version !== SIGNAL_VERSION) {
236
- throw new FakePeerRecvSessionError(`unsupported signal version ${version}`);
237
- }
238
- const bodyEnd = envelope.byteLength - suffixLength;
239
- if (bodyEnd <= 1) {
240
- throw new FakePeerRecvSessionError('invalid signal envelope length');
241
- }
242
- return envelope.subarray(1, bodyEnd);
243
- }
244
- function unpadPkcs7(padded) {
245
- if (padded.byteLength === 0)
246
- return padded;
247
- const padLen = padded[padded.byteLength - 1];
248
- if (padLen === 0 || padLen > 16)
249
- return padded;
250
- if (padLen > padded.byteLength)
251
- return padded;
252
- return padded.subarray(0, padded.byteLength - padLen);
253
- }
254
- function uint8Equal(a, b) {
255
- if (a.byteLength !== b.byteLength)
256
- return false;
257
- for (let i = 0; i < a.byteLength; i += 1) {
258
- if (a[i] !== b[i])
259
- return false;
260
- }
261
- return true;
262
- }
263
- function concatBytes(parts) {
264
- let total = 0;
265
- for (const p of parts)
266
- total += p.byteLength;
267
- const out = new Uint8Array(total);
268
- let offset = 0;
269
- for (const p of parts) {
270
- out.set(p, offset);
271
- offset += p.byteLength;
272
- }
273
- return out;
274
- }
275
- function requireBytes(value, label) {
276
- if (!value)
277
- throw new FakePeerRecvSessionError(`${label} missing`);
278
- return value;
279
- }
280
- // CryptoKey is referenced via the `CryptoKey` type-only import above.
281
- // The `void` is just to satisfy ts(6133) in case the file is compiled
282
- // without consumers.
283
- void null;
284
- //# sourceMappingURL=fake-peer-recv-session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-peer-recv-session.js","sourceRoot":"","sources":["../../../src/protocol/signal/fake-peer-recv-session.ts"],"names":[],"mappings":"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"}
@@ -1,87 +0,0 @@
1
- /**
2
- * Fake-peer-side Signal Protocol session.
3
- *
4
- * This is the encrypter half: a fake peer (acting as "Alice") sends messages
5
- * to the real `WaClient` (acting as "Bob"). It implements just enough of
6
- * the WhatsApp Web Signal Protocol to:
7
- *
8
- * 1. Run X3DH against the client's prekey bundle (captured from the
9
- * client's PreKey upload IQ).
10
- * 2. Maintain a sending chain key.
11
- * 3. Encrypt a plaintext into a `PreKeySignalMessage` (first message)
12
- * or `SignalMessage` (subsequent messages).
13
- *
14
- * Sources:
15
- * /deobfuscated/WASignal/WASignalWhitepaper.js (X3DH inputs)
16
- * /deobfuscated/WASignal/WASignalSessions.js (session structure)
17
- * /deobfuscated/WASignal/WASignalCipher.js (encrypt path)
18
- * /deobfuscated/pb/WASignalWhisperTextProtocol_pb.js (protobuf shapes)
19
- *
20
- * Cross-checked against the lib's `initiateSessionOutgoing` /
21
- * `encryptMsg` (`src/signal/session/SignalSession.ts`,
22
- * `src/signal/session/SignalRatchet.ts`) — the byte-level recipe is the
23
- * same; the only difference is that this fake-peer implementation does
24
- * **not** persist sessions or implement the receive ratchet (the fake
25
- * server doesn't need to handle inbound messages from the real client to
26
- * make Phase 8 work).
27
- */
28
- import { type CryptoKey, type SignalKeyPair } from '../../transport/crypto';
29
- import type { ClientPreKeyBundle } from './prekey-upload';
30
- export interface FakePeerIdentity {
31
- /** Long-term identity keypair. */
32
- readonly identityKeyPair: SignalKeyPair;
33
- /** Registration id used in PreKeySignalMessage. */
34
- readonly registrationId: number;
35
- }
36
- export declare function generateFakePeerIdentity(): Promise<FakePeerIdentity>;
37
- export declare class FakePeerSession {
38
- private readonly identity;
39
- /** 33-byte serialized peer (local) static identity public key. */
40
- private readonly localPub;
41
- /** 33-byte serialized client (remote) static identity public key. */
42
- private readonly remotePub;
43
- private sendChain;
44
- private rootKey;
45
- private firstMessageHeader;
46
- private constructor();
47
- get registrationId(): number;
48
- /**
49
- * Initiates a new outgoing session against the client's prekey bundle.
50
- *
51
- * Mirrors the X3DH initiator path of `initiateSessionOutgoing` (lib)
52
- * and the deobfuscated `WASignalSessions.initiateSessionOutgoing`:
53
- *
54
- * localOneTimeBase = generate ephemeral keypair (Alice's "base key")
55
- *
56
- * DH1 = ECDH(local.identity.priv, remote.signedPreKey.pub)
57
- * DH2 = ECDH(localOneTimeBase.priv, remote.identity.pub)
58
- * DH3 = ECDH(localOneTimeBase.priv, remote.signedPreKey.pub)
59
- * DH4 = ECDH(localOneTimeBase.priv, remote.oneTimePreKey.pub) [optional]
60
- *
61
- * secret = 0xFF*32 || DH1 || DH2 || DH3 || [DH4]
62
- * [rootKey, chainKey] = HKDF_split(secret, salt=null, info="WhisperText")
63
- *
64
- * Then a single send-ratchet kick:
65
- * sendRatchetKeyPair = generateKeyPair()
66
- * sharedSecret = ECDH(sendRatchetKeyPair.priv, remoteRatchetKey)
67
- * [rootKey, chainKey] = HKDF_split(sharedSecret, salt=rootKey, info="WhisperRatchet")
68
- *
69
- * Where remoteRatchetKey = remote.signedPreKey.pub (no separate
70
- * ratchet key in the upload IQ — this matches the lib's behavior).
71
- */
72
- static initiate(identity: FakePeerIdentity, bundle: ClientPreKeyBundle, oneTimePreKey?: {
73
- readonly keyId: number;
74
- readonly publicKey: Uint8Array;
75
- }): Promise<FakePeerSession>;
76
- /**
77
- * Encrypts a plaintext message and returns either a `pkmsg` (first
78
- * message in the session — wraps the SignalMessage in a
79
- * PreKeySignalMessage envelope) or `msg` (subsequent messages).
80
- */
81
- encrypt(plaintext: Uint8Array): Promise<{
82
- readonly type: 'pkmsg' | 'msg';
83
- readonly ciphertext: Uint8Array;
84
- }>;
85
- }
86
- export type { CryptoKey };
87
- //# sourceMappingURL=fake-peer-session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-peer-session.d.ts","sourceRoot":"","sources":["../../../src/protocol/signal/fake-peer-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAEH,KAAK,SAAS,EAOd,KAAK,aAAa,EAIrB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAQzD,MAAM,WAAW,gBAAgB;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAA;IACvC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAClC;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAM1E;AAmBD,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,kBAAkB,CAA4B;IAEtD,OAAO;IAgBP,IAAW,cAAc,IAAI,MAAM,CAElC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;WACiB,QAAQ,CACxB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAA;KAAE,GAC3E,OAAO,CAAC,eAAe,CAAC;IA0D3B;;;;OAIG;IACU,OAAO,CAChB,SAAS,EAAE,UAAU,GACtB,OAAO,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC;CAoDlF;AA4CD,YAAY,EAAE,SAAS,EAAE,CAAA"}
@@ -1,207 +0,0 @@
1
- "use strict";
2
- /**
3
- * Fake-peer-side Signal Protocol session.
4
- *
5
- * This is the encrypter half: a fake peer (acting as "Alice") sends messages
6
- * to the real `WaClient` (acting as "Bob"). It implements just enough of
7
- * the WhatsApp Web Signal Protocol to:
8
- *
9
- * 1. Run X3DH against the client's prekey bundle (captured from the
10
- * client's PreKey upload IQ).
11
- * 2. Maintain a sending chain key.
12
- * 3. Encrypt a plaintext into a `PreKeySignalMessage` (first message)
13
- * or `SignalMessage` (subsequent messages).
14
- *
15
- * Sources:
16
- * /deobfuscated/WASignal/WASignalWhitepaper.js (X3DH inputs)
17
- * /deobfuscated/WASignal/WASignalSessions.js (session structure)
18
- * /deobfuscated/WASignal/WASignalCipher.js (encrypt path)
19
- * /deobfuscated/pb/WASignalWhisperTextProtocol_pb.js (protobuf shapes)
20
- *
21
- * Cross-checked against the lib's `initiateSessionOutgoing` /
22
- * `encryptMsg` (`src/signal/session/SignalSession.ts`,
23
- * `src/signal/session/SignalRatchet.ts`) — the byte-level recipe is the
24
- * same; the only difference is that this fake-peer implementation does
25
- * **not** persist sessions or implement the receive ratchet (the fake
26
- * server doesn't need to handle inbound messages from the real client to
27
- * make Phase 8 work).
28
- */
29
- Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.FakePeerSession = void 0;
31
- exports.generateFakePeerIdentity = generateFakePeerIdentity;
32
- const crypto_1 = require("../../transport/crypto");
33
- const protos_1 = require("../../transport/protos");
34
- const SIGNAL_VERSION = 3;
35
- const SIGNAL_MAC_SIZE = 8;
36
- const SIGNAL_PREFIX_FF = new Uint8Array(32).fill(0xff);
37
- const MESSAGE_KEY_LABEL = new Uint8Array([1]);
38
- const CHAIN_KEY_LABEL = new Uint8Array([2]);
39
- async function generateFakePeerIdentity() {
40
- const identityKeyPair = await crypto_1.X25519.generateKeyPair();
41
- return {
42
- identityKeyPair,
43
- registrationId: Math.floor(Math.random() * 0x3fff) + 1
44
- };
45
- }
46
- class FakePeerSession {
47
- constructor(identity, localPub, remotePub, rootKey, sendChain, firstMessageHeader) {
48
- this.identity = identity;
49
- this.localPub = localPub;
50
- this.remotePub = remotePub;
51
- this.rootKey = rootKey;
52
- this.sendChain = sendChain;
53
- this.firstMessageHeader = firstMessageHeader;
54
- }
55
- get registrationId() {
56
- return this.identity.registrationId;
57
- }
58
- /**
59
- * Initiates a new outgoing session against the client's prekey bundle.
60
- *
61
- * Mirrors the X3DH initiator path of `initiateSessionOutgoing` (lib)
62
- * and the deobfuscated `WASignalSessions.initiateSessionOutgoing`:
63
- *
64
- * localOneTimeBase = generate ephemeral keypair (Alice's "base key")
65
- *
66
- * DH1 = ECDH(local.identity.priv, remote.signedPreKey.pub)
67
- * DH2 = ECDH(localOneTimeBase.priv, remote.identity.pub)
68
- * DH3 = ECDH(localOneTimeBase.priv, remote.signedPreKey.pub)
69
- * DH4 = ECDH(localOneTimeBase.priv, remote.oneTimePreKey.pub) [optional]
70
- *
71
- * secret = 0xFF*32 || DH1 || DH2 || DH3 || [DH4]
72
- * [rootKey, chainKey] = HKDF_split(secret, salt=null, info="WhisperText")
73
- *
74
- * Then a single send-ratchet kick:
75
- * sendRatchetKeyPair = generateKeyPair()
76
- * sharedSecret = ECDH(sendRatchetKeyPair.priv, remoteRatchetKey)
77
- * [rootKey, chainKey] = HKDF_split(sharedSecret, salt=rootKey, info="WhisperRatchet")
78
- *
79
- * Where remoteRatchetKey = remote.signedPreKey.pub (no separate
80
- * ratchet key in the upload IQ — this matches the lib's behavior).
81
- */
82
- static async initiate(identity, bundle, oneTimePreKey) {
83
- const localPub = (0, crypto_1.toSerializedPubKey)(identity.identityKeyPair.pubKey);
84
- const remoteIdentity = (0, crypto_1.toSerializedPubKey)(bundle.identityKey);
85
- const remoteSigned = (0, crypto_1.toSerializedPubKey)(bundle.signedPreKey.publicKey);
86
- const localBase = await crypto_1.X25519.generateKeyPair();
87
- const localBaseSerialized = (0, crypto_1.toSerializedPubKey)(localBase.pubKey);
88
- // Resolve which one-time prekey we're consuming. Callers normally pass
89
- // the one we want to consume; if omitted, take the first.
90
- const consumedOneTime = oneTimePreKey ?? bundle.preKeys[0];
91
- const remoteOneTime = consumedOneTime ? (0, crypto_1.toSerializedPubKey)(consumedOneTime.publicKey) : null;
92
- // X3DH DHs.
93
- const [dh1, dh2, dh3, dh4] = await Promise.all([
94
- crypto_1.X25519.scalarMult(identity.identityKeyPair.privKey, (0, crypto_1.toRawPubKey)(remoteSigned)),
95
- crypto_1.X25519.scalarMult(localBase.privKey, (0, crypto_1.toRawPubKey)(remoteIdentity)),
96
- crypto_1.X25519.scalarMult(localBase.privKey, (0, crypto_1.toRawPubKey)(remoteSigned)),
97
- remoteOneTime
98
- ? crypto_1.X25519.scalarMult(localBase.privKey, (0, crypto_1.toRawPubKey)(remoteOneTime))
99
- : Promise.resolve(null)
100
- ]);
101
- const sharedParts = [SIGNAL_PREFIX_FF, dh1, dh2, dh3];
102
- if (dh4)
103
- sharedParts.push(dh4);
104
- const shared = concatBytes(sharedParts);
105
- const [rootKey, chainKey] = await (0, crypto_1.hkdfSplit)(shared, null, 'WhisperText');
106
- // Single send-ratchet kick: generate sendRatchet, mix DH(send.priv, remoteSigned).
107
- const sendRatchet = await crypto_1.X25519.generateKeyPair();
108
- const ratchetSecret = await crypto_1.X25519.scalarMult(sendRatchet.privKey, (0, crypto_1.toRawPubKey)(remoteSigned));
109
- const [nextRootKey, sendChainKey] = await (0, crypto_1.hkdfSplit)(ratchetSecret, rootKey, 'WhisperRatchet');
110
- const sendChain = {
111
- ratchetPubKey: (0, crypto_1.toSerializedPubKey)(sendRatchet.pubKey),
112
- ratchetPrivKey: sendRatchet.privKey,
113
- chainKey: sendChainKey,
114
- nextIndex: 0
115
- };
116
- // Pin the chain key reference to silence "ts(6133): never read" — it
117
- // is read on every encrypt() invocation. (Defensive no-op.)
118
- void chainKey;
119
- return new FakePeerSession(identity, localPub, remoteIdentity, nextRootKey, sendChain, {
120
- preKeyId: consumedOneTime?.keyId,
121
- signedPreKeyId: bundle.signedPreKey.keyId,
122
- baseKey: localBaseSerialized
123
- });
124
- }
125
- /**
126
- * Encrypts a plaintext message and returns either a `pkmsg` (first
127
- * message in the session — wraps the SignalMessage in a
128
- * PreKeySignalMessage envelope) or `msg` (subsequent messages).
129
- */
130
- async encrypt(plaintext) {
131
- const { nextChainKey, messageKey } = await deriveMessageKey(this.sendChain.nextIndex, this.sendChain.chainKey);
132
- const [cipherKey, macKey] = await Promise.all([
133
- (0, crypto_1.importAesCbcKey)(messageKey.cipherKey),
134
- (0, crypto_1.importHmacKey)(messageKey.macKey)
135
- ]);
136
- const ciphertext = await (0, crypto_1.aesCbcEncrypt)(cipherKey, messageKey.iv, plaintext);
137
- const signalMessage = protos_1.proto.SignalMessage.encode({
138
- ratchetKey: this.sendChain.ratchetPubKey,
139
- counter: messageKey.index,
140
- previousCounter: 0,
141
- ciphertext
142
- }).finish();
143
- const versioned = (0, crypto_1.prependVersion)(signalMessage, SIGNAL_VERSION);
144
- const macInput = concatBytes([this.localPub, this.remotePub, versioned]);
145
- const fullMac = await (0, crypto_1.hmacSign)(macKey, macInput);
146
- const truncatedMac = fullMac.subarray(0, SIGNAL_MAC_SIZE);
147
- const inner = concatBytes([versioned, truncatedMac]);
148
- // Advance chain (single-direction; no ratchet rotation in fake peer).
149
- this.sendChain = {
150
- ...this.sendChain,
151
- chainKey: nextChainKey,
152
- nextIndex: messageKey.index + 1
153
- };
154
- // rootKey is unused after the initial kick because we never rotate
155
- // ratchets on the peer side. Keep the field for completeness.
156
- void this.rootKey;
157
- if (this.firstMessageHeader) {
158
- const header = this.firstMessageHeader;
159
- this.firstMessageHeader = null;
160
- const preKeyMessage = protos_1.proto.PreKeySignalMessage.encode({
161
- registrationId: this.identity.registrationId,
162
- preKeyId: header.preKeyId,
163
- signedPreKeyId: header.signedPreKeyId,
164
- baseKey: header.baseKey,
165
- identityKey: this.localPub,
166
- message: inner
167
- }).finish();
168
- return {
169
- type: 'pkmsg',
170
- ciphertext: (0, crypto_1.prependVersion)(preKeyMessage, SIGNAL_VERSION)
171
- };
172
- }
173
- return { type: 'msg', ciphertext: inner };
174
- }
175
- }
176
- exports.FakePeerSession = FakePeerSession;
177
- async function deriveMessageKey(index, chainKey) {
178
- const hmacKey = await (0, crypto_1.importHmacKey)(chainKey);
179
- const [messageInputKey, nextChainRaw] = await Promise.all([
180
- (0, crypto_1.hmacSign)(hmacKey, MESSAGE_KEY_LABEL),
181
- (0, crypto_1.hmacSign)(hmacKey, CHAIN_KEY_LABEL)
182
- ]);
183
- const expanded = await (0, crypto_1.hkdf)(messageInputKey, null, 'WhisperMessageKeys', 80);
184
- const messageKey = {
185
- index,
186
- cipherKey: expanded.subarray(0, 32),
187
- macKey: expanded.subarray(32, 64),
188
- iv: expanded.subarray(64, 80)
189
- };
190
- return {
191
- nextChainKey: nextChainRaw.subarray(0, 32),
192
- messageKey
193
- };
194
- }
195
- function concatBytes(parts) {
196
- let total = 0;
197
- for (const part of parts)
198
- total += part.byteLength;
199
- const out = new Uint8Array(total);
200
- let offset = 0;
201
- for (const part of parts) {
202
- out.set(part, offset);
203
- offset += part.byteLength;
204
- }
205
- return out;
206
- }
207
- //# sourceMappingURL=fake-peer-session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-peer-session.js","sourceRoot":"","sources":["../../../src/protocol/signal/fake-peer-session.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-sender-key.d.ts","sourceRoot":"","sources":["../../../src/protocol/signal/fake-sender-key.ts"],"names":[],"mappings":"AAAA,+DAA+D;AA6B/D,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,UAAU,CAAA;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACzB;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO;WAIa,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAetD,IAAW,EAAE,IAAI,MAAM,CAEtB;IAEY,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAsCnF,OAAO,CAAC,wBAAwB;CASnC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-sender-key.js","sourceRoot":"","sources":["../../../src/protocol/signal/fake-sender-key.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prekey-upload.d.ts","sourceRoot":"","sources":["../../../src/protocol/signal/prekey-upload.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAA;CACjC;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAA;CACjC;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAA;IAChC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAA;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACjD;AAED,qBAAa,sBAAuB,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAIrC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,UAAU,GAAG,kBAAkB,CAmCtE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prekey-upload.js","sourceRoot":"","sources":["../../../src/protocol/signal/prekey-upload.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-error.d.ts","sourceRoot":"","sources":["../../../src/protocol/stream/stream-error.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIvD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAK7D;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAWrD;AAED,wBAAgB,6BAA6B,IAAI,UAAU,CAW1D;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAW1D;AAED,wBAAgB,gCAAgC,IAAI,UAAU,CAW7D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-error.js","sourceRoot":"","sources":["../../../src/protocol/stream/stream-error.ts"],"names":[],"mappings":";AAAA,mEAAmE;;AAMnE,oDAKC;AAED,4DAWC;AAED,sEAWC;AAED,kDAWC;AAED,4EAWC;AA3DD,MAAM,gBAAgB,GAAG,cAAc,CAAA;AAEvC,SAAgB,oBAAoB,CAAC,IAAY;IAC7C,OAAO;QACH,GAAG,EAAE,gBAAgB;QACrB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;KAChC,CAAA;AACL,CAAC;AAED,SAAgB,wBAAwB;IACpC,OAAO;QACH,GAAG,EAAE,gBAAgB;QACrB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACL;gBACI,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;aAC9B;SACJ;KACJ,CAAA;AACL,CAAC;AAED,SAAgB,6BAA6B;IACzC,OAAO;QACH,GAAG,EAAE,gBAAgB;QACrB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACL;gBACI,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;aACpC;SACJ;KACJ,CAAA;AACL,CAAC;AAED,SAAgB,mBAAmB,CAAC,EAAU;IAC1C,OAAO;QACH,GAAG,EAAE,gBAAgB;QACrB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACL;gBACI,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,EAAE,EAAE,EAAE;aAChB;SACJ;KACJ,CAAA;AACL,CAAC;AAED,SAAgB,gCAAgC;IAC5C,OAAO;QACH,GAAG,EAAE,gBAAgB;QACrB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACL;gBACI,GAAG,EAAE,qBAAqB;gBAC1B,KAAK,EAAE,EAAE;aACZ;SACJ;KACJ,CAAA;AACL,CAAC"}