@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,61 @@
1
+ /**
2
+ * Operator-runnable transparency log per TRANSPARENCY.md §2.2.
3
+ *
4
+ * Maintains an append-only sequence of leaf hashes; issues
5
+ * SignedTreeHeads; computes RFC 6962 inclusion + consistency
6
+ * proofs against the current state.
7
+ *
8
+ * The reference implementation holds entries and leaf hashes in
9
+ * memory. Production deployments wrap a durable backend; the
10
+ * operations factor cleanly into a Store interface when needed.
11
+ *
12
+ * @module
13
+ */
14
+ import { type ConsistencyProof, type InclusionProof, type LogEntry, type SignedTreeHead } from "./types.js";
15
+ /** Inputs to the {@link Log} constructor. */
16
+ export interface LogConfig {
17
+ /** 32-byte Ed25519 secret seed used to sign every issued STH. */
18
+ domainSigningSeed: Uint8Array;
19
+ /** Lowercase-hex SHA-256 fingerprint of the domain signing pub. */
20
+ domainKeyId: string;
21
+ /** Wall-clock for STH timestamps. Defaults to `() => new Date()`. */
22
+ nowFn?: () => Date;
23
+ }
24
+ /**
25
+ * Append-only transparency log. Concurrency-safe under the JS
26
+ * single-threaded model: every method runs to completion before
27
+ * the next; no internal mutex needed.
28
+ */
29
+ export declare class Log {
30
+ private readonly entries;
31
+ private readonly leaves;
32
+ private readonly cfg;
33
+ constructor(cfg: LogConfig);
34
+ /**
35
+ * Validate `entry`, hash its leaf, and append. Returns the
36
+ * assigned 0-based leaf index. Does NOT verify any signature on
37
+ * the entry — admission policy is the caller's concern.
38
+ */
39
+ append(entry: LogEntry): number;
40
+ /** Current tree size. */
41
+ size(): number;
42
+ /**
43
+ * Return the entry at `index`, or `null` when out of range.
44
+ * The returned object is a reference; callers that mutate must
45
+ * clone first.
46
+ */
47
+ entry(index: number): LogEntry | null;
48
+ /** Compute the current root hash and return a signed tree head. */
49
+ issueSTH(): SignedTreeHead;
50
+ /**
51
+ * RFC 6962 audit path for `leafIndex` against `treeSize`. Throws
52
+ * when `leafIndex >= treeSize` or `treeSize > size()`.
53
+ */
54
+ inclusionProof(leafIndex: number, treeSize: number): InclusionProof;
55
+ /**
56
+ * RFC 6962 consistency proof from `firstSize` to `secondSize`.
57
+ * Both MUST be in `(0, size()]`; `firstSize` MUST be `<= secondSize`.
58
+ */
59
+ consistencyProof(firstSize: number, secondSize: number): ConsistencyProof;
60
+ }
61
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/transparency/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAUpB,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,iBAAiB,EAAE,UAAU,CAAC;IAC9B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAEpB,GAAG,EAAE,SAAS;IAU1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAQ/B,yBAAyB;IACzB,IAAI,IAAI,MAAM;IAId;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAOrC,mEAAmE;IACnE,QAAQ,IAAI,cAAc;IAgB1B;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc;IAwBnE;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB;CA6B1E"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Operator-runnable transparency log per TRANSPARENCY.md §2.2.
3
+ *
4
+ * Maintains an append-only sequence of leaf hashes; issues
5
+ * SignedTreeHeads; computes RFC 6962 inclusion + consistency
6
+ * proofs against the current state.
7
+ *
8
+ * The reference implementation holds entries and leaf hashes in
9
+ * memory. Production deployments wrap a durable backend; the
10
+ * operations factor cleanly into a Store interface when needed.
11
+ *
12
+ * @module
13
+ */
14
+ import {} from "./types.js";
15
+ import { auditPath, encodeHash, hashLeafFromEntry, subproof, subtreeRoot, } from "./merkle.js";
16
+ import { signSTH, validateLogEntry } from "./sign.js";
17
+ /**
18
+ * Append-only transparency log. Concurrency-safe under the JS
19
+ * single-threaded model: every method runs to completion before
20
+ * the next; no internal mutex needed.
21
+ */
22
+ export class Log {
23
+ entries = [];
24
+ leaves = [];
25
+ cfg;
26
+ constructor(cfg) {
27
+ if (cfg.domainKeyId === "") {
28
+ throw new Error("transparency: log requires domainKeyId");
29
+ }
30
+ if (cfg.domainSigningSeed.length !== 32) {
31
+ throw new Error("transparency: log requires 32-byte domainSigningSeed");
32
+ }
33
+ this.cfg = cfg;
34
+ }
35
+ /**
36
+ * Validate `entry`, hash its leaf, and append. Returns the
37
+ * assigned 0-based leaf index. Does NOT verify any signature on
38
+ * the entry — admission policy is the caller's concern.
39
+ */
40
+ append(entry) {
41
+ validateLogEntry(entry);
42
+ const leaf = hashLeafFromEntry(entry);
43
+ this.entries.push(entry);
44
+ this.leaves.push(leaf);
45
+ return this.leaves.length - 1;
46
+ }
47
+ /** Current tree size. */
48
+ size() {
49
+ return this.leaves.length;
50
+ }
51
+ /**
52
+ * Return the entry at `index`, or `null` when out of range.
53
+ * The returned object is a reference; callers that mutate must
54
+ * clone first.
55
+ */
56
+ entry(index) {
57
+ if (!Number.isInteger(index) || index < 0 || index >= this.entries.length) {
58
+ return null;
59
+ }
60
+ return this.entries[index] ?? null;
61
+ }
62
+ /** Compute the current root hash and return a signed tree head. */
63
+ issueSTH() {
64
+ const root = subtreeRoot(this.leaves.slice());
65
+ const now = (this.cfg.nowFn ?? (() => new Date()))();
66
+ const preSign = {
67
+ log_size: this.leaves.length,
68
+ root_hash: encodeHash(root),
69
+ timestamp: isoSecond(now),
70
+ signature: { algorithm: "", key_id: "", value: "" },
71
+ };
72
+ return signSTH({
73
+ sth: preSign,
74
+ domainSigningSeed: this.cfg.domainSigningSeed,
75
+ domainKeyId: this.cfg.domainKeyId,
76
+ }).sth;
77
+ }
78
+ /**
79
+ * RFC 6962 audit path for `leafIndex` against `treeSize`. Throws
80
+ * when `leafIndex >= treeSize` or `treeSize > size()`.
81
+ */
82
+ inclusionProof(leafIndex, treeSize) {
83
+ if (!Number.isInteger(treeSize) || treeSize <= 0) {
84
+ throw new Error(`transparency: invalid treeSize ${treeSize}`);
85
+ }
86
+ if (treeSize > this.leaves.length) {
87
+ throw new Error(`transparency: treeSize ${treeSize} exceeds current size ${this.leaves.length}`);
88
+ }
89
+ if (!Number.isInteger(leafIndex) || leafIndex < 0 || leafIndex >= treeSize) {
90
+ throw new Error(`transparency: leafIndex ${leafIndex} out of [0, ${treeSize})`);
91
+ }
92
+ const leaves = this.leaves.slice(0, treeSize);
93
+ const siblings = auditPath(leafIndex, leaves);
94
+ return {
95
+ log_size: treeSize,
96
+ leaf_hash: encodeHash(leaves[leafIndex]),
97
+ leaf_index: leafIndex,
98
+ path: siblings.map(encodeHash),
99
+ };
100
+ }
101
+ /**
102
+ * RFC 6962 consistency proof from `firstSize` to `secondSize`.
103
+ * Both MUST be in `(0, size()]`; `firstSize` MUST be `<= secondSize`.
104
+ */
105
+ consistencyProof(firstSize, secondSize) {
106
+ if (!Number.isInteger(firstSize) ||
107
+ !Number.isInteger(secondSize) ||
108
+ firstSize <= 0 ||
109
+ secondSize <= 0) {
110
+ throw new Error(`transparency: invalid sizes (${firstSize}, ${secondSize})`);
111
+ }
112
+ if (firstSize > secondSize) {
113
+ throw new Error(`transparency: firstSize ${firstSize} > secondSize ${secondSize}`);
114
+ }
115
+ if (secondSize > this.leaves.length) {
116
+ throw new Error(`transparency: secondSize ${secondSize} exceeds current size ${this.leaves.length}`);
117
+ }
118
+ const second = this.leaves.slice(0, secondSize);
119
+ const path = subproof(firstSize, second, true);
120
+ return {
121
+ from_size: firstSize,
122
+ to_size: secondSize,
123
+ path: path.map(encodeHash),
124
+ };
125
+ }
126
+ }
127
+ function isoSecond(d) {
128
+ // Strip milliseconds — STH timestamps are second-precision per
129
+ // CONFORMANCE.md §9.3.
130
+ const iso = d.toISOString();
131
+ return iso.replace(/\.\d{3}Z$/, "Z");
132
+ }
133
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/transparency/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * RFC 6962 Merkle tree math for SEMP key transparency.
3
+ *
4
+ * The leaf hash is `SHA-256(0x00 || canonical_json_bytes)`; an
5
+ * interior node is `SHA-256(0x01 || left || right)`.
6
+ *
7
+ * This module covers:
8
+ * - {@link hashLeaf} / {@link hashInterior}: the per-node hash
9
+ * primitives
10
+ * - {@link verifyInclusionProof}: §3.1 audit-path verification
11
+ * - {@link verifyConsistencyProof}: §3.2 prefix verification
12
+ * - {@link subtreeRoot}, {@link auditPath}, {@link subproof}: the
13
+ * PROOF/PATH/SUBPROOF subroutines from RFC 6962 §2.1
14
+ *
15
+ * @module
16
+ */
17
+ import { type ConsistencyProof, type InclusionProof, type LogEntry } from "./types.js";
18
+ /**
19
+ * `SHA-256(0x00 || entryBytes)` per §2.2 / RFC 6962 §2.1. The
20
+ * caller MUST use the same canonical bytes the log producer used.
21
+ */
22
+ export declare function hashLeaf(entryBytes: Uint8Array): Uint8Array;
23
+ /**
24
+ * Marshal `entry` to canonical JSON and return {@link hashLeaf} of
25
+ * the result.
26
+ */
27
+ export declare function hashLeafFromEntry(entry: LogEntry): Uint8Array;
28
+ /** `SHA-256(0x01 || left || right)` per RFC 6962 §2.1. */
29
+ export declare function hashInterior(left: Uint8Array, right: Uint8Array): Uint8Array;
30
+ /**
31
+ * Verify `proof` against `rootHash` per RFC 6962 §2.1.1. Returns
32
+ * true on success.
33
+ */
34
+ export declare function verifyInclusionProof(proof: InclusionProof, rootHash: Uint8Array): boolean;
35
+ /**
36
+ * Verify `proof` per RFC 6962 §2.1.2. Returns true when the proof
37
+ * attests that the tree of size `from_size` (with `firstRoot`) is a
38
+ * prefix of the tree of size `to_size` (with `secondRoot`).
39
+ */
40
+ export declare function verifyConsistencyProof(proof: ConsistencyProof, firstRoot: Uint8Array, secondRoot: Uint8Array): boolean;
41
+ /**
42
+ * Largest power of 2 strictly less than `n`. Used by RFC 6962
43
+ * PATH and SUBPROOF construction.
44
+ */
45
+ export declare function largestPowerOfTwoLessThan(n: number): number;
46
+ /**
47
+ * MTH(D[0:n]) per RFC 6962 §2.1. An empty input returns the all-zeros
48
+ * 32-byte hash; the spec actually defines MTH(empty) = SHA-256("")
49
+ * but inclusion / consistency proofs never operate on an empty
50
+ * subtree directly.
51
+ */
52
+ export declare function subtreeRoot(leaves: Uint8Array[]): Uint8Array;
53
+ /** PATH(m, D[0:n]) per RFC 6962 §2.1.1. */
54
+ export declare function auditPath(m: number, leaves: Uint8Array[]): Uint8Array[];
55
+ /** SUBPROOF(m, D[0:n], b) per RFC 6962 §2.1.2. */
56
+ export declare function subproof(m: number, leaves: Uint8Array[], b: boolean): Uint8Array[];
57
+ /** Base64-encode a 32-byte hash for the wire form. */
58
+ export declare function encodeHash(h: Uint8Array): string;
59
+ //# sourceMappingURL=merkle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/transparency/merkle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EAGd,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAK3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,UAAU,CAE7D;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAM5E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,UAAU,GACnB,OAAO,CA2BT;AAsCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,UAAU,GACrB,OAAO,CAsCT;AAwDD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAS3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAW5D;AAED,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAavE;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CACtB,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,UAAU,EAAE,EACpB,CAAC,EAAE,OAAO,GACT,UAAU,EAAE,CAgBd;AAKD,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAKhD"}
@@ -0,0 +1,314 @@
1
+ /**
2
+ * RFC 6962 Merkle tree math for SEMP key transparency.
3
+ *
4
+ * The leaf hash is `SHA-256(0x00 || canonical_json_bytes)`; an
5
+ * interior node is `SHA-256(0x01 || left || right)`.
6
+ *
7
+ * This module covers:
8
+ * - {@link hashLeaf} / {@link hashInterior}: the per-node hash
9
+ * primitives
10
+ * - {@link verifyInclusionProof}: §3.1 audit-path verification
11
+ * - {@link verifyConsistencyProof}: §3.2 prefix verification
12
+ * - {@link subtreeRoot}, {@link auditPath}, {@link subproof}: the
13
+ * PROOF/PATH/SUBPROOF subroutines from RFC 6962 §2.1
14
+ *
15
+ * @module
16
+ */
17
+ import { sha256 } from "@noble/hashes/sha2.js";
18
+ import { marshal as canonicalMarshal } from "../canonical/index.js";
19
+ import { InteriorPrefix, LeafPrefix, } from "./types.js";
20
+ /**
21
+ * `SHA-256(0x00 || entryBytes)` per §2.2 / RFC 6962 §2.1. The
22
+ * caller MUST use the same canonical bytes the log producer used.
23
+ */
24
+ export function hashLeaf(entryBytes) {
25
+ const buf = new Uint8Array(1 + entryBytes.length);
26
+ buf[0] = LeafPrefix;
27
+ buf.set(entryBytes, 1);
28
+ return sha256(buf);
29
+ }
30
+ /**
31
+ * Marshal `entry` to canonical JSON and return {@link hashLeaf} of
32
+ * the result.
33
+ */
34
+ export function hashLeafFromEntry(entry) {
35
+ return hashLeaf(canonicalMarshal(entry));
36
+ }
37
+ /** `SHA-256(0x01 || left || right)` per RFC 6962 §2.1. */
38
+ export function hashInterior(left, right) {
39
+ const buf = new Uint8Array(1 + 32 + 32);
40
+ buf[0] = InteriorPrefix;
41
+ buf.set(left, 1);
42
+ buf.set(right, 33);
43
+ return sha256(buf);
44
+ }
45
+ /**
46
+ * Verify `proof` against `rootHash` per RFC 6962 §2.1.1. Returns
47
+ * true on success.
48
+ */
49
+ export function verifyInclusionProof(proof, rootHash) {
50
+ if (proof.log_size <= 0) {
51
+ return false;
52
+ }
53
+ if (proof.leaf_index < 0 || proof.leaf_index >= proof.log_size) {
54
+ return false;
55
+ }
56
+ let leaf;
57
+ let siblings;
58
+ try {
59
+ leaf = decodeHash(proof.leaf_hash);
60
+ siblings = decodeHashes(proof.path);
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ let computed;
66
+ try {
67
+ computed = computeRootFromInclusion(proof.leaf_index, proof.log_size, leaf, siblings);
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ return bytesEqual(computed, rootHash);
73
+ }
74
+ function computeRootFromInclusion(leafIndex, treeSize, leaf, siblings) {
75
+ let fn = leafIndex;
76
+ let sn = treeSize - 1;
77
+ let r = leaf;
78
+ let pathIdx = 0;
79
+ while (sn > 0) {
80
+ if (pathIdx >= siblings.length) {
81
+ throw new Error("transparency: inclusion proof too short");
82
+ }
83
+ const s = siblings[pathIdx];
84
+ pathIdx++;
85
+ if ((fn & 1) === 1 || fn === sn) {
86
+ r = hashInterior(s, r);
87
+ while (fn !== 0 && (fn & 1) === 0) {
88
+ fn >>>= 1;
89
+ sn >>>= 1;
90
+ }
91
+ }
92
+ else {
93
+ r = hashInterior(r, s);
94
+ }
95
+ fn >>>= 1;
96
+ sn >>>= 1;
97
+ }
98
+ if (pathIdx !== siblings.length) {
99
+ throw new Error(`transparency: inclusion proof has ${siblings.length - pathIdx} unused siblings`);
100
+ }
101
+ return r;
102
+ }
103
+ /**
104
+ * Verify `proof` per RFC 6962 §2.1.2. Returns true when the proof
105
+ * attests that the tree of size `from_size` (with `firstRoot`) is a
106
+ * prefix of the tree of size `to_size` (with `secondRoot`).
107
+ */
108
+ export function verifyConsistencyProof(proof, firstRoot, secondRoot) {
109
+ if (proof.from_size < 0 || proof.to_size < 0) {
110
+ return false;
111
+ }
112
+ if (proof.from_size > proof.to_size) {
113
+ return false;
114
+ }
115
+ if (proof.from_size === proof.to_size) {
116
+ if (proof.path.length !== 0) {
117
+ return false;
118
+ }
119
+ return bytesEqual(firstRoot, secondRoot);
120
+ }
121
+ if (proof.from_size === 0) {
122
+ // Trivially consistent; path expected empty per RFC 6962.
123
+ return proof.path.length === 0;
124
+ }
125
+ let siblings;
126
+ try {
127
+ siblings = decodeHashes(proof.path);
128
+ }
129
+ catch {
130
+ return false;
131
+ }
132
+ let recomputed;
133
+ try {
134
+ recomputed = computeRootsFromConsistency(proof.from_size, proof.to_size, firstRoot, siblings);
135
+ }
136
+ catch {
137
+ return false;
138
+ }
139
+ return (bytesEqual(recomputed.first, firstRoot) &&
140
+ bytesEqual(recomputed.second, secondRoot));
141
+ }
142
+ function computeRootsFromConsistency(firstSize, secondSize, firstRoot, path) {
143
+ let fn = firstSize - 1;
144
+ let sn = secondSize - 1;
145
+ while ((fn & 1) === 1) {
146
+ fn >>>= 1;
147
+ sn >>>= 1;
148
+ }
149
+ let fr;
150
+ let sr;
151
+ let pathIdx = 0;
152
+ if (fn !== 0) {
153
+ if (pathIdx >= path.length) {
154
+ throw new Error("transparency: consistency proof too short");
155
+ }
156
+ fr = path[pathIdx];
157
+ sr = path[pathIdx];
158
+ pathIdx++;
159
+ }
160
+ else {
161
+ fr = firstRoot;
162
+ sr = firstRoot;
163
+ }
164
+ while (sn > 0) {
165
+ if (pathIdx >= path.length) {
166
+ throw new Error("transparency: consistency proof too short");
167
+ }
168
+ const c = path[pathIdx];
169
+ pathIdx++;
170
+ if ((fn & 1) === 1 || fn === sn) {
171
+ fr = hashInterior(c, fr);
172
+ sr = hashInterior(c, sr);
173
+ while (fn !== 0 && (fn & 1) === 0) {
174
+ fn >>>= 1;
175
+ sn >>>= 1;
176
+ }
177
+ }
178
+ else {
179
+ sr = hashInterior(sr, c);
180
+ }
181
+ fn >>>= 1;
182
+ sn >>>= 1;
183
+ }
184
+ if (pathIdx !== path.length) {
185
+ throw new Error(`transparency: consistency proof has ${path.length - pathIdx} unused hashes`);
186
+ }
187
+ return { first: fr, second: sr };
188
+ }
189
+ /**
190
+ * Largest power of 2 strictly less than `n`. Used by RFC 6962
191
+ * PATH and SUBPROOF construction.
192
+ */
193
+ export function largestPowerOfTwoLessThan(n) {
194
+ if (n <= 1) {
195
+ return 0;
196
+ }
197
+ let k = 1;
198
+ while (k * 2 < n) {
199
+ k *= 2;
200
+ }
201
+ return k;
202
+ }
203
+ /**
204
+ * MTH(D[0:n]) per RFC 6962 §2.1. An empty input returns the all-zeros
205
+ * 32-byte hash; the spec actually defines MTH(empty) = SHA-256("")
206
+ * but inclusion / consistency proofs never operate on an empty
207
+ * subtree directly.
208
+ */
209
+ export function subtreeRoot(leaves) {
210
+ if (leaves.length === 0) {
211
+ return new Uint8Array(32);
212
+ }
213
+ if (leaves.length === 1) {
214
+ return leaves[0];
215
+ }
216
+ const k = largestPowerOfTwoLessThan(leaves.length);
217
+ const left = subtreeRoot(leaves.slice(0, k));
218
+ const right = subtreeRoot(leaves.slice(k));
219
+ return hashInterior(left, right);
220
+ }
221
+ /** PATH(m, D[0:n]) per RFC 6962 §2.1.1. */
222
+ export function auditPath(m, leaves) {
223
+ const n = leaves.length;
224
+ if (n <= 1) {
225
+ return [];
226
+ }
227
+ const k = largestPowerOfTwoLessThan(n);
228
+ if (m < k) {
229
+ return [...auditPath(m, leaves.slice(0, k)), subtreeRoot(leaves.slice(k))];
230
+ }
231
+ return [
232
+ ...auditPath(m - k, leaves.slice(k)),
233
+ subtreeRoot(leaves.slice(0, k)),
234
+ ];
235
+ }
236
+ /** SUBPROOF(m, D[0:n], b) per RFC 6962 §2.1.2. */
237
+ export function subproof(m, leaves, b) {
238
+ const n = leaves.length;
239
+ if (m === n) {
240
+ if (b) {
241
+ return [];
242
+ }
243
+ return [subtreeRoot(leaves)];
244
+ }
245
+ const k = largestPowerOfTwoLessThan(n);
246
+ if (m <= k) {
247
+ return [...subproof(m, leaves.slice(0, k), b), subtreeRoot(leaves.slice(k))];
248
+ }
249
+ return [
250
+ ...subproof(m - k, leaves.slice(k), false),
251
+ subtreeRoot(leaves.slice(0, k)),
252
+ ];
253
+ }
254
+ // ---------------------------------------------------------------------------
255
+ // Helpers
256
+ /** Base64-encode a 32-byte hash for the wire form. */
257
+ export function encodeHash(h) {
258
+ if (h.length !== 32) {
259
+ throw new Error(`transparency: hash length ${h.length}, want 32`);
260
+ }
261
+ return base64Encode(h);
262
+ }
263
+ function decodeHash(s) {
264
+ const out = base64Decode(s);
265
+ if (out.length !== 32) {
266
+ throw new Error(`transparency: hash length ${out.length}, want 32`);
267
+ }
268
+ return out;
269
+ }
270
+ function decodeHashes(items) {
271
+ const out = [];
272
+ for (let i = 0; i < items.length; i++) {
273
+ try {
274
+ out.push(decodeHash(items[i] ?? ""));
275
+ }
276
+ catch (err) {
277
+ throw new Error(`transparency: path[${i}]: ${err instanceof Error ? err.message : String(err)}`);
278
+ }
279
+ }
280
+ return out;
281
+ }
282
+ function bytesEqual(a, b) {
283
+ if (a.length !== b.length) {
284
+ return false;
285
+ }
286
+ for (let i = 0; i < a.length; i++) {
287
+ if (a[i] !== b[i]) {
288
+ return false;
289
+ }
290
+ }
291
+ return true;
292
+ }
293
+ function base64Encode(b) {
294
+ if (typeof Buffer !== "undefined") {
295
+ return Buffer.from(b).toString("base64");
296
+ }
297
+ let bin = "";
298
+ for (let i = 0; i < b.length; i++) {
299
+ bin += String.fromCharCode(b[i] ?? 0);
300
+ }
301
+ return btoa(bin);
302
+ }
303
+ function base64Decode(s) {
304
+ if (typeof Buffer !== "undefined") {
305
+ return new Uint8Array(Buffer.from(s, "base64"));
306
+ }
307
+ const bin = atob(s);
308
+ const out = new Uint8Array(bin.length);
309
+ for (let i = 0; i < bin.length; i++) {
310
+ out[i] = bin.charCodeAt(i);
311
+ }
312
+ return out;
313
+ }
314
+ //# sourceMappingURL=merkle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/transparency/merkle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * STH signing + verification + freshness checks per
3
+ * TRANSPARENCY.md §2.3.
4
+ *
5
+ * @module
6
+ */
7
+ import { type LogEntry, type SignedTreeHead } from "./types.js";
8
+ /** Domain-separation prefix per ENVELOPE.md §4.3. */
9
+ export declare const TransparencySTHPrefix = "SEMP-TRANSPARENCY-STH:";
10
+ /** Only signature algorithm defined for STH signatures. */
11
+ export declare const SignatureAlgorithmEd25519 = "ed25519";
12
+ /** Inputs to {@link signSTH}. */
13
+ export interface SignSTHInput {
14
+ /** Pre-sign STH; `signature.value` will be replaced. */
15
+ sth: SignedTreeHead;
16
+ /** 32-byte Ed25519 secret seed for the domain signing key. */
17
+ domainSigningSeed: Uint8Array;
18
+ /** Lowercase-hex SHA-256 fingerprint of the domain signing pub. */
19
+ domainKeyId: string;
20
+ }
21
+ /** Result of a successful {@link signSTH}. */
22
+ export interface SignSTHResult {
23
+ sth: SignedTreeHead;
24
+ signatureB64: string;
25
+ }
26
+ /**
27
+ * Build and Ed25519-sign an STH per §2.3. Pre-populates
28
+ * `signature.{algorithm,key_id}` so the canonical bytes cover them
29
+ * (defense against algorithm/issuer downgrade).
30
+ */
31
+ export declare function signSTH(input: SignSTHInput): SignSTHResult;
32
+ /**
33
+ * Ed25519-verify an STH's signature against `domainPub`. Returns
34
+ * true on success. Does NOT enforce staleness; pair with
35
+ * {@link checkSTHFresh} for the §2.3 1-hour bound.
36
+ */
37
+ export declare function verifySTH(sth: SignedTreeHead, domainPub: Uint8Array): boolean;
38
+ /**
39
+ * Enforce §2.3 freshness: reject STHs whose timestamp is more than
40
+ * {@link MaxSTHFreshnessMs} old. Returns true when the STH is
41
+ * fresh under the supplied `now`.
42
+ */
43
+ export declare function checkSTHFresh(sth: SignedTreeHead, now: Date): boolean;
44
+ /** Structural validation of `sth` per §2.3. Throws on first violation. */
45
+ export declare function validateSTH(sth: SignedTreeHead): void;
46
+ /** Structural validation of a {@link LogEntry} per §2.2. Throws on first violation. */
47
+ export declare function validateLogEntry(e: LogEntry): void;
48
+ //# sourceMappingURL=sign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/transparency/sign.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAEpB,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,2DAA2D;AAC3D,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,iCAAiC;AACjC,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,GAAG,EAAE,cAAc,CAAC;IACpB,8DAA8D;IAC9D,iBAAiB,EAAE,UAAU,CAAC;IAC9B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,cAAc,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAwB1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAYT;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAMrE;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAsBrD;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAgDlD"}