@sempdev/semp 0.4.3

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 (559) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/brief/address.d.ts +77 -0
  4. package/dist/brief/address.d.ts.map +1 -0
  5. package/dist/brief/address.js +217 -0
  6. package/dist/brief/address.js.map +1 -0
  7. package/dist/brief/brief.d.ts +75 -0
  8. package/dist/brief/brief.d.ts.map +1 -0
  9. package/dist/brief/brief.js +56 -0
  10. package/dist/brief/brief.js.map +1 -0
  11. package/dist/brief/index.d.ts +11 -0
  12. package/dist/brief/index.d.ts.map +1 -0
  13. package/dist/brief/index.js +11 -0
  14. package/dist/brief/index.js.map +1 -0
  15. package/dist/canonical/index.d.ts +8 -0
  16. package/dist/canonical/index.d.ts.map +1 -0
  17. package/dist/canonical/index.js +8 -0
  18. package/dist/canonical/index.js.map +1 -0
  19. package/dist/canonical/marshal.d.ts +35 -0
  20. package/dist/canonical/marshal.d.ts.map +1 -0
  21. package/dist/canonical/marshal.js +107 -0
  22. package/dist/canonical/marshal.js.map +1 -0
  23. package/dist/clockskew/index.d.ts +52 -0
  24. package/dist/clockskew/index.d.ts.map +1 -0
  25. package/dist/clockskew/index.js +62 -0
  26. package/dist/clockskew/index.js.map +1 -0
  27. package/dist/closure/closure.d.ts +106 -0
  28. package/dist/closure/closure.d.ts.map +1 -0
  29. package/dist/closure/closure.js +152 -0
  30. package/dist/closure/closure.js.map +1 -0
  31. package/dist/closure/driver.d.ts +103 -0
  32. package/dist/closure/driver.d.ts.map +1 -0
  33. package/dist/closure/driver.js +126 -0
  34. package/dist/closure/driver.js.map +1 -0
  35. package/dist/closure/index.d.ts +13 -0
  36. package/dist/closure/index.d.ts.map +1 -0
  37. package/dist/closure/index.js +13 -0
  38. package/dist/closure/index.js.map +1 -0
  39. package/dist/closure/store.d.ts +80 -0
  40. package/dist/closure/store.d.ts.map +1 -0
  41. package/dist/closure/store.js +89 -0
  42. package/dist/closure/store.js.map +1 -0
  43. package/dist/crypto/aead.d.ts +29 -0
  44. package/dist/crypto/aead.d.ts.map +1 -0
  45. package/dist/crypto/aead.js +48 -0
  46. package/dist/crypto/aead.js.map +1 -0
  47. package/dist/crypto/argon2.d.ts +20 -0
  48. package/dist/crypto/argon2.d.ts.map +1 -0
  49. package/dist/crypto/argon2.js +28 -0
  50. package/dist/crypto/argon2.js.map +1 -0
  51. package/dist/crypto/index.d.ts +14 -0
  52. package/dist/crypto/index.d.ts.map +1 -0
  53. package/dist/crypto/index.js +14 -0
  54. package/dist/crypto/index.js.map +1 -0
  55. package/dist/crypto/kdf.d.ts +96 -0
  56. package/dist/crypto/kdf.d.ts.map +1 -0
  57. package/dist/crypto/kdf.js +122 -0
  58. package/dist/crypto/kdf.js.map +1 -0
  59. package/dist/crypto/kem.d.ts +85 -0
  60. package/dist/crypto/kem.d.ts.map +1 -0
  61. package/dist/crypto/kem.js +130 -0
  62. package/dist/crypto/kem.js.map +1 -0
  63. package/dist/crypto/mac.d.ts +19 -0
  64. package/dist/crypto/mac.d.ts.map +1 -0
  65. package/dist/crypto/mac.js +32 -0
  66. package/dist/crypto/mac.js.map +1 -0
  67. package/dist/delivery/ack.d.ts +125 -0
  68. package/dist/delivery/ack.d.ts.map +1 -0
  69. package/dist/delivery/ack.js +141 -0
  70. package/dist/delivery/ack.js.map +1 -0
  71. package/dist/delivery/blocklist.d.ts +87 -0
  72. package/dist/delivery/blocklist.d.ts.map +1 -0
  73. package/dist/delivery/blocklist.js +107 -0
  74. package/dist/delivery/blocklist.js.map +1 -0
  75. package/dist/delivery/cancel.d.ts +60 -0
  76. package/dist/delivery/cancel.d.ts.map +1 -0
  77. package/dist/delivery/cancel.js +43 -0
  78. package/dist/delivery/cancel.js.map +1 -0
  79. package/dist/delivery/disposition.d.ts +106 -0
  80. package/dist/delivery/disposition.d.ts.map +1 -0
  81. package/dist/delivery/disposition.js +105 -0
  82. package/dist/delivery/disposition.js.map +1 -0
  83. package/dist/delivery/fetch.d.ts +59 -0
  84. package/dist/delivery/fetch.d.ts.map +1 -0
  85. package/dist/delivery/fetch.js +47 -0
  86. package/dist/delivery/fetch.js.map +1 -0
  87. package/dist/delivery/forwarder.d.ts +106 -0
  88. package/dist/delivery/forwarder.d.ts.map +1 -0
  89. package/dist/delivery/forwarder.js +251 -0
  90. package/dist/delivery/forwarder.js.map +1 -0
  91. package/dist/delivery/inbox.d.ts +42 -0
  92. package/dist/delivery/inbox.d.ts.map +1 -0
  93. package/dist/delivery/inbox.js +68 -0
  94. package/dist/delivery/inbox.js.map +1 -0
  95. package/dist/delivery/index.d.ts +31 -0
  96. package/dist/delivery/index.d.ts.map +1 -0
  97. package/dist/delivery/index.js +31 -0
  98. package/dist/delivery/index.js.map +1 -0
  99. package/dist/delivery/internalroute.d.ts +50 -0
  100. package/dist/delivery/internalroute.d.ts.map +1 -0
  101. package/dist/delivery/internalroute.js +23 -0
  102. package/dist/delivery/internalroute.js.map +1 -0
  103. package/dist/delivery/pipeline.d.ts +153 -0
  104. package/dist/delivery/pipeline.d.ts.map +1 -0
  105. package/dist/delivery/pipeline.js +356 -0
  106. package/dist/delivery/pipeline.js.map +1 -0
  107. package/dist/delivery/policy_state.d.ts +105 -0
  108. package/dist/delivery/policy_state.d.ts.map +1 -0
  109. package/dist/delivery/policy_state.js +293 -0
  110. package/dist/delivery/policy_state.js.map +1 -0
  111. package/dist/delivery/queue.d.ts +47 -0
  112. package/dist/delivery/queue.d.ts.map +1 -0
  113. package/dist/delivery/queue.js +33 -0
  114. package/dist/delivery/queue.js.map +1 -0
  115. package/dist/delivery/receipt.d.ts +137 -0
  116. package/dist/delivery/receipt.d.ts.map +1 -0
  117. package/dist/delivery/receipt.js +181 -0
  118. package/dist/delivery/receipt.js.map +1 -0
  119. package/dist/delivery/receipt_store.d.ts +81 -0
  120. package/dist/delivery/receipt_store.d.ts.map +1 -0
  121. package/dist/delivery/receipt_store.js +74 -0
  122. package/dist/delivery/receipt_store.js.map +1 -0
  123. package/dist/delivery/retry.d.ts +78 -0
  124. package/dist/delivery/retry.d.ts.map +1 -0
  125. package/dist/delivery/retry.js +132 -0
  126. package/dist/delivery/retry.js.map +1 -0
  127. package/dist/delivery/scheduler.d.ts +156 -0
  128. package/dist/delivery/scheduler.d.ts.map +1 -0
  129. package/dist/delivery/scheduler.js +349 -0
  130. package/dist/delivery/scheduler.js.map +1 -0
  131. package/dist/delivery/stage_partition.d.ts +87 -0
  132. package/dist/delivery/stage_partition.d.ts.map +1 -0
  133. package/dist/delivery/stage_partition.js +122 -0
  134. package/dist/delivery/stage_partition.js.map +1 -0
  135. package/dist/delivery/staged_runner.d.ts +100 -0
  136. package/dist/delivery/staged_runner.d.ts.map +1 -0
  137. package/dist/delivery/staged_runner.js +277 -0
  138. package/dist/delivery/staged_runner.js.map +1 -0
  139. package/dist/delivery/submission.d.ts +72 -0
  140. package/dist/delivery/submission.d.ts.map +1 -0
  141. package/dist/delivery/submission.js +58 -0
  142. package/dist/delivery/submission.js.map +1 -0
  143. package/dist/delivery/sync.d.ts +68 -0
  144. package/dist/delivery/sync.d.ts.map +1 -0
  145. package/dist/delivery/sync.js +99 -0
  146. package/dist/delivery/sync.js.map +1 -0
  147. package/dist/delivery/user_policy.d.ts +74 -0
  148. package/dist/delivery/user_policy.d.ts.map +1 -0
  149. package/dist/delivery/user_policy.js +140 -0
  150. package/dist/delivery/user_policy.js.map +1 -0
  151. package/dist/discovery/cache.d.ts +37 -0
  152. package/dist/discovery/cache.d.ts.map +1 -0
  153. package/dist/discovery/cache.js +45 -0
  154. package/dist/discovery/cache.js.map +1 -0
  155. package/dist/discovery/configuration.d.ts +97 -0
  156. package/dist/discovery/configuration.d.ts.map +1 -0
  157. package/dist/discovery/configuration.js +146 -0
  158. package/dist/discovery/configuration.js.map +1 -0
  159. package/dist/discovery/dns.d.ts +56 -0
  160. package/dist/discovery/dns.d.ts.map +1 -0
  161. package/dist/discovery/dns.js +120 -0
  162. package/dist/discovery/dns.js.map +1 -0
  163. package/dist/discovery/domain_keys.d.ts +62 -0
  164. package/dist/discovery/domain_keys.d.ts.map +1 -0
  165. package/dist/discovery/domain_keys.js +89 -0
  166. package/dist/discovery/domain_keys.js.map +1 -0
  167. package/dist/discovery/index.d.ts +19 -0
  168. package/dist/discovery/index.d.ts.map +1 -0
  169. package/dist/discovery/index.js +19 -0
  170. package/dist/discovery/index.js.map +1 -0
  171. package/dist/discovery/lookup.d.ts +72 -0
  172. package/dist/discovery/lookup.d.ts.map +1 -0
  173. package/dist/discovery/lookup.js +121 -0
  174. package/dist/discovery/lookup.js.map +1 -0
  175. package/dist/discovery/onion.d.ts +34 -0
  176. package/dist/discovery/onion.d.ts.map +1 -0
  177. package/dist/discovery/onion.js +61 -0
  178. package/dist/discovery/onion.js.map +1 -0
  179. package/dist/discovery/partition.d.ts +96 -0
  180. package/dist/discovery/partition.d.ts.map +1 -0
  181. package/dist/discovery/partition.js +247 -0
  182. package/dist/discovery/partition.js.map +1 -0
  183. package/dist/discovery/resolver.d.ts +113 -0
  184. package/dist/discovery/resolver.d.ts.map +1 -0
  185. package/dist/discovery/resolver.js +176 -0
  186. package/dist/discovery/resolver.js.map +1 -0
  187. package/dist/discovery/txt.d.ts +39 -0
  188. package/dist/discovery/txt.d.ts.map +1 -0
  189. package/dist/discovery/txt.js +71 -0
  190. package/dist/discovery/txt.js.map +1 -0
  191. package/dist/enclosure/forwarding.d.ts +128 -0
  192. package/dist/enclosure/forwarding.d.ts.map +1 -0
  193. package/dist/enclosure/forwarding.js +119 -0
  194. package/dist/enclosure/forwarding.js.map +1 -0
  195. package/dist/enclosure/index.d.ts +11 -0
  196. package/dist/enclosure/index.d.ts.map +1 -0
  197. package/dist/enclosure/index.js +11 -0
  198. package/dist/enclosure/index.js.map +1 -0
  199. package/dist/envelope/buckets.d.ts +38 -0
  200. package/dist/envelope/buckets.d.ts.map +1 -0
  201. package/dist/envelope/buckets.js +73 -0
  202. package/dist/envelope/buckets.js.map +1 -0
  203. package/dist/envelope/canonical.d.ts +28 -0
  204. package/dist/envelope/canonical.d.ts.map +1 -0
  205. package/dist/envelope/canonical.js +54 -0
  206. package/dist/envelope/canonical.js.map +1 -0
  207. package/dist/envelope/compose.d.ts +171 -0
  208. package/dist/envelope/compose.d.ts.map +1 -0
  209. package/dist/envelope/compose.js +237 -0
  210. package/dist/envelope/compose.js.map +1 -0
  211. package/dist/envelope/encode.d.ts +41 -0
  212. package/dist/envelope/encode.d.ts.map +1 -0
  213. package/dist/envelope/encode.js +69 -0
  214. package/dist/envelope/encode.js.map +1 -0
  215. package/dist/envelope/index.d.ts +20 -0
  216. package/dist/envelope/index.d.ts.map +1 -0
  217. package/dist/envelope/index.js +20 -0
  218. package/dist/envelope/index.js.map +1 -0
  219. package/dist/envelope/open_any.d.ts +48 -0
  220. package/dist/envelope/open_any.d.ts.map +1 -0
  221. package/dist/envelope/open_any.js +81 -0
  222. package/dist/envelope/open_any.js.map +1 -0
  223. package/dist/envelope/open_verified.d.ts +59 -0
  224. package/dist/envelope/open_verified.d.ts.map +1 -0
  225. package/dist/envelope/open_verified.js +67 -0
  226. package/dist/envelope/open_verified.js.map +1 -0
  227. package/dist/envelope/padding.d.ts +55 -0
  228. package/dist/envelope/padding.d.ts.map +1 -0
  229. package/dist/envelope/padding.js +162 -0
  230. package/dist/envelope/padding.js.map +1 -0
  231. package/dist/envelope/rejection.d.ts +22 -0
  232. package/dist/envelope/rejection.d.ts.map +1 -0
  233. package/dist/envelope/rejection.js +30 -0
  234. package/dist/envelope/rejection.js.map +1 -0
  235. package/dist/envelope/sendtime.d.ts +49 -0
  236. package/dist/envelope/sendtime.d.ts.map +1 -0
  237. package/dist/envelope/sendtime.js +87 -0
  238. package/dist/envelope/sendtime.js.map +1 -0
  239. package/dist/envelope/verify.d.ts +29 -0
  240. package/dist/envelope/verify.d.ts.map +1 -0
  241. package/dist/envelope/verify.js +90 -0
  242. package/dist/envelope/verify.js.map +1 -0
  243. package/dist/extensions/index.d.ts +7 -0
  244. package/dist/extensions/index.d.ts.map +1 -0
  245. package/dist/extensions/index.js +7 -0
  246. package/dist/extensions/index.js.map +1 -0
  247. package/dist/extensions/limits.d.ts +101 -0
  248. package/dist/extensions/limits.d.ts.map +1 -0
  249. package/dist/extensions/limits.js +175 -0
  250. package/dist/extensions/limits.js.map +1 -0
  251. package/dist/handshake/abort.d.ts +49 -0
  252. package/dist/handshake/abort.d.ts.map +1 -0
  253. package/dist/handshake/abort.js +82 -0
  254. package/dist/handshake/abort.js.map +1 -0
  255. package/dist/handshake/capabilities.d.ts +46 -0
  256. package/dist/handshake/capabilities.d.ts.map +1 -0
  257. package/dist/handshake/capabilities.js +114 -0
  258. package/dist/handshake/capabilities.js.map +1 -0
  259. package/dist/handshake/client_state.d.ts +186 -0
  260. package/dist/handshake/client_state.d.ts.map +1 -0
  261. package/dist/handshake/client_state.js +520 -0
  262. package/dist/handshake/client_state.js.map +1 -0
  263. package/dist/handshake/confirm.d.ts +21 -0
  264. package/dist/handshake/confirm.d.ts.map +1 -0
  265. package/dist/handshake/confirm.js +27 -0
  266. package/dist/handshake/confirm.js.map +1 -0
  267. package/dist/handshake/driver.d.ts +126 -0
  268. package/dist/handshake/driver.d.ts.map +1 -0
  269. package/dist/handshake/driver.js +251 -0
  270. package/dist/handshake/driver.js.map +1 -0
  271. package/dist/handshake/federation.d.ts +365 -0
  272. package/dist/handshake/federation.d.ts.map +1 -0
  273. package/dist/handshake/federation.js +664 -0
  274. package/dist/handshake/federation.js.map +1 -0
  275. package/dist/handshake/first_contact.d.ts +57 -0
  276. package/dist/handshake/first_contact.d.ts.map +1 -0
  277. package/dist/handshake/first_contact.js +124 -0
  278. package/dist/handshake/first_contact.js.map +1 -0
  279. package/dist/handshake/identity.d.ts +101 -0
  280. package/dist/handshake/identity.d.ts.map +1 -0
  281. package/dist/handshake/identity.js +117 -0
  282. package/dist/handshake/identity.js.map +1 -0
  283. package/dist/handshake/index.d.ts +21 -0
  284. package/dist/handshake/index.d.ts.map +1 -0
  285. package/dist/handshake/index.js +21 -0
  286. package/dist/handshake/index.js.map +1 -0
  287. package/dist/handshake/messages.d.ts +176 -0
  288. package/dist/handshake/messages.d.ts.map +1 -0
  289. package/dist/handshake/messages.js +125 -0
  290. package/dist/handshake/messages.js.map +1 -0
  291. package/dist/handshake/pow.d.ts +53 -0
  292. package/dist/handshake/pow.d.ts.map +1 -0
  293. package/dist/handshake/pow.js +142 -0
  294. package/dist/handshake/pow.js.map +1 -0
  295. package/dist/handshake/resume_driver.d.ts +56 -0
  296. package/dist/handshake/resume_driver.d.ts.map +1 -0
  297. package/dist/handshake/resume_driver.js +75 -0
  298. package/dist/handshake/resume_driver.js.map +1 -0
  299. package/dist/handshake/server.d.ts +112 -0
  300. package/dist/handshake/server.d.ts.map +1 -0
  301. package/dist/handshake/server.js +247 -0
  302. package/dist/handshake/server.js.map +1 -0
  303. package/dist/handshake/server_state.d.ts +102 -0
  304. package/dist/handshake/server_state.d.ts.map +1 -0
  305. package/dist/handshake/server_state.js +278 -0
  306. package/dist/handshake/server_state.js.map +1 -0
  307. package/dist/index.d.ts +33 -0
  308. package/dist/index.d.ts.map +1 -0
  309. package/dist/index.js +33 -0
  310. package/dist/index.js.map +1 -0
  311. package/dist/keys/compromise.d.ts +118 -0
  312. package/dist/keys/compromise.d.ts.map +1 -0
  313. package/dist/keys/compromise.js +218 -0
  314. package/dist/keys/compromise.js.map +1 -0
  315. package/dist/keys/device_certificate.d.ts +166 -0
  316. package/dist/keys/device_certificate.d.ts.map +1 -0
  317. package/dist/keys/device_certificate.js +328 -0
  318. package/dist/keys/device_certificate.js.map +1 -0
  319. package/dist/keys/device_records.d.ts +175 -0
  320. package/dist/keys/device_records.d.ts.map +1 -0
  321. package/dist/keys/device_records.js +418 -0
  322. package/dist/keys/device_records.js.map +1 -0
  323. package/dist/keys/directory_cache.d.ts +64 -0
  324. package/dist/keys/directory_cache.d.ts.map +1 -0
  325. package/dist/keys/directory_cache.js +98 -0
  326. package/dist/keys/directory_cache.js.map +1 -0
  327. package/dist/keys/directory_state.d.ts +79 -0
  328. package/dist/keys/directory_state.d.ts.map +1 -0
  329. package/dist/keys/directory_state.js +155 -0
  330. package/dist/keys/directory_state.js.map +1 -0
  331. package/dist/keys/index.d.ts +18 -0
  332. package/dist/keys/index.d.ts.map +1 -0
  333. package/dist/keys/index.js +18 -0
  334. package/dist/keys/index.js.map +1 -0
  335. package/dist/keys/key_revocation.d.ts +61 -0
  336. package/dist/keys/key_revocation.d.ts.map +1 -0
  337. package/dist/keys/key_revocation.js +88 -0
  338. package/dist/keys/key_revocation.js.map +1 -0
  339. package/dist/keys/request.d.ts +124 -0
  340. package/dist/keys/request.d.ts.map +1 -0
  341. package/dist/keys/request.js +130 -0
  342. package/dist/keys/request.js.map +1 -0
  343. package/dist/keys/sign.d.ts +49 -0
  344. package/dist/keys/sign.d.ts.map +1 -0
  345. package/dist/keys/sign.js +80 -0
  346. package/dist/keys/sign.js.map +1 -0
  347. package/dist/keys/signed.d.ts +80 -0
  348. package/dist/keys/signed.d.ts.map +1 -0
  349. package/dist/keys/signed.js +138 -0
  350. package/dist/keys/signed.js.map +1 -0
  351. package/dist/keys/store.d.ts +138 -0
  352. package/dist/keys/store.d.ts.map +1 -0
  353. package/dist/keys/store.js +107 -0
  354. package/dist/keys/store.js.map +1 -0
  355. package/dist/largeattachment/crypto.d.ts +47 -0
  356. package/dist/largeattachment/crypto.d.ts.map +1 -0
  357. package/dist/largeattachment/crypto.js +235 -0
  358. package/dist/largeattachment/crypto.js.map +1 -0
  359. package/dist/largeattachment/enclosure.d.ts +48 -0
  360. package/dist/largeattachment/enclosure.d.ts.map +1 -0
  361. package/dist/largeattachment/enclosure.js +102 -0
  362. package/dist/largeattachment/enclosure.js.map +1 -0
  363. package/dist/largeattachment/index.d.ts +15 -0
  364. package/dist/largeattachment/index.d.ts.map +1 -0
  365. package/dist/largeattachment/index.js +15 -0
  366. package/dist/largeattachment/index.js.map +1 -0
  367. package/dist/largeattachment/store.d.ts +36 -0
  368. package/dist/largeattachment/store.d.ts.map +1 -0
  369. package/dist/largeattachment/store.js +37 -0
  370. package/dist/largeattachment/store.js.map +1 -0
  371. package/dist/largeattachment/types.d.ts +56 -0
  372. package/dist/largeattachment/types.d.ts.map +1 -0
  373. package/dist/largeattachment/types.js +31 -0
  374. package/dist/largeattachment/types.js.map +1 -0
  375. package/dist/largeattachment/upload.d.ts +62 -0
  376. package/dist/largeattachment/upload.d.ts.map +1 -0
  377. package/dist/largeattachment/upload.js +166 -0
  378. package/dist/largeattachment/upload.js.map +1 -0
  379. package/dist/migration/index.d.ts +17 -0
  380. package/dist/migration/index.d.ts.map +1 -0
  381. package/dist/migration/index.js +17 -0
  382. package/dist/migration/index.js.map +1 -0
  383. package/dist/migration/lockout.d.ts +48 -0
  384. package/dist/migration/lockout.d.ts.map +1 -0
  385. package/dist/migration/lockout.js +57 -0
  386. package/dist/migration/lockout.js.map +1 -0
  387. package/dist/migration/migration.d.ts +48 -0
  388. package/dist/migration/migration.d.ts.map +1 -0
  389. package/dist/migration/migration.js +58 -0
  390. package/dist/migration/migration.js.map +1 -0
  391. package/dist/migration/notice.d.ts +33 -0
  392. package/dist/migration/notice.d.ts.map +1 -0
  393. package/dist/migration/notice.js +85 -0
  394. package/dist/migration/notice.js.map +1 -0
  395. package/dist/migration/orchestrate.d.ts +109 -0
  396. package/dist/migration/orchestrate.d.ts.map +1 -0
  397. package/dist/migration/orchestrate.js +212 -0
  398. package/dist/migration/orchestrate.js.map +1 -0
  399. package/dist/migration/publication_store.d.ts +34 -0
  400. package/dist/migration/publication_store.d.ts.map +1 -0
  401. package/dist/migration/publication_store.js +44 -0
  402. package/dist/migration/publication_store.js.map +1 -0
  403. package/dist/migration/sign.d.ts +65 -0
  404. package/dist/migration/sign.d.ts.map +1 -0
  405. package/dist/migration/sign.js +331 -0
  406. package/dist/migration/sign.js.map +1 -0
  407. package/dist/migration/types.d.ts +92 -0
  408. package/dist/migration/types.d.ts.map +1 -0
  409. package/dist/migration/types.js +26 -0
  410. package/dist/migration/types.js.map +1 -0
  411. package/dist/reasoncodes.d.ts +42 -0
  412. package/dist/reasoncodes.d.ts.map +1 -0
  413. package/dist/reasoncodes.js +80 -0
  414. package/dist/reasoncodes.js.map +1 -0
  415. package/dist/recovery/bundle.d.ts +34 -0
  416. package/dist/recovery/bundle.d.ts.map +1 -0
  417. package/dist/recovery/bundle.js +144 -0
  418. package/dist/recovery/bundle.js.map +1 -0
  419. package/dist/recovery/bundle_crypto.d.ts +60 -0
  420. package/dist/recovery/bundle_crypto.d.ts.map +1 -0
  421. package/dist/recovery/bundle_crypto.js +179 -0
  422. package/dist/recovery/bundle_crypto.js.map +1 -0
  423. package/dist/recovery/bundle_store.d.ts +57 -0
  424. package/dist/recovery/bundle_store.d.ts.map +1 -0
  425. package/dist/recovery/bundle_store.js +104 -0
  426. package/dist/recovery/bundle_store.js.map +1 -0
  427. package/dist/recovery/index.d.ts +19 -0
  428. package/dist/recovery/index.d.ts.map +1 -0
  429. package/dist/recovery/index.js +19 -0
  430. package/dist/recovery/index.js.map +1 -0
  431. package/dist/recovery/manifest_crosscheck.d.ts +59 -0
  432. package/dist/recovery/manifest_crosscheck.d.ts.map +1 -0
  433. package/dist/recovery/manifest_crosscheck.js +59 -0
  434. package/dist/recovery/manifest_crosscheck.js.map +1 -0
  435. package/dist/recovery/shamir.d.ts +51 -0
  436. package/dist/recovery/shamir.d.ts.map +1 -0
  437. package/dist/recovery/shamir.js +181 -0
  438. package/dist/recovery/shamir.js.map +1 -0
  439. package/dist/recovery/sign.d.ts +61 -0
  440. package/dist/recovery/sign.d.ts.map +1 -0
  441. package/dist/recovery/sign.js +359 -0
  442. package/dist/recovery/sign.js.map +1 -0
  443. package/dist/recovery/types.d.ts +180 -0
  444. package/dist/recovery/types.d.ts.map +1 -0
  445. package/dist/recovery/types.js +31 -0
  446. package/dist/recovery/types.js.map +1 -0
  447. package/dist/reputation/abuse_report.d.ts +62 -0
  448. package/dist/reputation/abuse_report.d.ts.map +1 -0
  449. package/dist/reputation/abuse_report.js +111 -0
  450. package/dist/reputation/abuse_report.js.map +1 -0
  451. package/dist/reputation/bucketize.d.ts +31 -0
  452. package/dist/reputation/bucketize.d.ts.map +1 -0
  453. package/dist/reputation/bucketize.js +77 -0
  454. package/dist/reputation/bucketize.js.map +1 -0
  455. package/dist/reputation/gossip.d.ts +24 -0
  456. package/dist/reputation/gossip.d.ts.map +1 -0
  457. package/dist/reputation/gossip.js +64 -0
  458. package/dist/reputation/gossip.js.map +1 -0
  459. package/dist/reputation/gossip_fetch.d.ts +64 -0
  460. package/dist/reputation/gossip_fetch.d.ts.map +1 -0
  461. package/dist/reputation/gossip_fetch.js +114 -0
  462. package/dist/reputation/gossip_fetch.js.map +1 -0
  463. package/dist/reputation/index.d.ts +20 -0
  464. package/dist/reputation/index.d.ts.map +1 -0
  465. package/dist/reputation/index.js +20 -0
  466. package/dist/reputation/index.js.map +1 -0
  467. package/dist/reputation/observation_store.d.ts +67 -0
  468. package/dist/reputation/observation_store.d.ts.map +1 -0
  469. package/dist/reputation/observation_store.js +171 -0
  470. package/dist/reputation/observation_store.js.map +1 -0
  471. package/dist/reputation/pow.d.ts +91 -0
  472. package/dist/reputation/pow.d.ts.map +1 -0
  473. package/dist/reputation/pow.js +209 -0
  474. package/dist/reputation/pow.js.map +1 -0
  475. package/dist/reputation/sign.d.ts +40 -0
  476. package/dist/reputation/sign.d.ts.map +1 -0
  477. package/dist/reputation/sign.js +202 -0
  478. package/dist/reputation/sign.js.map +1 -0
  479. package/dist/reputation/types.d.ts +133 -0
  480. package/dist/reputation/types.d.ts.map +1 -0
  481. package/dist/reputation/types.js +33 -0
  482. package/dist/reputation/types.js.map +1 -0
  483. package/dist/reputation/whois.d.ts +25 -0
  484. package/dist/reputation/whois.d.ts.map +1 -0
  485. package/dist/reputation/whois.js +20 -0
  486. package/dist/reputation/whois.js.map +1 -0
  487. package/dist/seal/index.d.ts +8 -0
  488. package/dist/seal/index.d.ts.map +1 -0
  489. package/dist/seal/index.js +8 -0
  490. package/dist/seal/index.js.map +1 -0
  491. package/dist/seal/wrap.d.ts +74 -0
  492. package/dist/seal/wrap.d.ts.map +1 -0
  493. package/dist/seal/wrap.js +213 -0
  494. package/dist/seal/wrap.js.map +1 -0
  495. package/dist/session/dispatcher.d.ts +65 -0
  496. package/dist/session/dispatcher.d.ts.map +1 -0
  497. package/dist/session/dispatcher.js +96 -0
  498. package/dist/session/dispatcher.js.map +1 -0
  499. package/dist/session/index.d.ts +15 -0
  500. package/dist/session/index.d.ts.map +1 -0
  501. package/dist/session/index.js +15 -0
  502. package/dist/session/index.js.map +1 -0
  503. package/dist/session/rekey.d.ts +108 -0
  504. package/dist/session/rekey.d.ts.map +1 -0
  505. package/dist/session/rekey.js +207 -0
  506. package/dist/session/rekey.js.map +1 -0
  507. package/dist/session/rekey_seal.d.ts +66 -0
  508. package/dist/session/rekey_seal.d.ts.map +1 -0
  509. package/dist/session/rekey_seal.js +153 -0
  510. package/dist/session/rekey_seal.js.map +1 -0
  511. package/dist/session/resume.d.ts +125 -0
  512. package/dist/session/resume.d.ts.map +1 -0
  513. package/dist/session/resume.js +263 -0
  514. package/dist/session/resume.js.map +1 -0
  515. package/dist/session/session.d.ts +136 -0
  516. package/dist/session/session.d.ts.map +1 -0
  517. package/dist/session/session.js +188 -0
  518. package/dist/session/session.js.map +1 -0
  519. package/dist/transparency/index.d.ts +13 -0
  520. package/dist/transparency/index.d.ts.map +1 -0
  521. package/dist/transparency/index.js +13 -0
  522. package/dist/transparency/index.js.map +1 -0
  523. package/dist/transparency/log.d.ts +61 -0
  524. package/dist/transparency/log.d.ts.map +1 -0
  525. package/dist/transparency/log.js +133 -0
  526. package/dist/transparency/log.js.map +1 -0
  527. package/dist/transparency/merkle.d.ts +59 -0
  528. package/dist/transparency/merkle.d.ts.map +1 -0
  529. package/dist/transparency/merkle.js +314 -0
  530. package/dist/transparency/merkle.js.map +1 -0
  531. package/dist/transparency/sign.d.ts +48 -0
  532. package/dist/transparency/sign.d.ts.map +1 -0
  533. package/dist/transparency/sign.js +140 -0
  534. package/dist/transparency/sign.js.map +1 -0
  535. package/dist/transparency/types.d.ts +97 -0
  536. package/dist/transparency/types.d.ts.map +1 -0
  537. package/dist/transparency/types.js +25 -0
  538. package/dist/transparency/types.js.map +1 -0
  539. package/dist/transport/h2.d.ts +163 -0
  540. package/dist/transport/h2.d.ts.map +1 -0
  541. package/dist/transport/h2.js +397 -0
  542. package/dist/transport/h2.js.map +1 -0
  543. package/dist/transport/index.d.ts +15 -0
  544. package/dist/transport/index.d.ts.map +1 -0
  545. package/dist/transport/index.js +15 -0
  546. package/dist/transport/index.js.map +1 -0
  547. package/dist/transport/memory.d.ts +21 -0
  548. package/dist/transport/memory.d.ts.map +1 -0
  549. package/dist/transport/memory.js +112 -0
  550. package/dist/transport/memory.js.map +1 -0
  551. package/dist/transport/transport.d.ts +54 -0
  552. package/dist/transport/transport.d.ts.map +1 -0
  553. package/dist/transport/transport.js +20 -0
  554. package/dist/transport/transport.js.map +1 -0
  555. package/dist/transport/ws.d.ts +40 -0
  556. package/dist/transport/ws.d.ts.map +1 -0
  557. package/dist/transport/ws.js +204 -0
  558. package/dist/transport/ws.js.map +1 -0
  559. package/package.json +147 -0
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Rekey driver per SESSION.md §3.3.
3
+ *
4
+ * Both peers can initiate. The flow:
5
+ *
6
+ * 1. Initiator generates a new ephemeral X25519 keypair + a
7
+ * 32-byte rekey nonce. Builds RekeyInit, seals under the
8
+ * current session's directional keys, sends.
9
+ * 2. Responder receives + opens the sealed init. Generates its
10
+ * own new ephemeral + a 32-byte responder nonce + a new
11
+ * session_id. Computes the new shared secret via X25519,
12
+ * derives the five new session keys via HKDF-SHA-512 with
13
+ * salt = rekey_nonce || responder_nonce.
14
+ * 3. Responder builds RekeyAccepted, seals under the current
15
+ * session's directional keys, sends.
16
+ * 4. Both call session.applyRekey() to swap in the new keys
17
+ * and new session_id atomically.
18
+ *
19
+ * On rejection (session_expired, rekey_unsupported, rate_limited),
20
+ * the responder sends a sealed RekeyRejected; the caller sees a
21
+ * RekeyRejectedError.
22
+ *
23
+ * Rekey messages carry no separate identity signature: receiving
24
+ * a valid sealed message is itself authentication, since only a
25
+ * holder of the live session keys can forge one.
26
+ *
27
+ * @module
28
+ */
29
+ import { marshal as canonicalMarshal } from "../canonical/index.js";
30
+ import { deriveRekeyKeys, newHKDFSHA512, x25519Agree, x25519PublicKey, } from "../crypto/index.js";
31
+ import { fingerprint } from "../keys/index.js";
32
+ import { openRekeyMessage, sealRekeyMessage, } from "./rekey_seal.js";
33
+ /** Error thrown when the responder rejects a rekey attempt. */
34
+ export class RekeyRejectedError extends Error {
35
+ reasonCode;
36
+ reason;
37
+ constructor(reasonCode, reason) {
38
+ super(`rekey rejected: ${reasonCode}${reason !== undefined ? ` (${reason})` : ""}`);
39
+ this.reasonCode = reasonCode;
40
+ this.reason = reason;
41
+ }
42
+ }
43
+ /**
44
+ * Initiate a rekey. The session installs new keys + a new
45
+ * session_id on success and resolves with the new session_id.
46
+ *
47
+ * @throws RekeyRejectedError when the responder sends a sealed
48
+ * RekeyRejected.
49
+ */
50
+ export async function rekeyClient(session, options = {}) {
51
+ const direction = directionFromRole(session.role);
52
+ const oppositeDir = otherDirection(direction);
53
+ // Step 1: build + send RekeyInit.
54
+ const ephPriv = options.ephemeralPriv ?? randomBytes(32);
55
+ const ephPub = x25519PublicKey(ephPriv);
56
+ const rekeyNonce = options.rekeyNonce ?? randomBytes(32);
57
+ const init = {
58
+ type: "SEMP_REKEY",
59
+ step: "rekey-init",
60
+ version: "1.0.0",
61
+ session_id: session.sessionId,
62
+ new_ephemeral_key: {
63
+ algorithm: "x25519-chacha20-poly1305",
64
+ key: base64Encode(ephPub),
65
+ key_id: fingerprint(ephPub),
66
+ },
67
+ rekey_nonce: base64Encode(rekeyNonce),
68
+ };
69
+ const sealed = sealRekeyMessage(session, direction, canonicalMarshal(init));
70
+ await session.send(new TextEncoder().encode(JSON.stringify(sealed)));
71
+ // Step 2: receive + open the response.
72
+ const respBytes = await session.receive();
73
+ if (respBytes === null) {
74
+ throw new Error("rekey: connection closed waiting for response");
75
+ }
76
+ const wrapper = JSON.parse(new TextDecoder().decode(respBytes));
77
+ if (wrapper.type !== "SEMP_REKEY") {
78
+ throw new Error(`rekey: expected SEMP_REKEY, got ${wrapper.type}`);
79
+ }
80
+ if (wrapper.direction !== oppositeDir) {
81
+ throw new Error(`rekey: expected response direction=${oppositeDir}, got ${wrapper.direction}`);
82
+ }
83
+ const respPlain = openRekeyMessage(session, wrapper);
84
+ const respBody = JSON.parse(new TextDecoder().decode(respPlain));
85
+ // Discriminate on `step` defensively; the wire body could carry
86
+ // either an accepted or rejected outcome.
87
+ const step = respBody.step;
88
+ if (step === "rekey-rejected") {
89
+ const r = respBody;
90
+ throw new RekeyRejectedError(r.reason_code, r.reason);
91
+ }
92
+ if (step !== "rekey-accepted") {
93
+ throw new Error(`rekey: expected step=rekey-accepted, got ${step}`);
94
+ }
95
+ const accepted = respBody;
96
+ // Step 3: derive + apply new keys.
97
+ const responderPub = base64Decode(accepted.new_ephemeral_key.key);
98
+ const sharedSecret = x25519Agree(ephPriv, responderPub);
99
+ const responderNonce = base64Decode(accepted.responder_nonce);
100
+ const kdf = newHKDFSHA512();
101
+ const newKeys = deriveRekeyKeys(kdf, sharedSecret, rekeyNonce, responderNonce);
102
+ session.applyRekey({
103
+ newSessionId: accepted.new_session_id,
104
+ newKeys,
105
+ });
106
+ return accepted.new_session_id;
107
+ }
108
+ /**
109
+ * Respond to a rekey. Reads one sealed message off the session
110
+ * transport, validates it as a RekeyInit, derives new keys,
111
+ * sends a sealed RekeyAccepted, and applies the rekey to the
112
+ * session. Resolves with the new session_id.
113
+ *
114
+ * Production callers wire this into their session-message
115
+ * dispatcher: when an inbound SEMP_REKEY arrives, route the
116
+ * sealed bytes here.
117
+ */
118
+ export async function rekeyServer(session, options) {
119
+ const initDir = directionFromRole(otherRole(session.role));
120
+ const respDir = otherDirection(initDir);
121
+ // Step 1: receive + open the init.
122
+ const initBytes = await session.receive();
123
+ if (initBytes === null) {
124
+ throw new Error("rekey: connection closed waiting for init");
125
+ }
126
+ const wrapper = JSON.parse(new TextDecoder().decode(initBytes));
127
+ if (wrapper.type !== "SEMP_REKEY") {
128
+ throw new Error(`rekey: expected SEMP_REKEY, got ${wrapper.type}`);
129
+ }
130
+ if (wrapper.direction !== initDir) {
131
+ throw new Error(`rekey: expected init direction=${initDir}, got ${wrapper.direction}`);
132
+ }
133
+ const initPlain = openRekeyMessage(session, wrapper);
134
+ const init = JSON.parse(new TextDecoder().decode(initPlain));
135
+ if (init.step !== "rekey-init") {
136
+ throw new Error(`rekey: expected step=rekey-init, got ${init.step}`);
137
+ }
138
+ // Step 2: ephemeral + responder nonce + new session_id.
139
+ const ephPriv = options.ephemeralPriv ?? randomBytes(32);
140
+ const ephPub = x25519PublicKey(ephPriv);
141
+ const responderNonce = options.responderNonce ?? randomBytes(32);
142
+ const newSessionId = options.generateSessionId();
143
+ // Step 3: derive new keys.
144
+ const initiatorPub = base64Decode(init.new_ephemeral_key.key);
145
+ const rekeyNonce = base64Decode(init.rekey_nonce);
146
+ const sharedSecret = x25519Agree(ephPriv, initiatorPub);
147
+ const kdf = newHKDFSHA512();
148
+ const newKeys = deriveRekeyKeys(kdf, sharedSecret, rekeyNonce, responderNonce);
149
+ // Step 4: build + send RekeyAccepted.
150
+ const accepted = {
151
+ type: "SEMP_REKEY",
152
+ step: "rekey-accepted",
153
+ version: "1.0.0",
154
+ session_id: session.sessionId,
155
+ new_session_id: newSessionId,
156
+ new_ephemeral_key: {
157
+ algorithm: "x25519-chacha20-poly1305",
158
+ key: base64Encode(ephPub),
159
+ key_id: fingerprint(ephPub),
160
+ },
161
+ rekey_nonce: init.rekey_nonce,
162
+ responder_nonce: base64Encode(responderNonce),
163
+ };
164
+ const sealedResp = sealRekeyMessage(session, respDir, canonicalMarshal(accepted));
165
+ await session.send(new TextEncoder().encode(JSON.stringify(sealedResp)));
166
+ // Step 5: apply rekey.
167
+ session.applyRekey({ newSessionId, newKeys });
168
+ return newSessionId;
169
+ }
170
+ // ---------------------------------------------------------------------------
171
+ // Helpers
172
+ function directionFromRole(role) {
173
+ return role === "client" ? "c2s" : "s2c";
174
+ }
175
+ function otherDirection(d) {
176
+ return d === "c2s" ? "s2c" : "c2s";
177
+ }
178
+ function otherRole(r) {
179
+ return r === "client" ? "server" : "client";
180
+ }
181
+ function randomBytes(n) {
182
+ const out = new Uint8Array(n);
183
+ globalThis.crypto.getRandomValues(out);
184
+ return out;
185
+ }
186
+ function base64Encode(b) {
187
+ if (typeof Buffer !== "undefined") {
188
+ return Buffer.from(b).toString("base64");
189
+ }
190
+ let bin = "";
191
+ for (let i = 0; i < b.length; i++) {
192
+ bin += String.fromCharCode(b[i] ?? 0);
193
+ }
194
+ return btoa(bin);
195
+ }
196
+ function base64Decode(s) {
197
+ if (typeof Buffer !== "undefined") {
198
+ return new Uint8Array(Buffer.from(s, "base64"));
199
+ }
200
+ const bin = atob(s);
201
+ const out = new Uint8Array(bin.length);
202
+ for (let i = 0; i < bin.length; i++) {
203
+ out[i] = bin.charCodeAt(i);
204
+ }
205
+ return out;
206
+ }
207
+ //# sourceMappingURL=rekey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rekey.js","sourceRoot":"","sources":["../../src/session/rekey.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Sealed-rekey wire format per SESSION.md §3.2.
3
+ *
4
+ * Rekey messages are AEAD-encrypted under the CURRENT session's
5
+ * directional keys. Receiving a valid sealed rekey is itself the
6
+ * authentication — only a holder of the live session keys can
7
+ * forge one — so the rekey messages carry no separate identity
8
+ * signature.
9
+ *
10
+ * Wire shape:
11
+ *
12
+ * {
13
+ * "type": "SEMP_REKEY",
14
+ * "sealed": true,
15
+ * "direction": "c2s" | "s2c",
16
+ * "version": "1.0.0",
17
+ * "session_id": "<current session_id>",
18
+ * "nonce": "<base64 12-byte AEAD nonce>",
19
+ * "ciphertext":"<base64 AEAD ciphertext (RekeyInit/Accepted/Rejected JSON)>"
20
+ * }
21
+ *
22
+ * AEAD: ChaCha20-Poly1305 (12-byte nonce). The AAD is a
23
+ * length-prefixed concatenation of:
24
+ *
25
+ * AAD = LP(direction) || LP(session_id) || LP(directional_mac_key)
26
+ *
27
+ * where LP(x) prepends a 4-byte big-endian length to x. Mixing the
28
+ * MAC key into the AAD ensures that compromising the encryption
29
+ * key alone is insufficient — an attacker would also need the MAC
30
+ * key, which satisfies the spec's "MACed under the MAC key"
31
+ * requirement.
32
+ *
33
+ * @module
34
+ */
35
+ import type { Session } from "./session.js";
36
+ /** Wire shape of a sealed rekey message. */
37
+ export interface SealedRekey {
38
+ type: "SEMP_REKEY";
39
+ sealed: true;
40
+ direction: "c2s" | "s2c";
41
+ version: "1.0.0";
42
+ session_id: string;
43
+ nonce: string;
44
+ ciphertext: string;
45
+ }
46
+ /**
47
+ * Seal a rekey-message body. The body is the canonical JSON of
48
+ * RekeyInit / RekeyAccepted / RekeyRejected. Returns the wire
49
+ * envelope.
50
+ *
51
+ * @param session the CURRENT session (pre-rekey).
52
+ * @param direction "c2s" if the caller is the side that sent INIT
53
+ * in the original handshake (or for federation: the side that
54
+ * opened the connection); "s2c" otherwise.
55
+ * @param plaintext the canonical message body bytes.
56
+ * @param nonce optional 12-byte nonce; production callers omit
57
+ * this and let the function source fresh entropy.
58
+ */
59
+ export declare function sealRekeyMessage(session: Session, direction: "c2s" | "s2c", plaintext: Uint8Array, nonce?: Uint8Array): SealedRekey;
60
+ /**
61
+ * Open a sealed rekey message. Returns the plaintext body bytes.
62
+ * Throws on tag mismatch, direction mismatch, or session_id
63
+ * mismatch.
64
+ */
65
+ export declare function openRekeyMessage(session: Session, msg: SealedRekey): Uint8Array;
66
+ //# sourceMappingURL=rekey_seal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rekey_seal.d.ts","sourceRoot":"","sources":["../../src/session/rekey_seal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,KAAK,GAAG,KAAK,EACxB,SAAS,EAAE,UAAU,EACrB,KAAK,CAAC,EAAE,UAAU,GACjB,WAAW,CAiBb;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,CAiB/E"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Sealed-rekey wire format per SESSION.md §3.2.
3
+ *
4
+ * Rekey messages are AEAD-encrypted under the CURRENT session's
5
+ * directional keys. Receiving a valid sealed rekey is itself the
6
+ * authentication — only a holder of the live session keys can
7
+ * forge one — so the rekey messages carry no separate identity
8
+ * signature.
9
+ *
10
+ * Wire shape:
11
+ *
12
+ * {
13
+ * "type": "SEMP_REKEY",
14
+ * "sealed": true,
15
+ * "direction": "c2s" | "s2c",
16
+ * "version": "1.0.0",
17
+ * "session_id": "<current session_id>",
18
+ * "nonce": "<base64 12-byte AEAD nonce>",
19
+ * "ciphertext":"<base64 AEAD ciphertext (RekeyInit/Accepted/Rejected JSON)>"
20
+ * }
21
+ *
22
+ * AEAD: ChaCha20-Poly1305 (12-byte nonce). The AAD is a
23
+ * length-prefixed concatenation of:
24
+ *
25
+ * AAD = LP(direction) || LP(session_id) || LP(directional_mac_key)
26
+ *
27
+ * where LP(x) prepends a 4-byte big-endian length to x. Mixing the
28
+ * MAC key into the AAD ensures that compromising the encryption
29
+ * key alone is insufficient — an attacker would also need the MAC
30
+ * key, which satisfies the spec's "MACed under the MAC key"
31
+ * requirement.
32
+ *
33
+ * @module
34
+ */
35
+ import { aeadOpen, aeadSeal } from "../crypto/index.js";
36
+ /**
37
+ * Seal a rekey-message body. The body is the canonical JSON of
38
+ * RekeyInit / RekeyAccepted / RekeyRejected. Returns the wire
39
+ * envelope.
40
+ *
41
+ * @param session the CURRENT session (pre-rekey).
42
+ * @param direction "c2s" if the caller is the side that sent INIT
43
+ * in the original handshake (or for federation: the side that
44
+ * opened the connection); "s2c" otherwise.
45
+ * @param plaintext the canonical message body bytes.
46
+ * @param nonce optional 12-byte nonce; production callers omit
47
+ * this and let the function source fresh entropy.
48
+ */
49
+ export function sealRekeyMessage(session, direction, plaintext, nonce) {
50
+ const { encKey, macKey } = pickRekeyKeys(session, direction);
51
+ const n = nonce ?? randomBytes(12);
52
+ if (n.length !== 12) {
53
+ throw new Error(`sealRekeyMessage: nonce must be 12 bytes, got ${n.length}`);
54
+ }
55
+ const aad = rekeyAAD(direction, session.sessionId, macKey);
56
+ const ct = aeadSeal("chacha20-poly1305", encKey, n, plaintext, aad);
57
+ return {
58
+ type: "SEMP_REKEY",
59
+ sealed: true,
60
+ direction,
61
+ version: "1.0.0",
62
+ session_id: session.sessionId,
63
+ nonce: base64Encode(n),
64
+ ciphertext: base64Encode(ct),
65
+ };
66
+ }
67
+ /**
68
+ * Open a sealed rekey message. Returns the plaintext body bytes.
69
+ * Throws on tag mismatch, direction mismatch, or session_id
70
+ * mismatch.
71
+ */
72
+ export function openRekeyMessage(session, msg) {
73
+ if (msg.type !== "SEMP_REKEY") {
74
+ throw new Error(`openRekeyMessage: type=${msg.type}, want SEMP_REKEY`);
75
+ }
76
+ if (!msg.sealed) {
77
+ throw new Error("openRekeyMessage: cleartext rekey not supported");
78
+ }
79
+ if (msg.session_id !== session.sessionId) {
80
+ throw new Error(`openRekeyMessage: session_id ${msg.session_id} does not match current ${session.sessionId}`);
81
+ }
82
+ const { encKey, macKey } = pickRekeyKeys(session, msg.direction);
83
+ const nonce = base64Decode(msg.nonce);
84
+ const ct = base64Decode(msg.ciphertext);
85
+ const aad = rekeyAAD(msg.direction, session.sessionId, macKey);
86
+ return aeadOpen("chacha20-poly1305", encKey, nonce, ct, aad);
87
+ }
88
+ /**
89
+ * Pick the (encryption_key, mac_key) pair for the given
90
+ * direction, mirroring semp-go's session.pickRekeyKeys. The
91
+ * session keys are owned by both endpoints, so the same
92
+ * (direction, sessionId) pair selects the same pair on both sides.
93
+ */
94
+ function pickRekeyKeys(session, direction) {
95
+ switch (direction) {
96
+ case "c2s":
97
+ return { encKey: session.keys.encC2S, macKey: session.keys.macC2S };
98
+ case "s2c":
99
+ return { encKey: session.keys.encS2C, macKey: session.keys.macS2C };
100
+ }
101
+ }
102
+ /**
103
+ * Length-prefixed AAD per the rekey wire format. Each component
104
+ * is preceded by a 4-byte big-endian length so an attacker can't
105
+ * shift the boundary between fields.
106
+ */
107
+ function rekeyAAD(direction, sessionId, macKey) {
108
+ const dirBytes = new TextEncoder().encode(direction);
109
+ const idBytes = new TextEncoder().encode(sessionId);
110
+ const total = 4 + dirBytes.length + 4 + idBytes.length + 4 + macKey.length;
111
+ const out = new Uint8Array(total);
112
+ let off = 0;
113
+ off = appendLP(out, off, dirBytes);
114
+ off = appendLP(out, off, idBytes);
115
+ appendLP(out, off, macKey);
116
+ return out;
117
+ }
118
+ function appendLP(buf, off, b) {
119
+ const n = b.length;
120
+ buf[off++] = (n >>> 24) & 0xff;
121
+ buf[off++] = (n >>> 16) & 0xff;
122
+ buf[off++] = (n >>> 8) & 0xff;
123
+ buf[off++] = n & 0xff;
124
+ buf.set(b, off);
125
+ return off + n;
126
+ }
127
+ function randomBytes(n) {
128
+ const out = new Uint8Array(n);
129
+ globalThis.crypto.getRandomValues(out);
130
+ return out;
131
+ }
132
+ function base64Encode(b) {
133
+ if (typeof Buffer !== "undefined") {
134
+ return Buffer.from(b).toString("base64");
135
+ }
136
+ let bin = "";
137
+ for (let i = 0; i < b.length; i++) {
138
+ bin += String.fromCharCode(b[i] ?? 0);
139
+ }
140
+ return btoa(bin);
141
+ }
142
+ function base64Decode(s) {
143
+ if (typeof Buffer !== "undefined") {
144
+ return new Uint8Array(Buffer.from(s, "base64"));
145
+ }
146
+ const bin = atob(s);
147
+ const out = new Uint8Array(bin.length);
148
+ for (let i = 0; i < bin.length; i++) {
149
+ out[i] = bin.charCodeAt(i);
150
+ }
151
+ return out;
152
+ }
153
+ //# sourceMappingURL=rekey_seal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rekey_seal.js","sourceRoot":"","sources":["../../src/session/rekey_seal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Session resumption driver per HANDSHAKE.md §2.8 / SESSION.md §2.7.
3
+ *
4
+ * Resume condenses the full handshake into ONE round trip:
5
+ *
6
+ * client -> server step=resume (client_eph + client_nonce +
7
+ * resumption_ticket from prior session)
8
+ * server -> client step=accepted (server_eph + server_nonce +
9
+ * new session_id + new ticket +
10
+ * server_signature)
11
+ *
12
+ * Both peers derive new session keys by mixing the FRESH X25519
13
+ * shared secret with the K_resumption secret retained from the
14
+ * previous session. The retained secret proves continuity of
15
+ * identity, so no separate identity proof is required.
16
+ *
17
+ * Production callers use this when they want a low-latency
18
+ * reconnect after a brief disconnection. If the server has lost
19
+ * the session state (or the ticket has expired), the server
20
+ * MUST respond with step=rejected and the client falls back to
21
+ * a full {@link "../handshake/driver".runClient} handshake.
22
+ *
23
+ * @module
24
+ */
25
+ import { type ResumptionTicket } from "../handshake/messages.js";
26
+ import type { Transport } from "../transport/index.js";
27
+ import { Session } from "./session.js";
28
+ /** Wire shape of step=resume (unsigned). */
29
+ export interface ResumeRequest {
30
+ type: "SEMP_HANDSHAKE";
31
+ step: "resume";
32
+ party: "client";
33
+ version: "1.0.0";
34
+ nonce: string;
35
+ resumption_ticket: string;
36
+ client_ephemeral_key: {
37
+ algorithm: string;
38
+ key: string;
39
+ key_id: string;
40
+ };
41
+ transport: string;
42
+ extensions: Record<string, unknown>;
43
+ }
44
+ /** Wire shape of step=accepted in the resume flow (signed). */
45
+ export interface ResumeAccepted {
46
+ type: "SEMP_HANDSHAKE";
47
+ step: "accepted";
48
+ party: "server";
49
+ version: "1.0.0";
50
+ session_id: string;
51
+ session_ttl: number;
52
+ server_nonce: string;
53
+ server_ephemeral_key: {
54
+ algorithm: string;
55
+ key: string;
56
+ key_id: string;
57
+ };
58
+ resumption_ticket: ResumptionTicket;
59
+ server_signature: string;
60
+ extensions: Record<string, unknown>;
61
+ }
62
+ export interface ResumeClientConfig {
63
+ /** Server domain signing public key (32-byte Ed25519). */
64
+ serverDomainPub: Uint8Array;
65
+ /** Transport identifier echoed in the resume request. */
66
+ transport: string;
67
+ /** K_resumption from the prior session. */
68
+ kResumption: Uint8Array;
69
+ /** Opaque resumption_ticket value from the prior session. */
70
+ resumptionTicket: string;
71
+ /** Optional pinned ephemeral private (32 bytes) for tests. */
72
+ clientEphemeralPriv?: Uint8Array;
73
+ /** Optional pinned 32-byte client nonce for tests. */
74
+ clientNonce?: Uint8Array;
75
+ /** Optional extensions to advertise. */
76
+ extensions?: Record<string, unknown>;
77
+ }
78
+ /**
79
+ * Drive the client side of a resume. Resolves with a fresh
80
+ * {@link Session} on success; throws {@link HandshakeRejectedError}
81
+ * if the server rejects.
82
+ */
83
+ export declare function resumeClient(transport: Transport, config: ResumeClientConfig): Promise<Session>;
84
+ /** Outcome of a ticket lookup performed by the server. */
85
+ export type TicketLookupResult = {
86
+ ok: true;
87
+ /** K_resumption retained from the prior session. */
88
+ kResumption: Uint8Array;
89
+ /** Permissions to grant on the resumed session. */
90
+ permissions: ReadonlyArray<string>;
91
+ } | {
92
+ ok: false;
93
+ reasonCode: string;
94
+ reason?: string;
95
+ };
96
+ export interface ResumeServerConfig {
97
+ /** 32-byte Ed25519 secret seed for the server domain signing key. */
98
+ serverDomainSigningSeed: Uint8Array;
99
+ /**
100
+ * Look up the resumption_ticket from the request. Production
101
+ * servers route through a per-process cache + transparent
102
+ * persistence layer; tests pass an in-memory map.
103
+ */
104
+ lookupTicket: (ticket: string) => Promise<TicketLookupResult> | TicketLookupResult;
105
+ /** Mint a fresh resumption_ticket for the new session. */
106
+ generateNewTicket: () => ResumptionTicket;
107
+ /** Mint a fresh session_id for the new session. */
108
+ generateSessionId: () => string;
109
+ /** Session TTL in seconds. */
110
+ sessionTTL: number;
111
+ /** Optional extensions echoed in the accepted message. */
112
+ acceptedExtensions?: Record<string, unknown>;
113
+ /** Optional pinned ephemeral private for tests. */
114
+ serverEphemeralPriv?: Uint8Array;
115
+ /** Optional pinned 32-byte server nonce for tests. */
116
+ serverNonce?: Uint8Array;
117
+ }
118
+ /**
119
+ * Drive the server side of a resume. Reads the resume request,
120
+ * looks up the ticket, generates a fresh ephemeral + nonce + new
121
+ * session_id, builds and signs the accepted response, and returns
122
+ * a Session.
123
+ */
124
+ export declare function resumeServer(transport: Transport, config: ResumeServerConfig): Promise<Session>;
125
+ //# sourceMappingURL=resume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/session/resume.ts"],"names":[],"mappings":"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"}