functionalscript 0.37.0 → 0.39.0

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 (517) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  3. package/fjs/asserts/module.f.d.ts +36 -0
  4. package/fjs/asserts/module.f.js +39 -0
  5. package/fjs/asserts/proof.f.d.ts +11 -0
  6. package/fjs/asserts/proof.f.js +18 -0
  7. package/{fs → fjs}/base_n/proof.f.js +12 -36
  8. package/{fs → fjs}/basen/base64/proof.f.d.ts +1 -0
  9. package/{fs → fjs}/basen/base64/proof.f.js +15 -1
  10. package/{fs → fjs}/basen/cbase32/proof.f.js +15 -42
  11. package/fjs/bnf/data/module.f.d.ts +52 -0
  12. package/{fs → fjs}/bnf/data/module.f.js +53 -3
  13. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  14. package/{fs → fjs}/bnf/data/proof.f.js +54 -19
  15. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  16. package/fjs/bnf/descent/module.f.js +124 -0
  17. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  18. package/{fs → fjs}/bnf/descent/proof.f.js +55 -24
  19. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  20. package/{fs → fjs}/bnf/ll1/module.f.js +7 -5
  21. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  22. package/{fs → fjs}/bnf/ll1/proof.f.js +27 -10
  23. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  24. package/{fs → fjs}/bnf/module.f.js +10 -11
  25. package/fjs/bnf/proof.f.js +69 -0
  26. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  27. package/fjs/bnf/token_symbol/module.f.d.ts +38 -0
  28. package/fjs/bnf/token_symbol/module.f.js +48 -0
  29. package/fjs/bnf/token_symbol/proof.f.d.ts +10 -0
  30. package/fjs/bnf/token_symbol/proof.f.js +37 -0
  31. package/{fs → fjs}/cas/cli/module.f.js +6 -9
  32. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  33. package/{fs → fjs}/cas/cli/proof.f.js +29 -66
  34. package/fjs/cas/evo/mcp/module.f.d.ts +27 -0
  35. package/fjs/cas/evo/mcp/module.f.js +94 -0
  36. package/fjs/cas/evo/mcp/proof.f.d.ts +11 -0
  37. package/fjs/cas/evo/mcp/proof.f.js +126 -0
  38. package/fjs/cas/evo/module.f.d.ts +202 -0
  39. package/fjs/cas/evo/module.f.js +421 -0
  40. package/fjs/cas/evo/proof.f.d.ts +39 -0
  41. package/fjs/cas/evo/proof.f.js +572 -0
  42. package/fjs/cas/mcp/module.f.d.ts +49 -0
  43. package/{fs → fjs}/cas/mcp/module.f.js +61 -81
  44. package/{fs → fjs}/cas/mcp/proof.f.d.ts +4 -1
  45. package/{fs → fjs}/cas/mcp/proof.f.js +45 -17
  46. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  47. package/{fs → fjs}/cas/module.f.js +89 -36
  48. package/fjs/cas/proof.f.d.ts +18 -0
  49. package/fjs/cas/proof.f.js +305 -0
  50. package/{fs → fjs}/ci/bun/module.f.js +3 -3
  51. package/{fs → fjs}/ci/common/module.f.d.ts +1 -2
  52. package/{fs → fjs}/ci/common/module.f.js +1 -5
  53. package/{fs → fjs}/ci/config/module.f.d.ts +8 -8
  54. package/{fs → fjs}/ci/config/module.f.js +8 -8
  55. package/{fs → fjs}/ci/deno/module.f.js +3 -3
  56. package/{fs → fjs}/ci/module.f.js +3 -4
  57. package/{fs → fjs}/ci/node/module.f.js +11 -9
  58. package/{fs → fjs}/ci/proof.f.js +16 -9
  59. package/{fs → fjs}/ci/rust/module.f.js +9 -1
  60. package/{fs → fjs}/cli/module.f.js +2 -2
  61. package/{fs → fjs}/cli/proof.f.js +22 -63
  62. package/{fs → fjs}/common/monoid/module.f.d.ts +46 -2
  63. package/fjs/common/monoid/module.f.js +88 -0
  64. package/fjs/common/monoid/proof.f.d.ts +9 -0
  65. package/fjs/common/monoid/proof.f.js +48 -0
  66. package/{fs → fjs}/crypto/hmac/proof.f.js +4 -12
  67. package/fjs/crypto/pow/proof.f.js +111 -0
  68. package/{fs → fjs}/crypto/secp/proof.f.js +12 -33
  69. package/{fs → fjs}/crypto/sha2/proof.f.js +18 -49
  70. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  71. package/{fs → fjs}/crypto/sign/module.f.js +7 -4
  72. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  73. package/{fs → fjs}/crypto/vdf/proof.f.js +22 -63
  74. package/{fs → fjs}/dev/module.f.js +25 -25
  75. package/{fs → fjs}/dev/package_json/proof.f.js +7 -7
  76. package/{fs → fjs}/dev/proof.f.js +2 -4
  77. package/{fs → fjs}/djs/ast/proof.f.js +4 -12
  78. package/{fs → fjs}/djs/module.f.js +5 -8
  79. package/{fs → fjs}/djs/parser/module.f.d.ts +8 -0
  80. package/{fs → fjs}/djs/parser/module.f.js +37 -0
  81. package/{fs → fjs}/djs/parser/proof.f.js +138 -400
  82. package/{fs → fjs}/djs/proof.f.js +13 -36
  83. package/{fs → fjs}/djs/serializer/proof.f.js +14 -39
  84. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  85. package/fjs/djs/tokenizer/module.f.js +472 -0
  86. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  87. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +446 -445
  88. package/{fs → fjs}/djs/transpiler/module.f.js +6 -6
  89. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  90. package/{fs → fjs}/djs/transpiler/proof.f.js +29 -30
  91. package/fjs/effects/eff/module.f.d.ts +72 -0
  92. package/fjs/effects/eff/module.f.js +46 -0
  93. package/fjs/effects/eff/proof.f.d.ts +11 -0
  94. package/fjs/effects/eff/proof.f.js +58 -0
  95. package/{fs → fjs}/effects/list/module.f.d.ts +11 -5
  96. package/{fs → fjs}/effects/list/module.f.js +2 -1
  97. package/{fs → fjs}/effects/memory/proof.f.js +15 -29
  98. package/fjs/effects/module.f.d.ts +388 -0
  99. package/fjs/effects/module.f.js +288 -0
  100. package/{fs → fjs}/effects/node/memory/proof.js +7 -13
  101. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  102. package/{fs → fjs}/effects/node/module.f.d.ts +2 -2
  103. package/{fs → fjs}/effects/node/module.f.js +9 -11
  104. package/{fs → fjs}/effects/node/module.js +3 -3
  105. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  106. package/{fs → fjs}/effects/node/proof.f.js +121 -299
  107. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +1 -0
  108. package/{fs → fjs}/effects/node/virtual/proof.f.js +36 -29
  109. package/fjs/effects/proof.f.d.ts +51 -0
  110. package/fjs/effects/proof.f.js +178 -0
  111. package/{fs → fjs}/emergent_testing/module.f.js +55 -39
  112. package/{fs → fjs}/emergent_testing/proof.f.d.ts +4 -0
  113. package/{fs → fjs}/emergent_testing/proof.f.js +60 -27
  114. package/{fs → fjs}/fsc/proof.f.js +12 -34
  115. package/{fs → fjs}/fsm/proof.f.js +5 -12
  116. package/{fs → fjs}/mcp/module.f.d.ts +7 -0
  117. package/{fs → fjs}/mcp/module.f.js +17 -10
  118. package/{fs → fjs}/mcp/proof.f.js +17 -16
  119. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  120. package/{fs → fjs}/mcp/stdio/module.f.js +14 -14
  121. package/{fs → fjs}/media/html/proof.f.js +12 -33
  122. package/{fs → fjs}/media/json/parser/module.f.d.ts +5 -0
  123. package/{fs → fjs}/media/json/parser/module.f.js +14 -0
  124. package/{fs → fjs}/media/json/parser/proof.f.js +39 -114
  125. package/{fs → fjs}/media/json/rpc/module.f.js +1 -1
  126. package/{fs → fjs}/media/json/schema/module.f.d.ts +2 -2
  127. package/{fs → fjs}/media/json/schema/module.f.js +23 -39
  128. package/{fs → fjs}/media/json/schema/proof.f.js +3 -6
  129. package/{fs → fjs}/media/json/serializer/proof.f.js +10 -27
  130. package/{fs → fjs}/media/module.f.d.ts +6 -6
  131. package/{fs → fjs}/media/module.f.js +3 -4
  132. package/{fs → fjs}/media/proof.f.js +5 -4
  133. package/{fs → fjs}/media/revision/module.f.d.ts +31 -4
  134. package/{fs → fjs}/media/revision/module.f.js +35 -23
  135. package/{fs → fjs}/media/revision/proof.f.d.ts +10 -8
  136. package/fjs/media/revision/proof.f.js +140 -0
  137. package/{fs → fjs}/media/type/module.f.js +2 -2
  138. package/{fs → fjs}/media/type/proof.f.js +8 -15
  139. package/{fs → fjs}/module.f.js +5 -9
  140. package/{fs → fjs}/path/proof.f.js +27 -78
  141. package/{fs → fjs}/proof.f.js +2 -0
  142. package/{fs → fjs}/sul/id/proof.f.js +7 -21
  143. package/{fs → fjs}/sul/level/hash/proof.f.js +5 -5
  144. package/{fs → fjs}/sul/level/literal/proof.f.js +12 -26
  145. package/fjs/text/ascii/proof.f.d.ts +6 -0
  146. package/{fs → fjs}/text/ascii/proof.f.js +4 -14
  147. package/{fs → fjs}/text/code_point/module.f.js +10 -10
  148. package/{fs → fjs}/text/proof.f.js +4 -9
  149. package/{fs → fjs}/text/sgr/proof.f.js +6 -15
  150. package/{fs → fjs}/text/utf16/module.f.js +1 -1
  151. package/{fs → fjs}/text/utf16/proof.f.js +23 -66
  152. package/{fs → fjs}/text/utf8/proof.f.js +56 -125
  153. package/{fs → fjs}/types/array/proof.f.js +18 -52
  154. package/fjs/types/bigfloat/proof.f.js +217 -0
  155. package/{fs → fjs}/types/bigint/module.f.js +4 -3
  156. package/{fs → fjs}/types/bigint/proof.f.js +49 -145
  157. package/{fs → fjs}/types/bit_vec/module.f.js +5 -15
  158. package/{fs → fjs}/types/bit_vec/proof.f.js +72 -214
  159. package/{fs → fjs}/types/btree/find/proof.f.js +23 -66
  160. package/{fs → fjs}/types/btree/proof.f.js +5 -12
  161. package/{fs → fjs}/types/btree/remove/module.f.d.ts +5 -0
  162. package/{fs → fjs}/types/btree/remove/module.f.js +12 -0
  163. package/{fs → fjs}/types/btree/remove/proof.f.d.ts +2 -0
  164. package/{fs → fjs}/types/btree/remove/proof.f.js +83 -230
  165. package/{fs → fjs}/types/btree/set/module.f.js +5 -2
  166. package/{fs → fjs}/types/btree/set/proof.f.js +35 -24
  167. package/{fs → fjs}/types/byte_set/proof.f.js +22 -63
  168. package/{fs → fjs}/types/function/compare/proof.f.js +13 -36
  169. package/{fs → fjs}/types/function/operator/proof.f.js +17 -48
  170. package/{fs → fjs}/types/function/proof.f.js +2 -3
  171. package/{fs → fjs}/types/list/module.f.d.ts +21 -0
  172. package/{fs → fjs}/types/list/module.f.js +17 -0
  173. package/{fs → fjs}/types/list/proof.f.d.ts +1 -0
  174. package/{fs → fjs}/types/list/proof.f.js +79 -164
  175. package/{fs → fjs}/types/map/proof.f.js +4 -12
  176. package/{fs → fjs}/types/nibble_set/proof.f.js +16 -45
  177. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  178. package/fjs/types/nullable/proof.f.js +29 -0
  179. package/{fs → fjs}/types/number/module.f.js +2 -1
  180. package/{fs → fjs}/types/number/proof.f.js +9 -24
  181. package/{fs → fjs}/types/object/proof.f.js +3 -6
  182. package/{fs → fjs}/types/patricia_trie/proof.f.js +21 -21
  183. package/{fs → fjs}/types/prime_field/module.f.js +2 -7
  184. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  185. package/fjs/types/range/module.f.js +2 -0
  186. package/fjs/types/range/proof.f.js +9 -0
  187. package/{fs → fjs}/types/range_map/proof.f.js +28 -81
  188. package/{fs → fjs}/types/result/proof.f.d.ts +3 -2
  189. package/fjs/types/result/proof.f.js +31 -0
  190. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  191. package/{fs → fjs}/types/rtti/common/module.f.js +44 -0
  192. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  193. package/fjs/types/rtti/common/proof.f.js +51 -0
  194. package/{fs → fjs}/types/rtti/parse/module.f.js +13 -22
  195. package/{fs → fjs}/types/rtti/parse/proof.f.js +7 -18
  196. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  197. package/{fs → fjs}/types/rtti/validate/module.f.js +8 -29
  198. package/{fs → fjs}/types/rtti/validate/proof.f.js +4 -9
  199. package/{fs → fjs}/types/sorted_list/proof.f.js +8 -21
  200. package/{fs → fjs}/types/sorted_set/proof.f.js +14 -39
  201. package/{fs → fjs}/types/string/module.f.js +10 -2
  202. package/fjs/types/string/proof.f.js +77 -0
  203. package/fjs/types/string_set/proof.f.js +43 -0
  204. package/{fs → fjs}/types/ts/proof.f.js +15 -42
  205. package/{fs → fjs}/types/uint8array/module.f.js +7 -7
  206. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  207. package/{fs → fjs}/types/uint8array/proof.f.js +7 -7
  208. package/{fs → fjs}/website/module.f.js +2 -3
  209. package/{fs → fjs}/website/proof.f.js +3 -6
  210. package/package.json +8 -8
  211. package/fs/asserts/module.f.d.ts +0 -4
  212. package/fs/asserts/module.f.js +0 -9
  213. package/fs/asserts/proof.f.d.ts +0 -8
  214. package/fs/asserts/proof.f.js +0 -51
  215. package/fs/bnf/data/module.f.d.ts +0 -30
  216. package/fs/bnf/descent/module.f.js +0 -119
  217. package/fs/bnf/proof.f.js +0 -104
  218. package/fs/cas/mcp/module.f.d.ts +0 -36
  219. package/fs/cas/proof.f.d.ts +0 -20
  220. package/fs/cas/proof.f.js +0 -294
  221. package/fs/common/monoid/module.f.js +0 -44
  222. package/fs/common/monoid/proof.f.d.ts +0 -4
  223. package/fs/common/monoid/proof.f.js +0 -27
  224. package/fs/crypto/pow/proof.f.js +0 -161
  225. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  226. package/fs/djs/tokenizer/module.f.js +0 -62
  227. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  228. package/fs/djs/tokenizer/proof.f.js +0 -543
  229. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  230. package/fs/djs/tokenizer-new/module.f.js +0 -155
  231. package/fs/effects/module.f.d.ts +0 -106
  232. package/fs/effects/module.f.js +0 -80
  233. package/fs/effects/proof.f.d.ts +0 -25
  234. package/fs/effects/proof.f.js +0 -115
  235. package/fs/media/revision/proof.f.js +0 -119
  236. package/fs/text/ascii/proof.f.d.ts +0 -4
  237. package/fs/types/bigfloat/proof.f.js +0 -348
  238. package/fs/types/nullable/proof.f.js +0 -50
  239. package/fs/types/range/module.f.js +0 -2
  240. package/fs/types/range/proof.f.js +0 -18
  241. package/fs/types/result/proof.f.js +0 -52
  242. package/fs/types/string/proof.f.js +0 -118
  243. package/fs/types/string_set/proof.f.js +0 -82
  244. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  245. /package/{fs → fjs}/asn.1/module.f.js +0 -0
  246. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  247. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  248. /package/{fs → fjs}/base_n/module.f.js +0 -0
  249. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  250. /package/{fs → fjs}/basen/base128/module.f.d.ts +0 -0
  251. /package/{fs → fjs}/basen/base128/module.f.js +0 -0
  252. /package/{fs → fjs}/basen/base128/proof.f.d.ts +0 -0
  253. /package/{fs → fjs}/basen/base128/proof.f.js +0 -0
  254. /package/{fs → fjs}/basen/base64/module.f.d.ts +0 -0
  255. /package/{fs → fjs}/basen/base64/module.f.js +0 -0
  256. /package/{fs → fjs}/basen/cbase32/module.f.d.ts +0 -0
  257. /package/{fs → fjs}/basen/cbase32/module.f.js +0 -0
  258. /package/{fs → fjs}/basen/cbase32/proof.f.d.ts +0 -0
  259. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  260. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  261. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  262. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  263. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  264. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  265. /package/{fs → fjs}/ci/node/module.f.d.ts +0 -0
  266. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  267. /package/{fs → fjs}/ci/playwright/module.f.js +0 -0
  268. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  269. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  270. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  271. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  272. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  273. /package/{fs → fjs}/crypto/hmac/module.f.js +0 -0
  274. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  275. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  276. /package/{fs → fjs}/crypto/pow/module.f.js +0 -0
  277. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  278. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  279. /package/{fs → fjs}/crypto/secp/module.f.js +0 -0
  280. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  281. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  282. /package/{fs → fjs}/crypto/sha2/module.f.js +0 -0
  283. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  284. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  285. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  286. /package/{fs → fjs}/crypto/vdf/module.f.js +0 -0
  287. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  288. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  289. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  290. /package/{fs → fjs}/dev/package_json/module.f.js +0 -0
  291. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  292. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  293. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  294. /package/{fs → fjs}/djs/ast/module.f.js +0 -0
  295. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  296. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  297. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  298. /package/{fs → fjs}/djs/examples/m.f.d.ts +0 -0
  299. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  300. /package/{fs → fjs}/djs/module.f.d.ts +0 -0
  301. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  302. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  303. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  304. /package/{fs → fjs}/djs/serializer/module.f.js +0 -0
  305. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  306. /package/{fs → fjs}/djs/transpiler/module.f.d.ts +0 -0
  307. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  308. /package/{fs → fjs}/effects/memory/module.f.js +0 -0
  309. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  310. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  311. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  312. /package/{fs → fjs}/effects/module.d.ts +0 -0
  313. /package/{fs → fjs}/effects/module.js +0 -0
  314. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  315. /package/{fs → fjs}/effects/node/memory/module.js +0 -0
  316. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  317. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  318. /package/{fs → fjs}/effects/node/virtual/module.f.js +0 -0
  319. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  320. /package/{fs → fjs}/emergent_testing/all.test.js +0 -0
  321. /package/{fs → fjs}/emergent_testing/example.f.d.ts +0 -0
  322. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  323. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  324. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  325. /package/{fs → fjs}/emergent_testing/scenarios/all.js +0 -0
  326. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  327. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  328. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  329. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  330. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  331. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  332. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  333. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  334. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  335. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  336. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  337. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  338. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  339. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  340. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  341. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  342. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  343. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  344. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  345. /package/{fs → fjs}/fsc/bnf.f.js +0 -0
  346. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  347. /package/{fs → fjs}/fsc/json.f.js +0 -0
  348. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/fsc/module.f.js +0 -0
  350. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  351. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  352. /package/{fs → fjs}/fsm/module.f.js +0 -0
  353. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  355. /package/{fs → fjs}/js/tokenizer/module.f.js +0 -0
  356. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/js/tokenizer/proof.f.js +0 -0
  358. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  359. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/mcp/stdio/proof.f.js +0 -0
  361. /package/{fs → fjs}/media/html/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/media/html/module.f.js +0 -0
  363. /package/{fs → fjs}/media/html/proof.f.d.ts +0 -0
  364. /package/{fs → fjs}/media/json/module.f.d.ts +0 -0
  365. /package/{fs → fjs}/media/json/module.f.js +0 -0
  366. /package/{fs → fjs}/media/json/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/media/json/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/media/json/proof.f.js +0 -0
  369. /package/{fs → fjs}/media/json/rpc/module.f.d.ts +0 -0
  370. /package/{fs → fjs}/media/json/rpc/proof.f.d.ts +0 -0
  371. /package/{fs → fjs}/media/json/rpc/proof.f.js +0 -0
  372. /package/{fs → fjs}/media/json/schema/proof.f.d.ts +0 -0
  373. /package/{fs → fjs}/media/json/serializer/module.f.d.ts +0 -0
  374. /package/{fs → fjs}/media/json/serializer/module.f.js +0 -0
  375. /package/{fs → fjs}/media/json/serializer/proof.f.d.ts +0 -0
  376. /package/{fs → fjs}/media/json/tokenizer/module.f.d.ts +0 -0
  377. /package/{fs → fjs}/media/json/tokenizer/module.f.js +0 -0
  378. /package/{fs → fjs}/media/json/tokenizer/proof.f.d.ts +0 -0
  379. /package/{fs → fjs}/media/json/tokenizer/proof.f.js +0 -0
  380. /package/{fs → fjs}/media/proof.f.d.ts +0 -0
  381. /package/{fs → fjs}/media/type/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/media/type/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/module.d.ts +0 -0
  384. /package/{fs → fjs}/module.f.d.ts +0 -0
  385. /package/{fs → fjs}/module.js +0 -0
  386. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  387. /package/{fs → fjs}/path/module.f.js +0 -0
  388. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  389. /package/{fs → fjs}/proof.f.d.ts +0 -0
  390. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  391. /package/{fs → fjs}/sul/id/module.f.js +0 -0
  392. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  393. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  394. /package/{fs → fjs}/sul/level/hash/module.f.js +0 -0
  395. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  396. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  397. /package/{fs → fjs}/sul/level/literal/module.f.js +0 -0
  398. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  399. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  400. /package/{fs → fjs}/sul/module.f.js +0 -0
  401. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  402. /package/{fs → fjs}/sul/proof.f.js +0 -0
  403. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  404. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  405. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  406. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  407. /package/{fs → fjs}/text/code_point/proof.f.js +0 -0
  408. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  409. /package/{fs → fjs}/text/module.f.js +0 -0
  410. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/text/sgr/module.f.js +0 -0
  413. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  415. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  416. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  417. /package/{fs → fjs}/text/utf8/module.f.js +0 -0
  418. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  419. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  420. /package/{fs → fjs}/types/array/module.f.js +0 -0
  421. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  422. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  423. /package/{fs → fjs}/types/bigfloat/module.f.js +0 -0
  424. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  425. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  426. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/types/btree/find/module.f.js +0 -0
  431. /package/{fs → fjs}/types/btree/find/proof.f.d.ts +0 -0
  432. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  433. /package/{fs → fjs}/types/btree/module.f.js +0 -0
  434. /package/{fs → fjs}/types/btree/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  437. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  439. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/types/byte_set/module.f.js +0 -0
  441. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  442. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  443. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  444. /package/{fs → fjs}/types/function/compare/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/types/function/module.f.js +0 -0
  447. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  449. /package/{fs → fjs}/types/function/operator/proof.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/function/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/map/module.f.js +0 -0
  453. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  456. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  459. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/nullable/module.f.js +0 -0
  462. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  466. /package/{fs → fjs}/types/object/module.f.js +0 -0
  467. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  469. /package/{fs → fjs}/types/option/module.f.js +0 -0
  470. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  471. /package/{fs → fjs}/types/ordered_map/module.f.js +0 -0
  472. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/ordered_map/proof.f.js +0 -0
  474. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  475. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  476. /package/{fs → fjs}/types/patricia_trie/proof.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  478. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  479. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  481. /package/{fs → fjs}/types/prime_field/proof.f.js +0 -0
  482. /package/{fs → fjs}/types/range/proof.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/range_map/module.f.js +0 -0
  485. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  487. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/result/module.f.js +0 -0
  489. /package/{fs → fjs}/types/result/module.js +0 -0
  490. /package/{fs → fjs}/types/rtti/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/rtti/module.f.js +0 -0
  492. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  494. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  496. /package/{fs → fjs}/types/rtti/ts/module.f.js +0 -0
  497. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  498. /package/{fs → fjs}/types/rtti/ts/proof.f.js +0 -0
  499. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  502. /package/{fs → fjs}/types/sorted_list/module.f.js +0 -0
  503. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  504. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/sorted_set/module.f.js +0 -0
  506. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  508. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/string_set/module.f.js +0 -0
  511. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  514. /package/{fs → fjs}/types/ts/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  517. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
@@ -0,0 +1,111 @@
1
+ import { utf8 } from '../../text/module.f.js';
2
+ import { empty, uint } from '../../types/bit_vec/module.f.js';
3
+ import { computeSync, sha224, sha256 } from '../sha2/module.f.js';
4
+ import { bitcoinPow, genesisNBits, genesisTarget, pow, sha256Pow, targetFromNBits } from './module.f.js';
5
+ import { assert, assertEq, assertNotNullish } from '../../asserts/module.f.js';
6
+ const p256 = sha256Pow;
7
+ const p224 = pow(sha224);
8
+ const sample = utf8('functionalscript pow proof');
9
+ const emptyData = empty;
10
+ /** Target large enough for {@link sample} under SHA-256 (`0x207fffff`). */
11
+ const easyNBits = 0x207fffffn;
12
+ /** Compact encoding for target `1` (`0x03000001`). */
13
+ const hardNBits = 0x03000001n;
14
+ /** SHA-256 of the empty message (NIST / Bitcoin block merkle uses this primitive). */
15
+ const sha256EmptyHash = 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855n;
16
+ /** Bitcoin block #0 header hash as big-endian uint256. */
17
+ const block0Hash = 0x000000000019d6689c085ae165831e934ff763ae46a2a6cffb388491c27dc990n;
18
+ const expectNull = (nBits) => {
19
+ assertEq(targetFromNBits(nBits), null, nBits);
20
+ };
21
+ export const proof = {
22
+ targetFromNBits: {
23
+ genesis: () => {
24
+ assertEq(targetFromNBits(genesisNBits), genesisTarget, 'genesis target');
25
+ },
26
+ block0HashWithinGenesisTarget: () => {
27
+ assert(!(block0Hash > genesisTarget), 'block0 hash exceeds genesis target');
28
+ },
29
+ exponent3: () => {
30
+ assertEq(targetFromNBits(0x030000ffn), 0xffn, 'exponent 3');
31
+ },
32
+ exponent2: () => {
33
+ assertEq(targetFromNBits(0x02008000n), 0x80n, 'exponent 2');
34
+ },
35
+ hardTargetOne: () => {
36
+ assertEq(targetFromNBits(hardNBits), 1n, 'hard target');
37
+ },
38
+ zero: () => {
39
+ assertEq(targetFromNBits(0n), 0n, 'zero nBits');
40
+ },
41
+ negative: () => {
42
+ expectNull(0x01800001n);
43
+ },
44
+ negativeHighMantissa: () => {
45
+ expectNull(0x22ffffffn);
46
+ },
47
+ overflowExponent: () => {
48
+ expectNull(0x23000001n);
49
+ },
50
+ exceeds256: () => {
51
+ expectNull(0x227fffffn);
52
+ },
53
+ },
54
+ meets: {
55
+ easy: () => {
56
+ assert(p256.meets(easyNBits)(sample), 'easy nBits should pass');
57
+ },
58
+ hard: () => {
59
+ assert(!(p256.meets(hardNBits)(sample)), 'target 1 should fail');
60
+ },
61
+ genesisFailsSample: () => {
62
+ assert(!(p256.meets(genesisNBits)(sample)), 'genesis target too hard for sample');
63
+ },
64
+ zeroTargetRejectsSample: () => {
65
+ assert(!(p256.meets(0n)(sample)), 'non-zero hash vs zero target');
66
+ },
67
+ invalidNBits: () => {
68
+ assert(!(p256.meets(0x01800001n)(sample)), 'invalid nBits should not pass');
69
+ },
70
+ hashLeqTarget: () => {
71
+ const h = p256.hashInt(sample);
72
+ const target = assertNotNullish(targetFromNBits(easyNBits), 'easy nBits decode');
73
+ assert(!(h > target), 'hash above easy target');
74
+ assert(h <= target, 'hash <= target');
75
+ },
76
+ },
77
+ hashInt: {
78
+ sha256Sample: () => {
79
+ const digest = computeSync(sha256)([sample]);
80
+ assertEq(p256.hashInt(sample), uint(digest), 'sha256 sample');
81
+ },
82
+ sha256Empty: () => {
83
+ assertEq(p256.hashInt(emptyData), sha256EmptyHash, 'sha256 empty constant');
84
+ const digest = computeSync(sha256)([emptyData]);
85
+ assertEq(p256.hashInt(emptyData), uint(digest), 'sha256 empty');
86
+ },
87
+ sha224: () => {
88
+ const digest = computeSync(sha224)([sample]);
89
+ assertEq(p224.hashInt(sample), uint(digest), 'sha224');
90
+ },
91
+ stable: () => {
92
+ assertEq(p256.hashInt(sample), p256.hashInt(sample), 'stable');
93
+ },
94
+ },
95
+ pow: {
96
+ sha256Pow: () => {
97
+ const built = pow(sha256);
98
+ assertEq(sha256Pow.hashInt(sample), built.hashInt(sample), 'hashInt');
99
+ assertEq(sha256Pow.meets(easyNBits)(sample), built.meets(easyNBits)(sample), 'meets');
100
+ },
101
+ bitcoinPow: () => {
102
+ assertEq(bitcoinPow.hashInt(sample), sha256Pow.hashInt(sample), 'bitcoinPow');
103
+ },
104
+ independentInstances: () => {
105
+ const a = pow(sha256);
106
+ const b = pow(sha256);
107
+ assertEq(a.hashInt(sample), b.hashInt(sample), 'hashInt');
108
+ assertEq(a.meets(easyNBits)(sample), b.meets(easyNBits)(sample), 'meets');
109
+ },
110
+ },
111
+ };
@@ -1,4 +1,4 @@
1
- import { assert } from '../../asserts/module.f.js';
1
+ import { assert, assertEq, assertNotNullish } from '../../asserts/module.f.js';
2
2
  import { prime_field } from '../../types/prime_field/module.f.js';
3
3
  import { curve, secp256k1, secp192r1, secp256r1, eq, secp384r1, secp521r1 } from './module.f.js';
4
4
  const poker = (param) => () => {
@@ -44,13 +44,9 @@ const poker = (param) => () => {
44
44
  //
45
45
  let m = 0n;
46
46
  for (const p of dN) {
47
- if (p === null) {
48
- throw 'null';
49
- }
47
+ assert(p !== null, 'null');
50
48
  const x = p[0] & 0x3fn;
51
- if (x !== m) {
52
- throw [p[0], x, m];
53
- }
49
+ assertEq(x, m, [p[0], x, m]);
54
50
  ++m;
55
51
  }
56
52
  };
@@ -72,42 +68,25 @@ export const proof = {
72
68
  const test_curve = c => {
73
69
  const { mul, neg, pf: { abs }, y: yf, nf: { p: n }, g } = c;
74
70
  const point_check = (p) => {
75
- if (p === null) {
76
- throw 'p === null';
77
- }
71
+ assert(p !== null, 'p === null');
78
72
  const [x, y] = p;
79
- const ye = yf(x);
80
- if (ye === null) {
81
- throw 'ye === null';
82
- }
83
- if (abs(ye) !== abs(y)) {
84
- throw 'ye';
85
- }
73
+ const ye = assertNotNullish(yf(x), 'ye === null');
74
+ assertEq(abs(ye), abs(y), 'ye');
86
75
  };
87
76
  point_check(g);
88
77
  point_check(neg(g));
89
78
  const test_mul = (p) => {
90
- if (mul(0n)(p) !== null) {
91
- throw 'O';
92
- }
93
- if (mul(1n)(p) !== p) {
94
- throw 'p';
95
- }
96
- if (mul(n)(p) !== null) {
97
- throw 'n';
98
- }
79
+ assertEq(mul(0n)(p), null, 'O');
80
+ assertEq(mul(1n)(p), p, 'p');
81
+ assertEq(mul(n)(p), null, 'n');
99
82
  const pn = neg(p);
100
- if (!eq(mul(n - 1n)(p))(pn)) {
101
- throw 'n - 1';
102
- }
83
+ assert(eq(mul(n - 1n)(p))(pn), 'n - 1');
103
84
  const f = s => {
104
85
  const r = mul(s)(p);
105
86
  point_check(r);
106
87
  const rn = mul(s)(pn);
107
88
  point_check(rn);
108
- if (!eq(r)(neg(rn))) {
109
- throw 'r != -rn';
110
- }
89
+ assert(eq(r)(neg(rn)), 'r != -rn');
111
90
  };
112
91
  f(2n);
113
92
  f(3n);
@@ -136,7 +115,7 @@ export const proof = {
136
115
  // Cover null (point at infinity) branches in neg, add, and eq.
137
116
  nullPointOps: () => {
138
117
  const c = secp256k1;
139
- assert(c.neg(null) === null);
118
+ assertEq(c.neg(null), null);
140
119
  assert(eq(null)(null));
141
120
  assert(!eq(null)(c.g));
142
121
  assert(!eq(c.g)(null));
@@ -1,13 +1,12 @@
1
1
  import { utf8 } from '../../text/module.f.js';
2
2
  import { repeat, uint, vec } from '../../types/bit_vec/module.f.js';
3
3
  import { flip } from '../../types/function/module.f.js';
4
+ import { assertEq } from '../../asserts/module.f.js';
4
5
  import { map } from '../../types/list/module.f.js';
5
6
  import { base32, base64, computeSync, sha224, sha256, sha384, sha512, sha512x224, sha512x256, } from './module.f.js';
6
7
  const checkEmpty = ({ init, end, hashLength }) => (x) => {
7
8
  const result = end(init);
8
- if (result !== vec(hashLength)(x)) {
9
- throw [result, x];
10
- }
9
+ assertEq(result, vec(hashLength)(x), [result, x]);
11
10
  };
12
11
  // https://en.wikipedia.org/wiki/SHA-2#Test_vectors
13
12
  //
@@ -21,16 +20,12 @@ export const proof = {
21
20
  s256: () => {
22
21
  const result = fromV8(compress(sha256.init.hash)(e));
23
22
  const x = 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855n;
24
- if (result !== x) {
25
- throw [result.toString(16), x.toString(16)];
26
- }
23
+ assertEq(result, x, [result.toString(16), x.toString(16)]);
27
24
  },
28
25
  s224: () => {
29
26
  const result = fromV8(compress(sha224.init.hash)(e)) >> 32n;
30
27
  const x = 0xd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42fn;
31
- if (result !== x) {
32
- throw [result, x];
33
- }
28
+ assertEq(result, x, [result, x]);
34
29
  },
35
30
  };
36
31
  },
@@ -41,30 +36,22 @@ export const proof = {
41
36
  s512: () => {
42
37
  const result = fromV8(compress(sha512.init.hash)(e));
43
38
  const x = 0xcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3en;
44
- if (result !== x) {
45
- throw [result, x];
46
- }
39
+ assertEq(result, x, [result, x]);
47
40
  },
48
41
  s384: () => {
49
42
  const result = fromV8(compress(sha384.init.hash)(e)) >> 128n;
50
43
  const x = 0x38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95bn;
51
- if (result !== x) {
52
- throw [result, x];
53
- }
44
+ assertEq(result, x, [result, x]);
54
45
  },
55
46
  s512x256: () => {
56
47
  const result = fromV8(base64.compress(sha512x256.init.hash)(e)) >> 256n;
57
48
  const x = 0xc672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967an;
58
- if (result !== x) {
59
- throw [result, x];
60
- }
49
+ assertEq(result, x, [result, x]);
61
50
  },
62
51
  s512x224: () => {
63
52
  const result = fromV8(compress(sha512x224.init.hash)(e)) >> 288n;
64
53
  const x = 0x6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4n;
65
- if (result !== x) {
66
- throw [result, x];
67
- }
54
+ assertEq(result, x, [result, x]);
68
55
  },
69
56
  };
70
57
  }
@@ -83,36 +70,26 @@ export const proof = {
83
70
  {
84
71
  const s = utf8("The quick brown fox jumps over the lazy dog");
85
72
  const h = computeSync(sha224)([s]);
86
- if (uint(h) !== e) {
87
- throw h;
88
- }
73
+ assertEq(uint(h), e, h);
89
74
  }
90
75
  {
91
76
  const s = ['The', ' quick', ' brown', ' fox', ' jumps', ' over', ' the', ' lazy', ' dog'];
92
77
  const h = computeSync(sha224)(map(utf8)(s));
93
- if (uint(h) !== e) {
94
- throw h;
95
- }
78
+ assertEq(uint(h), e, h);
96
79
  }
97
80
  },
98
81
  () => {
99
82
  const s = utf8("The quick brown fox jumps over the lazy dog.");
100
83
  const h = computeSync(sha224)([s]);
101
- if (uint(h) !== 0x619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4cn) {
102
- throw h;
103
- }
84
+ assertEq(uint(h), 0x619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4cn, h);
104
85
  },
105
86
  () => {
106
87
  const s = utf8("hello world");
107
- if (uint(s) !== 0x68656c6c6f20776f726c64n) {
108
- throw s;
109
- }
88
+ assertEq(uint(s), 0x68656c6c6f20776f726c64n, s);
110
89
  let state = sha256.init;
111
90
  state = sha256.append(s)(state);
112
91
  const h = sha256.end(state);
113
- if (uint(h) !== 0xb94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9n) {
114
- throw h;
115
- }
92
+ assertEq(uint(h), 0xb94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9n, h);
116
93
  }
117
94
  ],
118
95
  fill: () => {
@@ -123,18 +100,14 @@ export const proof = {
123
100
  let state = sha256.init;
124
101
  state = sha256.append(r)(state);
125
102
  const h = uint(sha256.end(state));
126
- if (h >> 224n !== 0x8a83665fn) {
127
- throw h;
128
- }
103
+ assertEq(h >> 224n, 0x8a83665fn, h);
129
104
  },
130
105
  16: () => {
131
106
  const r = times(16n);
132
107
  let state = sha256.init;
133
108
  state = sha256.append(r)(state);
134
109
  const h = sha256.end(state);
135
- if (uint(h) !== 0x3138bb9bc78df27c473ecfd1410f7bd45ebac1f59cf3ff9cfe4db77aab7aedd3n) {
136
- throw h;
137
- }
110
+ assertEq(uint(h), 0x3138bb9bc78df27c473ecfd1410f7bd45ebac1f59cf3ff9cfe4db77aab7aedd3n, h);
138
111
  }
139
112
  };
140
113
  },
@@ -144,9 +117,7 @@ export const proof = {
144
117
  const msg = flip(repeat)(zero)(113n);
145
118
  const h = computeSync(sha384)([msg]);
146
119
  const x = 0x6be9af2cf3cd5dd12c8d9399ec2b34e66034fbd699d4e0221d39074172a380656089caafe8f39963f94cc7c0a07e3d21n;
147
- if (uint(h) !== x) {
148
- throw h;
149
- }
120
+ assertEq(uint(h), x, h);
150
121
  },
151
122
  },
152
123
  // Regression guard (sha2-append-quadratic): `append` used to be
@@ -155,7 +126,7 @@ export const proof = {
155
126
  // O(n²); now near-linear (~40-60ms on Node, well under `bun test`'s 5s
156
127
  // per-test limit on Bun). No timing assertion (duration varies by
157
128
  // engine/machine); relies on the test runner's own per-test timing to
158
- // catch a regression, same convention as `fs/basen/base64/proof.f.ts`
129
+ // catch a regression, same convention as `fjs/basen/base64/proof.f.ts`
159
130
  // `encodeLargeVecIsSlow`.
160
131
  appendLargeVecIsFast: () => {
161
132
  const big = repeat(100000n)(vec(8n)(0xffn));
@@ -163,8 +134,6 @@ export const proof = {
163
134
  state = sha256.append(big)(state);
164
135
  const h = sha256.end(state);
165
136
  const x = 0xbe87f6dbe42cdf682276fbecab3636fbfcaa008cf454d635dd77872b50d940aan;
166
- if (uint(h) !== x) {
167
- throw h;
168
- }
137
+ assertEq(uint(h), x, h);
169
138
  },
170
139
  };
@@ -1,8 +1,3 @@
1
- /**
2
- * Signing helpers built on secp256k1 and SHA-256 primitives.
3
- *
4
- * @module
5
- */
6
1
  import type { Array2 } from '../../types/array/module.f.ts';
7
2
  import { type Vec } from '../../types/bit_vec/module.f.ts';
8
3
  import type { Curve } from '../secp/module.f.ts';
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Signing helpers built on secp256k1 and SHA-256 primitives.
3
+ *
4
+ * @module
5
+ */
6
+ import { assertNotNullish } from '../../asserts/module.f.js';
1
7
  import { bitLength, divUp8, roundUp8 } from '../../types/bigint/module.f.js';
2
8
  import { empty, length, msb, repeat, unpack, vec, vec8 } from '../../types/bit_vec/module.f.js';
3
9
  import { hmac } from '../hmac/module.f.js';
@@ -139,13 +145,10 @@ export const sign = (c) => (hf) => (x) => (m) => {
139
145
  //
140
146
  // If r turns out to be zero, a new k should be selected and r
141
147
  // computed again (this is an utterly improbable occurrence).
142
- const rxy = c.mul(k)(g);
143
148
  // TODO: implement the loop. `computeK` should either
144
149
  // - accept a state (current `k`).
145
150
  // - accept a `is_valid` function.
146
- if (rxy === null) {
147
- throw 'rxy === null';
148
- }
151
+ const rxy = assertNotNullish(c.mul(k)(g), 'rxy === null');
149
152
  const [r] = rxy;
150
153
  // 4. The value s (modulo q) is computed:
151
154
  //
@@ -4,6 +4,7 @@ import { hmac } from "../hmac/module.f.js";
4
4
  import { secp192r1, secp256r1, secp384r1, secp521r1 } from "../secp/module.f.js";
5
5
  import { computeSync, sha224, sha256, sha384, sha512 } from "../sha2/module.f.js";
6
6
  import { all, concat, computeK, fromCurve, sign } from "./module.f.js";
7
+ import { assertEq } from '../../asserts/module.f.js';
7
8
  const sample = utf8("sample");
8
9
  const test = utf8("test");
9
10
  const x00 = vec8(0x00n);
@@ -15,172 +16,108 @@ const r32 = repeat(32n);
15
16
  const hmac256 = hmac(sha256);
16
17
  export const proof = {
17
18
  bits2int: () => {
18
- if (all(7n).bits2int(vec(5n)(20n)) !== 5n) {
19
- throw new Error("fail");
20
- }
21
- if (all(17n).bits2int(vec(3n)(5n)) !== 5n) {
22
- throw new Error("fail");
23
- }
19
+ assertEq(all(7n).bits2int(vec(5n)(20n)), 5n, new Error("fail"));
20
+ assertEq(all(17n).bits2int(vec(3n)(5n)), 5n, new Error("fail"));
24
21
  },
25
22
  int2octets: () => {
26
23
  // 3 bit prime
27
- if (all(5n).int2octets(5n) !== vec(8n)(5n)) {
28
- throw new Error("fail");
29
- }
24
+ assertEq(all(5n).int2octets(5n), vec(8n)(5n), new Error("fail"));
30
25
  // 5 bit prime
31
- if (all(17n).int2octets(20n) !== vec(8n)(20n)) {
32
- throw new Error("fail");
33
- }
26
+ assertEq(all(17n).int2octets(20n), vec(8n)(20n), new Error("fail"));
34
27
  // 15 bit prime
35
- if (all(16387n).int2octets(0x13n) !== vec(16n)(0x13n)) {
36
- throw new Error("fail");
37
- }
28
+ assertEq(all(16387n).int2octets(0x13n), vec(16n)(0x13n), new Error("fail"));
38
29
  },
39
30
  bit2octets: () => {
40
- if (all(11n).bits2octets(vec(4n)(13n)) !== vec(8n)(2n)) {
41
- throw new Error("fail");
42
- }
31
+ assertEq(all(11n).bits2octets(vec(4n)(13n)), vec(8n)(2n), new Error("fail"));
43
32
  },
44
33
  k: () => {
45
34
  //
46
35
  const q = 0x4000000000000000000020108a2e0cc0d99f8a5efn;
47
36
  const { qlen, int2octets, bits2octets, bits2int } = all(q);
48
- if (qlen !== 163n) {
49
- throw qlen;
50
- }
37
+ assertEq(qlen, 163n);
51
38
  const x = 0x09a4d6792295a7f730fc3f2b49cbc0f62e862272fn;
52
39
  const h1 = computeSync(sha256)([sample]);
53
- if (h1 !== v256(0xaf2bdbe1aa9b6ec1e2ade1d694f41fc71a831d0268e9891562113d8a62add1bfn)) {
54
- throw h1;
55
- }
40
+ assertEq(h1, v256(0xaf2bdbe1aa9b6ec1e2ade1d694f41fc71a831d0268e9891562113d8a62add1bfn));
56
41
  const xi2o = int2octets(x);
57
- if (xi2o !== v168(0x009a4d6792295a7f730fc3f2b49cbc0f62e862272fn)) {
58
- throw xi2o;
59
- }
42
+ assertEq(xi2o, v168(0x009a4d6792295a7f730fc3f2b49cbc0f62e862272fn));
60
43
  const h1b2o = bits2octets(h1);
61
- if (h1b2o !== v168(0x01795edf0d54db760f156d0dac04c0322b3a204224n)) {
62
- throw h1b2o;
63
- }
44
+ assertEq(h1b2o, v168(0x01795edf0d54db760f156d0dac04c0322b3a204224n));
64
45
  let v = r32(x01);
65
- if (v !== v256(0x0101010101010101010101010101010101010101010101010101010101010101n)) {
66
- throw v;
67
- }
46
+ assertEq(v, v256(0x0101010101010101010101010101010101010101010101010101010101010101n));
68
47
  let k = r32(x00);
69
- if (k !== v256(0x0000000000000000000000000000000000000000000000000000000000000000n)) {
70
- throw k;
71
- }
48
+ assertEq(k, v256(0x0000000000000000000000000000000000000000000000000000000000000000n));
72
49
  // d.
73
50
  // 256 + 8 + 168 + 168 = 600
74
51
  const vv = concat(v, x00, xi2o, h1b2o);
75
52
  const vvu = 0x010101010101010101010101010101010101010101010101010101010101010100009a4d6792295a7f730fc3f2b49cbc0f62e862272f01795edf0d54db760f156d0dac04c0322b3a204224n;
76
- if (vv !== v600(vvu)) {
77
- throw [vv.toString(16), vvu.toString(16)];
78
- }
53
+ assertEq(vv, v600(vvu), [vv.toString(16), vvu.toString(16)]);
79
54
  k = hmac256(k)(vv);
80
- if (k !== v256(0x09999a9bfef972d3346911883fad7951d23f2c8b47f420222d1171eeeeac5ab8n)) {
81
- throw k;
82
- }
55
+ assertEq(k, v256(0x09999a9bfef972d3346911883fad7951d23f2c8b47f420222d1171eeeeac5ab8n));
83
56
  // e.
84
57
  v = hmac256(k)(v);
85
- if (v !== v256(0xd5f4030f755ee86aa10bba8c09df114ff6b6111c238500d13c7343a8c01becf7n)) {
86
- throw v;
87
- }
58
+ assertEq(v, v256(0xd5f4030f755ee86aa10bba8c09df114ff6b6111c238500d13c7343a8c01becf7n));
88
59
  // f. K = HMAC_K(V || 0x01 || int2octets(x) || bits2octets(h1))
89
60
  k = hmac256(k)(concat(v, x01, xi2o, h1b2o));
90
- if (k !== v256(0x0cf2fe96d5619c9ef53cb7417d49d37ea68a4ffed0d7e623e38689289911bd57n)) {
91
- throw k;
92
- }
61
+ assertEq(k, v256(0x0cf2fe96d5619c9ef53cb7417d49d37ea68a4ffed0d7e623e38689289911bd57n));
93
62
  // g.
94
63
  v = hmac256(k)(v);
95
- if (v !== v256(0x783457c1cf3148a8f2a9ae73ed472fa98ed9cd925d8e964ce0764def3f842b9an)) {
96
- throw v;
97
- }
64
+ assertEq(v, v256(0x783457c1cf3148a8f2a9ae73ed472fa98ed9cd925d8e964ce0764def3f842b9an));
98
65
  // h.
99
66
  v = hmac256(k)(v);
100
67
  let t = msb.concat(empty)(v);
101
- if (t !== v256(0x9305a46de7ff8eb107194debd3fd48aa20d5e7656cbe0ea69d2a8d4e7c67314an)) {
102
- throw t;
103
- }
68
+ assertEq(t, v256(0x9305a46de7ff8eb107194debd3fd48aa20d5e7656cbe0ea69d2a8d4e7c67314an));
104
69
  // 3.
105
70
  let kk = bits2int(t);
106
- if (kk !== 0x4982d236f3ffc758838ca6f5e9fea455106af3b2bn) {
107
- throw kk;
108
- }
71
+ assertEq(kk, 0x4982d236f3ffc758838ca6f5e9fea455106af3b2bn);
109
72
  // 3. second try
110
73
  k = hmac256(k)(concat(v, x00));
111
- if (k !== v256(0x75cb5c05b2a78c3d81df12d74d7be0a0e94ab19815781d4d8e2902a79d0a6699n)) {
112
- throw k;
113
- }
74
+ assertEq(k, v256(0x75cb5c05b2a78c3d81df12d74d7be0a0e94ab19815781d4d8e2902a79d0a6699n));
114
75
  v = hmac256(k)(v);
115
- if (v !== v256(0xdcb9ca126107a9c27ce77ba58ea871c8c912d835eaddc305f2445d88f66c4c43n)) {
116
- throw v;
117
- }
76
+ assertEq(v, v256(0xdcb9ca126107a9c27ce77ba58ea871c8c912d835eaddc305f2445d88f66c4c43n));
118
77
  v = hmac256(k)(v);
119
78
  t = msb.concat(empty)(v);
120
- if (t !== v256(0xc70c78608a3b5be9289be90ef6e81a9e2c1516d5751d2f75f50033e45f73bdebn)) {
121
- throw t;
122
- }
79
+ assertEq(t, v256(0xc70c78608a3b5be9289be90ef6e81a9e2c1516d5751d2f75f50033e45f73bdebn));
123
80
  kk = bits2int(t);
124
- if (kk !== 0x63863c30451dadf4944df4877b740d4f160a8b6abn) {
125
- throw kk;
126
- }
81
+ assertEq(kk, 0x63863c30451dadf4944df4877b740d4f160a8b6abn);
127
82
  // 3. third try
128
83
  k = hmac256(k)(concat(v, x00));
129
- if (k !== v256(0x0a5a64b99c059520103686cb6f36bcfca788eb3bcf69ba66a5bb080b0593ba53n)) {
130
- throw k;
131
- }
84
+ assertEq(k, v256(0x0a5a64b99c059520103686cb6f36bcfca788eb3bcf69ba66a5bb080b0593ba53n));
132
85
  v = hmac256(k)(v);
133
- if (v !== v256(0x0b3b196811b19f6c6f729c43f35bcf0dfd725f17ca3430e8721453e55550a18fn)) {
134
- throw v;
135
- }
86
+ assertEq(v, v256(0x0b3b196811b19f6c6f729c43f35bcf0dfd725f17ca3430e8721453e55550a18fn));
136
87
  v = hmac256(k)(v);
137
88
  t = msb.concat(empty)(v);
138
- if (t !== v256(0x475e80e992140567fcc3a50dab90fe84bcd7bb03638e9c4656a06f37f6508a7cn)) {
139
- throw t;
140
- }
89
+ assertEq(t, v256(0x475e80e992140567fcc3a50dab90fe84bcd7bb03638e9c4656a06f37f6508a7cn));
141
90
  kk = bits2int(t);
142
- if (kk !== 0x23af4074c90a02b3fe61d286d5c87f425e6bdd81bn) {
143
- throw kk;
144
- }
91
+ assertEq(kk, 0x23af4074c90a02b3fe61d286d5c87f425e6bdd81bn);
145
92
  },
146
93
  computeK: () => {
147
94
  const q = 0x4000000000000000000020108a2e0cc0d99f8a5efn;
148
95
  const a = all(q);
149
- if (a.qlen !== 163n) {
150
- throw a.qlen;
151
- }
96
+ assertEq(a.qlen, 163n);
152
97
  const x = 0x09a4d6792295a7f730fc3f2b49cbc0f62e862272fn;
153
98
  const k = computeK(a)(sha256)(x)(sample);
154
- if (k !== 0x23af4074c90a02b3fe61d286d5c87f425e6bdd81bn) {
155
- throw k;
156
- }
99
+ assertEq(k, 0x23af4074c90a02b3fe61d286d5c87f425e6bdd81bn);
157
100
  },
158
101
  investigate: () => {
159
102
  const q = 0xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1fn;
160
103
  const x = 0x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbcn;
161
104
  const a = all(q);
162
105
  const k = computeK(a)(sha384)(x)(sample);
163
- if (k !== 0xc345d5ab3da0a5bcb7ec8f8fb7a7e96069e03b206371ef7d83e39068ec564920n) {
164
- throw k;
165
- }
106
+ assertEq(k, 0xc345d5ab3da0a5bcb7ec8f8fb7a7e96069e03b206371ef7d83e39068ec564920n);
166
107
  },
167
108
  kk: () => {
168
109
  const a = fromCurve(secp192r1);
169
110
  const x = 0x6fab034934e4c0fc9ae67f5b5659a9d7d1fefd187ee09fd4n;
170
111
  const m = utf8("sample");
171
112
  const kk = computeK(a)(sha224)(x)(m);
172
- if (kk !== 0x4381526b3fc1e7128f202e194505592f01d5ff4c5af015d8n) {
173
- throw kk;
174
- }
113
+ assertEq(kk, 0x4381526b3fc1e7128f202e194505592f01d5ff4c5af015d8n);
175
114
  },
176
115
  a2: () => {
177
116
  const check = ({ q, x, msg0, msg1 }) => {
178
117
  const a = all(q);
179
118
  const check = (sha, expected, m) => {
180
119
  const k = computeK(a)(sha)(x)(m);
181
- if (k !== expected) {
182
- throw [k.toString(16), expected.toString(16)];
183
- }
120
+ assertEq(k, expected, [k.toString(16), expected.toString(16)]);
184
121
  };
185
122
  const check4 = (m, h) => {
186
123
  check(sha224, h[0], m);
@@ -410,16 +347,10 @@ export const proof = {
410
347
  const a = all(q.nf.p);
411
348
  const check = (sha, { k, r, s }, m) => {
412
349
  const k0 = computeK(a)(sha)(x)(m);
413
- if (k0 !== k) {
414
- throw [k0.toString(16), k.toString(16)];
415
- }
350
+ assertEq(k0, k, [k0.toString(16), k.toString(16)]);
416
351
  const [r0, s0] = sign(q)(sha)(x)(m);
417
- if (r0 !== r) {
418
- throw [r0, r];
419
- }
420
- if (s0 !== s) {
421
- throw [s0, s];
422
- }
352
+ assertEq(r0, r, [r0, r]);
353
+ assertEq(s0, s, [s0, s]);
423
354
  };
424
355
  const check4 = (m, h) => {
425
356
  check(sha224, h[0], m);