visaljs 0.0.2 → 0.0.4

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 (1243) hide show
  1. package/README.md +3 -1
  2. package/cli.js +545 -86
  3. package/node/include/js_node.h +30 -5
  4. package/node/include/js_uv.h +36 -0
  5. package/node/prelude/async_hooks.js +0 -0
  6. package/node/prelude/buffer.js +0 -0
  7. package/node/prelude/crypto.js +7 -10
  8. package/node/prelude/dns.js +99 -0
  9. package/node/prelude/dns_promises.js +10 -0
  10. package/node/prelude/events.js +0 -0
  11. package/node/prelude/fs.js +0 -0
  12. package/node/prelude/http.js +1039 -195
  13. package/node/prelude/http2.js +0 -0
  14. package/node/prelude/internal/crypto/asym.js +39 -12
  15. package/node/prelude/internal/crypto/cipher.js +0 -0
  16. package/node/prelude/internal/crypto/dh_groups.js +12 -0
  17. package/node/prelude/internal/crypto/diffiehellman.js +354 -0
  18. package/node/prelude/internal/crypto/hash.js +1 -1
  19. package/node/prelude/internal/crypto/kdf.js +0 -0
  20. package/node/prelude/internal/crypto/key_type.js +3 -0
  21. package/node/prelude/internal/crypto/keys.js +39 -9
  22. package/node/prelude/internal/crypto/random.js +0 -0
  23. package/node/prelude/internal/crypto/util.js +0 -0
  24. package/node/prelude/internal/errors.js +0 -0
  25. package/node/prelude/internal/http_agent.js +249 -0
  26. package/node/prelude/internal/net.js +33 -0
  27. package/node/prelude/internal/querystring.js +0 -0
  28. package/node/prelude/internal/socketaddress.js +249 -0
  29. package/node/prelude/internal/tls/common.js +306 -0
  30. package/node/prelude/internal/tls/wrap.js +1220 -0
  31. package/node/prelude/internal/tls/x509.js +394 -0
  32. package/node/prelude/module.js +0 -0
  33. package/node/prelude/net.js +1082 -50
  34. package/node/prelude/os.js +2 -2
  35. package/node/prelude/path.js +0 -0
  36. package/node/prelude/process.js +0 -0
  37. package/node/prelude/querystring.js +0 -0
  38. package/node/prelude/stream.js +6 -0
  39. package/node/prelude/stream_promises.js +0 -0
  40. package/node/prelude/stream_web.js +0 -0
  41. package/node/prelude/string_decoder.js +0 -0
  42. package/node/prelude/tls.js +141 -0
  43. package/node/prelude/tty.js +0 -0
  44. package/node/prelude/url.js +0 -0
  45. package/node/prelude/util.js +5 -2
  46. package/node/prelude/util_types.js +85 -0
  47. package/node/prelude/zlib.js +0 -0
  48. package/node/src/host_fs.c +10 -2
  49. package/node/src/host_http.c +268 -270
  50. package/node/src/host_loop.c +84 -0
  51. package/node/src/host_net.c +495 -0
  52. package/node/src/host_os.c +0 -0
  53. package/node/src/host_sys.c +54 -26
  54. package/node/third_party/libuv/LICENSE +0 -0
  55. package/node/third_party/libuv/include/uv/aix.h +0 -0
  56. package/node/third_party/libuv/include/uv/bsd.h +0 -0
  57. package/node/third_party/libuv/include/uv/darwin.h +0 -0
  58. package/node/third_party/libuv/include/uv/errno.h +0 -0
  59. package/node/third_party/libuv/include/uv/linux.h +0 -0
  60. package/node/third_party/libuv/include/uv/os390.h +0 -0
  61. package/node/third_party/libuv/include/uv/posix.h +0 -0
  62. package/node/third_party/libuv/include/uv/sunos.h +0 -0
  63. package/node/third_party/libuv/include/uv/threadpool.h +0 -0
  64. package/node/third_party/libuv/include/uv/tree.h +0 -0
  65. package/node/third_party/libuv/include/uv/unix.h +0 -0
  66. package/node/third_party/libuv/include/uv/version.h +0 -0
  67. package/node/third_party/libuv/include/uv/win.h +0 -0
  68. package/node/third_party/libuv/include/uv.h +0 -0
  69. package/node/third_party/libuv/src/fs-poll.c +0 -0
  70. package/node/third_party/libuv/src/heap-inl.h +0 -0
  71. package/node/third_party/libuv/src/idna.c +0 -0
  72. package/node/third_party/libuv/src/idna.h +0 -0
  73. package/node/third_party/libuv/src/inet.c +0 -0
  74. package/node/third_party/libuv/src/queue.h +0 -0
  75. package/node/third_party/libuv/src/random.c +0 -0
  76. package/node/third_party/libuv/src/strscpy.c +0 -0
  77. package/node/third_party/libuv/src/strscpy.h +0 -0
  78. package/node/third_party/libuv/src/strtok.c +0 -0
  79. package/node/third_party/libuv/src/strtok.h +0 -0
  80. package/node/third_party/libuv/src/thread-common.c +0 -0
  81. package/node/third_party/libuv/src/threadpool.c +0 -0
  82. package/node/third_party/libuv/src/timer.c +0 -0
  83. package/node/third_party/libuv/src/unix/async.c +0 -0
  84. package/node/third_party/libuv/src/unix/bsd-ifaddrs.c +0 -0
  85. package/node/third_party/libuv/src/unix/core.c +0 -0
  86. package/node/third_party/libuv/src/unix/darwin-proctitle.c +0 -0
  87. package/node/third_party/libuv/src/unix/darwin-stub.h +0 -0
  88. package/node/third_party/libuv/src/unix/darwin-syscalls.h +0 -0
  89. package/node/third_party/libuv/src/unix/darwin.c +0 -0
  90. package/node/third_party/libuv/src/unix/dl.c +0 -0
  91. package/node/third_party/libuv/src/unix/fs.c +0 -0
  92. package/node/third_party/libuv/src/unix/fsevents.c +0 -0
  93. package/node/third_party/libuv/src/unix/getaddrinfo.c +0 -0
  94. package/node/third_party/libuv/src/unix/getnameinfo.c +0 -0
  95. package/node/third_party/libuv/src/unix/internal.h +0 -0
  96. package/node/third_party/libuv/src/unix/kqueue.c +0 -0
  97. package/node/third_party/libuv/src/unix/linux.c +0 -0
  98. package/node/third_party/libuv/src/unix/loop-watcher.c +0 -0
  99. package/node/third_party/libuv/src/unix/loop.c +0 -0
  100. package/node/third_party/libuv/src/unix/pipe.c +0 -0
  101. package/node/third_party/libuv/src/unix/poll.c +0 -0
  102. package/node/third_party/libuv/src/unix/process.c +0 -0
  103. package/node/third_party/libuv/src/unix/procfs-exepath.c +0 -0
  104. package/node/third_party/libuv/src/unix/proctitle.c +0 -0
  105. package/node/third_party/libuv/src/unix/random-devurandom.c +0 -0
  106. package/node/third_party/libuv/src/unix/random-getentropy.c +0 -0
  107. package/node/third_party/libuv/src/unix/random-getrandom.c +0 -0
  108. package/node/third_party/libuv/src/unix/random-sysctl-linux.c +0 -0
  109. package/node/third_party/libuv/src/unix/signal.c +0 -0
  110. package/node/third_party/libuv/src/unix/stream.c +0 -0
  111. package/node/third_party/libuv/src/unix/tcp.c +0 -0
  112. package/node/third_party/libuv/src/unix/thread.c +0 -0
  113. package/node/third_party/libuv/src/unix/tty.c +0 -0
  114. package/node/third_party/libuv/src/unix/udp.c +0 -0
  115. package/node/third_party/libuv/src/uv-common.c +0 -0
  116. package/node/third_party/libuv/src/uv-common.h +0 -0
  117. package/node/third_party/libuv/src/uv-data-getter-setters.c +0 -0
  118. package/node/third_party/libuv/src/version.c +0 -0
  119. package/node/third_party/libuv/src/win/async.c +98 -0
  120. package/node/third_party/libuv/src/win/atomicops-inl.h +61 -0
  121. package/node/third_party/libuv/src/win/core.c +683 -0
  122. package/node/third_party/libuv/src/win/detect-wakeup.c +56 -0
  123. package/node/third_party/libuv/src/win/dl.c +135 -0
  124. package/node/third_party/libuv/src/win/error.c +183 -0
  125. package/node/third_party/libuv/src/win/fs-event.c +620 -0
  126. package/node/third_party/libuv/src/win/fs-fd-hash-inl.h +200 -0
  127. package/node/third_party/libuv/src/win/fs.c +3774 -0
  128. package/node/third_party/libuv/src/win/getaddrinfo.c +388 -0
  129. package/node/third_party/libuv/src/win/getnameinfo.c +146 -0
  130. package/node/third_party/libuv/src/win/handle-inl.h +180 -0
  131. package/node/third_party/libuv/src/win/handle.c +162 -0
  132. package/node/third_party/libuv/src/win/internal.h +335 -0
  133. package/node/third_party/libuv/src/win/loop-watcher.c +122 -0
  134. package/node/third_party/libuv/src/win/pipe.c +2725 -0
  135. package/node/third_party/libuv/src/win/poll.c +586 -0
  136. package/node/third_party/libuv/src/win/process-stdio.c +419 -0
  137. package/node/third_party/libuv/src/win/process.c +1407 -0
  138. package/node/third_party/libuv/src/win/req-inl.h +214 -0
  139. package/node/third_party/libuv/src/win/signal.c +282 -0
  140. package/node/third_party/libuv/src/win/snprintf.c +42 -0
  141. package/node/third_party/libuv/src/win/stream-inl.h +54 -0
  142. package/node/third_party/libuv/src/win/stream.c +252 -0
  143. package/node/third_party/libuv/src/win/tcp.c +1674 -0
  144. package/node/third_party/libuv/src/win/thread.c +568 -0
  145. package/node/third_party/libuv/src/win/tty.c +2460 -0
  146. package/node/third_party/libuv/src/win/udp.c +1162 -0
  147. package/node/third_party/libuv/src/win/util.c +1750 -0
  148. package/node/third_party/libuv/src/win/winapi.c +144 -0
  149. package/node/third_party/libuv/src/win/winapi.h +4831 -0
  150. package/node/third_party/libuv/src/win/winsock.c +575 -0
  151. package/node/third_party/libuv/src/win/winsock.h +160 -0
  152. package/node/third_party/llhttp/LICENSE +0 -0
  153. package/node/third_party/llhttp/api.c +0 -0
  154. package/node/third_party/llhttp/http.c +0 -0
  155. package/node/third_party/llhttp/llhttp.c +0 -0
  156. package/node/third_party/llhttp/llhttp.h +0 -0
  157. package/package.json +1 -1
  158. package/runtime/include/js_atoms.gen.h +0 -0
  159. package/runtime/include/js_atoms.h +0 -0
  160. package/runtime/include/js_bigint.h +0 -0
  161. package/runtime/include/js_buffer.h +0 -0
  162. package/runtime/include/js_builtins.h +16 -0
  163. package/runtime/include/js_console.h +2 -0
  164. package/runtime/include/js_convert.h +0 -0
  165. package/runtime/include/js_core.def +23 -0
  166. package/runtime/include/js_crypto.h +23 -0
  167. package/runtime/include/js_error.h +0 -0
  168. package/runtime/include/js_exception.h +0 -0
  169. package/runtime/include/js_function.h +0 -0
  170. package/runtime/include/js_gc.h +0 -0
  171. package/runtime/include/js_generator.h +2 -3
  172. package/runtime/include/js_host.h +0 -0
  173. package/runtime/include/js_jobs.h +0 -0
  174. package/runtime/include/js_module.h +0 -0
  175. package/runtime/include/js_object.h +0 -0
  176. package/runtime/include/js_ops.h +0 -0
  177. package/runtime/include/js_promise.h +0 -2
  178. package/runtime/include/js_regexp.h +0 -0
  179. package/runtime/include/js_runtime.h +0 -0
  180. package/runtime/include/js_symbol.h +0 -0
  181. package/runtime/include/js_web.h +0 -0
  182. package/runtime/include/jscell.h +0 -0
  183. package/runtime/include/jscontext.h +0 -0
  184. package/runtime/include/jsnum.h +0 -0
  185. package/runtime/include/jsstring.h +0 -0
  186. package/runtime/include/jsvalue.h +0 -0
  187. package/runtime/src/arguments.c +0 -0
  188. package/runtime/src/array.c +0 -0
  189. package/runtime/src/arraybuffer.c +0 -0
  190. package/runtime/src/async_iter.c +4 -1
  191. package/runtime/src/atoms.c +0 -0
  192. package/runtime/src/base64.c +0 -0
  193. package/runtime/src/bigint.c +0 -0
  194. package/runtime/src/blob.c +0 -0
  195. package/runtime/src/boringssl_support.cc +37 -0
  196. package/runtime/src/buffer.c +0 -0
  197. package/runtime/src/builtin_table.c +8 -0
  198. package/runtime/src/builtins.c +0 -0
  199. package/runtime/src/builtins_util.h +0 -0
  200. package/runtime/src/collections.c +0 -0
  201. package/runtime/src/components.c +10 -0
  202. package/runtime/src/console.c +6 -18
  203. package/runtime/src/convert.c +0 -0
  204. package/runtime/src/core_all.c +1 -0
  205. package/runtime/src/crypto.c +0 -0
  206. package/runtime/src/crypto_asym.c +450 -241
  207. package/runtime/src/crypto_bn.c +91 -0
  208. package/runtime/src/crypto_cipher.c +153 -75
  209. package/runtime/src/crypto_hash.c +68 -53
  210. package/runtime/src/crypto_host.c +0 -0
  211. package/runtime/src/crypto_internal.h +55 -26
  212. package/runtime/src/crypto_kdf.c +0 -0
  213. package/runtime/src/crypto_key.c +0 -0
  214. package/runtime/src/crypto_pkey.c +198 -61
  215. package/runtime/src/crypto_subtle.c +42 -16
  216. package/runtime/src/crypto_tls.c +678 -0
  217. package/runtime/src/date.c +0 -0
  218. package/runtime/src/domexception.c +0 -0
  219. package/runtime/src/elements.c +0 -0
  220. package/runtime/src/elements.h +0 -0
  221. package/runtime/src/encoding.c +0 -0
  222. package/runtime/src/error.c +0 -0
  223. package/runtime/src/events.c +0 -0
  224. package/runtime/src/exception.c +0 -0
  225. package/runtime/src/fetch.c +0 -0
  226. package/runtime/src/function.c +0 -0
  227. package/runtime/src/gc.c +0 -0
  228. package/runtime/src/generator.c +8 -1
  229. package/runtime/src/global.c +2 -4
  230. package/runtime/src/headers.c +0 -0
  231. package/runtime/src/inspect.c +0 -0
  232. package/runtime/src/internal.h +0 -1
  233. package/runtime/src/iterate.c +0 -0
  234. package/runtime/src/iterator.c +0 -0
  235. package/runtime/src/jobs.c +2 -1
  236. package/runtime/src/jsnum.c +0 -0
  237. package/runtime/src/json.c +0 -0
  238. package/runtime/src/math.c +0 -0
  239. package/runtime/src/module.c +0 -0
  240. package/runtime/src/number.c +0 -0
  241. package/runtime/src/object.c +0 -0
  242. package/runtime/src/ops.c +0 -0
  243. package/runtime/src/os.c +0 -0
  244. package/runtime/src/os.h +0 -0
  245. package/runtime/src/process.c +7 -0
  246. package/runtime/src/promise.c +4 -1
  247. package/runtime/src/proxy.c +0 -0
  248. package/runtime/src/reflect.c +0 -0
  249. package/runtime/src/regexp.c +0 -0
  250. package/runtime/src/regexp_anchor.h +0 -0
  251. package/runtime/src/regexp_message.h +0 -0
  252. package/runtime/src/shape.c +0 -0
  253. package/runtime/src/shape.h +0 -0
  254. package/runtime/src/streams.c +0 -0
  255. package/runtime/src/streams.h +0 -0
  256. package/runtime/src/string.c +0 -0
  257. package/runtime/src/string_builtins.c +0 -0
  258. package/runtime/src/symbol.c +0 -0
  259. package/runtime/src/test_host.c +0 -0
  260. package/runtime/src/tls_roots.gen.h +3215 -0
  261. package/runtime/src/typedarray.c +0 -0
  262. package/runtime/src/tznames.gen.h +0 -0
  263. package/runtime/src/uri.c +0 -0
  264. package/runtime/src/url.c +0 -0
  265. package/runtime/src/util_types.c +52 -0
  266. package/runtime/src/weak.c +2 -1
  267. package/runtime/src/web.c +0 -0
  268. package/runtime/src/wrapper.c +0 -0
  269. package/runtime/src/writable.c +0 -0
  270. package/runtime/third_party/ada-idna/LICENSE-MIT +0 -0
  271. package/runtime/third_party/ada-idna/README.md +0 -0
  272. package/runtime/third_party/ada-idna/convert.mjs +0 -0
  273. package/runtime/third_party/ada-idna/idna.c +0 -0
  274. package/runtime/third_party/ada-idna/idna.h +0 -0
  275. package/runtime/third_party/ada-idna/idna_tables.h +0 -0
  276. package/runtime/third_party/boringssl/LICENSE +238 -0
  277. package/runtime/third_party/boringssl/README.md +46 -0
  278. package/runtime/third_party/boringssl/VERSION +1 -0
  279. package/runtime/third_party/boringssl/crypto/aes/aes.cc +44 -0
  280. package/runtime/third_party/boringssl/crypto/armv8_feature_parsing.h +67 -0
  281. package/runtime/third_party/boringssl/crypto/asn1/a_bitstr.cc +297 -0
  282. package/runtime/third_party/boringssl/crypto/asn1/a_bool.cc +50 -0
  283. package/runtime/third_party/boringssl/crypto/asn1/a_d2i_fp.cc +47 -0
  284. package/runtime/third_party/boringssl/crypto/asn1/a_dup.cc +42 -0
  285. package/runtime/third_party/boringssl/crypto/asn1/a_gentm.cc +130 -0
  286. package/runtime/third_party/boringssl/crypto/asn1/a_i2d_fp.cc +44 -0
  287. package/runtime/third_party/boringssl/crypto/asn1/a_int.cc +467 -0
  288. package/runtime/third_party/boringssl/crypto/asn1/a_mbstr.cc +242 -0
  289. package/runtime/third_party/boringssl/crypto/asn1/a_object.cc +191 -0
  290. package/runtime/third_party/boringssl/crypto/asn1/a_octet.cc +32 -0
  291. package/runtime/third_party/boringssl/crypto/asn1/a_strex.cc +411 -0
  292. package/runtime/third_party/boringssl/crypto/asn1/a_strnid.cc +208 -0
  293. package/runtime/third_party/boringssl/crypto/asn1/a_time.cc +248 -0
  294. package/runtime/third_party/boringssl/crypto/asn1/a_type.cc +467 -0
  295. package/runtime/third_party/boringssl/crypto/asn1/a_utctm.cc +128 -0
  296. package/runtime/third_party/boringssl/crypto/asn1/asn1_lib.cc +453 -0
  297. package/runtime/third_party/boringssl/crypto/asn1/asn1_par.cc +61 -0
  298. package/runtime/third_party/boringssl/crypto/asn1/asn_pack.cc +56 -0
  299. package/runtime/third_party/boringssl/crypto/asn1/f_int.cc +63 -0
  300. package/runtime/third_party/boringssl/crypto/asn1/f_string.cc +52 -0
  301. package/runtime/third_party/boringssl/crypto/asn1/internal.h +430 -0
  302. package/runtime/third_party/boringssl/crypto/asn1/posix_time.cc +244 -0
  303. package/runtime/third_party/boringssl/crypto/asn1/tasn_dec.cc +611 -0
  304. package/runtime/third_party/boringssl/crypto/asn1/tasn_enc.cc +348 -0
  305. package/runtime/third_party/boringssl/crypto/asn1/tasn_fre.cc +163 -0
  306. package/runtime/third_party/boringssl/crypto/asn1/tasn_new.cc +274 -0
  307. package/runtime/third_party/boringssl/crypto/asn1/tasn_typ.cc +92 -0
  308. package/runtime/third_party/boringssl/crypto/asn1/tasn_utl.cc +218 -0
  309. package/runtime/third_party/boringssl/crypto/base64/base64.cc +433 -0
  310. package/runtime/third_party/boringssl/crypto/bcm_support.h +62 -0
  311. package/runtime/third_party/boringssl/crypto/bio/bio.cc +715 -0
  312. package/runtime/third_party/boringssl/crypto/bio/bio_mem.cc +260 -0
  313. package/runtime/third_party/boringssl/crypto/bio/connect.cc +463 -0
  314. package/runtime/third_party/boringssl/crypto/bio/errno.cc +52 -0
  315. package/runtime/third_party/boringssl/crypto/bio/fd.cc +193 -0
  316. package/runtime/third_party/boringssl/crypto/bio/file.cc +283 -0
  317. package/runtime/third_party/boringssl/crypto/bio/hexdump.cc +154 -0
  318. package/runtime/third_party/boringssl/crypto/bio/internal.h +128 -0
  319. package/runtime/third_party/boringssl/crypto/bio/pair.cc +426 -0
  320. package/runtime/third_party/boringssl/crypto/bio/printf.cc +59 -0
  321. package/runtime/third_party/boringssl/crypto/bio/socket.cc +210 -0
  322. package/runtime/third_party/boringssl/crypto/bio/socket_helper.cc +179 -0
  323. package/runtime/third_party/boringssl/crypto/blake2/blake2.cc +173 -0
  324. package/runtime/third_party/boringssl/crypto/bn/bn_asn1.cc +57 -0
  325. package/runtime/third_party/boringssl/crypto/bn/convert.cc +409 -0
  326. package/runtime/third_party/boringssl/crypto/bn/div.cc +102 -0
  327. package/runtime/third_party/boringssl/crypto/bn/exponentiation.cc +168 -0
  328. package/runtime/third_party/boringssl/crypto/bn/sqrt.cc +93 -0
  329. package/runtime/third_party/boringssl/crypto/buf/buf.cc +119 -0
  330. package/runtime/third_party/boringssl/crypto/bytestring/asn1_compat.cc +54 -0
  331. package/runtime/third_party/boringssl/crypto/bytestring/ber.cc +268 -0
  332. package/runtime/third_party/boringssl/crypto/bytestring/cbb.cc +787 -0
  333. package/runtime/third_party/boringssl/crypto/bytestring/cbs.cc +977 -0
  334. package/runtime/third_party/boringssl/crypto/bytestring/internal.h +134 -0
  335. package/runtime/third_party/boringssl/crypto/bytestring/unicode.cc +156 -0
  336. package/runtime/third_party/boringssl/crypto/chacha/chacha.cc +226 -0
  337. package/runtime/third_party/boringssl/crypto/chacha/internal.h +103 -0
  338. package/runtime/third_party/boringssl/crypto/cipher/derive_key.cc +106 -0
  339. package/runtime/third_party/boringssl/crypto/cipher/e_aesctrhmac.cc +294 -0
  340. package/runtime/third_party/boringssl/crypto/cipher/e_aeseax.cc +351 -0
  341. package/runtime/third_party/boringssl/crypto/cipher/e_aesgcmsiv.cc +918 -0
  342. package/runtime/third_party/boringssl/crypto/cipher/e_chacha20poly1305.cc +404 -0
  343. package/runtime/third_party/boringssl/crypto/cipher/e_des.cc +214 -0
  344. package/runtime/third_party/boringssl/crypto/cipher/e_null.cc +55 -0
  345. package/runtime/third_party/boringssl/crypto/cipher/e_rc2.cc +432 -0
  346. package/runtime/third_party/boringssl/crypto/cipher/e_rc4.cc +56 -0
  347. package/runtime/third_party/boringssl/crypto/cipher/e_tls.cc +615 -0
  348. package/runtime/third_party/boringssl/crypto/cipher/get_cipher.cc +85 -0
  349. package/runtime/third_party/boringssl/crypto/cipher/internal.h +399 -0
  350. package/runtime/third_party/boringssl/crypto/cipher/tls_cbc.cc +476 -0
  351. package/runtime/third_party/boringssl/crypto/cms/cms.cc +178 -0
  352. package/runtime/third_party/boringssl/crypto/conf/conf.cc +637 -0
  353. package/runtime/third_party/boringssl/crypto/conf/internal.h +54 -0
  354. package/runtime/third_party/boringssl/crypto/cpu_aarch64_apple.cc +76 -0
  355. package/runtime/third_party/boringssl/crypto/cpu_aarch64_fuchsia.cc +58 -0
  356. package/runtime/third_party/boringssl/crypto/cpu_aarch64_linux.cc +66 -0
  357. package/runtime/third_party/boringssl/crypto/cpu_aarch64_openbsd.cc +45 -0
  358. package/runtime/third_party/boringssl/crypto/cpu_aarch64_sysreg.cc +66 -0
  359. package/runtime/third_party/boringssl/crypto/cpu_aarch64_win.cc +52 -0
  360. package/runtime/third_party/boringssl/crypto/cpu_arm_freebsd.cc +55 -0
  361. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.cc +173 -0
  362. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.h +141 -0
  363. package/runtime/third_party/boringssl/crypto/cpu_intel.cc +287 -0
  364. package/runtime/third_party/boringssl/crypto/crypto.cc +152 -0
  365. package/runtime/third_party/boringssl/crypto/curve25519/asm/x25519-asm-arm.S +2124 -0
  366. package/runtime/third_party/boringssl/crypto/curve25519/cpace.cc +227 -0
  367. package/runtime/third_party/boringssl/crypto/curve25519/curve25519.cc +2436 -0
  368. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_64_adx.cc +18 -0
  369. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_tables.h +3264 -0
  370. package/runtime/third_party/boringssl/crypto/curve25519/internal.h +202 -0
  371. package/runtime/third_party/boringssl/crypto/curve25519/spake25519.cc +532 -0
  372. package/runtime/third_party/boringssl/crypto/des/des.cc +837 -0
  373. package/runtime/third_party/boringssl/crypto/des/internal.h +144 -0
  374. package/runtime/third_party/boringssl/crypto/dh/dh_asn1.cc +109 -0
  375. package/runtime/third_party/boringssl/crypto/dh/params.cc +411 -0
  376. package/runtime/third_party/boringssl/crypto/digest/digest_extra.cc +361 -0
  377. package/runtime/third_party/boringssl/crypto/dsa/dsa.cc +922 -0
  378. package/runtime/third_party/boringssl/crypto/dsa/dsa_asn1.cc +306 -0
  379. package/runtime/third_party/boringssl/crypto/dsa/internal.h +56 -0
  380. package/runtime/third_party/boringssl/crypto/ec/ec_asn1.cc +542 -0
  381. package/runtime/third_party/boringssl/crypto/ec/ec_derive.cc +94 -0
  382. package/runtime/third_party/boringssl/crypto/ec/hash_to_curve.cc +773 -0
  383. package/runtime/third_party/boringssl/crypto/ec/internal.h +114 -0
  384. package/runtime/third_party/boringssl/crypto/ecdh/ecdh.cc +75 -0
  385. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.cc +337 -0
  386. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  387. package/runtime/third_party/boringssl/crypto/engine/engine.cc +95 -0
  388. package/runtime/third_party/boringssl/crypto/err/err.cc +820 -0
  389. package/runtime/third_party/boringssl/crypto/err/internal.h +45 -0
  390. package/runtime/third_party/boringssl/crypto/evp/evp.cc +454 -0
  391. package/runtime/third_party/boringssl/crypto/evp/evp_asn1.cc +439 -0
  392. package/runtime/third_party/boringssl/crypto/evp/evp_ctx.cc +541 -0
  393. package/runtime/third_party/boringssl/crypto/evp/evp_kem.cc +101 -0
  394. package/runtime/third_party/boringssl/crypto/evp/internal.h +427 -0
  395. package/runtime/third_party/boringssl/crypto/evp/p_dh.cc +326 -0
  396. package/runtime/third_party/boringssl/crypto/evp/p_dsa.cc +333 -0
  397. package/runtime/third_party/boringssl/crypto/evp/p_ec.cc +736 -0
  398. package/runtime/third_party/boringssl/crypto/evp/p_ed25519.cc +359 -0
  399. package/runtime/third_party/boringssl/crypto/evp/p_hkdf.cc +204 -0
  400. package/runtime/third_party/boringssl/crypto/evp/p_mldsa.cc +549 -0
  401. package/runtime/third_party/boringssl/crypto/evp/p_mlkem.cc +510 -0
  402. package/runtime/third_party/boringssl/crypto/evp/p_rsa.cc +1185 -0
  403. package/runtime/third_party/boringssl/crypto/evp/p_x25519.cc +371 -0
  404. package/runtime/third_party/boringssl/crypto/evp/p_xwing.cc +300 -0
  405. package/runtime/third_party/boringssl/crypto/evp/pbkdf.cc +105 -0
  406. package/runtime/third_party/boringssl/crypto/evp/print.cc +287 -0
  407. package/runtime/third_party/boringssl/crypto/evp/scrypt.cc +218 -0
  408. package/runtime/third_party/boringssl/crypto/evp/sign.cc +95 -0
  409. package/runtime/third_party/boringssl/crypto/ex_data.cc +140 -0
  410. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes.cc.inc +208 -0
  411. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes_nohw.cc.inc +1279 -0
  412. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cbc.cc.inc +132 -0
  413. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cfb.cc.inc +168 -0
  414. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ctr.cc.inc +102 -0
  415. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm.cc.inc +614 -0
  416. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm_nohw.cc.inc +304 -0
  417. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/internal.h +590 -0
  418. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.cc.inc +211 -0
  419. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.cc.inc +97 -0
  420. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ofb.cc.inc +55 -0
  421. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm.cc +288 -0
  422. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm_interface.h +953 -0
  423. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/add.cc.inc +276 -0
  424. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +573 -0
  425. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bn.cc.inc +377 -0
  426. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bytes.cc.inc +230 -0
  427. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/cmp.cc.inc +161 -0
  428. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/ctx.cc.inc +127 -0
  429. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div.cc.inc +738 -0
  430. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div_extra.cc.inc +90 -0
  431. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.cc.inc +743 -0
  432. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd.cc.inc +281 -0
  433. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.cc.inc +327 -0
  434. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/generic.cc.inc +579 -0
  435. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/internal.h +810 -0
  436. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/jacobi.cc.inc +101 -0
  437. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery.cc.inc +408 -0
  438. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.cc.inc +179 -0
  439. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/mul.cc.inc +347 -0
  440. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/prime.cc.inc +931 -0
  441. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/random.cc.inc +261 -0
  442. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.cc.inc +144 -0
  443. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +109 -0
  444. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/shift.cc.inc +317 -0
  445. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/sqrt.cc.inc +370 -0
  446. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/aead.cc.inc +619 -0
  447. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/cipher.cc.inc +837 -0
  448. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.cc.inc +1240 -0
  449. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aesccm.cc.inc +440 -0
  450. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +461 -0
  451. package/runtime/third_party/boringssl/crypto/fipsmodule/cmac/cmac.cc.inc +293 -0
  452. package/runtime/third_party/boringssl/crypto/fipsmodule/delocate.h +95 -0
  453. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/check.cc.inc +198 -0
  454. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/dh.cc.inc +401 -0
  455. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/internal.h +63 -0
  456. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digest.cc.inc +221 -0
  457. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digests.cc.inc +184 -0
  458. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/internal.h +72 -0
  459. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +166 -0
  460. package/runtime/third_party/boringssl/crypto/fipsmodule/digestsign/digestsign.cc.inc +230 -0
  461. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  462. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec.cc.inc +1024 -0
  463. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_key.cc.inc +536 -0
  464. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.cc.inc +379 -0
  465. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/felem.cc.inc +250 -0
  466. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/internal.h +752 -0
  467. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/oct.cc.inc +174 -0
  468. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz-table.h +9502 -0
  469. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.cc.inc +740 -0
  470. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.h +207 -0
  471. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256.cc.inc +578 -0
  472. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256_table.h +297 -0
  473. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/scalar.cc.inc +184 -0
  474. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple.cc.inc +246 -0
  475. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.cc.inc +274 -0
  476. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/util.cc.inc +258 -0
  477. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/wnaf.cc.inc +224 -0
  478. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.cc.inc +91 -0
  479. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +288 -0
  480. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/internal.h +57 -0
  481. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/internal.h +38 -0
  482. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/jitter.cc.inc +487 -0
  483. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  484. package/runtime/third_party/boringssl/crypto/fipsmodule/fips_shared_support.cc +28 -0
  485. package/runtime/third_party/boringssl/crypto/fipsmodule/hkdf/hkdf.cc.inc +114 -0
  486. package/runtime/third_party/boringssl/crypto/fipsmodule/hmac/hmac.cc.inc +218 -0
  487. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/internal.h +165 -0
  488. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/keccak.cc.inc +647 -0
  489. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  490. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/mldsa.cc.inc +3323 -0
  491. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  492. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/mlkem.cc.inc +1856 -0
  493. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  494. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.cc.inc +401 -0
  495. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/internal.h +99 -0
  496. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/rand.cc.inc +486 -0
  497. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +167 -0
  498. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/padding.cc.inc +371 -0
  499. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa.cc.inc +996 -0
  500. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.cc.inc +1000 -0
  501. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/fips.cc.inc +129 -0
  502. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/self_check.cc.inc +1093 -0
  503. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/internal.h +112 -0
  504. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +330 -0
  505. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/internal.h +205 -0
  506. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha1.cc.inc +404 -0
  507. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha256.cc.inc +315 -0
  508. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha512.cc.inc +473 -0
  509. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/address.h +144 -0
  510. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  511. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.cc.inc +179 -0
  512. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.h +48 -0
  513. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.cc.inc +164 -0
  514. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.h +58 -0
  515. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/params.h +178 -0
  516. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +690 -0
  517. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.cc.inc +326 -0
  518. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.h +71 -0
  519. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.cc.inc +172 -0
  520. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.h +40 -0
  521. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/internal.h +33 -0
  522. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/kdf.cc.inc +180 -0
  523. package/runtime/third_party/boringssl/crypto/fuzzer_mode.cc +30 -0
  524. package/runtime/third_party/boringssl/crypto/hpke/hpke.cc +1514 -0
  525. package/runtime/third_party/boringssl/crypto/hrss/asm/poly_rq_mul.S +8489 -0
  526. package/runtime/third_party/boringssl/crypto/hrss/hrss.cc +2189 -0
  527. package/runtime/third_party/boringssl/crypto/hrss/internal.h +64 -0
  528. package/runtime/third_party/boringssl/crypto/internal.h +1767 -0
  529. package/runtime/third_party/boringssl/crypto/lhash/internal.h +222 -0
  530. package/runtime/third_party/boringssl/crypto/lhash/lhash.cc +312 -0
  531. package/runtime/third_party/boringssl/crypto/md4/md4.cc +207 -0
  532. package/runtime/third_party/boringssl/crypto/md5/internal.h +34 -0
  533. package/runtime/third_party/boringssl/crypto/md5/md5.cc +255 -0
  534. package/runtime/third_party/boringssl/crypto/mem.cc +577 -0
  535. package/runtime/third_party/boringssl/crypto/mem_internal.h +706 -0
  536. package/runtime/third_party/boringssl/crypto/mldsa/mldsa.cc +296 -0
  537. package/runtime/third_party/boringssl/crypto/mlkem/mlkem.cc +108 -0
  538. package/runtime/third_party/boringssl/crypto/obj/obj.cc +494 -0
  539. package/runtime/third_party/boringssl/crypto/obj/obj_dat.h +11722 -0
  540. package/runtime/third_party/boringssl/crypto/obj/obj_xref.cc +83 -0
  541. package/runtime/third_party/boringssl/crypto/params_internal.h +30 -0
  542. package/runtime/third_party/boringssl/crypto/pem/internal.h +135 -0
  543. package/runtime/third_party/boringssl/crypto/pem/pem_all.cc +153 -0
  544. package/runtime/third_party/boringssl/crypto/pem/pem_info.cc +250 -0
  545. package/runtime/third_party/boringssl/crypto/pem/pem_lib.cc +707 -0
  546. package/runtime/third_party/boringssl/crypto/pem/pem_oth.cc +45 -0
  547. package/runtime/third_party/boringssl/crypto/pem/pem_pk8.cc +211 -0
  548. package/runtime/third_party/boringssl/crypto/pem/pem_pkey.cc +147 -0
  549. package/runtime/third_party/boringssl/crypto/pem/pem_x509.cc +25 -0
  550. package/runtime/third_party/boringssl/crypto/pem/pem_xaux.cc +25 -0
  551. package/runtime/third_party/boringssl/crypto/pkcs7/internal.h +67 -0
  552. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7.cc +198 -0
  553. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7_x509.cc +527 -0
  554. package/runtime/third_party/boringssl/crypto/pkcs8/internal.h +98 -0
  555. package/runtime/third_party/boringssl/crypto/pkcs8/p5_pbev2.cc +286 -0
  556. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8.cc +473 -0
  557. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8_x509.cc +1328 -0
  558. package/runtime/third_party/boringssl/crypto/poly1305/internal.h +54 -0
  559. package/runtime/third_party/boringssl/crypto/poly1305/poly1305.cc +315 -0
  560. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm.cc +294 -0
  561. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm_asm.S +2017 -0
  562. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_vec.cc +853 -0
  563. package/runtime/third_party/boringssl/crypto/pool/internal.h +95 -0
  564. package/runtime/third_party/boringssl/crypto/pool/pool.cc +282 -0
  565. package/runtime/third_party/boringssl/crypto/rand/deterministic.cc +58 -0
  566. package/runtime/third_party/boringssl/crypto/rand/fork_detect.cc +222 -0
  567. package/runtime/third_party/boringssl/crypto/rand/forkunsafe.cc +44 -0
  568. package/runtime/third_party/boringssl/crypto/rand/getentropy.cc +53 -0
  569. package/runtime/third_party/boringssl/crypto/rand/internal.h +67 -0
  570. package/runtime/third_party/boringssl/crypto/rand/ios.cc +35 -0
  571. package/runtime/third_party/boringssl/crypto/rand/rand.cc +79 -0
  572. package/runtime/third_party/boringssl/crypto/rand/trusty.cc +39 -0
  573. package/runtime/third_party/boringssl/crypto/rand/urandom.cc +149 -0
  574. package/runtime/third_party/boringssl/crypto/rand/windows.cc +91 -0
  575. package/runtime/third_party/boringssl/crypto/rc4/rc4.cc +56 -0
  576. package/runtime/third_party/boringssl/crypto/refcount.cc +49 -0
  577. package/runtime/third_party/boringssl/crypto/rsa/internal.h +51 -0
  578. package/runtime/third_party/boringssl/crypto/rsa/rsa_asn1.cc +404 -0
  579. package/runtime/third_party/boringssl/crypto/rsa/rsa_crypt.cc +530 -0
  580. package/runtime/third_party/boringssl/crypto/rsa/rsa_extra.cc +30 -0
  581. package/runtime/third_party/boringssl/crypto/rsa/rsa_print.cc +25 -0
  582. package/runtime/third_party/boringssl/crypto/sha/sha1.cc +55 -0
  583. package/runtime/third_party/boringssl/crypto/sha/sha256.cc +89 -0
  584. package/runtime/third_party/boringssl/crypto/sha/sha512.cc +106 -0
  585. package/runtime/third_party/boringssl/crypto/siphash/siphash.cc +81 -0
  586. package/runtime/third_party/boringssl/crypto/slhdsa/slhdsa.cc +167 -0
  587. package/runtime/third_party/boringssl/crypto/spake2plus/internal.h +204 -0
  588. package/runtime/third_party/boringssl/crypto/spake2plus/spake2plus.cc +501 -0
  589. package/runtime/third_party/boringssl/crypto/stack/stack.cc +462 -0
  590. package/runtime/third_party/boringssl/crypto/thread.cc +68 -0
  591. package/runtime/third_party/boringssl/crypto/thread_none.cc +48 -0
  592. package/runtime/third_party/boringssl/crypto/thread_pthread.cc +138 -0
  593. package/runtime/third_party/boringssl/crypto/thread_win.cc +227 -0
  594. package/runtime/third_party/boringssl/crypto/trust_token/internal.h +405 -0
  595. package/runtime/third_party/boringssl/crypto/trust_token/pmbtoken.cc +1672 -0
  596. package/runtime/third_party/boringssl/crypto/trust_token/trust_token.cc +701 -0
  597. package/runtime/third_party/boringssl/crypto/trust_token/voprf.cc +1266 -0
  598. package/runtime/third_party/boringssl/crypto/x509/a_digest.cc +52 -0
  599. package/runtime/third_party/boringssl/crypto/x509/a_sign.cc +100 -0
  600. package/runtime/third_party/boringssl/crypto/x509/a_verify.cc +77 -0
  601. package/runtime/third_party/boringssl/crypto/x509/algorithm.cc +167 -0
  602. package/runtime/third_party/boringssl/crypto/x509/asn1_gen.cc +540 -0
  603. package/runtime/third_party/boringssl/crypto/x509/by_dir.cc +301 -0
  604. package/runtime/third_party/boringssl/crypto/x509/by_file.cc +226 -0
  605. package/runtime/third_party/boringssl/crypto/x509/i2d_pr.cc +37 -0
  606. package/runtime/third_party/boringssl/crypto/x509/internal.h +697 -0
  607. package/runtime/third_party/boringssl/crypto/x509/name_print.cc +187 -0
  608. package/runtime/third_party/boringssl/crypto/x509/policy.cc +686 -0
  609. package/runtime/third_party/boringssl/crypto/x509/rsa_pss.cc +187 -0
  610. package/runtime/third_party/boringssl/crypto/x509/t_crl.cc +106 -0
  611. package/runtime/third_party/boringssl/crypto/x509/t_req.cc +206 -0
  612. package/runtime/third_party/boringssl/crypto/x509/t_x509.cc +292 -0
  613. package/runtime/third_party/boringssl/crypto/x509/t_x509a.cc +81 -0
  614. package/runtime/third_party/boringssl/crypto/x509/v3_akey.cc +174 -0
  615. package/runtime/third_party/boringssl/crypto/x509/v3_akeya.cc +31 -0
  616. package/runtime/third_party/boringssl/crypto/x509/v3_alt.cc +636 -0
  617. package/runtime/third_party/boringssl/crypto/x509/v3_bcons.cc +96 -0
  618. package/runtime/third_party/boringssl/crypto/x509/v3_bitst.cc +100 -0
  619. package/runtime/third_party/boringssl/crypto/x509/v3_conf.cc +369 -0
  620. package/runtime/third_party/boringssl/crypto/x509/v3_cpols.cc +417 -0
  621. package/runtime/third_party/boringssl/crypto/x509/v3_crld.cc +471 -0
  622. package/runtime/third_party/boringssl/crypto/x509/v3_enum.cc +74 -0
  623. package/runtime/third_party/boringssl/crypto/x509/v3_extku.cc +97 -0
  624. package/runtime/third_party/boringssl/crypto/x509/v3_genn.cc +238 -0
  625. package/runtime/third_party/boringssl/crypto/x509/v3_ia5.cc +83 -0
  626. package/runtime/third_party/boringssl/crypto/x509/v3_info.cc +162 -0
  627. package/runtime/third_party/boringssl/crypto/x509/v3_int.cc +83 -0
  628. package/runtime/third_party/boringssl/crypto/x509/v3_lib.cc +349 -0
  629. package/runtime/third_party/boringssl/crypto/x509/v3_ncons.cc +798 -0
  630. package/runtime/third_party/boringssl/crypto/x509/v3_ocsp.cc +92 -0
  631. package/runtime/third_party/boringssl/crypto/x509/v3_pcons.cc +102 -0
  632. package/runtime/third_party/boringssl/crypto/x509/v3_pmaps.cc +110 -0
  633. package/runtime/third_party/boringssl/crypto/x509/v3_prn.cc +183 -0
  634. package/runtime/third_party/boringssl/crypto/x509/v3_purp.cc +580 -0
  635. package/runtime/third_party/boringssl/crypto/x509/v3_skey.cc +128 -0
  636. package/runtime/third_party/boringssl/crypto/x509/v3_utl.cc +1311 -0
  637. package/runtime/third_party/boringssl/crypto/x509/x509.cc +47 -0
  638. package/runtime/third_party/boringssl/crypto/x509/x509_att.cc +188 -0
  639. package/runtime/third_party/boringssl/crypto/x509/x509_cmp.cc +243 -0
  640. package/runtime/third_party/boringssl/crypto/x509/x509_d2.cc +66 -0
  641. package/runtime/third_party/boringssl/crypto/x509/x509_def.cc +42 -0
  642. package/runtime/third_party/boringssl/crypto/x509/x509_ext.cc +161 -0
  643. package/runtime/third_party/boringssl/crypto/x509/x509_lu.cc +570 -0
  644. package/runtime/third_party/boringssl/crypto/x509/x509_mtc.cc +598 -0
  645. package/runtime/third_party/boringssl/crypto/x509/x509_obj.cc +169 -0
  646. package/runtime/third_party/boringssl/crypto/x509/x509_req.cc +248 -0
  647. package/runtime/third_party/boringssl/crypto/x509/x509_set.cc +166 -0
  648. package/runtime/third_party/boringssl/crypto/x509/x509_trs.cc +123 -0
  649. package/runtime/third_party/boringssl/crypto/x509/x509_txt.cc +147 -0
  650. package/runtime/third_party/boringssl/crypto/x509/x509_v3.cc +249 -0
  651. package/runtime/third_party/boringssl/crypto/x509/x509_vfy.cc +1531 -0
  652. package/runtime/third_party/boringssl/crypto/x509/x509_vpm.cc +449 -0
  653. package/runtime/third_party/boringssl/crypto/x509/x509cset.cc +222 -0
  654. package/runtime/third_party/boringssl/crypto/x509/x509name.cc +377 -0
  655. package/runtime/third_party/boringssl/crypto/x509/x509rset.cc +55 -0
  656. package/runtime/third_party/boringssl/crypto/x509/x509spki.cc +91 -0
  657. package/runtime/third_party/boringssl/crypto/x509/x_algor.cc +223 -0
  658. package/runtime/third_party/boringssl/crypto/x509/x_all.cc +352 -0
  659. package/runtime/third_party/boringssl/crypto/x509/x_attrib.cc +61 -0
  660. package/runtime/third_party/boringssl/crypto/x509/x_crl.cc +325 -0
  661. package/runtime/third_party/boringssl/crypto/x509/x_exten.cc +42 -0
  662. package/runtime/third_party/boringssl/crypto/x509/x_name.cc +407 -0
  663. package/runtime/third_party/boringssl/crypto/x509/x_pubkey.cc +199 -0
  664. package/runtime/third_party/boringssl/crypto/x509/x_req.cc +80 -0
  665. package/runtime/third_party/boringssl/crypto/x509/x_sig.cc +51 -0
  666. package/runtime/third_party/boringssl/crypto/x509/x_spki.cc +44 -0
  667. package/runtime/third_party/boringssl/crypto/x509/x_x509.cc +495 -0
  668. package/runtime/third_party/boringssl/crypto/x509/x_x509a.cc +169 -0
  669. package/runtime/third_party/boringssl/crypto/xwing/xwing.cc +257 -0
  670. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-apple.S +1326 -0
  671. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-linux.S +1327 -0
  672. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-apple.S +1252 -0
  673. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-linux.S +1253 -0
  674. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-apple.S +873 -0
  675. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-linux.S +885 -0
  676. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-apple.S +2490 -0
  677. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-linux.S +2530 -0
  678. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-apple.S +2413 -0
  679. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-linux.S +2397 -0
  680. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv7-linux.S +784 -0
  681. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-apple.S +792 -0
  682. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-linux.S +786 -0
  683. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-win.S +798 -0
  684. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-apple.S +2912 -0
  685. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-linux.S +2907 -0
  686. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-win.S +2915 -0
  687. package/runtime/third_party/boringssl/gen/bcm/armv4-mont-linux.S +932 -0
  688. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-apple.S +1440 -0
  689. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-linux.S +1440 -0
  690. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-win.S +1446 -0
  691. package/runtime/third_party/boringssl/gen/bcm/bn-586-apple.S +530 -0
  692. package/runtime/third_party/boringssl/gen/bcm/bn-586-linux.S +540 -0
  693. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-apple.S +88 -0
  694. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-linux.S +87 -0
  695. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-win.S +87 -0
  696. package/runtime/third_party/boringssl/gen/bcm/bsaes-armv7-linux.S +1520 -0
  697. package/runtime/third_party/boringssl/gen/bcm/co-586-apple.S +1256 -0
  698. package/runtime/third_party/boringssl/gen/bcm/co-586-linux.S +1264 -0
  699. package/runtime/third_party/boringssl/gen/bcm/ghash-armv4-linux.S +242 -0
  700. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-apple.S +337 -0
  701. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-linux.S +335 -0
  702. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-win.S +341 -0
  703. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-apple.S +288 -0
  704. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-linux.S +292 -0
  705. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-apple.S +426 -0
  706. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-linux.S +425 -0
  707. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-apple.S +322 -0
  708. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-linux.S +328 -0
  709. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-apple.S +1134 -0
  710. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-linux.S +1129 -0
  711. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv7-linux.S +244 -0
  712. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-apple.S +567 -0
  713. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-linux.S +563 -0
  714. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-win.S +571 -0
  715. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-apple.S +1744 -0
  716. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-linux.S +1725 -0
  717. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-win.S +1765 -0
  718. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-apple.S +4544 -0
  719. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-linux.S +4600 -0
  720. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-apple.S +310 -0
  721. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-linux.S +310 -0
  722. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-win.S +310 -0
  723. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-apple.S +321 -0
  724. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-linux.S +335 -0
  725. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-apple.S +58 -0
  726. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-linux.S +57 -0
  727. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-apple.S +1756 -0
  728. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-linux.S +1751 -0
  729. package/runtime/third_party/boringssl/gen/bcm/sha1-586-apple.S +3782 -0
  730. package/runtime/third_party/boringssl/gen/bcm/sha1-586-linux.S +3788 -0
  731. package/runtime/third_party/boringssl/gen/bcm/sha1-armv4-large-linux.S +1479 -0
  732. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-apple.S +1219 -0
  733. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-linux.S +1218 -0
  734. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-win.S +1222 -0
  735. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-apple.S +5454 -0
  736. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-linux.S +5450 -0
  737. package/runtime/third_party/boringssl/gen/bcm/sha256-586-apple.S +5593 -0
  738. package/runtime/third_party/boringssl/gen/bcm/sha256-586-linux.S +5599 -0
  739. package/runtime/third_party/boringssl/gen/bcm/sha256-armv4-linux.S +2840 -0
  740. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-apple.S +1195 -0
  741. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-linux.S +1194 -0
  742. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-win.S +1198 -0
  743. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-apple.S +4173 -0
  744. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-linux.S +4170 -0
  745. package/runtime/third_party/boringssl/gen/bcm/sha512-586-apple.S +2406 -0
  746. package/runtime/third_party/boringssl/gen/bcm/sha512-586-linux.S +2410 -0
  747. package/runtime/third_party/boringssl/gen/bcm/sha512-armv4-linux.S +1857 -0
  748. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-apple.S +1598 -0
  749. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-linux.S +1597 -0
  750. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-win.S +1601 -0
  751. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-apple.S +2979 -0
  752. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-linux.S +2978 -0
  753. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv7-linux.S +1225 -0
  754. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-apple.S +1238 -0
  755. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-linux.S +1220 -0
  756. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-win.S +1256 -0
  757. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-apple.S +680 -0
  758. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-linux.S +706 -0
  759. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-apple.S +1146 -0
  760. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-linux.S +1133 -0
  761. package/runtime/third_party/boringssl/gen/bcm/x86-mont-apple.S +216 -0
  762. package/runtime/third_party/boringssl/gen/bcm/x86-mont-linux.S +218 -0
  763. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-apple.S +1238 -0
  764. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-linux.S +1237 -0
  765. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-apple.S +3644 -0
  766. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-linux.S +3628 -0
  767. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +325 -0
  768. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +325 -0
  769. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-apple.S +3113 -0
  770. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-linux.S +3091 -0
  771. package/runtime/third_party/boringssl/gen/crypto/chacha-armv4-linux.S +1450 -0
  772. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-apple.S +1969 -0
  773. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-linux.S +1967 -0
  774. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-win.S +1973 -0
  775. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-apple.S +957 -0
  776. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-linux.S +961 -0
  777. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-apple.S +1608 -0
  778. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-linux.S +1611 -0
  779. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-apple.S +3010 -0
  780. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-linux.S +3008 -0
  781. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-win.S +3014 -0
  782. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-apple.S +8903 -0
  783. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-linux.S +8940 -0
  784. package/runtime/third_party/boringssl/gen/crypto/err_data.cc +1578 -0
  785. package/runtime/third_party/boringssl/gen/crypto/md5-586-apple.S +684 -0
  786. package/runtime/third_party/boringssl/gen/crypto/md5-586-linux.S +686 -0
  787. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-apple.S +690 -0
  788. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-linux.S +695 -0
  789. package/runtime/third_party/boringssl/include/openssl/aead.h +650 -0
  790. package/runtime/third_party/boringssl/include/openssl/aes.h +173 -0
  791. package/runtime/third_party/boringssl/include/openssl/arm_arch.h +24 -0
  792. package/runtime/third_party/boringssl/include/openssl/asm_base.h +219 -0
  793. package/runtime/third_party/boringssl/include/openssl/asn1.h +2002 -0
  794. package/runtime/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  795. package/runtime/third_party/boringssl/include/openssl/asn1t.h +584 -0
  796. package/runtime/third_party/boringssl/include/openssl/base.h +548 -0
  797. package/runtime/third_party/boringssl/include/openssl/base64.h +156 -0
  798. package/runtime/third_party/boringssl/include/openssl/bio.h +1061 -0
  799. package/runtime/third_party/boringssl/include/openssl/blake2.h +63 -0
  800. package/runtime/third_party/boringssl/include/openssl/blowfish.h +58 -0
  801. package/runtime/third_party/boringssl/include/openssl/bn.h +986 -0
  802. package/runtime/third_party/boringssl/include/openssl/buf.h +95 -0
  803. package/runtime/third_party/boringssl/include/openssl/buffer.h +18 -0
  804. package/runtime/third_party/boringssl/include/openssl/bytestring.h +798 -0
  805. package/runtime/third_party/boringssl/include/openssl/cast.h +91 -0
  806. package/runtime/third_party/boringssl/include/openssl/chacha.h +47 -0
  807. package/runtime/third_party/boringssl/include/openssl/cipher.h +819 -0
  808. package/runtime/third_party/boringssl/include/openssl/cmac.h +91 -0
  809. package/runtime/third_party/boringssl/include/openssl/cms.h +147 -0
  810. package/runtime/third_party/boringssl/include/openssl/conf.h +136 -0
  811. package/runtime/third_party/boringssl/include/openssl/configuration.h +18 -0
  812. package/runtime/third_party/boringssl/include/openssl/cpu.h +18 -0
  813. package/runtime/third_party/boringssl/include/openssl/crypto.h +235 -0
  814. package/runtime/third_party/boringssl/include/openssl/ctrdrbg.h +116 -0
  815. package/runtime/third_party/boringssl/include/openssl/curve25519.h +309 -0
  816. package/runtime/third_party/boringssl/include/openssl/des.h +134 -0
  817. package/runtime/third_party/boringssl/include/openssl/dh.h +336 -0
  818. package/runtime/third_party/boringssl/include/openssl/digest.h +399 -0
  819. package/runtime/third_party/boringssl/include/openssl/dsa.h +392 -0
  820. package/runtime/third_party/boringssl/include/openssl/dtls1.h +16 -0
  821. package/runtime/third_party/boringssl/include/openssl/e_os2.h +18 -0
  822. package/runtime/third_party/boringssl/include/openssl/ec.h +530 -0
  823. package/runtime/third_party/boringssl/include/openssl/ec_key.h +358 -0
  824. package/runtime/third_party/boringssl/include/openssl/ecdh.h +67 -0
  825. package/runtime/third_party/boringssl/include/openssl/ecdsa.h +242 -0
  826. package/runtime/third_party/boringssl/include/openssl/engine.h +109 -0
  827. package/runtime/third_party/boringssl/include/openssl/err.h +416 -0
  828. package/runtime/third_party/boringssl/include/openssl/evp.h +1645 -0
  829. package/runtime/third_party/boringssl/include/openssl/evp_errors.h +66 -0
  830. package/runtime/third_party/boringssl/include/openssl/ex_data.h +117 -0
  831. package/runtime/third_party/boringssl/include/openssl/hkdf.h +68 -0
  832. package/runtime/third_party/boringssl/include/openssl/hmac.h +151 -0
  833. package/runtime/third_party/boringssl/include/openssl/hpke.h +456 -0
  834. package/runtime/third_party/boringssl/include/openssl/hrss.h +108 -0
  835. package/runtime/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  836. package/runtime/third_party/boringssl/include/openssl/kdf.h +92 -0
  837. package/runtime/third_party/boringssl/include/openssl/lhash.h +18 -0
  838. package/runtime/third_party/boringssl/include/openssl/md4.h +73 -0
  839. package/runtime/third_party/boringssl/include/openssl/md5.h +67 -0
  840. package/runtime/third_party/boringssl/include/openssl/mem.h +215 -0
  841. package/runtime/third_party/boringssl/include/openssl/mldsa.h +486 -0
  842. package/runtime/third_party/boringssl/include/openssl/mlkem.h +222 -0
  843. package/runtime/third_party/boringssl/include/openssl/nid.h +5561 -0
  844. package/runtime/third_party/boringssl/include/openssl/obj.h +225 -0
  845. package/runtime/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  846. package/runtime/third_party/boringssl/include/openssl/objects.h +18 -0
  847. package/runtime/third_party/boringssl/include/openssl/opensslconf.h +108 -0
  848. package/runtime/third_party/boringssl/include/openssl/opensslv.h +18 -0
  849. package/runtime/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  850. package/runtime/third_party/boringssl/include/openssl/params.h +42 -0
  851. package/runtime/third_party/boringssl/include/openssl/pem.h +769 -0
  852. package/runtime/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  853. package/runtime/third_party/boringssl/include/openssl/pkcs7.h +239 -0
  854. package/runtime/third_party/boringssl/include/openssl/pkcs8.h +267 -0
  855. package/runtime/third_party/boringssl/include/openssl/poly1305.h +52 -0
  856. package/runtime/third_party/boringssl/include/openssl/pool.h +137 -0
  857. package/runtime/third_party/boringssl/include/openssl/posix_time.h +51 -0
  858. package/runtime/third_party/boringssl/include/openssl/prefix_symbols.h +8000 -0
  859. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_S.h +633 -0
  860. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_c.h +329 -0
  861. package/runtime/third_party/boringssl/include/openssl/rand.h +138 -0
  862. package/runtime/third_party/boringssl/include/openssl/rc4.h +54 -0
  863. package/runtime/third_party/boringssl/include/openssl/ripemd.h +71 -0
  864. package/runtime/third_party/boringssl/include/openssl/rsa.h +893 -0
  865. package/runtime/third_party/boringssl/include/openssl/safestack.h +16 -0
  866. package/runtime/third_party/boringssl/include/openssl/service_indicator.h +19 -0
  867. package/runtime/third_party/boringssl/include/openssl/sha.h +108 -0
  868. package/runtime/third_party/boringssl/include/openssl/sha2.h +201 -0
  869. package/runtime/third_party/boringssl/include/openssl/siphash.h +37 -0
  870. package/runtime/third_party/boringssl/include/openssl/slhdsa.h +250 -0
  871. package/runtime/third_party/boringssl/include/openssl/span.h +376 -0
  872. package/runtime/third_party/boringssl/include/openssl/srtp.h +18 -0
  873. package/runtime/third_party/boringssl/include/openssl/ssl.h +7211 -0
  874. package/runtime/third_party/boringssl/include/openssl/ssl3.h +171 -0
  875. package/runtime/third_party/boringssl/include/openssl/stack.h +688 -0
  876. package/runtime/third_party/boringssl/include/openssl/target.h +246 -0
  877. package/runtime/third_party/boringssl/include/openssl/thread.h +114 -0
  878. package/runtime/third_party/boringssl/include/openssl/time.h +22 -0
  879. package/runtime/third_party/boringssl/include/openssl/tls1.h +263 -0
  880. package/runtime/third_party/boringssl/include/openssl/tls_prf.h +47 -0
  881. package/runtime/third_party/boringssl/include/openssl/trust_token.h +349 -0
  882. package/runtime/third_party/boringssl/include/openssl/type_check.h +37 -0
  883. package/runtime/third_party/boringssl/include/openssl/types.h +18 -0
  884. package/runtime/third_party/boringssl/include/openssl/x509.h +5404 -0
  885. package/runtime/third_party/boringssl/include/openssl/x509_vfy.h +18 -0
  886. package/runtime/third_party/boringssl/include/openssl/x509v3.h +63 -0
  887. package/runtime/third_party/boringssl/include/openssl/x509v3_errors.h +84 -0
  888. package/runtime/third_party/boringssl/include/openssl/xwing.h +115 -0
  889. package/runtime/third_party/boringssl/sources.json +696 -0
  890. package/runtime/third_party/boringssl/ssl/bio_ssl.cc +196 -0
  891. package/runtime/third_party/boringssl/ssl/d1_both.cc +1137 -0
  892. package/runtime/third_party/boringssl/ssl/d1_lib.cc +245 -0
  893. package/runtime/third_party/boringssl/ssl/d1_pkt.cc +322 -0
  894. package/runtime/third_party/boringssl/ssl/d1_srtp.cc +128 -0
  895. package/runtime/third_party/boringssl/ssl/dtls_method.cc +216 -0
  896. package/runtime/third_party/boringssl/ssl/dtls_record.cc +586 -0
  897. package/runtime/third_party/boringssl/ssl/encrypted_client_hello.cc +1110 -0
  898. package/runtime/third_party/boringssl/ssl/extensions.cc +5368 -0
  899. package/runtime/third_party/boringssl/ssl/handoff.cc +625 -0
  900. package/runtime/third_party/boringssl/ssl/handshake.cc +694 -0
  901. package/runtime/third_party/boringssl/ssl/handshake_client.cc +1958 -0
  902. package/runtime/third_party/boringssl/ssl/handshake_server.cc +1875 -0
  903. package/runtime/third_party/boringssl/ssl/internal.h +4506 -0
  904. package/runtime/third_party/boringssl/ssl/s3_both.cc +555 -0
  905. package/runtime/third_party/boringssl/ssl/s3_lib.cc +88 -0
  906. package/runtime/third_party/boringssl/ssl/s3_pkt.cc +396 -0
  907. package/runtime/third_party/boringssl/ssl/ssl_aead_ctx.cc +416 -0
  908. package/runtime/third_party/boringssl/ssl/ssl_asn1.cc +851 -0
  909. package/runtime/third_party/boringssl/ssl/ssl_buffer.cc +304 -0
  910. package/runtime/third_party/boringssl/ssl/ssl_cert.cc +723 -0
  911. package/runtime/third_party/boringssl/ssl/ssl_cipher.cc +1762 -0
  912. package/runtime/third_party/boringssl/ssl/ssl_credential.cc +913 -0
  913. package/runtime/third_party/boringssl/ssl/ssl_file.cc +375 -0
  914. package/runtime/third_party/boringssl/ssl/ssl_key_share.cc +445 -0
  915. package/runtime/third_party/boringssl/ssl/ssl_lib.cc +4132 -0
  916. package/runtime/third_party/boringssl/ssl/ssl_privkey.cc +973 -0
  917. package/runtime/third_party/boringssl/ssl/ssl_session.cc +1273 -0
  918. package/runtime/third_party/boringssl/ssl/ssl_stat.cc +162 -0
  919. package/runtime/third_party/boringssl/ssl/ssl_transcript.cc +224 -0
  920. package/runtime/third_party/boringssl/ssl/ssl_versions.cc +436 -0
  921. package/runtime/third_party/boringssl/ssl/ssl_x509.cc +1229 -0
  922. package/runtime/third_party/boringssl/ssl/t1_enc.cc +266 -0
  923. package/runtime/third_party/boringssl/ssl/tls13_both.cc +764 -0
  924. package/runtime/third_party/boringssl/ssl/tls13_client.cc +1325 -0
  925. package/runtime/third_party/boringssl/ssl/tls13_enc.cc +746 -0
  926. package/runtime/third_party/boringssl/ssl/tls13_server.cc +1623 -0
  927. package/runtime/third_party/boringssl/ssl/tls_method.cc +266 -0
  928. package/runtime/third_party/boringssl/ssl/tls_record.cc +524 -0
  929. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_mul.S +178 -0
  930. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_square.S +146 -0
  931. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_mul.S +177 -0
  932. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_sqr.S +166 -0
  933. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  934. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  935. package/runtime/third_party/boringssl/third_party/fiat/curve25519_32.h +1571 -0
  936. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64.h +978 -0
  937. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_adx.h +700 -0
  938. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_msvc.h +1281 -0
  939. package/runtime/third_party/boringssl/third_party/fiat/p256_32.h +4760 -0
  940. package/runtime/third_party/boringssl/third_party/fiat/p256_64.h +1984 -0
  941. package/runtime/third_party/boringssl/third_party/fiat/p256_64_msvc.h +1939 -0
  942. package/runtime/third_party/boringssl/third_party/fiat/p256_field.c.inc +26 -0
  943. package/runtime/third_party/boringssl/third_party/fiat/p256_field_32.br.c.inc +71 -0
  944. package/runtime/third_party/boringssl/third_party/fiat/p256_field_64.br.c.inc +84 -0
  945. package/runtime/third_party/boringssl/third_party/fiat/p256_point.br.c.inc +112 -0
  946. package/runtime/third_party/quickjs-dtoa/LICENSE +0 -0
  947. package/runtime/third_party/quickjs-dtoa/README.md +0 -0
  948. package/runtime/third_party/quickjs-dtoa/dtoa.c +0 -0
  949. package/runtime/third_party/quickjs-dtoa/dtoa.h +0 -0
  950. package/runtime/third_party/quickjs-dtoa/dtoa_compat.h +0 -0
  951. package/runtime/third_party/quickjs-regexp/LICENSE +0 -0
  952. package/runtime/third_party/quickjs-regexp/README.md +0 -0
  953. package/runtime/third_party/quickjs-regexp/cutils.c +0 -0
  954. package/runtime/third_party/quickjs-regexp/cutils.h +0 -0
  955. package/runtime/third_party/quickjs-regexp/libregexp-opcode.h +0 -0
  956. package/runtime/third_party/quickjs-regexp/libregexp.c +0 -0
  957. package/runtime/third_party/quickjs-regexp/libregexp.h +0 -0
  958. package/runtime/third_party/quickjs-regexp/libunicode-table.h +0 -0
  959. package/runtime/third_party/quickjs-regexp/libunicode.c +0 -0
  960. package/runtime/third_party/quickjs-regexp/libunicode.h +0 -0
  961. package/runtime/third_party/v8-ieee754/LICENSE +0 -0
  962. package/runtime/third_party/v8-ieee754/README.md +2 -1
  963. package/runtime/third_party/v8-ieee754/convert.py +4 -0
  964. package/runtime/third_party/v8-ieee754/ieee754.c +1 -1
  965. package/runtime/third_party/v8-ieee754/ieee754.h +0 -0
  966. package/runtime/tools/regexp_compile.c +0 -0
  967. package/runtime/third_party/bearssl/LICENSE.txt +0 -21
  968. package/runtime/third_party/bearssl/README.txt +0 -136
  969. package/runtime/third_party/bearssl/VERSION +0 -1
  970. package/runtime/third_party/bearssl/inc/bearssl.h +0 -183
  971. package/runtime/third_party/bearssl/inc/bearssl_aead.h +0 -1059
  972. package/runtime/third_party/bearssl/inc/bearssl_block.h +0 -2618
  973. package/runtime/third_party/bearssl/inc/bearssl_ec.h +0 -967
  974. package/runtime/third_party/bearssl/inc/bearssl_hash.h +0 -1346
  975. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +0 -241
  976. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +0 -284
  977. package/runtime/third_party/bearssl/inc/bearssl_pem.h +0 -294
  978. package/runtime/third_party/bearssl/inc/bearssl_prf.h +0 -150
  979. package/runtime/third_party/bearssl/inc/bearssl_rand.h +0 -397
  980. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +0 -1655
  981. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +0 -4296
  982. package/runtime/third_party/bearssl/inc/bearssl_x509.h +0 -1474
  983. package/runtime/third_party/bearssl/src/aead/ccm.c +0 -346
  984. package/runtime/third_party/bearssl/src/aead/eax.c +0 -525
  985. package/runtime/third_party/bearssl/src/aead/gcm.c +0 -318
  986. package/runtime/third_party/bearssl/src/codec/ccopy.c +0 -44
  987. package/runtime/third_party/bearssl/src/codec/dec16be.c +0 -38
  988. package/runtime/third_party/bearssl/src/codec/dec16le.c +0 -38
  989. package/runtime/third_party/bearssl/src/codec/dec32be.c +0 -38
  990. package/runtime/third_party/bearssl/src/codec/dec32le.c +0 -38
  991. package/runtime/third_party/bearssl/src/codec/dec64be.c +0 -38
  992. package/runtime/third_party/bearssl/src/codec/dec64le.c +0 -38
  993. package/runtime/third_party/bearssl/src/codec/enc16be.c +0 -38
  994. package/runtime/third_party/bearssl/src/codec/enc16le.c +0 -38
  995. package/runtime/third_party/bearssl/src/codec/enc32be.c +0 -38
  996. package/runtime/third_party/bearssl/src/codec/enc32le.c +0 -38
  997. package/runtime/third_party/bearssl/src/codec/enc64be.c +0 -38
  998. package/runtime/third_party/bearssl/src/codec/enc64le.c +0 -38
  999. package/runtime/third_party/bearssl/src/codec/pemdec.c +0 -526
  1000. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +0 -314
  1001. package/runtime/third_party/bearssl/src/codec/pemenc.c +0 -173
  1002. package/runtime/third_party/bearssl/src/config.h +0 -247
  1003. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +0 -121
  1004. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +0 -171
  1005. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +0 -398
  1006. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +0 -390
  1007. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +0 -1478
  1008. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +0 -800
  1009. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +0 -605
  1010. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +0 -831
  1011. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +0 -46
  1012. package/runtime/third_party/bearssl/src/ec/ec_default.c +0 -36
  1013. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +0 -86
  1014. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +0 -2124
  1015. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +0 -1469
  1016. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +0 -1765
  1017. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +0 -1781
  1018. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +0 -824
  1019. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +0 -826
  1020. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +0 -85
  1021. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +0 -51
  1022. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +0 -57
  1023. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +0 -64
  1024. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +0 -134
  1025. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +0 -36
  1026. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +0 -36
  1027. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +0 -36
  1028. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +0 -36
  1029. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +0 -47
  1030. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +0 -45
  1031. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +0 -174
  1032. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +0 -48
  1033. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +0 -166
  1034. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +0 -47
  1035. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +0 -45
  1036. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +0 -173
  1037. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +0 -48
  1038. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +0 -165
  1039. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +0 -121
  1040. package/runtime/third_party/bearssl/src/hash/dig_oid.c +0 -84
  1041. package/runtime/third_party/bearssl/src/hash/dig_size.c +0 -50
  1042. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +0 -345
  1043. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +0 -251
  1044. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +0 -154
  1045. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +0 -389
  1046. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +0 -411
  1047. package/runtime/third_party/bearssl/src/hash/md5.c +0 -208
  1048. package/runtime/third_party/bearssl/src/hash/md5sha1.c +0 -141
  1049. package/runtime/third_party/bearssl/src/hash/mgf1.c +0 -56
  1050. package/runtime/third_party/bearssl/src/hash/multihash.c +0 -166
  1051. package/runtime/third_party/bearssl/src/hash/sha1.c +0 -191
  1052. package/runtime/third_party/bearssl/src/hash/sha2big.c +0 -285
  1053. package/runtime/third_party/bearssl/src/hash/sha2small.c +0 -341
  1054. package/runtime/third_party/bearssl/src/inner.h +0 -2577
  1055. package/runtime/third_party/bearssl/src/int/i15_add.c +0 -46
  1056. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +0 -44
  1057. package/runtime/third_party/bearssl/src/int/i15_decmod.c +0 -124
  1058. package/runtime/third_party/bearssl/src/int/i15_decode.c +0 -56
  1059. package/runtime/third_party/bearssl/src/int/i15_decred.c +0 -100
  1060. package/runtime/third_party/bearssl/src/int/i15_encode.c +0 -56
  1061. package/runtime/third_party/bearssl/src/int/i15_fmont.c +0 -59
  1062. package/runtime/third_party/bearssl/src/int/i15_iszero.c +0 -39
  1063. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +0 -465
  1064. package/runtime/third_party/bearssl/src/int/i15_modpow.c +0 -50
  1065. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +0 -160
  1066. package/runtime/third_party/bearssl/src/int/i15_montmul.c +0 -184
  1067. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +0 -61
  1068. package/runtime/third_party/bearssl/src/int/i15_muladd.c +0 -173
  1069. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +0 -38
  1070. package/runtime/third_party/bearssl/src/int/i15_reduce.c +0 -66
  1071. package/runtime/third_party/bearssl/src/int/i15_rshift.c +0 -47
  1072. package/runtime/third_party/bearssl/src/int/i15_sub.c +0 -46
  1073. package/runtime/third_party/bearssl/src/int/i15_tmont.c +0 -36
  1074. package/runtime/third_party/bearssl/src/int/i31_add.c +0 -46
  1075. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +0 -44
  1076. package/runtime/third_party/bearssl/src/int/i31_decmod.c +0 -124
  1077. package/runtime/third_party/bearssl/src/int/i31_decode.c +0 -57
  1078. package/runtime/third_party/bearssl/src/int/i31_decred.c +0 -103
  1079. package/runtime/third_party/bearssl/src/int/i31_encode.c +0 -79
  1080. package/runtime/third_party/bearssl/src/int/i31_fmont.c +0 -60
  1081. package/runtime/third_party/bearssl/src/int/i31_iszero.c +0 -39
  1082. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +0 -488
  1083. package/runtime/third_party/bearssl/src/int/i31_modpow.c +0 -65
  1084. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +0 -160
  1085. package/runtime/third_party/bearssl/src/int/i31_montmul.c +0 -127
  1086. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +0 -74
  1087. package/runtime/third_party/bearssl/src/int/i31_muladd.c +0 -157
  1088. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +0 -39
  1089. package/runtime/third_party/bearssl/src/int/i31_reduce.c +0 -66
  1090. package/runtime/third_party/bearssl/src/int/i31_rshift.c +0 -47
  1091. package/runtime/third_party/bearssl/src/int/i31_sub.c +0 -46
  1092. package/runtime/third_party/bearssl/src/int/i31_tmont.c +0 -36
  1093. package/runtime/third_party/bearssl/src/int/i32_add.c +0 -51
  1094. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +0 -44
  1095. package/runtime/third_party/bearssl/src/int/i32_decmod.c +0 -77
  1096. package/runtime/third_party/bearssl/src/int/i32_decode.c +0 -63
  1097. package/runtime/third_party/bearssl/src/int/i32_decred.c +0 -107
  1098. package/runtime/third_party/bearssl/src/int/i32_div32.c +0 -56
  1099. package/runtime/third_party/bearssl/src/int/i32_encode.c +0 -72
  1100. package/runtime/third_party/bearssl/src/int/i32_fmont.c +0 -60
  1101. package/runtime/third_party/bearssl/src/int/i32_iszero.c +0 -39
  1102. package/runtime/third_party/bearssl/src/int/i32_modpow.c +0 -65
  1103. package/runtime/third_party/bearssl/src/int/i32_montmul.c +0 -69
  1104. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +0 -56
  1105. package/runtime/third_party/bearssl/src/int/i32_muladd.c +0 -138
  1106. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +0 -39
  1107. package/runtime/third_party/bearssl/src/int/i32_reduce.c +0 -66
  1108. package/runtime/third_party/bearssl/src/int/i32_sub.c +0 -51
  1109. package/runtime/third_party/bearssl/src/int/i32_tmont.c +0 -36
  1110. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +0 -493
  1111. package/runtime/third_party/bearssl/src/kdf/hkdf.c +0 -107
  1112. package/runtime/third_party/bearssl/src/kdf/shake.c +0 -590
  1113. package/runtime/third_party/bearssl/src/mac/hmac.c +0 -122
  1114. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +0 -193
  1115. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +0 -206
  1116. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +0 -157
  1117. package/runtime/third_party/bearssl/src/rand/sysrng.c +0 -252
  1118. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +0 -38
  1119. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +0 -36
  1120. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +0 -38
  1121. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +0 -38
  1122. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +0 -38
  1123. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +0 -38
  1124. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +0 -38
  1125. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +0 -36
  1126. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +0 -38
  1127. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +0 -38
  1128. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +0 -38
  1129. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +0 -36
  1130. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +0 -583
  1131. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +0 -99
  1132. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +0 -41
  1133. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +0 -44
  1134. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +0 -37
  1135. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +0 -43
  1136. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +0 -209
  1137. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +0 -320
  1138. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +0 -40
  1139. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +0 -44
  1140. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +0 -113
  1141. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +0 -152
  1142. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +0 -37
  1143. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +0 -608
  1144. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +0 -99
  1145. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +0 -41
  1146. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +0 -44
  1147. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +0 -37
  1148. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +0 -43
  1149. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +0 -203
  1150. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +0 -318
  1151. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +0 -40
  1152. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +0 -44
  1153. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +0 -106
  1154. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +0 -152
  1155. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +0 -41
  1156. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +0 -44
  1157. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +0 -37
  1158. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +0 -43
  1159. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +0 -160
  1160. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +0 -40
  1161. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +0 -44
  1162. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +0 -77
  1163. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +0 -57
  1164. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +0 -61
  1165. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +0 -64
  1166. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +0 -57
  1167. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +0 -63
  1168. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +0 -223
  1169. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +0 -60
  1170. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +0 -64
  1171. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +0 -125
  1172. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +0 -112
  1173. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +0 -145
  1174. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +0 -100
  1175. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +0 -121
  1176. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +0 -106
  1177. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +0 -121
  1178. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +0 -52
  1179. package/runtime/third_party/bearssl/src/settings.c +0 -306
  1180. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +0 -69
  1181. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +0 -67
  1182. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +0 -84
  1183. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +0 -142
  1184. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +0 -254
  1185. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +0 -157
  1186. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +0 -112
  1187. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +0 -328
  1188. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +0 -398
  1189. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +0 -104
  1190. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +0 -81
  1191. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +0 -114
  1192. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +0 -433
  1193. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +0 -159
  1194. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +0 -115
  1195. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +0 -111
  1196. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +0 -91
  1197. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +0 -116
  1198. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +0 -422
  1199. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +0 -170
  1200. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +0 -112
  1201. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +0 -445
  1202. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +0 -670
  1203. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +0 -417
  1204. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +0 -717
  1205. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +0 -946
  1206. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +0 -69
  1207. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +0 -67
  1208. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +0 -84
  1209. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +0 -142
  1210. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +0 -176
  1211. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +0 -129
  1212. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +0 -240
  1213. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +0 -223
  1214. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +0 -122
  1215. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +0 -211
  1216. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +0 -596
  1217. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +0 -106
  1218. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +0 -237
  1219. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +0 -411
  1220. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +0 -87
  1221. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +0 -69
  1222. package/runtime/third_party/bearssl/src/symcipher/des_support.c +0 -166
  1223. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +0 -310
  1224. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +0 -85
  1225. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +0 -67
  1226. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +0 -260
  1227. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +0 -297
  1228. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +0 -475
  1229. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +0 -221
  1230. package/runtime/third_party/bearssl/src/x509/asn1.t0 +0 -757
  1231. package/runtime/third_party/bearssl/src/x509/asn1enc.c +0 -93
  1232. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +0 -110
  1233. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +0 -161
  1234. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +0 -97
  1235. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +0 -96
  1236. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +0 -653
  1237. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +0 -376
  1238. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +0 -776
  1239. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +0 -324
  1240. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +0 -105
  1241. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +0 -1722
  1242. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +0 -1526
  1243. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +0 -59
@@ -0,0 +1,1958 @@
1
+ // Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
2
+ // Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
3
+ // Copyright 2005 Nokia. All rights reserved.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // https://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+
17
+ #include <openssl/ssl.h>
18
+
19
+ #include <assert.h>
20
+ #include <limits.h>
21
+ #include <string.h>
22
+
23
+ #include <algorithm>
24
+ #include <utility>
25
+
26
+ #include <openssl/aead.h>
27
+ #include <openssl/bn.h>
28
+ #include <openssl/bytestring.h>
29
+ #include <openssl/ec_key.h>
30
+ #include <openssl/ecdsa.h>
31
+ #include <openssl/err.h>
32
+ #include <openssl/evp.h>
33
+ #include <openssl/hpke.h>
34
+ #include <openssl/md5.h>
35
+ #include <openssl/mem.h>
36
+ #include <openssl/rand.h>
37
+ #include <openssl/sha2.h>
38
+
39
+ #include "../crypto/bytestring/internal.h"
40
+ #include "../crypto/internal.h"
41
+ #include "internal.h"
42
+
43
+
44
+ BSSL_NAMESPACE_BEGIN
45
+
46
+ enum ssl_client_hs_state_t {
47
+ state_start_connect = 0,
48
+ state_enter_early_data,
49
+ state_early_reverify_server_certificate,
50
+ state_read_server_hello,
51
+ state_tls13,
52
+ state_read_server_certificate,
53
+ state_read_certificate_status,
54
+ state_verify_server_certificate,
55
+ state_reverify_server_certificate,
56
+ state_read_server_key_exchange,
57
+ state_read_certificate_request,
58
+ state_read_server_hello_done,
59
+ state_send_client_certificate,
60
+ state_send_client_key_exchange,
61
+ state_send_client_certificate_verify,
62
+ state_send_client_finished,
63
+ state_finish_flight,
64
+ state_read_session_ticket,
65
+ state_process_change_cipher_spec,
66
+ state_read_server_finished,
67
+ state_finish_client_handshake,
68
+ state_done,
69
+ };
70
+
71
+ // ssl_get_client_disabled sets `*out_mask_a` and `*out_mask_k` to masks of
72
+ // disabled algorithms.
73
+ static void ssl_get_client_disabled(const SSL_HANDSHAKE *hs,
74
+ uint32_t *out_mask_a,
75
+ uint32_t *out_mask_k) {
76
+ *out_mask_a = 0;
77
+ *out_mask_k = 0;
78
+
79
+ // PSK requires a client callback.
80
+ if (hs->config->psk_client_callback == nullptr) {
81
+ *out_mask_a |= SSL_aPSK;
82
+ *out_mask_k |= SSL_kPSK;
83
+ }
84
+ }
85
+
86
+ static bool ssl_write_client_cipher_list(const SSL_HANDSHAKE *hs, CBB *out,
87
+ ssl_client_hello_type_t type) {
88
+ const SSLImpl *const ssl = hs->ssl;
89
+ uint32_t mask_a, mask_k;
90
+ ssl_get_client_disabled(hs, &mask_a, &mask_k);
91
+
92
+ CBB child;
93
+ if (!CBB_add_u16_length_prefixed(out, &child)) {
94
+ return false;
95
+ }
96
+
97
+ // Add a fake cipher suite. See RFC 8701.
98
+ if (ssl->ctx->grease_enabled &&
99
+ !CBB_add_u16(&child, ssl_get_grease_value(hs, ssl_grease_cipher))) {
100
+ return false;
101
+ }
102
+
103
+ // Add TLS 1.3 ciphers in configured preference order.
104
+ if (hs->max_version >= TLS1_3_VERSION) {
105
+ for (const SSL_CIPHER *cipher : hs->config->tls13_cipher_list.ciphers()) {
106
+ if (!CBB_add_u16(&child, SSL_CIPHER_get_protocol_id(cipher))) {
107
+ return false;
108
+ }
109
+ }
110
+ }
111
+
112
+ if (hs->min_version < TLS1_3_VERSION && type != ssl_client_hello_inner) {
113
+ bool any_enabled = false;
114
+ for (const SSL_CIPHER *cipher : SSL_get_ciphers(ssl)) {
115
+ // Skip disabled ciphers
116
+ if ((cipher->algorithm_mkey & mask_k) ||
117
+ (cipher->algorithm_auth & mask_a)) {
118
+ continue;
119
+ }
120
+ if (SSL_CIPHER_get_min_version(cipher) > hs->max_version ||
121
+ SSL_CIPHER_get_max_version(cipher) < hs->min_version) {
122
+ continue;
123
+ }
124
+ any_enabled = true;
125
+ if (!CBB_add_u16(&child, SSL_CIPHER_get_protocol_id(cipher))) {
126
+ return false;
127
+ }
128
+ }
129
+
130
+ // If all ciphers were disabled, return the error to the caller.
131
+ if (!any_enabled && hs->max_version < TLS1_3_VERSION) {
132
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CIPHERS_AVAILABLE);
133
+ return false;
134
+ }
135
+ }
136
+
137
+ if (ssl->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
138
+ if (!CBB_add_u16(&child, SSL_CIPHER_FALLBACK_SCSV)) {
139
+ return false;
140
+ }
141
+ }
142
+
143
+ return CBB_flush(out);
144
+ }
145
+
146
+ bool ssl_write_client_hello_without_extensions(const SSL_HANDSHAKE *hs,
147
+ CBB *cbb,
148
+ ssl_client_hello_type_t type,
149
+ bool empty_session_id) {
150
+ const SSLImpl *const ssl = hs->ssl;
151
+ CBB child;
152
+ if (!CBB_add_u16(cbb, hs->client_version) ||
153
+ !CBB_add_bytes(cbb,
154
+ type == ssl_client_hello_inner ? hs->inner_client_random
155
+ : ssl->s3->client_random,
156
+ SSL3_RANDOM_SIZE) ||
157
+ !CBB_add_u8_length_prefixed(cbb, &child)) {
158
+ return false;
159
+ }
160
+
161
+ // Do not send a session ID on renegotiation.
162
+ if (!ssl->s3->initial_handshake_complete && //
163
+ !empty_session_id && //
164
+ !CBB_add_bytes(&child, hs->session_id.data(), hs->session_id.size())) {
165
+ return false;
166
+ }
167
+
168
+ if (SSL_is_dtls(ssl)) {
169
+ if (!CBB_add_u8_length_prefixed(cbb, &child) ||
170
+ !CBB_add_bytes(&child, hs->dtls_cookie.data(),
171
+ hs->dtls_cookie.size())) {
172
+ return false;
173
+ }
174
+ }
175
+
176
+ if (!ssl_write_client_cipher_list(hs, cbb, type) ||
177
+ !CBB_add_u8(cbb, 1 /* one compression method */) ||
178
+ !CBB_add_u8(cbb, 0 /* null compression */)) {
179
+ return false;
180
+ }
181
+ return true;
182
+ }
183
+
184
+ bool ssl_add_client_hello(SSL_HANDSHAKE *hs) {
185
+ SSLImpl *const ssl = hs->ssl;
186
+ ScopedCBB cbb;
187
+ CBB body;
188
+ ssl_client_hello_type_t type = hs->selected_ech_config
189
+ ? ssl_client_hello_outer
190
+ : ssl_client_hello_unencrypted;
191
+ Array<uint8_t> msg;
192
+ if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_CLIENT_HELLO) ||
193
+ !ssl_write_client_hello_without_extensions(hs, &body, type,
194
+ /*empty_session_id=*/false) ||
195
+ !ssl_add_clienthello_tlsext(hs, &body, /*out_encoded=*/nullptr, type) ||
196
+ !ssl->method->finish_message(ssl, cbb.get(), &msg)) {
197
+ return false;
198
+ }
199
+
200
+ return ssl->method->add_message(ssl, std::move(msg));
201
+ }
202
+
203
+ static bool parse_server_version(const SSL_HANDSHAKE *hs, uint16_t *out_version,
204
+ uint8_t *out_alert,
205
+ const ParsedServerHello &server_hello) {
206
+ uint16_t legacy_version = TLS1_2_VERSION;
207
+ if (SSL_is_dtls(hs->ssl)) {
208
+ legacy_version = DTLS1_2_VERSION;
209
+ }
210
+ // If the outer version is not TLS 1.2, use it.
211
+ // TODO(davidben): This function doesn't quite match the RFC8446 formulation.
212
+ if (server_hello.legacy_version != legacy_version) {
213
+ *out_version = server_hello.legacy_version;
214
+ return true;
215
+ }
216
+
217
+ SSLExtension supported_versions(TLSEXT_TYPE_supported_versions);
218
+ CBS extensions = server_hello.extensions;
219
+ if (!ssl_parse_extensions(&extensions, out_alert, {&supported_versions},
220
+ /*ignore_unknown=*/true)) {
221
+ return false;
222
+ }
223
+
224
+ if (!supported_versions.present) {
225
+ *out_version = server_hello.legacy_version;
226
+ return true;
227
+ }
228
+
229
+ if (!CBS_get_u16(&supported_versions.data, out_version) || //
230
+ CBS_len(&supported_versions.data) != 0) {
231
+ *out_alert = SSL_AD_DECODE_ERROR;
232
+ return false;
233
+ }
234
+
235
+ return true;
236
+ }
237
+
238
+ // should_offer_early_data returns `ssl_early_data_accepted` if `hs` should
239
+ // offer early data, and some other reason code otherwise.
240
+ static ssl_early_data_reason_t should_offer_early_data(
241
+ const SSL_HANDSHAKE *hs) {
242
+ const SSLImpl *const ssl = hs->ssl;
243
+ assert(!ssl->server);
244
+ if (!ssl->enable_early_data) {
245
+ return ssl_early_data_disabled;
246
+ }
247
+
248
+ if (hs->max_version < TLS1_3_VERSION || SSL_is_dtls(ssl)) {
249
+ // We discard inapplicable sessions, so this is redundant with the session
250
+ // checks below, but reporting that TLS 1.3 was disabled is more useful.
251
+ //
252
+ // TODO(crbug.com/381113363): Support early data in DTLS 1.3.
253
+ return ssl_early_data_protocol_version;
254
+ }
255
+
256
+ if (ssl->session == nullptr) {
257
+ return ssl_early_data_no_session_offered;
258
+ }
259
+
260
+ if (ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION ||
261
+ ssl->session->ticket_max_early_data == 0) {
262
+ return ssl_early_data_unsupported_for_session;
263
+ }
264
+
265
+ if (!ssl->session->early_alpn.empty()) {
266
+ if (!ssl_is_alpn_protocol_allowed(hs, ssl->session->early_alpn)) {
267
+ // Avoid reporting a confusing value in `SSL_get0_alpn_selected`.
268
+ return ssl_early_data_alpn_mismatch;
269
+ }
270
+
271
+ // If the previous connection negotiated ALPS, only offer 0-RTT when the
272
+ // local are settings are consistent with what we'd offer for this
273
+ // connection.
274
+ if (ssl->session->has_application_settings) {
275
+ Span<const uint8_t> settings;
276
+ if (!ssl_get_local_application_settings(hs, &settings,
277
+ ssl->session->early_alpn) ||
278
+ settings != ssl->session->local_application_settings) {
279
+ return ssl_early_data_alps_mismatch;
280
+ }
281
+ }
282
+ }
283
+
284
+ // Early data has not yet been accepted, but we use it as a success code.
285
+ return ssl_early_data_accepted;
286
+ }
287
+
288
+ void ssl_done_writing_client_hello(SSL_HANDSHAKE *hs) {
289
+ hs->ech_client_outer.Reset();
290
+ hs->cookie.Reset();
291
+ hs->key_share_bytes.Reset();
292
+ hs->pake_share_bytes.Reset();
293
+ }
294
+
295
+ bool ssl_accepts_server_certificate_auth(const SSL_HANDSHAKE *hs) {
296
+ assert(!hs->ssl->server);
297
+ // In PAKE mode, the server must respond with a PAKE. We do not support
298
+ // accepting both PAKE and certificates together.
299
+ if (hs->pake_prover != nullptr) {
300
+ return false;
301
+ }
302
+
303
+ // If the caller has explicitly asked for certificate verification, it is
304
+ // willing to accept a certificate, even if it has non-certificate
305
+ // credentials, such as a PSK.
306
+ if (hs->config->verify_mode != SSL_VERIFY_NONE) {
307
+ return true;
308
+ }
309
+
310
+ // Otherwise, we fall back to default behavior: if there is at least one
311
+ // non-certificate credential configured, assume by default that the caller is
312
+ // only willing to use that non-certificate mode.
313
+ return std::none_of(hs->config->cert->credentials.begin(),
314
+ hs->config->cert->credentials.end(),
315
+ [](const auto &cred) { return !cred->UsesPrivateKey(); });
316
+ }
317
+
318
+ static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) {
319
+ SSLImpl *const ssl = hs->ssl;
320
+
321
+ ssl_do_info_callback(ssl, SSL_CB_HANDSHAKE_START, 1);
322
+ // `session_reused` must be reset in case this is a renegotiation.
323
+ ssl->s3->session_reused = false;
324
+
325
+ // Freeze the version range.
326
+ if (!ssl_get_version_range(hs, &hs->min_version, &hs->max_version)) {
327
+ return ssl_hs_error;
328
+ }
329
+
330
+ uint8_t ech_enc[EVP_HPKE_MAX_ENC_LENGTH];
331
+ size_t ech_enc_len;
332
+ if (!ssl_select_ech_config(hs, ech_enc, &ech_enc_len)) {
333
+ return ssl_hs_error;
334
+ }
335
+
336
+ // Always advertise the ClientHello version from the original maximum version,
337
+ // even on renegotiation. The static RSA key exchange uses this field, and
338
+ // some servers fail when it changes across handshakes.
339
+ if (SSL_is_dtls(hs->ssl)) {
340
+ hs->client_version =
341
+ hs->max_version >= TLS1_2_VERSION ? DTLS1_2_VERSION : DTLS1_VERSION;
342
+ } else {
343
+ hs->client_version =
344
+ hs->max_version >= TLS1_2_VERSION ? TLS1_2_VERSION : hs->max_version;
345
+ }
346
+
347
+ if (!ssl_setup_pake_shares(hs)) {
348
+ return ssl_hs_error;
349
+ }
350
+
351
+ // If the configured session has expired or is not usable, drop it. We also do
352
+ // not offer sessions on renegotiation.
353
+ SSLSessionType session_type = SSLSessionType::kNotResumable;
354
+ if (ssl->session != nullptr) {
355
+ session_type = ssl_session_get_type(ssl->session.get());
356
+ if (ssl->session->is_server ||
357
+ !ssl_supports_version(hs, ssl->session->ssl_version) ||
358
+ // Do not offer TLS 1.2 sessions with ECH. ClientHelloInner does not
359
+ // offer TLS 1.2, and the cleartext session ID may leak the server
360
+ // identity.
361
+ (hs->selected_ech_config &&
362
+ ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION) ||
363
+ session_type == SSLSessionType::kNotResumable ||
364
+ // Don't offer TLS 1.2 tickets if disabled.
365
+ (session_type == SSLSessionType::kTicket &&
366
+ (SSL_get_options(ssl) & SSL_OP_NO_TICKET)) ||
367
+ // Don't offer sessions and PAKEs at the same time. We do not currently
368
+ // support resumption with PAKEs. (Offering both together would need
369
+ // more logic to conditionally send the key_share extension.)
370
+ hs->pake_prover != nullptr ||
371
+ !ssl_session_is_time_valid(ssl, ssl->session.get()) ||
372
+ SSL_is_quic(ssl) != int{ssl->session->is_quic} ||
373
+ ssl->s3->initial_handshake_complete) {
374
+ ssl_set_session(ssl, nullptr);
375
+ session_type = SSLSessionType::kNotResumable;
376
+ }
377
+ }
378
+
379
+ if (!RAND_bytes(ssl->s3->client_random, sizeof(ssl->s3->client_random))) {
380
+ return ssl_hs_error;
381
+ }
382
+ if (hs->selected_ech_config &&
383
+ !RAND_bytes(hs->inner_client_random, sizeof(hs->inner_client_random))) {
384
+ return ssl_hs_error;
385
+ }
386
+
387
+ // Compatibility mode sends a random session ID. Compatibility mode is
388
+ // enabled for TLS 1.3, but not when it's run over QUIC or DTLS.
389
+ const bool enable_compatibility_mode = hs->max_version >= TLS1_3_VERSION &&
390
+ !SSL_is_quic(ssl) && !SSL_is_dtls(ssl);
391
+ if (session_type == SSLSessionType::kID) {
392
+ hs->session_id = ssl->session->session_id;
393
+ } else if (session_type == SSLSessionType::kTicket ||
394
+ enable_compatibility_mode) {
395
+ // TLS 1.2 session tickets require a placeholder value to signal resumption.
396
+ hs->session_id.ResizeForOverwrite(SSL_MAX_SSL_SESSION_ID_LENGTH);
397
+ if (!RAND_bytes(hs->session_id.data(), hs->session_id.size())) {
398
+ return ssl_hs_error;
399
+ }
400
+ }
401
+
402
+ ssl_early_data_reason_t reason = should_offer_early_data(hs);
403
+ if (reason != ssl_early_data_accepted) {
404
+ ssl->s3->early_data_reason = reason;
405
+ } else {
406
+ hs->early_data_offered = true;
407
+ }
408
+
409
+ ssl_setup_client_certificate_type(hs);
410
+ if (!ssl_setup_pre_shared_keys(hs) || //
411
+ !ssl_setup_key_shares(hs, /*override_group_id=*/0) ||
412
+ !ssl_setup_extension_permutation(hs) ||
413
+ !ssl_encrypt_client_hello(hs, Span(ech_enc, ech_enc_len)) ||
414
+ !ssl_add_client_hello(hs)) {
415
+ return ssl_hs_error;
416
+ }
417
+
418
+ hs->state = state_enter_early_data;
419
+ return ssl_hs_flush;
420
+ }
421
+
422
+ static enum ssl_hs_wait_t do_enter_early_data(SSL_HANDSHAKE *hs) {
423
+ SSLImpl *const ssl = hs->ssl;
424
+ if (!hs->early_data_offered) {
425
+ hs->state = state_read_server_hello;
426
+ return ssl_hs_ok;
427
+ }
428
+
429
+ // Stash the early data session and activate the early version. This must
430
+ // happen before `do_early_reverify_server_certificate`, so early connection
431
+ // properties are available to the callback. Note the early version may be
432
+ // overwritten later by the final version.
433
+ hs->early_session = UpRef(ssl->session);
434
+ ssl->s3->version = hs->early_session->ssl_version;
435
+ hs->is_early_version = true;
436
+ hs->state = state_early_reverify_server_certificate;
437
+ return ssl_hs_ok;
438
+ }
439
+
440
+ static enum ssl_hs_wait_t do_early_reverify_server_certificate(
441
+ SSL_HANDSHAKE *hs) {
442
+ SSLImpl *const ssl = hs->ssl;
443
+ if (ssl->ctx->reverify_on_resume) {
444
+ // Don't send an alert on error. The alert would be in the clear, which the
445
+ // server is not expecting anyway. Alerts in between ClientHello and
446
+ // ServerHello cannot usefully be delivered in TLS 1.3.
447
+ //
448
+ // TODO(davidben): The client behavior should be to verify the certificate
449
+ // before deciding whether to offer the session and, if invalid, decline to
450
+ // send the session.
451
+ switch (ssl_reverify_peer_cert(hs, /*send_alert=*/false)) {
452
+ case ssl_verify_ok:
453
+ break;
454
+ case ssl_verify_invalid:
455
+ return ssl_hs_error;
456
+ case ssl_verify_retry:
457
+ hs->state = state_early_reverify_server_certificate;
458
+ return ssl_hs_certificate_verify;
459
+ }
460
+ }
461
+
462
+ if (!ssl->method->add_change_cipher_spec(ssl)) {
463
+ return ssl_hs_error;
464
+ }
465
+
466
+ // Defer releasing the 0-RTT key to after certificate reverification, so the
467
+ // QUIC implementation does not accidentally write data too early.
468
+ if (!tls13_init_early_key_schedule(hs, hs->early_session.get()) ||
469
+ !tls13_derive_early_secret(hs) ||
470
+ !tls13_set_traffic_key(hs->ssl, ssl_encryption_early_data, evp_aead_seal,
471
+ hs->early_session.get(),
472
+ hs->early_traffic_secret)) {
473
+ return ssl_hs_error;
474
+ }
475
+
476
+ hs->in_early_data = true;
477
+ hs->can_early_write = true;
478
+ hs->state = state_read_server_hello;
479
+ return ssl_hs_early_return;
480
+ }
481
+
482
+ static bool handle_hello_verify_request(SSL_HANDSHAKE *hs,
483
+ const SSLMessage &msg) {
484
+ SSLImpl *const ssl = hs->ssl;
485
+ assert(SSL_is_dtls(ssl));
486
+ assert(msg.type == DTLS1_MT_HELLO_VERIFY_REQUEST);
487
+ assert(!hs->received_hello_verify_request);
488
+
489
+ CBS hello_verify_request = msg.body, cookie;
490
+ uint16_t server_version;
491
+ if (!CBS_get_u16(&hello_verify_request, &server_version) ||
492
+ !CBS_get_u8_length_prefixed(&hello_verify_request, &cookie) ||
493
+ CBS_len(&hello_verify_request) != 0) {
494
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
495
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
496
+ return false;
497
+ }
498
+
499
+ if (!hs->dtls_cookie.CopyFrom(cookie)) {
500
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
501
+ return false;
502
+ }
503
+ hs->received_hello_verify_request = true;
504
+
505
+ ssl->method->next_message(ssl);
506
+
507
+ // DTLS resets the handshake buffer after HelloVerifyRequest.
508
+ if (!hs->transcript.Init()) {
509
+ return false;
510
+ }
511
+
512
+ return ssl_add_client_hello(hs);
513
+ }
514
+
515
+ bool ssl_parse_server_hello(ParsedServerHello *out, uint8_t *out_alert,
516
+ const SSLMessage &msg) {
517
+ if (msg.type != SSL3_MT_SERVER_HELLO) {
518
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
519
+ *out_alert = SSL_AD_UNEXPECTED_MESSAGE;
520
+ return false;
521
+ }
522
+ out->raw = msg.raw;
523
+ CBS body = msg.body;
524
+ if (!CBS_get_u16(&body, &out->legacy_version) ||
525
+ !CBS_get_bytes(&body, &out->random, SSL3_RANDOM_SIZE) ||
526
+ !CBS_get_u8_length_prefixed(&body, &out->session_id) ||
527
+ CBS_len(&out->session_id) > SSL3_SESSION_ID_SIZE ||
528
+ !CBS_get_u16(&body, &out->cipher_suite) ||
529
+ !CBS_get_u8(&body, &out->compression_method)) {
530
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
531
+ *out_alert = SSL_AD_DECODE_ERROR;
532
+ return false;
533
+ }
534
+ // In TLS 1.2 and below, empty extensions blocks may be omitted. In TLS 1.3,
535
+ // ServerHellos always have extensions, so this can be applied generically.
536
+ CBS_init(&out->extensions, nullptr, 0);
537
+ if ((CBS_len(&body) != 0 &&
538
+ !CBS_get_u16_length_prefixed(&body, &out->extensions)) ||
539
+ CBS_len(&body) != 0) {
540
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
541
+ *out_alert = SSL_AD_DECODE_ERROR;
542
+ return false;
543
+ }
544
+ return true;
545
+ }
546
+
547
+ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
548
+ SSLImpl *const ssl = hs->ssl;
549
+ SSLMessage msg;
550
+ if (!ssl->method->get_message(ssl, &msg)) {
551
+ return ssl_hs_read_server_hello;
552
+ }
553
+
554
+ if (SSL_is_dtls(ssl) && !hs->received_hello_verify_request &&
555
+ msg.type == DTLS1_MT_HELLO_VERIFY_REQUEST) {
556
+ if (!handle_hello_verify_request(hs, msg)) {
557
+ return ssl_hs_error;
558
+ }
559
+ hs->received_hello_verify_request = true;
560
+ hs->state = state_read_server_hello;
561
+ return ssl_hs_flush;
562
+ }
563
+
564
+ ParsedServerHello server_hello;
565
+ uint16_t server_version;
566
+ uint8_t alert = SSL_AD_DECODE_ERROR;
567
+ if (!ssl_parse_server_hello(&server_hello, &alert, msg) ||
568
+ !parse_server_version(hs, &server_version, &alert, server_hello)) {
569
+ ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
570
+ return ssl_hs_error;
571
+ }
572
+
573
+ if (!ssl_supports_version(hs, server_version)) {
574
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_PROTOCOL);
575
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION);
576
+ return ssl_hs_error;
577
+ }
578
+
579
+ if (!ssl->s3->initial_handshake_complete) {
580
+ // |ssl->s3->version| may be set due to 0-RTT. If it was to a different
581
+ // value, the check below will fire.
582
+ assert(ssl->s3->version == 0 ||
583
+ (hs->is_early_version &&
584
+ ssl->s3->version == hs->early_session->ssl_version));
585
+ ssl->s3->version = server_version;
586
+ hs->is_early_version = false;
587
+ } else if (server_version != ssl->s3->version) {
588
+ OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_SSL_VERSION);
589
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION);
590
+ return ssl_hs_error;
591
+ }
592
+
593
+ // If the version did not match, stop sending 0-RTT data.
594
+ if (hs->early_data_offered &&
595
+ ssl->s3->version != hs->early_session->ssl_version) {
596
+ // This is currently only possible by reading a TLS 1.2 (or earlier)
597
+ // ServerHello in response to TLS 1.3. If there is ever a TLS 1.4, or
598
+ // another variant of TLS 1.3, the fatal error below will need to be a clean
599
+ // 0-RTT reject.
600
+ assert(ssl_protocol_version(ssl) < TLS1_3_VERSION);
601
+ assert(ssl_session_protocol_version(hs->early_session.get()) >=
602
+ TLS1_3_VERSION);
603
+
604
+ // A TLS 1.2 server would not know to skip the early data we offered, so
605
+ // there is no point in continuing the handshake. Report an error code as
606
+ // soon as we detect this. The caller may use this error code to implement
607
+ // the fallback described in RFC 8446 appendix D.3.
608
+ //
609
+ // Disconnect early writes. This ensures subsequent `SSL_write` calls query
610
+ // the handshake which, in turn, will replay the error code rather than fail
611
+ // at the `write_shutdown` check. See https://crbug.com/1078515.
612
+ // TODO(davidben): Should all handshake errors do this? What about record
613
+ // decryption failures?
614
+ //
615
+ // TODO(crbug.com/381113363): Although missing from the spec, a DTLS 1.2
616
+ // server will already naturally skip 0-RTT data. If we implement DTLS 1.3
617
+ // 0-RTT, we may want a clean reject.
618
+ assert(!SSL_is_dtls(ssl));
619
+ hs->can_early_write = false;
620
+ OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_VERSION_ON_EARLY_DATA);
621
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION);
622
+ return ssl_hs_error;
623
+ }
624
+
625
+ if (ssl_protocol_version(ssl) >= TLS1_3_VERSION) {
626
+ if (hs->received_hello_verify_request) {
627
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_MESSAGE);
628
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION);
629
+ return ssl_hs_error;
630
+ }
631
+
632
+ hs->state = state_tls13;
633
+ return ssl_hs_ok;
634
+ }
635
+
636
+ // If this client only accepts non-certificate modes, then the server must
637
+ // support TLS 1.3.
638
+ if (!ssl_accepts_server_certificate_auth(hs)) {
639
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_PROTOCOL);
640
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION);
641
+ return ssl_hs_error;
642
+ }
643
+
644
+ // Clear some TLS 1.3 state that no longer needs to be retained.
645
+ hs->key_shares.clear();
646
+ hs->pre_shared_keys.clear();
647
+ ssl_done_writing_client_hello(hs);
648
+
649
+ // TLS 1.2 handshakes cannot accept ECH.
650
+ if (hs->selected_ech_config) {
651
+ ssl->s3->ech_status = ssl_ech_rejected;
652
+ }
653
+
654
+ // Copy over the server random.
655
+ OPENSSL_memcpy(ssl->s3->server_random, CBS_data(&server_hello.random),
656
+ SSL3_RANDOM_SIZE);
657
+
658
+ // Enforce the TLS 1.3 anti-downgrade feature.
659
+ if (!ssl->s3->initial_handshake_complete &&
660
+ hs->max_version >= TLS1_3_VERSION) {
661
+ static_assert(
662
+ sizeof(kTLS12DowngradeRandom) == sizeof(kTLS13DowngradeRandom),
663
+ "downgrade signals have different size");
664
+ static_assert(
665
+ sizeof(kJDK11DowngradeRandom) == sizeof(kTLS13DowngradeRandom),
666
+ "downgrade signals have different size");
667
+ auto suffix =
668
+ Span(ssl->s3->server_random).last<sizeof(kTLS13DowngradeRandom)>();
669
+ if (suffix == kTLS12DowngradeRandom || suffix == kTLS13DowngradeRandom ||
670
+ suffix == kJDK11DowngradeRandom) {
671
+ OPENSSL_PUT_ERROR(SSL, SSL_R_TLS13_DOWNGRADE);
672
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
673
+ return ssl_hs_error;
674
+ }
675
+ }
676
+
677
+ // The cipher must be allowed in the selected version and enabled.
678
+ const SSL_CIPHER *cipher = SSL_get_cipher_by_value(server_hello.cipher_suite);
679
+ uint32_t mask_a, mask_k;
680
+ ssl_get_client_disabled(hs, &mask_a, &mask_k);
681
+ if (cipher == nullptr || //
682
+ (cipher->algorithm_mkey & mask_k) || //
683
+ (cipher->algorithm_auth & mask_a) || //
684
+ SSL_CIPHER_get_min_version(cipher) > ssl_protocol_version(ssl) || //
685
+ SSL_CIPHER_get_max_version(cipher) < ssl_protocol_version(ssl) || //
686
+ !sk_SSL_CIPHER_find(SSL_get_ciphers(ssl), nullptr, cipher)) {
687
+ OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
688
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
689
+ return ssl_hs_error;
690
+ }
691
+
692
+ hs->new_cipher = cipher;
693
+
694
+ if (!hs->session_id.empty() &&
695
+ Span<const uint8_t>(server_hello.session_id) == hs->session_id) {
696
+ // Echoing the ClientHello session ID in TLS 1.2, whether from the session
697
+ // or a synthetic one, indicates resumption. If there was no session (or if
698
+ // the session was only offered in ECH ClientHelloInner), this was the
699
+ // TLS 1.3 compatibility mode session ID. As we know this is not a session
700
+ // the server knows about, any server resuming it is in error. Reject the
701
+ // first connection deterministically, rather than installing an invalid
702
+ // session into the session cache. https://crbug.com/796910
703
+ if (ssl->session == nullptr || ssl->s3->ech_status == ssl_ech_rejected) {
704
+ OPENSSL_PUT_ERROR(SSL, SSL_R_SERVER_ECHOED_INVALID_SESSION_ID);
705
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
706
+ return ssl_hs_error;
707
+ }
708
+ if (ssl->session->ssl_version != ssl->s3->version) {
709
+ OPENSSL_PUT_ERROR(SSL, SSL_R_OLD_SESSION_VERSION_NOT_RETURNED);
710
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
711
+ return ssl_hs_error;
712
+ }
713
+ if (ssl->session->cipher != hs->new_cipher) {
714
+ OPENSSL_PUT_ERROR(SSL, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED);
715
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
716
+ return ssl_hs_error;
717
+ }
718
+ if (!ssl_session_is_context_valid(hs, ssl->session.get())) {
719
+ // This is actually a client application bug.
720
+ OPENSSL_PUT_ERROR(SSL,
721
+ SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
722
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
723
+ return ssl_hs_error;
724
+ }
725
+ // We never offer sessions on renegotiation.
726
+ assert(!ssl->s3->initial_handshake_complete);
727
+ ssl->s3->session_reused = true;
728
+ } else {
729
+ // The session wasn't resumed. Create a fresh SSL_SESSION to fill out.
730
+ ssl_set_session(ssl, nullptr);
731
+ if (!ssl_get_new_session(hs)) {
732
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
733
+ return ssl_hs_error;
734
+ }
735
+
736
+ // Save the session ID from the server. This may be empty if the session
737
+ // isn't resumable, or if we'll receive a session ticket later. The
738
+ // ServerHello parser ensures `server_hello.session_id` is within bounds.
739
+ hs->new_session->session_id.CopyFrom(server_hello.session_id);
740
+ hs->new_session->cipher = hs->new_cipher;
741
+ }
742
+
743
+ // Now that the cipher is known, initialize the handshake hash and hash the
744
+ // ServerHello.
745
+ if (!hs->transcript.InitHash(ssl_protocol_version(ssl), hs->new_cipher) ||
746
+ !ssl_hash_message(hs, msg)) {
747
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
748
+ return ssl_hs_error;
749
+ }
750
+
751
+ // If doing a full handshake, the server may request a client certificate
752
+ // which requires hashing the handshake transcript. Otherwise, the handshake
753
+ // buffer may be released.
754
+ if (ssl->session != nullptr ||
755
+ !ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
756
+ hs->transcript.FreeBuffer();
757
+ }
758
+
759
+ // Only the NULL compression algorithm is supported.
760
+ if (server_hello.compression_method != 0) {
761
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
762
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
763
+ return ssl_hs_error;
764
+ }
765
+
766
+ if (!ssl_parse_serverhello_tlsext(hs, &server_hello.extensions)) {
767
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
768
+ return ssl_hs_error;
769
+ }
770
+
771
+ if (ssl->session != nullptr &&
772
+ hs->extended_master_secret != ssl->session->extended_master_secret) {
773
+ if (ssl->session->extended_master_secret) {
774
+ OPENSSL_PUT_ERROR(SSL, SSL_R_RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION);
775
+ } else {
776
+ OPENSSL_PUT_ERROR(SSL, SSL_R_RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION);
777
+ }
778
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
779
+ return ssl_hs_error;
780
+ }
781
+
782
+ ssl->method->next_message(ssl);
783
+
784
+ if (ssl->session != nullptr) {
785
+ if (ssl->ctx->reverify_on_resume &&
786
+ ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
787
+ hs->state = state_reverify_server_certificate;
788
+ } else {
789
+ hs->state = state_read_session_ticket;
790
+ }
791
+ return ssl_hs_ok;
792
+ }
793
+
794
+ hs->state = state_read_server_certificate;
795
+ return ssl_hs_ok;
796
+ }
797
+
798
+ static enum ssl_hs_wait_t do_tls13(SSL_HANDSHAKE *hs) {
799
+ enum ssl_hs_wait_t wait = tls13_client_handshake(hs);
800
+ if (wait == ssl_hs_ok) {
801
+ hs->state = state_finish_client_handshake;
802
+ return ssl_hs_ok;
803
+ }
804
+
805
+ return wait;
806
+ }
807
+
808
+ static enum ssl_hs_wait_t do_read_server_certificate(SSL_HANDSHAKE *hs) {
809
+ SSLImpl *const ssl = hs->ssl;
810
+
811
+ if (!ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
812
+ hs->state = state_read_certificate_status;
813
+ return ssl_hs_ok;
814
+ }
815
+
816
+ SSLMessage msg;
817
+ if (!ssl->method->get_message(ssl, &msg)) {
818
+ return ssl_hs_read_message;
819
+ }
820
+
821
+ if (!ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE) ||
822
+ !ssl_hash_message(hs, msg)) {
823
+ return ssl_hs_error;
824
+ }
825
+
826
+ CBS body = msg.body;
827
+ uint8_t alert = SSL_AD_DECODE_ERROR;
828
+
829
+ bool parse_ok;
830
+ if (hs->peer_cert_type == TLSEXT_cert_type_rpk) {
831
+ hs->new_session->peer_cert_type = TLSEXT_cert_type_rpk;
832
+ parse_ok = ssl_parse_rpk_cert(&alert, &hs->new_session->peer_raw_public_key,
833
+ &hs->peer_pubkey, nullptr, &body);
834
+ } else {
835
+ assert(hs->new_session->peer_cert_type == TLSEXT_cert_type_x509);
836
+ hs->new_session->peer_cert_type = TLSEXT_cert_type_x509;
837
+ parse_ok =
838
+ ssl_parse_cert_chain(&alert, &hs->new_session->certs, &hs->peer_pubkey,
839
+ nullptr, &body, ssl->ctx->pool.get());
840
+ }
841
+
842
+ if (!parse_ok) {
843
+ ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
844
+ return ssl_hs_error;
845
+ }
846
+
847
+ if (!ssl_session_has_peer_cred(hs->new_session.get()) ||
848
+ CBS_len(&body) != 0 ||
849
+ !ssl->ctx->x509_method->session_cache_objects(hs->new_session.get())) {
850
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
851
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
852
+ return ssl_hs_error;
853
+ }
854
+
855
+ if (!ssl_check_leaf_certificate(
856
+ hs, hs->peer_pubkey.get(),
857
+ sk_CRYPTO_BUFFER_value(hs->new_session->certs.get(), 0))) {
858
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
859
+ return ssl_hs_error;
860
+ }
861
+
862
+ ssl->method->next_message(ssl);
863
+
864
+ hs->state = state_read_certificate_status;
865
+ return ssl_hs_ok;
866
+ }
867
+
868
+ static enum ssl_hs_wait_t do_read_certificate_status(SSL_HANDSHAKE *hs) {
869
+ SSLImpl *const ssl = hs->ssl;
870
+
871
+ if (!hs->certificate_status_expected) {
872
+ hs->state = state_verify_server_certificate;
873
+ return ssl_hs_ok;
874
+ }
875
+
876
+ SSLMessage msg;
877
+ if (!ssl->method->get_message(ssl, &msg)) {
878
+ return ssl_hs_read_message;
879
+ }
880
+
881
+ if (msg.type != SSL3_MT_CERTIFICATE_STATUS) {
882
+ // A server may send status_request in ServerHello and then change its mind
883
+ // about sending CertificateStatus.
884
+ hs->state = state_verify_server_certificate;
885
+ return ssl_hs_ok;
886
+ }
887
+
888
+ if (!ssl_hash_message(hs, msg)) {
889
+ return ssl_hs_error;
890
+ }
891
+
892
+ CBS certificate_status = msg.body, ocsp_response;
893
+ uint8_t status_type;
894
+ if (!CBS_get_u8(&certificate_status, &status_type) || //
895
+ status_type != TLSEXT_STATUSTYPE_ocsp || //
896
+ !CBS_get_u24_length_prefixed(&certificate_status, &ocsp_response) || //
897
+ CBS_len(&ocsp_response) == 0 || //
898
+ CBS_len(&certificate_status) != 0) {
899
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
900
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
901
+ return ssl_hs_error;
902
+ }
903
+
904
+ hs->new_session->ocsp_response.reset(
905
+ CRYPTO_BUFFER_new_from_CBS(&ocsp_response, ssl->ctx->pool.get()));
906
+ if (hs->new_session->ocsp_response == nullptr) {
907
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
908
+ return ssl_hs_error;
909
+ }
910
+
911
+ ssl->method->next_message(ssl);
912
+
913
+ hs->state = state_verify_server_certificate;
914
+ return ssl_hs_ok;
915
+ }
916
+
917
+ static enum ssl_hs_wait_t do_verify_server_certificate(SSL_HANDSHAKE *hs) {
918
+ if (!ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
919
+ hs->state = state_read_server_key_exchange;
920
+ return ssl_hs_ok;
921
+ }
922
+
923
+ switch (ssl_verify_peer_cert(hs)) {
924
+ case ssl_verify_ok:
925
+ break;
926
+ case ssl_verify_invalid:
927
+ return ssl_hs_error;
928
+ case ssl_verify_retry:
929
+ hs->state = state_verify_server_certificate;
930
+ return ssl_hs_certificate_verify;
931
+ }
932
+
933
+ hs->state = state_read_server_key_exchange;
934
+ return ssl_hs_ok;
935
+ }
936
+
937
+ static enum ssl_hs_wait_t do_reverify_server_certificate(SSL_HANDSHAKE *hs) {
938
+ assert(hs->ssl->ctx->reverify_on_resume);
939
+
940
+ switch (ssl_reverify_peer_cert(hs, /*send_alert=*/true)) {
941
+ case ssl_verify_ok:
942
+ break;
943
+ case ssl_verify_invalid:
944
+ return ssl_hs_error;
945
+ case ssl_verify_retry:
946
+ hs->state = state_reverify_server_certificate;
947
+ return ssl_hs_certificate_verify;
948
+ }
949
+
950
+ hs->state = state_read_session_ticket;
951
+ return ssl_hs_ok;
952
+ }
953
+
954
+ static enum ssl_hs_wait_t do_read_server_key_exchange(SSL_HANDSHAKE *hs) {
955
+ SSLImpl *const ssl = hs->ssl;
956
+ SSLMessage msg;
957
+ if (!ssl->method->get_message(ssl, &msg)) {
958
+ return ssl_hs_read_message;
959
+ }
960
+
961
+ if (msg.type != SSL3_MT_SERVER_KEY_EXCHANGE) {
962
+ // Some ciphers (pure PSK) have an optional ServerKeyExchange message.
963
+ if (ssl_cipher_requires_server_key_exchange(hs->new_cipher)) {
964
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
965
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
966
+ return ssl_hs_error;
967
+ }
968
+
969
+ hs->state = state_read_certificate_request;
970
+ return ssl_hs_ok;
971
+ }
972
+
973
+ if (!ssl_hash_message(hs, msg)) {
974
+ return ssl_hs_error;
975
+ }
976
+
977
+ uint32_t alg_k = hs->new_cipher->algorithm_mkey;
978
+ uint32_t alg_a = hs->new_cipher->algorithm_auth;
979
+ CBS server_key_exchange = msg.body;
980
+ if (alg_a & SSL_aPSK) {
981
+ CBS psk_identity_hint;
982
+
983
+ // Each of the PSK key exchanges begins with a psk_identity_hint.
984
+ if (!CBS_get_u16_length_prefixed(&server_key_exchange,
985
+ &psk_identity_hint)) {
986
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
987
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
988
+ return ssl_hs_error;
989
+ }
990
+
991
+ // Store the PSK identity hint for the ClientKeyExchange. Assume that the
992
+ // maximum length of a PSK identity hint can be as long as the maximum
993
+ // length of a PSK identity. Also do not allow NULL characters; identities
994
+ // are saved as C strings.
995
+ //
996
+ // TODO(davidben): Should invalid hints be ignored? It's a hint rather than
997
+ // a specific identity.
998
+ if (CBS_len(&psk_identity_hint) > PSK_MAX_IDENTITY_LEN ||
999
+ CBS_contains_zero_byte(&psk_identity_hint)) {
1000
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DATA_LENGTH_TOO_LONG);
1001
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1002
+ return ssl_hs_error;
1003
+ }
1004
+
1005
+ // Save non-empty identity hints as a C string. Empty identity hints we
1006
+ // treat as missing. Plain PSK makes it possible to send either no hint
1007
+ // (omit ServerKeyExchange) or an empty hint, while ECDHE_PSK can only spell
1008
+ // empty hint. Having different capabilities is odd, so we interpret empty
1009
+ // and missing as identical.
1010
+ char *raw = nullptr;
1011
+ if (CBS_len(&psk_identity_hint) != 0 &&
1012
+ !CBS_strdup(&psk_identity_hint, &raw)) {
1013
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1014
+ return ssl_hs_error;
1015
+ }
1016
+ hs->peer_psk_identity_hint.reset(raw);
1017
+ }
1018
+
1019
+ if (alg_k & SSL_kECDHE) {
1020
+ // Parse the server parameters.
1021
+ uint8_t group_type;
1022
+ uint16_t group_id;
1023
+ CBS point;
1024
+ if (!CBS_get_u8(&server_key_exchange, &group_type) ||
1025
+ group_type != NAMED_CURVE_TYPE ||
1026
+ !CBS_get_u16(&server_key_exchange, &group_id) ||
1027
+ !CBS_get_u8_length_prefixed(&server_key_exchange, &point)) {
1028
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1029
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1030
+ return ssl_hs_error;
1031
+ }
1032
+
1033
+ // Ensure the group is consistent with preferences.
1034
+ if (!tls1_check_group_id(hs, group_id)) {
1035
+ OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
1036
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
1037
+ return ssl_hs_error;
1038
+ }
1039
+
1040
+ // Save the group and peer public key for later.
1041
+ hs->new_session->group_id = group_id;
1042
+ if (!hs->peer_key.CopyFrom(point)) {
1043
+ return ssl_hs_error;
1044
+ }
1045
+ } else if (!(alg_k & SSL_kPSK)) {
1046
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
1047
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
1048
+ return ssl_hs_error;
1049
+ }
1050
+
1051
+ // At this point, `server_key_exchange` contains the signature, if any, while
1052
+ // `msg.body` contains the entire message. From that, derive a CBS containing
1053
+ // just the parameter.
1054
+ CBS parameter;
1055
+ CBS_init(&parameter, CBS_data(&msg.body),
1056
+ CBS_len(&msg.body) - CBS_len(&server_key_exchange));
1057
+
1058
+ // ServerKeyExchange should be signed by the server's public key.
1059
+ if (ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
1060
+ uint16_t signature_algorithm = 0;
1061
+ if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
1062
+ if (!CBS_get_u16(&server_key_exchange, &signature_algorithm)) {
1063
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1064
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1065
+ return ssl_hs_error;
1066
+ }
1067
+ uint8_t alert = SSL_AD_DECODE_ERROR;
1068
+ if (!tls12_check_peer_sigalg(hs, &alert, signature_algorithm,
1069
+ hs->peer_pubkey.get())) {
1070
+ ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1071
+ return ssl_hs_error;
1072
+ }
1073
+ hs->new_session->peer_signature_algorithm = signature_algorithm;
1074
+ } else if (!tls1_get_legacy_signature_algorithm(&signature_algorithm,
1075
+ hs->peer_pubkey.get())) {
1076
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE);
1077
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_CERTIFICATE);
1078
+ return ssl_hs_error;
1079
+ }
1080
+
1081
+ // The last field in `server_key_exchange` is the signature.
1082
+ CBS signature;
1083
+ if (!CBS_get_u16_length_prefixed(&server_key_exchange, &signature) ||
1084
+ CBS_len(&server_key_exchange) != 0) {
1085
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1086
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1087
+ return ssl_hs_error;
1088
+ }
1089
+
1090
+ ScopedCBB transcript;
1091
+ Array<uint8_t> transcript_data;
1092
+ if (!CBB_init(transcript.get(),
1093
+ 2 * SSL3_RANDOM_SIZE + CBS_len(&parameter)) ||
1094
+ !CBB_add_bytes(transcript.get(), ssl->s3->client_random,
1095
+ SSL3_RANDOM_SIZE) ||
1096
+ !CBB_add_bytes(transcript.get(), ssl->s3->server_random,
1097
+ SSL3_RANDOM_SIZE) ||
1098
+ !CBB_add_bytes(transcript.get(), CBS_data(&parameter),
1099
+ CBS_len(&parameter)) ||
1100
+ !CBBFinishArray(transcript.get(), &transcript_data)) {
1101
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1102
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1103
+ return ssl_hs_error;
1104
+ }
1105
+
1106
+ if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
1107
+ hs->peer_pubkey.get(), transcript_data)) {
1108
+ // bad signature
1109
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
1110
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
1111
+ return ssl_hs_error;
1112
+ }
1113
+ } else {
1114
+ // PSK ciphers are the only supported certificate-less ciphers.
1115
+ assert(alg_a == SSL_aPSK);
1116
+
1117
+ if (CBS_len(&server_key_exchange) > 0) {
1118
+ OPENSSL_PUT_ERROR(SSL, SSL_R_EXTRA_DATA_IN_MESSAGE);
1119
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1120
+ return ssl_hs_error;
1121
+ }
1122
+ }
1123
+
1124
+ ssl->method->next_message(ssl);
1125
+ hs->state = state_read_certificate_request;
1126
+ return ssl_hs_ok;
1127
+ }
1128
+
1129
+ static enum ssl_hs_wait_t do_read_certificate_request(SSL_HANDSHAKE *hs) {
1130
+ SSLImpl *const ssl = hs->ssl;
1131
+
1132
+ if (!ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
1133
+ hs->state = state_read_server_hello_done;
1134
+ return ssl_hs_ok;
1135
+ }
1136
+
1137
+ SSLMessage msg;
1138
+ if (!ssl->method->get_message(ssl, &msg)) {
1139
+ return ssl_hs_read_message;
1140
+ }
1141
+
1142
+ if (msg.type == SSL3_MT_SERVER_HELLO_DONE) {
1143
+ // If we get here we don't need the handshake buffer as we won't be doing
1144
+ // client auth.
1145
+ hs->transcript.FreeBuffer();
1146
+ hs->state = state_read_server_hello_done;
1147
+ return ssl_hs_ok;
1148
+ }
1149
+
1150
+ if (!ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE_REQUEST) ||
1151
+ !ssl_hash_message(hs, msg)) {
1152
+ return ssl_hs_error;
1153
+ }
1154
+
1155
+ // Get the certificate types.
1156
+ CBS body = msg.body, certificate_types;
1157
+ if (!CBS_get_u8_length_prefixed(&body, &certificate_types)) {
1158
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1159
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1160
+ return ssl_hs_error;
1161
+ }
1162
+
1163
+ if (!hs->certificate_types.CopyFrom(certificate_types)) {
1164
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1165
+ return ssl_hs_error;
1166
+ }
1167
+
1168
+ if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
1169
+ CBS supported_signature_algorithms;
1170
+ if (!CBS_get_u16_length_prefixed(&body, &supported_signature_algorithms) ||
1171
+ !tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
1172
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1173
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1174
+ return ssl_hs_error;
1175
+ }
1176
+ }
1177
+
1178
+ uint8_t alert = SSL_AD_DECODE_ERROR;
1179
+ UniquePtr<STACK_OF(CRYPTO_BUFFER)> ca_names =
1180
+ SSL_parse_CA_list(ssl, &alert, &body);
1181
+ if (!ca_names) {
1182
+ ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1183
+ return ssl_hs_error;
1184
+ }
1185
+
1186
+ if (CBS_len(&body) != 0) {
1187
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1188
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1189
+ return ssl_hs_error;
1190
+ }
1191
+
1192
+ hs->cert_request = true;
1193
+ hs->ca_names = std::move(ca_names);
1194
+ ssl->ctx->x509_method->hs_flush_cached_ca_names(hs);
1195
+
1196
+ ssl->method->next_message(ssl);
1197
+ hs->state = state_read_server_hello_done;
1198
+ return ssl_hs_ok;
1199
+ }
1200
+
1201
+ static enum ssl_hs_wait_t do_read_server_hello_done(SSL_HANDSHAKE *hs) {
1202
+ SSLImpl *const ssl = hs->ssl;
1203
+ SSLMessage msg;
1204
+ if (!ssl->method->get_message(ssl, &msg)) {
1205
+ return ssl_hs_read_message;
1206
+ }
1207
+
1208
+ if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO_DONE) ||
1209
+ !ssl_hash_message(hs, msg)) {
1210
+ return ssl_hs_error;
1211
+ }
1212
+
1213
+ // ServerHelloDone is empty.
1214
+ if (CBS_len(&msg.body) != 0) {
1215
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1216
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1217
+ return ssl_hs_error;
1218
+ }
1219
+
1220
+ // ServerHelloDone should be the end of the flight.
1221
+ if (ssl->method->has_unprocessed_handshake_data(ssl)) {
1222
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
1223
+ OPENSSL_PUT_ERROR(SSL, SSL_R_EXCESS_HANDSHAKE_DATA);
1224
+ return ssl_hs_error;
1225
+ }
1226
+
1227
+ ssl->method->next_message(ssl);
1228
+ hs->state = state_send_client_certificate;
1229
+ return ssl_hs_ok;
1230
+ }
1231
+
1232
+ static bool check_credential(SSL_HANDSHAKE *hs, const SSLCredential *cred,
1233
+ uint16_t *out_sigalg) {
1234
+ bool cert_type_ok = false;
1235
+ if (hs->client_cert_type == TLSEXT_cert_type_x509) {
1236
+ cert_type_ok = cred->type == SSLCredentialType::kX509;
1237
+ } else if (hs->client_cert_type == TLSEXT_cert_type_rpk) {
1238
+ cert_type_ok = cred->type == SSLCredentialType::kRawPublicKey;
1239
+ }
1240
+ if (!cert_type_ok) {
1241
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
1242
+ return false;
1243
+ }
1244
+
1245
+ // Check the certificate types advertised by the peer.
1246
+ uint8_t cert_type;
1247
+ switch (EVP_PKEY_id(cred->pubkey.get())) {
1248
+ case EVP_PKEY_RSA:
1249
+ cert_type = SSL3_CT_RSA_SIGN;
1250
+ break;
1251
+ case EVP_PKEY_EC:
1252
+ case EVP_PKEY_ED25519:
1253
+ cert_type = TLS_CT_ECDSA_SIGN;
1254
+ break;
1255
+ default:
1256
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
1257
+ return false;
1258
+ }
1259
+ if (std::find(hs->certificate_types.begin(), hs->certificate_types.end(),
1260
+ cert_type) == hs->certificate_types.end()) {
1261
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
1262
+ return false;
1263
+ }
1264
+
1265
+ // All currently supported credentials require a signature. Note this does not
1266
+ // check the ECDSA curve. Prior to TLS 1.3, there is no way to determine which
1267
+ // ECDSA curves are supported by the peer, so we must assume all curves are
1268
+ // supported.
1269
+ return tls1_choose_signature_algorithm(hs, cred, out_sigalg) &&
1270
+ ssl_credential_matches_requested_issuers(hs, cred);
1271
+ }
1272
+
1273
+ static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) {
1274
+ SSLImpl *const ssl = hs->ssl;
1275
+
1276
+ // The peer didn't request a certificate.
1277
+ if (!hs->cert_request) {
1278
+ hs->state = state_send_client_key_exchange;
1279
+ return ssl_hs_ok;
1280
+ }
1281
+
1282
+ if (ssl->s3->ech_status == ssl_ech_rejected) {
1283
+ // Do not send client certificates on ECH reject. We have not authenticated
1284
+ // the server for the name that can learn the certificate.
1285
+ SSL_certs_clear(ssl);
1286
+ } else if (hs->config->cert->cert_cb) {
1287
+ uint8_t alert = SSL_AD_INTERNAL_ERROR;
1288
+ // Call cert_cb to update the certificate.
1289
+ int rv =
1290
+ hs->config->cert->cert_cb(ssl, hs->config->cert->cert_cb_arg, &alert);
1291
+ if (rv == 0) {
1292
+ ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1293
+ OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR);
1294
+ return ssl_hs_error;
1295
+ }
1296
+ if (rv < 0) {
1297
+ hs->state = state_send_client_certificate;
1298
+ return ssl_hs_x509_lookup;
1299
+ }
1300
+ }
1301
+
1302
+ Array<SSLCredential *> creds;
1303
+ if (!ssl_get_full_credential_list(hs, &creds)) {
1304
+ return ssl_hs_error;
1305
+ }
1306
+
1307
+ // Select the credential, if any, to use.
1308
+ bool may_proceed_anonymously = true;
1309
+ for (SSLCredential *cred : creds) {
1310
+ if (!cred->UsesPrivateKey()) {
1311
+ // Non-certificate credentials (e.g. PSKs) do not participate in deciding
1312
+ // whether to error or proceed anonymously.
1313
+ continue;
1314
+ }
1315
+
1316
+ ERR_clear_error();
1317
+ may_proceed_anonymously = false;
1318
+ uint16_t sigalg;
1319
+ if (check_credential(hs, cred, &sigalg)) {
1320
+ hs->credential = UpRef(cred);
1321
+ hs->signature_algorithm = sigalg;
1322
+ break;
1323
+ }
1324
+ }
1325
+
1326
+ // Fail the connection if no credentials matched, but only if the caller
1327
+ // configured at least one certificate credential. If there were no
1328
+ // candidates, proceed anonymously.
1329
+ if (hs->credential == nullptr) {
1330
+ if (!may_proceed_anonymously) {
1331
+ // The error from the last attempt is in the error queue.
1332
+ assert(ERR_peek_error() != 0);
1333
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1334
+ return ssl_hs_error;
1335
+ }
1336
+ // Without CertificateVerify, we can release the handshake buffer.
1337
+ hs->transcript.FreeBuffer();
1338
+ }
1339
+
1340
+ if (!ssl_send_tls12_certificate(hs)) {
1341
+ return ssl_hs_error;
1342
+ }
1343
+
1344
+ hs->state = state_send_client_key_exchange;
1345
+ return ssl_hs_ok;
1346
+ }
1347
+
1348
+ static_assert(sizeof(size_t) >= sizeof(unsigned),
1349
+ "size_t is smaller than unsigned");
1350
+
1351
+ static enum ssl_hs_wait_t do_send_client_key_exchange(SSL_HANDSHAKE *hs) {
1352
+ SSLImpl *const ssl = hs->ssl;
1353
+ ScopedCBB cbb;
1354
+ CBB body;
1355
+ if (!ssl->method->init_message(ssl, cbb.get(), &body,
1356
+ SSL3_MT_CLIENT_KEY_EXCHANGE)) {
1357
+ return ssl_hs_error;
1358
+ }
1359
+
1360
+ Array<uint8_t> pms;
1361
+ uint32_t alg_k = hs->new_cipher->algorithm_mkey;
1362
+ uint32_t alg_a = hs->new_cipher->algorithm_auth;
1363
+ if (ssl_cipher_uses_certificate_auth(hs->new_cipher) &&
1364
+ hs->new_session->peer_cert_type == TLSEXT_cert_type_x509) {
1365
+ const CRYPTO_BUFFER *leaf =
1366
+ sk_CRYPTO_BUFFER_value(hs->new_session->certs.get(), 0);
1367
+ CBS leaf_cbs;
1368
+ CRYPTO_BUFFER_init_CBS(leaf, &leaf_cbs);
1369
+
1370
+ // Check the key usage matches the cipher suite. Key usage is only checked
1371
+ // for X.509 certs. (RPKs have no keyUsage to enforce.)
1372
+ ssl_key_usage_t intended_use = (alg_k & SSL_kRSA)
1373
+ ? key_usage_encipherment
1374
+ : key_usage_digital_signature;
1375
+ if (!ssl_cert_check_key_usage(&leaf_cbs, intended_use)) {
1376
+ return ssl_hs_error;
1377
+ }
1378
+ }
1379
+
1380
+ // If using a PSK key exchange, prepare the pre-shared key.
1381
+ unsigned psk_len = 0;
1382
+ uint8_t psk[PSK_MAX_PSK_LEN];
1383
+ if (alg_a & SSL_aPSK) {
1384
+ if (hs->config->psk_client_callback == nullptr) {
1385
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PSK_NO_CLIENT_CB);
1386
+ return ssl_hs_error;
1387
+ }
1388
+
1389
+ char identity[PSK_MAX_IDENTITY_LEN + 1];
1390
+ OPENSSL_memset(identity, 0, sizeof(identity));
1391
+ psk_len = hs->config->psk_client_callback(
1392
+ ssl, hs->peer_psk_identity_hint.get(), identity, sizeof(identity), psk,
1393
+ sizeof(psk));
1394
+ if (psk_len == 0) {
1395
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PSK_IDENTITY_NOT_FOUND);
1396
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1397
+ return ssl_hs_error;
1398
+ }
1399
+ assert(psk_len <= PSK_MAX_PSK_LEN);
1400
+
1401
+ hs->new_session->psk_identity.reset(OPENSSL_strdup(identity));
1402
+ if (hs->new_session->psk_identity == nullptr) {
1403
+ return ssl_hs_error;
1404
+ }
1405
+
1406
+ // Write out psk_identity.
1407
+ CBB child;
1408
+ if (!CBB_add_u16_length_prefixed(&body, &child) ||
1409
+ !CBB_add_bytes(&child, (const uint8_t *)identity,
1410
+ OPENSSL_strnlen(identity, sizeof(identity))) ||
1411
+ !CBB_flush(&body)) {
1412
+ return ssl_hs_error;
1413
+ }
1414
+ }
1415
+
1416
+ // Depending on the key exchange method, compute `pms`.
1417
+ if (alg_k & SSL_kRSA) {
1418
+ RSA *rsa = EVP_PKEY_get0_RSA(hs->peer_pubkey.get());
1419
+ if (rsa == nullptr) {
1420
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1421
+ return ssl_hs_error;
1422
+ }
1423
+
1424
+ if (!pms.InitForOverwrite(SSL_MAX_MASTER_KEY_LENGTH)) {
1425
+ return ssl_hs_error;
1426
+ }
1427
+ pms[0] = hs->client_version >> 8;
1428
+ pms[1] = hs->client_version & 0xff;
1429
+ if (!RAND_bytes(&pms[2], SSL_MAX_MASTER_KEY_LENGTH - 2)) {
1430
+ return ssl_hs_error;
1431
+ }
1432
+
1433
+ CBB enc_pms;
1434
+ uint8_t *ptr;
1435
+ size_t enc_pms_len;
1436
+ if (!CBB_add_u16_length_prefixed(&body, &enc_pms) || //
1437
+ !CBB_reserve(&enc_pms, &ptr, RSA_size(rsa)) || //
1438
+ !RSA_encrypt(rsa, &enc_pms_len, ptr, RSA_size(rsa), pms.data(),
1439
+ pms.size(), RSA_PKCS1_PADDING) || //
1440
+ !CBB_did_write(&enc_pms, enc_pms_len) || //
1441
+ !CBB_flush(&body)) {
1442
+ return ssl_hs_error;
1443
+ }
1444
+ } else if (alg_k & SSL_kECDHE) {
1445
+ CBB child;
1446
+ if (!CBB_add_u8_length_prefixed(&body, &child)) {
1447
+ return ssl_hs_error;
1448
+ }
1449
+
1450
+ // Generate a premaster secret and encapsulate it.
1451
+ bssl::UniquePtr<SSLKeyShare> kem =
1452
+ SSLKeyShare::Create(hs->new_session->group_id);
1453
+ uint8_t alert = SSL_AD_DECODE_ERROR;
1454
+ if (!kem || !kem->Encap(&child, &pms, &alert, hs->peer_key)) {
1455
+ ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1456
+ return ssl_hs_error;
1457
+ }
1458
+ if (!CBB_flush(&body)) {
1459
+ return ssl_hs_error;
1460
+ }
1461
+
1462
+ // The peer key can now be discarded.
1463
+ hs->peer_key.Reset();
1464
+ } else if (alg_k & SSL_kPSK) {
1465
+ // For plain PSK, other_secret is a block of 0s with the same length as
1466
+ // the pre-shared key.
1467
+ if (!pms.Init(psk_len)) {
1468
+ return ssl_hs_error;
1469
+ }
1470
+ } else {
1471
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1472
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1473
+ return ssl_hs_error;
1474
+ }
1475
+
1476
+ // For a PSK cipher suite, other_secret is combined with the pre-shared
1477
+ // key.
1478
+ if (alg_a & SSL_aPSK) {
1479
+ ScopedCBB pms_cbb;
1480
+ CBB child;
1481
+ if (!CBB_init(pms_cbb.get(), 2 + psk_len + 2 + pms.size()) ||
1482
+ !CBB_add_u16_length_prefixed(pms_cbb.get(), &child) ||
1483
+ !CBB_add_bytes(&child, pms.data(), pms.size()) ||
1484
+ !CBB_add_u16_length_prefixed(pms_cbb.get(), &child) ||
1485
+ !CBB_add_bytes(&child, psk, psk_len) ||
1486
+ !CBBFinishArray(pms_cbb.get(), &pms)) {
1487
+ return ssl_hs_error;
1488
+ }
1489
+ }
1490
+
1491
+ // The message must be added to the finished hash before calculating the
1492
+ // master secret.
1493
+ if (!ssl_add_message_cbb(ssl, cbb.get())) {
1494
+ return ssl_hs_error;
1495
+ }
1496
+
1497
+ hs->new_session->secret.ResizeForOverwrite(SSL3_MASTER_SECRET_SIZE);
1498
+ if (!tls1_generate_master_secret(hs, Span(hs->new_session->secret), pms)) {
1499
+ return ssl_hs_error;
1500
+ }
1501
+
1502
+ hs->new_session->extended_master_secret = hs->extended_master_secret;
1503
+ hs->state = state_send_client_certificate_verify;
1504
+ return ssl_hs_ok;
1505
+ }
1506
+
1507
+ static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs) {
1508
+ SSLImpl *const ssl = hs->ssl;
1509
+
1510
+ if (!hs->cert_request || hs->credential == nullptr) {
1511
+ hs->state = state_send_client_finished;
1512
+ return ssl_hs_ok;
1513
+ }
1514
+
1515
+ ScopedCBB cbb;
1516
+ CBB body, child;
1517
+ if (!ssl->method->init_message(ssl, cbb.get(), &body,
1518
+ SSL3_MT_CERTIFICATE_VERIFY)) {
1519
+ return ssl_hs_error;
1520
+ }
1521
+
1522
+ assert(hs->signature_algorithm != 0);
1523
+ if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
1524
+ // Write out the digest type in TLS 1.2.
1525
+ if (!CBB_add_u16(&body, hs->signature_algorithm)) {
1526
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1527
+ return ssl_hs_error;
1528
+ }
1529
+ }
1530
+
1531
+ // Set aside space for the signature.
1532
+ const size_t max_sig_len = EVP_PKEY_size(hs->credential->pubkey.get());
1533
+ uint8_t *ptr;
1534
+ if (!CBB_add_u16_length_prefixed(&body, &child) ||
1535
+ !CBB_reserve(&child, &ptr, max_sig_len)) {
1536
+ return ssl_hs_error;
1537
+ }
1538
+
1539
+ size_t sig_len = max_sig_len;
1540
+ switch (ssl_private_key_sign(hs, ptr, &sig_len, max_sig_len,
1541
+ hs->signature_algorithm,
1542
+ hs->transcript.buffer())) {
1543
+ case ssl_private_key_success:
1544
+ break;
1545
+ case ssl_private_key_failure:
1546
+ return ssl_hs_error;
1547
+ case ssl_private_key_retry:
1548
+ hs->state = state_send_client_certificate_verify;
1549
+ return ssl_hs_private_key_operation;
1550
+ }
1551
+
1552
+ if (!CBB_did_write(&child, sig_len) || //
1553
+ !ssl_add_message_cbb(ssl, cbb.get())) {
1554
+ return ssl_hs_error;
1555
+ }
1556
+
1557
+ // The handshake buffer is no longer necessary.
1558
+ hs->transcript.FreeBuffer();
1559
+
1560
+ hs->state = state_send_client_finished;
1561
+ return ssl_hs_ok;
1562
+ }
1563
+
1564
+ static enum ssl_hs_wait_t do_send_client_finished(SSL_HANDSHAKE *hs) {
1565
+ SSLImpl *const ssl = hs->ssl;
1566
+ hs->can_release_private_key = true;
1567
+ if (!ssl->method->add_change_cipher_spec(ssl) ||
1568
+ !tls1_change_cipher_state(hs, evp_aead_seal)) {
1569
+ return ssl_hs_error;
1570
+ }
1571
+
1572
+ if (hs->next_proto_neg_seen) {
1573
+ static const uint8_t kZero[32] = {0};
1574
+ size_t padding_len =
1575
+ 32 - ((ssl->s3->next_proto_negotiated.size() + 2) % 32);
1576
+
1577
+ ScopedCBB cbb;
1578
+ CBB body, child;
1579
+ if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_NEXT_PROTO) ||
1580
+ !CBB_add_u8_length_prefixed(&body, &child) ||
1581
+ !CBB_add_bytes(&child, ssl->s3->next_proto_negotiated.data(),
1582
+ ssl->s3->next_proto_negotiated.size()) ||
1583
+ !CBB_add_u8_length_prefixed(&body, &child) ||
1584
+ !CBB_add_bytes(&child, kZero, padding_len) ||
1585
+ !ssl_add_message_cbb(ssl, cbb.get())) {
1586
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1587
+ return ssl_hs_error;
1588
+ }
1589
+ }
1590
+
1591
+ if (hs->channel_id_negotiated) {
1592
+ ScopedCBB cbb;
1593
+ CBB body;
1594
+ if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_CHANNEL_ID) ||
1595
+ !tls1_write_channel_id(hs, &body) ||
1596
+ !ssl_add_message_cbb(ssl, cbb.get())) {
1597
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1598
+ return ssl_hs_error;
1599
+ }
1600
+ }
1601
+
1602
+ if (!ssl_send_finished(hs)) {
1603
+ return ssl_hs_error;
1604
+ }
1605
+
1606
+ hs->state = state_finish_flight;
1607
+ return ssl_hs_flush;
1608
+ }
1609
+
1610
+ static bool can_false_start(const SSL_HANDSHAKE *hs) {
1611
+ const SSLImpl *const ssl = hs->ssl;
1612
+
1613
+ // False Start bypasses the Finished check's downgrade protection. This can
1614
+ // enable attacks where we send data under weaker settings than supported
1615
+ // (e.g. the Logjam attack). Thus we require TLS 1.2 with an ECDHE+AEAD
1616
+ // cipher, our strongest settings before TLS 1.3.
1617
+ //
1618
+ // Now that TLS 1.3 exists, we would like to avoid similar attacks between
1619
+ // TLS 1.2 and TLS 1.3, but there are too many TLS 1.2 deployments to
1620
+ // sacrifice False Start on them. Instead, we rely on the ServerHello.random
1621
+ // downgrade signal, which we unconditionally enforce.
1622
+ if (SSL_is_dtls(ssl) || //
1623
+ SSL_version(ssl) != TLS1_2_VERSION || //
1624
+ hs->new_cipher->algorithm_mkey != SSL_kECDHE || //
1625
+ hs->new_cipher->algorithm_mac != SSL_AEAD) {
1626
+ return false;
1627
+ }
1628
+
1629
+ // If ECH was rejected, disable False Start. We run the handshake to
1630
+ // completion, including the Finished downgrade check, to authenticate the
1631
+ // recovery flow.
1632
+ if (ssl->s3->ech_status == ssl_ech_rejected) {
1633
+ return false;
1634
+ }
1635
+
1636
+ // Additionally require ALPN or NPN by default.
1637
+ //
1638
+ // TODO(davidben): Can this constraint be relaxed globally now that cipher
1639
+ // suite requirements have been tightened?
1640
+ if (!ssl->ctx->false_start_allowed_without_alpn &&
1641
+ ssl->s3->alpn_selected.empty() &&
1642
+ ssl->s3->next_proto_negotiated.empty()) {
1643
+ return false;
1644
+ }
1645
+
1646
+ return true;
1647
+ }
1648
+
1649
+ static enum ssl_hs_wait_t do_finish_flight(SSL_HANDSHAKE *hs) {
1650
+ SSLImpl *const ssl = hs->ssl;
1651
+ if (ssl->session != nullptr) {
1652
+ hs->state = state_finish_client_handshake;
1653
+ return ssl_hs_ok;
1654
+ }
1655
+
1656
+ // This is a full handshake. If it involves ChannelID, then record the
1657
+ // handshake hashes at this point in the session so that any resumption of
1658
+ // this session with ChannelID can sign those hashes.
1659
+ if (!tls1_record_handshake_hashes_for_channel_id(hs)) {
1660
+ return ssl_hs_error;
1661
+ }
1662
+
1663
+ hs->state = state_read_session_ticket;
1664
+
1665
+ if ((SSL_get_mode(ssl) & SSL_MODE_ENABLE_FALSE_START) &&
1666
+ can_false_start(hs) &&
1667
+ // No False Start on renegotiation (would complicate the state machine).
1668
+ !ssl->s3->initial_handshake_complete) {
1669
+ hs->in_false_start = true;
1670
+ hs->can_early_write = true;
1671
+ return ssl_hs_early_return;
1672
+ }
1673
+
1674
+ return ssl_hs_ok;
1675
+ }
1676
+
1677
+ static enum ssl_hs_wait_t do_read_session_ticket(SSL_HANDSHAKE *hs) {
1678
+ SSLImpl *const ssl = hs->ssl;
1679
+
1680
+ if (!hs->ticket_expected) {
1681
+ hs->state = state_process_change_cipher_spec;
1682
+ return ssl_hs_read_change_cipher_spec;
1683
+ }
1684
+
1685
+ SSLMessage msg;
1686
+ if (!ssl->method->get_message(ssl, &msg)) {
1687
+ return ssl_hs_read_message;
1688
+ }
1689
+
1690
+ if (!ssl_check_message_type(ssl, msg, SSL3_MT_NEW_SESSION_TICKET) ||
1691
+ !ssl_hash_message(hs, msg)) {
1692
+ return ssl_hs_error;
1693
+ }
1694
+
1695
+ CBS new_session_ticket = msg.body, ticket;
1696
+ uint32_t ticket_lifetime_hint;
1697
+ if (!CBS_get_u32(&new_session_ticket, &ticket_lifetime_hint) ||
1698
+ !CBS_get_u16_length_prefixed(&new_session_ticket, &ticket) ||
1699
+ CBS_len(&new_session_ticket) != 0) {
1700
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1701
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1702
+ return ssl_hs_error;
1703
+ }
1704
+
1705
+ if (CBS_len(&ticket) == 0) {
1706
+ // RFC 5077 allows a server to change its mind and send no ticket after
1707
+ // negotiating the extension. The value of `ticket_expected` is checked in
1708
+ // `ssl_update_cache` so is cleared here to avoid an unnecessary update.
1709
+ hs->ticket_expected = false;
1710
+ ssl->method->next_message(ssl);
1711
+ hs->state = state_process_change_cipher_spec;
1712
+ return ssl_hs_read_change_cipher_spec;
1713
+ }
1714
+
1715
+ if (ssl->session != nullptr) {
1716
+ // The server is sending a new ticket for an existing session. Sessions are
1717
+ // immutable once established, so duplicate all but the ticket of the
1718
+ // existing session.
1719
+ assert(!hs->new_session);
1720
+ hs->new_session =
1721
+ SSL_SESSION_dup(ssl->session.get(), SSL_SESSION_INCLUDE_NONAUTH);
1722
+ if (!hs->new_session) {
1723
+ return ssl_hs_error;
1724
+ }
1725
+ }
1726
+
1727
+ // `ticket_lifetime_hint` is measured from when the ticket was issued.
1728
+ ssl_session_rebase_time(ssl, hs->new_session.get());
1729
+
1730
+ if (!hs->new_session->ticket.CopyFrom(ticket)) {
1731
+ return ssl_hs_error;
1732
+ }
1733
+ hs->new_session->ticket_lifetime_hint = ticket_lifetime_hint;
1734
+
1735
+ // Historically, OpenSSL filled in fake session IDs for ticket-based sessions.
1736
+ // TODO(davidben): Are external callers relying on this? Try removing this.
1737
+ hs->new_session->session_id.ResizeForOverwrite(SHA256_DIGEST_LENGTH);
1738
+ SHA256(CBS_data(&ticket), CBS_len(&ticket),
1739
+ hs->new_session->session_id.data());
1740
+
1741
+ ssl->method->next_message(ssl);
1742
+ hs->state = state_process_change_cipher_spec;
1743
+ return ssl_hs_read_change_cipher_spec;
1744
+ }
1745
+
1746
+ static enum ssl_hs_wait_t do_process_change_cipher_spec(SSL_HANDSHAKE *hs) {
1747
+ if (!tls1_change_cipher_state(hs, evp_aead_open)) {
1748
+ return ssl_hs_error;
1749
+ }
1750
+
1751
+ hs->state = state_read_server_finished;
1752
+ return ssl_hs_ok;
1753
+ }
1754
+
1755
+ static enum ssl_hs_wait_t do_read_server_finished(SSL_HANDSHAKE *hs) {
1756
+ SSLImpl *const ssl = hs->ssl;
1757
+ enum ssl_hs_wait_t wait = ssl_get_finished(hs);
1758
+ if (wait != ssl_hs_ok) {
1759
+ return wait;
1760
+ }
1761
+
1762
+ if (ssl->session != nullptr) {
1763
+ hs->state = state_send_client_finished;
1764
+ return ssl_hs_ok;
1765
+ }
1766
+
1767
+ hs->state = state_finish_client_handshake;
1768
+ return ssl_hs_ok;
1769
+ }
1770
+
1771
+ static enum ssl_hs_wait_t do_finish_client_handshake(SSL_HANDSHAKE *hs) {
1772
+ SSLImpl *const ssl = hs->ssl;
1773
+ if (ssl->s3->ech_status == ssl_ech_rejected) {
1774
+ // Release the retry configs.
1775
+ hs->ech_authenticated_reject = true;
1776
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ECH_REQUIRED);
1777
+ OPENSSL_PUT_ERROR(SSL, SSL_R_ECH_REJECTED);
1778
+ return ssl_hs_error;
1779
+ }
1780
+
1781
+ ssl->method->on_handshake_complete(ssl);
1782
+
1783
+ // Note TLS 1.2 resumptions with ticket renewal have both `ssl->session` (the
1784
+ // resumed session) and `hs->new_session` (the session with the new ticket).
1785
+ bool has_new_session = hs->new_session != nullptr;
1786
+ if (has_new_session) {
1787
+ // When False Start is enabled, the handshake reports completion early. The
1788
+ // caller may then have passed the (then unresuable) `hs->new_session` to
1789
+ // another thread via `SSL_get0_session` for resumption. To avoid potential
1790
+ // race conditions in such callers, we duplicate the session before
1791
+ // clearing `not_resumable`.
1792
+ ssl->s3->established_session =
1793
+ SSL_SESSION_dup(hs->new_session.get(), SSL_SESSION_DUP_ALL);
1794
+ if (!ssl->s3->established_session) {
1795
+ return ssl_hs_error;
1796
+ }
1797
+ // Renegotiations do not participate in session resumption.
1798
+ if (!ssl->s3->initial_handshake_complete) {
1799
+ ssl->s3->established_session->not_resumable = false;
1800
+ }
1801
+
1802
+ hs->new_session.reset();
1803
+ } else {
1804
+ assert(ssl->session != nullptr);
1805
+ ssl->s3->established_session = UpRef(ssl->session);
1806
+ }
1807
+
1808
+ hs->handshake_finalized = true;
1809
+ ssl->s3->initial_handshake_complete = true;
1810
+ if (has_new_session) {
1811
+ ssl_update_cache(ssl);
1812
+ }
1813
+
1814
+ hs->state = state_done;
1815
+ return ssl_hs_ok;
1816
+ }
1817
+
1818
+ enum ssl_hs_wait_t ssl_client_handshake(SSL_HANDSHAKE *hs) {
1819
+ while (hs->state != state_done) {
1820
+ enum ssl_hs_wait_t ret = ssl_hs_error;
1821
+ enum ssl_client_hs_state_t state =
1822
+ static_cast<enum ssl_client_hs_state_t>(hs->state);
1823
+ switch (state) {
1824
+ case state_start_connect:
1825
+ ret = do_start_connect(hs);
1826
+ break;
1827
+ case state_enter_early_data:
1828
+ ret = do_enter_early_data(hs);
1829
+ break;
1830
+ case state_early_reverify_server_certificate:
1831
+ ret = do_early_reverify_server_certificate(hs);
1832
+ break;
1833
+ case state_read_server_hello:
1834
+ ret = do_read_server_hello(hs);
1835
+ break;
1836
+ case state_tls13:
1837
+ ret = do_tls13(hs);
1838
+ break;
1839
+ case state_read_server_certificate:
1840
+ ret = do_read_server_certificate(hs);
1841
+ break;
1842
+ case state_read_certificate_status:
1843
+ ret = do_read_certificate_status(hs);
1844
+ break;
1845
+ case state_verify_server_certificate:
1846
+ ret = do_verify_server_certificate(hs);
1847
+ break;
1848
+ case state_reverify_server_certificate:
1849
+ ret = do_reverify_server_certificate(hs);
1850
+ break;
1851
+ case state_read_server_key_exchange:
1852
+ ret = do_read_server_key_exchange(hs);
1853
+ break;
1854
+ case state_read_certificate_request:
1855
+ ret = do_read_certificate_request(hs);
1856
+ break;
1857
+ case state_read_server_hello_done:
1858
+ ret = do_read_server_hello_done(hs);
1859
+ break;
1860
+ case state_send_client_certificate:
1861
+ ret = do_send_client_certificate(hs);
1862
+ break;
1863
+ case state_send_client_key_exchange:
1864
+ ret = do_send_client_key_exchange(hs);
1865
+ break;
1866
+ case state_send_client_certificate_verify:
1867
+ ret = do_send_client_certificate_verify(hs);
1868
+ break;
1869
+ case state_send_client_finished:
1870
+ ret = do_send_client_finished(hs);
1871
+ break;
1872
+ case state_finish_flight:
1873
+ ret = do_finish_flight(hs);
1874
+ break;
1875
+ case state_read_session_ticket:
1876
+ ret = do_read_session_ticket(hs);
1877
+ break;
1878
+ case state_process_change_cipher_spec:
1879
+ ret = do_process_change_cipher_spec(hs);
1880
+ break;
1881
+ case state_read_server_finished:
1882
+ ret = do_read_server_finished(hs);
1883
+ break;
1884
+ case state_finish_client_handshake:
1885
+ ret = do_finish_client_handshake(hs);
1886
+ break;
1887
+ case state_done:
1888
+ ret = ssl_hs_ok;
1889
+ break;
1890
+ }
1891
+
1892
+ if (hs->state != state) {
1893
+ ssl_do_info_callback(hs->ssl, SSL_CB_CONNECT_LOOP, 1);
1894
+ }
1895
+
1896
+ if (ret != ssl_hs_ok) {
1897
+ return ret;
1898
+ }
1899
+ }
1900
+
1901
+ ssl_do_info_callback(hs->ssl, SSL_CB_HANDSHAKE_DONE, 1);
1902
+ return ssl_hs_ok;
1903
+ }
1904
+
1905
+ const char *ssl_client_handshake_state(SSL_HANDSHAKE *hs) {
1906
+ enum ssl_client_hs_state_t state =
1907
+ static_cast<enum ssl_client_hs_state_t>(hs->state);
1908
+ switch (state) {
1909
+ case state_start_connect:
1910
+ return "TLS client start_connect";
1911
+ case state_enter_early_data:
1912
+ return "TLS client enter_early_data";
1913
+ case state_early_reverify_server_certificate:
1914
+ return "TLS client early_reverify_server_certificate";
1915
+ case state_read_server_hello:
1916
+ return "TLS client read_server_hello";
1917
+ case state_tls13:
1918
+ return tls13_client_handshake_state(hs);
1919
+ case state_read_server_certificate:
1920
+ return "TLS client read_server_certificate";
1921
+ case state_read_certificate_status:
1922
+ return "TLS client read_certificate_status";
1923
+ case state_verify_server_certificate:
1924
+ return "TLS client verify_server_certificate";
1925
+ case state_reverify_server_certificate:
1926
+ return "TLS client reverify_server_certificate";
1927
+ case state_read_server_key_exchange:
1928
+ return "TLS client read_server_key_exchange";
1929
+ case state_read_certificate_request:
1930
+ return "TLS client read_certificate_request";
1931
+ case state_read_server_hello_done:
1932
+ return "TLS client read_server_hello_done";
1933
+ case state_send_client_certificate:
1934
+ return "TLS client send_client_certificate";
1935
+ case state_send_client_key_exchange:
1936
+ return "TLS client send_client_key_exchange";
1937
+ case state_send_client_certificate_verify:
1938
+ return "TLS client send_client_certificate_verify";
1939
+ case state_send_client_finished:
1940
+ return "TLS client send_client_finished";
1941
+ case state_finish_flight:
1942
+ return "TLS client finish_flight";
1943
+ case state_read_session_ticket:
1944
+ return "TLS client read_session_ticket";
1945
+ case state_process_change_cipher_spec:
1946
+ return "TLS client process_change_cipher_spec";
1947
+ case state_read_server_finished:
1948
+ return "TLS client read_server_finished";
1949
+ case state_finish_client_handshake:
1950
+ return "TLS client finish_client_handshake";
1951
+ case state_done:
1952
+ return "TLS client done";
1953
+ }
1954
+
1955
+ return "TLS client unknown";
1956
+ }
1957
+
1958
+ BSSL_NAMESPACE_END