@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,176 @@
1
+ /**
2
+ * Handshake message builders per HANDSHAKE.md §2.
3
+ *
4
+ * Five message kinds in the v1 handshake flow:
5
+ *
6
+ * INIT client -> server (step="init", no signature)
7
+ * RESPONSE server -> client (step="response", server_signature)
8
+ * CONFIRM client -> server (step="confirm", carries identity_proof)
9
+ * ACCEPTED server -> client (step="accepted", server_signature)
10
+ * REJECTED server -> client (step="rejected", reason_code,
11
+ * server_signature)
12
+ *
13
+ * The signed messages share the canonical-bytes pattern every other
14
+ * SEMP-signed document uses: blank `server_signature`, canonicalize,
15
+ * prepend `SEMP-HANDSHAKE:`, Ed25519-sign with the server domain
16
+ * signing key, write the signature back into the message.
17
+ *
18
+ * @module
19
+ */
20
+ /** Domain-separation prefix for all handshake signatures. */
21
+ export declare const HandshakePrefix = "SEMP-HANDSHAKE:";
22
+ /** Common version string. */
23
+ export declare const HandshakeVersion = "1.0.0";
24
+ /** A keyref (algorithm + key bytes + fingerprint) shared by both parties. */
25
+ export interface KeyRef {
26
+ algorithm: string;
27
+ /** base64 encoding of the public key bytes */
28
+ key: string;
29
+ /** lowercase-hex SHA-256 fingerprint of the key */
30
+ key_id: string;
31
+ }
32
+ /** Capabilities section advertised by the client in INIT. */
33
+ export interface Capabilities {
34
+ encryption_algorithms: string[];
35
+ extensions: string[];
36
+ }
37
+ /** Negotiated subset agreed on in RESPONSE. */
38
+ export interface Negotiated {
39
+ encryption_algorithm: string;
40
+ extensions: string[];
41
+ /**
42
+ * Optional max envelope size negotiation. The server may pin a
43
+ * stricter ceiling than the protocol default; the client honors
44
+ * whichever value the server returns.
45
+ */
46
+ max_envelope_size?: number;
47
+ }
48
+ /** Server's identity-proof signature reference attached to RESPONSE. */
49
+ export interface ServerIdentityProof {
50
+ domain: string;
51
+ key_id: string;
52
+ /** base64 of the identity-proof signature; computation defined in §2.3. */
53
+ signature: string;
54
+ }
55
+ export interface InitMessage {
56
+ type: "SEMP_HANDSHAKE";
57
+ step: "init";
58
+ party: "client";
59
+ version: string;
60
+ /** base64 of 32-byte client nonce */
61
+ nonce: string;
62
+ /** Transport identifier; one of "ws", "h2", "quic". */
63
+ transport: string;
64
+ /** Client ephemeral public key for the negotiated KEM. */
65
+ client_ephemeral_key: KeyRef;
66
+ capabilities: Capabilities;
67
+ extensions: Record<string, unknown>;
68
+ }
69
+ export interface BuildInitInput {
70
+ nonce: string;
71
+ transport: string;
72
+ clientEphemeralKey: KeyRef;
73
+ capabilities: Capabilities;
74
+ extensions?: Record<string, unknown>;
75
+ }
76
+ /** Build a canonical-shape INIT message. INIT is unsigned. */
77
+ export declare function buildInit(input: BuildInitInput): InitMessage;
78
+ export interface ResponseMessage {
79
+ type: "SEMP_HANDSHAKE";
80
+ step: "response";
81
+ party: "server";
82
+ version: string;
83
+ session_id: string;
84
+ client_nonce: string;
85
+ server_nonce: string;
86
+ server_ephemeral_key: KeyRef;
87
+ server_identity_proof: ServerIdentityProof;
88
+ negotiated: Negotiated;
89
+ server_signature: string;
90
+ extensions: Record<string, unknown>;
91
+ }
92
+ export interface BuildResponseInput {
93
+ sessionId: string;
94
+ clientNonce: string;
95
+ serverNonce: string;
96
+ serverEphemeralKey: KeyRef;
97
+ serverIdentityProof: ServerIdentityProof;
98
+ negotiated: Negotiated;
99
+ /** 32-byte Ed25519 secret seed for the server domain signing key. */
100
+ serverDomainSigningSeed: Uint8Array;
101
+ extensions?: Record<string, unknown>;
102
+ }
103
+ /**
104
+ * Build a signed RESPONSE message. Composes the canonical pre-sign
105
+ * shape, signs over `SEMP-HANDSHAKE: || canonical(blanked)`, and
106
+ * writes the base64-encoded signature back into `server_signature`.
107
+ */
108
+ export declare function buildResponse(input: BuildResponseInput): ResponseMessage;
109
+ export interface ConfirmMessage {
110
+ type: "SEMP_HANDSHAKE";
111
+ step: "confirm";
112
+ party: "client";
113
+ version: string;
114
+ session_id: string;
115
+ /** base64 of the SHA-256 confirmation hash; see handshake.confirmationHash. */
116
+ confirmation_hash: string;
117
+ /** Opaque identity-proof ciphertext (encrypted under the agreed session key). */
118
+ identity_proof: string;
119
+ extensions: Record<string, unknown>;
120
+ }
121
+ export interface BuildConfirmInput {
122
+ sessionId: string;
123
+ confirmationHashB64: string;
124
+ identityProofB64: string;
125
+ extensions?: Record<string, unknown>;
126
+ }
127
+ /** Build a canonical-shape CONFIRM message. CONFIRM is unsigned at this layer. */
128
+ export declare function buildConfirm(input: BuildConfirmInput): ConfirmMessage;
129
+ export interface ResumptionTicket {
130
+ /** Opaque ticket value (server-defined opaque blob). */
131
+ value: string;
132
+ /** ISO 8601 timestamp at which the ticket stops being valid. */
133
+ expires_at: string;
134
+ }
135
+ export interface AcceptedMessage {
136
+ type: "SEMP_HANDSHAKE";
137
+ step: "accepted";
138
+ party: "server";
139
+ version: string;
140
+ session_id: string;
141
+ session_ttl: number;
142
+ permissions: string[];
143
+ resumption_ticket?: ResumptionTicket;
144
+ server_signature: string;
145
+ extensions: Record<string, unknown>;
146
+ }
147
+ export interface BuildAcceptedInput {
148
+ sessionId: string;
149
+ sessionTTL: number;
150
+ permissions: string[];
151
+ resumptionTicket?: ResumptionTicket;
152
+ serverDomainSigningSeed: Uint8Array;
153
+ extensions?: Record<string, unknown>;
154
+ }
155
+ export declare function buildAccepted(input: BuildAcceptedInput): AcceptedMessage;
156
+ export interface RejectedMessage {
157
+ type: "SEMP_HANDSHAKE";
158
+ step: "rejected";
159
+ party: "server";
160
+ version: string;
161
+ session_id: string;
162
+ reason_code: string;
163
+ /** Optional human-readable reason. */
164
+ reason?: string;
165
+ server_signature: string;
166
+ extensions: Record<string, unknown>;
167
+ }
168
+ export interface BuildRejectedInput {
169
+ sessionId: string;
170
+ reasonCode: string;
171
+ reason?: string;
172
+ serverDomainSigningSeed: Uint8Array;
173
+ extensions?: Record<string, unknown>;
174
+ }
175
+ export declare function buildRejected(input: BuildRejectedInput): RejectedMessage;
176
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/handshake/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Handshake message builders per HANDSHAKE.md §2.
3
+ *
4
+ * Five message kinds in the v1 handshake flow:
5
+ *
6
+ * INIT client -> server (step="init", no signature)
7
+ * RESPONSE server -> client (step="response", server_signature)
8
+ * CONFIRM client -> server (step="confirm", carries identity_proof)
9
+ * ACCEPTED server -> client (step="accepted", server_signature)
10
+ * REJECTED server -> client (step="rejected", reason_code,
11
+ * server_signature)
12
+ *
13
+ * The signed messages share the canonical-bytes pattern every other
14
+ * SEMP-signed document uses: blank `server_signature`, canonicalize,
15
+ * prepend `SEMP-HANDSHAKE:`, Ed25519-sign with the server domain
16
+ * signing key, write the signature back into the message.
17
+ *
18
+ * @module
19
+ */
20
+ import { signSignedDoc } from "../keys/signed.js";
21
+ /** Domain-separation prefix for all handshake signatures. */
22
+ export const HandshakePrefix = "SEMP-HANDSHAKE:";
23
+ /** Common version string. */
24
+ export const HandshakeVersion = "1.0.0";
25
+ /** Build a canonical-shape INIT message. INIT is unsigned. */
26
+ export function buildInit(input) {
27
+ return {
28
+ type: "SEMP_HANDSHAKE",
29
+ step: "init",
30
+ party: "client",
31
+ version: HandshakeVersion,
32
+ nonce: input.nonce,
33
+ transport: input.transport,
34
+ client_ephemeral_key: input.clientEphemeralKey,
35
+ capabilities: input.capabilities,
36
+ extensions: input.extensions ?? {},
37
+ };
38
+ }
39
+ /**
40
+ * Build a signed RESPONSE message. Composes the canonical pre-sign
41
+ * shape, signs over `SEMP-HANDSHAKE: || canonical(blanked)`, and
42
+ * writes the base64-encoded signature back into `server_signature`.
43
+ */
44
+ export function buildResponse(input) {
45
+ const preSign = {
46
+ type: "SEMP_HANDSHAKE",
47
+ step: "response",
48
+ party: "server",
49
+ version: HandshakeVersion,
50
+ session_id: input.sessionId,
51
+ client_nonce: input.clientNonce,
52
+ server_nonce: input.serverNonce,
53
+ server_ephemeral_key: input.serverEphemeralKey,
54
+ server_identity_proof: input.serverIdentityProof,
55
+ negotiated: input.negotiated,
56
+ server_signature: "",
57
+ extensions: input.extensions ?? {},
58
+ };
59
+ const { signedJSON } = signSignedDoc({
60
+ preSignJSON: preSign,
61
+ seed: input.serverDomainSigningSeed,
62
+ signaturePath: "server_signature",
63
+ prefix: HandshakePrefix,
64
+ });
65
+ return signedJSON;
66
+ }
67
+ /** Build a canonical-shape CONFIRM message. CONFIRM is unsigned at this layer. */
68
+ export function buildConfirm(input) {
69
+ return {
70
+ type: "SEMP_HANDSHAKE",
71
+ step: "confirm",
72
+ party: "client",
73
+ version: HandshakeVersion,
74
+ session_id: input.sessionId,
75
+ confirmation_hash: input.confirmationHashB64,
76
+ identity_proof: input.identityProofB64,
77
+ extensions: input.extensions ?? {},
78
+ };
79
+ }
80
+ export function buildAccepted(input) {
81
+ const preSign = {
82
+ type: "SEMP_HANDSHAKE",
83
+ step: "accepted",
84
+ party: "server",
85
+ version: HandshakeVersion,
86
+ session_id: input.sessionId,
87
+ session_ttl: input.sessionTTL,
88
+ permissions: input.permissions,
89
+ server_signature: "",
90
+ extensions: input.extensions ?? {},
91
+ };
92
+ if (input.resumptionTicket !== undefined) {
93
+ preSign.resumption_ticket = input.resumptionTicket;
94
+ }
95
+ const { signedJSON } = signSignedDoc({
96
+ preSignJSON: preSign,
97
+ seed: input.serverDomainSigningSeed,
98
+ signaturePath: "server_signature",
99
+ prefix: HandshakePrefix,
100
+ });
101
+ return signedJSON;
102
+ }
103
+ export function buildRejected(input) {
104
+ const preSign = {
105
+ type: "SEMP_HANDSHAKE",
106
+ step: "rejected",
107
+ party: "server",
108
+ version: HandshakeVersion,
109
+ session_id: input.sessionId,
110
+ reason_code: input.reasonCode,
111
+ server_signature: "",
112
+ extensions: input.extensions ?? {},
113
+ };
114
+ if (input.reason !== undefined) {
115
+ preSign.reason = input.reason;
116
+ }
117
+ const { signedJSON } = signSignedDoc({
118
+ preSignJSON: preSign,
119
+ seed: input.serverDomainSigningSeed,
120
+ signaturePath: "server_signature",
121
+ prefix: HandshakePrefix,
122
+ });
123
+ return signedJSON;
124
+ }
125
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/handshake/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Proof-of-Work verification per HANDSHAKE.md §2.2b and REPUTATION.md §8.3.
3
+ *
4
+ * Two PoW preimages exist in the spec:
5
+ *
6
+ * - **Challenge PoW** (this module): preimage is the UTF-8 string
7
+ * `base64(prefix) || ":" || challenge_id || ":" || base64(nonce)`.
8
+ * Used by the standard handshake-time difficulty challenge.
9
+ * - **First-contact PoW** (HANDSHAKE.md §2.2a.4): preimage is the
10
+ * raw byte concatenation `prefix || nonce`. Different shape because
11
+ * §2.2a.4 binds the first-contact tuple via the prefix derivation
12
+ * itself, not via the preimage. See {@link verifyFirstContactSolution}.
13
+ *
14
+ * @module
15
+ */
16
+ /** Maximum difficulty the verifier accepts (HANDSHAKE.md §2.2b). */
17
+ export declare const MaxPoWDifficulty = 28;
18
+ /**
19
+ * Verify a challenge-PoW solution. Returns null on success; an Error
20
+ * on rejection so callers can surface a specific failure reason.
21
+ *
22
+ * - `prefix` is the raw 16-byte challenge prefix.
23
+ * - `challengeId` is the ULID of the issued challenge.
24
+ * - `nonceB64` is the candidate nonce as base64 (RFC 4648 §4).
25
+ * - `claimedHashHex` is the hex digest the sender claims; the
26
+ * verifier MUST recompute and compare.
27
+ * - `difficulty` is the required leading-zero-bit count of the SHA-256
28
+ * digest; verification rejects if the recomputed hash has fewer
29
+ * leading zeros.
30
+ *
31
+ * Cap at {@link MaxPoWDifficulty}: a verifier that accepts a higher
32
+ * difficulty would silently validate a non-conformant challenge.
33
+ */
34
+ export declare function verifyChallengeSolution(prefix: Uint8Array, challengeId: string, nonceB64: string, claimedHashHex: string, difficulty: number): Error | null;
35
+ /**
36
+ * First-contact PoW verifier per HANDSHAKE.md §2.2a.4. The
37
+ * preimage is the raw concatenation `prefix || nonce`, hashed with
38
+ * SHA-256. Returns the recomputed hash and the leading-zero bit
39
+ * count; the caller decides whether the bit count meets its
40
+ * difficulty threshold (the difficulty is a recipient policy, not a
41
+ * protocol constant here).
42
+ */
43
+ export declare function firstContactDigest(prefix: Uint8Array, nonce: Uint8Array): {
44
+ hash: Uint8Array;
45
+ leadingZeroBits: number;
46
+ };
47
+ /**
48
+ * Count the number of leading zero bits in a hash. Used by both
49
+ * PoW preimages to assess whether a candidate solution meets the
50
+ * required difficulty.
51
+ */
52
+ export declare function leadingZeroBits(hash: Uint8Array): number;
53
+ //# sourceMappingURL=pow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pow.d.ts","sourceRoot":"","sources":["../../src/handshake/pow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,KAAK,GAAG,IAAI,CA+Bd;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,UAAU,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAM/C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAkBxD"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Proof-of-Work verification per HANDSHAKE.md §2.2b and REPUTATION.md §8.3.
3
+ *
4
+ * Two PoW preimages exist in the spec:
5
+ *
6
+ * - **Challenge PoW** (this module): preimage is the UTF-8 string
7
+ * `base64(prefix) || ":" || challenge_id || ":" || base64(nonce)`.
8
+ * Used by the standard handshake-time difficulty challenge.
9
+ * - **First-contact PoW** (HANDSHAKE.md §2.2a.4): preimage is the
10
+ * raw byte concatenation `prefix || nonce`. Different shape because
11
+ * §2.2a.4 binds the first-contact tuple via the prefix derivation
12
+ * itself, not via the preimage. See {@link verifyFirstContactSolution}.
13
+ *
14
+ * @module
15
+ */
16
+ import { sha256 } from "@noble/hashes/sha2.js";
17
+ /** Maximum difficulty the verifier accepts (HANDSHAKE.md §2.2b). */
18
+ export const MaxPoWDifficulty = 28;
19
+ /**
20
+ * Verify a challenge-PoW solution. Returns null on success; an Error
21
+ * on rejection so callers can surface a specific failure reason.
22
+ *
23
+ * - `prefix` is the raw 16-byte challenge prefix.
24
+ * - `challengeId` is the ULID of the issued challenge.
25
+ * - `nonceB64` is the candidate nonce as base64 (RFC 4648 §4).
26
+ * - `claimedHashHex` is the hex digest the sender claims; the
27
+ * verifier MUST recompute and compare.
28
+ * - `difficulty` is the required leading-zero-bit count of the SHA-256
29
+ * digest; verification rejects if the recomputed hash has fewer
30
+ * leading zeros.
31
+ *
32
+ * Cap at {@link MaxPoWDifficulty}: a verifier that accepts a higher
33
+ * difficulty would silently validate a non-conformant challenge.
34
+ */
35
+ export function verifyChallengeSolution(prefix, challengeId, nonceB64, claimedHashHex, difficulty) {
36
+ if (difficulty < 0) {
37
+ return new Error("handshake: negative PoW difficulty");
38
+ }
39
+ if (difficulty > MaxPoWDifficulty) {
40
+ return new Error("handshake: PoW difficulty exceeds protocol cap (28)");
41
+ }
42
+ if (challengeId === "") {
43
+ return new Error("handshake: empty PoW challenge_id");
44
+ }
45
+ if (nonceB64 === "") {
46
+ return new Error("handshake: empty PoW nonce");
47
+ }
48
+ // Nonce must be valid base64 — but we accept its bytes as-is in
49
+ // the preimage (the spec hashes the base64 string, not the
50
+ // decoded bytes).
51
+ try {
52
+ decodeBase64Strict(nonceB64);
53
+ }
54
+ catch {
55
+ return new Error("handshake: PoW nonce is not valid base64");
56
+ }
57
+ const preimage = challengePreimage(prefix, challengeId, nonceB64);
58
+ const sum = sha256(preimage);
59
+ const computedHex = bytesToHex(sum);
60
+ if (computedHex.toLowerCase() !== claimedHashHex.toLowerCase()) {
61
+ return new Error("handshake: PoW hash mismatch");
62
+ }
63
+ if (leadingZeroBits(sum) < difficulty) {
64
+ return new Error("handshake: PoW insufficient difficulty");
65
+ }
66
+ return null;
67
+ }
68
+ /**
69
+ * First-contact PoW verifier per HANDSHAKE.md §2.2a.4. The
70
+ * preimage is the raw concatenation `prefix || nonce`, hashed with
71
+ * SHA-256. Returns the recomputed hash and the leading-zero bit
72
+ * count; the caller decides whether the bit count meets its
73
+ * difficulty threshold (the difficulty is a recipient policy, not a
74
+ * protocol constant here).
75
+ */
76
+ export function firstContactDigest(prefix, nonce) {
77
+ const buf = new Uint8Array(prefix.length + nonce.length);
78
+ buf.set(prefix, 0);
79
+ buf.set(nonce, prefix.length);
80
+ const sum = sha256(buf);
81
+ return { hash: sum, leadingZeroBits: leadingZeroBits(sum) };
82
+ }
83
+ /**
84
+ * Count the number of leading zero bits in a hash. Used by both
85
+ * PoW preimages to assess whether a candidate solution meets the
86
+ * required difficulty.
87
+ */
88
+ export function leadingZeroBits(hash) {
89
+ let n = 0;
90
+ for (let i = 0; i < hash.length; i++) {
91
+ const b = hash[i] ?? 0;
92
+ if (b === 0) {
93
+ n += 8;
94
+ continue;
95
+ }
96
+ let bb = b;
97
+ let bits = 8;
98
+ while (bb !== 0) {
99
+ bb = bb >>> 1;
100
+ bits--;
101
+ }
102
+ n += bits;
103
+ return n;
104
+ }
105
+ return n;
106
+ }
107
+ function challengePreimage(prefix, challengeId, nonceB64) {
108
+ const prefixB64 = bytesToBase64(prefix);
109
+ return new TextEncoder().encode(`${prefixB64}:${challengeId}:${nonceB64}`);
110
+ }
111
+ function bytesToHex(b) {
112
+ let s = "";
113
+ for (let i = 0; i < b.length; i++) {
114
+ s += (b[i] ?? 0).toString(16).padStart(2, "0");
115
+ }
116
+ return s;
117
+ }
118
+ function bytesToBase64(b) {
119
+ // Node and modern browsers both support btoa via TextDecoder, but
120
+ // the cleanest portable path is Buffer when available, falling
121
+ // back to a binary-string + btoa for browsers.
122
+ if (typeof Buffer !== "undefined") {
123
+ return Buffer.from(b).toString("base64");
124
+ }
125
+ let bin = "";
126
+ for (let i = 0; i < b.length; i++) {
127
+ bin += String.fromCharCode(b[i] ?? 0);
128
+ }
129
+ return btoa(bin);
130
+ }
131
+ function decodeBase64Strict(s) {
132
+ if (typeof Buffer !== "undefined") {
133
+ return new Uint8Array(Buffer.from(s, "base64"));
134
+ }
135
+ const bin = atob(s);
136
+ const out = new Uint8Array(bin.length);
137
+ for (let i = 0; i < bin.length; i++) {
138
+ out[i] = bin.charCodeAt(i);
139
+ }
140
+ return out;
141
+ }
142
+ //# sourceMappingURL=pow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pow.js","sourceRoot":"","sources":["../../src/handshake/pow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Session-resume driver per HANDSHAKE.md §2.8.
3
+ *
4
+ * Wraps the stateful {@link HandshakeClient} for the resume path:
5
+ *
6
+ * 1. Send `step="resume"` with the ticket value + a fresh client
7
+ * nonce.
8
+ * 2. Receive ACCEPTED (or REJECTED).
9
+ * 3. On ACCEPTED, derive resumed session keys and return both
10
+ * the new session and the new ticket the server issued for
11
+ * chaining a future resume.
12
+ *
13
+ * On REJECTED with `reason_code` ∈ {`resumption_failed`,
14
+ * `configuration_stale`, `no_session`}, throw an error that
15
+ * satisfies {@link "./abort".isResumptionFailed}; the caller MUST
16
+ * discard the resume attempt and fall back to a fresh full
17
+ * handshake. {@link runClientResumeOrFull} composes this for callers
18
+ * who want one-call fallback.
19
+ *
20
+ * @module
21
+ */
22
+ import type { Transport } from "../transport/index.js";
23
+ import { type HandshakeClient, type HandshakeClientSession } from "./client_state.js";
24
+ /**
25
+ * Drive a client-side resume exchange to completion over `transport`.
26
+ * Returns the resumed session plus the new ticket bytes the server
27
+ * issued for chaining (`undefined` if the server didn't issue one).
28
+ */
29
+ export declare function runClientResume(transport: Transport, client: HandshakeClient, ticket: string): Promise<{
30
+ session: HandshakeClientSession;
31
+ newTicket: string | undefined;
32
+ }>;
33
+ /**
34
+ * Try a resume against `resumeTransport` / `resumeClient` /
35
+ * `ticket` per §2.8.5. If the resume fails with a fallback-eligible
36
+ * reason (resumption_failed / configuration_stale / no_session),
37
+ * discard the resume attempt and perform a full handshake against a
38
+ * fresh transport + client supplied by the caller.
39
+ *
40
+ * The caller supplies factories rather than reusing the prior
41
+ * transport / client because:
42
+ *
43
+ * - The prior transport was already used for the failed Resume
44
+ * exchange.
45
+ * - The prior client has accumulated state from `resume()` that
46
+ * would interfere with a fresh `init()`.
47
+ *
48
+ * Returns `{ session, newTicket, fellBack }`. `fellBack` is `true`
49
+ * when the function fell back to a full handshake.
50
+ */
51
+ export declare function runClientResumeOrFull(resumeTransport: Transport, resumeClient: HandshakeClient, ticket: string, freshTransport: () => Promise<Transport>, fullHandshake: (transport: Transport) => Promise<HandshakeClientSession>): Promise<{
52
+ session: HandshakeClientSession;
53
+ newTicket: string | undefined;
54
+ fellBack: boolean;
55
+ }>;
56
+ //# sourceMappingURL=resume_driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume_driver.d.ts","sourceRoot":"","sources":["../../src/handshake/resume_driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAE5B,MAAM,mBAAmB,CAAC;AAG3B;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,sBAAsB,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAW7E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,eAAe,EAAE,SAAS,EAC1B,YAAY,EAAE,eAAe,EAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,EACxC,aAAa,EAAE,CACb,SAAS,EAAE,SAAS,KACjB,OAAO,CAAC,sBAAsB,CAAC,GACnC,OAAO,CAAC;IACT,OAAO,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAgBD"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Session-resume driver per HANDSHAKE.md §2.8.
3
+ *
4
+ * Wraps the stateful {@link HandshakeClient} for the resume path:
5
+ *
6
+ * 1. Send `step="resume"` with the ticket value + a fresh client
7
+ * nonce.
8
+ * 2. Receive ACCEPTED (or REJECTED).
9
+ * 3. On ACCEPTED, derive resumed session keys and return both
10
+ * the new session and the new ticket the server issued for
11
+ * chaining a future resume.
12
+ *
13
+ * On REJECTED with `reason_code` ∈ {`resumption_failed`,
14
+ * `configuration_stale`, `no_session`}, throw an error that
15
+ * satisfies {@link "./abort".isResumptionFailed}; the caller MUST
16
+ * discard the resume attempt and fall back to a fresh full
17
+ * handshake. {@link runClientResumeOrFull} composes this for callers
18
+ * who want one-call fallback.
19
+ *
20
+ * @module
21
+ */
22
+ import { HandshakeRejectedError, } from "./client_state.js";
23
+ import { isResumptionFailed } from "./abort.js";
24
+ /**
25
+ * Drive a client-side resume exchange to completion over `transport`.
26
+ * Returns the resumed session plus the new ticket bytes the server
27
+ * issued for chaining (`undefined` if the server didn't issue one).
28
+ */
29
+ export async function runClientResume(transport, client, ticket) {
30
+ if (ticket === "") {
31
+ throw new Error("handshake: empty resumption ticket");
32
+ }
33
+ const resumeBytes = client.resume(ticket);
34
+ await transport.send(resumeBytes);
35
+ const respBytes = await transport.receive();
36
+ if (respBytes === null) {
37
+ throw new Error("handshake: connection closed waiting for resume response");
38
+ }
39
+ return client.onResumeAccepted(respBytes);
40
+ }
41
+ /**
42
+ * Try a resume against `resumeTransport` / `resumeClient` /
43
+ * `ticket` per §2.8.5. If the resume fails with a fallback-eligible
44
+ * reason (resumption_failed / configuration_stale / no_session),
45
+ * discard the resume attempt and perform a full handshake against a
46
+ * fresh transport + client supplied by the caller.
47
+ *
48
+ * The caller supplies factories rather than reusing the prior
49
+ * transport / client because:
50
+ *
51
+ * - The prior transport was already used for the failed Resume
52
+ * exchange.
53
+ * - The prior client has accumulated state from `resume()` that
54
+ * would interfere with a fresh `init()`.
55
+ *
56
+ * Returns `{ session, newTicket, fellBack }`. `fellBack` is `true`
57
+ * when the function fell back to a full handshake.
58
+ */
59
+ export async function runClientResumeOrFull(resumeTransport, resumeClient, ticket, freshTransport, fullHandshake) {
60
+ try {
61
+ const r = await runClientResume(resumeTransport, resumeClient, ticket);
62
+ return { session: r.session, newTicket: r.newTicket, fellBack: false };
63
+ }
64
+ catch (err) {
65
+ if (!(err instanceof HandshakeRejectedError) ||
66
+ !isResumptionFailed(err)) {
67
+ throw err;
68
+ }
69
+ // Fall back to a full handshake on a fresh transport + client.
70
+ const t = await freshTransport();
71
+ const session = await fullHandshake(t);
72
+ return { session, newTicket: undefined, fellBack: true };
73
+ }
74
+ }
75
+ //# sourceMappingURL=resume_driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume_driver.js","sourceRoot":"","sources":["../../src/handshake/resume_driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAGL,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAoB,EACpB,MAAuB,EACvB,MAAc;IAEd,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;IAC5C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,eAA0B,EAC1B,YAA6B,EAC7B,MAAc,EACd,cAAwC,EACxC,aAEoC;IAMpC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,eAAe,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IACE,CAAC,CAAC,GAAG,YAAY,sBAAsB,CAAC;YACxC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EACxB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,+DAA+D;QAC/D,MAAM,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3D,CAAC;AACH,CAAC"}