@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,237 @@
1
+ /**
2
+ * Envelope compose / open per ENVELOPE.md §4 + §6.5 + §7.1 + §7.2.
3
+ *
4
+ * The envelope is the wire object that carries one SEMP message
5
+ * between servers. Compose builds it; open recovers the brief and
6
+ * enclosure from a received envelope.
7
+ *
8
+ * This module exposes both the production path (fresh randomness)
9
+ * and the deterministic path (caller-pinned randomness for vectors
10
+ * + audits). The deterministic path is what the cross-language
11
+ * vectors-runner exercises; production callers MUST use the
12
+ * fresh-randomness form.
13
+ *
14
+ * Layered on top of:
15
+ * - canonical/marshal §4.3 canonical bytes (and elision)
16
+ * - seal/wrap §4.4.1 per-recipient key wrap
17
+ * - crypto/aead §7.1.1 brief / enclosure AEAD
18
+ * - keys/sign §6.5 sender_signature
19
+ * - HMAC-SHA-256 §4.3 session_mac
20
+ *
21
+ * @module
22
+ */
23
+ import { aeadOpen, aeadSeal, computeMAC, } from "../crypto/index.js";
24
+ import { marshal as canonicalMarshal, marshalWithElision, } from "../canonical/index.js";
25
+ import { sign as ed25519Sign } from "../keys/index.js";
26
+ import { unwrap as sealUnwrap, wrapWithRandomness, } from "../seal/index.js";
27
+ /** Algorithm prefix for the seal signature, per ENVELOPE.md §4.3. */
28
+ const EnvelopePrefix = "SEMP-ENVELOPE:";
29
+ /** AEAD algorithm tied to the suite for brief/enclosure encryption. */
30
+ function suiteBriefEnclosureAEAD(suite) {
31
+ // Both currently defined suites use ChaCha20-Poly1305 for brief
32
+ // and enclosure (12-byte nonce per §7.1.1). Only the KEM is PQ.
33
+ void suite;
34
+ return "chacha20-poly1305";
35
+ }
36
+ /**
37
+ * Compose a wire envelope. Deterministic given the inputs (every
38
+ * randomness source is caller-supplied). Returns the wire envelope
39
+ * with seal.signature and seal.session_mac populated.
40
+ *
41
+ * Compose order:
42
+ *
43
+ * 1. AEAD-Seal the brief (canonical) under K_brief with the
44
+ * brief AEAD nonce and postmark.id as AAD per §7.1.1.
45
+ * `envelope.brief = base64(nonce || aead_ct)`.
46
+ * 2. AEAD-Seal the enclosure same way under K_enclosure.
47
+ * 3. Wrap K_brief to every brief recipient.
48
+ * 4. Wrap K_enclosure to every enclosure recipient.
49
+ * 5. Build the envelope object with seal.signature = "" and
50
+ * seal.session_mac = "" placeholders.
51
+ * 6. Compute canonical bytes per §4.3 (signature + mac blanked,
52
+ * hop_count and padding omitted), prepend SEMP-ENVELOPE:,
53
+ * Ed25519-sign with the sender domain signing seed.
54
+ * 7. Compute HMAC-SHA-256 over the same canonical bytes with
55
+ * K_env_mac.
56
+ * 8. Write both back into the envelope.
57
+ */
58
+ export function compose(input) {
59
+ const aead = suiteBriefEnclosureAEAD(input.suite);
60
+ const postmarkID = new TextEncoder().encode(input.postmark.id);
61
+ // Step 1: brief AEAD.
62
+ const briefCanonical = canonicalMarshal(input.briefPlaintext);
63
+ const briefCT = aeadSeal(aead, input.kBrief, input.briefAEADNonce, briefCanonical, postmarkID);
64
+ const briefField = base64Encode(concat(input.briefAEADNonce, briefCT));
65
+ // Step 2: enclosure AEAD.
66
+ const enclosureCanonical = canonicalMarshal(input.enclosurePlaintext);
67
+ const enclosureCT = aeadSeal(aead, input.kEnclosure, input.enclosureAEADNonce, enclosureCanonical, postmarkID);
68
+ const enclosureField = base64Encode(concat(input.enclosureAEADNonce, enclosureCT));
69
+ // Step 3: wrap K_brief per recipient.
70
+ const briefRecipients = {};
71
+ for (const r of input.briefRecipients) {
72
+ const rand = input.wrapRandomness.get(r.keyId);
73
+ if (rand === undefined) {
74
+ throw new Error(`compose: missing wrap randomness for brief recipient ${r.keyId}`);
75
+ }
76
+ briefRecipients[r.keyId] = wrapWithRandomness(input.suite, r.publicKey, input.kBrief, rand);
77
+ }
78
+ // Step 4: wrap K_enclosure per recipient.
79
+ const enclosureRecipients = {};
80
+ for (const r of input.enclosureRecipients) {
81
+ const rand = input.wrapRandomness.get(`enclosure:${r.keyId}`)
82
+ ?? input.wrapRandomness.get(r.keyId);
83
+ if (rand === undefined) {
84
+ throw new Error(`compose: missing wrap randomness for enclosure recipient ${r.keyId}`);
85
+ }
86
+ enclosureRecipients[r.keyId] = wrapWithRandomness(input.suite, r.publicKey, input.kEnclosure, rand);
87
+ }
88
+ // Step 5: assemble with placeholder signature + MAC.
89
+ //
90
+ // Wire-shape rules:
91
+ // postmark.extensions and seal.extensions DEFAULT to {} when
92
+ // the caller doesn't pass them — these slots are always
93
+ // present on the wire (some routers depend on the keys
94
+ // existing as a marker even when empty).
95
+ // Top-level extensions DEFAULTS to absent — the spec treats
96
+ // it as truly optional.
97
+ const postmark = {
98
+ ...input.postmark,
99
+ extensions: input.postmark.extensions ?? {},
100
+ };
101
+ const seal = {
102
+ algorithm: input.suite,
103
+ key_id: input.sealKeyId,
104
+ signature: "",
105
+ session_mac: "",
106
+ brief_recipients: briefRecipients,
107
+ enclosure_recipients: enclosureRecipients,
108
+ extensions: input.sealExtensions ?? {},
109
+ };
110
+ const env = {
111
+ type: "SEMP_ENVELOPE",
112
+ version: "1.0.0",
113
+ postmark,
114
+ seal,
115
+ brief: briefField,
116
+ enclosure: enclosureField,
117
+ };
118
+ if (input.extensions !== undefined) {
119
+ env.extensions = input.extensions;
120
+ }
121
+ // Step 6: §4.3 canonical bytes and seal.signature.
122
+ const canonical = canonicalEnvelopeFor(env);
123
+ const signingInput = concat(new TextEncoder().encode(EnvelopePrefix), canonical);
124
+ const sig = ed25519Sign(input.senderDomainSigningSeed, signingInput);
125
+ env.seal.signature = base64Encode(sig);
126
+ // Step 7: session MAC over the SAME canonical bytes (signature
127
+ // and session_mac were both blanked, so both proofs cover the
128
+ // same input).
129
+ const mac = computeMAC(input.kEnvMAC, canonical);
130
+ env.seal.session_mac = base64Encode(mac);
131
+ return env;
132
+ }
133
+ /**
134
+ * Compute the §4.3 canonical envelope bytes — signature and
135
+ * session_mac blanked, hop_count and padding omitted.
136
+ */
137
+ export function canonicalEnvelopeFor(envelope) {
138
+ return marshalWithElision(envelope, (clone) => {
139
+ if (!isRecord(clone)) {
140
+ return;
141
+ }
142
+ delete clone.padding;
143
+ const seal = clone.seal;
144
+ if (isRecord(seal)) {
145
+ if ("signature" in seal) {
146
+ seal.signature = "";
147
+ }
148
+ if ("session_mac" in seal) {
149
+ seal.session_mac = "";
150
+ }
151
+ }
152
+ const postmark = clone.postmark;
153
+ if (isRecord(postmark)) {
154
+ delete postmark.hop_count;
155
+ }
156
+ });
157
+ }
158
+ /**
159
+ * Open an envelope for a specific recipient. Inverts {@link compose}:
160
+ * unwraps K_brief and K_enclosure, AEAD-decrypts both fields, and
161
+ * returns the parsed plaintexts. Throws if the recipient slot is
162
+ * absent or the AEAD tag does not verify.
163
+ *
164
+ * Does NOT verify seal.signature or seal.session_mac — those are
165
+ * the routing-server / receiving-server checks per §7.2 and live
166
+ * on the server side. {@link verifySealSignature} and
167
+ * {@link verifySessionMAC} are the corresponding verifier helpers.
168
+ */
169
+ export function openForRecipient(input) {
170
+ const aead = suiteBriefEnclosureAEAD(input.suite);
171
+ const env = input.envelope;
172
+ const postmarkID = new TextEncoder().encode(env.postmark.id);
173
+ // Unwrap K_brief.
174
+ const briefWrapped = env.seal.brief_recipients[input.recipientKeyId];
175
+ if (typeof briefWrapped !== "string") {
176
+ throw new Error(`open: recipient ${input.recipientKeyId} not in brief_recipients`);
177
+ }
178
+ const kBrief = sealUnwrap(input.suite, input.recipientPrivateKey, input.recipientPublicKey, briefWrapped);
179
+ // Brief AEAD: blob is base64(nonce || aead_ct), 12-byte nonce.
180
+ const briefBlob = base64Decode(env.brief);
181
+ if (briefBlob.length < 12) {
182
+ throw new Error("open: brief blob too short");
183
+ }
184
+ const briefNonce = briefBlob.slice(0, 12);
185
+ const briefCT = briefBlob.slice(12);
186
+ const briefPT = aeadOpen(aead, kBrief, briefNonce, briefCT, postmarkID);
187
+ const brief = JSON.parse(new TextDecoder().decode(briefPT));
188
+ // Unwrap K_enclosure.
189
+ const enclosureWrapped = env.seal.enclosure_recipients[input.recipientKeyId];
190
+ if (typeof enclosureWrapped !== "string") {
191
+ throw new Error(`open: recipient ${input.recipientKeyId} not in enclosure_recipients`);
192
+ }
193
+ const kEnclosure = sealUnwrap(input.suite, input.recipientPrivateKey, input.recipientPublicKey, enclosureWrapped);
194
+ // Enclosure AEAD: same wire shape.
195
+ const enclBlob = base64Decode(env.enclosure);
196
+ if (enclBlob.length < 12) {
197
+ throw new Error("open: enclosure blob too short");
198
+ }
199
+ const enclNonce = enclBlob.slice(0, 12);
200
+ const enclCT = enclBlob.slice(12);
201
+ const enclPT = aeadOpen(aead, kEnclosure, enclNonce, enclCT, postmarkID);
202
+ const enclosure = JSON.parse(new TextDecoder().decode(enclPT));
203
+ return { brief, enclosure };
204
+ }
205
+ // ---------------------------------------------------------------------------
206
+ // Helpers
207
+ function isRecord(v) {
208
+ return typeof v === "object" && v !== null && !Array.isArray(v);
209
+ }
210
+ function concat(a, b) {
211
+ const out = new Uint8Array(a.length + b.length);
212
+ out.set(a, 0);
213
+ out.set(b, a.length);
214
+ return out;
215
+ }
216
+ function base64Encode(b) {
217
+ if (typeof Buffer !== "undefined") {
218
+ return Buffer.from(b).toString("base64");
219
+ }
220
+ let bin = "";
221
+ for (let i = 0; i < b.length; i++) {
222
+ bin += String.fromCharCode(b[i] ?? 0);
223
+ }
224
+ return btoa(bin);
225
+ }
226
+ function base64Decode(s) {
227
+ if (typeof Buffer !== "undefined") {
228
+ return new Uint8Array(Buffer.from(s, "base64"));
229
+ }
230
+ const bin = atob(s);
231
+ const out = new Uint8Array(bin.length);
232
+ for (let i = 0; i < bin.length; i++) {
233
+ out[i] = bin.charCodeAt(i);
234
+ }
235
+ return out;
236
+ }
237
+ //# sourceMappingURL=compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/envelope/compose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Wire serialization helpers per ENVELOPE.md §2.1 + MIME.md §2.2.
3
+ *
4
+ * `encodeEnvelope` produces the on-the-wire UTF-8 JSON. The output is
5
+ * suitable for transmission over any SEMP transport
6
+ * (`Content-Type: application/semp-envelope`) and for storage as a
7
+ * `.semp` file.
8
+ *
9
+ * `encodeEnvelope` does NOT produce the canonical form — use
10
+ * {@link "./canonical".canonicalEnvelopeBytes} for the byte stream
11
+ * consumed by signature and MAC computation.
12
+ *
13
+ * @module
14
+ */
15
+ import type { Envelope } from "./compose.js";
16
+ /** SEMP wire MIME type per MIME.md §2.2. */
17
+ export declare const EnvelopeMIMEType = "application/semp-envelope";
18
+ /** SEMP envelope file extension per MIME.md §2.2. */
19
+ export declare const EnvelopeFileExtension = ".semp";
20
+ /**
21
+ * Wire JSON serialization of `env`. UTF-8, no BOM, no trailing
22
+ * newline — the byte sequence is suitable for transport bodies and
23
+ * for direct `.semp` file content.
24
+ */
25
+ export declare function encodeEnvelope(env: Envelope): Uint8Array;
26
+ /**
27
+ * Alias for {@link encodeEnvelope} that names the `.semp` file
28
+ * use case explicitly. MIME.md §2.2 specifies one envelope per file;
29
+ * this helper enforces that contract by returning the same single-
30
+ * envelope JSON.
31
+ */
32
+ export declare function encodeEnvelopeFile(env: Envelope): Uint8Array;
33
+ /**
34
+ * Parse a SEMP envelope from wire bytes. Throws on malformed JSON
35
+ * or when the parsed value is missing the discriminator
36
+ * `type === "SEMP_ENVELOPE"`.
37
+ */
38
+ export declare function decodeEnvelope(data: Uint8Array | string): Envelope;
39
+ /** Decode a `.semp` file body. Mirrors {@link decodeEnvelope}. */
40
+ export declare function decodeEnvelopeFile(data: Uint8Array | string): Envelope;
41
+ //# sourceMappingURL=encode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/envelope/encode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAE5D,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAE7C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,CAGxD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,CA2BlE;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,CAEtE"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Wire serialization helpers per ENVELOPE.md §2.1 + MIME.md §2.2.
3
+ *
4
+ * `encodeEnvelope` produces the on-the-wire UTF-8 JSON. The output is
5
+ * suitable for transmission over any SEMP transport
6
+ * (`Content-Type: application/semp-envelope`) and for storage as a
7
+ * `.semp` file.
8
+ *
9
+ * `encodeEnvelope` does NOT produce the canonical form — use
10
+ * {@link "./canonical".canonicalEnvelopeBytes} for the byte stream
11
+ * consumed by signature and MAC computation.
12
+ *
13
+ * @module
14
+ */
15
+ /** SEMP wire MIME type per MIME.md §2.2. */
16
+ export const EnvelopeMIMEType = "application/semp-envelope";
17
+ /** SEMP envelope file extension per MIME.md §2.2. */
18
+ export const EnvelopeFileExtension = ".semp";
19
+ /**
20
+ * Wire JSON serialization of `env`. UTF-8, no BOM, no trailing
21
+ * newline — the byte sequence is suitable for transport bodies and
22
+ * for direct `.semp` file content.
23
+ */
24
+ export function encodeEnvelope(env) {
25
+ // Plain JSON — NOT canonical. Used for transport, not signing.
26
+ return new TextEncoder().encode(JSON.stringify(env));
27
+ }
28
+ /**
29
+ * Alias for {@link encodeEnvelope} that names the `.semp` file
30
+ * use case explicitly. MIME.md §2.2 specifies one envelope per file;
31
+ * this helper enforces that contract by returning the same single-
32
+ * envelope JSON.
33
+ */
34
+ export function encodeEnvelopeFile(env) {
35
+ return encodeEnvelope(env);
36
+ }
37
+ /**
38
+ * Parse a SEMP envelope from wire bytes. Throws on malformed JSON
39
+ * or when the parsed value is missing the discriminator
40
+ * `type === "SEMP_ENVELOPE"`.
41
+ */
42
+ export function decodeEnvelope(data) {
43
+ const text = typeof data === "string" ? data : new TextDecoder().decode(data);
44
+ if (text === "") {
45
+ throw new Error("envelope: empty input");
46
+ }
47
+ let parsed;
48
+ try {
49
+ parsed = JSON.parse(text);
50
+ }
51
+ catch (err) {
52
+ throw new Error(`envelope: parse: ${err instanceof Error ? err.message : String(err)}`);
53
+ }
54
+ if (typeof parsed !== "object" ||
55
+ parsed === null ||
56
+ Array.isArray(parsed)) {
57
+ throw new Error("envelope: top-level value is not an object");
58
+ }
59
+ const obj = parsed;
60
+ if (obj.type !== "SEMP_ENVELOPE") {
61
+ throw new Error(`envelope: type ${JSON.stringify(obj.type)} is not SEMP_ENVELOPE`);
62
+ }
63
+ return obj;
64
+ }
65
+ /** Decode a `.semp` file body. Mirrors {@link decodeEnvelope}. */
66
+ export function decodeEnvelopeFile(data) {
67
+ return decodeEnvelope(data);
68
+ }
69
+ //# sourceMappingURL=encode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/envelope/encode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAE7C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAa;IAC1C,+DAA+D;IAC/D,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAa;IAC9C,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAyB;IACtD,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACvE,CAAC;IACJ,CAAC;IACD,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACrB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,GAA0B,CAAC;AACpC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,kBAAkB,CAAC,IAAyB;IAC1D,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Envelope layer per ENVELOPE.md §2 + §4 + §6 + §7.
3
+ *
4
+ * Compose / open / verify primitives + bucket math + padding +
5
+ * send-time obfuscation + wire-format encode/decode + typed
6
+ * rejection error.
7
+ *
8
+ * @module
9
+ */
10
+ export { canonicalEnvelopeBytes } from "./canonical.js";
11
+ export { DefaultMaxEnvelopeSize, MinEnvelopeSizeBucket, selectRecipientCountBucket, selectSizeBucket, } from "./buckets.js";
12
+ export { type ComposeInput, type Envelope, type OpenedEnvelope, type OpenInput, type PostmarkFields, type RecipientKey, canonicalEnvelopeFor, compose, openForRecipient, } from "./compose.js";
13
+ export { EnvelopeFileExtension, EnvelopeMIMEType, decodeEnvelope, decodeEnvelopeFile, encodeEnvelope, encodeEnvelopeFile, } from "./encode.js";
14
+ export { verifySealSignature, verifySessionMAC } from "./verify.js";
15
+ export { type OpenedBrief, type OpenedEnclosure, type RecipientCandidate, openBriefAny, openEnclosureAny, } from "./open_any.js";
16
+ export { type OpenAndVerifyInput, type OpenAndVerifyResult, type SenderKeyResolver, type SenderKeyResolverFunc, openAndVerify, } from "./open_verified.js";
17
+ export { type PadConfig, Ed25519SignatureB64Len, HMACSHA256B64Len, buildPaddingValue, fillPadding, } from "./padding.js";
18
+ export { type SendTimeDelayConfig, DefaultSendTimeDelayCeilingMs, sendTimeDelay, } from "./sendtime.js";
19
+ export { EnvelopeRejection, isEnvelopeRejection } from "./rejection.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/envelope/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,oBAAoB,EACpB,OAAO,EACP,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,aAAa,GACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,SAAS,EACd,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,mBAAmB,EACxB,6BAA6B,EAC7B,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Envelope layer per ENVELOPE.md §2 + §4 + §6 + §7.
3
+ *
4
+ * Compose / open / verify primitives + bucket math + padding +
5
+ * send-time obfuscation + wire-format encode/decode + typed
6
+ * rejection error.
7
+ *
8
+ * @module
9
+ */
10
+ export { canonicalEnvelopeBytes } from "./canonical.js";
11
+ export { DefaultMaxEnvelopeSize, MinEnvelopeSizeBucket, selectRecipientCountBucket, selectSizeBucket, } from "./buckets.js";
12
+ export { canonicalEnvelopeFor, compose, openForRecipient, } from "./compose.js";
13
+ export { EnvelopeFileExtension, EnvelopeMIMEType, decodeEnvelope, decodeEnvelopeFile, encodeEnvelope, encodeEnvelopeFile, } from "./encode.js";
14
+ export { verifySealSignature, verifySessionMAC } from "./verify.js";
15
+ export { openBriefAny, openEnclosureAny, } from "./open_any.js";
16
+ export { openAndVerify, } from "./open_verified.js";
17
+ export { Ed25519SignatureB64Len, HMACSHA256B64Len, buildPaddingValue, fillPadding, } from "./padding.js";
18
+ export { DefaultSendTimeDelayCeilingMs, sendTimeDelay, } from "./sendtime.js";
19
+ export { EnvelopeRejection, isEnvelopeRejection } from "./rejection.js";
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/envelope/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAOL,oBAAoB,EACpB,OAAO,EACP,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAIL,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAKL,aAAa,GACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAEL,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,6BAA6B,EAC7B,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Multi-recipient open helpers per ENVELOPE.md §6.
3
+ *
4
+ * A recipient client may hold multiple device keys (KEY.md §10).
5
+ * `openBriefAny` and `openEnclosureAny` walk a list of candidate
6
+ * recipient private keys, attempt to unwrap each in turn, and return
7
+ * the result from the first matching slot.
8
+ *
9
+ * @module
10
+ */
11
+ import { type Envelope, type OpenInput } from "./compose.js";
12
+ /** One candidate recipient identity to try when opening. */
13
+ export interface RecipientCandidate {
14
+ /** Recipient client key id (matches a key in seal.*_recipients). */
15
+ keyId: string;
16
+ /** 32-byte X25519 (or 2432-byte hybrid) private key. */
17
+ privateKey: Uint8Array;
18
+ /** 32-byte X25519 (or 1216-byte hybrid) public key. */
19
+ publicKey: Uint8Array;
20
+ }
21
+ /** Result of a successful multi-recipient brief open. */
22
+ export interface OpenedBrief {
23
+ /** The candidate that successfully unwrapped K_brief. */
24
+ candidate: RecipientCandidate;
25
+ /** Decoded brief plaintext (parsed from canonical JSON). */
26
+ brief: unknown;
27
+ }
28
+ /** Result of a successful multi-recipient enclosure open. */
29
+ export interface OpenedEnclosure {
30
+ /** The candidate that successfully unwrapped K_enclosure. */
31
+ candidate: RecipientCandidate;
32
+ /** Decoded enclosure plaintext (parsed from canonical JSON). */
33
+ enclosure: unknown;
34
+ }
35
+ /**
36
+ * Walk `candidates` and try each recipient identity against
37
+ * `env.seal.brief_recipients`. Returns the brief plaintext from the
38
+ * first matching slot whose AEAD tag verifies. Throws when no
39
+ * candidate matches a slot or every candidate's AEAD open fails.
40
+ */
41
+ export declare function openBriefAny(suite: OpenInput["suite"], env: Envelope, candidates: RecipientCandidate[]): OpenedBrief;
42
+ /**
43
+ * Walk `candidates` and try each against
44
+ * `env.seal.enclosure_recipients`. Returns the enclosure plaintext
45
+ * from the first matching slot whose AEAD tag verifies.
46
+ */
47
+ export declare function openEnclosureAny(suite: OpenInput["suite"], env: Envelope, candidates: RecipientCandidate[]): OpenedEnclosure;
48
+ //# sourceMappingURL=open_any.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open_any.d.ts","sourceRoot":"","sources":["../../src/envelope/open_any.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEf,MAAM,cAAc,CAAC;AAEtB,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,UAAU,EAAE,UAAU,CAAC;IACvB,uDAAuD;IACvD,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,SAAS,EAAE,kBAAkB,CAAC;IAC9B,4DAA4D;IAC5D,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,SAAS,EAAE,kBAAkB,CAAC;IAC9B,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,EACzB,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,kBAAkB,EAAE,GAC/B,WAAW,CAiCb;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,EACzB,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,kBAAkB,EAAE,GAC/B,eAAe,CAiCjB"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Multi-recipient open helpers per ENVELOPE.md §6.
3
+ *
4
+ * A recipient client may hold multiple device keys (KEY.md §10).
5
+ * `openBriefAny` and `openEnclosureAny` walk a list of candidate
6
+ * recipient private keys, attempt to unwrap each in turn, and return
7
+ * the result from the first matching slot.
8
+ *
9
+ * @module
10
+ */
11
+ import { openForRecipient, } from "./compose.js";
12
+ /**
13
+ * Walk `candidates` and try each recipient identity against
14
+ * `env.seal.brief_recipients`. Returns the brief plaintext from the
15
+ * first matching slot whose AEAD tag verifies. Throws when no
16
+ * candidate matches a slot or every candidate's AEAD open fails.
17
+ */
18
+ export function openBriefAny(suite, env, candidates) {
19
+ if (candidates.length === 0) {
20
+ throw new Error("envelope: openBriefAny: empty candidate list");
21
+ }
22
+ const errors = [];
23
+ for (const c of candidates) {
24
+ if (env.seal.brief_recipients[c.keyId] === undefined) {
25
+ continue; // not a brief recipient
26
+ }
27
+ try {
28
+ const opened = openForRecipient({
29
+ suite,
30
+ envelope: env,
31
+ recipientKeyId: c.keyId,
32
+ recipientPrivateKey: c.privateKey,
33
+ recipientPublicKey: c.publicKey,
34
+ });
35
+ return { candidate: c, brief: opened.brief };
36
+ }
37
+ catch (err) {
38
+ errors.push(`${c.keyId}: ${err instanceof Error ? err.message : String(err)}`);
39
+ continue;
40
+ }
41
+ }
42
+ if (errors.length === 0) {
43
+ throw new Error("envelope: openBriefAny: no candidate matches a brief recipient slot");
44
+ }
45
+ throw new Error(`envelope: openBriefAny: every candidate failed: ${errors.join("; ")}`);
46
+ }
47
+ /**
48
+ * Walk `candidates` and try each against
49
+ * `env.seal.enclosure_recipients`. Returns the enclosure plaintext
50
+ * from the first matching slot whose AEAD tag verifies.
51
+ */
52
+ export function openEnclosureAny(suite, env, candidates) {
53
+ if (candidates.length === 0) {
54
+ throw new Error("envelope: openEnclosureAny: empty candidate list");
55
+ }
56
+ const errors = [];
57
+ for (const c of candidates) {
58
+ if (env.seal.enclosure_recipients[c.keyId] === undefined) {
59
+ continue; // not an enclosure recipient
60
+ }
61
+ try {
62
+ const opened = openForRecipient({
63
+ suite,
64
+ envelope: env,
65
+ recipientKeyId: c.keyId,
66
+ recipientPrivateKey: c.privateKey,
67
+ recipientPublicKey: c.publicKey,
68
+ });
69
+ return { candidate: c, enclosure: opened.enclosure };
70
+ }
71
+ catch (err) {
72
+ errors.push(`${c.keyId}: ${err instanceof Error ? err.message : String(err)}`);
73
+ continue;
74
+ }
75
+ }
76
+ if (errors.length === 0) {
77
+ throw new Error("envelope: openEnclosureAny: no candidate matches an enclosure recipient slot");
78
+ }
79
+ throw new Error(`envelope: openEnclosureAny: every candidate failed: ${errors.join("; ")}`);
80
+ }
81
+ //# sourceMappingURL=open_any.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open_any.js","sourceRoot":"","sources":["../../src/envelope/open_any.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
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 { type Envelope, type OpenInput } from "./compose.js";
21
+ import { type RecipientCandidate } from "./open_any.js";
22
+ /**
23
+ * Caller-supplied lookup for the sender domain's signing public
24
+ * key. Returns the 32-byte Ed25519 public key for the domain that
25
+ * originated `env.postmark.from_domain`, or null/throws when the
26
+ * key cannot be resolved.
27
+ */
28
+ export interface SenderKeyResolver {
29
+ lookupSenderDomainPub(fromDomain: string, keyId: string): Promise<Uint8Array | null>;
30
+ }
31
+ /** Functional shorthand for {@link SenderKeyResolver}. */
32
+ export type SenderKeyResolverFunc = (fromDomain: string, keyId: string) => Promise<Uint8Array | null>;
33
+ /** Inputs to {@link openAndVerify}. */
34
+ export interface OpenAndVerifyInput {
35
+ suite: OpenInput["suite"];
36
+ envelope: Envelope;
37
+ candidates: RecipientCandidate[];
38
+ /** Either a {@link SenderKeyResolver} or its functional form. */
39
+ resolver: SenderKeyResolver | SenderKeyResolverFunc;
40
+ }
41
+ /** Result of a successful {@link openAndVerify}. */
42
+ export interface OpenAndVerifyResult {
43
+ /** Sender domain public key the signature verified under. */
44
+ senderDomainPub: Uint8Array;
45
+ /** Recipient candidate that successfully opened the slots. */
46
+ candidate: RecipientCandidate;
47
+ /** Decoded brief plaintext. */
48
+ brief: unknown;
49
+ /** Decoded enclosure plaintext. */
50
+ enclosure: unknown;
51
+ }
52
+ /**
53
+ * Run sender-signature verification + multi-candidate open. Returns
54
+ * the opened plaintexts plus the matched candidate and the resolved
55
+ * sender public key. Throws on missing sender key, signature
56
+ * mismatch, or open failure.
57
+ */
58
+ export declare function openAndVerify(input: OpenAndVerifyInput): Promise<OpenAndVerifyResult>;
59
+ //# sourceMappingURL=open_verified.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open_verified.d.ts","sourceRoot":"","sources":["../../src/envelope/open_verified.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,KAAK,kBAAkB,EAGxB,MAAM,eAAe,CAAC;AAGvB;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAC/B;AAED,0DAA0D;AAC1D,MAAM,MAAM,qBAAqB,GAAG,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;AAEhC,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,iEAAiE;IACjE,QAAQ,EAAE,iBAAiB,GAAG,qBAAqB,CAAC;CACrD;AAED,oDAAoD;AACpD,MAAM,WAAW,mBAAmB;IAClC,6DAA6D;IAC7D,eAAe,EAAE,UAAU,CAAC;IAC5B,8DAA8D;IAC9D,SAAS,EAAE,kBAAkB,CAAC;IAC9B,+BAA+B;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA2C9B"}