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,411 @@
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
+ #define BR_POWER_ASM_MACROS 1
26
+ #include "inner.h"
27
+
28
+ /*
29
+ * This is the GHASH implementation that leverages the POWER8 opcodes.
30
+ */
31
+
32
+ #if BR_POWER8
33
+
34
+ /*
35
+ * Some symbolic names for registers.
36
+ * HB0 = 16 bytes of value 0
37
+ * HB1 = 16 bytes of value 1
38
+ * HB2 = 16 bytes of value 2
39
+ * HB6 = 16 bytes of value 6
40
+ * HB7 = 16 bytes of value 7
41
+ * TT0, TT1 and TT2 are temporaries
42
+ *
43
+ * BSW holds the pattern for byteswapping 32-bit words; this is set only
44
+ * on little-endian systems. XBSW is the same register with the +32 offset
45
+ * for access with the VSX opcodes.
46
+ */
47
+ #define HB0 0
48
+ #define HB1 1
49
+ #define HB2 2
50
+ #define HB6 3
51
+ #define HB7 4
52
+ #define TT0 5
53
+ #define TT1 6
54
+ #define TT2 7
55
+
56
+ #define BSW 8
57
+ #define XBSW 40
58
+
59
+ /*
60
+ * Macro to initialise the constants.
61
+ */
62
+ #define INIT \
63
+ vxor(HB0, HB0, HB0) \
64
+ vspltisb(HB1, 1) \
65
+ vspltisb(HB2, 2) \
66
+ vspltisb(HB6, 6) \
67
+ vspltisb(HB7, 7) \
68
+ INIT_BSW
69
+
70
+ /*
71
+ * Fix endianness of a value after reading it or before writing it, if
72
+ * necessary.
73
+ */
74
+ #if BR_POWER8_LE
75
+ #define INIT_BSW lxvw4x(XBSW, 0, %[idx2be])
76
+ #define FIX_ENDIAN(xx) vperm(xx, xx, xx, BSW)
77
+ #else
78
+ #define INIT_BSW
79
+ #define FIX_ENDIAN(xx)
80
+ #endif
81
+
82
+ /*
83
+ * Left-shift x0:x1 by one bit to the left. This is a corrective action
84
+ * needed because GHASH is defined in full little-endian specification,
85
+ * while the opcodes use full big-endian convention, so the 255-bit product
86
+ * ends up one bit to the right.
87
+ */
88
+ #define SL_256(x0, x1) \
89
+ vsldoi(TT0, HB0, x1, 1) \
90
+ vsl(x0, x0, HB1) \
91
+ vsr(TT0, TT0, HB7) \
92
+ vsl(x1, x1, HB1) \
93
+ vxor(x0, x0, TT0)
94
+
95
+ /*
96
+ * Reduce x0:x1 in GF(2^128), result in xd (register xd may be the same as
97
+ * x0 or x1, or a different register). x0 and x1 are modified.
98
+ */
99
+ #define REDUCE_F128(xd, x0, x1) \
100
+ vxor(x0, x0, x1) \
101
+ vsr(TT0, x1, HB1) \
102
+ vsr(TT1, x1, HB2) \
103
+ vsr(TT2, x1, HB7) \
104
+ vxor(x0, x0, TT0) \
105
+ vxor(TT1, TT1, TT2) \
106
+ vxor(x0, x0, TT1) \
107
+ vsldoi(x1, x1, HB0, 15) \
108
+ vsl(TT1, x1, HB6) \
109
+ vsl(TT2, x1, HB1) \
110
+ vxor(x1, TT1, TT2) \
111
+ vsr(TT0, x1, HB1) \
112
+ vsr(TT1, x1, HB2) \
113
+ vsr(TT2, x1, HB7) \
114
+ vxor(x0, x0, x1) \
115
+ vxor(x0, x0, TT0) \
116
+ vxor(TT1, TT1, TT2) \
117
+ vxor(xd, x0, TT1)
118
+
119
+ /* see bearssl_hash.h */
120
+ void
121
+ br_ghash_pwr8(void *y, const void *h, const void *data, size_t len)
122
+ {
123
+ const unsigned char *buf1, *buf2;
124
+ size_t num4, num1;
125
+ unsigned char tmp[64];
126
+ long cc0, cc1, cc2, cc3;
127
+
128
+ #if BR_POWER8_LE
129
+ static const uint32_t idx2be[] = {
130
+ 0x03020100, 0x07060504, 0x0B0A0908, 0x0F0E0D0C
131
+ };
132
+ #endif
133
+
134
+ buf1 = data;
135
+
136
+ /*
137
+ * Assembly code requires data into two chunks; first chunk
138
+ * must contain a number of blocks which is a multiple of 4.
139
+ * Since the processing for the first chunk is faster, we want
140
+ * to make it as big as possible.
141
+ *
142
+ * For the remainder, there are two possibilities:
143
+ * -- if the remainder size is a multiple of 16, then use it
144
+ * in place;
145
+ * -- otherwise, copy it to the tmp[] array and pad it with
146
+ * zeros.
147
+ */
148
+ num4 = len >> 6;
149
+ buf2 = buf1 + (num4 << 6);
150
+ len &= 63;
151
+ num1 = (len + 15) >> 4;
152
+ if ((len & 15) != 0) {
153
+ memcpy(tmp, buf2, len);
154
+ memset(tmp + len, 0, (num1 << 4) - len);
155
+ buf2 = tmp;
156
+ }
157
+
158
+ cc0 = 0;
159
+ cc1 = 16;
160
+ cc2 = 32;
161
+ cc3 = 48;
162
+ asm volatile (
163
+ INIT
164
+
165
+ /*
166
+ * Load current h (denoted hereafter h1) in v9.
167
+ */
168
+ lxvw4x(41, 0, %[h])
169
+ FIX_ENDIAN(9)
170
+
171
+ /*
172
+ * Load current y into v28.
173
+ */
174
+ lxvw4x(60, 0, %[y])
175
+ FIX_ENDIAN(28)
176
+
177
+ /*
178
+ * Split h1 into three registers:
179
+ * v17 = h1_1:h1_0
180
+ * v18 = 0:h1_0
181
+ * v19 = h1_1:0
182
+ */
183
+ xxpermdi(49, 41, 41, 2)
184
+ vsldoi(18, HB0, 9, 8)
185
+ vsldoi(19, 9, HB0, 8)
186
+
187
+ /*
188
+ * If num4 is 0, skip directly to the second chunk.
189
+ */
190
+ cmpldi(%[num4], 0)
191
+ beq(chunk1)
192
+
193
+ /*
194
+ * Compute h2 = h*h in v10.
195
+ */
196
+ vpmsumd(10, 18, 18)
197
+ vpmsumd(11, 19, 19)
198
+ SL_256(10, 11)
199
+ REDUCE_F128(10, 10, 11)
200
+
201
+ /*
202
+ * Compute h3 = h*h*h in v11.
203
+ * We first split h2 into:
204
+ * v10 = h2_0:h2_1
205
+ * v11 = 0:h2_0
206
+ * v12 = h2_1:0
207
+ * Then we do the product with h1, and reduce into v11.
208
+ */
209
+ vsldoi(11, HB0, 10, 8)
210
+ vsldoi(12, 10, HB0, 8)
211
+ vpmsumd(13, 10, 17)
212
+ vpmsumd(11, 11, 18)
213
+ vpmsumd(12, 12, 19)
214
+ vsldoi(14, HB0, 13, 8)
215
+ vsldoi(15, 13, HB0, 8)
216
+ vxor(11, 11, 14)
217
+ vxor(12, 12, 15)
218
+ SL_256(11, 12)
219
+ REDUCE_F128(11, 11, 12)
220
+
221
+ /*
222
+ * Compute h4 = h*h*h*h in v12. This is done by squaring h2.
223
+ */
224
+ vsldoi(12, HB0, 10, 8)
225
+ vsldoi(13, 10, HB0, 8)
226
+ vpmsumd(12, 12, 12)
227
+ vpmsumd(13, 13, 13)
228
+ SL_256(12, 13)
229
+ REDUCE_F128(12, 12, 13)
230
+
231
+ /*
232
+ * Repack h1, h2, h3 and h4:
233
+ * v13 = h4_0:h3_0
234
+ * v14 = h4_1:h3_1
235
+ * v15 = h2_0:h1_0
236
+ * v16 = h2_1:h1_1
237
+ */
238
+ xxpermdi(45, 44, 43, 0)
239
+ xxpermdi(46, 44, 43, 3)
240
+ xxpermdi(47, 42, 41, 0)
241
+ xxpermdi(48, 42, 41, 3)
242
+
243
+ /*
244
+ * Loop for each group of four blocks.
245
+ */
246
+ mtctr(%[num4])
247
+ label(loop4)
248
+ /*
249
+ * Read the four next blocks.
250
+ * v20 = y + a0 = b0
251
+ * v21 = a1 = b1
252
+ * v22 = a2 = b2
253
+ * v23 = a3 = b3
254
+ */
255
+ lxvw4x(52, %[cc0], %[buf1])
256
+ lxvw4x(53, %[cc1], %[buf1])
257
+ lxvw4x(54, %[cc2], %[buf1])
258
+ lxvw4x(55, %[cc3], %[buf1])
259
+ FIX_ENDIAN(20)
260
+ FIX_ENDIAN(21)
261
+ FIX_ENDIAN(22)
262
+ FIX_ENDIAN(23)
263
+ addi(%[buf1], %[buf1], 64)
264
+ vxor(20, 20, 28)
265
+
266
+ /*
267
+ * Repack the blocks into v9, v10, v11 and v12.
268
+ * v9 = b0_0:b1_0
269
+ * v10 = b0_1:b1_1
270
+ * v11 = b2_0:b3_0
271
+ * v12 = b2_1:b3_1
272
+ */
273
+ xxpermdi(41, 52, 53, 0)
274
+ xxpermdi(42, 52, 53, 3)
275
+ xxpermdi(43, 54, 55, 0)
276
+ xxpermdi(44, 54, 55, 3)
277
+
278
+ /*
279
+ * Compute the products.
280
+ * v20 = b0_0*h4_0 + b1_0*h3_0
281
+ * v21 = b0_1*h4_0 + b1_1*h3_0
282
+ * v22 = b0_0*h4_1 + b1_0*h3_1
283
+ * v23 = b0_1*h4_1 + b1_1*h3_1
284
+ * v24 = b2_0*h2_0 + b3_0*h1_0
285
+ * v25 = b2_1*h2_0 + b3_1*h1_0
286
+ * v26 = b2_0*h2_1 + b3_0*h1_1
287
+ * v27 = b2_1*h2_1 + b3_1*h1_1
288
+ */
289
+ vpmsumd(20, 13, 9)
290
+ vpmsumd(21, 13, 10)
291
+ vpmsumd(22, 14, 9)
292
+ vpmsumd(23, 14, 10)
293
+ vpmsumd(24, 15, 11)
294
+ vpmsumd(25, 15, 12)
295
+ vpmsumd(26, 16, 11)
296
+ vpmsumd(27, 16, 12)
297
+
298
+ /*
299
+ * Sum products into a single 256-bit result in v11:v12.
300
+ */
301
+ vxor(11, 20, 24)
302
+ vxor(12, 23, 27)
303
+ vxor( 9, 21, 22)
304
+ vxor(10, 25, 26)
305
+ vxor(20, 9, 10)
306
+ vsldoi( 9, HB0, 20, 8)
307
+ vsldoi(10, 20, HB0, 8)
308
+ vxor(11, 11, 9)
309
+ vxor(12, 12, 10)
310
+
311
+ /*
312
+ * Fix and reduce in GF(2^128); this is the new y (in v28).
313
+ */
314
+ SL_256(11, 12)
315
+ REDUCE_F128(28, 11, 12)
316
+
317
+ /*
318
+ * Loop for next group of four blocks.
319
+ */
320
+ bdnz(loop4)
321
+
322
+ /*
323
+ * Process second chunk, one block at a time.
324
+ */
325
+ label(chunk1)
326
+ cmpldi(%[num1], 0)
327
+ beq(done)
328
+
329
+ mtctr(%[num1])
330
+ label(loop1)
331
+ /*
332
+ * Load next data block and XOR it into y.
333
+ */
334
+ lxvw4x(41, 0, %[buf2])
335
+ #if BR_POWER8_LE
336
+ FIX_ENDIAN(9)
337
+ #endif
338
+ addi(%[buf2], %[buf2], 16)
339
+ vxor(9, 28, 9)
340
+
341
+ /*
342
+ * Split y into doublewords:
343
+ * v9 = y_0:y_1
344
+ * v10 = 0:y_0
345
+ * v11 = y_1:0
346
+ */
347
+ vsldoi(10, HB0, 9, 8)
348
+ vsldoi(11, 9, HB0, 8)
349
+
350
+ /*
351
+ * Compute products with h:
352
+ * v12 = y_0 * h_0
353
+ * v13 = y_1 * h_1
354
+ * v14 = y_1 * h_0 + y_0 * h_1
355
+ */
356
+ vpmsumd(14, 9, 17)
357
+ vpmsumd(12, 10, 18)
358
+ vpmsumd(13, 11, 19)
359
+
360
+ /*
361
+ * Propagate v14 into v12:v13 to finalise product.
362
+ */
363
+ vsldoi(10, HB0, 14, 8)
364
+ vsldoi(11, 14, HB0, 8)
365
+ vxor(12, 12, 10)
366
+ vxor(13, 13, 11)
367
+
368
+ /*
369
+ * Fix result and reduce into v28 (next value for y).
370
+ */
371
+ SL_256(12, 13)
372
+ REDUCE_F128(28, 12, 13)
373
+ bdnz(loop1)
374
+
375
+ label(done)
376
+ /*
377
+ * Write back the new y.
378
+ */
379
+ FIX_ENDIAN(28)
380
+ stxvw4x(60, 0, %[y])
381
+
382
+ : [buf1] "+b" (buf1), [buf2] "+b" (buf2)
383
+ : [y] "b" (y), [h] "b" (h), [num4] "b" (num4), [num1] "b" (num1),
384
+ [cc0] "b" (cc0), [cc1] "b" (cc1), [cc2] "b" (cc2), [cc3] "b" (cc3)
385
+ #if BR_POWER8_LE
386
+ , [idx2be] "b" (idx2be)
387
+ #endif
388
+ : "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
389
+ "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19",
390
+ "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29",
391
+ "ctr", "memory"
392
+ );
393
+ }
394
+
395
+ /* see bearssl_hash.h */
396
+ br_ghash
397
+ br_ghash_pwr8_get(void)
398
+ {
399
+ return &br_ghash_pwr8;
400
+ }
401
+
402
+ #else
403
+
404
+ /* see bearssl_hash.h */
405
+ br_ghash
406
+ br_ghash_pwr8_get(void)
407
+ {
408
+ return 0;
409
+ }
410
+
411
+ #endif
@@ -0,0 +1,208 @@
1
+ /*
2
+ * Copyright (c) 2016 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 F(B, C, D) ((((C) ^ (D)) & (B)) ^ (D))
28
+ #define G(B, C, D) ((((C) ^ (B)) & (D)) ^ (C))
29
+ #define H(B, C, D) ((B) ^ (C) ^ (D))
30
+ #define I(B, C, D) ((C) ^ ((B) | ~(D)))
31
+
32
+ #define ROTL(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
33
+
34
+ /* see inner.h */
35
+ const uint32_t br_md5_IV[4] = {
36
+ 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476
37
+ };
38
+
39
+ static const uint32_t K[64] = {
40
+ 0xD76AA478, 0xE8C7B756, 0x242070DB, 0xC1BDCEEE,
41
+ 0xF57C0FAF, 0x4787C62A, 0xA8304613, 0xFD469501,
42
+ 0x698098D8, 0x8B44F7AF, 0xFFFF5BB1, 0x895CD7BE,
43
+ 0x6B901122, 0xFD987193, 0xA679438E, 0x49B40821,
44
+
45
+ 0xF61E2562, 0xC040B340, 0x265E5A51, 0xE9B6C7AA,
46
+ 0xD62F105D, 0x02441453, 0xD8A1E681, 0xE7D3FBC8,
47
+ 0x21E1CDE6, 0xC33707D6, 0xF4D50D87, 0x455A14ED,
48
+ 0xA9E3E905, 0xFCEFA3F8, 0x676F02D9, 0x8D2A4C8A,
49
+
50
+ 0xFFFA3942, 0x8771F681, 0x6D9D6122, 0xFDE5380C,
51
+ 0xA4BEEA44, 0x4BDECFA9, 0xF6BB4B60, 0xBEBFBC70,
52
+ 0x289B7EC6, 0xEAA127FA, 0xD4EF3085, 0x04881D05,
53
+ 0xD9D4D039, 0xE6DB99E5, 0x1FA27CF8, 0xC4AC5665,
54
+
55
+ 0xF4292244, 0x432AFF97, 0xAB9423A7, 0xFC93A039,
56
+ 0x655B59C3, 0x8F0CCC92, 0xFFEFF47D, 0x85845DD1,
57
+ 0x6FA87E4F, 0xFE2CE6E0, 0xA3014314, 0x4E0811A1,
58
+ 0xF7537E82, 0xBD3AF235, 0x2AD7D2BB, 0xEB86D391
59
+ };
60
+
61
+ static const unsigned char MP[48] = {
62
+ 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12,
63
+ 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2,
64
+ 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9
65
+ };
66
+
67
+ /* see inner.h */
68
+ void
69
+ br_md5_round(const unsigned char *buf, uint32_t *val)
70
+ {
71
+ uint32_t m[16];
72
+ uint32_t a, b, c, d;
73
+ int i;
74
+
75
+ a = val[0];
76
+ b = val[1];
77
+ c = val[2];
78
+ d = val[3];
79
+ /* obsolete
80
+ for (i = 0; i < 16; i ++) {
81
+ m[i] = br_dec32le(buf + (i << 2));
82
+ }
83
+ */
84
+ br_range_dec32le(m, 16, buf);
85
+
86
+ for (i = 0; i < 16; i += 4) {
87
+ a = b + ROTL(a + F(b, c, d) + m[i + 0] + K[i + 0], 7);
88
+ d = a + ROTL(d + F(a, b, c) + m[i + 1] + K[i + 1], 12);
89
+ c = d + ROTL(c + F(d, a, b) + m[i + 2] + K[i + 2], 17);
90
+ b = c + ROTL(b + F(c, d, a) + m[i + 3] + K[i + 3], 22);
91
+ }
92
+ for (i = 16; i < 32; i += 4) {
93
+ a = b + ROTL(a + G(b, c, d) + m[MP[i - 16]] + K[i + 0], 5);
94
+ d = a + ROTL(d + G(a, b, c) + m[MP[i - 15]] + K[i + 1], 9);
95
+ c = d + ROTL(c + G(d, a, b) + m[MP[i - 14]] + K[i + 2], 14);
96
+ b = c + ROTL(b + G(c, d, a) + m[MP[i - 13]] + K[i + 3], 20);
97
+ }
98
+ for (i = 32; i < 48; i += 4) {
99
+ a = b + ROTL(a + H(b, c, d) + m[MP[i - 16]] + K[i + 0], 4);
100
+ d = a + ROTL(d + H(a, b, c) + m[MP[i - 15]] + K[i + 1], 11);
101
+ c = d + ROTL(c + H(d, a, b) + m[MP[i - 14]] + K[i + 2], 16);
102
+ b = c + ROTL(b + H(c, d, a) + m[MP[i - 13]] + K[i + 3], 23);
103
+ }
104
+ for (i = 48; i < 64; i += 4) {
105
+ a = b + ROTL(a + I(b, c, d) + m[MP[i - 16]] + K[i + 0], 6);
106
+ d = a + ROTL(d + I(a, b, c) + m[MP[i - 15]] + K[i + 1], 10);
107
+ c = d + ROTL(c + I(d, a, b) + m[MP[i - 14]] + K[i + 2], 15);
108
+ b = c + ROTL(b + I(c, d, a) + m[MP[i - 13]] + K[i + 3], 21);
109
+ }
110
+
111
+ val[0] += a;
112
+ val[1] += b;
113
+ val[2] += c;
114
+ val[3] += d;
115
+ }
116
+
117
+ /* see bearssl.h */
118
+ void
119
+ br_md5_init(br_md5_context *cc)
120
+ {
121
+ cc->vtable = &br_md5_vtable;
122
+ memcpy(cc->val, br_md5_IV, sizeof cc->val);
123
+ cc->count = 0;
124
+ }
125
+
126
+ /* see bearssl.h */
127
+ void
128
+ br_md5_update(br_md5_context *cc, const void *data, size_t len)
129
+ {
130
+ const unsigned char *buf;
131
+ size_t ptr;
132
+
133
+ buf = data;
134
+ ptr = (size_t)cc->count & 63;
135
+ while (len > 0) {
136
+ size_t clen;
137
+
138
+ clen = 64 - ptr;
139
+ if (clen > len) {
140
+ clen = len;
141
+ }
142
+ memcpy(cc->buf + ptr, buf, clen);
143
+ ptr += clen;
144
+ buf += clen;
145
+ len -= clen;
146
+ cc->count += (uint64_t)clen;
147
+ if (ptr == 64) {
148
+ br_md5_round(cc->buf, cc->val);
149
+ ptr = 0;
150
+ }
151
+ }
152
+ }
153
+
154
+ /* see bearssl.h */
155
+ void
156
+ br_md5_out(const br_md5_context *cc, void *dst)
157
+ {
158
+ unsigned char buf[64];
159
+ uint32_t val[4];
160
+ size_t ptr;
161
+
162
+ ptr = (size_t)cc->count & 63;
163
+ memcpy(buf, cc->buf, ptr);
164
+ memcpy(val, cc->val, sizeof val);
165
+ buf[ptr ++] = 0x80;
166
+ if (ptr > 56) {
167
+ memset(buf + ptr, 0, 64 - ptr);
168
+ br_md5_round(buf, val);
169
+ memset(buf, 0, 56);
170
+ } else {
171
+ memset(buf + ptr, 0, 56 - ptr);
172
+ }
173
+ br_enc64le(buf + 56, cc->count << 3);
174
+ br_md5_round(buf, val);
175
+ br_range_enc32le(dst, val, 4);
176
+ }
177
+
178
+ /* see bearssl.h */
179
+ uint64_t
180
+ br_md5_state(const br_md5_context *cc, void *dst)
181
+ {
182
+ br_range_enc32le(dst, cc->val, 4);
183
+ return cc->count;
184
+ }
185
+
186
+ /* see bearssl.h */
187
+ void
188
+ br_md5_set_state(br_md5_context *cc, const void *stb, uint64_t count)
189
+ {
190
+ br_range_dec32le(cc->val, 4, stb);
191
+ cc->count = count;
192
+ }
193
+
194
+ /* see bearssl.h */
195
+ const br_hash_class br_md5_vtable = {
196
+ sizeof(br_md5_context),
197
+ BR_HASHDESC_ID(br_md5_ID)
198
+ | BR_HASHDESC_OUT(16)
199
+ | BR_HASHDESC_STATE(16)
200
+ | BR_HASHDESC_LBLEN(6)
201
+ | BR_HASHDESC_MD_PADDING,
202
+ (void (*)(const br_hash_class **))&br_md5_init,
203
+ (void (*)(const br_hash_class **, const void *, size_t))&br_md5_update,
204
+ (void (*)(const br_hash_class *const *, void *))&br_md5_out,
205
+ (uint64_t (*)(const br_hash_class *const *, void *))&br_md5_state,
206
+ (void (*)(const br_hash_class **, const void *, uint64_t))
207
+ &br_md5_set_state
208
+ };