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,475 @@
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
+ #if BR_INT128 || BR_UMUL128
28
+
29
+ #if BR_INT128
30
+
31
+ #define MUL128(hi, lo, x, y) do { \
32
+ unsigned __int128 mul128tmp; \
33
+ mul128tmp = (unsigned __int128)(x) * (unsigned __int128)(y); \
34
+ (hi) = (uint64_t)(mul128tmp >> 64); \
35
+ (lo) = (uint64_t)mul128tmp; \
36
+ } while (0)
37
+
38
+ #elif BR_UMUL128
39
+
40
+ #include <intrin.h>
41
+
42
+ #define MUL128(hi, lo, x, y) do { \
43
+ (lo) = _umul128((x), (y), &(hi)); \
44
+ } while (0)
45
+
46
+ #endif
47
+
48
+ #define MASK42 ((uint64_t)0x000003FFFFFFFFFF)
49
+ #define MASK44 ((uint64_t)0x00000FFFFFFFFFFF)
50
+
51
+ /*
52
+ * The "accumulator" word is nominally a 130-bit value. We split it into
53
+ * words of 44 bits, each held in a 64-bit variable.
54
+ *
55
+ * If the current accumulator is a = a0 + a1*W + a2*W^2 (where W = 2^44)
56
+ * and r = r0 + r1*W + r2*W^2, then:
57
+ *
58
+ * a*r = (a0*r0)
59
+ * + (a0*r1 + a1*r0) * W
60
+ * + (a0*r2 + a1*r1 + a2*r0) * W^2
61
+ * + (a1*r2 + a2*r1) * W^3
62
+ * + (a2*r2) * W^4
63
+ *
64
+ * We want to reduce that value modulo p = 2^130-5, so W^3 = 20 mod p,
65
+ * and W^4 = 20*W mod p. Thus, if we define u1 = 20*r1 and u2 = 20*r2,
66
+ * then the equations above become:
67
+ *
68
+ * b0 = a0*r0 + a1*u2 + a2*u1
69
+ * b1 = a0*r1 + a1*r0 + a2*u2
70
+ * b2 = a0*r2 + a1*r1 + a2*r0
71
+ *
72
+ * In order to make u1 fit in 44 bits, we can change these equations
73
+ * into:
74
+ *
75
+ * b0 = a0*r0 + a1*u2 + a2*t1
76
+ * b1 = a0*r1 + a1*r0 + a2*t2
77
+ * b2 = a0*r2 + a1*r1 + a2*r0
78
+ *
79
+ * Where t1 is u1 truncated to 44 bits, and t2 is u2 added to the extra
80
+ * bits of u1. Note that since r is clamped down to a 124-bit value, the
81
+ * values u2 and t2 fit on 44 bits too.
82
+ *
83
+ * The bx values are larger than 44 bits, so we may split them into a
84
+ * lower half (cx, 44 bits) and an upper half (dx). The new values for
85
+ * the accumulator are then:
86
+ *
87
+ * e0 = c0 + 20*d2
88
+ * e1 = c1 + d0
89
+ * e2 = c2 + d1
90
+ *
91
+ * The equations allow for some room, i.e. the ax values may be larger
92
+ * than 44 bits. Similarly, the ex values will usually be larger than
93
+ * the ax. Thus, some sort of carry propagation must be done regularly,
94
+ * though not necessarily at each iteration. In particular, we do not
95
+ * need to compute the additions (for the bx values) over 128-bit
96
+ * quantities; we can stick to 64-bit computations.
97
+ *
98
+ *
99
+ * Since the 128-bit result of a 64x64 multiplication is actually
100
+ * represented over two 64-bit registers, it is cheaper to arrange for
101
+ * any split that happens between the "high" and "low" halves to be on
102
+ * that 64-bit boundary. This is done by left shifting the rx, ux and tx
103
+ * by 20 bits (since they all fit on 44 bits each, this shift is
104
+ * always possible).
105
+ */
106
+
107
+ static void
108
+ poly1305_inner_big(uint64_t *acc, uint64_t *r, const void *data, size_t len)
109
+ {
110
+
111
+ #define MX(hi, lo, m0, m1, m2) do { \
112
+ uint64_t mxhi, mxlo; \
113
+ MUL128(mxhi, mxlo, a0, m0); \
114
+ (hi) = mxhi; \
115
+ (lo) = mxlo >> 20; \
116
+ MUL128(mxhi, mxlo, a1, m1); \
117
+ (hi) += mxhi; \
118
+ (lo) += mxlo >> 20; \
119
+ MUL128(mxhi, mxlo, a2, m2); \
120
+ (hi) += mxhi; \
121
+ (lo) += mxlo >> 20; \
122
+ } while (0)
123
+
124
+ const unsigned char *buf;
125
+ uint64_t a0, a1, a2;
126
+ uint64_t r0, r1, r2, t1, t2, u2;
127
+
128
+ r0 = r[0];
129
+ r1 = r[1];
130
+ r2 = r[2];
131
+ t1 = r[3];
132
+ t2 = r[4];
133
+ u2 = r[5];
134
+ a0 = acc[0];
135
+ a1 = acc[1];
136
+ a2 = acc[2];
137
+ buf = data;
138
+
139
+ while (len > 0) {
140
+ uint64_t v0, v1, v2;
141
+ uint64_t c0, c1, c2, d0, d1, d2;
142
+
143
+ v0 = br_dec64le(buf + 0);
144
+ v1 = br_dec64le(buf + 8);
145
+ v2 = v1 >> 24;
146
+ v1 = ((v0 >> 44) | (v1 << 20)) & MASK44;
147
+ v0 &= MASK44;
148
+ a0 += v0;
149
+ a1 += v1;
150
+ a2 += v2 + ((uint64_t)1 << 40);
151
+ MX(d0, c0, r0, u2, t1);
152
+ MX(d1, c1, r1, r0, t2);
153
+ MX(d2, c2, r2, r1, r0);
154
+ a0 = c0 + 20 * d2;
155
+ a1 = c1 + d0;
156
+ a2 = c2 + d1;
157
+
158
+ v0 = br_dec64le(buf + 16);
159
+ v1 = br_dec64le(buf + 24);
160
+ v2 = v1 >> 24;
161
+ v1 = ((v0 >> 44) | (v1 << 20)) & MASK44;
162
+ v0 &= MASK44;
163
+ a0 += v0;
164
+ a1 += v1;
165
+ a2 += v2 + ((uint64_t)1 << 40);
166
+ MX(d0, c0, r0, u2, t1);
167
+ MX(d1, c1, r1, r0, t2);
168
+ MX(d2, c2, r2, r1, r0);
169
+ a0 = c0 + 20 * d2;
170
+ a1 = c1 + d0;
171
+ a2 = c2 + d1;
172
+
173
+ v0 = br_dec64le(buf + 32);
174
+ v1 = br_dec64le(buf + 40);
175
+ v2 = v1 >> 24;
176
+ v1 = ((v0 >> 44) | (v1 << 20)) & MASK44;
177
+ v0 &= MASK44;
178
+ a0 += v0;
179
+ a1 += v1;
180
+ a2 += v2 + ((uint64_t)1 << 40);
181
+ MX(d0, c0, r0, u2, t1);
182
+ MX(d1, c1, r1, r0, t2);
183
+ MX(d2, c2, r2, r1, r0);
184
+ a0 = c0 + 20 * d2;
185
+ a1 = c1 + d0;
186
+ a2 = c2 + d1;
187
+
188
+ v0 = br_dec64le(buf + 48);
189
+ v1 = br_dec64le(buf + 56);
190
+ v2 = v1 >> 24;
191
+ v1 = ((v0 >> 44) | (v1 << 20)) & MASK44;
192
+ v0 &= MASK44;
193
+ a0 += v0;
194
+ a1 += v1;
195
+ a2 += v2 + ((uint64_t)1 << 40);
196
+ MX(d0, c0, r0, u2, t1);
197
+ MX(d1, c1, r1, r0, t2);
198
+ MX(d2, c2, r2, r1, r0);
199
+ a0 = c0 + 20 * d2;
200
+ a1 = c1 + d0;
201
+ a2 = c2 + d1;
202
+
203
+ a1 += a0 >> 44;
204
+ a0 &= MASK44;
205
+ a2 += a1 >> 44;
206
+ a1 &= MASK44;
207
+ a0 += 20 * (a2 >> 44);
208
+ a2 &= MASK44;
209
+
210
+ buf += 64;
211
+ len -= 64;
212
+ }
213
+ acc[0] = a0;
214
+ acc[1] = a1;
215
+ acc[2] = a2;
216
+
217
+ #undef MX
218
+ }
219
+
220
+ static void
221
+ poly1305_inner_small(uint64_t *acc, uint64_t *r, const void *data, size_t len)
222
+ {
223
+ const unsigned char *buf;
224
+ uint64_t a0, a1, a2;
225
+ uint64_t r0, r1, r2, t1, t2, u2;
226
+
227
+ r0 = r[0];
228
+ r1 = r[1];
229
+ r2 = r[2];
230
+ t1 = r[3];
231
+ t2 = r[4];
232
+ u2 = r[5];
233
+ a0 = acc[0];
234
+ a1 = acc[1];
235
+ a2 = acc[2];
236
+ buf = data;
237
+
238
+ while (len > 0) {
239
+ uint64_t v0, v1, v2;
240
+ uint64_t c0, c1, c2, d0, d1, d2;
241
+ unsigned char tmp[16];
242
+
243
+ if (len < 16) {
244
+ memcpy(tmp, buf, len);
245
+ memset(tmp + len, 0, (sizeof tmp) - len);
246
+ buf = tmp;
247
+ len = 16;
248
+ }
249
+ v0 = br_dec64le(buf + 0);
250
+ v1 = br_dec64le(buf + 8);
251
+
252
+ v2 = v1 >> 24;
253
+ v1 = ((v0 >> 44) | (v1 << 20)) & MASK44;
254
+ v0 &= MASK44;
255
+
256
+ a0 += v0;
257
+ a1 += v1;
258
+ a2 += v2 + ((uint64_t)1 << 40);
259
+
260
+ #define MX(hi, lo, m0, m1, m2) do { \
261
+ uint64_t mxhi, mxlo; \
262
+ MUL128(mxhi, mxlo, a0, m0); \
263
+ (hi) = mxhi; \
264
+ (lo) = mxlo >> 20; \
265
+ MUL128(mxhi, mxlo, a1, m1); \
266
+ (hi) += mxhi; \
267
+ (lo) += mxlo >> 20; \
268
+ MUL128(mxhi, mxlo, a2, m2); \
269
+ (hi) += mxhi; \
270
+ (lo) += mxlo >> 20; \
271
+ } while (0)
272
+
273
+ MX(d0, c0, r0, u2, t1);
274
+ MX(d1, c1, r1, r0, t2);
275
+ MX(d2, c2, r2, r1, r0);
276
+
277
+ #undef MX
278
+
279
+ a0 = c0 + 20 * d2;
280
+ a1 = c1 + d0;
281
+ a2 = c2 + d1;
282
+
283
+ a1 += a0 >> 44;
284
+ a0 &= MASK44;
285
+ a2 += a1 >> 44;
286
+ a1 &= MASK44;
287
+ a0 += 20 * (a2 >> 44);
288
+ a2 &= MASK44;
289
+
290
+ buf += 16;
291
+ len -= 16;
292
+ }
293
+ acc[0] = a0;
294
+ acc[1] = a1;
295
+ acc[2] = a2;
296
+ }
297
+
298
+ static inline void
299
+ poly1305_inner(uint64_t *acc, uint64_t *r, const void *data, size_t len)
300
+ {
301
+ if (len >= 64) {
302
+ size_t len2;
303
+
304
+ len2 = len & ~(size_t)63;
305
+ poly1305_inner_big(acc, r, data, len2);
306
+ data = (const unsigned char *)data + len2;
307
+ len -= len2;
308
+ }
309
+ if (len > 0) {
310
+ poly1305_inner_small(acc, r, data, len);
311
+ }
312
+ }
313
+
314
+ /* see bearssl_block.h */
315
+ void
316
+ br_poly1305_ctmulq_run(const void *key, const void *iv,
317
+ void *data, size_t len, const void *aad, size_t aad_len,
318
+ void *tag, br_chacha20_run ichacha, int encrypt)
319
+ {
320
+ unsigned char pkey[32], foot[16];
321
+ uint64_t r[6], acc[3], r0, r1;
322
+ uint32_t v0, v1, v2, v3, v4;
323
+ uint64_t w0, w1, w2, w3;
324
+ uint32_t ctl;
325
+
326
+ /*
327
+ * Compute the MAC key. The 'r' value is the first 16 bytes of
328
+ * pkey[].
329
+ */
330
+ memset(pkey, 0, sizeof pkey);
331
+ ichacha(key, iv, 0, pkey, sizeof pkey);
332
+
333
+ /*
334
+ * If encrypting, ChaCha20 must run first, followed by Poly1305.
335
+ * When decrypting, the operations are reversed.
336
+ */
337
+ if (encrypt) {
338
+ ichacha(key, iv, 1, data, len);
339
+ }
340
+
341
+ /*
342
+ * Run Poly1305. We must process the AAD, then ciphertext, then
343
+ * the footer (with the lengths). Note that the AAD and ciphertext
344
+ * are meant to be padded with zeros up to the next multiple of 16,
345
+ * and the length of the footer is 16 bytes as well.
346
+ */
347
+
348
+ /*
349
+ * Apply the "clamping" on r.
350
+ */
351
+ pkey[ 3] &= 0x0F;
352
+ pkey[ 4] &= 0xFC;
353
+ pkey[ 7] &= 0x0F;
354
+ pkey[ 8] &= 0xFC;
355
+ pkey[11] &= 0x0F;
356
+ pkey[12] &= 0xFC;
357
+ pkey[15] &= 0x0F;
358
+
359
+ /*
360
+ * Decode the 'r' value into 44-bit words, left-shifted by 20 bits.
361
+ * Also compute the u1 and u2 values.
362
+ */
363
+ r0 = br_dec64le(pkey + 0);
364
+ r1 = br_dec64le(pkey + 8);
365
+ r[0] = r0 << 20;
366
+ r[1] = ((r0 >> 24) | (r1 << 40)) & ~(uint64_t)0xFFFFF;
367
+ r[2] = (r1 >> 4) & ~(uint64_t)0xFFFFF;
368
+ r1 = 20 * (r[1] >> 20);
369
+ r[3] = r1 << 20;
370
+ r[5] = 20 * r[2];
371
+ r[4] = (r[5] + (r1 >> 24)) & ~(uint64_t)0xFFFFF;
372
+
373
+ /*
374
+ * Accumulator is 0.
375
+ */
376
+ acc[0] = 0;
377
+ acc[1] = 0;
378
+ acc[2] = 0;
379
+
380
+ /*
381
+ * Process the additional authenticated data, ciphertext, and
382
+ * footer in due order.
383
+ */
384
+ br_enc64le(foot, (uint64_t)aad_len);
385
+ br_enc64le(foot + 8, (uint64_t)len);
386
+ poly1305_inner(acc, r, aad, aad_len);
387
+ poly1305_inner(acc, r, data, len);
388
+ poly1305_inner_small(acc, r, foot, sizeof foot);
389
+
390
+ /*
391
+ * Finalise modular reduction. At that point, the value consists
392
+ * in three 44-bit values (the lowest one might be slightly above
393
+ * 2^44). Two loops shall be sufficient.
394
+ */
395
+ acc[1] += (acc[0] >> 44);
396
+ acc[0] &= MASK44;
397
+ acc[2] += (acc[1] >> 44);
398
+ acc[1] &= MASK44;
399
+ acc[0] += 5 * (acc[2] >> 42);
400
+ acc[2] &= MASK42;
401
+ acc[1] += (acc[0] >> 44);
402
+ acc[0] &= MASK44;
403
+ acc[2] += (acc[1] >> 44);
404
+ acc[1] &= MASK44;
405
+ acc[0] += 5 * (acc[2] >> 42);
406
+ acc[2] &= MASK42;
407
+
408
+ /*
409
+ * The value may still fall in the 2^130-5..2^130-1 range, in
410
+ * which case we must reduce it again. The code below selects,
411
+ * in constant-time, between 'acc' and 'acc-p'. We encode the
412
+ * value over four 32-bit integers to finish the operation.
413
+ */
414
+ v0 = (uint32_t)acc[0];
415
+ v1 = (uint32_t)(acc[0] >> 32) | ((uint32_t)acc[1] << 12);
416
+ v2 = (uint32_t)(acc[1] >> 20) | ((uint32_t)acc[2] << 24);
417
+ v3 = (uint32_t)(acc[2] >> 8);
418
+ v4 = (uint32_t)(acc[2] >> 40);
419
+
420
+ ctl = GT(v0, 0xFFFFFFFA);
421
+ ctl &= EQ(v1, 0xFFFFFFFF);
422
+ ctl &= EQ(v2, 0xFFFFFFFF);
423
+ ctl &= EQ(v3, 0xFFFFFFFF);
424
+ ctl &= EQ(v4, 0x00000003);
425
+ v0 = MUX(ctl, v0 + 5, v0);
426
+ v1 = MUX(ctl, 0, v1);
427
+ v2 = MUX(ctl, 0, v2);
428
+ v3 = MUX(ctl, 0, v3);
429
+
430
+ /*
431
+ * Add the "s" value. This is done modulo 2^128. Don't forget
432
+ * carry propagation...
433
+ */
434
+ w0 = (uint64_t)v0 + (uint64_t)br_dec32le(pkey + 16);
435
+ w1 = (uint64_t)v1 + (uint64_t)br_dec32le(pkey + 20) + (w0 >> 32);
436
+ w2 = (uint64_t)v2 + (uint64_t)br_dec32le(pkey + 24) + (w1 >> 32);
437
+ w3 = (uint64_t)v3 + (uint64_t)br_dec32le(pkey + 28) + (w2 >> 32);
438
+ v0 = (uint32_t)w0;
439
+ v1 = (uint32_t)w1;
440
+ v2 = (uint32_t)w2;
441
+ v3 = (uint32_t)w3;
442
+
443
+ /*
444
+ * Encode the tag.
445
+ */
446
+ br_enc32le((unsigned char *)tag + 0, v0);
447
+ br_enc32le((unsigned char *)tag + 4, v1);
448
+ br_enc32le((unsigned char *)tag + 8, v2);
449
+ br_enc32le((unsigned char *)tag + 12, v3);
450
+
451
+ /*
452
+ * If decrypting, then ChaCha20 runs _after_ Poly1305.
453
+ */
454
+ if (!encrypt) {
455
+ ichacha(key, iv, 1, data, len);
456
+ }
457
+ }
458
+
459
+ /* see bearssl_block.h */
460
+ br_poly1305_run
461
+ br_poly1305_ctmulq_get(void)
462
+ {
463
+ return &br_poly1305_ctmulq_run;
464
+ }
465
+
466
+ #else
467
+
468
+ /* see bearssl_block.h */
469
+ br_poly1305_run
470
+ br_poly1305_ctmulq_get(void)
471
+ {
472
+ return 0;
473
+ }
474
+
475
+ #endif
@@ -0,0 +1,221 @@
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
+ /*
28
+ * This is a "reference" implementation of Poly1305 that uses the
29
+ * generic "i15" code for big integers. It is slow, but it handles all
30
+ * big-integer operations with generic code, thereby avoiding most
31
+ * tricky situations with carry propagation and modular reduction.
32
+ */
33
+
34
+ /*
35
+ * Modulus: 2^130-5.
36
+ */
37
+ static const uint16_t P1305[] = {
38
+ 0x008A,
39
+ 0x7FFB, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x03FF
40
+ };
41
+
42
+ /*
43
+ * -p mod 2^15.
44
+ */
45
+ #define P0I 0x4CCD
46
+
47
+ /*
48
+ * R^2 mod p, for conversion to Montgomery representation (R = 2^135,
49
+ * since we use 9 words of 15 bits each, and 15*9 = 135).
50
+ */
51
+ static const uint16_t R2[] = {
52
+ 0x008A,
53
+ 0x6400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
54
+ };
55
+
56
+ /*
57
+ * Perform the inner processing of blocks for Poly1305. The "r" array
58
+ * is in Montgomery representation, while the "a" array is not.
59
+ */
60
+ static void
61
+ poly1305_inner(uint16_t *a, const uint16_t *r, const void *data, size_t len)
62
+ {
63
+ const unsigned char *buf;
64
+
65
+ buf = data;
66
+ while (len > 0) {
67
+ unsigned char tmp[16], rev[16];
68
+ uint16_t b[10];
69
+ uint32_t ctl;
70
+ int i;
71
+
72
+ /*
73
+ * If there is a partial block, right-pad it with zeros.
74
+ */
75
+ if (len < 16) {
76
+ memset(tmp, 0, sizeof tmp);
77
+ memcpy(tmp, buf, len);
78
+ buf = tmp;
79
+ len = 16;
80
+ }
81
+
82
+ /*
83
+ * Decode next block and apply the "high bit". Since
84
+ * decoding is little-endian, we must byte-swap the buffer.
85
+ */
86
+ for (i = 0; i < 16; i ++) {
87
+ rev[i] = buf[15 - i];
88
+ }
89
+ br_i15_decode_mod(b, rev, sizeof rev, P1305);
90
+ b[9] |= 0x0100;
91
+
92
+ /*
93
+ * Add the accumulator to the decoded block (modular
94
+ * addition).
95
+ */
96
+ ctl = br_i15_add(b, a, 1);
97
+ ctl |= NOT(br_i15_sub(b, P1305, 0));
98
+ br_i15_sub(b, P1305, ctl);
99
+
100
+ /*
101
+ * Multiply by r, result is the new accumulator value.
102
+ */
103
+ br_i15_montymul(a, b, r, P1305, P0I);
104
+
105
+ buf += 16;
106
+ len -= 16;
107
+ }
108
+ }
109
+
110
+ /*
111
+ * Byteswap a 16-byte value.
112
+ */
113
+ static void
114
+ byteswap16(unsigned char *buf)
115
+ {
116
+ int i;
117
+
118
+ for (i = 0; i < 8; i ++) {
119
+ unsigned x;
120
+
121
+ x = buf[i];
122
+ buf[i] = buf[15 - i];
123
+ buf[15 - i] = x;
124
+ }
125
+ }
126
+
127
+ /* see bearssl_block.h */
128
+ void
129
+ br_poly1305_i15_run(const void *key, const void *iv,
130
+ void *data, size_t len, const void *aad, size_t aad_len,
131
+ void *tag, br_chacha20_run ichacha, int encrypt)
132
+ {
133
+ unsigned char pkey[32], foot[16];
134
+ uint16_t t[10], r[10], acc[10];
135
+
136
+ /*
137
+ * Compute the MAC key. The 'r' value is the first 16 bytes of
138
+ * pkey[].
139
+ */
140
+ memset(pkey, 0, sizeof pkey);
141
+ ichacha(key, iv, 0, pkey, sizeof pkey);
142
+
143
+ /*
144
+ * If encrypting, ChaCha20 must run first, followed by Poly1305.
145
+ * When decrypting, the operations are reversed.
146
+ */
147
+ if (encrypt) {
148
+ ichacha(key, iv, 1, data, len);
149
+ }
150
+
151
+ /*
152
+ * Run Poly1305. We must process the AAD, then ciphertext, then
153
+ * the footer (with the lengths). Note that the AAD and ciphertext
154
+ * are meant to be padded with zeros up to the next multiple of 16,
155
+ * and the length of the footer is 16 bytes as well.
156
+ */
157
+
158
+ /*
159
+ * Apply the "clamping" operation on the encoded 'r' value.
160
+ */
161
+ pkey[ 3] &= 0x0F;
162
+ pkey[ 7] &= 0x0F;
163
+ pkey[11] &= 0x0F;
164
+ pkey[15] &= 0x0F;
165
+ pkey[ 4] &= 0xFC;
166
+ pkey[ 8] &= 0xFC;
167
+ pkey[12] &= 0xFC;
168
+
169
+ /*
170
+ * Decode the clamped 'r' value. Decoding should use little-endian
171
+ * so we must byteswap the value first.
172
+ */
173
+ byteswap16(pkey);
174
+ br_i15_decode_mod(t, pkey, 16, P1305);
175
+
176
+ /*
177
+ * Convert 'r' to Montgomery representation.
178
+ */
179
+ br_i15_montymul(r, t, R2, P1305, P0I);
180
+
181
+ /*
182
+ * Accumulator is 0.
183
+ */
184
+ br_i15_zero(acc, 0x8A);
185
+
186
+ /*
187
+ * Process the additional authenticated data, ciphertext, and
188
+ * footer in due order.
189
+ */
190
+ br_enc64le(foot, (uint64_t)aad_len);
191
+ br_enc64le(foot + 8, (uint64_t)len);
192
+ poly1305_inner(acc, r, aad, aad_len);
193
+ poly1305_inner(acc, r, data, len);
194
+ poly1305_inner(acc, r, foot, sizeof foot);
195
+
196
+ /*
197
+ * Decode the value 's'. Again, a byteswap is needed.
198
+ */
199
+ byteswap16(pkey + 16);
200
+ br_i15_decode_mod(t, pkey + 16, 16, P1305);
201
+
202
+ /*
203
+ * Add the value 's' to the accumulator. That addition is done
204
+ * modulo 2^128, so we just ignore the carry.
205
+ */
206
+ br_i15_add(acc, t, 1);
207
+
208
+ /*
209
+ * Encode the result (128 low bits) to the tag. Encoding should
210
+ * be little-endian.
211
+ */
212
+ br_i15_encode(tag, 16, acc);
213
+ byteswap16(tag);
214
+
215
+ /*
216
+ * If decrypting, then ChaCha20 runs _after_ Poly1305.
217
+ */
218
+ if (!encrypt) {
219
+ ichacha(key, iv, 1, data, len);
220
+ }
221
+ }