visaljs 0.0.2 → 0.0.3

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 (1007) hide show
  1. package/cli.js +393 -62
  2. package/node/include/js_node.h +28 -5
  3. package/node/include/js_uv.h +36 -0
  4. package/node/prelude/crypto.js +7 -10
  5. package/node/prelude/dns.js +99 -0
  6. package/node/prelude/dns_promises.js +10 -0
  7. package/node/prelude/http.js +1039 -195
  8. package/node/prelude/internal/crypto/asym.js +39 -12
  9. package/node/prelude/internal/crypto/dh_groups.js +12 -0
  10. package/node/prelude/internal/crypto/diffiehellman.js +354 -0
  11. package/node/prelude/internal/crypto/hash.js +1 -1
  12. package/node/prelude/internal/crypto/key_type.js +3 -0
  13. package/node/prelude/internal/crypto/keys.js +39 -9
  14. package/node/prelude/internal/http_agent.js +249 -0
  15. package/node/prelude/internal/net.js +33 -0
  16. package/node/prelude/internal/socketaddress.js +249 -0
  17. package/node/prelude/internal/tls/common.js +306 -0
  18. package/node/prelude/internal/tls/wrap.js +1217 -0
  19. package/node/prelude/internal/tls/x509.js +394 -0
  20. package/node/prelude/net.js +1083 -50
  21. package/node/prelude/stream.js +6 -0
  22. package/node/prelude/tls.js +141 -0
  23. package/node/prelude/util.js +5 -2
  24. package/node/prelude/util_types.js +85 -0
  25. package/node/src/host_http.c +268 -270
  26. package/node/src/host_loop.c +84 -0
  27. package/node/src/host_net.c +495 -0
  28. package/node/src/host_sys.c +16 -0
  29. package/package.json +1 -1
  30. package/runtime/include/js_builtins.h +16 -0
  31. package/runtime/include/js_console.h +2 -0
  32. package/runtime/include/js_core.def +23 -0
  33. package/runtime/include/js_crypto.h +23 -0
  34. package/runtime/include/js_generator.h +2 -3
  35. package/runtime/include/js_promise.h +0 -2
  36. package/runtime/src/async_iter.c +4 -1
  37. package/runtime/src/boringssl_support.cc +34 -0
  38. package/runtime/src/builtin_table.c +8 -0
  39. package/runtime/src/components.c +10 -0
  40. package/runtime/src/console.c +6 -18
  41. package/runtime/src/core_all.c +1 -0
  42. package/runtime/src/crypto_asym.c +450 -241
  43. package/runtime/src/crypto_bn.c +91 -0
  44. package/runtime/src/crypto_cipher.c +153 -75
  45. package/runtime/src/crypto_hash.c +68 -53
  46. package/runtime/src/crypto_internal.h +55 -26
  47. package/runtime/src/crypto_pkey.c +198 -61
  48. package/runtime/src/crypto_subtle.c +42 -16
  49. package/runtime/src/crypto_tls.c +678 -0
  50. package/runtime/src/generator.c +8 -1
  51. package/runtime/src/global.c +2 -4
  52. package/runtime/src/internal.h +0 -1
  53. package/runtime/src/jobs.c +2 -1
  54. package/runtime/src/promise.c +4 -1
  55. package/runtime/src/tls_roots.gen.h +3215 -0
  56. package/runtime/src/util_types.c +52 -0
  57. package/runtime/src/weak.c +2 -1
  58. package/runtime/third_party/boringssl/LICENSE +238 -0
  59. package/runtime/third_party/boringssl/README.md +46 -0
  60. package/runtime/third_party/boringssl/VERSION +1 -0
  61. package/runtime/third_party/boringssl/crypto/aes/aes.cc +44 -0
  62. package/runtime/third_party/boringssl/crypto/armv8_feature_parsing.h +67 -0
  63. package/runtime/third_party/boringssl/crypto/asn1/a_bitstr.cc +297 -0
  64. package/runtime/third_party/boringssl/crypto/asn1/a_bool.cc +50 -0
  65. package/runtime/third_party/boringssl/crypto/asn1/a_d2i_fp.cc +47 -0
  66. package/runtime/third_party/boringssl/crypto/asn1/a_dup.cc +42 -0
  67. package/runtime/third_party/boringssl/crypto/asn1/a_gentm.cc +130 -0
  68. package/runtime/third_party/boringssl/crypto/asn1/a_i2d_fp.cc +44 -0
  69. package/runtime/third_party/boringssl/crypto/asn1/a_int.cc +467 -0
  70. package/runtime/third_party/boringssl/crypto/asn1/a_mbstr.cc +242 -0
  71. package/runtime/third_party/boringssl/crypto/asn1/a_object.cc +191 -0
  72. package/runtime/third_party/boringssl/crypto/asn1/a_octet.cc +32 -0
  73. package/runtime/third_party/boringssl/crypto/asn1/a_strex.cc +411 -0
  74. package/runtime/third_party/boringssl/crypto/asn1/a_strnid.cc +208 -0
  75. package/runtime/third_party/boringssl/crypto/asn1/a_time.cc +248 -0
  76. package/runtime/third_party/boringssl/crypto/asn1/a_type.cc +467 -0
  77. package/runtime/third_party/boringssl/crypto/asn1/a_utctm.cc +128 -0
  78. package/runtime/third_party/boringssl/crypto/asn1/asn1_lib.cc +453 -0
  79. package/runtime/third_party/boringssl/crypto/asn1/asn1_par.cc +61 -0
  80. package/runtime/third_party/boringssl/crypto/asn1/asn_pack.cc +56 -0
  81. package/runtime/third_party/boringssl/crypto/asn1/f_int.cc +63 -0
  82. package/runtime/third_party/boringssl/crypto/asn1/f_string.cc +52 -0
  83. package/runtime/third_party/boringssl/crypto/asn1/internal.h +430 -0
  84. package/runtime/third_party/boringssl/crypto/asn1/posix_time.cc +244 -0
  85. package/runtime/third_party/boringssl/crypto/asn1/tasn_dec.cc +611 -0
  86. package/runtime/third_party/boringssl/crypto/asn1/tasn_enc.cc +348 -0
  87. package/runtime/third_party/boringssl/crypto/asn1/tasn_fre.cc +163 -0
  88. package/runtime/third_party/boringssl/crypto/asn1/tasn_new.cc +274 -0
  89. package/runtime/third_party/boringssl/crypto/asn1/tasn_typ.cc +92 -0
  90. package/runtime/third_party/boringssl/crypto/asn1/tasn_utl.cc +218 -0
  91. package/runtime/third_party/boringssl/crypto/base64/base64.cc +433 -0
  92. package/runtime/third_party/boringssl/crypto/bcm_support.h +62 -0
  93. package/runtime/third_party/boringssl/crypto/bio/bio.cc +715 -0
  94. package/runtime/third_party/boringssl/crypto/bio/bio_mem.cc +260 -0
  95. package/runtime/third_party/boringssl/crypto/bio/connect.cc +463 -0
  96. package/runtime/third_party/boringssl/crypto/bio/errno.cc +52 -0
  97. package/runtime/third_party/boringssl/crypto/bio/fd.cc +193 -0
  98. package/runtime/third_party/boringssl/crypto/bio/file.cc +283 -0
  99. package/runtime/third_party/boringssl/crypto/bio/hexdump.cc +154 -0
  100. package/runtime/third_party/boringssl/crypto/bio/internal.h +128 -0
  101. package/runtime/third_party/boringssl/crypto/bio/pair.cc +426 -0
  102. package/runtime/third_party/boringssl/crypto/bio/printf.cc +59 -0
  103. package/runtime/third_party/boringssl/crypto/bio/socket.cc +210 -0
  104. package/runtime/third_party/boringssl/crypto/bio/socket_helper.cc +179 -0
  105. package/runtime/third_party/boringssl/crypto/blake2/blake2.cc +173 -0
  106. package/runtime/third_party/boringssl/crypto/bn/bn_asn1.cc +57 -0
  107. package/runtime/third_party/boringssl/crypto/bn/convert.cc +409 -0
  108. package/runtime/third_party/boringssl/crypto/bn/div.cc +102 -0
  109. package/runtime/third_party/boringssl/crypto/bn/exponentiation.cc +168 -0
  110. package/runtime/third_party/boringssl/crypto/bn/sqrt.cc +93 -0
  111. package/runtime/third_party/boringssl/crypto/buf/buf.cc +119 -0
  112. package/runtime/third_party/boringssl/crypto/bytestring/asn1_compat.cc +54 -0
  113. package/runtime/third_party/boringssl/crypto/bytestring/ber.cc +268 -0
  114. package/runtime/third_party/boringssl/crypto/bytestring/cbb.cc +787 -0
  115. package/runtime/third_party/boringssl/crypto/bytestring/cbs.cc +977 -0
  116. package/runtime/third_party/boringssl/crypto/bytestring/internal.h +134 -0
  117. package/runtime/third_party/boringssl/crypto/bytestring/unicode.cc +156 -0
  118. package/runtime/third_party/boringssl/crypto/chacha/chacha.cc +226 -0
  119. package/runtime/third_party/boringssl/crypto/chacha/internal.h +103 -0
  120. package/runtime/third_party/boringssl/crypto/cipher/derive_key.cc +106 -0
  121. package/runtime/third_party/boringssl/crypto/cipher/e_aesctrhmac.cc +294 -0
  122. package/runtime/third_party/boringssl/crypto/cipher/e_aeseax.cc +351 -0
  123. package/runtime/third_party/boringssl/crypto/cipher/e_aesgcmsiv.cc +918 -0
  124. package/runtime/third_party/boringssl/crypto/cipher/e_chacha20poly1305.cc +404 -0
  125. package/runtime/third_party/boringssl/crypto/cipher/e_des.cc +214 -0
  126. package/runtime/third_party/boringssl/crypto/cipher/e_null.cc +55 -0
  127. package/runtime/third_party/boringssl/crypto/cipher/e_rc2.cc +432 -0
  128. package/runtime/third_party/boringssl/crypto/cipher/e_rc4.cc +56 -0
  129. package/runtime/third_party/boringssl/crypto/cipher/e_tls.cc +615 -0
  130. package/runtime/third_party/boringssl/crypto/cipher/get_cipher.cc +85 -0
  131. package/runtime/third_party/boringssl/crypto/cipher/internal.h +399 -0
  132. package/runtime/third_party/boringssl/crypto/cipher/tls_cbc.cc +476 -0
  133. package/runtime/third_party/boringssl/crypto/cms/cms.cc +178 -0
  134. package/runtime/third_party/boringssl/crypto/conf/conf.cc +637 -0
  135. package/runtime/third_party/boringssl/crypto/conf/internal.h +54 -0
  136. package/runtime/third_party/boringssl/crypto/cpu_aarch64_apple.cc +76 -0
  137. package/runtime/third_party/boringssl/crypto/cpu_aarch64_fuchsia.cc +58 -0
  138. package/runtime/third_party/boringssl/crypto/cpu_aarch64_linux.cc +66 -0
  139. package/runtime/third_party/boringssl/crypto/cpu_aarch64_openbsd.cc +45 -0
  140. package/runtime/third_party/boringssl/crypto/cpu_aarch64_sysreg.cc +66 -0
  141. package/runtime/third_party/boringssl/crypto/cpu_aarch64_win.cc +52 -0
  142. package/runtime/third_party/boringssl/crypto/cpu_arm_freebsd.cc +55 -0
  143. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.cc +173 -0
  144. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.h +141 -0
  145. package/runtime/third_party/boringssl/crypto/cpu_intel.cc +287 -0
  146. package/runtime/third_party/boringssl/crypto/crypto.cc +152 -0
  147. package/runtime/third_party/boringssl/crypto/curve25519/asm/x25519-asm-arm.S +2124 -0
  148. package/runtime/third_party/boringssl/crypto/curve25519/cpace.cc +227 -0
  149. package/runtime/third_party/boringssl/crypto/curve25519/curve25519.cc +2436 -0
  150. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_64_adx.cc +18 -0
  151. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_tables.h +3264 -0
  152. package/runtime/third_party/boringssl/crypto/curve25519/internal.h +202 -0
  153. package/runtime/third_party/boringssl/crypto/curve25519/spake25519.cc +532 -0
  154. package/runtime/third_party/boringssl/crypto/des/des.cc +837 -0
  155. package/runtime/third_party/boringssl/crypto/des/internal.h +144 -0
  156. package/runtime/third_party/boringssl/crypto/dh/dh_asn1.cc +109 -0
  157. package/runtime/third_party/boringssl/crypto/dh/params.cc +411 -0
  158. package/runtime/third_party/boringssl/crypto/digest/digest_extra.cc +361 -0
  159. package/runtime/third_party/boringssl/crypto/dsa/dsa.cc +922 -0
  160. package/runtime/third_party/boringssl/crypto/dsa/dsa_asn1.cc +306 -0
  161. package/runtime/third_party/boringssl/crypto/dsa/internal.h +56 -0
  162. package/runtime/third_party/boringssl/crypto/ec/ec_asn1.cc +542 -0
  163. package/runtime/third_party/boringssl/crypto/ec/ec_derive.cc +94 -0
  164. package/runtime/third_party/boringssl/crypto/ec/hash_to_curve.cc +773 -0
  165. package/runtime/third_party/boringssl/crypto/ec/internal.h +114 -0
  166. package/runtime/third_party/boringssl/crypto/ecdh/ecdh.cc +75 -0
  167. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.cc +337 -0
  168. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  169. package/runtime/third_party/boringssl/crypto/engine/engine.cc +95 -0
  170. package/runtime/third_party/boringssl/crypto/err/err.cc +820 -0
  171. package/runtime/third_party/boringssl/crypto/err/internal.h +45 -0
  172. package/runtime/third_party/boringssl/crypto/evp/evp.cc +454 -0
  173. package/runtime/third_party/boringssl/crypto/evp/evp_asn1.cc +439 -0
  174. package/runtime/third_party/boringssl/crypto/evp/evp_ctx.cc +541 -0
  175. package/runtime/third_party/boringssl/crypto/evp/evp_kem.cc +101 -0
  176. package/runtime/third_party/boringssl/crypto/evp/internal.h +427 -0
  177. package/runtime/third_party/boringssl/crypto/evp/p_dh.cc +326 -0
  178. package/runtime/third_party/boringssl/crypto/evp/p_dsa.cc +333 -0
  179. package/runtime/third_party/boringssl/crypto/evp/p_ec.cc +736 -0
  180. package/runtime/third_party/boringssl/crypto/evp/p_ed25519.cc +359 -0
  181. package/runtime/third_party/boringssl/crypto/evp/p_hkdf.cc +204 -0
  182. package/runtime/third_party/boringssl/crypto/evp/p_mldsa.cc +549 -0
  183. package/runtime/third_party/boringssl/crypto/evp/p_mlkem.cc +510 -0
  184. package/runtime/third_party/boringssl/crypto/evp/p_rsa.cc +1185 -0
  185. package/runtime/third_party/boringssl/crypto/evp/p_x25519.cc +371 -0
  186. package/runtime/third_party/boringssl/crypto/evp/p_xwing.cc +300 -0
  187. package/runtime/third_party/boringssl/crypto/evp/pbkdf.cc +105 -0
  188. package/runtime/third_party/boringssl/crypto/evp/print.cc +287 -0
  189. package/runtime/third_party/boringssl/crypto/evp/scrypt.cc +218 -0
  190. package/runtime/third_party/boringssl/crypto/evp/sign.cc +95 -0
  191. package/runtime/third_party/boringssl/crypto/ex_data.cc +140 -0
  192. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes.cc.inc +208 -0
  193. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes_nohw.cc.inc +1279 -0
  194. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cbc.cc.inc +132 -0
  195. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cfb.cc.inc +168 -0
  196. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ctr.cc.inc +102 -0
  197. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm.cc.inc +614 -0
  198. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm_nohw.cc.inc +304 -0
  199. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/internal.h +590 -0
  200. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.cc.inc +211 -0
  201. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.cc.inc +97 -0
  202. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ofb.cc.inc +55 -0
  203. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm.cc +288 -0
  204. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm_interface.h +953 -0
  205. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/add.cc.inc +276 -0
  206. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +573 -0
  207. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bn.cc.inc +377 -0
  208. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bytes.cc.inc +230 -0
  209. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/cmp.cc.inc +161 -0
  210. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/ctx.cc.inc +127 -0
  211. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div.cc.inc +738 -0
  212. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div_extra.cc.inc +90 -0
  213. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.cc.inc +743 -0
  214. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd.cc.inc +281 -0
  215. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.cc.inc +327 -0
  216. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/generic.cc.inc +579 -0
  217. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/internal.h +810 -0
  218. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/jacobi.cc.inc +101 -0
  219. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery.cc.inc +408 -0
  220. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.cc.inc +179 -0
  221. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/mul.cc.inc +347 -0
  222. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/prime.cc.inc +931 -0
  223. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/random.cc.inc +261 -0
  224. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.cc.inc +144 -0
  225. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +109 -0
  226. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/shift.cc.inc +317 -0
  227. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/sqrt.cc.inc +370 -0
  228. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/aead.cc.inc +619 -0
  229. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/cipher.cc.inc +837 -0
  230. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.cc.inc +1240 -0
  231. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aesccm.cc.inc +440 -0
  232. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +461 -0
  233. package/runtime/third_party/boringssl/crypto/fipsmodule/cmac/cmac.cc.inc +293 -0
  234. package/runtime/third_party/boringssl/crypto/fipsmodule/delocate.h +95 -0
  235. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/check.cc.inc +198 -0
  236. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/dh.cc.inc +401 -0
  237. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/internal.h +63 -0
  238. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digest.cc.inc +221 -0
  239. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digests.cc.inc +184 -0
  240. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/internal.h +72 -0
  241. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +166 -0
  242. package/runtime/third_party/boringssl/crypto/fipsmodule/digestsign/digestsign.cc.inc +230 -0
  243. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  244. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec.cc.inc +1024 -0
  245. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_key.cc.inc +536 -0
  246. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.cc.inc +379 -0
  247. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/felem.cc.inc +250 -0
  248. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/internal.h +752 -0
  249. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/oct.cc.inc +174 -0
  250. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz-table.h +9502 -0
  251. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.cc.inc +740 -0
  252. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.h +207 -0
  253. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256.cc.inc +578 -0
  254. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256_table.h +297 -0
  255. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/scalar.cc.inc +184 -0
  256. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple.cc.inc +246 -0
  257. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.cc.inc +274 -0
  258. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/util.cc.inc +258 -0
  259. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/wnaf.cc.inc +224 -0
  260. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.cc.inc +91 -0
  261. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +288 -0
  262. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/internal.h +57 -0
  263. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/internal.h +38 -0
  264. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/jitter.cc.inc +487 -0
  265. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  266. package/runtime/third_party/boringssl/crypto/fipsmodule/fips_shared_support.cc +28 -0
  267. package/runtime/third_party/boringssl/crypto/fipsmodule/hkdf/hkdf.cc.inc +114 -0
  268. package/runtime/third_party/boringssl/crypto/fipsmodule/hmac/hmac.cc.inc +218 -0
  269. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/internal.h +165 -0
  270. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/keccak.cc.inc +647 -0
  271. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  272. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/mldsa.cc.inc +3323 -0
  273. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  274. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/mlkem.cc.inc +1856 -0
  275. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  276. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.cc.inc +401 -0
  277. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/internal.h +99 -0
  278. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/rand.cc.inc +486 -0
  279. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +167 -0
  280. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/padding.cc.inc +371 -0
  281. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa.cc.inc +996 -0
  282. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.cc.inc +1000 -0
  283. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/fips.cc.inc +129 -0
  284. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/self_check.cc.inc +1093 -0
  285. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/internal.h +112 -0
  286. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +330 -0
  287. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/internal.h +205 -0
  288. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha1.cc.inc +404 -0
  289. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha256.cc.inc +315 -0
  290. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha512.cc.inc +473 -0
  291. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/address.h +144 -0
  292. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  293. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.cc.inc +179 -0
  294. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.h +48 -0
  295. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.cc.inc +164 -0
  296. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.h +58 -0
  297. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/params.h +178 -0
  298. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +690 -0
  299. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.cc.inc +326 -0
  300. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.h +71 -0
  301. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.cc.inc +172 -0
  302. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.h +40 -0
  303. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/internal.h +33 -0
  304. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/kdf.cc.inc +180 -0
  305. package/runtime/third_party/boringssl/crypto/fuzzer_mode.cc +30 -0
  306. package/runtime/third_party/boringssl/crypto/hpke/hpke.cc +1514 -0
  307. package/runtime/third_party/boringssl/crypto/hrss/asm/poly_rq_mul.S +8489 -0
  308. package/runtime/third_party/boringssl/crypto/hrss/hrss.cc +2189 -0
  309. package/runtime/third_party/boringssl/crypto/hrss/internal.h +64 -0
  310. package/runtime/third_party/boringssl/crypto/internal.h +1767 -0
  311. package/runtime/third_party/boringssl/crypto/lhash/internal.h +222 -0
  312. package/runtime/third_party/boringssl/crypto/lhash/lhash.cc +312 -0
  313. package/runtime/third_party/boringssl/crypto/md4/md4.cc +207 -0
  314. package/runtime/third_party/boringssl/crypto/md5/internal.h +34 -0
  315. package/runtime/third_party/boringssl/crypto/md5/md5.cc +255 -0
  316. package/runtime/third_party/boringssl/crypto/mem.cc +577 -0
  317. package/runtime/third_party/boringssl/crypto/mem_internal.h +706 -0
  318. package/runtime/third_party/boringssl/crypto/mldsa/mldsa.cc +296 -0
  319. package/runtime/third_party/boringssl/crypto/mlkem/mlkem.cc +108 -0
  320. package/runtime/third_party/boringssl/crypto/obj/obj.cc +494 -0
  321. package/runtime/third_party/boringssl/crypto/obj/obj_dat.h +11722 -0
  322. package/runtime/third_party/boringssl/crypto/obj/obj_xref.cc +83 -0
  323. package/runtime/third_party/boringssl/crypto/params_internal.h +30 -0
  324. package/runtime/third_party/boringssl/crypto/pem/internal.h +135 -0
  325. package/runtime/third_party/boringssl/crypto/pem/pem_all.cc +153 -0
  326. package/runtime/third_party/boringssl/crypto/pem/pem_info.cc +250 -0
  327. package/runtime/third_party/boringssl/crypto/pem/pem_lib.cc +707 -0
  328. package/runtime/third_party/boringssl/crypto/pem/pem_oth.cc +45 -0
  329. package/runtime/third_party/boringssl/crypto/pem/pem_pk8.cc +211 -0
  330. package/runtime/third_party/boringssl/crypto/pem/pem_pkey.cc +147 -0
  331. package/runtime/third_party/boringssl/crypto/pem/pem_x509.cc +25 -0
  332. package/runtime/third_party/boringssl/crypto/pem/pem_xaux.cc +25 -0
  333. package/runtime/third_party/boringssl/crypto/pkcs7/internal.h +67 -0
  334. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7.cc +198 -0
  335. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7_x509.cc +527 -0
  336. package/runtime/third_party/boringssl/crypto/pkcs8/internal.h +98 -0
  337. package/runtime/third_party/boringssl/crypto/pkcs8/p5_pbev2.cc +286 -0
  338. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8.cc +473 -0
  339. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8_x509.cc +1328 -0
  340. package/runtime/third_party/boringssl/crypto/poly1305/internal.h +54 -0
  341. package/runtime/third_party/boringssl/crypto/poly1305/poly1305.cc +315 -0
  342. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm.cc +294 -0
  343. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm_asm.S +2017 -0
  344. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_vec.cc +853 -0
  345. package/runtime/third_party/boringssl/crypto/pool/internal.h +95 -0
  346. package/runtime/third_party/boringssl/crypto/pool/pool.cc +282 -0
  347. package/runtime/third_party/boringssl/crypto/rand/deterministic.cc +58 -0
  348. package/runtime/third_party/boringssl/crypto/rand/fork_detect.cc +222 -0
  349. package/runtime/third_party/boringssl/crypto/rand/forkunsafe.cc +44 -0
  350. package/runtime/third_party/boringssl/crypto/rand/getentropy.cc +53 -0
  351. package/runtime/third_party/boringssl/crypto/rand/internal.h +67 -0
  352. package/runtime/third_party/boringssl/crypto/rand/ios.cc +35 -0
  353. package/runtime/third_party/boringssl/crypto/rand/rand.cc +79 -0
  354. package/runtime/third_party/boringssl/crypto/rand/trusty.cc +39 -0
  355. package/runtime/third_party/boringssl/crypto/rand/urandom.cc +149 -0
  356. package/runtime/third_party/boringssl/crypto/rand/windows.cc +91 -0
  357. package/runtime/third_party/boringssl/crypto/rc4/rc4.cc +56 -0
  358. package/runtime/third_party/boringssl/crypto/refcount.cc +49 -0
  359. package/runtime/third_party/boringssl/crypto/rsa/internal.h +51 -0
  360. package/runtime/third_party/boringssl/crypto/rsa/rsa_asn1.cc +404 -0
  361. package/runtime/third_party/boringssl/crypto/rsa/rsa_crypt.cc +530 -0
  362. package/runtime/third_party/boringssl/crypto/rsa/rsa_extra.cc +30 -0
  363. package/runtime/third_party/boringssl/crypto/rsa/rsa_print.cc +25 -0
  364. package/runtime/third_party/boringssl/crypto/sha/sha1.cc +55 -0
  365. package/runtime/third_party/boringssl/crypto/sha/sha256.cc +89 -0
  366. package/runtime/third_party/boringssl/crypto/sha/sha512.cc +106 -0
  367. package/runtime/third_party/boringssl/crypto/siphash/siphash.cc +81 -0
  368. package/runtime/third_party/boringssl/crypto/slhdsa/slhdsa.cc +167 -0
  369. package/runtime/third_party/boringssl/crypto/spake2plus/internal.h +204 -0
  370. package/runtime/third_party/boringssl/crypto/spake2plus/spake2plus.cc +501 -0
  371. package/runtime/third_party/boringssl/crypto/stack/stack.cc +462 -0
  372. package/runtime/third_party/boringssl/crypto/thread.cc +68 -0
  373. package/runtime/third_party/boringssl/crypto/thread_none.cc +48 -0
  374. package/runtime/third_party/boringssl/crypto/thread_pthread.cc +138 -0
  375. package/runtime/third_party/boringssl/crypto/thread_win.cc +227 -0
  376. package/runtime/third_party/boringssl/crypto/trust_token/internal.h +405 -0
  377. package/runtime/third_party/boringssl/crypto/trust_token/pmbtoken.cc +1672 -0
  378. package/runtime/third_party/boringssl/crypto/trust_token/trust_token.cc +701 -0
  379. package/runtime/third_party/boringssl/crypto/trust_token/voprf.cc +1266 -0
  380. package/runtime/third_party/boringssl/crypto/x509/a_digest.cc +52 -0
  381. package/runtime/third_party/boringssl/crypto/x509/a_sign.cc +100 -0
  382. package/runtime/third_party/boringssl/crypto/x509/a_verify.cc +77 -0
  383. package/runtime/third_party/boringssl/crypto/x509/algorithm.cc +167 -0
  384. package/runtime/third_party/boringssl/crypto/x509/asn1_gen.cc +540 -0
  385. package/runtime/third_party/boringssl/crypto/x509/by_dir.cc +301 -0
  386. package/runtime/third_party/boringssl/crypto/x509/by_file.cc +226 -0
  387. package/runtime/third_party/boringssl/crypto/x509/i2d_pr.cc +37 -0
  388. package/runtime/third_party/boringssl/crypto/x509/internal.h +697 -0
  389. package/runtime/third_party/boringssl/crypto/x509/name_print.cc +187 -0
  390. package/runtime/third_party/boringssl/crypto/x509/policy.cc +686 -0
  391. package/runtime/third_party/boringssl/crypto/x509/rsa_pss.cc +187 -0
  392. package/runtime/third_party/boringssl/crypto/x509/t_crl.cc +106 -0
  393. package/runtime/third_party/boringssl/crypto/x509/t_req.cc +206 -0
  394. package/runtime/third_party/boringssl/crypto/x509/t_x509.cc +292 -0
  395. package/runtime/third_party/boringssl/crypto/x509/t_x509a.cc +81 -0
  396. package/runtime/third_party/boringssl/crypto/x509/v3_akey.cc +174 -0
  397. package/runtime/third_party/boringssl/crypto/x509/v3_akeya.cc +31 -0
  398. package/runtime/third_party/boringssl/crypto/x509/v3_alt.cc +636 -0
  399. package/runtime/third_party/boringssl/crypto/x509/v3_bcons.cc +96 -0
  400. package/runtime/third_party/boringssl/crypto/x509/v3_bitst.cc +100 -0
  401. package/runtime/third_party/boringssl/crypto/x509/v3_conf.cc +369 -0
  402. package/runtime/third_party/boringssl/crypto/x509/v3_cpols.cc +417 -0
  403. package/runtime/third_party/boringssl/crypto/x509/v3_crld.cc +471 -0
  404. package/runtime/third_party/boringssl/crypto/x509/v3_enum.cc +74 -0
  405. package/runtime/third_party/boringssl/crypto/x509/v3_extku.cc +97 -0
  406. package/runtime/third_party/boringssl/crypto/x509/v3_genn.cc +238 -0
  407. package/runtime/third_party/boringssl/crypto/x509/v3_ia5.cc +83 -0
  408. package/runtime/third_party/boringssl/crypto/x509/v3_info.cc +162 -0
  409. package/runtime/third_party/boringssl/crypto/x509/v3_int.cc +83 -0
  410. package/runtime/third_party/boringssl/crypto/x509/v3_lib.cc +349 -0
  411. package/runtime/third_party/boringssl/crypto/x509/v3_ncons.cc +798 -0
  412. package/runtime/third_party/boringssl/crypto/x509/v3_ocsp.cc +92 -0
  413. package/runtime/third_party/boringssl/crypto/x509/v3_pcons.cc +102 -0
  414. package/runtime/third_party/boringssl/crypto/x509/v3_pmaps.cc +110 -0
  415. package/runtime/third_party/boringssl/crypto/x509/v3_prn.cc +183 -0
  416. package/runtime/third_party/boringssl/crypto/x509/v3_purp.cc +580 -0
  417. package/runtime/third_party/boringssl/crypto/x509/v3_skey.cc +128 -0
  418. package/runtime/third_party/boringssl/crypto/x509/v3_utl.cc +1311 -0
  419. package/runtime/third_party/boringssl/crypto/x509/x509.cc +47 -0
  420. package/runtime/third_party/boringssl/crypto/x509/x509_att.cc +188 -0
  421. package/runtime/third_party/boringssl/crypto/x509/x509_cmp.cc +243 -0
  422. package/runtime/third_party/boringssl/crypto/x509/x509_d2.cc +66 -0
  423. package/runtime/third_party/boringssl/crypto/x509/x509_def.cc +42 -0
  424. package/runtime/third_party/boringssl/crypto/x509/x509_ext.cc +161 -0
  425. package/runtime/third_party/boringssl/crypto/x509/x509_lu.cc +570 -0
  426. package/runtime/third_party/boringssl/crypto/x509/x509_mtc.cc +598 -0
  427. package/runtime/third_party/boringssl/crypto/x509/x509_obj.cc +169 -0
  428. package/runtime/third_party/boringssl/crypto/x509/x509_req.cc +248 -0
  429. package/runtime/third_party/boringssl/crypto/x509/x509_set.cc +166 -0
  430. package/runtime/third_party/boringssl/crypto/x509/x509_trs.cc +123 -0
  431. package/runtime/third_party/boringssl/crypto/x509/x509_txt.cc +147 -0
  432. package/runtime/third_party/boringssl/crypto/x509/x509_v3.cc +249 -0
  433. package/runtime/third_party/boringssl/crypto/x509/x509_vfy.cc +1531 -0
  434. package/runtime/third_party/boringssl/crypto/x509/x509_vpm.cc +449 -0
  435. package/runtime/third_party/boringssl/crypto/x509/x509cset.cc +222 -0
  436. package/runtime/third_party/boringssl/crypto/x509/x509name.cc +377 -0
  437. package/runtime/third_party/boringssl/crypto/x509/x509rset.cc +55 -0
  438. package/runtime/third_party/boringssl/crypto/x509/x509spki.cc +91 -0
  439. package/runtime/third_party/boringssl/crypto/x509/x_algor.cc +223 -0
  440. package/runtime/third_party/boringssl/crypto/x509/x_all.cc +352 -0
  441. package/runtime/third_party/boringssl/crypto/x509/x_attrib.cc +61 -0
  442. package/runtime/third_party/boringssl/crypto/x509/x_crl.cc +325 -0
  443. package/runtime/third_party/boringssl/crypto/x509/x_exten.cc +42 -0
  444. package/runtime/third_party/boringssl/crypto/x509/x_name.cc +407 -0
  445. package/runtime/third_party/boringssl/crypto/x509/x_pubkey.cc +199 -0
  446. package/runtime/third_party/boringssl/crypto/x509/x_req.cc +80 -0
  447. package/runtime/third_party/boringssl/crypto/x509/x_sig.cc +51 -0
  448. package/runtime/third_party/boringssl/crypto/x509/x_spki.cc +44 -0
  449. package/runtime/third_party/boringssl/crypto/x509/x_x509.cc +495 -0
  450. package/runtime/third_party/boringssl/crypto/x509/x_x509a.cc +169 -0
  451. package/runtime/third_party/boringssl/crypto/xwing/xwing.cc +257 -0
  452. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-apple.S +1326 -0
  453. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-linux.S +1327 -0
  454. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-apple.S +1252 -0
  455. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-linux.S +1253 -0
  456. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-apple.S +873 -0
  457. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-linux.S +885 -0
  458. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-apple.S +2490 -0
  459. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-linux.S +2530 -0
  460. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-apple.S +2413 -0
  461. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-linux.S +2397 -0
  462. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv7-linux.S +784 -0
  463. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-apple.S +792 -0
  464. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-linux.S +786 -0
  465. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-win.S +798 -0
  466. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-apple.S +2912 -0
  467. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-linux.S +2907 -0
  468. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-win.S +2915 -0
  469. package/runtime/third_party/boringssl/gen/bcm/armv4-mont-linux.S +932 -0
  470. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-apple.S +1440 -0
  471. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-linux.S +1440 -0
  472. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-win.S +1446 -0
  473. package/runtime/third_party/boringssl/gen/bcm/bn-586-apple.S +530 -0
  474. package/runtime/third_party/boringssl/gen/bcm/bn-586-linux.S +540 -0
  475. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-apple.S +88 -0
  476. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-linux.S +87 -0
  477. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-win.S +87 -0
  478. package/runtime/third_party/boringssl/gen/bcm/bsaes-armv7-linux.S +1520 -0
  479. package/runtime/third_party/boringssl/gen/bcm/co-586-apple.S +1256 -0
  480. package/runtime/third_party/boringssl/gen/bcm/co-586-linux.S +1264 -0
  481. package/runtime/third_party/boringssl/gen/bcm/ghash-armv4-linux.S +242 -0
  482. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-apple.S +337 -0
  483. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-linux.S +335 -0
  484. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-win.S +341 -0
  485. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-apple.S +288 -0
  486. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-linux.S +292 -0
  487. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-apple.S +426 -0
  488. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-linux.S +425 -0
  489. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-apple.S +322 -0
  490. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-linux.S +328 -0
  491. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-apple.S +1134 -0
  492. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-linux.S +1129 -0
  493. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv7-linux.S +244 -0
  494. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-apple.S +567 -0
  495. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-linux.S +563 -0
  496. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-win.S +571 -0
  497. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-apple.S +1744 -0
  498. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-linux.S +1725 -0
  499. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-win.S +1765 -0
  500. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-apple.S +4544 -0
  501. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-linux.S +4600 -0
  502. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-apple.S +310 -0
  503. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-linux.S +310 -0
  504. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-win.S +310 -0
  505. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-apple.S +321 -0
  506. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-linux.S +335 -0
  507. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-apple.S +58 -0
  508. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-linux.S +57 -0
  509. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-apple.S +1756 -0
  510. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-linux.S +1751 -0
  511. package/runtime/third_party/boringssl/gen/bcm/sha1-586-apple.S +3782 -0
  512. package/runtime/third_party/boringssl/gen/bcm/sha1-586-linux.S +3788 -0
  513. package/runtime/third_party/boringssl/gen/bcm/sha1-armv4-large-linux.S +1479 -0
  514. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-apple.S +1219 -0
  515. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-linux.S +1218 -0
  516. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-win.S +1222 -0
  517. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-apple.S +5454 -0
  518. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-linux.S +5450 -0
  519. package/runtime/third_party/boringssl/gen/bcm/sha256-586-apple.S +5593 -0
  520. package/runtime/third_party/boringssl/gen/bcm/sha256-586-linux.S +5599 -0
  521. package/runtime/third_party/boringssl/gen/bcm/sha256-armv4-linux.S +2840 -0
  522. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-apple.S +1195 -0
  523. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-linux.S +1194 -0
  524. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-win.S +1198 -0
  525. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-apple.S +4173 -0
  526. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-linux.S +4170 -0
  527. package/runtime/third_party/boringssl/gen/bcm/sha512-586-apple.S +2406 -0
  528. package/runtime/third_party/boringssl/gen/bcm/sha512-586-linux.S +2410 -0
  529. package/runtime/third_party/boringssl/gen/bcm/sha512-armv4-linux.S +1857 -0
  530. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-apple.S +1598 -0
  531. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-linux.S +1597 -0
  532. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-win.S +1601 -0
  533. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-apple.S +2979 -0
  534. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-linux.S +2978 -0
  535. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv7-linux.S +1225 -0
  536. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-apple.S +1238 -0
  537. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-linux.S +1220 -0
  538. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-win.S +1256 -0
  539. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-apple.S +680 -0
  540. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-linux.S +706 -0
  541. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-apple.S +1146 -0
  542. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-linux.S +1133 -0
  543. package/runtime/third_party/boringssl/gen/bcm/x86-mont-apple.S +216 -0
  544. package/runtime/third_party/boringssl/gen/bcm/x86-mont-linux.S +218 -0
  545. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-apple.S +1238 -0
  546. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-linux.S +1237 -0
  547. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-apple.S +3644 -0
  548. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-linux.S +3628 -0
  549. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +325 -0
  550. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +325 -0
  551. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-apple.S +3113 -0
  552. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-linux.S +3091 -0
  553. package/runtime/third_party/boringssl/gen/crypto/chacha-armv4-linux.S +1450 -0
  554. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-apple.S +1969 -0
  555. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-linux.S +1967 -0
  556. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-win.S +1973 -0
  557. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-apple.S +957 -0
  558. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-linux.S +961 -0
  559. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-apple.S +1608 -0
  560. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-linux.S +1611 -0
  561. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-apple.S +3010 -0
  562. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-linux.S +3008 -0
  563. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-win.S +3014 -0
  564. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-apple.S +8903 -0
  565. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-linux.S +8940 -0
  566. package/runtime/third_party/boringssl/gen/crypto/err_data.cc +1578 -0
  567. package/runtime/third_party/boringssl/gen/crypto/md5-586-apple.S +684 -0
  568. package/runtime/third_party/boringssl/gen/crypto/md5-586-linux.S +686 -0
  569. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-apple.S +690 -0
  570. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-linux.S +695 -0
  571. package/runtime/third_party/boringssl/include/openssl/aead.h +650 -0
  572. package/runtime/third_party/boringssl/include/openssl/aes.h +173 -0
  573. package/runtime/third_party/boringssl/include/openssl/arm_arch.h +24 -0
  574. package/runtime/third_party/boringssl/include/openssl/asm_base.h +219 -0
  575. package/runtime/third_party/boringssl/include/openssl/asn1.h +2002 -0
  576. package/runtime/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  577. package/runtime/third_party/boringssl/include/openssl/asn1t.h +584 -0
  578. package/runtime/third_party/boringssl/include/openssl/base.h +548 -0
  579. package/runtime/third_party/boringssl/include/openssl/base64.h +156 -0
  580. package/runtime/third_party/boringssl/include/openssl/bio.h +1061 -0
  581. package/runtime/third_party/boringssl/include/openssl/blake2.h +63 -0
  582. package/runtime/third_party/boringssl/include/openssl/blowfish.h +58 -0
  583. package/runtime/third_party/boringssl/include/openssl/bn.h +986 -0
  584. package/runtime/third_party/boringssl/include/openssl/buf.h +95 -0
  585. package/runtime/third_party/boringssl/include/openssl/buffer.h +18 -0
  586. package/runtime/third_party/boringssl/include/openssl/bytestring.h +798 -0
  587. package/runtime/third_party/boringssl/include/openssl/cast.h +91 -0
  588. package/runtime/third_party/boringssl/include/openssl/chacha.h +47 -0
  589. package/runtime/third_party/boringssl/include/openssl/cipher.h +819 -0
  590. package/runtime/third_party/boringssl/include/openssl/cmac.h +91 -0
  591. package/runtime/third_party/boringssl/include/openssl/cms.h +147 -0
  592. package/runtime/third_party/boringssl/include/openssl/conf.h +136 -0
  593. package/runtime/third_party/boringssl/include/openssl/configuration.h +18 -0
  594. package/runtime/third_party/boringssl/include/openssl/cpu.h +18 -0
  595. package/runtime/third_party/boringssl/include/openssl/crypto.h +235 -0
  596. package/runtime/third_party/boringssl/include/openssl/ctrdrbg.h +116 -0
  597. package/runtime/third_party/boringssl/include/openssl/curve25519.h +309 -0
  598. package/runtime/third_party/boringssl/include/openssl/des.h +134 -0
  599. package/runtime/third_party/boringssl/include/openssl/dh.h +336 -0
  600. package/runtime/third_party/boringssl/include/openssl/digest.h +399 -0
  601. package/runtime/third_party/boringssl/include/openssl/dsa.h +392 -0
  602. package/runtime/third_party/boringssl/include/openssl/dtls1.h +16 -0
  603. package/runtime/third_party/boringssl/include/openssl/e_os2.h +18 -0
  604. package/runtime/third_party/boringssl/include/openssl/ec.h +530 -0
  605. package/runtime/third_party/boringssl/include/openssl/ec_key.h +358 -0
  606. package/runtime/third_party/boringssl/include/openssl/ecdh.h +67 -0
  607. package/runtime/third_party/boringssl/include/openssl/ecdsa.h +242 -0
  608. package/runtime/third_party/boringssl/include/openssl/engine.h +109 -0
  609. package/runtime/third_party/boringssl/include/openssl/err.h +416 -0
  610. package/runtime/third_party/boringssl/include/openssl/evp.h +1645 -0
  611. package/runtime/third_party/boringssl/include/openssl/evp_errors.h +66 -0
  612. package/runtime/third_party/boringssl/include/openssl/ex_data.h +117 -0
  613. package/runtime/third_party/boringssl/include/openssl/hkdf.h +68 -0
  614. package/runtime/third_party/boringssl/include/openssl/hmac.h +151 -0
  615. package/runtime/third_party/boringssl/include/openssl/hpke.h +456 -0
  616. package/runtime/third_party/boringssl/include/openssl/hrss.h +108 -0
  617. package/runtime/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  618. package/runtime/third_party/boringssl/include/openssl/kdf.h +92 -0
  619. package/runtime/third_party/boringssl/include/openssl/lhash.h +18 -0
  620. package/runtime/third_party/boringssl/include/openssl/md4.h +73 -0
  621. package/runtime/third_party/boringssl/include/openssl/md5.h +67 -0
  622. package/runtime/third_party/boringssl/include/openssl/mem.h +215 -0
  623. package/runtime/third_party/boringssl/include/openssl/mldsa.h +486 -0
  624. package/runtime/third_party/boringssl/include/openssl/mlkem.h +222 -0
  625. package/runtime/third_party/boringssl/include/openssl/nid.h +5561 -0
  626. package/runtime/third_party/boringssl/include/openssl/obj.h +225 -0
  627. package/runtime/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  628. package/runtime/third_party/boringssl/include/openssl/objects.h +18 -0
  629. package/runtime/third_party/boringssl/include/openssl/opensslconf.h +108 -0
  630. package/runtime/third_party/boringssl/include/openssl/opensslv.h +18 -0
  631. package/runtime/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  632. package/runtime/third_party/boringssl/include/openssl/params.h +42 -0
  633. package/runtime/third_party/boringssl/include/openssl/pem.h +769 -0
  634. package/runtime/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  635. package/runtime/third_party/boringssl/include/openssl/pkcs7.h +239 -0
  636. package/runtime/third_party/boringssl/include/openssl/pkcs8.h +267 -0
  637. package/runtime/third_party/boringssl/include/openssl/poly1305.h +52 -0
  638. package/runtime/third_party/boringssl/include/openssl/pool.h +137 -0
  639. package/runtime/third_party/boringssl/include/openssl/posix_time.h +51 -0
  640. package/runtime/third_party/boringssl/include/openssl/prefix_symbols.h +8000 -0
  641. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_S.h +633 -0
  642. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_c.h +329 -0
  643. package/runtime/third_party/boringssl/include/openssl/rand.h +138 -0
  644. package/runtime/third_party/boringssl/include/openssl/rc4.h +54 -0
  645. package/runtime/third_party/boringssl/include/openssl/ripemd.h +71 -0
  646. package/runtime/third_party/boringssl/include/openssl/rsa.h +893 -0
  647. package/runtime/third_party/boringssl/include/openssl/safestack.h +16 -0
  648. package/runtime/third_party/boringssl/include/openssl/service_indicator.h +19 -0
  649. package/runtime/third_party/boringssl/include/openssl/sha.h +108 -0
  650. package/runtime/third_party/boringssl/include/openssl/sha2.h +201 -0
  651. package/runtime/third_party/boringssl/include/openssl/siphash.h +37 -0
  652. package/runtime/third_party/boringssl/include/openssl/slhdsa.h +250 -0
  653. package/runtime/third_party/boringssl/include/openssl/span.h +376 -0
  654. package/runtime/third_party/boringssl/include/openssl/srtp.h +18 -0
  655. package/runtime/third_party/boringssl/include/openssl/ssl.h +7211 -0
  656. package/runtime/third_party/boringssl/include/openssl/ssl3.h +171 -0
  657. package/runtime/third_party/boringssl/include/openssl/stack.h +688 -0
  658. package/runtime/third_party/boringssl/include/openssl/target.h +246 -0
  659. package/runtime/third_party/boringssl/include/openssl/thread.h +114 -0
  660. package/runtime/third_party/boringssl/include/openssl/time.h +22 -0
  661. package/runtime/third_party/boringssl/include/openssl/tls1.h +263 -0
  662. package/runtime/third_party/boringssl/include/openssl/tls_prf.h +47 -0
  663. package/runtime/third_party/boringssl/include/openssl/trust_token.h +349 -0
  664. package/runtime/third_party/boringssl/include/openssl/type_check.h +37 -0
  665. package/runtime/third_party/boringssl/include/openssl/types.h +18 -0
  666. package/runtime/third_party/boringssl/include/openssl/x509.h +5404 -0
  667. package/runtime/third_party/boringssl/include/openssl/x509_vfy.h +18 -0
  668. package/runtime/third_party/boringssl/include/openssl/x509v3.h +63 -0
  669. package/runtime/third_party/boringssl/include/openssl/x509v3_errors.h +84 -0
  670. package/runtime/third_party/boringssl/include/openssl/xwing.h +115 -0
  671. package/runtime/third_party/boringssl/sources.json +696 -0
  672. package/runtime/third_party/boringssl/ssl/bio_ssl.cc +196 -0
  673. package/runtime/third_party/boringssl/ssl/d1_both.cc +1137 -0
  674. package/runtime/third_party/boringssl/ssl/d1_lib.cc +245 -0
  675. package/runtime/third_party/boringssl/ssl/d1_pkt.cc +322 -0
  676. package/runtime/third_party/boringssl/ssl/d1_srtp.cc +128 -0
  677. package/runtime/third_party/boringssl/ssl/dtls_method.cc +216 -0
  678. package/runtime/third_party/boringssl/ssl/dtls_record.cc +586 -0
  679. package/runtime/third_party/boringssl/ssl/encrypted_client_hello.cc +1110 -0
  680. package/runtime/third_party/boringssl/ssl/extensions.cc +5368 -0
  681. package/runtime/third_party/boringssl/ssl/handoff.cc +625 -0
  682. package/runtime/third_party/boringssl/ssl/handshake.cc +694 -0
  683. package/runtime/third_party/boringssl/ssl/handshake_client.cc +1958 -0
  684. package/runtime/third_party/boringssl/ssl/handshake_server.cc +1875 -0
  685. package/runtime/third_party/boringssl/ssl/internal.h +4506 -0
  686. package/runtime/third_party/boringssl/ssl/s3_both.cc +555 -0
  687. package/runtime/third_party/boringssl/ssl/s3_lib.cc +88 -0
  688. package/runtime/third_party/boringssl/ssl/s3_pkt.cc +396 -0
  689. package/runtime/third_party/boringssl/ssl/ssl_aead_ctx.cc +416 -0
  690. package/runtime/third_party/boringssl/ssl/ssl_asn1.cc +851 -0
  691. package/runtime/third_party/boringssl/ssl/ssl_buffer.cc +304 -0
  692. package/runtime/third_party/boringssl/ssl/ssl_cert.cc +723 -0
  693. package/runtime/third_party/boringssl/ssl/ssl_cipher.cc +1762 -0
  694. package/runtime/third_party/boringssl/ssl/ssl_credential.cc +913 -0
  695. package/runtime/third_party/boringssl/ssl/ssl_file.cc +375 -0
  696. package/runtime/third_party/boringssl/ssl/ssl_key_share.cc +445 -0
  697. package/runtime/third_party/boringssl/ssl/ssl_lib.cc +4132 -0
  698. package/runtime/third_party/boringssl/ssl/ssl_privkey.cc +973 -0
  699. package/runtime/third_party/boringssl/ssl/ssl_session.cc +1273 -0
  700. package/runtime/third_party/boringssl/ssl/ssl_stat.cc +162 -0
  701. package/runtime/third_party/boringssl/ssl/ssl_transcript.cc +224 -0
  702. package/runtime/third_party/boringssl/ssl/ssl_versions.cc +436 -0
  703. package/runtime/third_party/boringssl/ssl/ssl_x509.cc +1229 -0
  704. package/runtime/third_party/boringssl/ssl/t1_enc.cc +266 -0
  705. package/runtime/third_party/boringssl/ssl/tls13_both.cc +764 -0
  706. package/runtime/third_party/boringssl/ssl/tls13_client.cc +1325 -0
  707. package/runtime/third_party/boringssl/ssl/tls13_enc.cc +746 -0
  708. package/runtime/third_party/boringssl/ssl/tls13_server.cc +1623 -0
  709. package/runtime/third_party/boringssl/ssl/tls_method.cc +266 -0
  710. package/runtime/third_party/boringssl/ssl/tls_record.cc +524 -0
  711. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_mul.S +178 -0
  712. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_square.S +146 -0
  713. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_mul.S +177 -0
  714. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_sqr.S +166 -0
  715. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  716. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  717. package/runtime/third_party/boringssl/third_party/fiat/curve25519_32.h +1571 -0
  718. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64.h +978 -0
  719. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_adx.h +700 -0
  720. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_msvc.h +1281 -0
  721. package/runtime/third_party/boringssl/third_party/fiat/p256_32.h +4760 -0
  722. package/runtime/third_party/boringssl/third_party/fiat/p256_64.h +1984 -0
  723. package/runtime/third_party/boringssl/third_party/fiat/p256_64_msvc.h +1939 -0
  724. package/runtime/third_party/boringssl/third_party/fiat/p256_field.c.inc +26 -0
  725. package/runtime/third_party/boringssl/third_party/fiat/p256_field_32.br.c.inc +71 -0
  726. package/runtime/third_party/boringssl/third_party/fiat/p256_field_64.br.c.inc +84 -0
  727. package/runtime/third_party/boringssl/third_party/fiat/p256_point.br.c.inc +112 -0
  728. package/runtime/third_party/v8-ieee754/README.md +2 -1
  729. package/runtime/third_party/v8-ieee754/convert.py +4 -0
  730. package/runtime/third_party/v8-ieee754/ieee754.c +1 -1
  731. package/runtime/third_party/bearssl/LICENSE.txt +0 -21
  732. package/runtime/third_party/bearssl/README.txt +0 -136
  733. package/runtime/third_party/bearssl/VERSION +0 -1
  734. package/runtime/third_party/bearssl/inc/bearssl.h +0 -183
  735. package/runtime/third_party/bearssl/inc/bearssl_aead.h +0 -1059
  736. package/runtime/third_party/bearssl/inc/bearssl_block.h +0 -2618
  737. package/runtime/third_party/bearssl/inc/bearssl_ec.h +0 -967
  738. package/runtime/third_party/bearssl/inc/bearssl_hash.h +0 -1346
  739. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +0 -241
  740. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +0 -284
  741. package/runtime/third_party/bearssl/inc/bearssl_pem.h +0 -294
  742. package/runtime/third_party/bearssl/inc/bearssl_prf.h +0 -150
  743. package/runtime/third_party/bearssl/inc/bearssl_rand.h +0 -397
  744. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +0 -1655
  745. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +0 -4296
  746. package/runtime/third_party/bearssl/inc/bearssl_x509.h +0 -1474
  747. package/runtime/third_party/bearssl/src/aead/ccm.c +0 -346
  748. package/runtime/third_party/bearssl/src/aead/eax.c +0 -525
  749. package/runtime/third_party/bearssl/src/aead/gcm.c +0 -318
  750. package/runtime/third_party/bearssl/src/codec/ccopy.c +0 -44
  751. package/runtime/third_party/bearssl/src/codec/dec16be.c +0 -38
  752. package/runtime/third_party/bearssl/src/codec/dec16le.c +0 -38
  753. package/runtime/third_party/bearssl/src/codec/dec32be.c +0 -38
  754. package/runtime/third_party/bearssl/src/codec/dec32le.c +0 -38
  755. package/runtime/third_party/bearssl/src/codec/dec64be.c +0 -38
  756. package/runtime/third_party/bearssl/src/codec/dec64le.c +0 -38
  757. package/runtime/third_party/bearssl/src/codec/enc16be.c +0 -38
  758. package/runtime/third_party/bearssl/src/codec/enc16le.c +0 -38
  759. package/runtime/third_party/bearssl/src/codec/enc32be.c +0 -38
  760. package/runtime/third_party/bearssl/src/codec/enc32le.c +0 -38
  761. package/runtime/third_party/bearssl/src/codec/enc64be.c +0 -38
  762. package/runtime/third_party/bearssl/src/codec/enc64le.c +0 -38
  763. package/runtime/third_party/bearssl/src/codec/pemdec.c +0 -526
  764. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +0 -314
  765. package/runtime/third_party/bearssl/src/codec/pemenc.c +0 -173
  766. package/runtime/third_party/bearssl/src/config.h +0 -247
  767. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +0 -121
  768. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +0 -171
  769. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +0 -398
  770. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +0 -390
  771. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +0 -1478
  772. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +0 -800
  773. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +0 -605
  774. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +0 -831
  775. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +0 -46
  776. package/runtime/third_party/bearssl/src/ec/ec_default.c +0 -36
  777. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +0 -86
  778. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +0 -2124
  779. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +0 -1469
  780. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +0 -1765
  781. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +0 -1781
  782. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +0 -824
  783. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +0 -826
  784. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +0 -85
  785. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +0 -51
  786. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +0 -57
  787. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +0 -64
  788. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +0 -134
  789. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +0 -36
  790. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +0 -36
  791. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +0 -36
  792. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +0 -36
  793. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +0 -47
  794. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +0 -45
  795. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +0 -174
  796. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +0 -48
  797. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +0 -166
  798. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +0 -47
  799. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +0 -45
  800. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +0 -173
  801. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +0 -48
  802. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +0 -165
  803. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +0 -121
  804. package/runtime/third_party/bearssl/src/hash/dig_oid.c +0 -84
  805. package/runtime/third_party/bearssl/src/hash/dig_size.c +0 -50
  806. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +0 -345
  807. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +0 -251
  808. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +0 -154
  809. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +0 -389
  810. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +0 -411
  811. package/runtime/third_party/bearssl/src/hash/md5.c +0 -208
  812. package/runtime/third_party/bearssl/src/hash/md5sha1.c +0 -141
  813. package/runtime/third_party/bearssl/src/hash/mgf1.c +0 -56
  814. package/runtime/third_party/bearssl/src/hash/multihash.c +0 -166
  815. package/runtime/third_party/bearssl/src/hash/sha1.c +0 -191
  816. package/runtime/third_party/bearssl/src/hash/sha2big.c +0 -285
  817. package/runtime/third_party/bearssl/src/hash/sha2small.c +0 -341
  818. package/runtime/third_party/bearssl/src/inner.h +0 -2577
  819. package/runtime/third_party/bearssl/src/int/i15_add.c +0 -46
  820. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +0 -44
  821. package/runtime/third_party/bearssl/src/int/i15_decmod.c +0 -124
  822. package/runtime/third_party/bearssl/src/int/i15_decode.c +0 -56
  823. package/runtime/third_party/bearssl/src/int/i15_decred.c +0 -100
  824. package/runtime/third_party/bearssl/src/int/i15_encode.c +0 -56
  825. package/runtime/third_party/bearssl/src/int/i15_fmont.c +0 -59
  826. package/runtime/third_party/bearssl/src/int/i15_iszero.c +0 -39
  827. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +0 -465
  828. package/runtime/third_party/bearssl/src/int/i15_modpow.c +0 -50
  829. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +0 -160
  830. package/runtime/third_party/bearssl/src/int/i15_montmul.c +0 -184
  831. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +0 -61
  832. package/runtime/third_party/bearssl/src/int/i15_muladd.c +0 -173
  833. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +0 -38
  834. package/runtime/third_party/bearssl/src/int/i15_reduce.c +0 -66
  835. package/runtime/third_party/bearssl/src/int/i15_rshift.c +0 -47
  836. package/runtime/third_party/bearssl/src/int/i15_sub.c +0 -46
  837. package/runtime/third_party/bearssl/src/int/i15_tmont.c +0 -36
  838. package/runtime/third_party/bearssl/src/int/i31_add.c +0 -46
  839. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +0 -44
  840. package/runtime/third_party/bearssl/src/int/i31_decmod.c +0 -124
  841. package/runtime/third_party/bearssl/src/int/i31_decode.c +0 -57
  842. package/runtime/third_party/bearssl/src/int/i31_decred.c +0 -103
  843. package/runtime/third_party/bearssl/src/int/i31_encode.c +0 -79
  844. package/runtime/third_party/bearssl/src/int/i31_fmont.c +0 -60
  845. package/runtime/third_party/bearssl/src/int/i31_iszero.c +0 -39
  846. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +0 -488
  847. package/runtime/third_party/bearssl/src/int/i31_modpow.c +0 -65
  848. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +0 -160
  849. package/runtime/third_party/bearssl/src/int/i31_montmul.c +0 -127
  850. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +0 -74
  851. package/runtime/third_party/bearssl/src/int/i31_muladd.c +0 -157
  852. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +0 -39
  853. package/runtime/third_party/bearssl/src/int/i31_reduce.c +0 -66
  854. package/runtime/third_party/bearssl/src/int/i31_rshift.c +0 -47
  855. package/runtime/third_party/bearssl/src/int/i31_sub.c +0 -46
  856. package/runtime/third_party/bearssl/src/int/i31_tmont.c +0 -36
  857. package/runtime/third_party/bearssl/src/int/i32_add.c +0 -51
  858. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +0 -44
  859. package/runtime/third_party/bearssl/src/int/i32_decmod.c +0 -77
  860. package/runtime/third_party/bearssl/src/int/i32_decode.c +0 -63
  861. package/runtime/third_party/bearssl/src/int/i32_decred.c +0 -107
  862. package/runtime/third_party/bearssl/src/int/i32_div32.c +0 -56
  863. package/runtime/third_party/bearssl/src/int/i32_encode.c +0 -72
  864. package/runtime/third_party/bearssl/src/int/i32_fmont.c +0 -60
  865. package/runtime/third_party/bearssl/src/int/i32_iszero.c +0 -39
  866. package/runtime/third_party/bearssl/src/int/i32_modpow.c +0 -65
  867. package/runtime/third_party/bearssl/src/int/i32_montmul.c +0 -69
  868. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +0 -56
  869. package/runtime/third_party/bearssl/src/int/i32_muladd.c +0 -138
  870. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +0 -39
  871. package/runtime/third_party/bearssl/src/int/i32_reduce.c +0 -66
  872. package/runtime/third_party/bearssl/src/int/i32_sub.c +0 -51
  873. package/runtime/third_party/bearssl/src/int/i32_tmont.c +0 -36
  874. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +0 -493
  875. package/runtime/third_party/bearssl/src/kdf/hkdf.c +0 -107
  876. package/runtime/third_party/bearssl/src/kdf/shake.c +0 -590
  877. package/runtime/third_party/bearssl/src/mac/hmac.c +0 -122
  878. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +0 -193
  879. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +0 -206
  880. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +0 -157
  881. package/runtime/third_party/bearssl/src/rand/sysrng.c +0 -252
  882. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +0 -38
  883. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +0 -36
  884. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +0 -38
  885. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +0 -38
  886. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +0 -38
  887. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +0 -38
  888. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +0 -38
  889. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +0 -36
  890. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +0 -38
  891. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +0 -38
  892. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +0 -38
  893. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +0 -36
  894. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +0 -583
  895. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +0 -99
  896. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +0 -41
  897. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +0 -44
  898. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +0 -37
  899. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +0 -43
  900. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +0 -209
  901. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +0 -320
  902. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +0 -40
  903. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +0 -44
  904. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +0 -113
  905. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +0 -152
  906. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +0 -37
  907. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +0 -608
  908. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +0 -99
  909. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +0 -41
  910. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +0 -44
  911. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +0 -37
  912. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +0 -43
  913. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +0 -203
  914. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +0 -318
  915. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +0 -40
  916. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +0 -44
  917. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +0 -106
  918. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +0 -152
  919. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +0 -41
  920. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +0 -44
  921. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +0 -37
  922. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +0 -43
  923. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +0 -160
  924. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +0 -40
  925. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +0 -44
  926. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +0 -77
  927. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +0 -57
  928. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +0 -61
  929. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +0 -64
  930. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +0 -57
  931. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +0 -63
  932. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +0 -223
  933. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +0 -60
  934. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +0 -64
  935. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +0 -125
  936. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +0 -112
  937. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +0 -145
  938. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +0 -100
  939. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +0 -121
  940. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +0 -106
  941. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +0 -121
  942. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +0 -52
  943. package/runtime/third_party/bearssl/src/settings.c +0 -306
  944. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +0 -69
  945. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +0 -67
  946. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +0 -84
  947. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +0 -142
  948. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +0 -254
  949. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +0 -157
  950. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +0 -112
  951. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +0 -328
  952. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +0 -398
  953. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +0 -104
  954. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +0 -81
  955. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +0 -114
  956. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +0 -433
  957. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +0 -159
  958. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +0 -115
  959. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +0 -111
  960. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +0 -91
  961. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +0 -116
  962. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +0 -422
  963. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +0 -170
  964. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +0 -112
  965. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +0 -445
  966. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +0 -670
  967. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +0 -417
  968. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +0 -717
  969. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +0 -946
  970. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +0 -69
  971. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +0 -67
  972. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +0 -84
  973. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +0 -142
  974. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +0 -176
  975. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +0 -129
  976. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +0 -240
  977. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +0 -223
  978. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +0 -122
  979. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +0 -211
  980. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +0 -596
  981. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +0 -106
  982. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +0 -237
  983. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +0 -411
  984. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +0 -87
  985. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +0 -69
  986. package/runtime/third_party/bearssl/src/symcipher/des_support.c +0 -166
  987. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +0 -310
  988. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +0 -85
  989. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +0 -67
  990. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +0 -260
  991. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +0 -297
  992. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +0 -475
  993. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +0 -221
  994. package/runtime/third_party/bearssl/src/x509/asn1.t0 +0 -757
  995. package/runtime/third_party/bearssl/src/x509/asn1enc.c +0 -93
  996. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +0 -110
  997. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +0 -161
  998. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +0 -97
  999. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +0 -96
  1000. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +0 -653
  1001. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +0 -376
  1002. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +0 -776
  1003. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +0 -324
  1004. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +0 -105
  1005. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +0 -1722
  1006. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +0 -1526
  1007. 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