@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,67 @@
1
+ /**
2
+ * Open + verify orchestrator per ENVELOPE.md §6 + §7.2.
3
+ *
4
+ * `openAndVerify` runs the full receipt-side check on an envelope
5
+ * delivered to a recipient client:
6
+ *
7
+ * 1. Resolve the sender domain's signing public key via the
8
+ * caller-supplied {@link SenderKeyResolver}.
9
+ * 2. Verify `seal.signature` against that key.
10
+ * 3. Walk the supplied recipient candidates and open the brief +
11
+ * enclosure for the first matching device key.
12
+ *
13
+ * `openAndVerify` does NOT run `seal.session_mac` — that is the
14
+ * routing-server / receiving-server check between adjacent SEMP
15
+ * peers; the recipient client uses {@link "./verify".verifySessionMAC}
16
+ * separately when it has access to the K_env_mac.
17
+ *
18
+ * @module
19
+ */
20
+ import {} from "./compose.js";
21
+ import { openBriefAny, openEnclosureAny, } from "./open_any.js";
22
+ import { verifySealSignature } from "./verify.js";
23
+ /**
24
+ * Run sender-signature verification + multi-candidate open. Returns
25
+ * the opened plaintexts plus the matched candidate and the resolved
26
+ * sender public key. Throws on missing sender key, signature
27
+ * mismatch, or open failure.
28
+ */
29
+ export async function openAndVerify(input) {
30
+ const env = input.envelope;
31
+ const fromDomain = env.postmark.from_domain;
32
+ const keyId = env.seal.key_id;
33
+ const lookup = isResolver(input.resolver)
34
+ ? input.resolver.lookupSenderDomainPub.bind(input.resolver)
35
+ : input.resolver;
36
+ const pub = await lookup(fromDomain, keyId);
37
+ if (pub === null) {
38
+ throw new Error(`envelope: openAndVerify: resolver returned null for sender domain ${JSON.stringify(fromDomain)}, key_id ${JSON.stringify(keyId)}`);
39
+ }
40
+ if (!verifySealSignature(env, pub)) {
41
+ throw new Error("envelope: openAndVerify: seal.signature did not verify under the resolved sender domain key");
42
+ }
43
+ let brief;
44
+ let enclosure;
45
+ try {
46
+ brief = openBriefAny(input.suite, env, input.candidates);
47
+ }
48
+ catch (err) {
49
+ throw new Error(`envelope: openAndVerify: open brief failed: ${err instanceof Error ? err.message : String(err)}`);
50
+ }
51
+ try {
52
+ enclosure = openEnclosureAny(input.suite, env, input.candidates);
53
+ }
54
+ catch (err) {
55
+ throw new Error(`envelope: openAndVerify: open enclosure failed: ${err instanceof Error ? err.message : String(err)}`);
56
+ }
57
+ return {
58
+ senderDomainPub: pub,
59
+ candidate: brief.candidate,
60
+ brief: brief.brief,
61
+ enclosure: enclosure.enclosure,
62
+ };
63
+ }
64
+ function isResolver(r) {
65
+ return (typeof r.lookupSenderDomainPub === "function");
66
+ }
67
+ //# sourceMappingURL=open_verified.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open_verified.js","sourceRoot":"","sources":["../../src/envelope/open_verified.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGN,MAAM,cAAc,CAAC;AACtB,OAAO,EAIL,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA0ClD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAyB;IAEzB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3D,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IAEnB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qEAAqE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACnI,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,IAAI,KAAkB,CAAC;IACvB,IAAI,SAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,+CAA+C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAClG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mDAAmD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACtG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,eAAe,EAAE,GAAG;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,SAAS,CAAC,SAAS;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,CAA4C;IAE5C,OAAO,CACL,OAAQ,CAAuB,CAAC,qBAAqB,KAAK,UAAU,CACrE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Envelope size-bucket padding per ENVELOPE.md §2.4.
3
+ *
4
+ * `fillPadding` populates `env.padding` with a base64-alphabet filler
5
+ * string whose length brings the serialized envelope's wire size
6
+ * exactly onto the bucket chosen from the configured size sequence.
7
+ * This is the privacy-critical primitive that prevents an on-path
8
+ * observer from learning the underlying envelope size.
9
+ *
10
+ * The size sequence is the default power-of-two curve starting at
11
+ * 4 KB by default; operators tune this via `bucketSequence` per the
12
+ * spec's "Operator tuning" allowance.
13
+ *
14
+ * @module
15
+ */
16
+ import { type Envelope } from "./compose.js";
17
+ /** Exact base64 length of an Ed25519 signature (64 raw bytes → 88 chars). */
18
+ export declare const Ed25519SignatureB64Len = 88;
19
+ /** Exact base64 length of an HMAC-SHA-256 output (32 raw bytes → 44 chars). */
20
+ export declare const HMACSHA256B64Len = 44;
21
+ /** Inputs to {@link fillPadding}. */
22
+ export interface PadConfig {
23
+ /** Negotiated session ceiling. Zero means {@link DefaultMaxEnvelopeSize}. */
24
+ maxEnvelopeSize?: number;
25
+ /**
26
+ * Custom bucket sequence overriding the default power-of-two
27
+ * curve. Must be strictly increasing, with the first element
28
+ * at or above {@link MinEnvelopeSizeBucket} and the last at or
29
+ * below the effective ceiling. Operator tuning per §2.4.1.
30
+ */
31
+ bucketSequence?: number[];
32
+ /** Random source for filler bytes. Defaults to `globalThis.crypto.getRandomValues`. */
33
+ rand?: (n: number) => Uint8Array;
34
+ }
35
+ /**
36
+ * Populate `env.padding` so that `JSON.stringify(env)` lands on
37
+ * exactly the size of the chosen bucket. Safe to call before OR
38
+ * after `compose` populates `seal.signature` / `seal.session_mac` —
39
+ * if either is empty, fillPadding temporarily substitutes a
40
+ * fixed-length placeholder for measurement so the post-sign size
41
+ * is correct either way.
42
+ *
43
+ * Mutates `env` in place. Returns the chosen bucket size for
44
+ * caller-side assertions.
45
+ */
46
+ export declare function fillPadding(env: Envelope, cfg?: PadConfig): number;
47
+ /**
48
+ * Build a string of exactly `targetLen` base64-alphabet characters,
49
+ * drawn from a CSPRNG. The bulk is a base64 encoding of CSPRNG
50
+ * bytes; the final 1–3 characters (when targetLen is not reachable
51
+ * by `btoa` 4-character chunks) are CSPRNG-seeded alphabet
52
+ * characters appended for length alignment per §2.4.2.
53
+ */
54
+ export declare function buildPaddingValue(targetLen: number, rand?: (n: number) => Uint8Array): string;
55
+ //# sourceMappingURL=padding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"padding.d.ts","sourceRoot":"","sources":["../../src/envelope/padding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAOtB,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAUnC,qCAAqC;AACrC,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,uFAAuF;IACvF,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAE,SAAc,GAAG,MAAM,CAgDtE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,UAAwB,GAC5C,MAAM,CA0BR"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Envelope size-bucket padding per ENVELOPE.md §2.4.
3
+ *
4
+ * `fillPadding` populates `env.padding` with a base64-alphabet filler
5
+ * string whose length brings the serialized envelope's wire size
6
+ * exactly onto the bucket chosen from the configured size sequence.
7
+ * This is the privacy-critical primitive that prevents an on-path
8
+ * observer from learning the underlying envelope size.
9
+ *
10
+ * The size sequence is the default power-of-two curve starting at
11
+ * 4 KB by default; operators tune this via `bucketSequence` per the
12
+ * spec's "Operator tuning" allowance.
13
+ *
14
+ * @module
15
+ */
16
+ import {} from "./compose.js";
17
+ import { DefaultMaxEnvelopeSize, MinEnvelopeSizeBucket, selectSizeBucket, } from "./buckets.js";
18
+ /** Exact base64 length of an Ed25519 signature (64 raw bytes → 88 chars). */
19
+ export const Ed25519SignatureB64Len = 88;
20
+ /** Exact base64 length of an HMAC-SHA-256 output (32 raw bytes → 44 chars). */
21
+ export const HMACSHA256B64Len = 44;
22
+ /**
23
+ * Pool of single base64-alphabet characters used to extend a base64
24
+ * filler by 1, 2, or 3 bytes when the bucket target requires
25
+ * non-multiple-of-4 padding length.
26
+ */
27
+ const Base64AlphabetFillers = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
28
+ /**
29
+ * Populate `env.padding` so that `JSON.stringify(env)` lands on
30
+ * exactly the size of the chosen bucket. Safe to call before OR
31
+ * after `compose` populates `seal.signature` / `seal.session_mac` —
32
+ * if either is empty, fillPadding temporarily substitutes a
33
+ * fixed-length placeholder for measurement so the post-sign size
34
+ * is correct either way.
35
+ *
36
+ * Mutates `env` in place. Returns the chosen bucket size for
37
+ * caller-side assertions.
38
+ */
39
+ export function fillPadding(env, cfg = {}) {
40
+ const ceiling = cfg.maxEnvelopeSize ?? DefaultMaxEnvelopeSize;
41
+ if (cfg.bucketSequence !== undefined && cfg.bucketSequence.length > 0) {
42
+ validateBucketSequence(cfg.bucketSequence, ceiling);
43
+ }
44
+ const rand = cfg.rand ?? defaultRand;
45
+ // Substitute placeholders for empty signature / MAC so the
46
+ // measurement reflects the final post-sign wire size.
47
+ const origSig = env.seal.signature;
48
+ const origMac = env.seal.session_mac;
49
+ if (origSig === "") {
50
+ env.seal.signature = "A".repeat(Ed25519SignatureB64Len);
51
+ }
52
+ if (origMac === "") {
53
+ env.seal.session_mac = "A".repeat(HMACSHA256B64Len);
54
+ }
55
+ try {
56
+ env.padding = "";
57
+ const baselineBytes = utf8ByteLength(JSON.stringify(env));
58
+ const bucket = pickBucket(baselineBytes, ceiling, cfg.bucketSequence);
59
+ if (baselineBytes === bucket) {
60
+ return bucket;
61
+ }
62
+ const targetPadLen = bucket - baselineBytes;
63
+ if (targetPadLen < 0) {
64
+ throw new Error(`envelope: baseline ${baselineBytes} exceeds bucket ${bucket}`);
65
+ }
66
+ env.padding = buildPaddingValue(targetPadLen, rand);
67
+ // Final assertion: the envelope now serializes to exactly bucket.
68
+ const finalBytes = utf8ByteLength(JSON.stringify(env));
69
+ if (finalBytes !== bucket) {
70
+ throw new Error(`envelope: padding did not land on bucket ${bucket} (got ${finalBytes})`);
71
+ }
72
+ return bucket;
73
+ }
74
+ finally {
75
+ if (origSig === "") {
76
+ env.seal.signature = "";
77
+ }
78
+ if (origMac === "") {
79
+ env.seal.session_mac = "";
80
+ }
81
+ }
82
+ }
83
+ /**
84
+ * Build a string of exactly `targetLen` base64-alphabet characters,
85
+ * drawn from a CSPRNG. The bulk is a base64 encoding of CSPRNG
86
+ * bytes; the final 1–3 characters (when targetLen is not reachable
87
+ * by `btoa` 4-character chunks) are CSPRNG-seeded alphabet
88
+ * characters appended for length alignment per §2.4.2.
89
+ */
90
+ export function buildPaddingValue(targetLen, rand = defaultRand) {
91
+ if (!Number.isInteger(targetLen) || targetLen < 0) {
92
+ throw new Error(`envelope: negative padding length ${targetLen}`);
93
+ }
94
+ if (targetLen === 0) {
95
+ return "";
96
+ }
97
+ // base64 emits 4 chars per 3 input bytes. Pick the largest
98
+ // multiple of 4 ≤ targetLen as the base64-encoded portion; the
99
+ // remainder (0–3 chars) is filled from the alphabet pool.
100
+ const baseChars = targetLen - (targetLen % 4);
101
+ const inputBytes = (baseChars / 4) * 3;
102
+ const out = [];
103
+ if (inputBytes > 0) {
104
+ const buf = rand(inputBytes);
105
+ out.push(base64Encode(buf));
106
+ }
107
+ const fillerCount = targetLen - baseChars;
108
+ if (fillerCount > 0) {
109
+ const seed = rand(fillerCount);
110
+ for (let i = 0; i < fillerCount; i++) {
111
+ const idx = (seed[i] ?? 0) % Base64AlphabetFillers.length;
112
+ out.push(Base64AlphabetFillers[idx] ?? "A");
113
+ }
114
+ }
115
+ return out.join("");
116
+ }
117
+ function pickBucket(unpaddedSize, ceiling, sequence) {
118
+ if (sequence === undefined || sequence.length === 0) {
119
+ return selectSizeBucket(unpaddedSize, ceiling);
120
+ }
121
+ for (const b of sequence) {
122
+ if (b >= unpaddedSize) {
123
+ return b;
124
+ }
125
+ }
126
+ return ceiling;
127
+ }
128
+ function validateBucketSequence(seq, ceiling) {
129
+ if ((seq[0] ?? 0) < MinEnvelopeSizeBucket) {
130
+ throw new Error(`envelope: bucket sequence first element ${seq[0]} is below protocol floor ${MinEnvelopeSizeBucket}`);
131
+ }
132
+ for (let i = 1; i < seq.length; i++) {
133
+ if ((seq[i] ?? 0) <= (seq[i - 1] ?? 0)) {
134
+ throw new Error(`envelope: bucket sequence is not strictly increasing at index ${i}`);
135
+ }
136
+ }
137
+ if ((seq[seq.length - 1] ?? 0) > ceiling) {
138
+ throw new Error(`envelope: bucket sequence last element ${seq[seq.length - 1]} exceeds max_envelope_size ${ceiling}`);
139
+ }
140
+ }
141
+ function utf8ByteLength(s) {
142
+ if (typeof Buffer !== "undefined") {
143
+ return Buffer.byteLength(s, "utf8");
144
+ }
145
+ return new TextEncoder().encode(s).length;
146
+ }
147
+ function defaultRand(n) {
148
+ const out = new Uint8Array(n);
149
+ globalThis.crypto.getRandomValues(out);
150
+ return out;
151
+ }
152
+ function base64Encode(b) {
153
+ if (typeof Buffer !== "undefined") {
154
+ return Buffer.from(b).toString("base64");
155
+ }
156
+ let bin = "";
157
+ for (let i = 0; i < b.length; i++) {
158
+ bin += String.fromCharCode(b[i] ?? 0);
159
+ }
160
+ return btoa(bin);
161
+ }
162
+ //# sourceMappingURL=padding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"padding.js","sourceRoot":"","sources":["../../src/envelope/padding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAEN,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC;;;;GAIG;AACH,MAAM,qBAAqB,GACzB,kEAAkE,CAAC;AAiBrE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,GAAa,EAAE,MAAiB,EAAE;IAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,IAAI,sBAAsB,CAAC;IAC9D,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,sBAAsB,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;IAErC,2DAA2D;IAC3D,sDAAsD;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;IACrC,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC;QACH,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;QACjB,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,CAAC;QAC5C,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,sBAAsB,aAAa,mBAAmB,MAAM,EAAE,CAC/D,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAEpD,kEAAkE;QAClE,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,SAAS,UAAU,GAAG,CACzE,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,OAAkC,WAAW;IAE7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,2DAA2D;IAC3D,+DAA+D;IAC/D,0DAA0D;IAC1D,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,UAAU,CACjB,YAAoB,EACpB,OAAe,EACf,QAA8B;IAE9B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAa,EAAE,OAAe;IAC5D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,qBAAqB,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,2CAA2C,GAAG,CAAC,CAAC,CAAC,4BAA4B,qBAAqB,EAAE,CACrG,CAAC;IACJ,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,iEAAiE,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,0CAA0C,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,8BAA8B,OAAO,EAAE,CACrG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,CAAa;IACjC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Typed envelope-rejection error per ENVELOPE.md §9.
3
+ *
4
+ * The verify / open primitives surface structural and cryptographic
5
+ * failures as plain `Error` instances; consumers that need to map
6
+ * these onto the protocol's rejection reason codes can wrap or
7
+ * re-throw them as {@link EnvelopeRejection}.
8
+ *
9
+ * @module
10
+ */
11
+ import type { ReasonCode } from "../reasoncodes.js";
12
+ /** Error subtype carrying a SEMP rejection reason code. */
13
+ export declare class EnvelopeRejection extends Error {
14
+ readonly name = "EnvelopeRejection";
15
+ readonly reasonCode: ReasonCode;
16
+ /** Optional operator-supplied human-readable description. */
17
+ readonly reasonText: string | undefined;
18
+ constructor(reasonCode: ReasonCode, reasonText?: string, message?: string);
19
+ }
20
+ /** Type guard for {@link EnvelopeRejection}. */
21
+ export declare function isEnvelopeRejection(err: unknown): err is EnvelopeRejection;
22
+ //# sourceMappingURL=rejection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rejection.d.ts","sourceRoot":"","sources":["../../src/envelope/rejection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,2DAA2D;AAC3D,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAkB,IAAI,uBAAuB;IAC7C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE5B,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAU1E;AAED,gDAAgD;AAChD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,iBAAiB,CAE1E"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Typed envelope-rejection error per ENVELOPE.md §9.
3
+ *
4
+ * The verify / open primitives surface structural and cryptographic
5
+ * failures as plain `Error` instances; consumers that need to map
6
+ * these onto the protocol's rejection reason codes can wrap or
7
+ * re-throw them as {@link EnvelopeRejection}.
8
+ *
9
+ * @module
10
+ */
11
+ /** Error subtype carrying a SEMP rejection reason code. */
12
+ export class EnvelopeRejection extends Error {
13
+ name = "EnvelopeRejection";
14
+ reasonCode;
15
+ /** Optional operator-supplied human-readable description. */
16
+ reasonText;
17
+ constructor(reasonCode, reasonText, message) {
18
+ super(message ??
19
+ (reasonText !== undefined && reasonText !== ""
20
+ ? `envelope rejected: ${reasonCode} (${reasonText})`
21
+ : `envelope rejected: ${reasonCode}`));
22
+ this.reasonCode = reasonCode;
23
+ this.reasonText = reasonText;
24
+ }
25
+ }
26
+ /** Type guard for {@link EnvelopeRejection}. */
27
+ export function isEnvelopeRejection(err) {
28
+ return err instanceof EnvelopeRejection;
29
+ }
30
+ //# sourceMappingURL=rejection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rejection.js","sourceRoot":"","sources":["../../src/envelope/rejection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,2DAA2D;AAC3D,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACxB,IAAI,GAAG,mBAAmB,CAAC;IACpC,UAAU,CAAa;IAChC,6DAA6D;IACpD,UAAU,CAAqB;IAExC,YAAY,UAAsB,EAAE,UAAmB,EAAE,OAAgB;QACvE,KAAK,CACH,OAAO;YACL,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE;gBAC5C,CAAC,CAAC,sBAAsB,UAAU,KAAK,UAAU,GAAG;gBACpD,CAAC,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAC1C,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,gDAAgD;AAChD,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,GAAG,YAAY,iBAAiB,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Send-time obfuscation delay per CLIENT.md §3.8.
3
+ *
4
+ * `sendTimeDelay` sleeps for a uniformly random interval in
5
+ * `[0, ceilingMs]` before resolving, reducing the temporal
6
+ * resolution available to a passive network observer correlating
7
+ * the sender's submission with the recipient's delivery.
8
+ *
9
+ * Honors `postmark.expires`: the drawn delay is clamped so that
10
+ * submission cannot push past the envelope's expiry window.
11
+ *
12
+ * @module
13
+ */
14
+ import type { Envelope } from "./compose.js";
15
+ /** RECOMMENDED upper bound on the randomized delay per §3.8.1. */
16
+ export declare const DefaultSendTimeDelayCeilingMs = 60000;
17
+ /** Inputs to {@link sendTimeDelay}. */
18
+ export interface SendTimeDelayConfig {
19
+ /** Upper bound on the delay in ms. Zero / undefined means no delay. */
20
+ ceilingMs?: number;
21
+ /**
22
+ * When true, skip the delay entirely. Clients flag time-sensitive
23
+ * envelopes (a verification code the user is reading, a reply in a
24
+ * live conversation, etc.) per §3.8.1.
25
+ */
26
+ timeSensitive?: boolean;
27
+ /** Wall-clock provider. Defaults to `() => new Date()`. */
28
+ nowFn?: () => Date;
29
+ /** Cancellation signal. Aborts the delay early when fired. */
30
+ signal?: AbortSignal;
31
+ /**
32
+ * Random source returning a float in `[0, 1)`. Defaults to
33
+ * `globalThis.crypto.getRandomValues`-derived entropy.
34
+ */
35
+ rand?: () => number;
36
+ }
37
+ /**
38
+ * Sleep for a uniformly random interval in `[0, ceilingMs]` before
39
+ * resolving. Returns immediately when:
40
+ *
41
+ * - `cfg.timeSensitive === true`
42
+ * - `cfg.ceilingMs` is zero / undefined / negative
43
+ * - the drawn delay rounds to zero
44
+ *
45
+ * Throws when the envelope is already expired (`postmark.expires`
46
+ * is in the past).
47
+ */
48
+ export declare function sendTimeDelay(env: Envelope, cfg?: SendTimeDelayConfig): Promise<void>;
49
+ //# sourceMappingURL=sendtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendtime.d.ts","sourceRoot":"","sources":["../../src/envelope/sendtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,kEAAkE;AAClE,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,QAAQ,EACb,GAAG,GAAE,mBAAwB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Send-time obfuscation delay per CLIENT.md §3.8.
3
+ *
4
+ * `sendTimeDelay` sleeps for a uniformly random interval in
5
+ * `[0, ceilingMs]` before resolving, reducing the temporal
6
+ * resolution available to a passive network observer correlating
7
+ * the sender's submission with the recipient's delivery.
8
+ *
9
+ * Honors `postmark.expires`: the drawn delay is clamped so that
10
+ * submission cannot push past the envelope's expiry window.
11
+ *
12
+ * @module
13
+ */
14
+ /** RECOMMENDED upper bound on the randomized delay per §3.8.1. */
15
+ export const DefaultSendTimeDelayCeilingMs = 60_000;
16
+ /**
17
+ * Sleep for a uniformly random interval in `[0, ceilingMs]` before
18
+ * resolving. Returns immediately when:
19
+ *
20
+ * - `cfg.timeSensitive === true`
21
+ * - `cfg.ceilingMs` is zero / undefined / negative
22
+ * - the drawn delay rounds to zero
23
+ *
24
+ * Throws when the envelope is already expired (`postmark.expires`
25
+ * is in the past).
26
+ */
27
+ export async function sendTimeDelay(env, cfg = {}) {
28
+ if (cfg.timeSensitive === true) {
29
+ return;
30
+ }
31
+ let ceiling = cfg.ceilingMs ?? 0;
32
+ if (ceiling <= 0) {
33
+ return;
34
+ }
35
+ const nowFn = cfg.nowFn ?? (() => new Date());
36
+ const expiresStr = env.postmark.expires;
37
+ if (typeof expiresStr === "string" && expiresStr !== "") {
38
+ const expiresMs = Date.parse(expiresStr);
39
+ if (Number.isNaN(expiresMs)) {
40
+ throw new Error(`envelope: postmark.expires ${JSON.stringify(expiresStr)} is not ISO 8601`);
41
+ }
42
+ const window = expiresMs - nowFn().getTime();
43
+ if (window <= 0) {
44
+ throw new Error(`envelope: cannot delay an already-expired envelope (expires ${expiresStr})`);
45
+ }
46
+ if (window < ceiling) {
47
+ ceiling = window;
48
+ }
49
+ }
50
+ const rand = cfg.rand ?? defaultRandFloat;
51
+ const r = rand();
52
+ if (r < 0 || r >= 1) {
53
+ throw new Error("envelope: send-time random source out of range");
54
+ }
55
+ const delay = Math.floor(r * ceiling);
56
+ if (delay <= 0) {
57
+ return;
58
+ }
59
+ await sleep(delay, cfg.signal);
60
+ }
61
+ function sleep(ms, signal) {
62
+ return new Promise((resolve, reject) => {
63
+ if (signal?.aborted === true) {
64
+ reject(signal.reason ?? new Error("envelope: send-time delay aborted"));
65
+ return;
66
+ }
67
+ const t = setTimeout(() => {
68
+ if (signal !== undefined) {
69
+ signal.removeEventListener("abort", onAbort);
70
+ }
71
+ resolve();
72
+ }, ms);
73
+ const onAbort = () => {
74
+ clearTimeout(t);
75
+ reject(signal?.reason ?? new Error("envelope: send-time delay aborted"));
76
+ };
77
+ if (signal !== undefined) {
78
+ signal.addEventListener("abort", onAbort, { once: true });
79
+ }
80
+ });
81
+ }
82
+ function defaultRandFloat() {
83
+ const buf = new Uint32Array(1);
84
+ globalThis.crypto.getRandomValues(buf);
85
+ return (buf[0] ?? 0) / 0x1_0000_0000;
86
+ }
87
+ //# sourceMappingURL=sendtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendtime.js","sourceRoot":"","sources":["../../src/envelope/sendtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Envelope verification primitives per ENVELOPE.md §6 + §7.2.
3
+ *
4
+ * The compose path produces `seal.signature` (Ed25519 over canonical
5
+ * bytes prefixed with `SEMP-ENVELOPE:`) and `seal.session_mac`
6
+ * (HMAC-SHA-256 over the same canonical bytes). This module exposes
7
+ * the corresponding verifiers as standalone primitives that callers
8
+ * use in receipt-side checks before opening the envelope.
9
+ *
10
+ * @module
11
+ */
12
+ import { type Envelope } from "./compose.js";
13
+ /**
14
+ * Verify `env.seal.signature` against `senderDomainPub`. Returns
15
+ * true when the Ed25519 signature over the canonical envelope bytes
16
+ * (prefixed with `SEMP-ENVELOPE:`) verifies. Does NOT cross-check
17
+ * that the supplied public key actually belongs to the
18
+ * `postmark.from_domain` — that lookup is the caller's responsibility.
19
+ */
20
+ export declare function verifySealSignature(env: Envelope, senderDomainPub: Uint8Array): boolean;
21
+ /**
22
+ * Verify `env.seal.session_mac` against `kEnvMAC`. Returns true when
23
+ * the HMAC-SHA-256 of the canonical envelope bytes equals the
24
+ * decoded MAC value. The session-MAC key is the per-session
25
+ * symmetric key derived from the receiving server's federation
26
+ * handshake; it changes on rekey.
27
+ */
28
+ export declare function verifySessionMAC(env: Envelope, kEnvMAC: Uint8Array): boolean;
29
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/envelope/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,KAAK,QAAQ,EAAwB,MAAM,cAAc,CAAC;AAKnE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,QAAQ,EACb,eAAe,EAAE,UAAU,GAC1B,OAAO,CAgBT;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAa5E"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Envelope verification primitives per ENVELOPE.md §6 + §7.2.
3
+ *
4
+ * The compose path produces `seal.signature` (Ed25519 over canonical
5
+ * bytes prefixed with `SEMP-ENVELOPE:`) and `seal.session_mac`
6
+ * (HMAC-SHA-256 over the same canonical bytes). This module exposes
7
+ * the corresponding verifiers as standalone primitives that callers
8
+ * use in receipt-side checks before opening the envelope.
9
+ *
10
+ * @module
11
+ */
12
+ import { computeMAC } from "../crypto/index.js";
13
+ import { verify as ed25519Verify } from "../keys/index.js";
14
+ import { canonicalEnvelopeFor } from "./compose.js";
15
+ /** Domain-separation prefix for the seal signature, per §4.3. */
16
+ const EnvelopePrefix = "SEMP-ENVELOPE:";
17
+ /**
18
+ * Verify `env.seal.signature` against `senderDomainPub`. Returns
19
+ * true when the Ed25519 signature over the canonical envelope bytes
20
+ * (prefixed with `SEMP-ENVELOPE:`) verifies. Does NOT cross-check
21
+ * that the supplied public key actually belongs to the
22
+ * `postmark.from_domain` — that lookup is the caller's responsibility.
23
+ */
24
+ export function verifySealSignature(env, senderDomainPub) {
25
+ if (env.seal?.signature === undefined || env.seal.signature === "") {
26
+ return false;
27
+ }
28
+ let sig;
29
+ try {
30
+ sig = base64Decode(env.seal.signature);
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ const canonical = canonicalEnvelopeFor(env);
36
+ const signingInput = concat(new TextEncoder().encode(EnvelopePrefix), canonical);
37
+ return ed25519Verify(senderDomainPub, sig, signingInput);
38
+ }
39
+ /**
40
+ * Verify `env.seal.session_mac` against `kEnvMAC`. Returns true when
41
+ * the HMAC-SHA-256 of the canonical envelope bytes equals the
42
+ * decoded MAC value. The session-MAC key is the per-session
43
+ * symmetric key derived from the receiving server's federation
44
+ * handshake; it changes on rekey.
45
+ */
46
+ export function verifySessionMAC(env, kEnvMAC) {
47
+ if (env.seal?.session_mac === undefined || env.seal.session_mac === "") {
48
+ return false;
49
+ }
50
+ let want;
51
+ try {
52
+ want = base64Decode(env.seal.session_mac);
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ const canonical = canonicalEnvelopeFor(env);
58
+ const got = computeMAC(kEnvMAC, canonical);
59
+ return constantTimeEqual(want, got);
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // Helpers
63
+ function concat(a, b) {
64
+ const out = new Uint8Array(a.length + b.length);
65
+ out.set(a, 0);
66
+ out.set(b, a.length);
67
+ return out;
68
+ }
69
+ function constantTimeEqual(a, b) {
70
+ if (a.length !== b.length) {
71
+ return false;
72
+ }
73
+ let diff = 0;
74
+ for (let i = 0; i < a.length; i++) {
75
+ diff |= (a[i] ?? 0) ^ (b[i] ?? 0);
76
+ }
77
+ return diff === 0;
78
+ }
79
+ function base64Decode(s) {
80
+ if (typeof Buffer !== "undefined") {
81
+ return new Uint8Array(Buffer.from(s, "base64"));
82
+ }
83
+ const bin = atob(s);
84
+ const out = new Uint8Array(bin.length);
85
+ for (let i = 0; i < bin.length; i++) {
86
+ out[i] = bin.charCodeAt(i);
87
+ }
88
+ return out;
89
+ }
90
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/envelope/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Extensions layer per EXTENSIONS.md.
3
+ *
4
+ * @module
5
+ */
6
+ export { type Entry, type Layer, type Map, type RegistryEntry, KeyError, MaxKeyLength, NamespacePrefixCore, Registry, SizeError, UnsupportedError, maxBytesFor, validate, validateKey, validateSize, } from "./limits.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,KAAK,EACV,KAAK,KAAK,EACV,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC"}