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,1722 @@
1
+ /* Automatically generated code; do not modify directly. */
2
+
3
+ #include <stddef.h>
4
+ #include <stdint.h>
5
+
6
+ typedef struct {
7
+ uint32_t *dp;
8
+ uint32_t *rp;
9
+ const unsigned char *ip;
10
+ } t0_context;
11
+
12
+ static uint32_t
13
+ t0_parse7E_unsigned(const unsigned char **p)
14
+ {
15
+ uint32_t x;
16
+
17
+ x = 0;
18
+ for (;;) {
19
+ unsigned y;
20
+
21
+ y = *(*p) ++;
22
+ x = (x << 7) | (uint32_t)(y & 0x7F);
23
+ if (y < 0x80) {
24
+ return x;
25
+ }
26
+ }
27
+ }
28
+
29
+ static int32_t
30
+ t0_parse7E_signed(const unsigned char **p)
31
+ {
32
+ int neg;
33
+ uint32_t x;
34
+
35
+ neg = ((**p) >> 6) & 1;
36
+ x = (uint32_t)-neg;
37
+ for (;;) {
38
+ unsigned y;
39
+
40
+ y = *(*p) ++;
41
+ x = (x << 7) | (uint32_t)(y & 0x7F);
42
+ if (y < 0x80) {
43
+ if (neg) {
44
+ return -(int32_t)~x - 1;
45
+ } else {
46
+ return (int32_t)x;
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ #define T0_VBYTE(x, n) (unsigned char)((((uint32_t)(x) >> (n)) & 0x7F) | 0x80)
53
+ #define T0_FBYTE(x, n) (unsigned char)(((uint32_t)(x) >> (n)) & 0x7F)
54
+ #define T0_SBYTE(x) (unsigned char)((((uint32_t)(x) >> 28) + 0xF8) ^ 0xF8)
55
+ #define T0_INT1(x) T0_FBYTE(x, 0)
56
+ #define T0_INT2(x) T0_VBYTE(x, 7), T0_FBYTE(x, 0)
57
+ #define T0_INT3(x) T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
58
+ #define T0_INT4(x) T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
59
+ #define T0_INT5(x) T0_SBYTE(x), T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
60
+
61
+ /* static const unsigned char t0_datablock[]; */
62
+
63
+
64
+ void br_x509_minimal_init_main(void *t0ctx);
65
+
66
+ void br_x509_minimal_run(void *t0ctx);
67
+
68
+
69
+
70
+ #include "inner.h"
71
+
72
+
73
+
74
+
75
+
76
+ #include "inner.h"
77
+
78
+ /*
79
+ * Implementation Notes
80
+ * --------------------
81
+ *
82
+ * The C code pushes the data by chunks; all decoding is done in the
83
+ * T0 code. The cert_length value is set to the certificate length when
84
+ * a new certificate is started; the T0 code picks it up as outer limit,
85
+ * and decoding functions use it to ensure that no attempt is made at
86
+ * reading past it. The T0 code also checks that once the certificate is
87
+ * decoded, there are no trailing bytes.
88
+ *
89
+ * The T0 code sets cert_length to 0 when the certificate is fully
90
+ * decoded.
91
+ *
92
+ * The C code must still perform two checks:
93
+ *
94
+ * -- If the certificate length is 0, then the T0 code will not be
95
+ * invoked at all. This invalid condition must thus be reported by the
96
+ * C code.
97
+ *
98
+ * -- When reaching the end of certificate, the C code must verify that
99
+ * the certificate length has been set to 0, thereby signaling that
100
+ * the T0 code properly decoded a certificate.
101
+ *
102
+ * Processing of a chain works in the following way:
103
+ *
104
+ * -- The error flag is set to a non-zero value when validation is
105
+ * finished. The value is either BR_ERR_X509_OK (validation is
106
+ * successful) or another non-zero error code. When a non-zero error
107
+ * code is obtained, the remaining bytes in the current certificate and
108
+ * the subsequent certificates (if any) are completely ignored.
109
+ *
110
+ * -- Each certificate is decoded in due course, with the following
111
+ * "interesting points":
112
+ *
113
+ * -- Start of the TBS: the multihash engine is reset and activated.
114
+ *
115
+ * -- Start of the issuer DN: the secondary hash engine is started,
116
+ * to process the encoded issuer DN.
117
+ *
118
+ * -- End of the issuer DN: the secondary hash engine is stopped. The
119
+ * resulting hash value is computed and then copied into the
120
+ * next_dn_hash[] buffer.
121
+ *
122
+ * -- Start of the subject DN: the secondary hash engine is started,
123
+ * to process the encoded subject DN.
124
+ *
125
+ * -- For the EE certificate only: the Common Name, if any, is matched
126
+ * against the expected server name.
127
+ *
128
+ * -- End of the subject DN: the secondary hash engine is stopped. The
129
+ * resulting hash value is computed into the pad. It is then processed:
130
+ *
131
+ * -- If this is the EE certificate, then the hash is ignored
132
+ * (except for direct trust processing, see later; the hash is
133
+ * simply left in current_dn_hash[]).
134
+ *
135
+ * -- Otherwise, the hashed subject DN is compared with the saved
136
+ * hash value (in saved_dn_hash[]). They must match.
137
+ *
138
+ * Either way, the next_dn_hash[] value is then copied into the
139
+ * saved_dn_hash[] value. Thus, at that point, saved_dn_hash[]
140
+ * contains the hash of the issuer DN for the current certificate,
141
+ * and current_dn_hash[] contains the hash of the subject DN for the
142
+ * current certificate.
143
+ *
144
+ * -- Public key: it is decoded into the cert_pkey[] buffer. Unknown
145
+ * key types are reported at that point.
146
+ *
147
+ * -- If this is the EE certificate, then the key type is compared
148
+ * with the expected key type (initialization parameter). The public
149
+ * key data is copied to ee_pkey_data[]. The key and hashed subject
150
+ * DN are also compared with the "direct trust" keys; if the key
151
+ * and DN are matched, then validation ends with a success.
152
+ *
153
+ * -- Otherwise, the saved signature (cert_sig[]) is verified
154
+ * against the saved TBS hash (tbs_hash[]) and that freshly
155
+ * decoded public key. Failure here ends validation with an error.
156
+ *
157
+ * -- Extensions: extension values are processed in due order.
158
+ *
159
+ * -- Basic Constraints: for all certificates except EE, must be
160
+ * present, indicate a CA, and have a path length compatible with
161
+ * the chain length so far.
162
+ *
163
+ * -- Key Usage: for the EE, if present, must allow signatures
164
+ * or encryption/key exchange, as required for the cipher suite.
165
+ * For non-EE, if present, must have the "certificate sign" bit.
166
+ *
167
+ * -- Subject Alt Name: for the EE, dNSName names are matched
168
+ * against the server name. Ignored for non-EE.
169
+ *
170
+ * -- Authority Key Identifier, Subject Key Identifier, Issuer
171
+ * Alt Name, Subject Directory Attributes, CRL Distribution Points
172
+ * Freshest CRL, Authority Info Access and Subject Info Access
173
+ * extensions are always ignored: they either contain only
174
+ * informative data, or they relate to revocation processing, which
175
+ * we explicitly do not support.
176
+ *
177
+ * -- All other extensions are ignored if non-critical. If a
178
+ * critical extension other than the ones above is encountered,
179
+ * then a failure is reported.
180
+ *
181
+ * -- End of the TBS: the multihash engine is stopped.
182
+ *
183
+ * -- Signature algorithm: the signature algorithm on the
184
+ * certificate is decoded. A failure is reported if that algorithm
185
+ * is unknown. The hashed TBS corresponding to the signature hash
186
+ * function is computed and stored in tbs_hash[] (if not supported,
187
+ * then a failure is reported). The hash OID and length are stored
188
+ * in cert_sig_hash_oid and cert_sig_hash_len.
189
+ *
190
+ * -- Signature value: the signature value is copied into the
191
+ * cert_sig[] array.
192
+ *
193
+ * -- Certificate end: the hashed issuer DN (saved_dn_hash[]) is
194
+ * looked up in the trust store (CA trust anchors only); for all
195
+ * that match, the signature (cert_sig[]) is verified against the
196
+ * anchor public key (hashed TBS is in tbs_hash[]). If one of these
197
+ * signatures is valid, then validation ends with a success.
198
+ *
199
+ * -- If the chain end is reached without obtaining a validation success,
200
+ * then validation is reported as failed.
201
+ */
202
+
203
+ #if BR_USE_UNIX_TIME
204
+ #include <time.h>
205
+ #endif
206
+
207
+ #if BR_USE_WIN32_TIME
208
+ #include <windows.h>
209
+ #endif
210
+
211
+ /*
212
+ * The T0 compiler will produce these prototypes declarations in the
213
+ * header.
214
+ *
215
+ void br_x509_minimal_init_main(void *ctx);
216
+ void br_x509_minimal_run(void *ctx);
217
+ */
218
+
219
+ /* see bearssl_x509.h */
220
+ void
221
+ br_x509_minimal_init(br_x509_minimal_context *ctx,
222
+ const br_hash_class *dn_hash_impl,
223
+ const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num)
224
+ {
225
+ memset(ctx, 0, sizeof *ctx);
226
+ ctx->vtable = &br_x509_minimal_vtable;
227
+ ctx->dn_hash_impl = dn_hash_impl;
228
+ ctx->trust_anchors = trust_anchors;
229
+ ctx->trust_anchors_num = trust_anchors_num;
230
+ }
231
+
232
+ static void
233
+ xm_start_chain(const br_x509_class **ctx, const char *server_name)
234
+ {
235
+ br_x509_minimal_context *cc;
236
+ size_t u;
237
+
238
+ cc = (br_x509_minimal_context *)(void *)ctx;
239
+ for (u = 0; u < cc->num_name_elts; u ++) {
240
+ cc->name_elts[u].status = 0;
241
+ cc->name_elts[u].buf[0] = 0;
242
+ }
243
+ memset(&cc->pkey, 0, sizeof cc->pkey);
244
+ cc->num_certs = 0;
245
+ cc->err = 0;
246
+ cc->cpu.dp = cc->dp_stack;
247
+ cc->cpu.rp = cc->rp_stack;
248
+ br_x509_minimal_init_main(&cc->cpu);
249
+ if (server_name == NULL || *server_name == 0) {
250
+ cc->server_name = NULL;
251
+ } else {
252
+ cc->server_name = server_name;
253
+ }
254
+ }
255
+
256
+ static void
257
+ xm_start_cert(const br_x509_class **ctx, uint32_t length)
258
+ {
259
+ br_x509_minimal_context *cc;
260
+
261
+ cc = (br_x509_minimal_context *)(void *)ctx;
262
+ if (cc->err != 0) {
263
+ return;
264
+ }
265
+ if (length == 0) {
266
+ cc->err = BR_ERR_X509_TRUNCATED;
267
+ return;
268
+ }
269
+ cc->cert_length = length;
270
+ }
271
+
272
+ static void
273
+ xm_append(const br_x509_class **ctx, const unsigned char *buf, size_t len)
274
+ {
275
+ br_x509_minimal_context *cc;
276
+
277
+ cc = (br_x509_minimal_context *)(void *)ctx;
278
+ if (cc->err != 0) {
279
+ return;
280
+ }
281
+ cc->hbuf = buf;
282
+ cc->hlen = len;
283
+ br_x509_minimal_run(&cc->cpu);
284
+ }
285
+
286
+ static void
287
+ xm_end_cert(const br_x509_class **ctx)
288
+ {
289
+ br_x509_minimal_context *cc;
290
+
291
+ cc = (br_x509_minimal_context *)(void *)ctx;
292
+ if (cc->err == 0 && cc->cert_length != 0) {
293
+ cc->err = BR_ERR_X509_TRUNCATED;
294
+ }
295
+ cc->num_certs ++;
296
+ }
297
+
298
+ static unsigned
299
+ xm_end_chain(const br_x509_class **ctx)
300
+ {
301
+ br_x509_minimal_context *cc;
302
+
303
+ cc = (br_x509_minimal_context *)(void *)ctx;
304
+ if (cc->err == 0) {
305
+ if (cc->num_certs == 0) {
306
+ cc->err = BR_ERR_X509_EMPTY_CHAIN;
307
+ } else {
308
+ cc->err = BR_ERR_X509_NOT_TRUSTED;
309
+ }
310
+ } else if (cc->err == BR_ERR_X509_OK) {
311
+ return 0;
312
+ }
313
+ return (unsigned)cc->err;
314
+ }
315
+
316
+ static const br_x509_pkey *
317
+ xm_get_pkey(const br_x509_class *const *ctx, unsigned *usages)
318
+ {
319
+ br_x509_minimal_context *cc;
320
+
321
+ cc = (br_x509_minimal_context *)(void *)ctx;
322
+ if (cc->err == BR_ERR_X509_OK
323
+ || cc->err == BR_ERR_X509_NOT_TRUSTED)
324
+ {
325
+ if (usages != NULL) {
326
+ *usages = cc->key_usages;
327
+ }
328
+ return &((br_x509_minimal_context *)(void *)ctx)->pkey;
329
+ } else {
330
+ return NULL;
331
+ }
332
+ }
333
+
334
+ /* see bearssl_x509.h */
335
+ const br_x509_class br_x509_minimal_vtable = {
336
+ sizeof(br_x509_minimal_context),
337
+ xm_start_chain,
338
+ xm_start_cert,
339
+ xm_append,
340
+ xm_end_cert,
341
+ xm_end_chain,
342
+ xm_get_pkey
343
+ };
344
+
345
+ #define CTX ((br_x509_minimal_context *)(void *)((unsigned char *)t0ctx - offsetof(br_x509_minimal_context, cpu)))
346
+ #define CONTEXT_NAME br_x509_minimal_context
347
+
348
+ #define DNHASH_LEN ((CTX->dn_hash_impl->desc >> BR_HASHDESC_OUT_OFF) & BR_HASHDESC_OUT_MASK)
349
+
350
+ /*
351
+ * Hash a DN (from a trust anchor) into the provided buffer. This uses the
352
+ * DN hash implementation and context structure from the X.509 engine
353
+ * context.
354
+ */
355
+ static void
356
+ hash_dn(br_x509_minimal_context *ctx, const void *dn, size_t len,
357
+ unsigned char *out)
358
+ {
359
+ ctx->dn_hash_impl->init(&ctx->dn_hash.vtable);
360
+ ctx->dn_hash_impl->update(&ctx->dn_hash.vtable, dn, len);
361
+ ctx->dn_hash_impl->out(&ctx->dn_hash.vtable, out);
362
+ }
363
+
364
+ /*
365
+ * Compare two big integers for equality. The integers use unsigned big-endian
366
+ * encoding; extra leading bytes (of value 0) are allowed.
367
+ */
368
+ static int
369
+ eqbigint(const unsigned char *b1, size_t len1,
370
+ const unsigned char *b2, size_t len2)
371
+ {
372
+ while (len1 > 0 && *b1 == 0) {
373
+ b1 ++;
374
+ len1 --;
375
+ }
376
+ while (len2 > 0 && *b2 == 0) {
377
+ b2 ++;
378
+ len2 --;
379
+ }
380
+ if (len1 != len2) {
381
+ return 0;
382
+ }
383
+ return memcmp(b1, b2, len1) == 0;
384
+ }
385
+
386
+ /*
387
+ * Compare two strings for equality, in a case-insensitive way. This
388
+ * function handles casing only for ASCII letters.
389
+ */
390
+ static int
391
+ eqnocase(const void *s1, const void *s2, size_t len)
392
+ {
393
+ const unsigned char *buf1, *buf2;
394
+
395
+ buf1 = s1;
396
+ buf2 = s2;
397
+ while (len -- > 0) {
398
+ int x1, x2;
399
+
400
+ x1 = *buf1 ++;
401
+ x2 = *buf2 ++;
402
+ if (x1 >= 'A' && x1 <= 'Z') {
403
+ x1 += 'a' - 'A';
404
+ }
405
+ if (x2 >= 'A' && x2 <= 'Z') {
406
+ x2 += 'a' - 'A';
407
+ }
408
+ if (x1 != x2) {
409
+ return 0;
410
+ }
411
+ }
412
+ return 1;
413
+ }
414
+
415
+ static int verify_signature(br_x509_minimal_context *ctx,
416
+ const br_x509_pkey *pk);
417
+
418
+
419
+
420
+ static const unsigned char t0_datablock[] = {
421
+ 0x00, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x09,
422
+ 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x09, 0x2A, 0x86,
423
+ 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0E, 0x09, 0x2A, 0x86, 0x48, 0x86,
424
+ 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
425
+ 0x01, 0x01, 0x0C, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01,
426
+ 0x0D, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x09, 0x60, 0x86, 0x48, 0x01,
427
+ 0x65, 0x03, 0x04, 0x02, 0x04, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
428
+ 0x04, 0x02, 0x01, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02,
429
+ 0x02, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x07,
430
+ 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x08, 0x2A, 0x86, 0x48, 0xCE,
431
+ 0x3D, 0x03, 0x01, 0x07, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, 0x05, 0x2B,
432
+ 0x81, 0x04, 0x00, 0x23, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x01,
433
+ 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x01, 0x08, 0x2A, 0x86,
434
+ 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
435
+ 0x04, 0x03, 0x03, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x04,
436
+ 0x03, 0x55, 0x04, 0x03, 0x00, 0x1F, 0x03, 0xFC, 0x07, 0x7F, 0x0B, 0x5E,
437
+ 0x0F, 0x1F, 0x12, 0xFE, 0x16, 0xBF, 0x1A, 0x9F, 0x1E, 0x7E, 0x22, 0x3F,
438
+ 0x26, 0x1E, 0x29, 0xDF, 0x00, 0x1F, 0x03, 0xFD, 0x07, 0x9F, 0x0B, 0x7E,
439
+ 0x0F, 0x3F, 0x13, 0x1E, 0x16, 0xDF, 0x1A, 0xBF, 0x1E, 0x9E, 0x22, 0x5F,
440
+ 0x26, 0x3E, 0x29, 0xFF, 0x03, 0x55, 0x1D, 0x13, 0x03, 0x55, 0x1D, 0x0F,
441
+ 0x03, 0x55, 0x1D, 0x11, 0x03, 0x55, 0x1D, 0x20, 0x08, 0x2B, 0x06, 0x01,
442
+ 0x05, 0x05, 0x07, 0x02, 0x01, 0x03, 0x55, 0x1D, 0x23, 0x03, 0x55, 0x1D,
443
+ 0x0E, 0x03, 0x55, 0x1D, 0x12, 0x03, 0x55, 0x1D, 0x09, 0x03, 0x55, 0x1D,
444
+ 0x1F, 0x03, 0x55, 0x1D, 0x2E, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07,
445
+ 0x01, 0x01, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x0B
446
+ };
447
+
448
+ static const unsigned char t0_codeblock[] = {
449
+ 0x00, 0x01, 0x00, 0x0D, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x01,
450
+ 0x00, 0x11, 0x00, 0x00, 0x01, 0x01, 0x09, 0x00, 0x00, 0x01, 0x01, 0x0A,
451
+ 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0x01,
452
+ T0_INT1(BR_ERR_X509_BAD_BOOLEAN), 0x00, 0x00, 0x01,
453
+ T0_INT1(BR_ERR_X509_BAD_DN), 0x00, 0x00, 0x01,
454
+ T0_INT1(BR_ERR_X509_BAD_SERVER_NAME), 0x00, 0x00, 0x01,
455
+ T0_INT1(BR_ERR_X509_BAD_TAG_CLASS), 0x00, 0x00, 0x01,
456
+ T0_INT1(BR_ERR_X509_BAD_TAG_VALUE), 0x00, 0x00, 0x01,
457
+ T0_INT1(BR_ERR_X509_BAD_TIME), 0x00, 0x00, 0x01,
458
+ T0_INT1(BR_ERR_X509_CRITICAL_EXTENSION), 0x00, 0x00, 0x01,
459
+ T0_INT1(BR_ERR_X509_DN_MISMATCH), 0x00, 0x00, 0x01,
460
+ T0_INT1(BR_ERR_X509_EXPIRED), 0x00, 0x00, 0x01,
461
+ T0_INT1(BR_ERR_X509_EXTRA_ELEMENT), 0x00, 0x00, 0x01,
462
+ T0_INT1(BR_ERR_X509_FORBIDDEN_KEY_USAGE), 0x00, 0x00, 0x01,
463
+ T0_INT1(BR_ERR_X509_INDEFINITE_LENGTH), 0x00, 0x00, 0x01,
464
+ T0_INT1(BR_ERR_X509_INNER_TRUNC), 0x00, 0x00, 0x01,
465
+ T0_INT1(BR_ERR_X509_LIMIT_EXCEEDED), 0x00, 0x00, 0x01,
466
+ T0_INT1(BR_ERR_X509_NOT_CA), 0x00, 0x00, 0x01,
467
+ T0_INT1(BR_ERR_X509_NOT_CONSTRUCTED), 0x00, 0x00, 0x01,
468
+ T0_INT1(BR_ERR_X509_NOT_PRIMITIVE), 0x00, 0x00, 0x01,
469
+ T0_INT1(BR_ERR_X509_OVERFLOW), 0x00, 0x00, 0x01,
470
+ T0_INT1(BR_ERR_X509_PARTIAL_BYTE), 0x00, 0x00, 0x01,
471
+ T0_INT1(BR_ERR_X509_UNEXPECTED), 0x00, 0x00, 0x01,
472
+ T0_INT1(BR_ERR_X509_UNSUPPORTED), 0x00, 0x00, 0x01,
473
+ T0_INT1(BR_ERR_X509_WEAK_PUBLIC_KEY), 0x00, 0x00, 0x01,
474
+ T0_INT1(BR_KEYTYPE_EC), 0x00, 0x00, 0x01, T0_INT1(BR_KEYTYPE_RSA),
475
+ 0x00, 0x00, 0x01, T0_INT2(offsetof(CONTEXT_NAME, cert_length)), 0x00,
476
+ 0x00, 0x01, T0_INT2(offsetof(CONTEXT_NAME, cert_sig)), 0x00, 0x00,
477
+ 0x01, T0_INT2(offsetof(CONTEXT_NAME, cert_sig_hash_len)), 0x00, 0x00,
478
+ 0x01, T0_INT2(offsetof(CONTEXT_NAME, cert_sig_hash_oid)), 0x00, 0x00,
479
+ 0x01, T0_INT2(offsetof(CONTEXT_NAME, cert_sig_len)), 0x00, 0x00, 0x01,
480
+ T0_INT2(offsetof(CONTEXT_NAME, cert_signer_key_type)), 0x00, 0x00,
481
+ 0x01, T0_INT2(offsetof(CONTEXT_NAME, current_dn_hash)), 0x00, 0x00,
482
+ 0x01, T0_INT2(offsetof(CONTEXT_NAME, key_usages)), 0x00, 0x00, 0x01,
483
+ T0_INT2(offsetof(br_x509_minimal_context, pkey_data)), 0x01,
484
+ T0_INT2(BR_X509_BUFSIZE_KEY), 0x00, 0x00, 0x01,
485
+ T0_INT2(offsetof(CONTEXT_NAME, min_rsa_size)), 0x00, 0x00, 0x01,
486
+ T0_INT2(offsetof(CONTEXT_NAME, next_dn_hash)), 0x00, 0x00, 0x01,
487
+ T0_INT2(offsetof(CONTEXT_NAME, num_certs)), 0x00, 0x00, 0x01,
488
+ T0_INT2(offsetof(CONTEXT_NAME, pad)), 0x00, 0x00, 0x01,
489
+ T0_INT2(offsetof(CONTEXT_NAME, saved_dn_hash)), 0x00, 0x00, 0x01, 0x80,
490
+ 0x73, 0x00, 0x00, 0x01, 0x80, 0x7C, 0x00, 0x00, 0x01, 0x81, 0x02, 0x00,
491
+ 0x00, 0x8F, 0x05, 0x05, 0x33, 0x41, 0x01, 0x00, 0x00, 0x33, 0x01, 0x0A,
492
+ 0x0E, 0x09, 0x01, 0x9A, 0xFF, 0xB8, 0x00, 0x0A, 0x00, 0x00, 0x01, 0x82,
493
+ 0x19, 0x00, 0x00, 0x01, 0x82, 0x01, 0x00, 0x00, 0x01, 0x81, 0x68, 0x00,
494
+ 0x02, 0x03, 0x00, 0x03, 0x01, 0x26, 0x02, 0x01, 0x13, 0x3A, 0x02, 0x00,
495
+ 0x0F, 0x15, 0x00, 0x00, 0x01, 0x81, 0x74, 0x00, 0x00, 0x05, 0x02, 0x51,
496
+ 0x29, 0x00, 0x00, 0x06, 0x02, 0x52, 0x29, 0x00, 0x00, 0x01, 0x10, 0x74,
497
+ 0x00, 0x00, 0x11, 0x05, 0x02, 0x55, 0x29, 0x71, 0x00, 0x00, 0x11, 0x05,
498
+ 0x02, 0x55, 0x29, 0x72, 0x00, 0x00, 0x06, 0x02, 0x4B, 0x29, 0x00, 0x00,
499
+ 0x01, 0x82, 0x11, 0x00, 0x00, 0x26, 0x21, 0x01, 0x08, 0x0E, 0x3A, 0x3F,
500
+ 0x21, 0x09, 0x00, 0x0B, 0x03, 0x00, 0x5A, 0x2B, 0xAC, 0x38, 0xAC, 0xB0,
501
+ 0x26, 0x01, 0x20, 0x11, 0x06, 0x11, 0x25, 0x71, 0xAA, 0xB0, 0x01, 0x02,
502
+ 0x75, 0xAD, 0x01, 0x02, 0x12, 0x06, 0x02, 0x56, 0x29, 0x76, 0xB0, 0x01,
503
+ 0x02, 0x75, 0xAB, 0xAC, 0xBF, 0x99, 0x64, 0x60, 0x22, 0x16, 0xAC, 0xA4,
504
+ 0x03, 0x01, 0x03, 0x02, 0xA4, 0x02, 0x02, 0x02, 0x01, 0x19, 0x06, 0x02,
505
+ 0x4A, 0x29, 0x76, 0x02, 0x00, 0x06, 0x05, 0x9A, 0x03, 0x03, 0x04, 0x09,
506
+ 0x99, 0x60, 0x67, 0x22, 0x28, 0x05, 0x02, 0x49, 0x29, 0x67, 0x64, 0x22,
507
+ 0x16, 0xAC, 0xAC, 0x9B, 0x05, 0x02, 0x56, 0x29, 0xB9, 0x27, 0x06, 0x27,
508
+ 0xBF, 0xA1, 0xAC, 0x62, 0xA7, 0x03, 0x05, 0x62, 0x3A, 0x02, 0x05, 0x09,
509
+ 0x3A, 0x02, 0x05, 0x0A, 0xA7, 0x03, 0x06, 0x76, 0x63, 0x2A, 0x01, 0x81,
510
+ 0x00, 0x09, 0x02, 0x05, 0x12, 0x06, 0x02, 0x57, 0x29, 0x76, 0x59, 0x03,
511
+ 0x04, 0x04, 0x3A, 0x85, 0x27, 0x06, 0x34, 0x9B, 0x05, 0x02, 0x56, 0x29,
512
+ 0x68, 0x27, 0x06, 0x04, 0x01, 0x17, 0x04, 0x12, 0x69, 0x27, 0x06, 0x04,
513
+ 0x01, 0x18, 0x04, 0x0A, 0x6A, 0x27, 0x06, 0x04, 0x01, 0x19, 0x04, 0x02,
514
+ 0x56, 0x29, 0x03, 0x07, 0x76, 0xA1, 0x26, 0x03, 0x08, 0x26, 0x62, 0x33,
515
+ 0x0D, 0x06, 0x02, 0x4F, 0x29, 0xA2, 0x58, 0x03, 0x04, 0x04, 0x02, 0x56,
516
+ 0x29, 0x76, 0x02, 0x00, 0x06, 0x21, 0x02, 0x04, 0x59, 0x30, 0x11, 0x06,
517
+ 0x08, 0x25, 0x02, 0x05, 0x02, 0x06, 0x1E, 0x04, 0x10, 0x58, 0x30, 0x11,
518
+ 0x06, 0x08, 0x25, 0x02, 0x07, 0x02, 0x08, 0x1D, 0x04, 0x03, 0x56, 0x29,
519
+ 0x25, 0x04, 0x24, 0x02, 0x04, 0x59, 0x30, 0x11, 0x06, 0x08, 0x25, 0x02,
520
+ 0x05, 0x02, 0x06, 0x24, 0x04, 0x10, 0x58, 0x30, 0x11, 0x06, 0x08, 0x25,
521
+ 0x02, 0x07, 0x02, 0x08, 0x23, 0x04, 0x03, 0x56, 0x29, 0x25, 0x26, 0x06,
522
+ 0x01, 0x29, 0x25, 0x01, 0x00, 0x03, 0x09, 0xB1, 0x01, 0x21, 0x8C, 0x01,
523
+ 0x22, 0x8C, 0x26, 0x01, 0x23, 0x11, 0x06, 0x81, 0x26, 0x25, 0x71, 0xAA,
524
+ 0xAC, 0x26, 0x06, 0x81, 0x1A, 0x01, 0x00, 0x03, 0x0A, 0xAC, 0x9B, 0x25,
525
+ 0xB0, 0x26, 0x01, 0x01, 0x11, 0x06, 0x04, 0xA3, 0x03, 0x0A, 0xB0, 0x01,
526
+ 0x04, 0x75, 0xAA, 0x6E, 0x27, 0x06, 0x0F, 0x02, 0x00, 0x06, 0x03, 0xC0,
527
+ 0x04, 0x05, 0x96, 0x01, 0x7F, 0x03, 0x09, 0x04, 0x80, 0x6C, 0x8E, 0x27,
528
+ 0x06, 0x06, 0x02, 0x00, 0x98, 0x04, 0x80, 0x62, 0xC2, 0x27, 0x06, 0x11,
529
+ 0x02, 0x00, 0x06, 0x09, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x03, 0x04,
530
+ 0x01, 0xC0, 0x04, 0x80, 0x4D, 0x70, 0x27, 0x06, 0x0A, 0x02, 0x0A, 0x06,
531
+ 0x03, 0x97, 0x04, 0x01, 0xC0, 0x04, 0x3F, 0x6D, 0x27, 0x06, 0x03, 0xC0,
532
+ 0x04, 0x38, 0xC5, 0x27, 0x06, 0x03, 0xC0, 0x04, 0x31, 0x8D, 0x27, 0x06,
533
+ 0x03, 0xC0, 0x04, 0x2A, 0xC3, 0x27, 0x06, 0x03, 0xC0, 0x04, 0x23, 0x77,
534
+ 0x27, 0x06, 0x03, 0xC0, 0x04, 0x1C, 0x82, 0x27, 0x06, 0x03, 0xC0, 0x04,
535
+ 0x15, 0x6C, 0x27, 0x06, 0x03, 0xC0, 0x04, 0x0E, 0xC4, 0x27, 0x06, 0x03,
536
+ 0xC0, 0x04, 0x07, 0x02, 0x0A, 0x06, 0x02, 0x48, 0x29, 0xC0, 0x76, 0x76,
537
+ 0x04, 0xFE, 0x62, 0x76, 0x76, 0x04, 0x08, 0x01, 0x7F, 0x11, 0x05, 0x02,
538
+ 0x55, 0x29, 0x25, 0x76, 0x39, 0x02, 0x00, 0x06, 0x08, 0x02, 0x03, 0x3B,
539
+ 0x2F, 0x05, 0x02, 0x44, 0x29, 0x02, 0x00, 0x06, 0x01, 0x17, 0x02, 0x00,
540
+ 0x02, 0x09, 0x2F, 0x05, 0x02, 0x50, 0x29, 0xB0, 0x73, 0xAA, 0x9B, 0x06,
541
+ 0x80, 0x77, 0xBA, 0x27, 0x06, 0x07, 0x01, 0x02, 0x59, 0x87, 0x04, 0x80,
542
+ 0x5E, 0xBB, 0x27, 0x06, 0x07, 0x01, 0x03, 0x59, 0x88, 0x04, 0x80, 0x53,
543
+ 0xBC, 0x27, 0x06, 0x07, 0x01, 0x04, 0x59, 0x89, 0x04, 0x80, 0x48, 0xBD,
544
+ 0x27, 0x06, 0x06, 0x01, 0x05, 0x59, 0x8A, 0x04, 0x3E, 0xBE, 0x27, 0x06,
545
+ 0x06, 0x01, 0x06, 0x59, 0x8B, 0x04, 0x34, 0x7C, 0x27, 0x06, 0x06, 0x01,
546
+ 0x02, 0x58, 0x87, 0x04, 0x2A, 0x7D, 0x27, 0x06, 0x06, 0x01, 0x03, 0x58,
547
+ 0x88, 0x04, 0x20, 0x7E, 0x27, 0x06, 0x06, 0x01, 0x04, 0x58, 0x89, 0x04,
548
+ 0x16, 0x7F, 0x27, 0x06, 0x06, 0x01, 0x05, 0x58, 0x8A, 0x04, 0x0C, 0x80,
549
+ 0x27, 0x06, 0x06, 0x01, 0x06, 0x58, 0x8B, 0x04, 0x02, 0x56, 0x29, 0x5D,
550
+ 0x34, 0x5F, 0x36, 0x1C, 0x26, 0x05, 0x02, 0x56, 0x29, 0x5C, 0x36, 0x04,
551
+ 0x02, 0x56, 0x29, 0xBF, 0xA1, 0x26, 0x01, T0_INT2(BR_X509_BUFSIZE_SIG),
552
+ 0x12, 0x06, 0x02, 0x4F, 0x29, 0x26, 0x5E, 0x34, 0x5B, 0xA2, 0x76, 0x76,
553
+ 0x01, 0x00, 0x5A, 0x35, 0x18, 0x00, 0x00, 0x01, 0x30, 0x0A, 0x26, 0x01,
554
+ 0x00, 0x01, 0x09, 0x6F, 0x05, 0x02, 0x47, 0x29, 0x00, 0x00, 0x30, 0x30,
555
+ 0x00, 0x00, 0x01, 0x81, 0x08, 0x00, 0x00, 0x01, 0x81, 0x10, 0x00, 0x00,
556
+ 0x01, 0x81, 0x19, 0x00, 0x00, 0x01, 0x81, 0x22, 0x00, 0x00, 0x01, 0x81,
557
+ 0x2B, 0x00, 0x01, 0x7B, 0x01, 0x01, 0x11, 0x3A, 0x01, 0x83, 0xFD, 0x7F,
558
+ 0x11, 0x15, 0x06, 0x03, 0x3A, 0x25, 0x00, 0x3A, 0x26, 0x03, 0x00, 0x26,
559
+ 0xC6, 0x05, 0x04, 0x41, 0x01, 0x00, 0x00, 0x26, 0x01, 0x81, 0x00, 0x0D,
560
+ 0x06, 0x04, 0x93, 0x04, 0x80, 0x49, 0x26, 0x01, 0x90, 0x00, 0x0D, 0x06,
561
+ 0x0F, 0x01, 0x06, 0x14, 0x01, 0x81, 0x40, 0x2F, 0x93, 0x02, 0x00, 0x01,
562
+ 0x00, 0x94, 0x04, 0x33, 0x26, 0x01, 0x83, 0xFF, 0x7F, 0x0D, 0x06, 0x14,
563
+ 0x01, 0x0C, 0x14, 0x01, 0x81, 0x60, 0x2F, 0x93, 0x02, 0x00, 0x01, 0x06,
564
+ 0x94, 0x02, 0x00, 0x01, 0x00, 0x94, 0x04, 0x17, 0x01, 0x12, 0x14, 0x01,
565
+ 0x81, 0x70, 0x2F, 0x93, 0x02, 0x00, 0x01, 0x0C, 0x94, 0x02, 0x00, 0x01,
566
+ 0x06, 0x94, 0x02, 0x00, 0x01, 0x00, 0x94, 0x00, 0x00, 0x01, 0x82, 0x15,
567
+ 0x00, 0x00, 0x26, 0x01, 0x83, 0xB0, 0x00, 0x01, 0x83, 0xB7, 0x7F, 0x6F,
568
+ 0x00, 0x00, 0x01, 0x81, 0x34, 0x00, 0x00, 0x01, 0x80, 0x6B, 0x00, 0x00,
569
+ 0x01, 0x81, 0x78, 0x00, 0x00, 0x01, 0x3D, 0x00, 0x00, 0x01, 0x80, 0x43,
570
+ 0x00, 0x00, 0x01, 0x80, 0x4D, 0x00, 0x00, 0x01, 0x80, 0x57, 0x00, 0x00,
571
+ 0x01, 0x80, 0x61, 0x00, 0x00, 0x30, 0x11, 0x06, 0x04, 0x41, 0xAA, 0xBF,
572
+ 0xB1, 0x00, 0x00, 0x01, 0x82, 0x09, 0x00, 0x00, 0x01, 0x81, 0x6C, 0x00,
573
+ 0x00, 0x26, 0x01, 0x83, 0xB8, 0x00, 0x01, 0x83, 0xBF, 0x7F, 0x6F, 0x00,
574
+ 0x00, 0x01, 0x30, 0x61, 0x36, 0x01, 0x7F, 0x79, 0x1A, 0x01, 0x00, 0x79,
575
+ 0x1A, 0x04, 0x7A, 0x00, 0x01, 0x81, 0x38, 0x00, 0x01, 0x7B, 0x0D, 0x06,
576
+ 0x02, 0x4E, 0x29, 0x26, 0x03, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x30,
577
+ 0x26, 0x3E, 0x3A, 0x01, 0x82, 0x00, 0x13, 0x2F, 0x06, 0x04, 0x41, 0x01,
578
+ 0x00, 0x00, 0x30, 0x66, 0x09, 0x36, 0x3F, 0x00, 0x00, 0x14, 0x01, 0x3F,
579
+ 0x15, 0x01, 0x81, 0x00, 0x2F, 0x93, 0x00, 0x02, 0x01, 0x00, 0x03, 0x00,
580
+ 0xAC, 0x26, 0x06, 0x80, 0x59, 0xB0, 0x01, 0x20, 0x30, 0x11, 0x06, 0x17,
581
+ 0x25, 0x71, 0xAA, 0x9B, 0x25, 0x01, 0x7F, 0x2E, 0x03, 0x01, 0xB0, 0x01,
582
+ 0x20, 0x74, 0xAA, 0xAF, 0x02, 0x01, 0x20, 0x76, 0x76, 0x04, 0x38, 0x01,
583
+ 0x21, 0x30, 0x11, 0x06, 0x08, 0x25, 0x72, 0xB3, 0x01, 0x01, 0x1F, 0x04,
584
+ 0x2A, 0x01, 0x22, 0x30, 0x11, 0x06, 0x11, 0x25, 0x72, 0xB3, 0x26, 0x06,
585
+ 0x06, 0x2C, 0x02, 0x00, 0x2F, 0x03, 0x00, 0x01, 0x02, 0x1F, 0x04, 0x13,
586
+ 0x01, 0x26, 0x30, 0x11, 0x06, 0x08, 0x25, 0x72, 0xB3, 0x01, 0x06, 0x1F,
587
+ 0x04, 0x05, 0x41, 0xAB, 0x01, 0x00, 0x25, 0x04, 0xFF, 0x23, 0x76, 0x02,
588
+ 0x00, 0x00, 0x00, 0xAC, 0xB1, 0x26, 0x01, 0x01, 0x11, 0x06, 0x08, 0xA3,
589
+ 0x05, 0x02, 0x50, 0x29, 0xB1, 0x04, 0x02, 0x50, 0x29, 0x26, 0x01, 0x02,
590
+ 0x11, 0x06, 0x0C, 0x25, 0x72, 0xAD, 0x65, 0x2B, 0x40, 0x0D, 0x06, 0x02,
591
+ 0x50, 0x29, 0xB1, 0x01, 0x7F, 0x10, 0x06, 0x02, 0x55, 0x29, 0x25, 0x76,
592
+ 0x00, 0x00, 0xAC, 0x26, 0x06, 0x1A, 0xAC, 0x9B, 0x25, 0x26, 0x06, 0x11,
593
+ 0xAC, 0x26, 0x06, 0x0C, 0xAC, 0x9B, 0x25, 0x86, 0x27, 0x05, 0x02, 0x48,
594
+ 0x29, 0xBF, 0x04, 0x71, 0x76, 0x76, 0x04, 0x63, 0x76, 0x00, 0x02, 0x03,
595
+ 0x00, 0xB0, 0x01, 0x03, 0x75, 0xAA, 0xB7, 0x03, 0x01, 0x02, 0x01, 0x01,
596
+ 0x07, 0x12, 0x06, 0x02, 0x55, 0x29, 0x26, 0x01, 0x00, 0x30, 0x11, 0x06,
597
+ 0x05, 0x25, 0x4C, 0x29, 0x04, 0x15, 0x01, 0x01, 0x30, 0x11, 0x06, 0x0A,
598
+ 0x25, 0xB7, 0x02, 0x01, 0x14, 0x02, 0x01, 0x0E, 0x04, 0x05, 0x25, 0xB7,
599
+ 0x01, 0x00, 0x25, 0x02, 0x00, 0x06, 0x19, 0x01, 0x00, 0x30, 0x01, 0x38,
600
+ 0x15, 0x06, 0x03, 0x01, 0x10, 0x2F, 0x3A, 0x01, 0x81, 0x40, 0x15, 0x06,
601
+ 0x03, 0x01, 0x20, 0x2F, 0x61, 0x36, 0x04, 0x07, 0x01, 0x04, 0x15, 0x05,
602
+ 0x02, 0x4C, 0x29, 0xBF, 0x00, 0x00, 0x37, 0xAC, 0xBF, 0x1B, 0x00, 0x03,
603
+ 0x01, 0x00, 0x03, 0x00, 0x37, 0xAC, 0x26, 0x06, 0x30, 0xB0, 0x01, 0x11,
604
+ 0x74, 0xAA, 0x26, 0x05, 0x02, 0x43, 0x29, 0x26, 0x06, 0x20, 0xAC, 0x9B,
605
+ 0x25, 0x84, 0x27, 0x03, 0x01, 0x01, 0x00, 0x2E, 0x03, 0x02, 0xAF, 0x26,
606
+ 0x02, 0x01, 0x15, 0x06, 0x07, 0x2C, 0x06, 0x04, 0x01, 0x7F, 0x03, 0x00,
607
+ 0x02, 0x02, 0x20, 0x76, 0x04, 0x5D, 0x76, 0x04, 0x4D, 0x76, 0x1B, 0x02,
608
+ 0x00, 0x00, 0x00, 0xB0, 0x01, 0x06, 0x75, 0xAE, 0x00, 0x00, 0xB5, 0x83,
609
+ 0x06, 0x0E, 0x3A, 0x26, 0x05, 0x06, 0x41, 0x01, 0x00, 0x01, 0x00, 0x00,
610
+ 0xB5, 0x6B, 0x04, 0x08, 0x8F, 0x06, 0x05, 0x25, 0x01, 0x00, 0x04, 0x00,
611
+ 0x00, 0x00, 0xB6, 0x83, 0x06, 0x0E, 0x3A, 0x26, 0x05, 0x06, 0x41, 0x01,
612
+ 0x00, 0x01, 0x00, 0x00, 0xB6, 0x6B, 0x04, 0x08, 0x8F, 0x06, 0x05, 0x25,
613
+ 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0xB7, 0x26, 0x01, 0x81, 0x00, 0x0D,
614
+ 0x06, 0x04, 0x00, 0x04, 0x80, 0x55, 0x26, 0x01, 0x81, 0x40, 0x0D, 0x06,
615
+ 0x07, 0x25, 0x01, 0x00, 0x00, 0x04, 0x80, 0x47, 0x26, 0x01, 0x81, 0x60,
616
+ 0x0D, 0x06, 0x0E, 0x01, 0x1F, 0x15, 0x01, 0x01, 0xA0, 0x01, 0x81, 0x00,
617
+ 0x01, 0x8F, 0x7F, 0x04, 0x32, 0x26, 0x01, 0x81, 0x70, 0x0D, 0x06, 0x0F,
618
+ 0x01, 0x0F, 0x15, 0x01, 0x02, 0xA0, 0x01, 0x90, 0x00, 0x01, 0x83, 0xFF,
619
+ 0x7F, 0x04, 0x1C, 0x26, 0x01, 0x81, 0x78, 0x0D, 0x06, 0x11, 0x01, 0x07,
620
+ 0x15, 0x01, 0x03, 0xA0, 0x01, 0x84, 0x80, 0x00, 0x01, 0x80, 0xC3, 0xFF,
621
+ 0x7F, 0x04, 0x04, 0x25, 0x01, 0x00, 0x00, 0x6F, 0x05, 0x03, 0x25, 0x01,
622
+ 0x00, 0x00, 0x00, 0x3A, 0x26, 0x05, 0x06, 0x41, 0x01, 0x00, 0x01, 0x7F,
623
+ 0x00, 0xB7, 0x33, 0x26, 0x3C, 0x06, 0x03, 0x3A, 0x25, 0x00, 0x01, 0x06,
624
+ 0x0E, 0x3A, 0x26, 0x01, 0x06, 0x14, 0x01, 0x02, 0x10, 0x06, 0x04, 0x41,
625
+ 0x01, 0x7F, 0x00, 0x01, 0x3F, 0x15, 0x09, 0x00, 0x00, 0x26, 0x06, 0x06,
626
+ 0x0B, 0x9F, 0x33, 0x40, 0x04, 0x77, 0x25, 0x26, 0x00, 0x00, 0xB0, 0x01,
627
+ 0x03, 0x75, 0xAA, 0xB7, 0x06, 0x02, 0x54, 0x29, 0x00, 0x00, 0x3A, 0x26,
628
+ 0x06, 0x07, 0x31, 0x26, 0x06, 0x01, 0x1A, 0x04, 0x76, 0x41, 0x00, 0x00,
629
+ 0x01, 0x01, 0x75, 0xA9, 0x01, 0x01, 0x10, 0x06, 0x02, 0x42, 0x29, 0xB7,
630
+ 0x3D, 0x00, 0x04, 0xB0, 0x26, 0x01, 0x17, 0x01, 0x18, 0x6F, 0x05, 0x02,
631
+ 0x47, 0x29, 0x01, 0x18, 0x11, 0x03, 0x00, 0x72, 0xAA, 0xA5, 0x02, 0x00,
632
+ 0x06, 0x0C, 0x01, 0x80, 0x64, 0x08, 0x03, 0x01, 0xA5, 0x02, 0x01, 0x09,
633
+ 0x04, 0x0E, 0x26, 0x01, 0x32, 0x0D, 0x06, 0x04, 0x01, 0x80, 0x64, 0x09,
634
+ 0x01, 0x8E, 0x6C, 0x09, 0x03, 0x01, 0x02, 0x01, 0x01, 0x82, 0x6D, 0x08,
635
+ 0x02, 0x01, 0x01, 0x03, 0x09, 0x01, 0x04, 0x0C, 0x09, 0x02, 0x01, 0x01,
636
+ 0x80, 0x63, 0x09, 0x01, 0x80, 0x64, 0x0C, 0x0A, 0x02, 0x01, 0x01, 0x83,
637
+ 0x0F, 0x09, 0x01, 0x83, 0x10, 0x0C, 0x09, 0x03, 0x03, 0x01, 0x01, 0x01,
638
+ 0x0C, 0xA6, 0x40, 0x01, 0x01, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x07, 0x3E,
639
+ 0x02, 0x01, 0x01, 0x80, 0x64, 0x07, 0x3D, 0x02, 0x01, 0x01, 0x83, 0x10,
640
+ 0x07, 0x3E, 0x2F, 0x15, 0x06, 0x03, 0x01, 0x18, 0x09, 0x91, 0x09, 0x78,
641
+ 0x26, 0x01, 0x05, 0x14, 0x02, 0x03, 0x09, 0x03, 0x03, 0x01, 0x1F, 0x15,
642
+ 0x01, 0x01, 0x3A, 0xA6, 0x02, 0x03, 0x09, 0x40, 0x03, 0x03, 0x01, 0x00,
643
+ 0x01, 0x17, 0xA6, 0x01, 0x9C, 0x10, 0x08, 0x03, 0x02, 0x01, 0x00, 0x01,
644
+ 0x3B, 0xA6, 0x01, 0x3C, 0x08, 0x02, 0x02, 0x09, 0x03, 0x02, 0x01, 0x00,
645
+ 0x01, 0x3C, 0xA6, 0x02, 0x02, 0x09, 0x03, 0x02, 0xB7, 0x26, 0x01, 0x2E,
646
+ 0x11, 0x06, 0x0D, 0x25, 0xB7, 0x26, 0x01, 0x30, 0x01, 0x39, 0x6F, 0x06,
647
+ 0x03, 0x25, 0x04, 0x74, 0x01, 0x80, 0x5A, 0x10, 0x06, 0x02, 0x47, 0x29,
648
+ 0x76, 0x02, 0x03, 0x02, 0x02, 0x00, 0x01, 0xB7, 0x7A, 0x01, 0x0A, 0x08,
649
+ 0x03, 0x00, 0xB7, 0x7A, 0x02, 0x00, 0x09, 0x00, 0x02, 0x03, 0x00, 0x03,
650
+ 0x01, 0xA5, 0x26, 0x02, 0x01, 0x02, 0x00, 0x6F, 0x05, 0x02, 0x47, 0x29,
651
+ 0x00, 0x00, 0x33, 0xB0, 0x01, 0x02, 0x75, 0x0B, 0xA8, 0x00, 0x03, 0x26,
652
+ 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0xAA, 0xB7, 0x26, 0x01, 0x81, 0x00,
653
+ 0x13, 0x06, 0x02, 0x53, 0x29, 0x26, 0x01, 0x00, 0x11, 0x06, 0x0B, 0x25,
654
+ 0x26, 0x05, 0x04, 0x25, 0x01, 0x00, 0x00, 0xB7, 0x04, 0x6F, 0x02, 0x01,
655
+ 0x26, 0x05, 0x02, 0x4F, 0x29, 0x40, 0x03, 0x01, 0x02, 0x02, 0x36, 0x02,
656
+ 0x02, 0x3F, 0x03, 0x02, 0x26, 0x06, 0x03, 0xB7, 0x04, 0x68, 0x25, 0x02,
657
+ 0x00, 0x02, 0x01, 0x0A, 0x00, 0x01, 0xB7, 0x26, 0x01, 0x81, 0x00, 0x0D,
658
+ 0x06, 0x01, 0x00, 0x01, 0x81, 0x00, 0x0A, 0x26, 0x05, 0x02, 0x4D, 0x29,
659
+ 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x12, 0x06, 0x19, 0x02,
660
+ 0x00, 0x40, 0x03, 0x00, 0x26, 0x01, 0x83, 0xFF, 0xFF, 0x7F, 0x12, 0x06,
661
+ 0x02, 0x4E, 0x29, 0x01, 0x08, 0x0E, 0x3A, 0xB7, 0x33, 0x09, 0x04, 0x60,
662
+ 0x00, 0x00, 0xA9, 0x92, 0x00, 0x00, 0xAA, 0xBF, 0x00, 0x00, 0xB0, 0x73,
663
+ 0xAA, 0x00, 0x01, 0xAA, 0x26, 0x05, 0x02, 0x53, 0x29, 0xB7, 0x26, 0x01,
664
+ 0x81, 0x00, 0x13, 0x06, 0x02, 0x53, 0x29, 0x03, 0x00, 0x26, 0x06, 0x16,
665
+ 0xB7, 0x02, 0x00, 0x26, 0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x13, 0x06, 0x02,
666
+ 0x53, 0x29, 0x01, 0x08, 0x0E, 0x09, 0x03, 0x00, 0x04, 0x67, 0x25, 0x02,
667
+ 0x00, 0x00, 0x00, 0xAA, 0x26, 0x01, 0x81, 0x7F, 0x12, 0x06, 0x08, 0xBF,
668
+ 0x01, 0x00, 0x66, 0x36, 0x01, 0x00, 0x00, 0x26, 0x66, 0x36, 0x66, 0x3F,
669
+ 0xA2, 0x01, 0x7F, 0x00, 0x00, 0xB0, 0x01, 0x0C, 0x30, 0x11, 0x06, 0x05,
670
+ 0x25, 0x72, 0xB3, 0x04, 0x3E, 0x01, 0x12, 0x30, 0x11, 0x06, 0x05, 0x25,
671
+ 0x72, 0xB4, 0x04, 0x33, 0x01, 0x13, 0x30, 0x11, 0x06, 0x05, 0x25, 0x72,
672
+ 0xB4, 0x04, 0x28, 0x01, 0x14, 0x30, 0x11, 0x06, 0x05, 0x25, 0x72, 0xB4,
673
+ 0x04, 0x1D, 0x01, 0x16, 0x30, 0x11, 0x06, 0x05, 0x25, 0x72, 0xB4, 0x04,
674
+ 0x12, 0x01, 0x1E, 0x30, 0x11, 0x06, 0x05, 0x25, 0x72, 0xB2, 0x04, 0x07,
675
+ 0x41, 0xAB, 0x01, 0x00, 0x01, 0x00, 0x25, 0x00, 0x01, 0xB7, 0x03, 0x00,
676
+ 0x02, 0x00, 0x01, 0x05, 0x14, 0x01, 0x01, 0x15, 0x2D, 0x02, 0x00, 0x01,
677
+ 0x06, 0x14, 0x26, 0x01, 0x01, 0x15, 0x06, 0x02, 0x45, 0x29, 0x01, 0x04,
678
+ 0x0E, 0x02, 0x00, 0x01, 0x1F, 0x15, 0x26, 0x01, 0x1F, 0x11, 0x06, 0x02,
679
+ 0x46, 0x29, 0x09, 0x00, 0x00, 0x26, 0x05, 0x05, 0x01, 0x00, 0x01, 0x7F,
680
+ 0x00, 0xB0, 0x00, 0x01, 0xAA, 0x26, 0x05, 0x05, 0x66, 0x36, 0x01, 0x7F,
681
+ 0x00, 0x01, 0x01, 0x03, 0x00, 0x9C, 0x26, 0x01, 0x83, 0xFF, 0x7E, 0x11,
682
+ 0x06, 0x16, 0x25, 0x26, 0x06, 0x10, 0x9D, 0x26, 0x05, 0x05, 0x25, 0xBF,
683
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x81, 0x03, 0x00, 0x04, 0x6D, 0x04, 0x1B,
684
+ 0x26, 0x05, 0x05, 0x25, 0xBF, 0x01, 0x00, 0x00, 0x02, 0x00, 0x81, 0x03,
685
+ 0x00, 0x26, 0x06, 0x0B, 0x9C, 0x26, 0x05, 0x05, 0x25, 0xBF, 0x01, 0x00,
686
+ 0x00, 0x04, 0x6D, 0x25, 0x02, 0x00, 0x26, 0x05, 0x01, 0x00, 0x40, 0x66,
687
+ 0x36, 0x01, 0x7F, 0x00, 0x01, 0xAA, 0x01, 0x01, 0x03, 0x00, 0x26, 0x06,
688
+ 0x10, 0x9E, 0x26, 0x05, 0x05, 0x25, 0xBF, 0x01, 0x00, 0x00, 0x02, 0x00,
689
+ 0x81, 0x03, 0x00, 0x04, 0x6D, 0x25, 0x02, 0x00, 0x26, 0x05, 0x01, 0x00,
690
+ 0x40, 0x66, 0x36, 0x01, 0x7F, 0x00, 0x01, 0xAA, 0x01, 0x01, 0x03, 0x00,
691
+ 0x26, 0x06, 0x10, 0xB7, 0x26, 0x05, 0x05, 0x25, 0xBF, 0x01, 0x00, 0x00,
692
+ 0x02, 0x00, 0x81, 0x03, 0x00, 0x04, 0x6D, 0x25, 0x02, 0x00, 0x26, 0x05,
693
+ 0x01, 0x00, 0x40, 0x66, 0x36, 0x01, 0x7F, 0x00, 0x00, 0xB7, 0x01, 0x08,
694
+ 0x0E, 0x3A, 0xB7, 0x33, 0x09, 0x00, 0x00, 0xB7, 0x3A, 0xB7, 0x01, 0x08,
695
+ 0x0E, 0x33, 0x09, 0x00, 0x00, 0x26, 0x05, 0x02, 0x4E, 0x29, 0x40, 0xB8,
696
+ 0x00, 0x00, 0x32, 0x26, 0x01, 0x00, 0x13, 0x06, 0x01, 0x00, 0x25, 0x1A,
697
+ 0x04, 0x74, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x0B, 0x00, 0x00, 0x01,
698
+ 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01,
699
+ 0x33, 0x00, 0x00, 0xC0, 0x25, 0x00, 0x00, 0x26, 0x06, 0x07, 0xC1, 0x26,
700
+ 0x06, 0x01, 0x1A, 0x04, 0x76, 0x00, 0x00, 0x01, 0x00, 0x30, 0x31, 0x0B,
701
+ 0x41, 0x00, 0x00, 0x01, 0x81, 0x70, 0x00, 0x00, 0x01, 0x82, 0x0D, 0x00,
702
+ 0x00, 0x01, 0x82, 0x22, 0x00, 0x00, 0x01, 0x82, 0x05, 0x00, 0x00, 0x26,
703
+ 0x01, 0x83, 0xFB, 0x50, 0x01, 0x83, 0xFB, 0x6F, 0x6F, 0x06, 0x04, 0x25,
704
+ 0x01, 0x00, 0x00, 0x26, 0x01, 0x83, 0xB0, 0x00, 0x01, 0x83, 0xBF, 0x7F,
705
+ 0x6F, 0x06, 0x04, 0x25, 0x01, 0x00, 0x00, 0x01, 0x83, 0xFF, 0x7F, 0x15,
706
+ 0x01, 0x83, 0xFF, 0x7E, 0x0D, 0x00
707
+ };
708
+
709
+ static const uint16_t t0_caddr[] = {
710
+ 0,
711
+ 5,
712
+ 10,
713
+ 15,
714
+ 20,
715
+ 25,
716
+ 29,
717
+ 33,
718
+ 37,
719
+ 41,
720
+ 45,
721
+ 49,
722
+ 53,
723
+ 57,
724
+ 61,
725
+ 65,
726
+ 69,
727
+ 73,
728
+ 77,
729
+ 81,
730
+ 85,
731
+ 89,
732
+ 93,
733
+ 97,
734
+ 101,
735
+ 105,
736
+ 109,
737
+ 113,
738
+ 117,
739
+ 121,
740
+ 125,
741
+ 130,
742
+ 135,
743
+ 140,
744
+ 145,
745
+ 150,
746
+ 155,
747
+ 160,
748
+ 165,
749
+ 173,
750
+ 178,
751
+ 183,
752
+ 188,
753
+ 193,
754
+ 198,
755
+ 203,
756
+ 208,
757
+ 213,
758
+ 234,
759
+ 239,
760
+ 244,
761
+ 249,
762
+ 264,
763
+ 269,
764
+ 275,
765
+ 281,
766
+ 286,
767
+ 294,
768
+ 302,
769
+ 308,
770
+ 313,
771
+ 324,
772
+ 960,
773
+ 975,
774
+ 979,
775
+ 984,
776
+ 989,
777
+ 994,
778
+ 999,
779
+ 1004,
780
+ 1118,
781
+ 1123,
782
+ 1135,
783
+ 1140,
784
+ 1145,
785
+ 1150,
786
+ 1154,
787
+ 1159,
788
+ 1164,
789
+ 1169,
790
+ 1174,
791
+ 1184,
792
+ 1189,
793
+ 1194,
794
+ 1206,
795
+ 1221,
796
+ 1226,
797
+ 1240,
798
+ 1262,
799
+ 1273,
800
+ 1376,
801
+ 1423,
802
+ 1456,
803
+ 1547,
804
+ 1553,
805
+ 1616,
806
+ 1623,
807
+ 1651,
808
+ 1679,
809
+ 1784,
810
+ 1826,
811
+ 1839,
812
+ 1851,
813
+ 1865,
814
+ 1880,
815
+ 2100,
816
+ 2114,
817
+ 2131,
818
+ 2140,
819
+ 2207,
820
+ 2263,
821
+ 2267,
822
+ 2271,
823
+ 2276,
824
+ 2324,
825
+ 2350,
826
+ 2426,
827
+ 2470,
828
+ 2481,
829
+ 2566,
830
+ 2604,
831
+ 2642,
832
+ 2652,
833
+ 2662,
834
+ 2671,
835
+ 2684,
836
+ 2688,
837
+ 2692,
838
+ 2696,
839
+ 2700,
840
+ 2704,
841
+ 2708,
842
+ 2712,
843
+ 2724,
844
+ 2732,
845
+ 2737,
846
+ 2742,
847
+ 2747,
848
+ 2752
849
+ };
850
+
851
+ #define T0_INTERPRETED 60
852
+
853
+ #define T0_ENTER(ip, rp, slot) do { \
854
+ const unsigned char *t0_newip; \
855
+ uint32_t t0_lnum; \
856
+ t0_newip = &t0_codeblock[t0_caddr[(slot) - T0_INTERPRETED]]; \
857
+ t0_lnum = t0_parse7E_unsigned(&t0_newip); \
858
+ (rp) += t0_lnum; \
859
+ *((rp) ++) = (uint32_t)((ip) - &t0_codeblock[0]) + (t0_lnum << 16); \
860
+ (ip) = t0_newip; \
861
+ } while (0)
862
+
863
+ #define T0_DEFENTRY(name, slot) \
864
+ void \
865
+ name(void *ctx) \
866
+ { \
867
+ t0_context *t0ctx = ctx; \
868
+ t0ctx->ip = &t0_codeblock[0]; \
869
+ T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
870
+ }
871
+
872
+ T0_DEFENTRY(br_x509_minimal_init_main, 144)
873
+
874
+ #define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
875
+
876
+ void
877
+ br_x509_minimal_run(void *t0ctx)
878
+ {
879
+ uint32_t *dp, *rp;
880
+ const unsigned char *ip;
881
+
882
+ #define T0_LOCAL(x) (*(rp - 2 - (x)))
883
+ #define T0_POP() (*-- dp)
884
+ #define T0_POPi() (*(int32_t *)(-- dp))
885
+ #define T0_PEEK(x) (*(dp - 1 - (x)))
886
+ #define T0_PEEKi(x) (*(int32_t *)(dp - 1 - (x)))
887
+ #define T0_PUSH(v) do { *dp = (v); dp ++; } while (0)
888
+ #define T0_PUSHi(v) do { *(int32_t *)dp = (v); dp ++; } while (0)
889
+ #define T0_RPOP() (*-- rp)
890
+ #define T0_RPOPi() (*(int32_t *)(-- rp))
891
+ #define T0_RPUSH(v) do { *rp = (v); rp ++; } while (0)
892
+ #define T0_RPUSHi(v) do { *(int32_t *)rp = (v); rp ++; } while (0)
893
+ #define T0_ROLL(x) do { \
894
+ size_t t0len = (size_t)(x); \
895
+ uint32_t t0tmp = *(dp - 1 - t0len); \
896
+ memmove(dp - t0len - 1, dp - t0len, t0len * sizeof *dp); \
897
+ *(dp - 1) = t0tmp; \
898
+ } while (0)
899
+ #define T0_SWAP() do { \
900
+ uint32_t t0tmp = *(dp - 2); \
901
+ *(dp - 2) = *(dp - 1); \
902
+ *(dp - 1) = t0tmp; \
903
+ } while (0)
904
+ #define T0_ROT() do { \
905
+ uint32_t t0tmp = *(dp - 3); \
906
+ *(dp - 3) = *(dp - 2); \
907
+ *(dp - 2) = *(dp - 1); \
908
+ *(dp - 1) = t0tmp; \
909
+ } while (0)
910
+ #define T0_NROT() do { \
911
+ uint32_t t0tmp = *(dp - 1); \
912
+ *(dp - 1) = *(dp - 2); \
913
+ *(dp - 2) = *(dp - 3); \
914
+ *(dp - 3) = t0tmp; \
915
+ } while (0)
916
+ #define T0_PICK(x) do { \
917
+ uint32_t t0depth = (x); \
918
+ T0_PUSH(T0_PEEK(t0depth)); \
919
+ } while (0)
920
+ #define T0_CO() do { \
921
+ goto t0_exit; \
922
+ } while (0)
923
+ #define T0_RET() goto t0_next
924
+
925
+ dp = ((t0_context *)t0ctx)->dp;
926
+ rp = ((t0_context *)t0ctx)->rp;
927
+ ip = ((t0_context *)t0ctx)->ip;
928
+ goto t0_next;
929
+ for (;;) {
930
+ uint32_t t0x;
931
+
932
+ t0_next:
933
+ t0x = T0_NEXT(&ip);
934
+ if (t0x < T0_INTERPRETED) {
935
+ switch (t0x) {
936
+ int32_t t0off;
937
+
938
+ case 0: /* ret */
939
+ t0x = T0_RPOP();
940
+ rp -= (t0x >> 16);
941
+ t0x &= 0xFFFF;
942
+ if (t0x == 0) {
943
+ ip = NULL;
944
+ goto t0_exit;
945
+ }
946
+ ip = &t0_codeblock[t0x];
947
+ break;
948
+ case 1: /* literal constant */
949
+ T0_PUSHi(t0_parse7E_signed(&ip));
950
+ break;
951
+ case 2: /* read local */
952
+ T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip)));
953
+ break;
954
+ case 3: /* write local */
955
+ T0_LOCAL(t0_parse7E_unsigned(&ip)) = T0_POP();
956
+ break;
957
+ case 4: /* jump */
958
+ t0off = t0_parse7E_signed(&ip);
959
+ ip += t0off;
960
+ break;
961
+ case 5: /* jump if */
962
+ t0off = t0_parse7E_signed(&ip);
963
+ if (T0_POP()) {
964
+ ip += t0off;
965
+ }
966
+ break;
967
+ case 6: /* jump if not */
968
+ t0off = t0_parse7E_signed(&ip);
969
+ if (!T0_POP()) {
970
+ ip += t0off;
971
+ }
972
+ break;
973
+ case 7: {
974
+ /* %25 */
975
+
976
+ int32_t b = T0_POPi();
977
+ int32_t a = T0_POPi();
978
+ T0_PUSHi(a % b);
979
+
980
+ }
981
+ break;
982
+ case 8: {
983
+ /* * */
984
+
985
+ uint32_t b = T0_POP();
986
+ uint32_t a = T0_POP();
987
+ T0_PUSH(a * b);
988
+
989
+ }
990
+ break;
991
+ case 9: {
992
+ /* + */
993
+
994
+ uint32_t b = T0_POP();
995
+ uint32_t a = T0_POP();
996
+ T0_PUSH(a + b);
997
+
998
+ }
999
+ break;
1000
+ case 10: {
1001
+ /* - */
1002
+
1003
+ uint32_t b = T0_POP();
1004
+ uint32_t a = T0_POP();
1005
+ T0_PUSH(a - b);
1006
+
1007
+ }
1008
+ break;
1009
+ case 11: {
1010
+ /* -rot */
1011
+ T0_NROT();
1012
+ }
1013
+ break;
1014
+ case 12: {
1015
+ /* / */
1016
+
1017
+ int32_t b = T0_POPi();
1018
+ int32_t a = T0_POPi();
1019
+ T0_PUSHi(a / b);
1020
+
1021
+ }
1022
+ break;
1023
+ case 13: {
1024
+ /* < */
1025
+
1026
+ int32_t b = T0_POPi();
1027
+ int32_t a = T0_POPi();
1028
+ T0_PUSH(-(uint32_t)(a < b));
1029
+
1030
+ }
1031
+ break;
1032
+ case 14: {
1033
+ /* << */
1034
+
1035
+ int c = (int)T0_POPi();
1036
+ uint32_t x = T0_POP();
1037
+ T0_PUSH(x << c);
1038
+
1039
+ }
1040
+ break;
1041
+ case 15: {
1042
+ /* <= */
1043
+
1044
+ int32_t b = T0_POPi();
1045
+ int32_t a = T0_POPi();
1046
+ T0_PUSH(-(uint32_t)(a <= b));
1047
+
1048
+ }
1049
+ break;
1050
+ case 16: {
1051
+ /* <> */
1052
+
1053
+ uint32_t b = T0_POP();
1054
+ uint32_t a = T0_POP();
1055
+ T0_PUSH(-(uint32_t)(a != b));
1056
+
1057
+ }
1058
+ break;
1059
+ case 17: {
1060
+ /* = */
1061
+
1062
+ uint32_t b = T0_POP();
1063
+ uint32_t a = T0_POP();
1064
+ T0_PUSH(-(uint32_t)(a == b));
1065
+
1066
+ }
1067
+ break;
1068
+ case 18: {
1069
+ /* > */
1070
+
1071
+ int32_t b = T0_POPi();
1072
+ int32_t a = T0_POPi();
1073
+ T0_PUSH(-(uint32_t)(a > b));
1074
+
1075
+ }
1076
+ break;
1077
+ case 19: {
1078
+ /* >= */
1079
+
1080
+ int32_t b = T0_POPi();
1081
+ int32_t a = T0_POPi();
1082
+ T0_PUSH(-(uint32_t)(a >= b));
1083
+
1084
+ }
1085
+ break;
1086
+ case 20: {
1087
+ /* >> */
1088
+
1089
+ int c = (int)T0_POPi();
1090
+ int32_t x = T0_POPi();
1091
+ T0_PUSHi(x >> c);
1092
+
1093
+ }
1094
+ break;
1095
+ case 21: {
1096
+ /* and */
1097
+
1098
+ uint32_t b = T0_POP();
1099
+ uint32_t a = T0_POP();
1100
+ T0_PUSH(a & b);
1101
+
1102
+ }
1103
+ break;
1104
+ case 22: {
1105
+ /* blobcopy */
1106
+
1107
+ size_t len = T0_POP();
1108
+ unsigned char *src = (unsigned char *)CTX + T0_POP();
1109
+ unsigned char *dst = (unsigned char *)CTX + T0_POP();
1110
+ memcpy(dst, src, len);
1111
+
1112
+ }
1113
+ break;
1114
+ case 23: {
1115
+ /* check-direct-trust */
1116
+
1117
+ size_t u;
1118
+
1119
+ for (u = 0; u < CTX->trust_anchors_num; u ++) {
1120
+ const br_x509_trust_anchor *ta;
1121
+ unsigned char hashed_DN[64];
1122
+ int kt;
1123
+
1124
+ ta = &CTX->trust_anchors[u];
1125
+ if (ta->flags & BR_X509_TA_CA) {
1126
+ continue;
1127
+ }
1128
+ hash_dn(CTX, ta->dn.data, ta->dn.len, hashed_DN);
1129
+ if (memcmp(hashed_DN, CTX->current_dn_hash, DNHASH_LEN)) {
1130
+ continue;
1131
+ }
1132
+ kt = CTX->pkey.key_type;
1133
+ if ((ta->pkey.key_type & 0x0F) != kt) {
1134
+ continue;
1135
+ }
1136
+ switch (kt) {
1137
+
1138
+ case BR_KEYTYPE_RSA:
1139
+ if (!eqbigint(CTX->pkey.key.rsa.n,
1140
+ CTX->pkey.key.rsa.nlen,
1141
+ ta->pkey.key.rsa.n,
1142
+ ta->pkey.key.rsa.nlen)
1143
+ || !eqbigint(CTX->pkey.key.rsa.e,
1144
+ CTX->pkey.key.rsa.elen,
1145
+ ta->pkey.key.rsa.e,
1146
+ ta->pkey.key.rsa.elen))
1147
+ {
1148
+ continue;
1149
+ }
1150
+ break;
1151
+
1152
+ case BR_KEYTYPE_EC:
1153
+ if (CTX->pkey.key.ec.curve != ta->pkey.key.ec.curve
1154
+ || CTX->pkey.key.ec.qlen != ta->pkey.key.ec.qlen
1155
+ || memcmp(CTX->pkey.key.ec.q,
1156
+ ta->pkey.key.ec.q,
1157
+ ta->pkey.key.ec.qlen) != 0)
1158
+ {
1159
+ continue;
1160
+ }
1161
+ break;
1162
+
1163
+ default:
1164
+ continue;
1165
+ }
1166
+
1167
+ /*
1168
+ * Direct trust match!
1169
+ */
1170
+ CTX->err = BR_ERR_X509_OK;
1171
+ T0_CO();
1172
+ }
1173
+
1174
+ }
1175
+ break;
1176
+ case 24: {
1177
+ /* check-trust-anchor-CA */
1178
+
1179
+ size_t u;
1180
+
1181
+ for (u = 0; u < CTX->trust_anchors_num; u ++) {
1182
+ const br_x509_trust_anchor *ta;
1183
+ unsigned char hashed_DN[64];
1184
+
1185
+ ta = &CTX->trust_anchors[u];
1186
+ if (!(ta->flags & BR_X509_TA_CA)) {
1187
+ continue;
1188
+ }
1189
+ hash_dn(CTX, ta->dn.data, ta->dn.len, hashed_DN);
1190
+ if (memcmp(hashed_DN, CTX->saved_dn_hash, DNHASH_LEN)) {
1191
+ continue;
1192
+ }
1193
+ if (verify_signature(CTX, &ta->pkey) == 0) {
1194
+ CTX->err = BR_ERR_X509_OK;
1195
+ T0_CO();
1196
+ }
1197
+ }
1198
+
1199
+ }
1200
+ break;
1201
+ case 25: {
1202
+ /* check-validity-range */
1203
+
1204
+ uint32_t nbs = T0_POP();
1205
+ uint32_t nbd = T0_POP();
1206
+ uint32_t nas = T0_POP();
1207
+ uint32_t nad = T0_POP();
1208
+ int r;
1209
+ if (CTX->itime != 0) {
1210
+ r = CTX->itime(CTX->itime_ctx, nbd, nbs, nad, nas);
1211
+ if (r < -1 || r > 1) {
1212
+ CTX->err = BR_ERR_X509_TIME_UNKNOWN;
1213
+ T0_CO();
1214
+ }
1215
+ } else {
1216
+ uint32_t vd = CTX->days;
1217
+ uint32_t vs = CTX->seconds;
1218
+ if (vd == 0 && vs == 0) {
1219
+ #if BR_USE_UNIX_TIME
1220
+ time_t x = time(NULL);
1221
+
1222
+ vd = (uint32_t)(x / 86400) + 719528;
1223
+ vs = (uint32_t)(x % 86400);
1224
+ #elif BR_USE_WIN32_TIME
1225
+ FILETIME ft;
1226
+ uint64_t x;
1227
+
1228
+ GetSystemTimeAsFileTime(&ft);
1229
+ x = ((uint64_t)ft.dwHighDateTime << 32)
1230
+ + (uint64_t)ft.dwLowDateTime;
1231
+ x = (x / 10000000);
1232
+ vd = (uint32_t)(x / 86400) + 584754;
1233
+ vs = (uint32_t)(x % 86400);
1234
+ #else
1235
+ CTX->err = BR_ERR_X509_TIME_UNKNOWN;
1236
+ T0_CO();
1237
+ #endif
1238
+ }
1239
+ if (vd < nbd || (vd == nbd && vs < nbs)) {
1240
+ r = -1;
1241
+ } else if (vd > nad || (vd == nad && vs > nas)) {
1242
+ r = 1;
1243
+ } else {
1244
+ r = 0;
1245
+ }
1246
+ }
1247
+ T0_PUSHi(r);
1248
+
1249
+ }
1250
+ break;
1251
+ case 26: {
1252
+ /* co */
1253
+ T0_CO();
1254
+ }
1255
+ break;
1256
+ case 27: {
1257
+ /* compute-dn-hash */
1258
+
1259
+ CTX->dn_hash_impl->out(&CTX->dn_hash.vtable, CTX->current_dn_hash);
1260
+ CTX->do_dn_hash = 0;
1261
+
1262
+ }
1263
+ break;
1264
+ case 28: {
1265
+ /* compute-tbs-hash */
1266
+
1267
+ int id = T0_POPi();
1268
+ size_t len;
1269
+ len = br_multihash_out(&CTX->mhash, id, CTX->tbs_hash);
1270
+ T0_PUSH(len);
1271
+
1272
+ }
1273
+ break;
1274
+ case 29: {
1275
+ /* copy-ee-ec-pkey */
1276
+
1277
+ size_t qlen = T0_POP();
1278
+ uint32_t curve = T0_POP();
1279
+ memcpy(CTX->ee_pkey_data, CTX->pkey_data, qlen);
1280
+ CTX->pkey.key_type = BR_KEYTYPE_EC;
1281
+ CTX->pkey.key.ec.curve = curve;
1282
+ CTX->pkey.key.ec.q = CTX->ee_pkey_data;
1283
+ CTX->pkey.key.ec.qlen = qlen;
1284
+
1285
+ }
1286
+ break;
1287
+ case 30: {
1288
+ /* copy-ee-rsa-pkey */
1289
+
1290
+ size_t elen = T0_POP();
1291
+ size_t nlen = T0_POP();
1292
+ memcpy(CTX->ee_pkey_data, CTX->pkey_data, nlen + elen);
1293
+ CTX->pkey.key_type = BR_KEYTYPE_RSA;
1294
+ CTX->pkey.key.rsa.n = CTX->ee_pkey_data;
1295
+ CTX->pkey.key.rsa.nlen = nlen;
1296
+ CTX->pkey.key.rsa.e = CTX->ee_pkey_data + nlen;
1297
+ CTX->pkey.key.rsa.elen = elen;
1298
+
1299
+ }
1300
+ break;
1301
+ case 31: {
1302
+ /* copy-name-SAN */
1303
+
1304
+ unsigned tag = T0_POP();
1305
+ unsigned ok = T0_POP();
1306
+ size_t u, len;
1307
+
1308
+ len = CTX->pad[0];
1309
+ for (u = 0; u < CTX->num_name_elts; u ++) {
1310
+ br_name_element *ne;
1311
+
1312
+ ne = &CTX->name_elts[u];
1313
+ if (ne->status == 0 && ne->oid[0] == 0 && ne->oid[1] == tag) {
1314
+ if (ok && ne->len > len) {
1315
+ memcpy(ne->buf, CTX->pad + 1, len);
1316
+ ne->buf[len] = 0;
1317
+ ne->status = 1;
1318
+ } else {
1319
+ ne->status = -1;
1320
+ }
1321
+ break;
1322
+ }
1323
+ }
1324
+
1325
+ }
1326
+ break;
1327
+ case 32: {
1328
+ /* copy-name-element */
1329
+
1330
+ size_t len;
1331
+ int32_t off = T0_POPi();
1332
+ int ok = T0_POPi();
1333
+
1334
+ if (off >= 0) {
1335
+ br_name_element *ne = &CTX->name_elts[off];
1336
+
1337
+ if (ok) {
1338
+ len = CTX->pad[0];
1339
+ if (len < ne->len) {
1340
+ memcpy(ne->buf, CTX->pad + 1, len);
1341
+ ne->buf[len] = 0;
1342
+ ne->status = 1;
1343
+ } else {
1344
+ ne->status = -1;
1345
+ }
1346
+ } else {
1347
+ ne->status = -1;
1348
+ }
1349
+ }
1350
+
1351
+ }
1352
+ break;
1353
+ case 33: {
1354
+ /* data-get8 */
1355
+
1356
+ size_t addr = T0_POP();
1357
+ T0_PUSH(t0_datablock[addr]);
1358
+
1359
+ }
1360
+ break;
1361
+ case 34: {
1362
+ /* dn-hash-length */
1363
+
1364
+ T0_PUSH(DNHASH_LEN);
1365
+
1366
+ }
1367
+ break;
1368
+ case 35: {
1369
+ /* do-ecdsa-vrfy */
1370
+
1371
+ size_t qlen = T0_POP();
1372
+ int curve = T0_POP();
1373
+ br_x509_pkey pk;
1374
+
1375
+ pk.key_type = BR_KEYTYPE_EC;
1376
+ pk.key.ec.curve = curve;
1377
+ pk.key.ec.q = CTX->pkey_data;
1378
+ pk.key.ec.qlen = qlen;
1379
+ T0_PUSH(verify_signature(CTX, &pk));
1380
+
1381
+ }
1382
+ break;
1383
+ case 36: {
1384
+ /* do-rsa-vrfy */
1385
+
1386
+ size_t elen = T0_POP();
1387
+ size_t nlen = T0_POP();
1388
+ br_x509_pkey pk;
1389
+
1390
+ pk.key_type = BR_KEYTYPE_RSA;
1391
+ pk.key.rsa.n = CTX->pkey_data;
1392
+ pk.key.rsa.nlen = nlen;
1393
+ pk.key.rsa.e = CTX->pkey_data + nlen;
1394
+ pk.key.rsa.elen = elen;
1395
+ T0_PUSH(verify_signature(CTX, &pk));
1396
+
1397
+ }
1398
+ break;
1399
+ case 37: {
1400
+ /* drop */
1401
+ (void)T0_POP();
1402
+ }
1403
+ break;
1404
+ case 38: {
1405
+ /* dup */
1406
+ T0_PUSH(T0_PEEK(0));
1407
+ }
1408
+ break;
1409
+ case 39: {
1410
+ /* eqOID */
1411
+
1412
+ const unsigned char *a2 = &t0_datablock[T0_POP()];
1413
+ const unsigned char *a1 = &CTX->pad[0];
1414
+ size_t len = a1[0];
1415
+ int x;
1416
+ if (len == a2[0]) {
1417
+ x = -(memcmp(a1 + 1, a2 + 1, len) == 0);
1418
+ } else {
1419
+ x = 0;
1420
+ }
1421
+ T0_PUSH((uint32_t)x);
1422
+
1423
+ }
1424
+ break;
1425
+ case 40: {
1426
+ /* eqblob */
1427
+
1428
+ size_t len = T0_POP();
1429
+ const unsigned char *a2 = (const unsigned char *)CTX + T0_POP();
1430
+ const unsigned char *a1 = (const unsigned char *)CTX + T0_POP();
1431
+ T0_PUSHi(-(memcmp(a1, a2, len) == 0));
1432
+
1433
+ }
1434
+ break;
1435
+ case 41: {
1436
+ /* fail */
1437
+
1438
+ CTX->err = T0_POPi();
1439
+ T0_CO();
1440
+
1441
+ }
1442
+ break;
1443
+ case 42: {
1444
+ /* get16 */
1445
+
1446
+ uint32_t addr = T0_POP();
1447
+ T0_PUSH(*(uint16_t *)(void *)((unsigned char *)CTX + addr));
1448
+
1449
+ }
1450
+ break;
1451
+ case 43: {
1452
+ /* get32 */
1453
+
1454
+ uint32_t addr = T0_POP();
1455
+ T0_PUSH(*(uint32_t *)(void *)((unsigned char *)CTX + addr));
1456
+
1457
+ }
1458
+ break;
1459
+ case 44: {
1460
+ /* match-server-name */
1461
+
1462
+ size_t n1, n2;
1463
+
1464
+ if (CTX->server_name == NULL) {
1465
+ T0_PUSH(0);
1466
+ T0_RET();
1467
+ }
1468
+ n1 = strlen(CTX->server_name);
1469
+ n2 = CTX->pad[0];
1470
+ if (n1 == n2 && eqnocase(&CTX->pad[1], CTX->server_name, n1)) {
1471
+ T0_PUSHi(-1);
1472
+ T0_RET();
1473
+ }
1474
+ if (n2 >= 2 && CTX->pad[1] == '*' && CTX->pad[2] == '.') {
1475
+ size_t u;
1476
+
1477
+ u = 0;
1478
+ while (u < n1 && CTX->server_name[u] != '.') {
1479
+ u ++;
1480
+ }
1481
+ u ++;
1482
+ n1 -= u;
1483
+ if ((n2 - 2) == n1
1484
+ && eqnocase(&CTX->pad[3], CTX->server_name + u, n1))
1485
+ {
1486
+ T0_PUSHi(-1);
1487
+ T0_RET();
1488
+ }
1489
+ }
1490
+ T0_PUSH(0);
1491
+
1492
+ }
1493
+ break;
1494
+ case 45: {
1495
+ /* neg */
1496
+
1497
+ uint32_t a = T0_POP();
1498
+ T0_PUSH(-a);
1499
+
1500
+ }
1501
+ break;
1502
+ case 46: {
1503
+ /* offset-name-element */
1504
+
1505
+ unsigned san = T0_POP();
1506
+ size_t u;
1507
+
1508
+ for (u = 0; u < CTX->num_name_elts; u ++) {
1509
+ if (CTX->name_elts[u].status == 0) {
1510
+ const unsigned char *oid;
1511
+ size_t len, off;
1512
+
1513
+ oid = CTX->name_elts[u].oid;
1514
+ if (san) {
1515
+ if (oid[0] != 0 || oid[1] != 0) {
1516
+ continue;
1517
+ }
1518
+ off = 2;
1519
+ } else {
1520
+ off = 0;
1521
+ }
1522
+ len = oid[off];
1523
+ if (len != 0 && len == CTX->pad[0]
1524
+ && memcmp(oid + off + 1,
1525
+ CTX->pad + 1, len) == 0)
1526
+ {
1527
+ T0_PUSH(u);
1528
+ T0_RET();
1529
+ }
1530
+ }
1531
+ }
1532
+ T0_PUSHi(-1);
1533
+
1534
+ }
1535
+ break;
1536
+ case 47: {
1537
+ /* or */
1538
+
1539
+ uint32_t b = T0_POP();
1540
+ uint32_t a = T0_POP();
1541
+ T0_PUSH(a | b);
1542
+
1543
+ }
1544
+ break;
1545
+ case 48: {
1546
+ /* over */
1547
+ T0_PUSH(T0_PEEK(1));
1548
+ }
1549
+ break;
1550
+ case 49: {
1551
+ /* read-blob-inner */
1552
+
1553
+ uint32_t len = T0_POP();
1554
+ uint32_t addr = T0_POP();
1555
+ size_t clen = CTX->hlen;
1556
+ if (clen > len) {
1557
+ clen = (size_t)len;
1558
+ }
1559
+ if (addr != 0) {
1560
+ memcpy((unsigned char *)CTX + addr, CTX->hbuf, clen);
1561
+ }
1562
+ if (CTX->do_mhash) {
1563
+ br_multihash_update(&CTX->mhash, CTX->hbuf, clen);
1564
+ }
1565
+ if (CTX->do_dn_hash) {
1566
+ CTX->dn_hash_impl->update(
1567
+ &CTX->dn_hash.vtable, CTX->hbuf, clen);
1568
+ }
1569
+ CTX->hbuf += clen;
1570
+ CTX->hlen -= clen;
1571
+ T0_PUSH(addr + clen);
1572
+ T0_PUSH(len - clen);
1573
+
1574
+ }
1575
+ break;
1576
+ case 50: {
1577
+ /* read8-low */
1578
+
1579
+ if (CTX->hlen == 0) {
1580
+ T0_PUSHi(-1);
1581
+ } else {
1582
+ unsigned char x = *CTX->hbuf ++;
1583
+ if (CTX->do_mhash) {
1584
+ br_multihash_update(&CTX->mhash, &x, 1);
1585
+ }
1586
+ if (CTX->do_dn_hash) {
1587
+ CTX->dn_hash_impl->update(&CTX->dn_hash.vtable, &x, 1);
1588
+ }
1589
+ CTX->hlen --;
1590
+ T0_PUSH(x);
1591
+ }
1592
+
1593
+ }
1594
+ break;
1595
+ case 51: {
1596
+ /* rot */
1597
+ T0_ROT();
1598
+ }
1599
+ break;
1600
+ case 52: {
1601
+ /* set16 */
1602
+
1603
+ uint32_t addr = T0_POP();
1604
+ *(uint16_t *)(void *)((unsigned char *)CTX + addr) = T0_POP();
1605
+
1606
+ }
1607
+ break;
1608
+ case 53: {
1609
+ /* set32 */
1610
+
1611
+ uint32_t addr = T0_POP();
1612
+ *(uint32_t *)(void *)((unsigned char *)CTX + addr) = T0_POP();
1613
+
1614
+ }
1615
+ break;
1616
+ case 54: {
1617
+ /* set8 */
1618
+
1619
+ uint32_t addr = T0_POP();
1620
+ *((unsigned char *)CTX + addr) = (unsigned char)T0_POP();
1621
+
1622
+ }
1623
+ break;
1624
+ case 55: {
1625
+ /* start-dn-hash */
1626
+
1627
+ CTX->dn_hash_impl->init(&CTX->dn_hash.vtable);
1628
+ CTX->do_dn_hash = 1;
1629
+
1630
+ }
1631
+ break;
1632
+ case 56: {
1633
+ /* start-tbs-hash */
1634
+
1635
+ br_multihash_init(&CTX->mhash);
1636
+ CTX->do_mhash = 1;
1637
+
1638
+ }
1639
+ break;
1640
+ case 57: {
1641
+ /* stop-tbs-hash */
1642
+
1643
+ CTX->do_mhash = 0;
1644
+
1645
+ }
1646
+ break;
1647
+ case 58: {
1648
+ /* swap */
1649
+ T0_SWAP();
1650
+ }
1651
+ break;
1652
+ case 59: {
1653
+ /* zero-server-name */
1654
+
1655
+ T0_PUSHi(-(CTX->server_name == NULL));
1656
+
1657
+ }
1658
+ break;
1659
+ }
1660
+
1661
+ } else {
1662
+ T0_ENTER(ip, rp, t0x);
1663
+ }
1664
+ }
1665
+ t0_exit:
1666
+ ((t0_context *)t0ctx)->dp = dp;
1667
+ ((t0_context *)t0ctx)->rp = rp;
1668
+ ((t0_context *)t0ctx)->ip = ip;
1669
+ }
1670
+
1671
+
1672
+
1673
+ /*
1674
+ * Verify the signature on the certificate with the provided public key.
1675
+ * This function checks the public key type with regards to the expected
1676
+ * type. Returned value is either 0 on success, or a non-zero error code.
1677
+ */
1678
+ static int
1679
+ verify_signature(br_x509_minimal_context *ctx, const br_x509_pkey *pk)
1680
+ {
1681
+ int kt;
1682
+
1683
+ kt = ctx->cert_signer_key_type;
1684
+ if ((pk->key_type & 0x0F) != kt) {
1685
+ return BR_ERR_X509_WRONG_KEY_TYPE;
1686
+ }
1687
+ switch (kt) {
1688
+ unsigned char tmp[64];
1689
+
1690
+ case BR_KEYTYPE_RSA:
1691
+ if (ctx->irsa == 0) {
1692
+ return BR_ERR_X509_UNSUPPORTED;
1693
+ }
1694
+ if (!ctx->irsa(ctx->cert_sig, ctx->cert_sig_len,
1695
+ &t0_datablock[ctx->cert_sig_hash_oid],
1696
+ ctx->cert_sig_hash_len, &pk->key.rsa, tmp))
1697
+ {
1698
+ return BR_ERR_X509_BAD_SIGNATURE;
1699
+ }
1700
+ if (memcmp(ctx->tbs_hash, tmp, ctx->cert_sig_hash_len) != 0) {
1701
+ return BR_ERR_X509_BAD_SIGNATURE;
1702
+ }
1703
+ return 0;
1704
+
1705
+ case BR_KEYTYPE_EC:
1706
+ if (ctx->iecdsa == 0) {
1707
+ return BR_ERR_X509_UNSUPPORTED;
1708
+ }
1709
+ if (!ctx->iecdsa(ctx->iec, ctx->tbs_hash,
1710
+ ctx->cert_sig_hash_len, &pk->key.ec,
1711
+ ctx->cert_sig, ctx->cert_sig_len))
1712
+ {
1713
+ return BR_ERR_X509_BAD_SIGNATURE;
1714
+ }
1715
+ return 0;
1716
+
1717
+ default:
1718
+ return BR_ERR_X509_UNSUPPORTED;
1719
+ }
1720
+ }
1721
+
1722
+