visaljs 0.0.0-stage → 0.0.2

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 (520) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -2
  3. package/cli.js +8084 -0
  4. package/node/include/js_node.h +46 -0
  5. package/node/prelude/async_hooks.js +88 -0
  6. package/node/prelude/buffer.js +31 -0
  7. package/node/prelude/crypto.js +114 -0
  8. package/node/prelude/events.js +227 -0
  9. package/node/prelude/fs.js +79 -0
  10. package/node/prelude/http.js +536 -0
  11. package/node/prelude/http2.js +30 -0
  12. package/node/prelude/internal/crypto/asym.js +333 -0
  13. package/node/prelude/internal/crypto/cipher.js +205 -0
  14. package/node/prelude/internal/crypto/hash.js +137 -0
  15. package/node/prelude/internal/crypto/kdf.js +182 -0
  16. package/node/prelude/internal/crypto/keys.js +603 -0
  17. package/node/prelude/internal/crypto/random.js +118 -0
  18. package/node/prelude/internal/crypto/util.js +76 -0
  19. package/node/prelude/internal/errors.js +88 -0
  20. package/node/prelude/internal/querystring.js +105 -0
  21. package/node/prelude/module.js +53 -0
  22. package/node/prelude/net.js +51 -0
  23. package/node/prelude/os.js +129 -0
  24. package/node/prelude/path.js +257 -0
  25. package/node/prelude/process.js +21 -0
  26. package/node/prelude/querystring.js +469 -0
  27. package/node/prelude/stream.js +1327 -0
  28. package/node/prelude/stream_promises.js +7 -0
  29. package/node/prelude/stream_web.js +6 -0
  30. package/node/prelude/string_decoder.js +236 -0
  31. package/node/prelude/tty.js +18 -0
  32. package/node/prelude/url.js +1156 -0
  33. package/node/prelude/util.js +64 -0
  34. package/node/prelude/zlib.js +81 -0
  35. package/node/src/host_fs.c +126 -0
  36. package/node/src/host_http.c +486 -0
  37. package/node/src/host_os.c +505 -0
  38. package/node/src/host_sys.c +78 -0
  39. package/node/third_party/libuv/LICENSE +19 -0
  40. package/node/third_party/libuv/include/uv/aix.h +32 -0
  41. package/node/third_party/libuv/include/uv/bsd.h +34 -0
  42. package/node/third_party/libuv/include/uv/darwin.h +61 -0
  43. package/node/third_party/libuv/include/uv/errno.h +483 -0
  44. package/node/third_party/libuv/include/uv/linux.h +34 -0
  45. package/node/third_party/libuv/include/uv/os390.h +33 -0
  46. package/node/third_party/libuv/include/uv/posix.h +31 -0
  47. package/node/third_party/libuv/include/uv/sunos.h +44 -0
  48. package/node/third_party/libuv/include/uv/threadpool.h +37 -0
  49. package/node/third_party/libuv/include/uv/tree.h +521 -0
  50. package/node/third_party/libuv/include/uv/unix.h +512 -0
  51. package/node/third_party/libuv/include/uv/version.h +43 -0
  52. package/node/third_party/libuv/include/uv/win.h +698 -0
  53. package/node/third_party/libuv/include/uv.h +1990 -0
  54. package/node/third_party/libuv/src/fs-poll.c +290 -0
  55. package/node/third_party/libuv/src/heap-inl.h +245 -0
  56. package/node/third_party/libuv/src/idna.c +560 -0
  57. package/node/third_party/libuv/src/idna.h +31 -0
  58. package/node/third_party/libuv/src/inet.c +298 -0
  59. package/node/third_party/libuv/src/queue.h +90 -0
  60. package/node/third_party/libuv/src/random.c +123 -0
  61. package/node/third_party/libuv/src/strscpy.c +38 -0
  62. package/node/third_party/libuv/src/strscpy.h +39 -0
  63. package/node/third_party/libuv/src/strtok.c +52 -0
  64. package/node/third_party/libuv/src/strtok.h +27 -0
  65. package/node/third_party/libuv/src/thread-common.c +175 -0
  66. package/node/third_party/libuv/src/threadpool.c +419 -0
  67. package/node/third_party/libuv/src/timer.c +200 -0
  68. package/node/third_party/libuv/src/unix/async.c +418 -0
  69. package/node/third_party/libuv/src/unix/bsd-ifaddrs.c +164 -0
  70. package/node/third_party/libuv/src/unix/core.c +2104 -0
  71. package/node/third_party/libuv/src/unix/darwin-proctitle.c +176 -0
  72. package/node/third_party/libuv/src/unix/darwin-stub.h +97 -0
  73. package/node/third_party/libuv/src/unix/darwin-syscalls.h +17 -0
  74. package/node/third_party/libuv/src/unix/darwin.c +237 -0
  75. package/node/third_party/libuv/src/unix/dl.c +80 -0
  76. package/node/third_party/libuv/src/unix/fs.c +2303 -0
  77. package/node/third_party/libuv/src/unix/fsevents.c +906 -0
  78. package/node/third_party/libuv/src/unix/getaddrinfo.c +252 -0
  79. package/node/third_party/libuv/src/unix/getnameinfo.c +121 -0
  80. package/node/third_party/libuv/src/unix/internal.h +530 -0
  81. package/node/third_party/libuv/src/unix/kqueue.c +667 -0
  82. package/node/third_party/libuv/src/unix/linux.c +2761 -0
  83. package/node/third_party/libuv/src/unix/loop-watcher.c +68 -0
  84. package/node/third_party/libuv/src/unix/loop.c +240 -0
  85. package/node/third_party/libuv/src/unix/pipe.c +555 -0
  86. package/node/third_party/libuv/src/unix/poll.c +159 -0
  87. package/node/third_party/libuv/src/unix/process.c +1123 -0
  88. package/node/third_party/libuv/src/unix/procfs-exepath.c +45 -0
  89. package/node/third_party/libuv/src/unix/proctitle.c +157 -0
  90. package/node/third_party/libuv/src/unix/random-devurandom.c +93 -0
  91. package/node/third_party/libuv/src/unix/random-getentropy.c +57 -0
  92. package/node/third_party/libuv/src/unix/random-getrandom.c +86 -0
  93. package/node/third_party/libuv/src/unix/random-sysctl-linux.c +99 -0
  94. package/node/third_party/libuv/src/unix/signal.c +581 -0
  95. package/node/third_party/libuv/src/unix/stream.c +1567 -0
  96. package/node/third_party/libuv/src/unix/tcp.c +673 -0
  97. package/node/third_party/libuv/src/unix/thread.c +975 -0
  98. package/node/third_party/libuv/src/unix/tty.c +510 -0
  99. package/node/third_party/libuv/src/unix/udp.c +1434 -0
  100. package/node/third_party/libuv/src/uv-common.c +1051 -0
  101. package/node/third_party/libuv/src/uv-common.h +474 -0
  102. package/node/third_party/libuv/src/uv-data-getter-setters.c +119 -0
  103. package/node/third_party/libuv/src/version.c +45 -0
  104. package/node/third_party/llhttp/LICENSE +22 -0
  105. package/node/third_party/llhttp/api.c +509 -0
  106. package/node/third_party/llhttp/http.c +170 -0
  107. package/node/third_party/llhttp/llhttp.c +10099 -0
  108. package/node/third_party/llhttp/llhttp.h +907 -0
  109. package/package.json +25 -4
  110. package/runtime/include/js_atoms.gen.h +68 -0
  111. package/runtime/include/js_atoms.h +54 -0
  112. package/runtime/include/js_bigint.h +93 -0
  113. package/runtime/include/js_buffer.h +79 -0
  114. package/runtime/include/js_builtins.h +168 -0
  115. package/runtime/include/js_console.h +58 -0
  116. package/runtime/include/js_convert.h +22 -0
  117. package/runtime/include/js_core.def +188 -0
  118. package/runtime/include/js_crypto.h +58 -0
  119. package/runtime/include/js_error.h +37 -0
  120. package/runtime/include/js_exception.h +65 -0
  121. package/runtime/include/js_function.h +167 -0
  122. package/runtime/include/js_gc.h +195 -0
  123. package/runtime/include/js_generator.h +96 -0
  124. package/runtime/include/js_host.h +19 -0
  125. package/runtime/include/js_jobs.h +84 -0
  126. package/runtime/include/js_module.h +16 -0
  127. package/runtime/include/js_object.h +384 -0
  128. package/runtime/include/js_ops.h +111 -0
  129. package/runtime/include/js_promise.h +45 -0
  130. package/runtime/include/js_regexp.h +25 -0
  131. package/runtime/include/js_runtime.h +30 -0
  132. package/runtime/include/js_symbol.h +62 -0
  133. package/runtime/include/js_web.h +110 -0
  134. package/runtime/include/jscell.h +48 -0
  135. package/runtime/include/jscontext.h +240 -0
  136. package/runtime/include/jsnum.h +42 -0
  137. package/runtime/include/jsstring.h +161 -0
  138. package/runtime/include/jsvalue.h +142 -0
  139. package/runtime/src/arguments.c +115 -0
  140. package/runtime/src/array.c +1145 -0
  141. package/runtime/src/arraybuffer.c +608 -0
  142. package/runtime/src/async_iter.c +479 -0
  143. package/runtime/src/atoms.c +157 -0
  144. package/runtime/src/base64.c +107 -0
  145. package/runtime/src/bigint.c +1189 -0
  146. package/runtime/src/blob.c +371 -0
  147. package/runtime/src/buffer.c +1357 -0
  148. package/runtime/src/builtin_table.c +100 -0
  149. package/runtime/src/builtins.c +987 -0
  150. package/runtime/src/builtins_util.h +53 -0
  151. package/runtime/src/collections.c +912 -0
  152. package/runtime/src/components.c +28 -0
  153. package/runtime/src/console.c +637 -0
  154. package/runtime/src/convert.c +82 -0
  155. package/runtime/src/core_all.c +21 -0
  156. package/runtime/src/crypto.c +116 -0
  157. package/runtime/src/crypto_asym.c +644 -0
  158. package/runtime/src/crypto_cipher.c +671 -0
  159. package/runtime/src/crypto_hash.c +260 -0
  160. package/runtime/src/crypto_host.c +414 -0
  161. package/runtime/src/crypto_internal.h +304 -0
  162. package/runtime/src/crypto_kdf.c +143 -0
  163. package/runtime/src/crypto_key.c +171 -0
  164. package/runtime/src/crypto_pkey.c +794 -0
  165. package/runtime/src/crypto_subtle.c +1675 -0
  166. package/runtime/src/date.c +940 -0
  167. package/runtime/src/domexception.c +169 -0
  168. package/runtime/src/elements.c +312 -0
  169. package/runtime/src/elements.h +45 -0
  170. package/runtime/src/encoding.c +485 -0
  171. package/runtime/src/error.c +297 -0
  172. package/runtime/src/events.c +793 -0
  173. package/runtime/src/exception.c +56 -0
  174. package/runtime/src/fetch.c +772 -0
  175. package/runtime/src/function.c +530 -0
  176. package/runtime/src/gc.c +803 -0
  177. package/runtime/src/generator.c +218 -0
  178. package/runtime/src/global.c +119 -0
  179. package/runtime/src/headers.c +557 -0
  180. package/runtime/src/inspect.c +1792 -0
  181. package/runtime/src/internal.h +80 -0
  182. package/runtime/src/iterate.c +94 -0
  183. package/runtime/src/iterator.c +409 -0
  184. package/runtime/src/jobs.c +337 -0
  185. package/runtime/src/jsnum.c +353 -0
  186. package/runtime/src/json.c +1028 -0
  187. package/runtime/src/math.c +243 -0
  188. package/runtime/src/module.c +336 -0
  189. package/runtime/src/number.c +176 -0
  190. package/runtime/src/object.c +1265 -0
  191. package/runtime/src/ops.c +322 -0
  192. package/runtime/src/os.c +196 -0
  193. package/runtime/src/os.h +29 -0
  194. package/runtime/src/process.c +432 -0
  195. package/runtime/src/promise.c +721 -0
  196. package/runtime/src/proxy.c +570 -0
  197. package/runtime/src/reflect.c +194 -0
  198. package/runtime/src/regexp.c +1141 -0
  199. package/runtime/src/regexp_anchor.h +34 -0
  200. package/runtime/src/regexp_message.h +32 -0
  201. package/runtime/src/shape.c +294 -0
  202. package/runtime/src/shape.h +46 -0
  203. package/runtime/src/streams.c +1046 -0
  204. package/runtime/src/streams.h +47 -0
  205. package/runtime/src/string.c +364 -0
  206. package/runtime/src/string_builtins.c +837 -0
  207. package/runtime/src/symbol.c +143 -0
  208. package/runtime/src/test_host.c +59 -0
  209. package/runtime/src/typedarray.c +1330 -0
  210. package/runtime/src/tznames.gen.h +712 -0
  211. package/runtime/src/uri.c +169 -0
  212. package/runtime/src/url.c +2116 -0
  213. package/runtime/src/weak.c +486 -0
  214. package/runtime/src/web.c +214 -0
  215. package/runtime/src/wrapper.c +59 -0
  216. package/runtime/src/writable.c +1486 -0
  217. package/runtime/third_party/ada-idna/LICENSE-MIT +18 -0
  218. package/runtime/third_party/ada-idna/README.md +27 -0
  219. package/runtime/third_party/ada-idna/convert.mjs +83 -0
  220. package/runtime/third_party/ada-idna/idna.c +416 -0
  221. package/runtime/third_party/ada-idna/idna.h +15 -0
  222. package/runtime/third_party/ada-idna/idna_tables.h +2657 -0
  223. package/runtime/third_party/bearssl/LICENSE.txt +21 -0
  224. package/runtime/third_party/bearssl/README.txt +136 -0
  225. package/runtime/third_party/bearssl/VERSION +1 -0
  226. package/runtime/third_party/bearssl/inc/bearssl.h +183 -0
  227. package/runtime/third_party/bearssl/inc/bearssl_aead.h +1059 -0
  228. package/runtime/third_party/bearssl/inc/bearssl_block.h +2618 -0
  229. package/runtime/third_party/bearssl/inc/bearssl_ec.h +967 -0
  230. package/runtime/third_party/bearssl/inc/bearssl_hash.h +1346 -0
  231. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +241 -0
  232. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +284 -0
  233. package/runtime/third_party/bearssl/inc/bearssl_pem.h +294 -0
  234. package/runtime/third_party/bearssl/inc/bearssl_prf.h +150 -0
  235. package/runtime/third_party/bearssl/inc/bearssl_rand.h +397 -0
  236. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +1655 -0
  237. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +4296 -0
  238. package/runtime/third_party/bearssl/inc/bearssl_x509.h +1474 -0
  239. package/runtime/third_party/bearssl/src/aead/ccm.c +346 -0
  240. package/runtime/third_party/bearssl/src/aead/eax.c +525 -0
  241. package/runtime/third_party/bearssl/src/aead/gcm.c +318 -0
  242. package/runtime/third_party/bearssl/src/codec/ccopy.c +44 -0
  243. package/runtime/third_party/bearssl/src/codec/dec16be.c +38 -0
  244. package/runtime/third_party/bearssl/src/codec/dec16le.c +38 -0
  245. package/runtime/third_party/bearssl/src/codec/dec32be.c +38 -0
  246. package/runtime/third_party/bearssl/src/codec/dec32le.c +38 -0
  247. package/runtime/third_party/bearssl/src/codec/dec64be.c +38 -0
  248. package/runtime/third_party/bearssl/src/codec/dec64le.c +38 -0
  249. package/runtime/third_party/bearssl/src/codec/enc16be.c +38 -0
  250. package/runtime/third_party/bearssl/src/codec/enc16le.c +38 -0
  251. package/runtime/third_party/bearssl/src/codec/enc32be.c +38 -0
  252. package/runtime/third_party/bearssl/src/codec/enc32le.c +38 -0
  253. package/runtime/third_party/bearssl/src/codec/enc64be.c +38 -0
  254. package/runtime/third_party/bearssl/src/codec/enc64le.c +38 -0
  255. package/runtime/third_party/bearssl/src/codec/pemdec.c +526 -0
  256. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +314 -0
  257. package/runtime/third_party/bearssl/src/codec/pemenc.c +173 -0
  258. package/runtime/third_party/bearssl/src/config.h +247 -0
  259. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +121 -0
  260. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +171 -0
  261. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +398 -0
  262. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +390 -0
  263. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +1478 -0
  264. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +800 -0
  265. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +605 -0
  266. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +831 -0
  267. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +46 -0
  268. package/runtime/third_party/bearssl/src/ec/ec_default.c +36 -0
  269. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +86 -0
  270. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +2124 -0
  271. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +1469 -0
  272. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +1765 -0
  273. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +1781 -0
  274. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +824 -0
  275. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +826 -0
  276. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +85 -0
  277. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +51 -0
  278. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +57 -0
  279. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +64 -0
  280. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +134 -0
  281. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +36 -0
  282. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +36 -0
  283. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +36 -0
  284. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +36 -0
  285. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +47 -0
  286. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +45 -0
  287. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +174 -0
  288. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +48 -0
  289. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +166 -0
  290. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +47 -0
  291. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +45 -0
  292. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +173 -0
  293. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +48 -0
  294. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +165 -0
  295. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +121 -0
  296. package/runtime/third_party/bearssl/src/hash/dig_oid.c +84 -0
  297. package/runtime/third_party/bearssl/src/hash/dig_size.c +50 -0
  298. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +345 -0
  299. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +251 -0
  300. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +154 -0
  301. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +389 -0
  302. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +411 -0
  303. package/runtime/third_party/bearssl/src/hash/md5.c +208 -0
  304. package/runtime/third_party/bearssl/src/hash/md5sha1.c +141 -0
  305. package/runtime/third_party/bearssl/src/hash/mgf1.c +56 -0
  306. package/runtime/third_party/bearssl/src/hash/multihash.c +166 -0
  307. package/runtime/third_party/bearssl/src/hash/sha1.c +191 -0
  308. package/runtime/third_party/bearssl/src/hash/sha2big.c +285 -0
  309. package/runtime/third_party/bearssl/src/hash/sha2small.c +341 -0
  310. package/runtime/third_party/bearssl/src/inner.h +2577 -0
  311. package/runtime/third_party/bearssl/src/int/i15_add.c +46 -0
  312. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +44 -0
  313. package/runtime/third_party/bearssl/src/int/i15_decmod.c +124 -0
  314. package/runtime/third_party/bearssl/src/int/i15_decode.c +56 -0
  315. package/runtime/third_party/bearssl/src/int/i15_decred.c +100 -0
  316. package/runtime/third_party/bearssl/src/int/i15_encode.c +56 -0
  317. package/runtime/third_party/bearssl/src/int/i15_fmont.c +59 -0
  318. package/runtime/third_party/bearssl/src/int/i15_iszero.c +39 -0
  319. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +465 -0
  320. package/runtime/third_party/bearssl/src/int/i15_modpow.c +50 -0
  321. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +160 -0
  322. package/runtime/third_party/bearssl/src/int/i15_montmul.c +184 -0
  323. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +61 -0
  324. package/runtime/third_party/bearssl/src/int/i15_muladd.c +173 -0
  325. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +38 -0
  326. package/runtime/third_party/bearssl/src/int/i15_reduce.c +66 -0
  327. package/runtime/third_party/bearssl/src/int/i15_rshift.c +47 -0
  328. package/runtime/third_party/bearssl/src/int/i15_sub.c +46 -0
  329. package/runtime/third_party/bearssl/src/int/i15_tmont.c +36 -0
  330. package/runtime/third_party/bearssl/src/int/i31_add.c +46 -0
  331. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +44 -0
  332. package/runtime/third_party/bearssl/src/int/i31_decmod.c +124 -0
  333. package/runtime/third_party/bearssl/src/int/i31_decode.c +57 -0
  334. package/runtime/third_party/bearssl/src/int/i31_decred.c +103 -0
  335. package/runtime/third_party/bearssl/src/int/i31_encode.c +79 -0
  336. package/runtime/third_party/bearssl/src/int/i31_fmont.c +60 -0
  337. package/runtime/third_party/bearssl/src/int/i31_iszero.c +39 -0
  338. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +488 -0
  339. package/runtime/third_party/bearssl/src/int/i31_modpow.c +65 -0
  340. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +160 -0
  341. package/runtime/third_party/bearssl/src/int/i31_montmul.c +127 -0
  342. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +74 -0
  343. package/runtime/third_party/bearssl/src/int/i31_muladd.c +157 -0
  344. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +39 -0
  345. package/runtime/third_party/bearssl/src/int/i31_reduce.c +66 -0
  346. package/runtime/third_party/bearssl/src/int/i31_rshift.c +47 -0
  347. package/runtime/third_party/bearssl/src/int/i31_sub.c +46 -0
  348. package/runtime/third_party/bearssl/src/int/i31_tmont.c +36 -0
  349. package/runtime/third_party/bearssl/src/int/i32_add.c +51 -0
  350. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +44 -0
  351. package/runtime/third_party/bearssl/src/int/i32_decmod.c +77 -0
  352. package/runtime/third_party/bearssl/src/int/i32_decode.c +63 -0
  353. package/runtime/third_party/bearssl/src/int/i32_decred.c +107 -0
  354. package/runtime/third_party/bearssl/src/int/i32_div32.c +56 -0
  355. package/runtime/third_party/bearssl/src/int/i32_encode.c +72 -0
  356. package/runtime/third_party/bearssl/src/int/i32_fmont.c +60 -0
  357. package/runtime/third_party/bearssl/src/int/i32_iszero.c +39 -0
  358. package/runtime/third_party/bearssl/src/int/i32_modpow.c +65 -0
  359. package/runtime/third_party/bearssl/src/int/i32_montmul.c +69 -0
  360. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +56 -0
  361. package/runtime/third_party/bearssl/src/int/i32_muladd.c +138 -0
  362. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +39 -0
  363. package/runtime/third_party/bearssl/src/int/i32_reduce.c +66 -0
  364. package/runtime/third_party/bearssl/src/int/i32_sub.c +51 -0
  365. package/runtime/third_party/bearssl/src/int/i32_tmont.c +36 -0
  366. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +493 -0
  367. package/runtime/third_party/bearssl/src/kdf/hkdf.c +107 -0
  368. package/runtime/third_party/bearssl/src/kdf/shake.c +590 -0
  369. package/runtime/third_party/bearssl/src/mac/hmac.c +122 -0
  370. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +193 -0
  371. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +206 -0
  372. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +157 -0
  373. package/runtime/third_party/bearssl/src/rand/sysrng.c +252 -0
  374. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +38 -0
  375. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +36 -0
  376. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +38 -0
  377. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +38 -0
  378. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +38 -0
  379. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +38 -0
  380. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +38 -0
  381. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +36 -0
  382. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +38 -0
  383. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +38 -0
  384. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +38 -0
  385. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +36 -0
  386. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +583 -0
  387. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +99 -0
  388. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +41 -0
  389. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +44 -0
  390. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +37 -0
  391. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +43 -0
  392. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +209 -0
  393. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +320 -0
  394. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +40 -0
  395. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +44 -0
  396. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +113 -0
  397. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +152 -0
  398. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +37 -0
  399. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +608 -0
  400. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +99 -0
  401. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +41 -0
  402. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +44 -0
  403. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +37 -0
  404. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +43 -0
  405. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +203 -0
  406. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +318 -0
  407. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +40 -0
  408. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +44 -0
  409. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +106 -0
  410. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +152 -0
  411. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +41 -0
  412. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +44 -0
  413. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +37 -0
  414. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +43 -0
  415. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +160 -0
  416. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +40 -0
  417. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +44 -0
  418. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +77 -0
  419. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +57 -0
  420. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +61 -0
  421. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +64 -0
  422. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +57 -0
  423. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +63 -0
  424. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +223 -0
  425. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +60 -0
  426. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +64 -0
  427. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +125 -0
  428. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +112 -0
  429. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +145 -0
  430. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +100 -0
  431. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +121 -0
  432. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +106 -0
  433. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +121 -0
  434. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +52 -0
  435. package/runtime/third_party/bearssl/src/settings.c +306 -0
  436. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +69 -0
  437. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +67 -0
  438. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +84 -0
  439. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +142 -0
  440. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +254 -0
  441. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +157 -0
  442. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +112 -0
  443. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +328 -0
  444. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +398 -0
  445. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +104 -0
  446. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +81 -0
  447. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +114 -0
  448. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +433 -0
  449. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +159 -0
  450. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +115 -0
  451. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +111 -0
  452. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +91 -0
  453. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +116 -0
  454. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +422 -0
  455. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +170 -0
  456. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +112 -0
  457. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +445 -0
  458. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +670 -0
  459. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +417 -0
  460. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +717 -0
  461. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +946 -0
  462. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +69 -0
  463. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +67 -0
  464. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +84 -0
  465. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +142 -0
  466. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +176 -0
  467. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +129 -0
  468. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +240 -0
  469. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +223 -0
  470. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +122 -0
  471. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +211 -0
  472. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +596 -0
  473. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +106 -0
  474. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +237 -0
  475. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +411 -0
  476. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +87 -0
  477. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +69 -0
  478. package/runtime/third_party/bearssl/src/symcipher/des_support.c +166 -0
  479. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +310 -0
  480. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +85 -0
  481. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +67 -0
  482. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +260 -0
  483. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +297 -0
  484. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +475 -0
  485. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +221 -0
  486. package/runtime/third_party/bearssl/src/x509/asn1.t0 +757 -0
  487. package/runtime/third_party/bearssl/src/x509/asn1enc.c +93 -0
  488. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +110 -0
  489. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +161 -0
  490. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +97 -0
  491. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +96 -0
  492. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +653 -0
  493. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +376 -0
  494. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +776 -0
  495. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +324 -0
  496. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +105 -0
  497. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +1722 -0
  498. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +1526 -0
  499. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +59 -0
  500. package/runtime/third_party/quickjs-dtoa/LICENSE +22 -0
  501. package/runtime/third_party/quickjs-dtoa/README.md +23 -0
  502. package/runtime/third_party/quickjs-dtoa/dtoa.c +1640 -0
  503. package/runtime/third_party/quickjs-dtoa/dtoa.h +83 -0
  504. package/runtime/third_party/quickjs-dtoa/dtoa_compat.h +89 -0
  505. package/runtime/third_party/quickjs-regexp/LICENSE +22 -0
  506. package/runtime/third_party/quickjs-regexp/README.md +22 -0
  507. package/runtime/third_party/quickjs-regexp/cutils.c +641 -0
  508. package/runtime/third_party/quickjs-regexp/cutils.h +457 -0
  509. package/runtime/third_party/quickjs-regexp/libregexp-opcode.h +73 -0
  510. package/runtime/third_party/quickjs-regexp/libregexp.c +3448 -0
  511. package/runtime/third_party/quickjs-regexp/libregexp.h +65 -0
  512. package/runtime/third_party/quickjs-regexp/libunicode-table.h +5206 -0
  513. package/runtime/third_party/quickjs-regexp/libunicode.c +2124 -0
  514. package/runtime/third_party/quickjs-regexp/libunicode.h +196 -0
  515. package/runtime/third_party/v8-ieee754/LICENSE +61 -0
  516. package/runtime/third_party/v8-ieee754/README.md +22 -0
  517. package/runtime/third_party/v8-ieee754/convert.py +84 -0
  518. package/runtime/third_party/v8-ieee754/ieee754.c +3030 -0
  519. package/runtime/third_party/v8-ieee754/ieee754.h +27 -0
  520. package/runtime/tools/regexp_compile.c +90 -0
@@ -0,0 +1,41 @@
1
+ /*
2
+ * Copyright (c) 2018 Thomas Pornin <pornin@bolet.org>
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining
5
+ * a copy of this software and associated documentation files (the
6
+ * "Software"), to deal in the Software without restriction, including
7
+ * without limitation the rights to use, copy, modify, merge, publish,
8
+ * distribute, sublicense, and/or sell copies of the Software, and to
9
+ * permit persons to whom the Software is furnished to do so, subject to
10
+ * the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be
13
+ * included in all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ #include "inner.h"
26
+
27
+ /* see bearssl_rsa.h */
28
+ uint32_t
29
+ br_rsa_i15_oaep_decrypt(const br_hash_class *dig,
30
+ const void *label, size_t label_len,
31
+ const br_rsa_private_key *sk, void *data, size_t *len)
32
+ {
33
+ uint32_t r;
34
+
35
+ if (*len != ((sk->n_bitlen + 7) >> 3)) {
36
+ return 0;
37
+ }
38
+ r = br_rsa_i15_private(data, sk);
39
+ r &= br_rsa_oaep_unpad(dig, label, label_len, data, len);
40
+ return r;
41
+ }
@@ -0,0 +1,44 @@
1
+ /*
2
+ * Copyright (c) 2018 Thomas Pornin <pornin@bolet.org>
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining
5
+ * a copy of this software and associated documentation files (the
6
+ * "Software"), to deal in the Software without restriction, including
7
+ * without limitation the rights to use, copy, modify, merge, publish,
8
+ * distribute, sublicense, and/or sell copies of the Software, and to
9
+ * permit persons to whom the Software is furnished to do so, subject to
10
+ * the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be
13
+ * included in all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ #include "inner.h"
26
+
27
+ /* see bearssl_rsa.h */
28
+ size_t
29
+ br_rsa_i15_oaep_encrypt(
30
+ const br_prng_class **rnd, const br_hash_class *dig,
31
+ const void *label, size_t label_len,
32
+ const br_rsa_public_key *pk,
33
+ void *dst, size_t dst_max_len,
34
+ const void *src, size_t src_len)
35
+ {
36
+ size_t dlen;
37
+
38
+ dlen = br_rsa_oaep_pad(rnd, dig, label, label_len,
39
+ pk, dst, dst_max_len, src, src_len);
40
+ if (dlen == 0) {
41
+ return 0;
42
+ }
43
+ return dlen & -(size_t)br_rsa_i15_public(dst, dlen, pk);
44
+ }
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Copyright (c) 2017 Thomas Pornin <pornin@bolet.org>
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining
5
+ * a copy of this software and associated documentation files (the
6
+ * "Software"), to deal in the Software without restriction, including
7
+ * without limitation the rights to use, copy, modify, merge, publish,
8
+ * distribute, sublicense, and/or sell copies of the Software, and to
9
+ * permit persons to whom the Software is furnished to do so, subject to
10
+ * the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be
13
+ * included in all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ #include "inner.h"
26
+
27
+ /* see bearssl_rsa.h */
28
+ uint32_t
29
+ br_rsa_i15_pkcs1_sign(const unsigned char *hash_oid,
30
+ const unsigned char *hash, size_t hash_len,
31
+ const br_rsa_private_key *sk, unsigned char *x)
32
+ {
33
+ if (!br_rsa_pkcs1_sig_pad(hash_oid, hash, hash_len, sk->n_bitlen, x)) {
34
+ return 0;
35
+ }
36
+ return br_rsa_i15_private(x, sk);
37
+ }
@@ -0,0 +1,43 @@
1
+ /*
2
+ * Copyright (c) 2017 Thomas Pornin <pornin@bolet.org>
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining
5
+ * a copy of this software and associated documentation files (the
6
+ * "Software"), to deal in the Software without restriction, including
7
+ * without limitation the rights to use, copy, modify, merge, publish,
8
+ * distribute, sublicense, and/or sell copies of the Software, and to
9
+ * permit persons to whom the Software is furnished to do so, subject to
10
+ * the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be
13
+ * included in all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ #include "inner.h"
26
+
27
+ /* see bearssl_rsa.h */
28
+ uint32_t
29
+ br_rsa_i15_pkcs1_vrfy(const unsigned char *x, size_t xlen,
30
+ const unsigned char *hash_oid, size_t hash_len,
31
+ const br_rsa_public_key *pk, unsigned char *hash_out)
32
+ {
33
+ unsigned char sig[BR_MAX_RSA_SIZE >> 3];
34
+
35
+ if (xlen > (sizeof sig)) {
36
+ return 0;
37
+ }
38
+ memcpy(sig, x, xlen);
39
+ if (!br_rsa_i15_public(sig, xlen, pk)) {
40
+ return 0;
41
+ }
42
+ return br_rsa_pkcs1_sig_unpad(sig, xlen, hash_oid, hash_len, hash_out);
43
+ }
@@ -0,0 +1,209 @@
1
+ /*
2
+ * Copyright (c) 2017 Thomas Pornin <pornin@bolet.org>
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining
5
+ * a copy of this software and associated documentation files (the
6
+ * "Software"), to deal in the Software without restriction, including
7
+ * without limitation the rights to use, copy, modify, merge, publish,
8
+ * distribute, sublicense, and/or sell copies of the Software, and to
9
+ * permit persons to whom the Software is furnished to do so, subject to
10
+ * the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be
13
+ * included in all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ #include "inner.h"
26
+
27
+ #define U (2 + ((BR_MAX_RSA_FACTOR + 14) / 15))
28
+ #define TLEN (8 * U)
29
+
30
+ /* see bearssl_rsa.h */
31
+ uint32_t
32
+ br_rsa_i15_private(unsigned char *x, const br_rsa_private_key *sk)
33
+ {
34
+ const unsigned char *p, *q;
35
+ size_t plen, qlen;
36
+ size_t fwlen;
37
+ uint16_t p0i, q0i;
38
+ size_t xlen, u;
39
+ uint16_t tmp[1 + TLEN];
40
+ long z;
41
+ uint16_t *mp, *mq, *s1, *s2, *t1, *t2, *t3;
42
+ uint32_t r;
43
+
44
+ /*
45
+ * Compute the actual lengths of p and q, in bytes.
46
+ * These lengths are not considered secret (we cannot really hide
47
+ * them anyway in constant-time code).
48
+ */
49
+ p = sk->p;
50
+ plen = sk->plen;
51
+ while (plen > 0 && *p == 0) {
52
+ p ++;
53
+ plen --;
54
+ }
55
+ q = sk->q;
56
+ qlen = sk->qlen;
57
+ while (qlen > 0 && *q == 0) {
58
+ q ++;
59
+ qlen --;
60
+ }
61
+
62
+ /*
63
+ * Compute the maximum factor length, in words.
64
+ */
65
+ z = (long)(plen > qlen ? plen : qlen) << 3;
66
+ fwlen = 1;
67
+ while (z > 0) {
68
+ z -= 15;
69
+ fwlen ++;
70
+ }
71
+ /*
72
+ * Round up the word length to an even number.
73
+ */
74
+ fwlen += (fwlen & 1);
75
+
76
+ /*
77
+ * We need to fit at least 6 values in the stack buffer.
78
+ */
79
+ if (6 * fwlen > TLEN) {
80
+ return 0;
81
+ }
82
+
83
+ /*
84
+ * Compute signature length (in bytes).
85
+ */
86
+ xlen = (sk->n_bitlen + 7) >> 3;
87
+
88
+ /*
89
+ * Ensure 32-bit alignment for value words.
90
+ */
91
+ mq = tmp;
92
+ if (((uintptr_t)mq & 2) == 0) {
93
+ mq ++;
94
+ }
95
+
96
+ /*
97
+ * Decode q.
98
+ */
99
+ br_i15_decode(mq, q, qlen);
100
+
101
+ /*
102
+ * Decode p.
103
+ */
104
+ t1 = mq + fwlen;
105
+ br_i15_decode(t1, p, plen);
106
+
107
+ /*
108
+ * Compute the modulus (product of the two factors), to compare
109
+ * it with the source value. We use br_i15_mulacc(), since it's
110
+ * already used later on.
111
+ */
112
+ t2 = mq + 2 * fwlen;
113
+ br_i15_zero(t2, mq[0]);
114
+ br_i15_mulacc(t2, mq, t1);
115
+
116
+ /*
117
+ * We encode the modulus into bytes, to perform the comparison
118
+ * with bytes. We know that the product length, in bytes, is
119
+ * exactly xlen.
120
+ * The comparison actually computes the carry when subtracting
121
+ * the modulus from the source value; that carry must be 1 for
122
+ * a value in the correct range. We keep it in r, which is our
123
+ * accumulator for the error code.
124
+ */
125
+ t3 = mq + 4 * fwlen;
126
+ br_i15_encode(t3, xlen, t2);
127
+ u = xlen;
128
+ r = 0;
129
+ while (u > 0) {
130
+ uint32_t wn, wx;
131
+
132
+ u --;
133
+ wn = ((unsigned char *)t3)[u];
134
+ wx = x[u];
135
+ r = ((wx - (wn + r)) >> 8) & 1;
136
+ }
137
+
138
+ /*
139
+ * Move the decoded p to another temporary buffer.
140
+ */
141
+ mp = mq + 2 * fwlen;
142
+ memmove(mp, t1, fwlen * sizeof *t1);
143
+
144
+ /*
145
+ * Compute s2 = x^dq mod q.
146
+ */
147
+ q0i = br_i15_ninv15(mq[1]);
148
+ s2 = mq + fwlen;
149
+ br_i15_decode_reduce(s2, x, xlen, mq);
150
+ r &= br_i15_modpow_opt(s2, sk->dq, sk->dqlen, mq, q0i,
151
+ mq + 3 * fwlen, TLEN - 3 * fwlen);
152
+
153
+ /*
154
+ * Compute s1 = x^dq mod q.
155
+ */
156
+ p0i = br_i15_ninv15(mp[1]);
157
+ s1 = mq + 3 * fwlen;
158
+ br_i15_decode_reduce(s1, x, xlen, mp);
159
+ r &= br_i15_modpow_opt(s1, sk->dp, sk->dplen, mp, p0i,
160
+ mq + 4 * fwlen, TLEN - 4 * fwlen);
161
+
162
+ /*
163
+ * Compute:
164
+ * h = (s1 - s2)*(1/q) mod p
165
+ * s1 is an integer modulo p, but s2 is modulo q. PKCS#1 is
166
+ * unclear about whether p may be lower than q (some existing,
167
+ * widely deployed implementations of RSA don't tolerate p < q),
168
+ * but we want to support that occurrence, so we need to use the
169
+ * reduction function.
170
+ *
171
+ * Since we use br_i15_decode_reduce() for iq (purportedly, the
172
+ * inverse of q modulo p), we also tolerate improperly large
173
+ * values for this parameter.
174
+ */
175
+ t1 = mq + 4 * fwlen;
176
+ t2 = mq + 5 * fwlen;
177
+ br_i15_reduce(t2, s2, mp);
178
+ br_i15_add(s1, mp, br_i15_sub(s1, t2, 1));
179
+ br_i15_to_monty(s1, mp);
180
+ br_i15_decode_reduce(t1, sk->iq, sk->iqlen, mp);
181
+ br_i15_montymul(t2, s1, t1, mp, p0i);
182
+
183
+ /*
184
+ * h is now in t2. We compute the final result:
185
+ * s = s2 + q*h
186
+ * All these operations are non-modular.
187
+ *
188
+ * We need mq, s2 and t2. We use the t3 buffer as destination.
189
+ * The buffers mp, s1 and t1 are no longer needed, so we can
190
+ * reuse them for t3. Moreover, the first step of the computation
191
+ * is to copy s2 into t3, after which s2 is not needed. Right
192
+ * now, mq is in slot 0, s2 is in slot 1, and t2 in slot 5.
193
+ * Therefore, we have ample room for t3 by simply using s2.
194
+ */
195
+ t3 = s2;
196
+ br_i15_mulacc(t3, mq, t2);
197
+
198
+ /*
199
+ * Encode the result. Since we already checked the value of xlen,
200
+ * we can just use it right away.
201
+ */
202
+ br_i15_encode(x, xlen, t3);
203
+
204
+ /*
205
+ * The only error conditions remaining at that point are invalid
206
+ * values for p and q (even integers).
207
+ */
208
+ return p0i & q0i & r;
209
+ }
@@ -0,0 +1,320 @@
1
+ /*
2
+ * Copyright (c) 2018 Thomas Pornin <pornin@bolet.org>
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining
5
+ * a copy of this software and associated documentation files (the
6
+ * "Software"), to deal in the Software without restriction, including
7
+ * without limitation the rights to use, copy, modify, merge, publish,
8
+ * distribute, sublicense, and/or sell copies of the Software, and to
9
+ * permit persons to whom the Software is furnished to do so, subject to
10
+ * the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be
13
+ * included in all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ #include "inner.h"
26
+
27
+ /* see bearssl_rsa.h */
28
+ size_t
29
+ br_rsa_i15_compute_privexp(void *d,
30
+ const br_rsa_private_key *sk, uint32_t e)
31
+ {
32
+ /*
33
+ * We want to invert e modulo phi = (p-1)(q-1). This first
34
+ * requires computing phi, which is easy since we have the factors
35
+ * p and q in the private key structure.
36
+ *
37
+ * Since p = 3 mod 4 and q = 3 mod 4, phi/4 is an odd integer.
38
+ * We could invert e modulo phi/4 then patch the result to
39
+ * modulo phi, but this would involve assembling three modulus-wide
40
+ * values (phi/4, 1 and e) and calling moddiv, that requires
41
+ * three more temporaries, for a total of six big integers, or
42
+ * slightly more than 3 kB of stack space for RSA-4096. This
43
+ * exceeds our stack requirements.
44
+ *
45
+ * Instead, we first use one step of the extended GCD:
46
+ *
47
+ * - We compute phi = k*e + r (Euclidean division of phi by e).
48
+ * If public exponent e is correct, then r != 0 (e must be
49
+ * invertible modulo phi). We also have k != 0 since we
50
+ * enforce non-ridiculously-small factors.
51
+ *
52
+ * - We find small u, v such that u*e - v*r = 1 (using a
53
+ * binary GCD; we can arrange for u < r and v < e, i.e. all
54
+ * values fit on 32 bits).
55
+ *
56
+ * - Solution is: d = u + v*k
57
+ * This last computation is exact: since u < r and v < e,
58
+ * the above implies d < r + e*((phi-r)/e) = phi
59
+ */
60
+
61
+ uint16_t tmp[4 * ((BR_MAX_RSA_FACTOR + 14) / 15) + 12];
62
+ uint16_t *p, *q, *k, *m, *z, *phi;
63
+ const unsigned char *pbuf, *qbuf;
64
+ size_t plen, qlen, u, len, dlen;
65
+ uint32_t r, a, b, u0, v0, u1, v1, he, hr;
66
+ int i;
67
+
68
+ /*
69
+ * Check that e is correct.
70
+ */
71
+ if (e < 3 || (e & 1) == 0) {
72
+ return 0;
73
+ }
74
+
75
+ /*
76
+ * Check lengths of p and q, and that they are both odd.
77
+ */
78
+ pbuf = sk->p;
79
+ plen = sk->plen;
80
+ while (plen > 0 && *pbuf == 0) {
81
+ pbuf ++;
82
+ plen --;
83
+ }
84
+ if (plen < 5 || plen > (BR_MAX_RSA_FACTOR / 8)
85
+ || (pbuf[plen - 1] & 1) != 1)
86
+ {
87
+ return 0;
88
+ }
89
+ qbuf = sk->q;
90
+ qlen = sk->qlen;
91
+ while (qlen > 0 && *qbuf == 0) {
92
+ qbuf ++;
93
+ qlen --;
94
+ }
95
+ if (qlen < 5 || qlen > (BR_MAX_RSA_FACTOR / 8)
96
+ || (qbuf[qlen - 1] & 1) != 1)
97
+ {
98
+ return 0;
99
+ }
100
+
101
+ /*
102
+ * Output length is that of the modulus.
103
+ */
104
+ dlen = (sk->n_bitlen + 7) >> 3;
105
+ if (d == NULL) {
106
+ return dlen;
107
+ }
108
+
109
+ p = tmp;
110
+ br_i15_decode(p, pbuf, plen);
111
+ plen = (p[0] + 15) >> 4;
112
+ q = p + 1 + plen;
113
+ br_i15_decode(q, qbuf, qlen);
114
+ qlen = (q[0] + 15) >> 4;
115
+
116
+ /*
117
+ * Compute phi = (p-1)*(q-1), then move it over p-1 and q-1 (that
118
+ * we do not need anymore). The mulacc function sets the announced
119
+ * bit length of t to be the sum of the announced bit lengths of
120
+ * p-1 and q-1, which is usually exact but may overshoot by one 1
121
+ * bit in some cases; we readjust it to its true length.
122
+ */
123
+ p[1] --;
124
+ q[1] --;
125
+ phi = q + 1 + qlen;
126
+ br_i15_zero(phi, p[0]);
127
+ br_i15_mulacc(phi, p, q);
128
+ len = (phi[0] + 15) >> 4;
129
+ memmove(tmp, phi, (1 + len) * sizeof *phi);
130
+ phi = tmp;
131
+ phi[0] = br_i15_bit_length(phi + 1, len);
132
+ len = (phi[0] + 15) >> 4;
133
+
134
+ /*
135
+ * Divide phi by public exponent e. The final remainder r must be
136
+ * non-zero (otherwise, the key is invalid). The quotient is k,
137
+ * which we write over phi, since we don't need phi after that.
138
+ */
139
+ r = 0;
140
+ for (u = len; u >= 1; u --) {
141
+ /*
142
+ * Upon entry, r < e, and phi[u] < 2^15; hence,
143
+ * hi:lo < e*2^15. Thus, the produced word k[u]
144
+ * must be lower than 2^15, and the new remainder r
145
+ * is lower than e.
146
+ */
147
+ uint32_t hi, lo;
148
+
149
+ hi = r >> 17;
150
+ lo = (r << 15) + phi[u];
151
+ phi[u] = br_divrem(hi, lo, e, &r);
152
+ }
153
+ if (r == 0) {
154
+ return 0;
155
+ }
156
+ k = phi;
157
+
158
+ /*
159
+ * Compute u and v such that u*e - v*r = GCD(e,r). We use
160
+ * a binary GCD algorithm, with 6 extra integers a, b,
161
+ * u0, u1, v0 and v1. Initial values are:
162
+ * a = e u0 = 1 v0 = 0
163
+ * b = r u1 = r v1 = e-1
164
+ * The following invariants are maintained:
165
+ * a = u0*e - v0*r
166
+ * b = u1*e - v1*r
167
+ * 0 < a <= e
168
+ * 0 < b <= r
169
+ * 0 <= u0 <= r
170
+ * 0 <= v0 <= e
171
+ * 0 <= u1 <= r
172
+ * 0 <= v1 <= e
173
+ *
174
+ * At each iteration, we reduce either a or b by one bit, and
175
+ * adjust u0, u1, v0 and v1 to maintain the invariants:
176
+ * - if a is even, then a <- a/2
177
+ * - otherwise, if b is even, then b <- b/2
178
+ * - otherwise, if a > b, then a <- (a-b)/2
179
+ * - otherwise, if b > a, then b <- (b-a)/2
180
+ * Algorithm stops when a = b. At that point, the common value
181
+ * is the GCD of e and r; it must be 1 (otherwise, the private
182
+ * key or public exponent is not valid). The (u0,v0) or (u1,v1)
183
+ * pairs are the solution we are looking for.
184
+ *
185
+ * Since either a or b is reduced by at least 1 bit at each
186
+ * iteration, 62 iterations are enough to reach the end
187
+ * condition.
188
+ *
189
+ * To maintain the invariants, we must compute the same operations
190
+ * on the u* and v* values that we do on a and b:
191
+ * - When a is divided by 2, u0 and v0 must be divided by 2.
192
+ * - When b is divided by 2, u1 and v1 must be divided by 2.
193
+ * - When b is subtracted from a, u1 and v1 are subtracted from
194
+ * u0 and v0, respectively.
195
+ * - When a is subtracted from b, u0 and v0 are subtracted from
196
+ * u1 and v1, respectively.
197
+ *
198
+ * However, we want to keep the u* and v* values in their proper
199
+ * ranges. The following remarks apply:
200
+ *
201
+ * - When a is divided by 2, then a is even. Therefore:
202
+ *
203
+ * * If r is odd, then u0 and v0 must have the same parity;
204
+ * if they are both odd, then adding r to u0 and e to v0
205
+ * makes them both even, and the division by 2 brings them
206
+ * back to the proper range.
207
+ *
208
+ * * If r is even, then u0 must be even; if v0 is odd, then
209
+ * adding r to u0 and e to v0 makes them both even, and the
210
+ * division by 2 brings them back to the proper range.
211
+ *
212
+ * Thus, all we need to do is to look at the parity of v0,
213
+ * and add (r,e) to (u0,v0) when v0 is odd. In order to avoid
214
+ * a 32-bit overflow, we can add ((r+1)/2,(e/2)+1) after the
215
+ * division (r+1 does not overflow since r < e; and (e/2)+1
216
+ * is equal to (e+1)/2 since e is odd).
217
+ *
218
+ * - When we subtract b from a, three cases may occur:
219
+ *
220
+ * * u1 <= u0 and v1 <= v0: just do the subtractions
221
+ *
222
+ * * u1 > u0 and v1 > v0: compute:
223
+ * (u0, v0) <- (u0 + r - u1, v0 + e - v1)
224
+ *
225
+ * * u1 <= u0 and v1 > v0: compute:
226
+ * (u0, v0) <- (u0 + r - u1, v0 + e - v1)
227
+ *
228
+ * The fourth case (u1 > u0 and v1 <= v0) is not possible
229
+ * because it would contradict "b < a" (which is the reason
230
+ * why we subtract b from a).
231
+ *
232
+ * The tricky case is the third one: from the equations, it
233
+ * seems that u0 may go out of range. However, the invariants
234
+ * and ranges of other values imply that, in that case, the
235
+ * new u0 does not actually exceed the range.
236
+ *
237
+ * We can thus handle the subtraction by adding (r,e) based
238
+ * solely on the comparison between v0 and v1.
239
+ */
240
+ a = e;
241
+ b = r;
242
+ u0 = 1;
243
+ v0 = 0;
244
+ u1 = r;
245
+ v1 = e - 1;
246
+ hr = (r + 1) >> 1;
247
+ he = (e >> 1) + 1;
248
+ for (i = 0; i < 62; i ++) {
249
+ uint32_t oa, ob, agtb, bgta;
250
+ uint32_t sab, sba, da, db;
251
+ uint32_t ctl;
252
+
253
+ oa = a & 1; /* 1 if a is odd */
254
+ ob = b & 1; /* 1 if b is odd */
255
+ agtb = GT(a, b); /* 1 if a > b */
256
+ bgta = GT(b, a); /* 1 if b > a */
257
+
258
+ sab = oa & ob & agtb; /* 1 if a <- a-b */
259
+ sba = oa & ob & bgta; /* 1 if b <- b-a */
260
+
261
+ /* a <- a-b, u0 <- u0-u1, v0 <- v0-v1 */
262
+ ctl = GT(v1, v0);
263
+ a -= b & -sab;
264
+ u0 -= (u1 - (r & -ctl)) & -sab;
265
+ v0 -= (v1 - (e & -ctl)) & -sab;
266
+
267
+ /* b <- b-a, u1 <- u1-u0 mod r, v1 <- v1-v0 mod e */
268
+ ctl = GT(v0, v1);
269
+ b -= a & -sba;
270
+ u1 -= (u0 - (r & -ctl)) & -sba;
271
+ v1 -= (v0 - (e & -ctl)) & -sba;
272
+
273
+ da = NOT(oa) | sab; /* 1 if a <- a/2 */
274
+ db = (oa & NOT(ob)) | sba; /* 1 if b <- b/2 */
275
+
276
+ /* a <- a/2, u0 <- u0/2, v0 <- v0/2 */
277
+ ctl = v0 & 1;
278
+ a ^= (a ^ (a >> 1)) & -da;
279
+ u0 ^= (u0 ^ ((u0 >> 1) + (hr & -ctl))) & -da;
280
+ v0 ^= (v0 ^ ((v0 >> 1) + (he & -ctl))) & -da;
281
+
282
+ /* b <- b/2, u1 <- u1/2 mod r, v1 <- v1/2 mod e */
283
+ ctl = v1 & 1;
284
+ b ^= (b ^ (b >> 1)) & -db;
285
+ u1 ^= (u1 ^ ((u1 >> 1) + (hr & -ctl))) & -db;
286
+ v1 ^= (v1 ^ ((v1 >> 1) + (he & -ctl))) & -db;
287
+ }
288
+
289
+ /*
290
+ * Check that the GCD is indeed 1. If not, then the key is invalid
291
+ * (and there's no harm in leaking that piece of information).
292
+ */
293
+ if (a != 1) {
294
+ return 0;
295
+ }
296
+
297
+ /*
298
+ * Now we have u0*e - v0*r = 1. Let's compute the result as:
299
+ * d = u0 + v0*k
300
+ * We still have k in the tmp[] array, and its announced bit
301
+ * length is that of phi.
302
+ */
303
+ m = k + 1 + len;
304
+ m[0] = (2 << 4) + 2; /* bit length is 32 bits, encoded */
305
+ m[1] = v0 & 0x7FFF;
306
+ m[2] = (v0 >> 15) & 0x7FFF;
307
+ m[3] = v0 >> 30;
308
+ z = m + 4;
309
+ br_i15_zero(z, k[0]);
310
+ z[1] = u0 & 0x7FFF;
311
+ z[2] = (u0 >> 15) & 0x7FFF;
312
+ z[3] = u0 >> 30;
313
+ br_i15_mulacc(z, k, m);
314
+
315
+ /*
316
+ * Encode the result.
317
+ */
318
+ br_i15_encode(d, dlen, z);
319
+ return dlen;
320
+ }