@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,126 @@
1
+ /**
2
+ * Home-server closure driver per CLOSURE.md §3 + §4 + §5.
3
+ *
4
+ * Orchestrates closure lifecycle on a {@link ClosureStore}:
5
+ * - {@link Driver.submit}: accept a request or cancel
6
+ * - {@link Driver.tick}: drive due requests to finalization
7
+ * - {@link Driver.isAccountClosed}: §5 ingress enforcement
8
+ * - {@link Driver.recipientPolicy}: returns a delivery-policy
9
+ * adapter that rejects envelopes addressed to closed accounts
10
+ *
11
+ * @module
12
+ */
13
+ import { isFinalizable, validateClosureRecord, } from "./closure.js";
14
+ import { AlreadyPendingError } from "./store.js";
15
+ /** Closure driver. */
16
+ export class Driver {
17
+ store;
18
+ nowFn;
19
+ constructor(cfg) {
20
+ this.store = cfg.store;
21
+ this.nowFn = cfg.nowFn ?? (() => new Date());
22
+ }
23
+ /**
24
+ * Apply `record` to the store. Caller MUST verify the record's
25
+ * signature and authority (§2.3 — the issuing device must be a
26
+ * full-access device of the account) BEFORE calling submit.
27
+ */
28
+ async submit(record) {
29
+ try {
30
+ validateClosureRecord(record);
31
+ }
32
+ catch (err) {
33
+ return {
34
+ kind: "invalid",
35
+ reason: err instanceof Error ? err.message : String(err),
36
+ };
37
+ }
38
+ if (record.step === "request") {
39
+ try {
40
+ await this.store.putPending(record);
41
+ return { kind: "accepted" };
42
+ }
43
+ catch (err) {
44
+ if (err instanceof AlreadyPendingError) {
45
+ return { kind: "already_pending" };
46
+ }
47
+ throw err;
48
+ }
49
+ }
50
+ // step === "cancel"
51
+ const existing = await this.store.getPending(record.user_id);
52
+ if (existing === null) {
53
+ return { kind: "not_pending" };
54
+ }
55
+ await this.store.deletePending(record.user_id);
56
+ return { kind: "accepted" };
57
+ }
58
+ /**
59
+ * Drive any pending requests whose finalization timestamp has
60
+ * arrived to the finalized state. Returns the list of accounts
61
+ * finalized in this tick (deterministically ordered).
62
+ */
63
+ async tick() {
64
+ const now = this.nowFn();
65
+ const due = await this.store.duePending(now);
66
+ const out = [];
67
+ for (const r of due) {
68
+ if (!isFinalizable(r, now)) {
69
+ continue; // defensive
70
+ }
71
+ await this.store.putFinalized(r.user_id, now);
72
+ await this.store.deletePending(r.user_id);
73
+ out.push({ user_id: r.user_id, finalized_at: now });
74
+ }
75
+ return out;
76
+ }
77
+ /**
78
+ * Report whether `userId`'s account is currently closed within
79
+ * the §6.1 retention window.
80
+ *
81
+ * Returns true when `getFinalized(userId)` yields a timestamp
82
+ * (the store enforces retention via its prune path; once an
83
+ * entry is pruned, this returns false and the local-part is
84
+ * eligible for §6.2 reassignment).
85
+ */
86
+ async isAccountClosed(userId) {
87
+ const finalized = await this.store.getFinalized(userId);
88
+ return finalized !== null;
89
+ }
90
+ /**
91
+ * Return a per-recipient delivery-policy adapter that rejects
92
+ * envelopes addressed to closed accounts per §5.1, preserving
93
+ * existence indistinguishability per DESIGN.md §2.7 (the
94
+ * `policy_forbidden` reason is the same one a non-existent
95
+ * address receives).
96
+ *
97
+ * Pass `useSilent: true` to return the `silent` acknowledgment
98
+ * instead. Both preserve indistinguishability; the choice is
99
+ * operator policy.
100
+ */
101
+ recipientPolicy(opts = {}) {
102
+ return async (recipientAddress) => {
103
+ let closed;
104
+ try {
105
+ closed = await this.isAccountClosed(recipientAddress);
106
+ }
107
+ catch {
108
+ // Fail open per §5.1: a transient store error MUST NOT
109
+ // silently drop deliveries to active accounts.
110
+ return null;
111
+ }
112
+ if (!closed) {
113
+ return null;
114
+ }
115
+ if (opts.useSilent === true) {
116
+ return { acknowledgment: "silent" };
117
+ }
118
+ return {
119
+ acknowledgment: "rejected",
120
+ reason_code: "policy_forbidden",
121
+ reason: "recipient policy",
122
+ };
123
+ };
124
+ }
125
+ }
126
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/closure/driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Account closure layer per CLOSURE.md.
3
+ *
4
+ * Wire records (request + cancel) and signing primitives, plus
5
+ * the home-server driver that orchestrates pending → finalized
6
+ * lifecycle on a {@link ClosureStore}.
7
+ *
8
+ * @module
9
+ */
10
+ export { type ClosureRecord, type ClosureSignature, type SignClosureRecordInput, type SignClosureRecordResult, type Step, type ValidateClosureOptions, AccountClosurePrefix, MaxGracePeriodSeconds, MinGracePeriodSeconds, RecommendedGracePeriodSeconds, RecordType, RecordVersion, SignatureAlgorithmEd25519, finalizationAt, isFinalizable, signClosureRecord, validateClosureRecord, verifyClosureRecord, } from "./closure.js";
11
+ export { type ClosureStore, AlreadyPendingError, InMemoryClosureStore, MinRetentionMs, RecommendedRetentionMs, } from "./store.js";
12
+ export { type DriverConfig, type FinalizeResult, type RecipientPolicyFunc, type SubmitResult, Driver, } from "./driver.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/closure/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,IAAI,EACT,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,UAAU,EACV,aAAa,EACb,yBAAyB,EACzB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,YAAY,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,MAAM,GACP,MAAM,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Account closure layer per CLOSURE.md.
3
+ *
4
+ * Wire records (request + cancel) and signing primitives, plus
5
+ * the home-server driver that orchestrates pending → finalized
6
+ * lifecycle on a {@link ClosureStore}.
7
+ *
8
+ * @module
9
+ */
10
+ export { AccountClosurePrefix, MaxGracePeriodSeconds, MinGracePeriodSeconds, RecommendedGracePeriodSeconds, RecordType, RecordVersion, SignatureAlgorithmEd25519, finalizationAt, isFinalizable, signClosureRecord, validateClosureRecord, verifyClosureRecord, } from "./closure.js";
11
+ export { AlreadyPendingError, InMemoryClosureStore, MinRetentionMs, RecommendedRetentionMs, } from "./store.js";
12
+ export { Driver, } from "./driver.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/closure/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAOL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,UAAU,EACV,aAAa,EACb,yBAAyB,EACzB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAKL,MAAM,GACP,MAAM,aAAa,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Persistence interface for closure state per CLOSURE.md §2.4 +
3
+ * §6.1.
4
+ *
5
+ * Used by the {@link "./driver".Driver} for two distinct concerns:
6
+ *
7
+ * - Pending state: active closure requests (submit / cancel /
8
+ * tick-due).
9
+ * - Finalized state: closed accounts within the §6.1 retention
10
+ * window. Used by ingress enforcement (§5) and by §6 local-part
11
+ * reassignment checks.
12
+ *
13
+ * Production deployments plug in a durable backend; tests + demos
14
+ * use {@link InMemoryClosureStore}.
15
+ *
16
+ * @module
17
+ */
18
+ import type { ClosureRecord } from "./closure.js";
19
+ /**
20
+ * Spec-mandated retention bounds for the §6.1 post-finalization
21
+ * retention window: at least 180 days, RECOMMENDED 365 days.
22
+ */
23
+ export declare const MinRetentionMs: number;
24
+ export declare const RecommendedRetentionMs: number;
25
+ /** Thrown by {@link ClosureStore.putPending} on collision. */
26
+ export declare class AlreadyPendingError extends Error {
27
+ readonly name = "AlreadyPendingError";
28
+ }
29
+ /** Persistence interface for closure state. */
30
+ export interface ClosureStore {
31
+ /**
32
+ * Insert `record` as the active pending request for
33
+ * `record.user_id`. Throws {@link AlreadyPendingError} if a
34
+ * request is already pending for the same user (the §2.4
35
+ * "at most one active closure" rule).
36
+ */
37
+ putPending(record: ClosureRecord): Promise<void>;
38
+ /** Return the pending request for `userId`, or null when none. */
39
+ getPending(userId: string): Promise<ClosureRecord | null>;
40
+ /** Remove the pending request for `userId`. Idempotent. */
41
+ deletePending(userId: string): Promise<void>;
42
+ /**
43
+ * Return every pending request whose finalization timestamp is
44
+ * at or before `now`, in deterministic order (by user_id
45
+ * ascending). The driver's `tick` consumes this slice.
46
+ */
47
+ duePending(now: Date): Promise<ClosureRecord[]>;
48
+ /** Number of pending requests, for operator monitoring. */
49
+ countPending(): Promise<number>;
50
+ /**
51
+ * Record that `userId`'s closure finalized at the given timestamp.
52
+ * Used by `isAccountClosed` and the §6.1 retention prune.
53
+ */
54
+ putFinalized(userId: string, finalizedAt: Date): Promise<void>;
55
+ /**
56
+ * Return the finalization timestamp for `userId`, or null if no
57
+ * finalization is recorded.
58
+ */
59
+ getFinalized(userId: string): Promise<Date | null>;
60
+ /**
61
+ * Evict finalized entries older than `retainForMs`. Values smaller
62
+ * than {@link MinRetentionMs} are clamped up. Returns the number
63
+ * of entries evicted.
64
+ */
65
+ pruneFinalized(retainForMs: number, now?: Date): Promise<number>;
66
+ }
67
+ /** Reference in-memory {@link ClosureStore}. Single-process only. */
68
+ export declare class InMemoryClosureStore implements ClosureStore {
69
+ private readonly pending;
70
+ private readonly finalized;
71
+ putPending(record: ClosureRecord): Promise<void>;
72
+ getPending(userId: string): Promise<ClosureRecord | null>;
73
+ deletePending(userId: string): Promise<void>;
74
+ duePending(now: Date): Promise<ClosureRecord[]>;
75
+ countPending(): Promise<number>;
76
+ putFinalized(userId: string, finalizedAt: Date): Promise<void>;
77
+ getFinalized(userId: string): Promise<Date | null>;
78
+ pruneFinalized(retainForMs: number, now?: Date): Promise<number>;
79
+ }
80
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/closure/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAA4B,CAAC;AACxD,eAAO,MAAM,sBAAsB,QAA4B,CAAC;AAEhE,8DAA8D;AAC9D,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAkB,IAAI,yBAAyB;CAChD;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,kEAAkE;IAClE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAE1D,2DAA2D;IAC3D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAEhD,2DAA2D;IAC3D,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/D;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;OAIG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClE;AAED,qEAAqE;AACrE,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IAE/C,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAKzD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,UAAU,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAW/C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIlD,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;CAcnF"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Persistence interface for closure state per CLOSURE.md §2.4 +
3
+ * §6.1.
4
+ *
5
+ * Used by the {@link "./driver".Driver} for two distinct concerns:
6
+ *
7
+ * - Pending state: active closure requests (submit / cancel /
8
+ * tick-due).
9
+ * - Finalized state: closed accounts within the §6.1 retention
10
+ * window. Used by ingress enforcement (§5) and by §6 local-part
11
+ * reassignment checks.
12
+ *
13
+ * Production deployments plug in a durable backend; tests + demos
14
+ * use {@link InMemoryClosureStore}.
15
+ *
16
+ * @module
17
+ */
18
+ import { finalizationAt } from "./closure.js";
19
+ /**
20
+ * Spec-mandated retention bounds for the §6.1 post-finalization
21
+ * retention window: at least 180 days, RECOMMENDED 365 days.
22
+ */
23
+ export const MinRetentionMs = 180 * 24 * 60 * 60 * 1000;
24
+ export const RecommendedRetentionMs = 365 * 24 * 60 * 60 * 1000;
25
+ /** Thrown by {@link ClosureStore.putPending} on collision. */
26
+ export class AlreadyPendingError extends Error {
27
+ name = "AlreadyPendingError";
28
+ }
29
+ /** Reference in-memory {@link ClosureStore}. Single-process only. */
30
+ export class InMemoryClosureStore {
31
+ pending = new Map();
32
+ finalized = new Map();
33
+ async putPending(record) {
34
+ if (record.user_id === "") {
35
+ throw new Error("closure: store put_pending missing user_id");
36
+ }
37
+ if (this.pending.has(record.user_id)) {
38
+ throw new AlreadyPendingError(`closure: pending request already exists for ${record.user_id}`);
39
+ }
40
+ this.pending.set(record.user_id, { ...record });
41
+ }
42
+ async getPending(userId) {
43
+ const r = this.pending.get(userId);
44
+ return r === undefined ? null : { ...r };
45
+ }
46
+ async deletePending(userId) {
47
+ this.pending.delete(userId);
48
+ }
49
+ async duePending(now) {
50
+ const due = [];
51
+ for (const r of this.pending.values()) {
52
+ if (now.getTime() >= finalizationAt(r).getTime()) {
53
+ due.push({ ...r });
54
+ }
55
+ }
56
+ due.sort((a, b) => (a.user_id < b.user_id ? -1 : a.user_id > b.user_id ? 1 : 0));
57
+ return due;
58
+ }
59
+ async countPending() {
60
+ return this.pending.size;
61
+ }
62
+ async putFinalized(userId, finalizedAt) {
63
+ if (userId === "") {
64
+ throw new Error("closure: store put_finalized missing user_id");
65
+ }
66
+ if (Number.isNaN(finalizedAt.getTime())) {
67
+ throw new Error("closure: store put_finalized invalid timestamp");
68
+ }
69
+ this.finalized.set(userId, finalizedAt);
70
+ }
71
+ async getFinalized(userId) {
72
+ return this.finalized.get(userId) ?? null;
73
+ }
74
+ async pruneFinalized(retainForMs, now = new Date()) {
75
+ if (retainForMs < MinRetentionMs) {
76
+ retainForMs = MinRetentionMs;
77
+ }
78
+ const cutoff = now.getTime() - retainForMs;
79
+ let removed = 0;
80
+ for (const [userId, finalizedAtTs] of this.finalized) {
81
+ if (finalizedAtTs.getTime() < cutoff) {
82
+ this.finalized.delete(userId);
83
+ removed++;
84
+ }
85
+ }
86
+ return removed;
87
+ }
88
+ }
89
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/closure/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * AEAD primitives for SEMP.
3
+ *
4
+ * The two currently defined algorithm suites use different AEAD
5
+ * variants:
6
+ *
7
+ * - `x25519-chacha20-poly1305` — ChaCha20-Poly1305, 12-byte nonce.
8
+ * - `pq-kyber768-x25519` — XChaCha20-Poly1305, 24-byte nonce.
9
+ *
10
+ * The sealing flow is identical in both cases: AEAD.Seal(key, nonce,
11
+ * plaintext, aad) -> ciphertext || tag. Returns a single byte slice
12
+ * with the authentication tag appended.
13
+ *
14
+ * @module
15
+ */
16
+ /** Algorithm name used in vectors and on the wire. */
17
+ export type AEADAlgorithm = "chacha20-poly1305" | "xchacha20-poly1305";
18
+ /**
19
+ * Seal `plaintext` with the negotiated AEAD. Returns
20
+ * `ciphertext || tag` (no nonce prefix; the caller composes the
21
+ * wire layout per ENVELOPE.md §7.1.1).
22
+ */
23
+ export declare function aeadSeal(algorithm: AEADAlgorithm, key: Uint8Array, nonce: Uint8Array, plaintext: Uint8Array, aad: Uint8Array): Uint8Array;
24
+ /**
25
+ * Open AEAD ciphertext. Throws on tag mismatch (Poly1305 fail).
26
+ * Returns the plaintext on success.
27
+ */
28
+ export declare function aeadOpen(algorithm: AEADAlgorithm, key: Uint8Array, nonce: Uint8Array, ciphertext: Uint8Array, aad: Uint8Array): Uint8Array;
29
+ //# sourceMappingURL=aead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aead.d.ts","sourceRoot":"","sources":["../../src/crypto/aead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,sDAAsD;AACtD,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,UAAU,EACrB,GAAG,EAAE,UAAU,GACd,UAAU,CAGZ;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,UAAU,GACd,UAAU,CAGZ"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * AEAD primitives for SEMP.
3
+ *
4
+ * The two currently defined algorithm suites use different AEAD
5
+ * variants:
6
+ *
7
+ * - `x25519-chacha20-poly1305` — ChaCha20-Poly1305, 12-byte nonce.
8
+ * - `pq-kyber768-x25519` — XChaCha20-Poly1305, 24-byte nonce.
9
+ *
10
+ * The sealing flow is identical in both cases: AEAD.Seal(key, nonce,
11
+ * plaintext, aad) -> ciphertext || tag. Returns a single byte slice
12
+ * with the authentication tag appended.
13
+ *
14
+ * @module
15
+ */
16
+ import { chacha20poly1305, xchacha20poly1305 } from "@noble/ciphers/chacha.js";
17
+ /**
18
+ * Seal `plaintext` with the negotiated AEAD. Returns
19
+ * `ciphertext || tag` (no nonce prefix; the caller composes the
20
+ * wire layout per ENVELOPE.md §7.1.1).
21
+ */
22
+ export function aeadSeal(algorithm, key, nonce, plaintext, aad) {
23
+ const c = newCipher(algorithm, key, nonce, aad);
24
+ return c.encrypt(plaintext);
25
+ }
26
+ /**
27
+ * Open AEAD ciphertext. Throws on tag mismatch (Poly1305 fail).
28
+ * Returns the plaintext on success.
29
+ */
30
+ export function aeadOpen(algorithm, key, nonce, ciphertext, aad) {
31
+ const c = newCipher(algorithm, key, nonce, aad);
32
+ return c.decrypt(ciphertext);
33
+ }
34
+ function newCipher(algorithm, key, nonce, aad) {
35
+ switch (algorithm) {
36
+ case "chacha20-poly1305":
37
+ if (nonce.length !== 12) {
38
+ throw new Error(`chacha20-poly1305 nonce must be 12 bytes, got ${nonce.length}`);
39
+ }
40
+ return chacha20poly1305(key, nonce, aad);
41
+ case "xchacha20-poly1305":
42
+ if (nonce.length !== 24) {
43
+ throw new Error(`xchacha20-poly1305 nonce must be 24 bytes, got ${nonce.length}`);
44
+ }
45
+ return xchacha20poly1305(key, nonce, aad);
46
+ }
47
+ }
48
+ //# sourceMappingURL=aead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aead.js","sourceRoot":"","sources":["../../src/crypto/aead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAK/E;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,SAAwB,EACxB,GAAe,EACf,KAAiB,EACjB,SAAqB,EACrB,GAAe;IAEf,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,SAAwB,EACxB,GAAe,EACf,KAAiB,EACjB,UAAsB,EACtB,GAAe;IAEf,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,SAAS,CAChB,SAAwB,EACxB,GAAe,EACf,KAAiB,EACjB,GAAe;IAEf,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,mBAAmB;YACtB,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,iDAAiD,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,KAAK,oBAAoB;YACvB,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,kDAAkD,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Argon2id KDF wrapper for SEMP recovery bundles per RECOVERY.md
3
+ * §2.4. The vectors fix all four parameters (memory, iterations,
4
+ * parallelism, output length) so the runner can re-derive the
5
+ * bundle key deterministically.
6
+ *
7
+ * @module
8
+ */
9
+ /**
10
+ * Argon2id key derivation.
11
+ *
12
+ * @param secret raw secret bytes (the recovery secret).
13
+ * @param salt 16-byte salt.
14
+ * @param memoryKB memory cost in KiB (e.g. 65536 for 64 MiB).
15
+ * @param iterations time cost.
16
+ * @param parallelism degree of parallelism (lanes).
17
+ * @param outputLength output length in bytes (typically 32).
18
+ */
19
+ export declare function argon2idKDF(secret: Uint8Array, salt: Uint8Array, memoryKB: number, iterations: number, parallelism: number, outputLength: number): Uint8Array;
20
+ //# sourceMappingURL=argon2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argon2.d.ts","sourceRoot":"","sources":["../../src/crypto/argon2.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,UAAU,CAOZ"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Argon2id KDF wrapper for SEMP recovery bundles per RECOVERY.md
3
+ * §2.4. The vectors fix all four parameters (memory, iterations,
4
+ * parallelism, output length) so the runner can re-derive the
5
+ * bundle key deterministically.
6
+ *
7
+ * @module
8
+ */
9
+ import { argon2id } from "@noble/hashes/argon2.js";
10
+ /**
11
+ * Argon2id key derivation.
12
+ *
13
+ * @param secret raw secret bytes (the recovery secret).
14
+ * @param salt 16-byte salt.
15
+ * @param memoryKB memory cost in KiB (e.g. 65536 for 64 MiB).
16
+ * @param iterations time cost.
17
+ * @param parallelism degree of parallelism (lanes).
18
+ * @param outputLength output length in bytes (typically 32).
19
+ */
20
+ export function argon2idKDF(secret, salt, memoryKB, iterations, parallelism, outputLength) {
21
+ return argon2id(secret, salt, {
22
+ m: memoryKB,
23
+ t: iterations,
24
+ p: parallelism,
25
+ dkLen: outputLength,
26
+ });
27
+ }
28
+ //# sourceMappingURL=argon2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argon2.js","sourceRoot":"","sources":["../../src/crypto/argon2.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CACzB,MAAkB,EAClB,IAAgB,EAChB,QAAgB,EAChB,UAAkB,EAClB,WAAmB,EACnB,YAAoB;IAEpB,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE;QAC5B,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,UAAU;QACb,CAAC,EAAE,WAAW;QACd,KAAK,EAAE,YAAY;KACpB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Layer 1 cryptographic primitives. Mirrors the semp-go `crypto`
3
+ * package: KDF, MAC, signature, KEM, AEAD, and suite glue. The
4
+ * implementation is the audited @noble suite end-to-end; no native
5
+ * bindings, browser-compatible.
6
+ *
7
+ * @module
8
+ */
9
+ export { newHKDFSHA512, deriveSessionKeys, deriveSessionKeysWithResumption, deriveResumedSessionKeys, deriveRekeyKeys, InfoSessionEncC2S, InfoSessionEncS2C, InfoSessionMACC2S, InfoSessionMACS2C, InfoSessionEnvMAC, InfoSessionResumption, SessionKeyLength, type KDF, type SessionKeys, } from "./kdf.js";
10
+ export { computeMAC, verifyMAC } from "./mac.js";
11
+ export { type AEADAlgorithm, aeadOpen, aeadSeal } from "./aead.js";
12
+ export { argon2idKDF } from "./argon2.js";
13
+ export { HybridCiphertextSize, HybridPrivateKeySize, HybridPublicKeySize, HybridSharedSecretSize, Kyber768CiphertextSize, Kyber768PrivateKeySize, Kyber768PublicKeySize, Kyber768SharedKeySize, X25519Size, hybridDecapsulate, hybridPrivateKeyFromKyberAndX25519, kyber768Decapsulate, kyber768EncapsulateDeterministic, kyber768KeyPairFromSeed, x25519Agree, x25519PublicKey, } from "./kem.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,+BAA+B,EAC/B,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,GAAG,EACR,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,KAAK,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,kCAAkC,EAClC,mBAAmB,EACnB,gCAAgC,EAChC,uBAAuB,EACvB,WAAW,EACX,eAAe,GAChB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Layer 1 cryptographic primitives. Mirrors the semp-go `crypto`
3
+ * package: KDF, MAC, signature, KEM, AEAD, and suite glue. The
4
+ * implementation is the audited @noble suite end-to-end; no native
5
+ * bindings, browser-compatible.
6
+ *
7
+ * @module
8
+ */
9
+ export { newHKDFSHA512, deriveSessionKeys, deriveSessionKeysWithResumption, deriveResumedSessionKeys, deriveRekeyKeys, InfoSessionEncC2S, InfoSessionEncS2C, InfoSessionMACC2S, InfoSessionMACS2C, InfoSessionEnvMAC, InfoSessionResumption, SessionKeyLength, } from "./kdf.js";
10
+ export { computeMAC, verifyMAC } from "./mac.js";
11
+ export { aeadOpen, aeadSeal } from "./aead.js";
12
+ export { argon2idKDF } from "./argon2.js";
13
+ export { HybridCiphertextSize, HybridPrivateKeySize, HybridPublicKeySize, HybridSharedSecretSize, Kyber768CiphertextSize, Kyber768PrivateKeySize, Kyber768PublicKeySize, Kyber768SharedKeySize, X25519Size, hybridDecapsulate, hybridPrivateKeyFromKyberAndX25519, kyber768Decapsulate, kyber768EncapsulateDeterministic, kyber768KeyPairFromSeed, x25519Agree, x25519PublicKey, } from "./kem.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,+BAA+B,EAC/B,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GAGjB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAsB,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,kCAAkC,EAClC,mBAAmB,EACnB,gCAAgC,EAChC,uBAAuB,EACvB,WAAW,EACX,eAAe,GAChB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * HKDF-SHA-512 derivation per HANDSHAKE.md §2.4 and SESSION.md §2.1.
3
+ *
4
+ * SEMP uses HKDF-SHA-512 for both currently defined algorithm suites.
5
+ * The five per-key info labels (and the resumption label) are bound
6
+ * contexts that prevent cross-context key confusion if an
7
+ * implementation accidentally reuses a PRK across derivations.
8
+ *
9
+ * @module
10
+ */
11
+ /**
12
+ * Per-key HKDF info labels for the five session keys derived from
13
+ * the initial-handshake PRK. Per VECTORS.md §2.2, the rekey
14
+ * derivation reuses these same labels — cross-context separation
15
+ * comes from the salt change (rekey nonces vs handshake nonces),
16
+ * not from a different label namespace.
17
+ */
18
+ export declare const InfoSessionEncC2S = "SEMP-v1-session-enc-c2s";
19
+ export declare const InfoSessionEncS2C = "SEMP-v1-session-enc-s2c";
20
+ export declare const InfoSessionMACC2S = "SEMP-v1-session-mac-c2s";
21
+ export declare const InfoSessionMACS2C = "SEMP-v1-session-mac-s2c";
22
+ export declare const InfoSessionEnvMAC = "SEMP-v1-session-env-mac";
23
+ /**
24
+ * K_resumption label per HANDSHAKE.md §2.8.3 and SESSION.md §2.7.
25
+ * K_resumption is NOT used to encrypt or MAC any message in the
26
+ * current session; it is the secret a server retains so that, mixed
27
+ * with a fresh ephemeral DH on a later resume attempt, the resumed
28
+ * session derives a new key schedule.
29
+ */
30
+ export declare const InfoSessionResumption = "SEMP-v1-session-resumption";
31
+ /** Length in bytes of every derived session key (SESSION.md §2.1). */
32
+ export declare const SessionKeyLength = 32;
33
+ /**
34
+ * Generic KDF interface. Both currently defined SEMP suites use
35
+ * HKDF-SHA-512; future suites may swap to a different hash.
36
+ */
37
+ export interface KDF {
38
+ /** HKDF-Extract(salt, ikm) -> PRK. */
39
+ extract(salt: Uint8Array, ikm: Uint8Array): Uint8Array;
40
+ /** HKDF-Expand(prk, info, length) -> length bytes of OKM. */
41
+ expand(prk: Uint8Array, info: Uint8Array, length: number): Uint8Array;
42
+ }
43
+ /**
44
+ * Returns a stateless HKDF-SHA-512 KDF instance. Safe for concurrent
45
+ * use; no state is held between calls.
46
+ */
47
+ export declare function newHKDFSHA512(): KDF;
48
+ /** The five session keys derived from a handshake PRK. */
49
+ export interface SessionKeys {
50
+ /** Client -> server message encryption key. */
51
+ encC2S: Uint8Array;
52
+ /** Server -> client message encryption key. */
53
+ encS2C: Uint8Array;
54
+ /** Client -> server message MAC key. */
55
+ macC2S: Uint8Array;
56
+ /** Server -> client message MAC key. */
57
+ macS2C: Uint8Array;
58
+ /** Envelope-layer MAC key (HMAC-SHA-256 over canonical envelopes). */
59
+ envMAC: Uint8Array;
60
+ /**
61
+ * Resumption secret (32 bytes). Set on initial-handshake derivation
62
+ * via {@link deriveSessionKeysWithResumption}; absent on rekey
63
+ * derivations.
64
+ */
65
+ resumption?: Uint8Array;
66
+ }
67
+ /**
68
+ * Derive the five session keys from a handshake. The salt is
69
+ * `clientNonce || serverNonce`. Per VECTORS.md §2.1, the IKM is the
70
+ * shared secret from the negotiated KEM; for rekey, the same five
71
+ * keys are derived under the rekey nonces but the resumption secret
72
+ * is NOT regenerated.
73
+ */
74
+ export declare function deriveSessionKeys(kdf: KDF, sharedSecret: Uint8Array, clientNonce: Uint8Array, serverNonce: Uint8Array): SessionKeys;
75
+ /**
76
+ * Like {@link deriveSessionKeys} but also derives K_resumption.
77
+ * Used on the initial handshake; rekey derivations skip the
78
+ * resumption expansion.
79
+ */
80
+ export declare function deriveSessionKeysWithResumption(kdf: KDF, sharedSecret: Uint8Array, clientNonce: Uint8Array, serverNonce: Uint8Array): SessionKeys;
81
+ /**
82
+ * Derive the resumed-session keys from a rekey ECDH and a retained
83
+ * resumption secret per HANDSHAKE.md §2.8.3 and SESSION.md §2.7.
84
+ * IKM is `ephemeralSharedSecret || kResumption`, salt is
85
+ * `clientNonce || serverNonce`. The five expand labels are the same
86
+ * SEMP-v1-session-* labels as the initial derivation.
87
+ */
88
+ export declare function deriveResumedSessionKeys(kdf: KDF, ephemeralSharedSecret: Uint8Array, kResumption: Uint8Array, clientNonce: Uint8Array, serverNonce: Uint8Array): SessionKeys;
89
+ /**
90
+ * Derive rekey keys per SESSION.md §3.3. Identical to the initial
91
+ * derivation in label set; the cross-context separation comes from
92
+ * the salt construction (rekeyNonce || responderNonce) and a fresh
93
+ * shared secret.
94
+ */
95
+ export declare function deriveRekeyKeys(kdf: KDF, sharedSecret: Uint8Array, rekeyNonce: Uint8Array, responderNonce: Uint8Array): SessionKeys;
96
+ //# sourceMappingURL=kdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kdf.d.ts","sourceRoot":"","sources":["../../src/crypto/kdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAC3D,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAC3D,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAC3D,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAC3D,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAElE,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;GAGG;AACH,MAAM,WAAW,GAAG;IAClB,sCAAsC;IACtC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IACvD,6DAA6D;IAC7D,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CACvE;AAWD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAEnC;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,MAAM,EAAE,UAAU,CAAC;IACnB,+CAA+C;IAC/C,MAAM,EAAE,UAAU,CAAC;IACnB,wCAAwC;IACxC,MAAM,EAAE,UAAU,CAAC;IACnB,wCAAwC;IACxC,MAAM,EAAE,UAAU,CAAC;IACnB,sEAAsE;IACtE,MAAM,EAAE,UAAU,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,UAAU,EACxB,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,UAAU,GACtB,WAAW,CAUb;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,UAAU,EACxB,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,UAAU,GACtB,WAAW,CAWb;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,GAAG,EACR,qBAAqB,EAAE,UAAU,EACjC,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,UAAU,GACtB,WAAW,CAWb;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,UAAU,EACxB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,UAAU,GACzB,WAAW,CAEb"}