zapo-js 0.1.2 → 0.2.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 (468) hide show
  1. package/README.md +12 -4
  2. package/dist/appstate/WaAppStateCrypto.js +1 -1
  3. package/dist/appstate/WaAppStateSyncClient.js +138 -93
  4. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  5. package/dist/appstate/index.js +8 -6
  6. package/dist/appstate/utils.js +0 -5
  7. package/dist/auth/WaAuthClient.js +36 -47
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +7 -7
  9. package/dist/auth/index.js +1 -6
  10. package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
  11. package/dist/auth/pairing/WaPairingFlow.js +13 -3
  12. package/dist/client/WaClient.js +225 -101
  13. package/dist/client/WaClientFactory.js +294 -44
  14. package/dist/client/connection/WaConnectionManager.js +19 -10
  15. package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
  16. package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
  17. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
  18. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +292 -99
  19. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  20. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  21. package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
  22. package/dist/client/coordinators/WaRetryCoordinator.js +179 -27
  23. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  24. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
  25. package/dist/client/dirty.js +40 -20
  26. package/dist/client/events/devices.js +72 -0
  27. package/dist/client/events/group.js +3 -11
  28. package/dist/client/events/identity.js +22 -0
  29. package/dist/client/events/privacy-token.js +39 -0
  30. package/dist/client/history-sync.js +50 -9
  31. package/dist/client/incoming.js +37 -7
  32. package/dist/client/mailbox.js +24 -23
  33. package/dist/client/messages.js +107 -31
  34. package/dist/client/messaging/fanout.js +21 -11
  35. package/dist/client/messaging/participants.js +6 -4
  36. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  37. package/dist/client/tokens/cs-token.js +50 -0
  38. package/dist/client/tokens/tc-token.js +25 -0
  39. package/dist/crypto/core/index.js +2 -2
  40. package/dist/crypto/core/keys.js +4 -4
  41. package/dist/crypto/core/nonce.js +2 -0
  42. package/dist/crypto/core/primitives.js +0 -8
  43. package/dist/crypto/core/random.js +22 -0
  44. package/dist/crypto/curves/X25519.js +25 -6
  45. package/dist/crypto/index.js +3 -0
  46. package/dist/crypto/math/constants.js +13 -36
  47. package/dist/crypto/math/edwards.js +171 -44
  48. package/dist/crypto/math/fe.js +706 -0
  49. package/dist/crypto/math/mod.js +10 -3
  50. package/dist/esm/appstate/WaAppStateCrypto.js +1 -1
  51. package/dist/esm/appstate/WaAppStateSyncClient.js +138 -93
  52. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  53. package/dist/esm/appstate/index.js +2 -2
  54. package/dist/esm/appstate/utils.js +2 -5
  55. package/dist/esm/auth/WaAuthClient.js +36 -47
  56. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +7 -7
  57. package/dist/esm/auth/index.js +0 -2
  58. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
  59. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -4
  60. package/dist/esm/client/WaClient.js +225 -101
  61. package/dist/esm/client/WaClientFactory.js +295 -45
  62. package/dist/esm/client/connection/WaConnectionManager.js +19 -10
  63. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
  64. package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
  65. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
  66. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +295 -102
  67. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  68. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  69. package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
  70. package/dist/esm/client/coordinators/WaRetryCoordinator.js +181 -29
  71. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  72. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
  73. package/dist/esm/client/dirty.js +40 -20
  74. package/dist/esm/client/events/devices.js +68 -0
  75. package/dist/esm/client/events/group.js +3 -11
  76. package/dist/esm/client/events/identity.js +19 -0
  77. package/dist/esm/client/events/privacy-token.js +36 -0
  78. package/dist/esm/client/history-sync.js +50 -9
  79. package/dist/esm/client/incoming.js +38 -8
  80. package/dist/esm/client/mailbox.js +24 -23
  81. package/dist/esm/client/messages.js +108 -32
  82. package/dist/esm/client/messaging/fanout.js +22 -12
  83. package/dist/esm/client/messaging/participants.js +6 -4
  84. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  85. package/dist/esm/client/tokens/cs-token.js +46 -0
  86. package/dist/esm/client/tokens/tc-token.js +18 -0
  87. package/dist/esm/crypto/core/index.js +2 -2
  88. package/dist/esm/crypto/core/keys.js +1 -1
  89. package/dist/esm/crypto/core/nonce.js +2 -0
  90. package/dist/esm/crypto/core/primitives.js +0 -7
  91. package/dist/esm/crypto/core/random.js +22 -1
  92. package/dist/esm/crypto/curves/X25519.js +25 -6
  93. package/dist/esm/crypto/index.js +1 -0
  94. package/dist/esm/crypto/math/constants.js +12 -35
  95. package/dist/esm/crypto/math/edwards.js +174 -47
  96. package/dist/esm/crypto/math/fe.js +691 -0
  97. package/dist/esm/crypto/math/mod.js +10 -1
  98. package/dist/esm/index.js +1 -1
  99. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  100. package/dist/esm/infra/perf/BoundedTaskQueue.js +3 -1
  101. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  102. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  103. package/dist/esm/infra/perf/StoreLock.js +77 -0
  104. package/dist/esm/media/WaMediaCrypto.js +95 -13
  105. package/dist/esm/media/WaMediaTransferClient.js +39 -47
  106. package/dist/esm/media/constants.js +2 -1
  107. package/dist/esm/message/WaMessageClient.js +26 -19
  108. package/dist/esm/message/content.js +195 -9
  109. package/dist/esm/message/icdc.js +76 -0
  110. package/dist/esm/message/incoming.js +24 -12
  111. package/dist/esm/message/phash.js +3 -1
  112. package/dist/esm/message/reporting-token.js +14 -27
  113. package/dist/esm/protocol/appstate.js +9 -40
  114. package/dist/esm/protocol/browser.js +10 -18
  115. package/dist/esm/protocol/constants.js +5 -3
  116. package/dist/esm/protocol/defaults.js +6 -0
  117. package/dist/esm/protocol/index.js +1 -2
  118. package/dist/esm/protocol/jid.js +105 -36
  119. package/dist/esm/protocol/message.js +61 -1
  120. package/dist/esm/protocol/nodes.js +2 -0
  121. package/dist/esm/protocol/notification.js +3 -1
  122. package/dist/esm/protocol/privacy-token.js +17 -0
  123. package/dist/esm/protocol/privacy.js +55 -0
  124. package/dist/esm/protocol/stream.js +26 -1
  125. package/dist/esm/retry/codec.js +216 -0
  126. package/dist/esm/retry/constants.js +1 -1
  127. package/dist/esm/retry/index.js +2 -2
  128. package/dist/esm/retry/parse.js +50 -30
  129. package/dist/esm/retry/replay.js +11 -7
  130. package/dist/esm/retry/tracker.js +50 -12
  131. package/dist/esm/signal/api/SignalDeviceSyncApi.js +49 -32
  132. package/dist/esm/signal/api/SignalDigestSyncApi.js +13 -9
  133. package/dist/esm/signal/api/SignalIdentitySyncApi.js +26 -11
  134. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +18 -7
  135. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  136. package/dist/esm/signal/api/SignalSessionSyncApi.js +16 -7
  137. package/dist/esm/signal/api/result-map.js +10 -0
  138. package/dist/esm/signal/constants.js +0 -4
  139. package/dist/esm/signal/crypto/WaAdvSignature.js +12 -6
  140. package/dist/esm/signal/{store/sqlite.js → encoding.js} +78 -24
  141. package/dist/esm/signal/group/SenderKeyCodec.js +3 -2
  142. package/dist/esm/signal/group/SenderKeyManager.js +125 -106
  143. package/dist/esm/signal/index.js +1 -0
  144. package/dist/esm/signal/registration/keygen.js +6 -2
  145. package/dist/esm/signal/registration/utils.js +1 -0
  146. package/dist/esm/signal/session/SignalProtocol.js +150 -74
  147. package/dist/esm/signal/session/resolver.js +137 -102
  148. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  149. package/dist/esm/store/createStore.js +101 -187
  150. package/dist/esm/store/index.js +1 -10
  151. package/dist/esm/store/locks/appstate.lock.js +26 -0
  152. package/dist/esm/store/locks/auth.lock.js +15 -0
  153. package/dist/esm/store/locks/contact.lock.js +20 -0
  154. package/dist/esm/store/locks/device-list.lock.js +20 -0
  155. package/dist/esm/store/locks/message.lock.js +21 -0
  156. package/dist/esm/store/locks/participants.lock.js +20 -0
  157. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  158. package/dist/esm/store/locks/retry.lock.js +29 -0
  159. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  160. package/dist/esm/store/locks/signal.lock.js +63 -0
  161. package/dist/esm/store/locks/thread.lock.js +21 -0
  162. package/dist/esm/store/noop.store.js +1 -1
  163. package/dist/esm/store/providers/memory/appstate.store.js +22 -24
  164. package/dist/esm/store/providers/memory/device-list.store.js +10 -5
  165. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  166. package/dist/esm/store/providers/memory/retry.store.js +77 -2
  167. package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
  168. package/dist/esm/store/providers/memory/signal.store.js +36 -19
  169. package/dist/esm/transport/WaComms.js +3 -1
  170. package/dist/esm/transport/WaWebSocket.js +0 -6
  171. package/dist/esm/transport/binary/constants.js +0 -30
  172. package/dist/esm/transport/binary/decoder.js +4 -4
  173. package/dist/esm/transport/binary/encoder.js +8 -15
  174. package/dist/esm/transport/binary/index.js +0 -1
  175. package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -19
  176. package/dist/esm/transport/node/builders/business.js +129 -0
  177. package/dist/esm/transport/node/builders/global.js +370 -0
  178. package/dist/esm/transport/node/builders/index.js +5 -2
  179. package/dist/esm/transport/node/builders/message.js +63 -239
  180. package/dist/esm/transport/node/builders/pairing.js +0 -24
  181. package/dist/esm/transport/node/builders/privacy-token.js +41 -0
  182. package/dist/esm/transport/node/builders/privacy.js +48 -0
  183. package/dist/esm/transport/node/builders/profile.js +70 -0
  184. package/dist/esm/transport/node/builders/retry.js +10 -22
  185. package/dist/esm/transport/node/builders/usync.js +6 -2
  186. package/dist/esm/transport/node/helpers.js +19 -1
  187. package/dist/esm/transport/node/usync.js +3 -33
  188. package/dist/esm/transport/node/xml.js +35 -14
  189. package/dist/esm/transport/noise/WaClientPayload.js +10 -10
  190. package/dist/esm/transport/noise/WaNoiseCert.js +3 -3
  191. package/dist/esm/transport/noise/WaNoiseSession.js +64 -23
  192. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  193. package/dist/esm/transport/stream/parse.js +8 -4
  194. package/dist/esm/util/bytes.js +22 -18
  195. package/dist/esm/util/index.js +5 -0
  196. package/dist/esm/util/primitives.js +3 -2
  197. package/dist/index.js +7 -1
  198. package/dist/infra/perf/BackgroundQueue.js +482 -0
  199. package/dist/infra/perf/BoundedTaskQueue.js +3 -1
  200. package/dist/infra/perf/PromiseDedup.js +24 -0
  201. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  202. package/dist/infra/perf/StoreLock.js +81 -0
  203. package/dist/media/WaMediaCrypto.js +94 -12
  204. package/dist/media/WaMediaTransferClient.js +39 -47
  205. package/dist/media/constants.js +2 -1
  206. package/dist/message/WaMessageClient.js +26 -19
  207. package/dist/message/content.js +198 -9
  208. package/dist/message/icdc.js +81 -0
  209. package/dist/message/incoming.js +24 -12
  210. package/dist/message/phash.js +3 -1
  211. package/dist/message/reporting-token.js +14 -28
  212. package/dist/protocol/appstate.js +10 -41
  213. package/dist/protocol/browser.js +10 -18
  214. package/dist/protocol/constants.js +21 -2
  215. package/dist/protocol/defaults.js +6 -0
  216. package/dist/protocol/index.js +8 -5
  217. package/dist/protocol/jid.js +111 -36
  218. package/dist/protocol/message.js +62 -2
  219. package/dist/protocol/nodes.js +2 -0
  220. package/dist/protocol/notification.js +3 -1
  221. package/dist/protocol/privacy-token.js +20 -0
  222. package/dist/protocol/privacy.js +58 -0
  223. package/dist/protocol/stream.js +27 -2
  224. package/dist/retry/codec.js +220 -0
  225. package/dist/retry/constants.js +1 -1
  226. package/dist/retry/index.js +5 -5
  227. package/dist/retry/parse.js +51 -30
  228. package/dist/retry/replay.js +10 -6
  229. package/dist/retry/tracker.js +50 -12
  230. package/dist/signal/api/SignalDeviceSyncApi.js +48 -31
  231. package/dist/signal/api/SignalDigestSyncApi.js +13 -9
  232. package/dist/signal/api/SignalIdentitySyncApi.js +25 -10
  233. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +17 -6
  234. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  235. package/dist/signal/api/SignalSessionSyncApi.js +16 -7
  236. package/dist/signal/api/result-map.js +13 -0
  237. package/dist/signal/constants.js +1 -5
  238. package/dist/signal/crypto/WaAdvSignature.js +11 -5
  239. package/dist/signal/{store/sqlite.js → encoding.js} +79 -25
  240. package/dist/signal/group/SenderKeyCodec.js +4 -3
  241. package/dist/signal/group/SenderKeyManager.js +125 -106
  242. package/dist/signal/index.js +13 -1
  243. package/dist/signal/registration/keygen.js +6 -2
  244. package/dist/signal/registration/utils.js +1 -0
  245. package/dist/signal/session/SignalProtocol.js +150 -74
  246. package/dist/signal/session/resolver.js +135 -100
  247. package/dist/store/contracts/privacy-token.store.js +2 -0
  248. package/dist/store/createStore.js +101 -187
  249. package/dist/store/index.js +15 -33
  250. package/dist/store/locks/appstate.lock.js +29 -0
  251. package/dist/store/locks/auth.lock.js +18 -0
  252. package/dist/store/locks/contact.lock.js +23 -0
  253. package/dist/store/locks/device-list.lock.js +23 -0
  254. package/dist/store/locks/message.lock.js +24 -0
  255. package/dist/store/locks/participants.lock.js +23 -0
  256. package/dist/store/locks/privacy-token.lock.js +21 -0
  257. package/dist/store/locks/retry.lock.js +32 -0
  258. package/dist/store/locks/sender-key.lock.js +55 -0
  259. package/dist/store/locks/signal.lock.js +66 -0
  260. package/dist/store/locks/thread.lock.js +24 -0
  261. package/dist/store/noop.store.js +1 -1
  262. package/dist/store/providers/memory/appstate.store.js +22 -24
  263. package/dist/store/providers/memory/device-list.store.js +10 -5
  264. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  265. package/dist/store/providers/memory/retry.store.js +77 -2
  266. package/dist/store/providers/memory/sender-key.store.js +6 -1
  267. package/dist/store/providers/memory/signal.store.js +36 -19
  268. package/dist/transport/WaComms.js +3 -1
  269. package/dist/transport/WaWebSocket.js +0 -6
  270. package/dist/transport/binary/constants.js +1 -31
  271. package/dist/transport/binary/decoder.js +4 -4
  272. package/dist/transport/binary/encoder.js +8 -15
  273. package/dist/transport/binary/index.js +0 -4
  274. package/dist/transport/node/WaNodeOrchestrator.js +24 -18
  275. package/dist/transport/node/builders/business.js +137 -0
  276. package/dist/transport/node/builders/global.js +375 -0
  277. package/dist/transport/node/builders/index.js +18 -9
  278. package/dist/transport/node/builders/message.js +64 -245
  279. package/dist/transport/node/builders/pairing.js +0 -26
  280. package/dist/transport/node/builders/privacy-token.js +46 -0
  281. package/dist/transport/node/builders/privacy.js +55 -0
  282. package/dist/transport/node/builders/profile.js +78 -0
  283. package/dist/transport/node/builders/retry.js +9 -21
  284. package/dist/transport/node/builders/usync.js +6 -2
  285. package/dist/transport/node/helpers.js +20 -1
  286. package/dist/transport/node/usync.js +2 -32
  287. package/dist/transport/node/xml.js +35 -14
  288. package/dist/transport/noise/WaClientPayload.js +13 -13
  289. package/dist/transport/noise/WaNoiseCert.js +2 -2
  290. package/dist/transport/noise/WaNoiseSession.js +64 -23
  291. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  292. package/dist/transport/stream/parse.js +7 -3
  293. package/dist/types/appstate/encoding.d.ts +7 -0
  294. package/dist/types/appstate/index.d.ts +3 -3
  295. package/dist/types/appstate/utils.d.ts +0 -2
  296. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
  297. package/dist/types/auth/index.d.ts +0 -2
  298. package/dist/types/auth/types.d.ts +1 -0
  299. package/dist/types/client/WaClient.d.ts +27 -12
  300. package/dist/types/client/WaClientFactory.d.ts +12 -4
  301. package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
  302. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  303. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -1
  304. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +14 -0
  305. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
  306. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  307. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
  308. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +6 -0
  309. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  310. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
  311. package/dist/types/client/events/devices.d.ts +20 -0
  312. package/dist/types/client/events/identity.d.ts +9 -0
  313. package/dist/types/client/events/privacy-token.d.ts +7 -0
  314. package/dist/types/client/history-sync.d.ts +9 -6
  315. package/dist/types/client/incoming.d.ts +3 -1
  316. package/dist/types/client/index.d.ts +1 -1
  317. package/dist/types/client/mailbox.d.ts +3 -5
  318. package/dist/types/client/messages.d.ts +1 -2
  319. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  320. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  321. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  322. package/dist/types/client/types.d.ts +51 -3
  323. package/dist/types/crypto/core/index.d.ts +2 -2
  324. package/dist/types/crypto/core/nonce.d.ts +2 -0
  325. package/dist/types/crypto/core/primitives.d.ts +0 -1
  326. package/dist/types/crypto/core/random.d.ts +1 -0
  327. package/dist/types/crypto/index.d.ts +1 -0
  328. package/dist/types/crypto/math/constants.d.ts +4 -2
  329. package/dist/types/crypto/math/fe.d.ts +30 -0
  330. package/dist/types/crypto/math/mod.d.ts +0 -2
  331. package/dist/types/crypto/math/types.d.ts +11 -4
  332. package/dist/types/index.d.ts +5 -3
  333. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  334. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  335. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  336. package/dist/types/infra/perf/StoreLock.d.ts +10 -0
  337. package/dist/types/media/WaMediaCrypto.d.ts +3 -2
  338. package/dist/types/media/WaMediaTransferClient.d.ts +3 -12
  339. package/dist/types/media/constants.d.ts +1 -1
  340. package/dist/types/media/index.d.ts +1 -1
  341. package/dist/types/media/types.d.ts +10 -2
  342. package/dist/types/message/content.d.ts +8 -0
  343. package/dist/types/message/icdc.d.ts +13 -0
  344. package/dist/types/message/reporting-token.d.ts +0 -1
  345. package/dist/types/message/types.d.ts +45 -6
  346. package/dist/types/protocol/appstate.d.ts +0 -11
  347. package/dist/types/protocol/constants.d.ts +7 -3
  348. package/dist/types/protocol/defaults.d.ts +6 -0
  349. package/dist/types/protocol/index.d.ts +1 -2
  350. package/dist/types/protocol/jid.d.ts +19 -2
  351. package/dist/types/protocol/message.d.ts +60 -0
  352. package/dist/types/protocol/nodes.d.ts +2 -0
  353. package/dist/types/protocol/notification.d.ts +2 -0
  354. package/dist/types/protocol/privacy-token.d.ts +17 -0
  355. package/dist/types/protocol/privacy.d.ts +75 -0
  356. package/dist/types/protocol/stream.d.ts +30 -0
  357. package/dist/types/retry/codec.d.ts +3 -0
  358. package/dist/types/retry/index.d.ts +3 -3
  359. package/dist/types/retry/parse.d.ts +5 -2
  360. package/dist/types/retry/tracker.d.ts +1 -0
  361. package/dist/types/retry/types.d.ts +6 -1
  362. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +2 -1
  363. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
  364. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
  365. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  366. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  367. package/dist/types/signal/api/result-map.d.ts +1 -0
  368. package/dist/types/signal/constants.d.ts +0 -3
  369. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
  370. package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
  371. package/dist/types/signal/index.d.ts +2 -0
  372. package/dist/types/signal/session/SignalProtocol.d.ts +10 -4
  373. package/dist/types/signal/session/resolver.d.ts +7 -2
  374. package/dist/types/store/contracts/appstate.store.d.ts +1 -1
  375. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  376. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  377. package/dist/types/store/contracts/signal.store.d.ts +7 -0
  378. package/dist/types/store/createStore.d.ts +1 -1
  379. package/dist/types/store/index.d.ts +5 -13
  380. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  381. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  382. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  383. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  384. package/dist/types/store/locks/message.lock.d.ts +3 -0
  385. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  386. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  387. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  388. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  389. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  390. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  391. package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
  392. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  393. package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
  394. package/dist/types/store/providers/memory/signal.store.d.ts +2 -1
  395. package/dist/types/store/types.d.ts +49 -61
  396. package/dist/types/transport/WaWebSocket.d.ts +0 -1
  397. package/dist/types/transport/binary/constants.d.ts +0 -30
  398. package/dist/types/transport/binary/index.d.ts +0 -1
  399. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
  400. package/dist/types/transport/node/builders/business.d.ts +29 -0
  401. package/dist/types/transport/node/builders/global.d.ts +102 -0
  402. package/dist/types/transport/node/builders/index.d.ts +5 -2
  403. package/dist/types/transport/node/builders/message.d.ts +8 -7
  404. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  405. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  406. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  407. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  408. package/dist/types/transport/node/builders/retry.d.ts +0 -1
  409. package/dist/types/transport/node/helpers.d.ts +5 -0
  410. package/dist/types/transport/noise/WaNoiseSession.d.ts +3 -2
  411. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  412. package/dist/types/util/bytes.d.ts +1 -1
  413. package/dist/types/util/index.d.ts +5 -0
  414. package/dist/types/util/primitives.d.ts +0 -1
  415. package/dist/util/bytes.js +22 -18
  416. package/dist/util/index.js +23 -0
  417. package/dist/util/primitives.js +2 -2
  418. package/package.json +29 -7
  419. package/proto/index.js +1 -1
  420. package/dist/crypto/core/constants.js +0 -4
  421. package/dist/esm/crypto/core/constants.js +0 -1
  422. package/dist/esm/retry/outbound.js +0 -82
  423. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  424. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -250
  425. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  426. package/dist/esm/store/providers/sqlite/connection.js +0 -245
  427. package/dist/esm/store/providers/sqlite/contact.store.js +0 -74
  428. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -127
  429. package/dist/esm/store/providers/sqlite/message.store.js +0 -132
  430. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  431. package/dist/esm/store/providers/sqlite/participants.store.js +0 -77
  432. package/dist/esm/store/providers/sqlite/retry.store.js +0 -141
  433. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -198
  434. package/dist/esm/store/providers/sqlite/signal.store.js +0 -435
  435. package/dist/esm/store/providers/sqlite/table-names.js +0 -107
  436. package/dist/esm/store/providers/sqlite/thread.store.js +0 -85
  437. package/dist/retry/outbound.js +0 -87
  438. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  439. package/dist/store/providers/sqlite/appstate.store.js +0 -254
  440. package/dist/store/providers/sqlite/auth.store.js +0 -180
  441. package/dist/store/providers/sqlite/connection.js +0 -281
  442. package/dist/store/providers/sqlite/contact.store.js +0 -78
  443. package/dist/store/providers/sqlite/device-list.store.js +0 -131
  444. package/dist/store/providers/sqlite/message.store.js +0 -136
  445. package/dist/store/providers/sqlite/migrations.js +0 -350
  446. package/dist/store/providers/sqlite/participants.store.js +0 -81
  447. package/dist/store/providers/sqlite/retry.store.js +0 -145
  448. package/dist/store/providers/sqlite/sender-key.store.js +0 -202
  449. package/dist/store/providers/sqlite/signal.store.js +0 -439
  450. package/dist/store/providers/sqlite/table-names.js +0 -113
  451. package/dist/store/providers/sqlite/thread.store.js +0 -89
  452. package/dist/types/appstate/store/sqlite.d.ts +0 -7
  453. package/dist/types/crypto/core/constants.d.ts +0 -1
  454. package/dist/types/retry/outbound.d.ts +0 -4
  455. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  456. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -17
  457. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  458. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  459. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -12
  460. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -15
  461. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -13
  462. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  463. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -12
  464. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -15
  465. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -24
  466. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -53
  467. package/dist/types/store/providers/sqlite/table-names.d.ts +0 -5
  468. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -13
@@ -0,0 +1,706 @@
1
+ "use strict";
2
+ /**
3
+ * Field element arithmetic for GF(2^255-19).
4
+ * Representation: 16 limbs of 16 bits in Float64Array (tweetnacl style).
5
+ * Hot-path operations are allocation-free using pre-allocated temporaries.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.fe = fe;
9
+ exports.feCopy = feCopy;
10
+ exports.feFromBigInt = feFromBigInt;
11
+ exports.feToBigInt = feToBigInt;
12
+ exports.feFromBytes = feFromBytes;
13
+ exports.fePack = fePack;
14
+ exports.feAdd = feAdd;
15
+ exports.feSub = feSub;
16
+ exports.feNeg = feNeg;
17
+ exports.feMul = feMul;
18
+ exports.feSqr = feSqr;
19
+ exports.feSqrN = feSqrN;
20
+ exports.feInv = feInv;
21
+ function fe() {
22
+ return new Float64Array(16);
23
+ }
24
+ function feCopy(o, a) {
25
+ o.set(a);
26
+ }
27
+ function feFromBigInt(n) {
28
+ const o = fe();
29
+ for (let i = 0; i < 16; i++) {
30
+ o[i] = Number(n & 0xffffn);
31
+ n >>= 16n;
32
+ }
33
+ return o;
34
+ }
35
+ function feToBigInt(a) {
36
+ const bytes = new Uint8Array(32);
37
+ fePack(bytes, a);
38
+ let r = 0n;
39
+ for (let i = 31; i >= 0; i--) {
40
+ r = (r << 8n) | BigInt(bytes[i]);
41
+ }
42
+ return r;
43
+ }
44
+ function feFromBytes(o, s) {
45
+ for (let i = 0; i < 16; i++) {
46
+ o[i] = s[2 * i] | (s[2 * i + 1] << 8);
47
+ }
48
+ o[15] &= 0x7fff;
49
+ }
50
+ function feCarry(o) {
51
+ let c = 1;
52
+ for (let i = 0; i < 16; i++) {
53
+ const v = o[i] + c + 65535;
54
+ c = Math.floor(v / 65536);
55
+ o[i] = v - c * 65536;
56
+ }
57
+ o[0] += c - 1 + 37 * (c - 1);
58
+ }
59
+ function feSel(p, q, b) {
60
+ const c = ~(b - 1);
61
+ for (let i = 0; i < 16; i++) {
62
+ const t = c & (p[i] ^ q[i]);
63
+ p[i] ^= t;
64
+ q[i] ^= t;
65
+ }
66
+ }
67
+ // Pre-allocated temporaries for fePack (safe: JS is single-threaded)
68
+ const _packT = fe();
69
+ const _packM = fe();
70
+ function fePack(o, n) {
71
+ const t = _packT;
72
+ const m = _packM;
73
+ feCopy(t, n);
74
+ feCarry(t);
75
+ feCarry(t);
76
+ feCarry(t);
77
+ for (let j = 0; j < 2; j++) {
78
+ m[0] = t[0] - 0xffed;
79
+ for (let i = 1; i < 15; i++) {
80
+ m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);
81
+ m[i - 1] &= 0xffff;
82
+ }
83
+ m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);
84
+ const b = (m[15] >> 16) & 1;
85
+ m[14] &= 0xffff;
86
+ feSel(t, m, 1 - b);
87
+ }
88
+ for (let i = 0; i < 16; i++) {
89
+ o[2 * i] = t[i] & 0xff;
90
+ o[2 * i + 1] = t[i] >> 8;
91
+ }
92
+ }
93
+ function feAdd(o, a, b) {
94
+ for (let i = 0; i < 16; i++)
95
+ o[i] = a[i] + b[i];
96
+ }
97
+ function feSub(o, a, b) {
98
+ for (let i = 0; i < 16; i++)
99
+ o[i] = a[i] - b[i];
100
+ }
101
+ function feNeg(o, a) {
102
+ for (let i = 0; i < 16; i++)
103
+ o[i] = -a[i];
104
+ }
105
+ /**
106
+ * Fully unrolled field multiplication with folded reduction.
107
+ * Computes o = a * b mod (2^255-19) using negacyclic convolution:
108
+ * t[i] = Σ a[j]*b[i-j] (direct) + 38 * Σ a[j]*b[i+16-j] (wrapped)
109
+ * All values in local variables for register allocation.
110
+ */
111
+ function feMul(o, a, b) {
112
+ const a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];
113
+ const a4 = a[4], a5 = a[5], a6 = a[6], a7 = a[7];
114
+ const a8 = a[8], a9 = a[9], a10 = a[10], a11 = a[11];
115
+ const a12 = a[12], a13 = a[13], a14 = a[14], a15 = a[15];
116
+ const b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
117
+ const b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7];
118
+ const b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11];
119
+ const b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15];
120
+ const v1 = 38 * b1, v2 = 38 * b2, v3 = 38 * b3, v4 = 38 * b4;
121
+ const v5 = 38 * b5, v6 = 38 * b6, v7 = 38 * b7, v8 = 38 * b8;
122
+ const v9 = 38 * b9, v10 = 38 * b10, v11 = 38 * b11, v12 = 38 * b12;
123
+ const v13 = 38 * b13, v14 = 38 * b14, v15 = 38 * b15;
124
+ let t0 = a0 * b0 +
125
+ a1 * v15 +
126
+ a2 * v14 +
127
+ a3 * v13 +
128
+ a4 * v12 +
129
+ a5 * v11 +
130
+ a6 * v10 +
131
+ a7 * v9 +
132
+ a8 * v8 +
133
+ a9 * v7 +
134
+ a10 * v6 +
135
+ a11 * v5 +
136
+ a12 * v4 +
137
+ a13 * v3 +
138
+ a14 * v2 +
139
+ a15 * v1;
140
+ let t1 = a0 * b1 +
141
+ a1 * b0 +
142
+ a2 * v15 +
143
+ a3 * v14 +
144
+ a4 * v13 +
145
+ a5 * v12 +
146
+ a6 * v11 +
147
+ a7 * v10 +
148
+ a8 * v9 +
149
+ a9 * v8 +
150
+ a10 * v7 +
151
+ a11 * v6 +
152
+ a12 * v5 +
153
+ a13 * v4 +
154
+ a14 * v3 +
155
+ a15 * v2;
156
+ let t2 = a0 * b2 +
157
+ a1 * b1 +
158
+ a2 * b0 +
159
+ a3 * v15 +
160
+ a4 * v14 +
161
+ a5 * v13 +
162
+ a6 * v12 +
163
+ a7 * v11 +
164
+ a8 * v10 +
165
+ a9 * v9 +
166
+ a10 * v8 +
167
+ a11 * v7 +
168
+ a12 * v6 +
169
+ a13 * v5 +
170
+ a14 * v4 +
171
+ a15 * v3;
172
+ let t3 = a0 * b3 +
173
+ a1 * b2 +
174
+ a2 * b1 +
175
+ a3 * b0 +
176
+ a4 * v15 +
177
+ a5 * v14 +
178
+ a6 * v13 +
179
+ a7 * v12 +
180
+ a8 * v11 +
181
+ a9 * v10 +
182
+ a10 * v9 +
183
+ a11 * v8 +
184
+ a12 * v7 +
185
+ a13 * v6 +
186
+ a14 * v5 +
187
+ a15 * v4;
188
+ let t4 = a0 * b4 +
189
+ a1 * b3 +
190
+ a2 * b2 +
191
+ a3 * b1 +
192
+ a4 * b0 +
193
+ a5 * v15 +
194
+ a6 * v14 +
195
+ a7 * v13 +
196
+ a8 * v12 +
197
+ a9 * v11 +
198
+ a10 * v10 +
199
+ a11 * v9 +
200
+ a12 * v8 +
201
+ a13 * v7 +
202
+ a14 * v6 +
203
+ a15 * v5;
204
+ let t5 = a0 * b5 +
205
+ a1 * b4 +
206
+ a2 * b3 +
207
+ a3 * b2 +
208
+ a4 * b1 +
209
+ a5 * b0 +
210
+ a6 * v15 +
211
+ a7 * v14 +
212
+ a8 * v13 +
213
+ a9 * v12 +
214
+ a10 * v11 +
215
+ a11 * v10 +
216
+ a12 * v9 +
217
+ a13 * v8 +
218
+ a14 * v7 +
219
+ a15 * v6;
220
+ let t6 = a0 * b6 +
221
+ a1 * b5 +
222
+ a2 * b4 +
223
+ a3 * b3 +
224
+ a4 * b2 +
225
+ a5 * b1 +
226
+ a6 * b0 +
227
+ a7 * v15 +
228
+ a8 * v14 +
229
+ a9 * v13 +
230
+ a10 * v12 +
231
+ a11 * v11 +
232
+ a12 * v10 +
233
+ a13 * v9 +
234
+ a14 * v8 +
235
+ a15 * v7;
236
+ let t7 = a0 * b7 +
237
+ a1 * b6 +
238
+ a2 * b5 +
239
+ a3 * b4 +
240
+ a4 * b3 +
241
+ a5 * b2 +
242
+ a6 * b1 +
243
+ a7 * b0 +
244
+ a8 * v15 +
245
+ a9 * v14 +
246
+ a10 * v13 +
247
+ a11 * v12 +
248
+ a12 * v11 +
249
+ a13 * v10 +
250
+ a14 * v9 +
251
+ a15 * v8;
252
+ let t8 = a0 * b8 +
253
+ a1 * b7 +
254
+ a2 * b6 +
255
+ a3 * b5 +
256
+ a4 * b4 +
257
+ a5 * b3 +
258
+ a6 * b2 +
259
+ a7 * b1 +
260
+ a8 * b0 +
261
+ a9 * v15 +
262
+ a10 * v14 +
263
+ a11 * v13 +
264
+ a12 * v12 +
265
+ a13 * v11 +
266
+ a14 * v10 +
267
+ a15 * v9;
268
+ let t9 = a0 * b9 +
269
+ a1 * b8 +
270
+ a2 * b7 +
271
+ a3 * b6 +
272
+ a4 * b5 +
273
+ a5 * b4 +
274
+ a6 * b3 +
275
+ a7 * b2 +
276
+ a8 * b1 +
277
+ a9 * b0 +
278
+ a10 * v15 +
279
+ a11 * v14 +
280
+ a12 * v13 +
281
+ a13 * v12 +
282
+ a14 * v11 +
283
+ a15 * v10;
284
+ let t10 = a0 * b10 +
285
+ a1 * b9 +
286
+ a2 * b8 +
287
+ a3 * b7 +
288
+ a4 * b6 +
289
+ a5 * b5 +
290
+ a6 * b4 +
291
+ a7 * b3 +
292
+ a8 * b2 +
293
+ a9 * b1 +
294
+ a10 * b0 +
295
+ a11 * v15 +
296
+ a12 * v14 +
297
+ a13 * v13 +
298
+ a14 * v12 +
299
+ a15 * v11;
300
+ let t11 = a0 * b11 +
301
+ a1 * b10 +
302
+ a2 * b9 +
303
+ a3 * b8 +
304
+ a4 * b7 +
305
+ a5 * b6 +
306
+ a6 * b5 +
307
+ a7 * b4 +
308
+ a8 * b3 +
309
+ a9 * b2 +
310
+ a10 * b1 +
311
+ a11 * b0 +
312
+ a12 * v15 +
313
+ a13 * v14 +
314
+ a14 * v13 +
315
+ a15 * v12;
316
+ let t12 = a0 * b12 +
317
+ a1 * b11 +
318
+ a2 * b10 +
319
+ a3 * b9 +
320
+ a4 * b8 +
321
+ a5 * b7 +
322
+ a6 * b6 +
323
+ a7 * b5 +
324
+ a8 * b4 +
325
+ a9 * b3 +
326
+ a10 * b2 +
327
+ a11 * b1 +
328
+ a12 * b0 +
329
+ a13 * v15 +
330
+ a14 * v14 +
331
+ a15 * v13;
332
+ let t13 = a0 * b13 +
333
+ a1 * b12 +
334
+ a2 * b11 +
335
+ a3 * b10 +
336
+ a4 * b9 +
337
+ a5 * b8 +
338
+ a6 * b7 +
339
+ a7 * b6 +
340
+ a8 * b5 +
341
+ a9 * b4 +
342
+ a10 * b3 +
343
+ a11 * b2 +
344
+ a12 * b1 +
345
+ a13 * b0 +
346
+ a14 * v15 +
347
+ a15 * v14;
348
+ let t14 = a0 * b14 +
349
+ a1 * b13 +
350
+ a2 * b12 +
351
+ a3 * b11 +
352
+ a4 * b10 +
353
+ a5 * b9 +
354
+ a6 * b8 +
355
+ a7 * b7 +
356
+ a8 * b6 +
357
+ a9 * b5 +
358
+ a10 * b4 +
359
+ a11 * b3 +
360
+ a12 * b2 +
361
+ a13 * b1 +
362
+ a14 * b0 +
363
+ a15 * v15;
364
+ let t15 = a0 * b15 +
365
+ a1 * b14 +
366
+ a2 * b13 +
367
+ a3 * b12 +
368
+ a4 * b11 +
369
+ a5 * b10 +
370
+ a6 * b9 +
371
+ a7 * b8 +
372
+ a8 * b7 +
373
+ a9 * b6 +
374
+ a10 * b5 +
375
+ a11 * b4 +
376
+ a12 * b3 +
377
+ a13 * b2 +
378
+ a14 * b1 +
379
+ a15 * b0;
380
+ // Carry chain round 1
381
+ let c = Math.floor(t0 / 65536);
382
+ t0 -= c * 65536;
383
+ t1 += c;
384
+ c = Math.floor(t1 / 65536);
385
+ t1 -= c * 65536;
386
+ t2 += c;
387
+ c = Math.floor(t2 / 65536);
388
+ t2 -= c * 65536;
389
+ t3 += c;
390
+ c = Math.floor(t3 / 65536);
391
+ t3 -= c * 65536;
392
+ t4 += c;
393
+ c = Math.floor(t4 / 65536);
394
+ t4 -= c * 65536;
395
+ t5 += c;
396
+ c = Math.floor(t5 / 65536);
397
+ t5 -= c * 65536;
398
+ t6 += c;
399
+ c = Math.floor(t6 / 65536);
400
+ t6 -= c * 65536;
401
+ t7 += c;
402
+ c = Math.floor(t7 / 65536);
403
+ t7 -= c * 65536;
404
+ t8 += c;
405
+ c = Math.floor(t8 / 65536);
406
+ t8 -= c * 65536;
407
+ t9 += c;
408
+ c = Math.floor(t9 / 65536);
409
+ t9 -= c * 65536;
410
+ t10 += c;
411
+ c = Math.floor(t10 / 65536);
412
+ t10 -= c * 65536;
413
+ t11 += c;
414
+ c = Math.floor(t11 / 65536);
415
+ t11 -= c * 65536;
416
+ t12 += c;
417
+ c = Math.floor(t12 / 65536);
418
+ t12 -= c * 65536;
419
+ t13 += c;
420
+ c = Math.floor(t13 / 65536);
421
+ t13 -= c * 65536;
422
+ t14 += c;
423
+ c = Math.floor(t14 / 65536);
424
+ t14 -= c * 65536;
425
+ t15 += c;
426
+ c = Math.floor(t15 / 65536);
427
+ t15 -= c * 65536;
428
+ t0 += 38 * c;
429
+ // Carry chain round 2
430
+ c = Math.floor(t0 / 65536);
431
+ t0 -= c * 65536;
432
+ t1 += c;
433
+ c = Math.floor(t1 / 65536);
434
+ t1 -= c * 65536;
435
+ t2 += c;
436
+ c = Math.floor(t2 / 65536);
437
+ t2 -= c * 65536;
438
+ t3 += c;
439
+ c = Math.floor(t3 / 65536);
440
+ t3 -= c * 65536;
441
+ t4 += c;
442
+ c = Math.floor(t4 / 65536);
443
+ t4 -= c * 65536;
444
+ t5 += c;
445
+ c = Math.floor(t5 / 65536);
446
+ t5 -= c * 65536;
447
+ t6 += c;
448
+ c = Math.floor(t6 / 65536);
449
+ t6 -= c * 65536;
450
+ t7 += c;
451
+ c = Math.floor(t7 / 65536);
452
+ t7 -= c * 65536;
453
+ t8 += c;
454
+ c = Math.floor(t8 / 65536);
455
+ t8 -= c * 65536;
456
+ t9 += c;
457
+ c = Math.floor(t9 / 65536);
458
+ t9 -= c * 65536;
459
+ t10 += c;
460
+ c = Math.floor(t10 / 65536);
461
+ t10 -= c * 65536;
462
+ t11 += c;
463
+ c = Math.floor(t11 / 65536);
464
+ t11 -= c * 65536;
465
+ t12 += c;
466
+ c = Math.floor(t12 / 65536);
467
+ t12 -= c * 65536;
468
+ t13 += c;
469
+ c = Math.floor(t13 / 65536);
470
+ t13 -= c * 65536;
471
+ t14 += c;
472
+ c = Math.floor(t14 / 65536);
473
+ t14 -= c * 65536;
474
+ t15 += c;
475
+ c = Math.floor(t15 / 65536);
476
+ t15 -= c * 65536;
477
+ t0 += 38 * c;
478
+ o[0] = t0;
479
+ o[1] = t1;
480
+ o[2] = t2;
481
+ o[3] = t3;
482
+ o[4] = t4;
483
+ o[5] = t5;
484
+ o[6] = t6;
485
+ o[7] = t7;
486
+ o[8] = t8;
487
+ o[9] = t9;
488
+ o[10] = t10;
489
+ o[11] = t11;
490
+ o[12] = t12;
491
+ o[13] = t13;
492
+ o[14] = t14;
493
+ o[15] = t15;
494
+ }
495
+ /**
496
+ * Fully unrolled field squaring with folded reduction and symmetry.
497
+ * Exploits a[j]*a[k] == a[k]*a[j] to halve off-diagonal multiplications.
498
+ * Combined with negacyclic reduction: wrapped terms use a38[k] = 38*a[k].
499
+ */
500
+ function feSqr(o, a) {
501
+ const a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];
502
+ const a4 = a[4], a5 = a[5], a6 = a[6], a7 = a[7];
503
+ const a8 = a[8], a9 = a[9], a10 = a[10], a11 = a[11];
504
+ const a12 = a[12], a13 = a[13], a14 = a[14], a15 = a[15];
505
+ const v8 = 38 * a8, v9 = 38 * a9, v10 = 38 * a10, v11 = 38 * a11;
506
+ const v12 = 38 * a12, v13 = 38 * a13, v14 = 38 * a14, v15 = 38 * a15;
507
+ let t0 = a0 * a0 +
508
+ 2 * (a1 * v15 + a2 * v14 + a3 * v13 + a4 * v12 + a5 * v11 + a6 * v10 + a7 * v9) +
509
+ a8 * v8;
510
+ let t1 = 2 * (a0 * a1 + a2 * v15 + a3 * v14 + a4 * v13 + a5 * v12 + a6 * v11 + a7 * v10 + a8 * v9);
511
+ let t2 = a1 * a1 +
512
+ 2 * (a0 * a2 + a3 * v15 + a4 * v14 + a5 * v13 + a6 * v12 + a7 * v11 + a8 * v10) +
513
+ a9 * v9;
514
+ let t3 = 2 * (a0 * a3 + a1 * a2 + a4 * v15 + a5 * v14 + a6 * v13 + a7 * v12 + a8 * v11 + a9 * v10);
515
+ let t4 = a2 * a2 +
516
+ 2 * (a0 * a4 + a1 * a3 + a5 * v15 + a6 * v14 + a7 * v13 + a8 * v12 + a9 * v11) +
517
+ a10 * v10;
518
+ let t5 = 2 * (a0 * a5 + a1 * a4 + a2 * a3 + a6 * v15 + a7 * v14 + a8 * v13 + a9 * v12 + a10 * v11);
519
+ let t6 = a3 * a3 +
520
+ 2 * (a0 * a6 + a1 * a5 + a2 * a4 + a7 * v15 + a8 * v14 + a9 * v13 + a10 * v12) +
521
+ a11 * v11;
522
+ let t7 = 2 * (a0 * a7 + a1 * a6 + a2 * a5 + a3 * a4 + a8 * v15 + a9 * v14 + a10 * v13 + a11 * v12);
523
+ let t8 = a4 * a4 +
524
+ 2 * (a0 * a8 + a1 * a7 + a2 * a6 + a3 * a5 + a9 * v15 + a10 * v14 + a11 * v13) +
525
+ a12 * v12;
526
+ let t9 = 2 * (a0 * a9 + a1 * a8 + a2 * a7 + a3 * a6 + a4 * a5 + a10 * v15 + a11 * v14 + a12 * v13);
527
+ let t10 = a5 * a5 +
528
+ 2 * (a0 * a10 + a1 * a9 + a2 * a8 + a3 * a7 + a4 * a6 + a11 * v15 + a12 * v14) +
529
+ a13 * v13;
530
+ let t11 = 2 * (a0 * a11 + a1 * a10 + a2 * a9 + a3 * a8 + a4 * a7 + a5 * a6 + a12 * v15 + a13 * v14);
531
+ let t12 = a6 * a6 +
532
+ 2 * (a0 * a12 + a1 * a11 + a2 * a10 + a3 * a9 + a4 * a8 + a5 * a7 + a13 * v15) +
533
+ a14 * v14;
534
+ let t13 = 2 * (a0 * a13 + a1 * a12 + a2 * a11 + a3 * a10 + a4 * a9 + a5 * a8 + a6 * a7 + a14 * v15);
535
+ let t14 = a7 * a7 +
536
+ 2 * (a0 * a14 + a1 * a13 + a2 * a12 + a3 * a11 + a4 * a10 + a5 * a9 + a6 * a8) +
537
+ a15 * v15;
538
+ let t15 = 2 * (a0 * a15 + a1 * a14 + a2 * a13 + a3 * a12 + a4 * a11 + a5 * a10 + a6 * a9 + a7 * a8);
539
+ // Carry chain round 1
540
+ let c = Math.floor(t0 / 65536);
541
+ t0 -= c * 65536;
542
+ t1 += c;
543
+ c = Math.floor(t1 / 65536);
544
+ t1 -= c * 65536;
545
+ t2 += c;
546
+ c = Math.floor(t2 / 65536);
547
+ t2 -= c * 65536;
548
+ t3 += c;
549
+ c = Math.floor(t3 / 65536);
550
+ t3 -= c * 65536;
551
+ t4 += c;
552
+ c = Math.floor(t4 / 65536);
553
+ t4 -= c * 65536;
554
+ t5 += c;
555
+ c = Math.floor(t5 / 65536);
556
+ t5 -= c * 65536;
557
+ t6 += c;
558
+ c = Math.floor(t6 / 65536);
559
+ t6 -= c * 65536;
560
+ t7 += c;
561
+ c = Math.floor(t7 / 65536);
562
+ t7 -= c * 65536;
563
+ t8 += c;
564
+ c = Math.floor(t8 / 65536);
565
+ t8 -= c * 65536;
566
+ t9 += c;
567
+ c = Math.floor(t9 / 65536);
568
+ t9 -= c * 65536;
569
+ t10 += c;
570
+ c = Math.floor(t10 / 65536);
571
+ t10 -= c * 65536;
572
+ t11 += c;
573
+ c = Math.floor(t11 / 65536);
574
+ t11 -= c * 65536;
575
+ t12 += c;
576
+ c = Math.floor(t12 / 65536);
577
+ t12 -= c * 65536;
578
+ t13 += c;
579
+ c = Math.floor(t13 / 65536);
580
+ t13 -= c * 65536;
581
+ t14 += c;
582
+ c = Math.floor(t14 / 65536);
583
+ t14 -= c * 65536;
584
+ t15 += c;
585
+ c = Math.floor(t15 / 65536);
586
+ t15 -= c * 65536;
587
+ t0 += 38 * c;
588
+ // Carry chain round 2
589
+ c = Math.floor(t0 / 65536);
590
+ t0 -= c * 65536;
591
+ t1 += c;
592
+ c = Math.floor(t1 / 65536);
593
+ t1 -= c * 65536;
594
+ t2 += c;
595
+ c = Math.floor(t2 / 65536);
596
+ t2 -= c * 65536;
597
+ t3 += c;
598
+ c = Math.floor(t3 / 65536);
599
+ t3 -= c * 65536;
600
+ t4 += c;
601
+ c = Math.floor(t4 / 65536);
602
+ t4 -= c * 65536;
603
+ t5 += c;
604
+ c = Math.floor(t5 / 65536);
605
+ t5 -= c * 65536;
606
+ t6 += c;
607
+ c = Math.floor(t6 / 65536);
608
+ t6 -= c * 65536;
609
+ t7 += c;
610
+ c = Math.floor(t7 / 65536);
611
+ t7 -= c * 65536;
612
+ t8 += c;
613
+ c = Math.floor(t8 / 65536);
614
+ t8 -= c * 65536;
615
+ t9 += c;
616
+ c = Math.floor(t9 / 65536);
617
+ t9 -= c * 65536;
618
+ t10 += c;
619
+ c = Math.floor(t10 / 65536);
620
+ t10 -= c * 65536;
621
+ t11 += c;
622
+ c = Math.floor(t11 / 65536);
623
+ t11 -= c * 65536;
624
+ t12 += c;
625
+ c = Math.floor(t12 / 65536);
626
+ t12 -= c * 65536;
627
+ t13 += c;
628
+ c = Math.floor(t13 / 65536);
629
+ t13 -= c * 65536;
630
+ t14 += c;
631
+ c = Math.floor(t14 / 65536);
632
+ t14 -= c * 65536;
633
+ t15 += c;
634
+ c = Math.floor(t15 / 65536);
635
+ t15 -= c * 65536;
636
+ t0 += 38 * c;
637
+ o[0] = t0;
638
+ o[1] = t1;
639
+ o[2] = t2;
640
+ o[3] = t3;
641
+ o[4] = t4;
642
+ o[5] = t5;
643
+ o[6] = t6;
644
+ o[7] = t7;
645
+ o[8] = t8;
646
+ o[9] = t9;
647
+ o[10] = t10;
648
+ o[11] = t11;
649
+ o[12] = t12;
650
+ o[13] = t13;
651
+ o[14] = t14;
652
+ o[15] = t15;
653
+ }
654
+ function feSqrN(o, a, n) {
655
+ feCopy(o, a);
656
+ for (let i = 0; i < n; i++) {
657
+ feSqr(o, o);
658
+ }
659
+ }
660
+ // Pre-allocated temporaries for feInv (safe: JS is single-threaded)
661
+ const _inv0 = fe();
662
+ const _inv1 = fe();
663
+ const _inv2 = fe();
664
+ const _inv3 = fe();
665
+ function feInv(o, a) {
666
+ const t0 = _inv0;
667
+ const t1 = _inv1;
668
+ const t2 = _inv2;
669
+ const t3 = _inv3;
670
+ // a^2
671
+ feSqr(t0, a);
672
+ // a^8
673
+ feSqrN(t1, t0, 2);
674
+ // a^9
675
+ feMul(t1, a, t1);
676
+ // a^11
677
+ feMul(t0, t0, t1);
678
+ // a^22
679
+ feSqr(t2, t0);
680
+ // a^(2^5-1)
681
+ feMul(t1, t1, t2);
682
+ feSqrN(t2, t1, 5);
683
+ // a^(2^10-1)
684
+ feMul(t1, t2, t1);
685
+ feSqrN(t2, t1, 10);
686
+ // a^(2^20-1)
687
+ feMul(t2, t2, t1);
688
+ feSqrN(t3, t2, 20);
689
+ // a^(2^40-1)
690
+ feMul(t2, t3, t2);
691
+ feSqrN(t2, t2, 10);
692
+ // a^(2^50-1)
693
+ feMul(t1, t2, t1);
694
+ feSqrN(t2, t1, 50);
695
+ // a^(2^100-1)
696
+ feMul(t2, t2, t1);
697
+ feSqrN(t3, t2, 100);
698
+ // a^(2^200-1)
699
+ feMul(t2, t3, t2);
700
+ feSqrN(t2, t2, 50);
701
+ // a^(2^250-1)
702
+ feMul(t1, t2, t1);
703
+ feSqrN(t1, t1, 5);
704
+ // a^(2^255-21) = a^(p-2)
705
+ feMul(o, t1, t0);
706
+ }