visaljs 0.0.1 → 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 (1008) hide show
  1. package/README.md +17 -1
  2. package/cli.js +565 -75
  3. package/node/include/js_node.h +28 -5
  4. package/node/include/js_uv.h +36 -0
  5. package/node/prelude/crypto.js +7 -10
  6. package/node/prelude/dns.js +99 -0
  7. package/node/prelude/dns_promises.js +10 -0
  8. package/node/prelude/http.js +1039 -195
  9. package/node/prelude/internal/crypto/asym.js +39 -12
  10. package/node/prelude/internal/crypto/dh_groups.js +12 -0
  11. package/node/prelude/internal/crypto/diffiehellman.js +354 -0
  12. package/node/prelude/internal/crypto/hash.js +1 -1
  13. package/node/prelude/internal/crypto/key_type.js +3 -0
  14. package/node/prelude/internal/crypto/keys.js +39 -9
  15. package/node/prelude/internal/http_agent.js +249 -0
  16. package/node/prelude/internal/net.js +33 -0
  17. package/node/prelude/internal/socketaddress.js +249 -0
  18. package/node/prelude/internal/tls/common.js +306 -0
  19. package/node/prelude/internal/tls/wrap.js +1217 -0
  20. package/node/prelude/internal/tls/x509.js +394 -0
  21. package/node/prelude/net.js +1083 -50
  22. package/node/prelude/stream.js +6 -0
  23. package/node/prelude/tls.js +141 -0
  24. package/node/prelude/util.js +5 -2
  25. package/node/prelude/util_types.js +85 -0
  26. package/node/src/host_http.c +268 -270
  27. package/node/src/host_loop.c +84 -0
  28. package/node/src/host_net.c +495 -0
  29. package/node/src/host_sys.c +16 -0
  30. package/package.json +1 -1
  31. package/runtime/include/js_builtins.h +16 -0
  32. package/runtime/include/js_console.h +2 -0
  33. package/runtime/include/js_core.def +23 -0
  34. package/runtime/include/js_crypto.h +23 -0
  35. package/runtime/include/js_generator.h +2 -3
  36. package/runtime/include/js_promise.h +0 -2
  37. package/runtime/src/async_iter.c +4 -1
  38. package/runtime/src/boringssl_support.cc +34 -0
  39. package/runtime/src/builtin_table.c +8 -0
  40. package/runtime/src/components.c +10 -0
  41. package/runtime/src/console.c +6 -18
  42. package/runtime/src/core_all.c +1 -0
  43. package/runtime/src/crypto_asym.c +450 -241
  44. package/runtime/src/crypto_bn.c +91 -0
  45. package/runtime/src/crypto_cipher.c +153 -75
  46. package/runtime/src/crypto_hash.c +68 -53
  47. package/runtime/src/crypto_internal.h +55 -26
  48. package/runtime/src/crypto_pkey.c +198 -61
  49. package/runtime/src/crypto_subtle.c +42 -16
  50. package/runtime/src/crypto_tls.c +678 -0
  51. package/runtime/src/generator.c +8 -1
  52. package/runtime/src/global.c +2 -4
  53. package/runtime/src/internal.h +0 -1
  54. package/runtime/src/jobs.c +2 -1
  55. package/runtime/src/promise.c +4 -1
  56. package/runtime/src/tls_roots.gen.h +3215 -0
  57. package/runtime/src/util_types.c +52 -0
  58. package/runtime/src/weak.c +2 -1
  59. package/runtime/third_party/boringssl/LICENSE +238 -0
  60. package/runtime/third_party/boringssl/README.md +46 -0
  61. package/runtime/third_party/boringssl/VERSION +1 -0
  62. package/runtime/third_party/boringssl/crypto/aes/aes.cc +44 -0
  63. package/runtime/third_party/boringssl/crypto/armv8_feature_parsing.h +67 -0
  64. package/runtime/third_party/boringssl/crypto/asn1/a_bitstr.cc +297 -0
  65. package/runtime/third_party/boringssl/crypto/asn1/a_bool.cc +50 -0
  66. package/runtime/third_party/boringssl/crypto/asn1/a_d2i_fp.cc +47 -0
  67. package/runtime/third_party/boringssl/crypto/asn1/a_dup.cc +42 -0
  68. package/runtime/third_party/boringssl/crypto/asn1/a_gentm.cc +130 -0
  69. package/runtime/third_party/boringssl/crypto/asn1/a_i2d_fp.cc +44 -0
  70. package/runtime/third_party/boringssl/crypto/asn1/a_int.cc +467 -0
  71. package/runtime/third_party/boringssl/crypto/asn1/a_mbstr.cc +242 -0
  72. package/runtime/third_party/boringssl/crypto/asn1/a_object.cc +191 -0
  73. package/runtime/third_party/boringssl/crypto/asn1/a_octet.cc +32 -0
  74. package/runtime/third_party/boringssl/crypto/asn1/a_strex.cc +411 -0
  75. package/runtime/third_party/boringssl/crypto/asn1/a_strnid.cc +208 -0
  76. package/runtime/third_party/boringssl/crypto/asn1/a_time.cc +248 -0
  77. package/runtime/third_party/boringssl/crypto/asn1/a_type.cc +467 -0
  78. package/runtime/third_party/boringssl/crypto/asn1/a_utctm.cc +128 -0
  79. package/runtime/third_party/boringssl/crypto/asn1/asn1_lib.cc +453 -0
  80. package/runtime/third_party/boringssl/crypto/asn1/asn1_par.cc +61 -0
  81. package/runtime/third_party/boringssl/crypto/asn1/asn_pack.cc +56 -0
  82. package/runtime/third_party/boringssl/crypto/asn1/f_int.cc +63 -0
  83. package/runtime/third_party/boringssl/crypto/asn1/f_string.cc +52 -0
  84. package/runtime/third_party/boringssl/crypto/asn1/internal.h +430 -0
  85. package/runtime/third_party/boringssl/crypto/asn1/posix_time.cc +244 -0
  86. package/runtime/third_party/boringssl/crypto/asn1/tasn_dec.cc +611 -0
  87. package/runtime/third_party/boringssl/crypto/asn1/tasn_enc.cc +348 -0
  88. package/runtime/third_party/boringssl/crypto/asn1/tasn_fre.cc +163 -0
  89. package/runtime/third_party/boringssl/crypto/asn1/tasn_new.cc +274 -0
  90. package/runtime/third_party/boringssl/crypto/asn1/tasn_typ.cc +92 -0
  91. package/runtime/third_party/boringssl/crypto/asn1/tasn_utl.cc +218 -0
  92. package/runtime/third_party/boringssl/crypto/base64/base64.cc +433 -0
  93. package/runtime/third_party/boringssl/crypto/bcm_support.h +62 -0
  94. package/runtime/third_party/boringssl/crypto/bio/bio.cc +715 -0
  95. package/runtime/third_party/boringssl/crypto/bio/bio_mem.cc +260 -0
  96. package/runtime/third_party/boringssl/crypto/bio/connect.cc +463 -0
  97. package/runtime/third_party/boringssl/crypto/bio/errno.cc +52 -0
  98. package/runtime/third_party/boringssl/crypto/bio/fd.cc +193 -0
  99. package/runtime/third_party/boringssl/crypto/bio/file.cc +283 -0
  100. package/runtime/third_party/boringssl/crypto/bio/hexdump.cc +154 -0
  101. package/runtime/third_party/boringssl/crypto/bio/internal.h +128 -0
  102. package/runtime/third_party/boringssl/crypto/bio/pair.cc +426 -0
  103. package/runtime/third_party/boringssl/crypto/bio/printf.cc +59 -0
  104. package/runtime/third_party/boringssl/crypto/bio/socket.cc +210 -0
  105. package/runtime/third_party/boringssl/crypto/bio/socket_helper.cc +179 -0
  106. package/runtime/third_party/boringssl/crypto/blake2/blake2.cc +173 -0
  107. package/runtime/third_party/boringssl/crypto/bn/bn_asn1.cc +57 -0
  108. package/runtime/third_party/boringssl/crypto/bn/convert.cc +409 -0
  109. package/runtime/third_party/boringssl/crypto/bn/div.cc +102 -0
  110. package/runtime/third_party/boringssl/crypto/bn/exponentiation.cc +168 -0
  111. package/runtime/third_party/boringssl/crypto/bn/sqrt.cc +93 -0
  112. package/runtime/third_party/boringssl/crypto/buf/buf.cc +119 -0
  113. package/runtime/third_party/boringssl/crypto/bytestring/asn1_compat.cc +54 -0
  114. package/runtime/third_party/boringssl/crypto/bytestring/ber.cc +268 -0
  115. package/runtime/third_party/boringssl/crypto/bytestring/cbb.cc +787 -0
  116. package/runtime/third_party/boringssl/crypto/bytestring/cbs.cc +977 -0
  117. package/runtime/third_party/boringssl/crypto/bytestring/internal.h +134 -0
  118. package/runtime/third_party/boringssl/crypto/bytestring/unicode.cc +156 -0
  119. package/runtime/third_party/boringssl/crypto/chacha/chacha.cc +226 -0
  120. package/runtime/third_party/boringssl/crypto/chacha/internal.h +103 -0
  121. package/runtime/third_party/boringssl/crypto/cipher/derive_key.cc +106 -0
  122. package/runtime/third_party/boringssl/crypto/cipher/e_aesctrhmac.cc +294 -0
  123. package/runtime/third_party/boringssl/crypto/cipher/e_aeseax.cc +351 -0
  124. package/runtime/third_party/boringssl/crypto/cipher/e_aesgcmsiv.cc +918 -0
  125. package/runtime/third_party/boringssl/crypto/cipher/e_chacha20poly1305.cc +404 -0
  126. package/runtime/third_party/boringssl/crypto/cipher/e_des.cc +214 -0
  127. package/runtime/third_party/boringssl/crypto/cipher/e_null.cc +55 -0
  128. package/runtime/third_party/boringssl/crypto/cipher/e_rc2.cc +432 -0
  129. package/runtime/third_party/boringssl/crypto/cipher/e_rc4.cc +56 -0
  130. package/runtime/third_party/boringssl/crypto/cipher/e_tls.cc +615 -0
  131. package/runtime/third_party/boringssl/crypto/cipher/get_cipher.cc +85 -0
  132. package/runtime/third_party/boringssl/crypto/cipher/internal.h +399 -0
  133. package/runtime/third_party/boringssl/crypto/cipher/tls_cbc.cc +476 -0
  134. package/runtime/third_party/boringssl/crypto/cms/cms.cc +178 -0
  135. package/runtime/third_party/boringssl/crypto/conf/conf.cc +637 -0
  136. package/runtime/third_party/boringssl/crypto/conf/internal.h +54 -0
  137. package/runtime/third_party/boringssl/crypto/cpu_aarch64_apple.cc +76 -0
  138. package/runtime/third_party/boringssl/crypto/cpu_aarch64_fuchsia.cc +58 -0
  139. package/runtime/third_party/boringssl/crypto/cpu_aarch64_linux.cc +66 -0
  140. package/runtime/third_party/boringssl/crypto/cpu_aarch64_openbsd.cc +45 -0
  141. package/runtime/third_party/boringssl/crypto/cpu_aarch64_sysreg.cc +66 -0
  142. package/runtime/third_party/boringssl/crypto/cpu_aarch64_win.cc +52 -0
  143. package/runtime/third_party/boringssl/crypto/cpu_arm_freebsd.cc +55 -0
  144. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.cc +173 -0
  145. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.h +141 -0
  146. package/runtime/third_party/boringssl/crypto/cpu_intel.cc +287 -0
  147. package/runtime/third_party/boringssl/crypto/crypto.cc +152 -0
  148. package/runtime/third_party/boringssl/crypto/curve25519/asm/x25519-asm-arm.S +2124 -0
  149. package/runtime/third_party/boringssl/crypto/curve25519/cpace.cc +227 -0
  150. package/runtime/third_party/boringssl/crypto/curve25519/curve25519.cc +2436 -0
  151. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_64_adx.cc +18 -0
  152. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_tables.h +3264 -0
  153. package/runtime/third_party/boringssl/crypto/curve25519/internal.h +202 -0
  154. package/runtime/third_party/boringssl/crypto/curve25519/spake25519.cc +532 -0
  155. package/runtime/third_party/boringssl/crypto/des/des.cc +837 -0
  156. package/runtime/third_party/boringssl/crypto/des/internal.h +144 -0
  157. package/runtime/third_party/boringssl/crypto/dh/dh_asn1.cc +109 -0
  158. package/runtime/third_party/boringssl/crypto/dh/params.cc +411 -0
  159. package/runtime/third_party/boringssl/crypto/digest/digest_extra.cc +361 -0
  160. package/runtime/third_party/boringssl/crypto/dsa/dsa.cc +922 -0
  161. package/runtime/third_party/boringssl/crypto/dsa/dsa_asn1.cc +306 -0
  162. package/runtime/third_party/boringssl/crypto/dsa/internal.h +56 -0
  163. package/runtime/third_party/boringssl/crypto/ec/ec_asn1.cc +542 -0
  164. package/runtime/third_party/boringssl/crypto/ec/ec_derive.cc +94 -0
  165. package/runtime/third_party/boringssl/crypto/ec/hash_to_curve.cc +773 -0
  166. package/runtime/third_party/boringssl/crypto/ec/internal.h +114 -0
  167. package/runtime/third_party/boringssl/crypto/ecdh/ecdh.cc +75 -0
  168. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.cc +337 -0
  169. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  170. package/runtime/third_party/boringssl/crypto/engine/engine.cc +95 -0
  171. package/runtime/third_party/boringssl/crypto/err/err.cc +820 -0
  172. package/runtime/third_party/boringssl/crypto/err/internal.h +45 -0
  173. package/runtime/third_party/boringssl/crypto/evp/evp.cc +454 -0
  174. package/runtime/third_party/boringssl/crypto/evp/evp_asn1.cc +439 -0
  175. package/runtime/third_party/boringssl/crypto/evp/evp_ctx.cc +541 -0
  176. package/runtime/third_party/boringssl/crypto/evp/evp_kem.cc +101 -0
  177. package/runtime/third_party/boringssl/crypto/evp/internal.h +427 -0
  178. package/runtime/third_party/boringssl/crypto/evp/p_dh.cc +326 -0
  179. package/runtime/third_party/boringssl/crypto/evp/p_dsa.cc +333 -0
  180. package/runtime/third_party/boringssl/crypto/evp/p_ec.cc +736 -0
  181. package/runtime/third_party/boringssl/crypto/evp/p_ed25519.cc +359 -0
  182. package/runtime/third_party/boringssl/crypto/evp/p_hkdf.cc +204 -0
  183. package/runtime/third_party/boringssl/crypto/evp/p_mldsa.cc +549 -0
  184. package/runtime/third_party/boringssl/crypto/evp/p_mlkem.cc +510 -0
  185. package/runtime/third_party/boringssl/crypto/evp/p_rsa.cc +1185 -0
  186. package/runtime/third_party/boringssl/crypto/evp/p_x25519.cc +371 -0
  187. package/runtime/third_party/boringssl/crypto/evp/p_xwing.cc +300 -0
  188. package/runtime/third_party/boringssl/crypto/evp/pbkdf.cc +105 -0
  189. package/runtime/third_party/boringssl/crypto/evp/print.cc +287 -0
  190. package/runtime/third_party/boringssl/crypto/evp/scrypt.cc +218 -0
  191. package/runtime/third_party/boringssl/crypto/evp/sign.cc +95 -0
  192. package/runtime/third_party/boringssl/crypto/ex_data.cc +140 -0
  193. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes.cc.inc +208 -0
  194. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes_nohw.cc.inc +1279 -0
  195. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cbc.cc.inc +132 -0
  196. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cfb.cc.inc +168 -0
  197. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ctr.cc.inc +102 -0
  198. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm.cc.inc +614 -0
  199. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm_nohw.cc.inc +304 -0
  200. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/internal.h +590 -0
  201. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.cc.inc +211 -0
  202. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.cc.inc +97 -0
  203. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ofb.cc.inc +55 -0
  204. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm.cc +288 -0
  205. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm_interface.h +953 -0
  206. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/add.cc.inc +276 -0
  207. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +573 -0
  208. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bn.cc.inc +377 -0
  209. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bytes.cc.inc +230 -0
  210. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/cmp.cc.inc +161 -0
  211. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/ctx.cc.inc +127 -0
  212. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div.cc.inc +738 -0
  213. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div_extra.cc.inc +90 -0
  214. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.cc.inc +743 -0
  215. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd.cc.inc +281 -0
  216. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.cc.inc +327 -0
  217. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/generic.cc.inc +579 -0
  218. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/internal.h +810 -0
  219. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/jacobi.cc.inc +101 -0
  220. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery.cc.inc +408 -0
  221. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.cc.inc +179 -0
  222. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/mul.cc.inc +347 -0
  223. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/prime.cc.inc +931 -0
  224. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/random.cc.inc +261 -0
  225. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.cc.inc +144 -0
  226. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +109 -0
  227. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/shift.cc.inc +317 -0
  228. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/sqrt.cc.inc +370 -0
  229. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/aead.cc.inc +619 -0
  230. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/cipher.cc.inc +837 -0
  231. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.cc.inc +1240 -0
  232. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aesccm.cc.inc +440 -0
  233. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +461 -0
  234. package/runtime/third_party/boringssl/crypto/fipsmodule/cmac/cmac.cc.inc +293 -0
  235. package/runtime/third_party/boringssl/crypto/fipsmodule/delocate.h +95 -0
  236. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/check.cc.inc +198 -0
  237. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/dh.cc.inc +401 -0
  238. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/internal.h +63 -0
  239. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digest.cc.inc +221 -0
  240. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digests.cc.inc +184 -0
  241. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/internal.h +72 -0
  242. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +166 -0
  243. package/runtime/third_party/boringssl/crypto/fipsmodule/digestsign/digestsign.cc.inc +230 -0
  244. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  245. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec.cc.inc +1024 -0
  246. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_key.cc.inc +536 -0
  247. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.cc.inc +379 -0
  248. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/felem.cc.inc +250 -0
  249. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/internal.h +752 -0
  250. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/oct.cc.inc +174 -0
  251. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz-table.h +9502 -0
  252. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.cc.inc +740 -0
  253. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.h +207 -0
  254. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256.cc.inc +578 -0
  255. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256_table.h +297 -0
  256. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/scalar.cc.inc +184 -0
  257. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple.cc.inc +246 -0
  258. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.cc.inc +274 -0
  259. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/util.cc.inc +258 -0
  260. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/wnaf.cc.inc +224 -0
  261. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.cc.inc +91 -0
  262. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +288 -0
  263. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/internal.h +57 -0
  264. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/internal.h +38 -0
  265. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/jitter.cc.inc +487 -0
  266. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  267. package/runtime/third_party/boringssl/crypto/fipsmodule/fips_shared_support.cc +28 -0
  268. package/runtime/third_party/boringssl/crypto/fipsmodule/hkdf/hkdf.cc.inc +114 -0
  269. package/runtime/third_party/boringssl/crypto/fipsmodule/hmac/hmac.cc.inc +218 -0
  270. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/internal.h +165 -0
  271. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/keccak.cc.inc +647 -0
  272. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  273. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/mldsa.cc.inc +3323 -0
  274. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  275. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/mlkem.cc.inc +1856 -0
  276. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  277. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.cc.inc +401 -0
  278. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/internal.h +99 -0
  279. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/rand.cc.inc +486 -0
  280. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +167 -0
  281. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/padding.cc.inc +371 -0
  282. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa.cc.inc +996 -0
  283. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.cc.inc +1000 -0
  284. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/fips.cc.inc +129 -0
  285. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/self_check.cc.inc +1093 -0
  286. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/internal.h +112 -0
  287. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +330 -0
  288. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/internal.h +205 -0
  289. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha1.cc.inc +404 -0
  290. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha256.cc.inc +315 -0
  291. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha512.cc.inc +473 -0
  292. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/address.h +144 -0
  293. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  294. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.cc.inc +179 -0
  295. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.h +48 -0
  296. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.cc.inc +164 -0
  297. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.h +58 -0
  298. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/params.h +178 -0
  299. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +690 -0
  300. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.cc.inc +326 -0
  301. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.h +71 -0
  302. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.cc.inc +172 -0
  303. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.h +40 -0
  304. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/internal.h +33 -0
  305. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/kdf.cc.inc +180 -0
  306. package/runtime/third_party/boringssl/crypto/fuzzer_mode.cc +30 -0
  307. package/runtime/third_party/boringssl/crypto/hpke/hpke.cc +1514 -0
  308. package/runtime/third_party/boringssl/crypto/hrss/asm/poly_rq_mul.S +8489 -0
  309. package/runtime/third_party/boringssl/crypto/hrss/hrss.cc +2189 -0
  310. package/runtime/third_party/boringssl/crypto/hrss/internal.h +64 -0
  311. package/runtime/third_party/boringssl/crypto/internal.h +1767 -0
  312. package/runtime/third_party/boringssl/crypto/lhash/internal.h +222 -0
  313. package/runtime/third_party/boringssl/crypto/lhash/lhash.cc +312 -0
  314. package/runtime/third_party/boringssl/crypto/md4/md4.cc +207 -0
  315. package/runtime/third_party/boringssl/crypto/md5/internal.h +34 -0
  316. package/runtime/third_party/boringssl/crypto/md5/md5.cc +255 -0
  317. package/runtime/third_party/boringssl/crypto/mem.cc +577 -0
  318. package/runtime/third_party/boringssl/crypto/mem_internal.h +706 -0
  319. package/runtime/third_party/boringssl/crypto/mldsa/mldsa.cc +296 -0
  320. package/runtime/third_party/boringssl/crypto/mlkem/mlkem.cc +108 -0
  321. package/runtime/third_party/boringssl/crypto/obj/obj.cc +494 -0
  322. package/runtime/third_party/boringssl/crypto/obj/obj_dat.h +11722 -0
  323. package/runtime/third_party/boringssl/crypto/obj/obj_xref.cc +83 -0
  324. package/runtime/third_party/boringssl/crypto/params_internal.h +30 -0
  325. package/runtime/third_party/boringssl/crypto/pem/internal.h +135 -0
  326. package/runtime/third_party/boringssl/crypto/pem/pem_all.cc +153 -0
  327. package/runtime/third_party/boringssl/crypto/pem/pem_info.cc +250 -0
  328. package/runtime/third_party/boringssl/crypto/pem/pem_lib.cc +707 -0
  329. package/runtime/third_party/boringssl/crypto/pem/pem_oth.cc +45 -0
  330. package/runtime/third_party/boringssl/crypto/pem/pem_pk8.cc +211 -0
  331. package/runtime/third_party/boringssl/crypto/pem/pem_pkey.cc +147 -0
  332. package/runtime/third_party/boringssl/crypto/pem/pem_x509.cc +25 -0
  333. package/runtime/third_party/boringssl/crypto/pem/pem_xaux.cc +25 -0
  334. package/runtime/third_party/boringssl/crypto/pkcs7/internal.h +67 -0
  335. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7.cc +198 -0
  336. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7_x509.cc +527 -0
  337. package/runtime/third_party/boringssl/crypto/pkcs8/internal.h +98 -0
  338. package/runtime/third_party/boringssl/crypto/pkcs8/p5_pbev2.cc +286 -0
  339. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8.cc +473 -0
  340. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8_x509.cc +1328 -0
  341. package/runtime/third_party/boringssl/crypto/poly1305/internal.h +54 -0
  342. package/runtime/third_party/boringssl/crypto/poly1305/poly1305.cc +315 -0
  343. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm.cc +294 -0
  344. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm_asm.S +2017 -0
  345. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_vec.cc +853 -0
  346. package/runtime/third_party/boringssl/crypto/pool/internal.h +95 -0
  347. package/runtime/third_party/boringssl/crypto/pool/pool.cc +282 -0
  348. package/runtime/third_party/boringssl/crypto/rand/deterministic.cc +58 -0
  349. package/runtime/third_party/boringssl/crypto/rand/fork_detect.cc +222 -0
  350. package/runtime/third_party/boringssl/crypto/rand/forkunsafe.cc +44 -0
  351. package/runtime/third_party/boringssl/crypto/rand/getentropy.cc +53 -0
  352. package/runtime/third_party/boringssl/crypto/rand/internal.h +67 -0
  353. package/runtime/third_party/boringssl/crypto/rand/ios.cc +35 -0
  354. package/runtime/third_party/boringssl/crypto/rand/rand.cc +79 -0
  355. package/runtime/third_party/boringssl/crypto/rand/trusty.cc +39 -0
  356. package/runtime/third_party/boringssl/crypto/rand/urandom.cc +149 -0
  357. package/runtime/third_party/boringssl/crypto/rand/windows.cc +91 -0
  358. package/runtime/third_party/boringssl/crypto/rc4/rc4.cc +56 -0
  359. package/runtime/third_party/boringssl/crypto/refcount.cc +49 -0
  360. package/runtime/third_party/boringssl/crypto/rsa/internal.h +51 -0
  361. package/runtime/third_party/boringssl/crypto/rsa/rsa_asn1.cc +404 -0
  362. package/runtime/third_party/boringssl/crypto/rsa/rsa_crypt.cc +530 -0
  363. package/runtime/third_party/boringssl/crypto/rsa/rsa_extra.cc +30 -0
  364. package/runtime/third_party/boringssl/crypto/rsa/rsa_print.cc +25 -0
  365. package/runtime/third_party/boringssl/crypto/sha/sha1.cc +55 -0
  366. package/runtime/third_party/boringssl/crypto/sha/sha256.cc +89 -0
  367. package/runtime/third_party/boringssl/crypto/sha/sha512.cc +106 -0
  368. package/runtime/third_party/boringssl/crypto/siphash/siphash.cc +81 -0
  369. package/runtime/third_party/boringssl/crypto/slhdsa/slhdsa.cc +167 -0
  370. package/runtime/third_party/boringssl/crypto/spake2plus/internal.h +204 -0
  371. package/runtime/third_party/boringssl/crypto/spake2plus/spake2plus.cc +501 -0
  372. package/runtime/third_party/boringssl/crypto/stack/stack.cc +462 -0
  373. package/runtime/third_party/boringssl/crypto/thread.cc +68 -0
  374. package/runtime/third_party/boringssl/crypto/thread_none.cc +48 -0
  375. package/runtime/third_party/boringssl/crypto/thread_pthread.cc +138 -0
  376. package/runtime/third_party/boringssl/crypto/thread_win.cc +227 -0
  377. package/runtime/third_party/boringssl/crypto/trust_token/internal.h +405 -0
  378. package/runtime/third_party/boringssl/crypto/trust_token/pmbtoken.cc +1672 -0
  379. package/runtime/third_party/boringssl/crypto/trust_token/trust_token.cc +701 -0
  380. package/runtime/third_party/boringssl/crypto/trust_token/voprf.cc +1266 -0
  381. package/runtime/third_party/boringssl/crypto/x509/a_digest.cc +52 -0
  382. package/runtime/third_party/boringssl/crypto/x509/a_sign.cc +100 -0
  383. package/runtime/third_party/boringssl/crypto/x509/a_verify.cc +77 -0
  384. package/runtime/third_party/boringssl/crypto/x509/algorithm.cc +167 -0
  385. package/runtime/third_party/boringssl/crypto/x509/asn1_gen.cc +540 -0
  386. package/runtime/third_party/boringssl/crypto/x509/by_dir.cc +301 -0
  387. package/runtime/third_party/boringssl/crypto/x509/by_file.cc +226 -0
  388. package/runtime/third_party/boringssl/crypto/x509/i2d_pr.cc +37 -0
  389. package/runtime/third_party/boringssl/crypto/x509/internal.h +697 -0
  390. package/runtime/third_party/boringssl/crypto/x509/name_print.cc +187 -0
  391. package/runtime/third_party/boringssl/crypto/x509/policy.cc +686 -0
  392. package/runtime/third_party/boringssl/crypto/x509/rsa_pss.cc +187 -0
  393. package/runtime/third_party/boringssl/crypto/x509/t_crl.cc +106 -0
  394. package/runtime/third_party/boringssl/crypto/x509/t_req.cc +206 -0
  395. package/runtime/third_party/boringssl/crypto/x509/t_x509.cc +292 -0
  396. package/runtime/third_party/boringssl/crypto/x509/t_x509a.cc +81 -0
  397. package/runtime/third_party/boringssl/crypto/x509/v3_akey.cc +174 -0
  398. package/runtime/third_party/boringssl/crypto/x509/v3_akeya.cc +31 -0
  399. package/runtime/third_party/boringssl/crypto/x509/v3_alt.cc +636 -0
  400. package/runtime/third_party/boringssl/crypto/x509/v3_bcons.cc +96 -0
  401. package/runtime/third_party/boringssl/crypto/x509/v3_bitst.cc +100 -0
  402. package/runtime/third_party/boringssl/crypto/x509/v3_conf.cc +369 -0
  403. package/runtime/third_party/boringssl/crypto/x509/v3_cpols.cc +417 -0
  404. package/runtime/third_party/boringssl/crypto/x509/v3_crld.cc +471 -0
  405. package/runtime/third_party/boringssl/crypto/x509/v3_enum.cc +74 -0
  406. package/runtime/third_party/boringssl/crypto/x509/v3_extku.cc +97 -0
  407. package/runtime/third_party/boringssl/crypto/x509/v3_genn.cc +238 -0
  408. package/runtime/third_party/boringssl/crypto/x509/v3_ia5.cc +83 -0
  409. package/runtime/third_party/boringssl/crypto/x509/v3_info.cc +162 -0
  410. package/runtime/third_party/boringssl/crypto/x509/v3_int.cc +83 -0
  411. package/runtime/third_party/boringssl/crypto/x509/v3_lib.cc +349 -0
  412. package/runtime/third_party/boringssl/crypto/x509/v3_ncons.cc +798 -0
  413. package/runtime/third_party/boringssl/crypto/x509/v3_ocsp.cc +92 -0
  414. package/runtime/third_party/boringssl/crypto/x509/v3_pcons.cc +102 -0
  415. package/runtime/third_party/boringssl/crypto/x509/v3_pmaps.cc +110 -0
  416. package/runtime/third_party/boringssl/crypto/x509/v3_prn.cc +183 -0
  417. package/runtime/third_party/boringssl/crypto/x509/v3_purp.cc +580 -0
  418. package/runtime/third_party/boringssl/crypto/x509/v3_skey.cc +128 -0
  419. package/runtime/third_party/boringssl/crypto/x509/v3_utl.cc +1311 -0
  420. package/runtime/third_party/boringssl/crypto/x509/x509.cc +47 -0
  421. package/runtime/third_party/boringssl/crypto/x509/x509_att.cc +188 -0
  422. package/runtime/third_party/boringssl/crypto/x509/x509_cmp.cc +243 -0
  423. package/runtime/third_party/boringssl/crypto/x509/x509_d2.cc +66 -0
  424. package/runtime/third_party/boringssl/crypto/x509/x509_def.cc +42 -0
  425. package/runtime/third_party/boringssl/crypto/x509/x509_ext.cc +161 -0
  426. package/runtime/third_party/boringssl/crypto/x509/x509_lu.cc +570 -0
  427. package/runtime/third_party/boringssl/crypto/x509/x509_mtc.cc +598 -0
  428. package/runtime/third_party/boringssl/crypto/x509/x509_obj.cc +169 -0
  429. package/runtime/third_party/boringssl/crypto/x509/x509_req.cc +248 -0
  430. package/runtime/third_party/boringssl/crypto/x509/x509_set.cc +166 -0
  431. package/runtime/third_party/boringssl/crypto/x509/x509_trs.cc +123 -0
  432. package/runtime/third_party/boringssl/crypto/x509/x509_txt.cc +147 -0
  433. package/runtime/third_party/boringssl/crypto/x509/x509_v3.cc +249 -0
  434. package/runtime/third_party/boringssl/crypto/x509/x509_vfy.cc +1531 -0
  435. package/runtime/third_party/boringssl/crypto/x509/x509_vpm.cc +449 -0
  436. package/runtime/third_party/boringssl/crypto/x509/x509cset.cc +222 -0
  437. package/runtime/third_party/boringssl/crypto/x509/x509name.cc +377 -0
  438. package/runtime/third_party/boringssl/crypto/x509/x509rset.cc +55 -0
  439. package/runtime/third_party/boringssl/crypto/x509/x509spki.cc +91 -0
  440. package/runtime/third_party/boringssl/crypto/x509/x_algor.cc +223 -0
  441. package/runtime/third_party/boringssl/crypto/x509/x_all.cc +352 -0
  442. package/runtime/third_party/boringssl/crypto/x509/x_attrib.cc +61 -0
  443. package/runtime/third_party/boringssl/crypto/x509/x_crl.cc +325 -0
  444. package/runtime/third_party/boringssl/crypto/x509/x_exten.cc +42 -0
  445. package/runtime/third_party/boringssl/crypto/x509/x_name.cc +407 -0
  446. package/runtime/third_party/boringssl/crypto/x509/x_pubkey.cc +199 -0
  447. package/runtime/third_party/boringssl/crypto/x509/x_req.cc +80 -0
  448. package/runtime/third_party/boringssl/crypto/x509/x_sig.cc +51 -0
  449. package/runtime/third_party/boringssl/crypto/x509/x_spki.cc +44 -0
  450. package/runtime/third_party/boringssl/crypto/x509/x_x509.cc +495 -0
  451. package/runtime/third_party/boringssl/crypto/x509/x_x509a.cc +169 -0
  452. package/runtime/third_party/boringssl/crypto/xwing/xwing.cc +257 -0
  453. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-apple.S +1326 -0
  454. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-linux.S +1327 -0
  455. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-apple.S +1252 -0
  456. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-linux.S +1253 -0
  457. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-apple.S +873 -0
  458. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-linux.S +885 -0
  459. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-apple.S +2490 -0
  460. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-linux.S +2530 -0
  461. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-apple.S +2413 -0
  462. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-linux.S +2397 -0
  463. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv7-linux.S +784 -0
  464. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-apple.S +792 -0
  465. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-linux.S +786 -0
  466. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-win.S +798 -0
  467. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-apple.S +2912 -0
  468. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-linux.S +2907 -0
  469. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-win.S +2915 -0
  470. package/runtime/third_party/boringssl/gen/bcm/armv4-mont-linux.S +932 -0
  471. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-apple.S +1440 -0
  472. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-linux.S +1440 -0
  473. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-win.S +1446 -0
  474. package/runtime/third_party/boringssl/gen/bcm/bn-586-apple.S +530 -0
  475. package/runtime/third_party/boringssl/gen/bcm/bn-586-linux.S +540 -0
  476. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-apple.S +88 -0
  477. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-linux.S +87 -0
  478. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-win.S +87 -0
  479. package/runtime/third_party/boringssl/gen/bcm/bsaes-armv7-linux.S +1520 -0
  480. package/runtime/third_party/boringssl/gen/bcm/co-586-apple.S +1256 -0
  481. package/runtime/third_party/boringssl/gen/bcm/co-586-linux.S +1264 -0
  482. package/runtime/third_party/boringssl/gen/bcm/ghash-armv4-linux.S +242 -0
  483. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-apple.S +337 -0
  484. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-linux.S +335 -0
  485. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-win.S +341 -0
  486. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-apple.S +288 -0
  487. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-linux.S +292 -0
  488. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-apple.S +426 -0
  489. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-linux.S +425 -0
  490. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-apple.S +322 -0
  491. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-linux.S +328 -0
  492. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-apple.S +1134 -0
  493. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-linux.S +1129 -0
  494. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv7-linux.S +244 -0
  495. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-apple.S +567 -0
  496. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-linux.S +563 -0
  497. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-win.S +571 -0
  498. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-apple.S +1744 -0
  499. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-linux.S +1725 -0
  500. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-win.S +1765 -0
  501. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-apple.S +4544 -0
  502. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-linux.S +4600 -0
  503. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-apple.S +310 -0
  504. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-linux.S +310 -0
  505. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-win.S +310 -0
  506. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-apple.S +321 -0
  507. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-linux.S +335 -0
  508. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-apple.S +58 -0
  509. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-linux.S +57 -0
  510. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-apple.S +1756 -0
  511. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-linux.S +1751 -0
  512. package/runtime/third_party/boringssl/gen/bcm/sha1-586-apple.S +3782 -0
  513. package/runtime/third_party/boringssl/gen/bcm/sha1-586-linux.S +3788 -0
  514. package/runtime/third_party/boringssl/gen/bcm/sha1-armv4-large-linux.S +1479 -0
  515. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-apple.S +1219 -0
  516. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-linux.S +1218 -0
  517. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-win.S +1222 -0
  518. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-apple.S +5454 -0
  519. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-linux.S +5450 -0
  520. package/runtime/third_party/boringssl/gen/bcm/sha256-586-apple.S +5593 -0
  521. package/runtime/third_party/boringssl/gen/bcm/sha256-586-linux.S +5599 -0
  522. package/runtime/third_party/boringssl/gen/bcm/sha256-armv4-linux.S +2840 -0
  523. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-apple.S +1195 -0
  524. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-linux.S +1194 -0
  525. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-win.S +1198 -0
  526. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-apple.S +4173 -0
  527. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-linux.S +4170 -0
  528. package/runtime/third_party/boringssl/gen/bcm/sha512-586-apple.S +2406 -0
  529. package/runtime/third_party/boringssl/gen/bcm/sha512-586-linux.S +2410 -0
  530. package/runtime/third_party/boringssl/gen/bcm/sha512-armv4-linux.S +1857 -0
  531. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-apple.S +1598 -0
  532. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-linux.S +1597 -0
  533. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-win.S +1601 -0
  534. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-apple.S +2979 -0
  535. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-linux.S +2978 -0
  536. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv7-linux.S +1225 -0
  537. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-apple.S +1238 -0
  538. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-linux.S +1220 -0
  539. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-win.S +1256 -0
  540. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-apple.S +680 -0
  541. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-linux.S +706 -0
  542. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-apple.S +1146 -0
  543. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-linux.S +1133 -0
  544. package/runtime/third_party/boringssl/gen/bcm/x86-mont-apple.S +216 -0
  545. package/runtime/third_party/boringssl/gen/bcm/x86-mont-linux.S +218 -0
  546. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-apple.S +1238 -0
  547. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-linux.S +1237 -0
  548. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-apple.S +3644 -0
  549. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-linux.S +3628 -0
  550. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +325 -0
  551. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +325 -0
  552. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-apple.S +3113 -0
  553. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-linux.S +3091 -0
  554. package/runtime/third_party/boringssl/gen/crypto/chacha-armv4-linux.S +1450 -0
  555. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-apple.S +1969 -0
  556. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-linux.S +1967 -0
  557. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-win.S +1973 -0
  558. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-apple.S +957 -0
  559. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-linux.S +961 -0
  560. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-apple.S +1608 -0
  561. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-linux.S +1611 -0
  562. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-apple.S +3010 -0
  563. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-linux.S +3008 -0
  564. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-win.S +3014 -0
  565. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-apple.S +8903 -0
  566. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-linux.S +8940 -0
  567. package/runtime/third_party/boringssl/gen/crypto/err_data.cc +1578 -0
  568. package/runtime/third_party/boringssl/gen/crypto/md5-586-apple.S +684 -0
  569. package/runtime/third_party/boringssl/gen/crypto/md5-586-linux.S +686 -0
  570. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-apple.S +690 -0
  571. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-linux.S +695 -0
  572. package/runtime/third_party/boringssl/include/openssl/aead.h +650 -0
  573. package/runtime/third_party/boringssl/include/openssl/aes.h +173 -0
  574. package/runtime/third_party/boringssl/include/openssl/arm_arch.h +24 -0
  575. package/runtime/third_party/boringssl/include/openssl/asm_base.h +219 -0
  576. package/runtime/third_party/boringssl/include/openssl/asn1.h +2002 -0
  577. package/runtime/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  578. package/runtime/third_party/boringssl/include/openssl/asn1t.h +584 -0
  579. package/runtime/third_party/boringssl/include/openssl/base.h +548 -0
  580. package/runtime/third_party/boringssl/include/openssl/base64.h +156 -0
  581. package/runtime/third_party/boringssl/include/openssl/bio.h +1061 -0
  582. package/runtime/third_party/boringssl/include/openssl/blake2.h +63 -0
  583. package/runtime/third_party/boringssl/include/openssl/blowfish.h +58 -0
  584. package/runtime/third_party/boringssl/include/openssl/bn.h +986 -0
  585. package/runtime/third_party/boringssl/include/openssl/buf.h +95 -0
  586. package/runtime/third_party/boringssl/include/openssl/buffer.h +18 -0
  587. package/runtime/third_party/boringssl/include/openssl/bytestring.h +798 -0
  588. package/runtime/third_party/boringssl/include/openssl/cast.h +91 -0
  589. package/runtime/third_party/boringssl/include/openssl/chacha.h +47 -0
  590. package/runtime/third_party/boringssl/include/openssl/cipher.h +819 -0
  591. package/runtime/third_party/boringssl/include/openssl/cmac.h +91 -0
  592. package/runtime/third_party/boringssl/include/openssl/cms.h +147 -0
  593. package/runtime/third_party/boringssl/include/openssl/conf.h +136 -0
  594. package/runtime/third_party/boringssl/include/openssl/configuration.h +18 -0
  595. package/runtime/third_party/boringssl/include/openssl/cpu.h +18 -0
  596. package/runtime/third_party/boringssl/include/openssl/crypto.h +235 -0
  597. package/runtime/third_party/boringssl/include/openssl/ctrdrbg.h +116 -0
  598. package/runtime/third_party/boringssl/include/openssl/curve25519.h +309 -0
  599. package/runtime/third_party/boringssl/include/openssl/des.h +134 -0
  600. package/runtime/third_party/boringssl/include/openssl/dh.h +336 -0
  601. package/runtime/third_party/boringssl/include/openssl/digest.h +399 -0
  602. package/runtime/third_party/boringssl/include/openssl/dsa.h +392 -0
  603. package/runtime/third_party/boringssl/include/openssl/dtls1.h +16 -0
  604. package/runtime/third_party/boringssl/include/openssl/e_os2.h +18 -0
  605. package/runtime/third_party/boringssl/include/openssl/ec.h +530 -0
  606. package/runtime/third_party/boringssl/include/openssl/ec_key.h +358 -0
  607. package/runtime/third_party/boringssl/include/openssl/ecdh.h +67 -0
  608. package/runtime/third_party/boringssl/include/openssl/ecdsa.h +242 -0
  609. package/runtime/third_party/boringssl/include/openssl/engine.h +109 -0
  610. package/runtime/third_party/boringssl/include/openssl/err.h +416 -0
  611. package/runtime/third_party/boringssl/include/openssl/evp.h +1645 -0
  612. package/runtime/third_party/boringssl/include/openssl/evp_errors.h +66 -0
  613. package/runtime/third_party/boringssl/include/openssl/ex_data.h +117 -0
  614. package/runtime/third_party/boringssl/include/openssl/hkdf.h +68 -0
  615. package/runtime/third_party/boringssl/include/openssl/hmac.h +151 -0
  616. package/runtime/third_party/boringssl/include/openssl/hpke.h +456 -0
  617. package/runtime/third_party/boringssl/include/openssl/hrss.h +108 -0
  618. package/runtime/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  619. package/runtime/third_party/boringssl/include/openssl/kdf.h +92 -0
  620. package/runtime/third_party/boringssl/include/openssl/lhash.h +18 -0
  621. package/runtime/third_party/boringssl/include/openssl/md4.h +73 -0
  622. package/runtime/third_party/boringssl/include/openssl/md5.h +67 -0
  623. package/runtime/third_party/boringssl/include/openssl/mem.h +215 -0
  624. package/runtime/third_party/boringssl/include/openssl/mldsa.h +486 -0
  625. package/runtime/third_party/boringssl/include/openssl/mlkem.h +222 -0
  626. package/runtime/third_party/boringssl/include/openssl/nid.h +5561 -0
  627. package/runtime/third_party/boringssl/include/openssl/obj.h +225 -0
  628. package/runtime/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  629. package/runtime/third_party/boringssl/include/openssl/objects.h +18 -0
  630. package/runtime/third_party/boringssl/include/openssl/opensslconf.h +108 -0
  631. package/runtime/third_party/boringssl/include/openssl/opensslv.h +18 -0
  632. package/runtime/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  633. package/runtime/third_party/boringssl/include/openssl/params.h +42 -0
  634. package/runtime/third_party/boringssl/include/openssl/pem.h +769 -0
  635. package/runtime/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  636. package/runtime/third_party/boringssl/include/openssl/pkcs7.h +239 -0
  637. package/runtime/third_party/boringssl/include/openssl/pkcs8.h +267 -0
  638. package/runtime/third_party/boringssl/include/openssl/poly1305.h +52 -0
  639. package/runtime/third_party/boringssl/include/openssl/pool.h +137 -0
  640. package/runtime/third_party/boringssl/include/openssl/posix_time.h +51 -0
  641. package/runtime/third_party/boringssl/include/openssl/prefix_symbols.h +8000 -0
  642. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_S.h +633 -0
  643. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_c.h +329 -0
  644. package/runtime/third_party/boringssl/include/openssl/rand.h +138 -0
  645. package/runtime/third_party/boringssl/include/openssl/rc4.h +54 -0
  646. package/runtime/third_party/boringssl/include/openssl/ripemd.h +71 -0
  647. package/runtime/third_party/boringssl/include/openssl/rsa.h +893 -0
  648. package/runtime/third_party/boringssl/include/openssl/safestack.h +16 -0
  649. package/runtime/third_party/boringssl/include/openssl/service_indicator.h +19 -0
  650. package/runtime/third_party/boringssl/include/openssl/sha.h +108 -0
  651. package/runtime/third_party/boringssl/include/openssl/sha2.h +201 -0
  652. package/runtime/third_party/boringssl/include/openssl/siphash.h +37 -0
  653. package/runtime/third_party/boringssl/include/openssl/slhdsa.h +250 -0
  654. package/runtime/third_party/boringssl/include/openssl/span.h +376 -0
  655. package/runtime/third_party/boringssl/include/openssl/srtp.h +18 -0
  656. package/runtime/third_party/boringssl/include/openssl/ssl.h +7211 -0
  657. package/runtime/third_party/boringssl/include/openssl/ssl3.h +171 -0
  658. package/runtime/third_party/boringssl/include/openssl/stack.h +688 -0
  659. package/runtime/third_party/boringssl/include/openssl/target.h +246 -0
  660. package/runtime/third_party/boringssl/include/openssl/thread.h +114 -0
  661. package/runtime/third_party/boringssl/include/openssl/time.h +22 -0
  662. package/runtime/third_party/boringssl/include/openssl/tls1.h +263 -0
  663. package/runtime/third_party/boringssl/include/openssl/tls_prf.h +47 -0
  664. package/runtime/third_party/boringssl/include/openssl/trust_token.h +349 -0
  665. package/runtime/third_party/boringssl/include/openssl/type_check.h +37 -0
  666. package/runtime/third_party/boringssl/include/openssl/types.h +18 -0
  667. package/runtime/third_party/boringssl/include/openssl/x509.h +5404 -0
  668. package/runtime/third_party/boringssl/include/openssl/x509_vfy.h +18 -0
  669. package/runtime/third_party/boringssl/include/openssl/x509v3.h +63 -0
  670. package/runtime/third_party/boringssl/include/openssl/x509v3_errors.h +84 -0
  671. package/runtime/third_party/boringssl/include/openssl/xwing.h +115 -0
  672. package/runtime/third_party/boringssl/sources.json +696 -0
  673. package/runtime/third_party/boringssl/ssl/bio_ssl.cc +196 -0
  674. package/runtime/third_party/boringssl/ssl/d1_both.cc +1137 -0
  675. package/runtime/third_party/boringssl/ssl/d1_lib.cc +245 -0
  676. package/runtime/third_party/boringssl/ssl/d1_pkt.cc +322 -0
  677. package/runtime/third_party/boringssl/ssl/d1_srtp.cc +128 -0
  678. package/runtime/third_party/boringssl/ssl/dtls_method.cc +216 -0
  679. package/runtime/third_party/boringssl/ssl/dtls_record.cc +586 -0
  680. package/runtime/third_party/boringssl/ssl/encrypted_client_hello.cc +1110 -0
  681. package/runtime/third_party/boringssl/ssl/extensions.cc +5368 -0
  682. package/runtime/third_party/boringssl/ssl/handoff.cc +625 -0
  683. package/runtime/third_party/boringssl/ssl/handshake.cc +694 -0
  684. package/runtime/third_party/boringssl/ssl/handshake_client.cc +1958 -0
  685. package/runtime/third_party/boringssl/ssl/handshake_server.cc +1875 -0
  686. package/runtime/third_party/boringssl/ssl/internal.h +4506 -0
  687. package/runtime/third_party/boringssl/ssl/s3_both.cc +555 -0
  688. package/runtime/third_party/boringssl/ssl/s3_lib.cc +88 -0
  689. package/runtime/third_party/boringssl/ssl/s3_pkt.cc +396 -0
  690. package/runtime/third_party/boringssl/ssl/ssl_aead_ctx.cc +416 -0
  691. package/runtime/third_party/boringssl/ssl/ssl_asn1.cc +851 -0
  692. package/runtime/third_party/boringssl/ssl/ssl_buffer.cc +304 -0
  693. package/runtime/third_party/boringssl/ssl/ssl_cert.cc +723 -0
  694. package/runtime/third_party/boringssl/ssl/ssl_cipher.cc +1762 -0
  695. package/runtime/third_party/boringssl/ssl/ssl_credential.cc +913 -0
  696. package/runtime/third_party/boringssl/ssl/ssl_file.cc +375 -0
  697. package/runtime/third_party/boringssl/ssl/ssl_key_share.cc +445 -0
  698. package/runtime/third_party/boringssl/ssl/ssl_lib.cc +4132 -0
  699. package/runtime/third_party/boringssl/ssl/ssl_privkey.cc +973 -0
  700. package/runtime/third_party/boringssl/ssl/ssl_session.cc +1273 -0
  701. package/runtime/third_party/boringssl/ssl/ssl_stat.cc +162 -0
  702. package/runtime/third_party/boringssl/ssl/ssl_transcript.cc +224 -0
  703. package/runtime/third_party/boringssl/ssl/ssl_versions.cc +436 -0
  704. package/runtime/third_party/boringssl/ssl/ssl_x509.cc +1229 -0
  705. package/runtime/third_party/boringssl/ssl/t1_enc.cc +266 -0
  706. package/runtime/third_party/boringssl/ssl/tls13_both.cc +764 -0
  707. package/runtime/third_party/boringssl/ssl/tls13_client.cc +1325 -0
  708. package/runtime/third_party/boringssl/ssl/tls13_enc.cc +746 -0
  709. package/runtime/third_party/boringssl/ssl/tls13_server.cc +1623 -0
  710. package/runtime/third_party/boringssl/ssl/tls_method.cc +266 -0
  711. package/runtime/third_party/boringssl/ssl/tls_record.cc +524 -0
  712. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_mul.S +178 -0
  713. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_square.S +146 -0
  714. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_mul.S +177 -0
  715. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_sqr.S +166 -0
  716. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  717. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  718. package/runtime/third_party/boringssl/third_party/fiat/curve25519_32.h +1571 -0
  719. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64.h +978 -0
  720. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_adx.h +700 -0
  721. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_msvc.h +1281 -0
  722. package/runtime/third_party/boringssl/third_party/fiat/p256_32.h +4760 -0
  723. package/runtime/third_party/boringssl/third_party/fiat/p256_64.h +1984 -0
  724. package/runtime/third_party/boringssl/third_party/fiat/p256_64_msvc.h +1939 -0
  725. package/runtime/third_party/boringssl/third_party/fiat/p256_field.c.inc +26 -0
  726. package/runtime/third_party/boringssl/third_party/fiat/p256_field_32.br.c.inc +71 -0
  727. package/runtime/third_party/boringssl/third_party/fiat/p256_field_64.br.c.inc +84 -0
  728. package/runtime/third_party/boringssl/third_party/fiat/p256_point.br.c.inc +112 -0
  729. package/runtime/third_party/v8-ieee754/README.md +2 -1
  730. package/runtime/third_party/v8-ieee754/convert.py +4 -0
  731. package/runtime/third_party/v8-ieee754/ieee754.c +1 -1
  732. package/runtime/third_party/bearssl/LICENSE.txt +0 -21
  733. package/runtime/third_party/bearssl/README.txt +0 -136
  734. package/runtime/third_party/bearssl/VERSION +0 -1
  735. package/runtime/third_party/bearssl/inc/bearssl.h +0 -183
  736. package/runtime/third_party/bearssl/inc/bearssl_aead.h +0 -1059
  737. package/runtime/third_party/bearssl/inc/bearssl_block.h +0 -2618
  738. package/runtime/third_party/bearssl/inc/bearssl_ec.h +0 -967
  739. package/runtime/third_party/bearssl/inc/bearssl_hash.h +0 -1346
  740. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +0 -241
  741. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +0 -284
  742. package/runtime/third_party/bearssl/inc/bearssl_pem.h +0 -294
  743. package/runtime/third_party/bearssl/inc/bearssl_prf.h +0 -150
  744. package/runtime/third_party/bearssl/inc/bearssl_rand.h +0 -397
  745. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +0 -1655
  746. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +0 -4296
  747. package/runtime/third_party/bearssl/inc/bearssl_x509.h +0 -1474
  748. package/runtime/third_party/bearssl/src/aead/ccm.c +0 -346
  749. package/runtime/third_party/bearssl/src/aead/eax.c +0 -525
  750. package/runtime/third_party/bearssl/src/aead/gcm.c +0 -318
  751. package/runtime/third_party/bearssl/src/codec/ccopy.c +0 -44
  752. package/runtime/third_party/bearssl/src/codec/dec16be.c +0 -38
  753. package/runtime/third_party/bearssl/src/codec/dec16le.c +0 -38
  754. package/runtime/third_party/bearssl/src/codec/dec32be.c +0 -38
  755. package/runtime/third_party/bearssl/src/codec/dec32le.c +0 -38
  756. package/runtime/third_party/bearssl/src/codec/dec64be.c +0 -38
  757. package/runtime/third_party/bearssl/src/codec/dec64le.c +0 -38
  758. package/runtime/third_party/bearssl/src/codec/enc16be.c +0 -38
  759. package/runtime/third_party/bearssl/src/codec/enc16le.c +0 -38
  760. package/runtime/third_party/bearssl/src/codec/enc32be.c +0 -38
  761. package/runtime/third_party/bearssl/src/codec/enc32le.c +0 -38
  762. package/runtime/third_party/bearssl/src/codec/enc64be.c +0 -38
  763. package/runtime/third_party/bearssl/src/codec/enc64le.c +0 -38
  764. package/runtime/third_party/bearssl/src/codec/pemdec.c +0 -526
  765. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +0 -314
  766. package/runtime/third_party/bearssl/src/codec/pemenc.c +0 -173
  767. package/runtime/third_party/bearssl/src/config.h +0 -247
  768. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +0 -121
  769. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +0 -171
  770. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +0 -398
  771. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +0 -390
  772. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +0 -1478
  773. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +0 -800
  774. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +0 -605
  775. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +0 -831
  776. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +0 -46
  777. package/runtime/third_party/bearssl/src/ec/ec_default.c +0 -36
  778. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +0 -86
  779. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +0 -2124
  780. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +0 -1469
  781. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +0 -1765
  782. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +0 -1781
  783. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +0 -824
  784. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +0 -826
  785. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +0 -85
  786. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +0 -51
  787. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +0 -57
  788. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +0 -64
  789. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +0 -134
  790. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +0 -36
  791. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +0 -36
  792. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +0 -36
  793. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +0 -36
  794. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +0 -47
  795. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +0 -45
  796. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +0 -174
  797. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +0 -48
  798. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +0 -166
  799. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +0 -47
  800. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +0 -45
  801. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +0 -173
  802. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +0 -48
  803. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +0 -165
  804. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +0 -121
  805. package/runtime/third_party/bearssl/src/hash/dig_oid.c +0 -84
  806. package/runtime/third_party/bearssl/src/hash/dig_size.c +0 -50
  807. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +0 -345
  808. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +0 -251
  809. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +0 -154
  810. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +0 -389
  811. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +0 -411
  812. package/runtime/third_party/bearssl/src/hash/md5.c +0 -208
  813. package/runtime/third_party/bearssl/src/hash/md5sha1.c +0 -141
  814. package/runtime/third_party/bearssl/src/hash/mgf1.c +0 -56
  815. package/runtime/third_party/bearssl/src/hash/multihash.c +0 -166
  816. package/runtime/third_party/bearssl/src/hash/sha1.c +0 -191
  817. package/runtime/third_party/bearssl/src/hash/sha2big.c +0 -285
  818. package/runtime/third_party/bearssl/src/hash/sha2small.c +0 -341
  819. package/runtime/third_party/bearssl/src/inner.h +0 -2577
  820. package/runtime/third_party/bearssl/src/int/i15_add.c +0 -46
  821. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +0 -44
  822. package/runtime/third_party/bearssl/src/int/i15_decmod.c +0 -124
  823. package/runtime/third_party/bearssl/src/int/i15_decode.c +0 -56
  824. package/runtime/third_party/bearssl/src/int/i15_decred.c +0 -100
  825. package/runtime/third_party/bearssl/src/int/i15_encode.c +0 -56
  826. package/runtime/third_party/bearssl/src/int/i15_fmont.c +0 -59
  827. package/runtime/third_party/bearssl/src/int/i15_iszero.c +0 -39
  828. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +0 -465
  829. package/runtime/third_party/bearssl/src/int/i15_modpow.c +0 -50
  830. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +0 -160
  831. package/runtime/third_party/bearssl/src/int/i15_montmul.c +0 -184
  832. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +0 -61
  833. package/runtime/third_party/bearssl/src/int/i15_muladd.c +0 -173
  834. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +0 -38
  835. package/runtime/third_party/bearssl/src/int/i15_reduce.c +0 -66
  836. package/runtime/third_party/bearssl/src/int/i15_rshift.c +0 -47
  837. package/runtime/third_party/bearssl/src/int/i15_sub.c +0 -46
  838. package/runtime/third_party/bearssl/src/int/i15_tmont.c +0 -36
  839. package/runtime/third_party/bearssl/src/int/i31_add.c +0 -46
  840. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +0 -44
  841. package/runtime/third_party/bearssl/src/int/i31_decmod.c +0 -124
  842. package/runtime/third_party/bearssl/src/int/i31_decode.c +0 -57
  843. package/runtime/third_party/bearssl/src/int/i31_decred.c +0 -103
  844. package/runtime/third_party/bearssl/src/int/i31_encode.c +0 -79
  845. package/runtime/third_party/bearssl/src/int/i31_fmont.c +0 -60
  846. package/runtime/third_party/bearssl/src/int/i31_iszero.c +0 -39
  847. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +0 -488
  848. package/runtime/third_party/bearssl/src/int/i31_modpow.c +0 -65
  849. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +0 -160
  850. package/runtime/third_party/bearssl/src/int/i31_montmul.c +0 -127
  851. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +0 -74
  852. package/runtime/third_party/bearssl/src/int/i31_muladd.c +0 -157
  853. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +0 -39
  854. package/runtime/third_party/bearssl/src/int/i31_reduce.c +0 -66
  855. package/runtime/third_party/bearssl/src/int/i31_rshift.c +0 -47
  856. package/runtime/third_party/bearssl/src/int/i31_sub.c +0 -46
  857. package/runtime/third_party/bearssl/src/int/i31_tmont.c +0 -36
  858. package/runtime/third_party/bearssl/src/int/i32_add.c +0 -51
  859. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +0 -44
  860. package/runtime/third_party/bearssl/src/int/i32_decmod.c +0 -77
  861. package/runtime/third_party/bearssl/src/int/i32_decode.c +0 -63
  862. package/runtime/third_party/bearssl/src/int/i32_decred.c +0 -107
  863. package/runtime/third_party/bearssl/src/int/i32_div32.c +0 -56
  864. package/runtime/third_party/bearssl/src/int/i32_encode.c +0 -72
  865. package/runtime/third_party/bearssl/src/int/i32_fmont.c +0 -60
  866. package/runtime/third_party/bearssl/src/int/i32_iszero.c +0 -39
  867. package/runtime/third_party/bearssl/src/int/i32_modpow.c +0 -65
  868. package/runtime/third_party/bearssl/src/int/i32_montmul.c +0 -69
  869. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +0 -56
  870. package/runtime/third_party/bearssl/src/int/i32_muladd.c +0 -138
  871. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +0 -39
  872. package/runtime/third_party/bearssl/src/int/i32_reduce.c +0 -66
  873. package/runtime/third_party/bearssl/src/int/i32_sub.c +0 -51
  874. package/runtime/third_party/bearssl/src/int/i32_tmont.c +0 -36
  875. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +0 -493
  876. package/runtime/third_party/bearssl/src/kdf/hkdf.c +0 -107
  877. package/runtime/third_party/bearssl/src/kdf/shake.c +0 -590
  878. package/runtime/third_party/bearssl/src/mac/hmac.c +0 -122
  879. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +0 -193
  880. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +0 -206
  881. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +0 -157
  882. package/runtime/third_party/bearssl/src/rand/sysrng.c +0 -252
  883. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +0 -38
  884. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +0 -36
  885. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +0 -38
  886. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +0 -38
  887. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +0 -38
  888. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +0 -38
  889. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +0 -38
  890. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +0 -36
  891. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +0 -38
  892. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +0 -38
  893. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +0 -38
  894. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +0 -36
  895. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +0 -583
  896. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +0 -99
  897. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +0 -41
  898. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +0 -44
  899. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +0 -37
  900. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +0 -43
  901. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +0 -209
  902. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +0 -320
  903. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +0 -40
  904. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +0 -44
  905. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +0 -113
  906. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +0 -152
  907. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +0 -37
  908. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +0 -608
  909. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +0 -99
  910. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +0 -41
  911. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +0 -44
  912. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +0 -37
  913. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +0 -43
  914. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +0 -203
  915. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +0 -318
  916. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +0 -40
  917. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +0 -44
  918. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +0 -106
  919. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +0 -152
  920. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +0 -41
  921. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +0 -44
  922. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +0 -37
  923. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +0 -43
  924. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +0 -160
  925. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +0 -40
  926. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +0 -44
  927. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +0 -77
  928. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +0 -57
  929. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +0 -61
  930. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +0 -64
  931. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +0 -57
  932. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +0 -63
  933. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +0 -223
  934. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +0 -60
  935. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +0 -64
  936. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +0 -125
  937. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +0 -112
  938. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +0 -145
  939. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +0 -100
  940. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +0 -121
  941. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +0 -106
  942. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +0 -121
  943. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +0 -52
  944. package/runtime/third_party/bearssl/src/settings.c +0 -306
  945. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +0 -69
  946. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +0 -67
  947. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +0 -84
  948. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +0 -142
  949. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +0 -254
  950. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +0 -157
  951. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +0 -112
  952. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +0 -328
  953. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +0 -398
  954. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +0 -104
  955. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +0 -81
  956. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +0 -114
  957. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +0 -433
  958. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +0 -159
  959. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +0 -115
  960. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +0 -111
  961. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +0 -91
  962. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +0 -116
  963. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +0 -422
  964. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +0 -170
  965. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +0 -112
  966. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +0 -445
  967. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +0 -670
  968. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +0 -417
  969. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +0 -717
  970. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +0 -946
  971. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +0 -69
  972. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +0 -67
  973. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +0 -84
  974. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +0 -142
  975. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +0 -176
  976. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +0 -129
  977. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +0 -240
  978. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +0 -223
  979. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +0 -122
  980. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +0 -211
  981. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +0 -596
  982. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +0 -106
  983. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +0 -237
  984. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +0 -411
  985. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +0 -87
  986. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +0 -69
  987. package/runtime/third_party/bearssl/src/symcipher/des_support.c +0 -166
  988. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +0 -310
  989. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +0 -85
  990. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +0 -67
  991. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +0 -260
  992. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +0 -297
  993. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +0 -475
  994. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +0 -221
  995. package/runtime/third_party/bearssl/src/x509/asn1.t0 +0 -757
  996. package/runtime/third_party/bearssl/src/x509/asn1enc.c +0 -93
  997. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +0 -110
  998. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +0 -161
  999. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +0 -97
  1000. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +0 -96
  1001. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +0 -653
  1002. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +0 -376
  1003. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +0 -776
  1004. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +0 -324
  1005. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +0 -105
  1006. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +0 -1722
  1007. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +0 -1526
  1008. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +0 -59
@@ -0,0 +1,1110 @@
1
+ // Copyright 2021 The BoringSSL Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <openssl/ssl.h>
16
+
17
+ #include <assert.h>
18
+ #include <string.h>
19
+
20
+ #include <algorithm>
21
+ #include <utility>
22
+
23
+ #include <openssl/aead.h>
24
+ #include <openssl/bytestring.h>
25
+ #include <openssl/curve25519.h>
26
+ #include <openssl/err.h>
27
+ #include <openssl/hkdf.h>
28
+ #include <openssl/hpke.h>
29
+ #include <openssl/rand.h>
30
+
31
+ #include "../crypto/bytestring/internal.h"
32
+ #include "../crypto/internal.h"
33
+ #include "../crypto/mem_internal.h"
34
+ #include "internal.h"
35
+
36
+
37
+ BSSL_NAMESPACE_BEGIN
38
+
39
+ // ECH reuses the extension code point for the version number.
40
+ static constexpr uint16_t kECHConfigVersion =
41
+ TLSEXT_TYPE_encrypted_client_hello;
42
+
43
+ static const decltype(&EVP_hpke_aes_128_gcm) kSupportedAEADs[] = {
44
+ &EVP_hpke_aes_128_gcm,
45
+ &EVP_hpke_aes_256_gcm,
46
+ &EVP_hpke_chacha20_poly1305,
47
+ };
48
+
49
+ static const EVP_HPKE_AEAD *get_ech_aead(uint16_t aead_id) {
50
+ for (const auto aead_func : kSupportedAEADs) {
51
+ const EVP_HPKE_AEAD *aead = aead_func();
52
+ if (aead_id == EVP_HPKE_AEAD_id(aead)) {
53
+ return aead;
54
+ }
55
+ }
56
+ return nullptr;
57
+ }
58
+
59
+ // ssl_client_hello_write_without_extensions serializes `client_hello` into
60
+ // `out`, omitting the length-prefixed extensions. It serializes individual
61
+ // fields, starting with `client_hello->version`, and ignores the
62
+ // `client_hello->client_hello` field. It returns true on success and false on
63
+ // failure.
64
+ static bool ssl_client_hello_write_without_extensions(
65
+ const SSL_CLIENT_HELLO *client_hello, CBB *out) {
66
+ CBB cbb;
67
+ if (!CBB_add_u16(out, client_hello->version) ||
68
+ !CBB_add_bytes(out, client_hello->random, client_hello->random_len) ||
69
+ !CBB_add_u8_length_prefixed(out, &cbb) ||
70
+ !CBB_add_bytes(&cbb, client_hello->session_id,
71
+ client_hello->session_id_len)) {
72
+ return false;
73
+ }
74
+ if (SSL_is_dtls(client_hello->ssl)) {
75
+ if (!CBB_add_u8_length_prefixed(out, &cbb) ||
76
+ !CBB_add_bytes(&cbb, client_hello->dtls_cookie,
77
+ client_hello->dtls_cookie_len)) {
78
+ return false;
79
+ }
80
+ }
81
+ if (!CBB_add_u16_length_prefixed(out, &cbb) ||
82
+ !CBB_add_bytes(&cbb, client_hello->cipher_suites,
83
+ client_hello->cipher_suites_len) ||
84
+ !CBB_add_u8_length_prefixed(out, &cbb) ||
85
+ !CBB_add_bytes(&cbb, client_hello->compression_methods,
86
+ client_hello->compression_methods_len) ||
87
+ !CBB_flush(out)) {
88
+ return false;
89
+ }
90
+ return true;
91
+ }
92
+
93
+ static bool is_valid_client_hello_inner(SSLImpl *ssl, uint8_t *out_alert,
94
+ Span<const uint8_t> body) {
95
+ // See RFC 9849, section 7.1.
96
+ SSL_CLIENT_HELLO client_hello;
97
+ CBS extension;
98
+ if (!SSL_parse_client_hello(ssl, &client_hello, body.data(), body.size()) ||
99
+ !ssl_client_hello_get_extension(&client_hello, &extension,
100
+ TLSEXT_TYPE_encrypted_client_hello) ||
101
+ CBS_len(&extension) != 1 || //
102
+ CBS_data(&extension)[0] != ECH_CLIENT_INNER ||
103
+ !ssl_client_hello_get_extension(&client_hello, &extension,
104
+ TLSEXT_TYPE_supported_versions)) {
105
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
106
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_CLIENT_HELLO_INNER);
107
+ return false;
108
+ }
109
+ // Parse supported_versions and reject TLS versions prior to TLS 1.3. Older
110
+ // versions are incompatible with ECH.
111
+ CBS versions;
112
+ if (!CBS_get_u8_length_prefixed(&extension, &versions) ||
113
+ CBS_len(&extension) != 0 || //
114
+ CBS_len(&versions) == 0) {
115
+ *out_alert = SSL_AD_DECODE_ERROR;
116
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
117
+ return false;
118
+ }
119
+ while (CBS_len(&versions) != 0) {
120
+ uint16_t version;
121
+ if (!CBS_get_u16(&versions, &version)) {
122
+ *out_alert = SSL_AD_DECODE_ERROR;
123
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
124
+ return false;
125
+ }
126
+ if (version == SSL3_VERSION || version == TLS1_VERSION ||
127
+ version == TLS1_1_VERSION || version == TLS1_2_VERSION ||
128
+ version == DTLS1_VERSION || version == DTLS1_2_VERSION) {
129
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
130
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_CLIENT_HELLO_INNER);
131
+ return false;
132
+ }
133
+ }
134
+ return true;
135
+ }
136
+
137
+ bool ssl_decode_client_hello_inner(
138
+ SSLImpl *ssl, uint8_t *out_alert, Array<uint8_t> *out_client_hello_inner,
139
+ Span<const uint8_t> encoded_client_hello_inner,
140
+ const SSL_CLIENT_HELLO *client_hello_outer) {
141
+ SSL_CLIENT_HELLO client_hello_inner;
142
+ CBS cbs = encoded_client_hello_inner;
143
+ if (!ssl_parse_client_hello_with_trailing_data(ssl, &cbs,
144
+ &client_hello_inner)) {
145
+ return false;
146
+ }
147
+ // The remaining data is padding.
148
+ uint8_t padding;
149
+ while (CBS_get_u8(&cbs, &padding)) {
150
+ if (padding != 0) {
151
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
152
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
153
+ return false;
154
+ }
155
+ }
156
+
157
+ // TLS 1.3 ClientHellos must have extensions, and EncodedClientHelloInners use
158
+ // ClientHelloOuter's session_id.
159
+ if (client_hello_inner.extensions_len == 0 ||
160
+ client_hello_inner.session_id_len != 0) {
161
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
162
+ return false;
163
+ }
164
+ client_hello_inner.session_id = client_hello_outer->session_id;
165
+ client_hello_inner.session_id_len = client_hello_outer->session_id_len;
166
+
167
+ // Begin serializing a message containing the ClientHelloInner in `cbb`.
168
+ ScopedCBB cbb;
169
+ CBB body, extensions_cbb;
170
+ if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_CLIENT_HELLO) ||
171
+ !ssl_client_hello_write_without_extensions(&client_hello_inner, &body) ||
172
+ !CBB_add_u16_length_prefixed(&body, &extensions_cbb)) {
173
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
174
+ return false;
175
+ }
176
+
177
+ auto inner_extensions =
178
+ Span(client_hello_inner.extensions, client_hello_inner.extensions_len);
179
+ CBS ext_list_wrapper;
180
+ if (!ssl_client_hello_get_extension(&client_hello_inner, &ext_list_wrapper,
181
+ TLSEXT_TYPE_ech_outer_extensions)) {
182
+ // No ech_outer_extensions. Copy everything.
183
+ if (!CBB_add_bytes(&extensions_cbb, inner_extensions.data(),
184
+ inner_extensions.size())) {
185
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
186
+ return false;
187
+ }
188
+ } else {
189
+ const size_t offset = CBS_data(&ext_list_wrapper) - inner_extensions.data();
190
+ auto inner_extensions_before =
191
+ inner_extensions.subspan(0, offset - 4 /* extension header */);
192
+ auto inner_extensions_after =
193
+ inner_extensions.subspan(offset + CBS_len(&ext_list_wrapper));
194
+ if (!CBB_add_bytes(&extensions_cbb, inner_extensions_before.data(),
195
+ inner_extensions_before.size())) {
196
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
197
+ return false;
198
+ }
199
+
200
+ // Expand ech_outer_extensions. See RFC 9849, Appendix A.
201
+ CBS ext_list;
202
+ if (!CBS_get_u8_length_prefixed(&ext_list_wrapper, &ext_list) ||
203
+ CBS_len(&ext_list) == 0 || CBS_len(&ext_list_wrapper) != 0) {
204
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
205
+ return false;
206
+ }
207
+ CBS outer_extensions;
208
+ CBS_init(&outer_extensions, client_hello_outer->extensions,
209
+ client_hello_outer->extensions_len);
210
+ while (CBS_len(&ext_list) != 0) {
211
+ // Find the next extension to copy.
212
+ uint16_t want;
213
+ if (!CBS_get_u16(&ext_list, &want)) {
214
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
215
+ return false;
216
+ }
217
+ // The ECH extension itself is not in the AAD and may not be referenced.
218
+ if (want == TLSEXT_TYPE_encrypted_client_hello) {
219
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
220
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_OUTER_EXTENSION);
221
+ return false;
222
+ }
223
+ // Seek to `want` in `outer_extensions`. `ext_list` is required to match
224
+ // ClientHelloOuter in order.
225
+ uint16_t found;
226
+ CBS ext_body;
227
+ do {
228
+ if (CBS_len(&outer_extensions) == 0) {
229
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
230
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_OUTER_EXTENSION);
231
+ return false;
232
+ }
233
+ if (!CBS_get_u16(&outer_extensions, &found) ||
234
+ !CBS_get_u16_length_prefixed(&outer_extensions, &ext_body)) {
235
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
236
+ return false;
237
+ }
238
+ } while (found != want);
239
+ // Copy the extension.
240
+ if (!CBB_add_u16(&extensions_cbb, found) ||
241
+ !CBB_add_u16(&extensions_cbb, CBS_len(&ext_body)) ||
242
+ !CBB_add_bytes(&extensions_cbb, CBS_data(&ext_body),
243
+ CBS_len(&ext_body))) {
244
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
245
+ return false;
246
+ }
247
+ }
248
+
249
+ if (!CBB_add_bytes(&extensions_cbb, inner_extensions_after.data(),
250
+ inner_extensions_after.size())) {
251
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
252
+ return false;
253
+ }
254
+ }
255
+ if (!CBB_flush(&body)) {
256
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
257
+ return false;
258
+ }
259
+
260
+ if (!is_valid_client_hello_inner(ssl, out_alert, CBBAsSpan(&body))) {
261
+ return false;
262
+ }
263
+
264
+ if (!ssl->method->finish_message(ssl, cbb.get(), out_client_hello_inner)) {
265
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
266
+ return false;
267
+ }
268
+ return true;
269
+ }
270
+
271
+ bool ssl_client_hello_decrypt(SSL_HANDSHAKE *hs, uint8_t *out_alert,
272
+ bool *out_is_decrypt_error, Array<uint8_t> *out,
273
+ const SSL_CLIENT_HELLO *client_hello_outer,
274
+ Span<const uint8_t> payload) {
275
+ *out_is_decrypt_error = false;
276
+
277
+ // The ClientHelloOuterAAD is `client_hello_outer` with `payload` (which must
278
+ // point within `client_hello_outer->extensions`) replaced with zeros. See
279
+ // RFC 9849, section 5.2.
280
+ Array<uint8_t> aad;
281
+ if (!aad.CopyFrom(Span(client_hello_outer->client_hello,
282
+ client_hello_outer->client_hello_len))) {
283
+ *out_alert = SSL_AD_INTERNAL_ERROR;
284
+ return false;
285
+ }
286
+
287
+ // We assert with `uintptr_t` because the comparison would be UB if they
288
+ // didn't alias.
289
+ // - `payload` must be contained in `extensions`.
290
+ assert(reinterpret_cast<uintptr_t>(client_hello_outer->extensions) <=
291
+ reinterpret_cast<uintptr_t>(payload.data()));
292
+ assert(reinterpret_cast<uintptr_t>(client_hello_outer->extensions +
293
+ client_hello_outer->extensions_len) >=
294
+ reinterpret_cast<uintptr_t>(payload.data() + payload.size()));
295
+ // - `extensions` must be contained in `client_hello`.
296
+ assert(reinterpret_cast<uintptr_t>(client_hello_outer->client_hello) <=
297
+ reinterpret_cast<uintptr_t>(client_hello_outer->extensions));
298
+ assert(reinterpret_cast<uintptr_t>(client_hello_outer->client_hello +
299
+ client_hello_outer->client_hello_len) >=
300
+ reinterpret_cast<uintptr_t>(client_hello_outer->extensions +
301
+ client_hello_outer->extensions_len));
302
+ // From this then follows that `aad`, being a copy of `client_hello`, contains
303
+ // the `payload` byte range as well.
304
+ Span<uint8_t> payload_aad = Span(aad).subspan(
305
+ payload.data() - client_hello_outer->client_hello, payload.size());
306
+ OPENSSL_memset(payload_aad.data(), 0, payload_aad.size());
307
+
308
+ // Decrypt the EncodedClientHelloInner.
309
+ Array<uint8_t> encoded;
310
+ if (CRYPTO_fuzzer_mode_enabled()) {
311
+ // In fuzzer mode, disable encryption to improve coverage. We reserve a
312
+ // short input to signal decryption failure, so the fuzzer can explore
313
+ // fallback to ClientHelloOuter.
314
+ const uint8_t kBadPayload[] = {0xff};
315
+ if (payload == kBadPayload) {
316
+ *out_alert = SSL_AD_DECRYPT_ERROR;
317
+ *out_is_decrypt_error = true;
318
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECRYPTION_FAILED);
319
+ return false;
320
+ }
321
+ if (!encoded.CopyFrom(payload)) {
322
+ *out_alert = SSL_AD_INTERNAL_ERROR;
323
+ return false;
324
+ }
325
+ } else {
326
+ if (!encoded.InitForOverwrite(payload.size())) {
327
+ *out_alert = SSL_AD_INTERNAL_ERROR;
328
+ return false;
329
+ }
330
+ size_t len;
331
+ if (!EVP_HPKE_CTX_open(hs->ech_hpke_ctx.get(), encoded.data(), &len,
332
+ encoded.size(), payload.data(), payload.size(),
333
+ aad.data(), aad.size())) {
334
+ *out_alert = SSL_AD_DECRYPT_ERROR;
335
+ *out_is_decrypt_error = true;
336
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECRYPTION_FAILED);
337
+ return false;
338
+ }
339
+ encoded.Shrink(len);
340
+ }
341
+
342
+ if (!ssl_decode_client_hello_inner(hs->ssl, out_alert, out, encoded,
343
+ client_hello_outer)) {
344
+ return false;
345
+ }
346
+
347
+ ssl_do_msg_callback(hs->ssl, /*is_write=*/0, SSL3_RT_CLIENT_HELLO_INNER,
348
+ *out);
349
+ return true;
350
+ }
351
+
352
+ static bool is_hex_component(Span<const uint8_t> in) {
353
+ if (in.size() < 2 || in[0] != '0' || (in[1] != 'x' && in[1] != 'X')) {
354
+ return false;
355
+ }
356
+ for (uint8_t b : in.subspan(2)) {
357
+ if (!OPENSSL_isxdigit(b)) {
358
+ return false;
359
+ }
360
+ }
361
+ return true;
362
+ }
363
+
364
+ static bool is_decimal_component(Span<const uint8_t> in) {
365
+ if (in.empty()) {
366
+ return false;
367
+ }
368
+ for (uint8_t b : in) {
369
+ if (!('0' <= b && b <= '9')) {
370
+ return false;
371
+ }
372
+ }
373
+ return true;
374
+ }
375
+
376
+ bool ssl_is_valid_ech_public_name(Span<const uint8_t> public_name) {
377
+ // See RFC 9849, Section 4 and RFC 5890, Section 2.3.1. The public name must
378
+ // be a dot-separated sequence of LDH labels and not begin or end with a dot.
379
+ auto remaining = public_name;
380
+ if (remaining.empty()) {
381
+ return false;
382
+ }
383
+ Span<const uint8_t> last;
384
+ while (!remaining.empty()) {
385
+ // Find the next dot-separated component.
386
+ auto dot = std::find(remaining.begin(), remaining.end(), '.');
387
+ Span<const uint8_t> component;
388
+ if (dot == remaining.end()) {
389
+ component = remaining;
390
+ last = component;
391
+ remaining = Span<const uint8_t>();
392
+ } else {
393
+ component = remaining.subspan(0, dot - remaining.begin());
394
+ // Skip the dot.
395
+ remaining = remaining.subspan(dot - remaining.begin() + 1);
396
+ if (remaining.empty()) {
397
+ // Trailing dots are not allowed.
398
+ return false;
399
+ }
400
+ }
401
+ // `component` must be a valid LDH label. Checking for empty components also
402
+ // rejects leading dots.
403
+ if (component.empty() || component.size() > 63 ||
404
+ component.front() == '-' || component.back() == '-') {
405
+ return false;
406
+ }
407
+ for (uint8_t c : component) {
408
+ if (!OPENSSL_isalnum(c) && c != '-') {
409
+ return false;
410
+ }
411
+ }
412
+ }
413
+
414
+ // The WHATWG URL parser additionally does not allow any DNS names that end in
415
+ // a numeric component. See:
416
+ // https://url.spec.whatwg.org/#concept-host-parser
417
+ // https://url.spec.whatwg.org/#ends-in-a-number-checker
418
+ //
419
+ // The WHATWG parser is formulated in terms of parsing decimal, octal, and
420
+ // hex, along with a separate ASCII digits check. The ASCII digits check
421
+ // subsumes the decimal and octal check, so we only need to check two cases.
422
+ return !is_hex_component(last) && !is_decimal_component(last);
423
+ }
424
+
425
+ static bool parse_ech_config(CBS *cbs, ECHConfig *out, bool *out_supported,
426
+ bool all_extensions_mandatory) {
427
+ uint16_t version;
428
+ CBS orig = *cbs;
429
+ CBS contents;
430
+ if (!CBS_get_u16(cbs, &version) ||
431
+ !CBS_get_u16_length_prefixed(cbs, &contents)) {
432
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
433
+ return false;
434
+ }
435
+
436
+ if (version != kECHConfigVersion) {
437
+ *out_supported = false;
438
+ return true;
439
+ }
440
+
441
+ // Make a copy of the ECHConfig and parse from it, so the results alias into
442
+ // the saved copy.
443
+ if (!out->raw.CopyFrom(
444
+ Span(CBS_data(&orig), CBS_len(&orig) - CBS_len(cbs)))) {
445
+ return false;
446
+ }
447
+
448
+ CBS ech_config(out->raw);
449
+ CBS public_name, public_key, cipher_suites, extensions;
450
+ if (!CBS_skip(&ech_config, 2) || // version
451
+ !CBS_get_u16_length_prefixed(&ech_config, &contents) ||
452
+ !CBS_get_u8(&contents, &out->config_id) ||
453
+ !CBS_get_u16(&contents, &out->kem_id) ||
454
+ !CBS_get_u16_length_prefixed(&contents, &public_key) ||
455
+ CBS_len(&public_key) == 0 ||
456
+ !CBS_get_u16_length_prefixed(&contents, &cipher_suites) ||
457
+ CBS_len(&cipher_suites) == 0 || CBS_len(&cipher_suites) % 4 != 0 ||
458
+ !CBS_get_u8(&contents, &out->maximum_name_length) ||
459
+ !CBS_get_u8_length_prefixed(&contents, &public_name) ||
460
+ CBS_len(&public_name) == 0 ||
461
+ !CBS_get_u16_length_prefixed(&contents, &extensions) ||
462
+ CBS_len(&contents) != 0) {
463
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
464
+ return false;
465
+ }
466
+
467
+ if (!ssl_is_valid_ech_public_name(public_name)) {
468
+ // TODO(https://crbug.com/boringssl/275): The draft says ECHConfigs with
469
+ // invalid public names should be ignored, but LDH syntax failures are
470
+ // unambiguously invalid.
471
+ *out_supported = false;
472
+ return true;
473
+ }
474
+
475
+ out->public_key = public_key;
476
+ out->public_name = public_name;
477
+ // This function does not ensure `out->kem_id` and `out->cipher_suites` use
478
+ // supported algorithms. The caller must do this.
479
+ out->cipher_suites = cipher_suites;
480
+
481
+ bool has_unknown_mandatory_extension = false;
482
+ while (CBS_len(&extensions) != 0) {
483
+ uint16_t type;
484
+ CBS body;
485
+ if (!CBS_get_u16(&extensions, &type) ||
486
+ !CBS_get_u16_length_prefixed(&extensions, &body)) {
487
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
488
+ return false;
489
+ }
490
+ // We currently do not support any extensions.
491
+ if (type & 0x8000 || all_extensions_mandatory) {
492
+ // Extension numbers with the high bit set are mandatory. Continue parsing
493
+ // to enforce syntax, but we will ultimately ignore this ECHConfig as a
494
+ // client and reject it as a server.
495
+ has_unknown_mandatory_extension = true;
496
+ }
497
+ }
498
+
499
+ *out_supported = !has_unknown_mandatory_extension;
500
+ return true;
501
+ }
502
+
503
+ bool ECHServerConfig::Init(Span<const uint8_t> ech_config,
504
+ const EVP_HPKE_KEY *key, bool is_retry_config) {
505
+ is_retry_config_ = is_retry_config;
506
+
507
+ // Parse the ECHConfig, rejecting all unsupported parameters and extensions.
508
+ // Unlike most server options, ECH's server configuration is serialized and
509
+ // configured in both the server and DNS. If the caller configures an
510
+ // unsupported parameter, this is a deployment error. To catch these errors,
511
+ // we fail early.
512
+ CBS cbs = ech_config;
513
+ bool supported;
514
+ if (!parse_ech_config(&cbs, &ech_config_, &supported,
515
+ /*all_extensions_mandatory=*/true)) {
516
+ return false;
517
+ }
518
+ if (CBS_len(&cbs) != 0) {
519
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
520
+ return false;
521
+ }
522
+ if (!supported) {
523
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_ECH_SERVER_CONFIG);
524
+ return false;
525
+ }
526
+
527
+ CBS cipher_suites = ech_config_.cipher_suites;
528
+ while (CBS_len(&cipher_suites) > 0) {
529
+ uint16_t kdf_id, aead_id;
530
+ if (!CBS_get_u16(&cipher_suites, &kdf_id) ||
531
+ !CBS_get_u16(&cipher_suites, &aead_id)) {
532
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
533
+ return false;
534
+ }
535
+ // The server promises to support every option in the ECHConfig, so reject
536
+ // any unsupported cipher suites.
537
+ if (kdf_id != EVP_HPKE_HKDF_SHA256 || get_ech_aead(aead_id) == nullptr) {
538
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_ECH_SERVER_CONFIG);
539
+ return false;
540
+ }
541
+ }
542
+
543
+ // Check the public key in the ECHConfig matches `key`.
544
+ uint8_t expected_public_key[EVP_HPKE_MAX_PUBLIC_KEY_LENGTH];
545
+ size_t expected_public_key_len;
546
+ if (!EVP_HPKE_KEY_public_key(key, expected_public_key,
547
+ &expected_public_key_len,
548
+ sizeof(expected_public_key))) {
549
+ return false;
550
+ }
551
+ if (ech_config_.kem_id != EVP_HPKE_KEM_id(EVP_HPKE_KEY_kem(key)) ||
552
+ Span(expected_public_key, expected_public_key_len) !=
553
+ ech_config_.public_key) {
554
+ OPENSSL_PUT_ERROR(SSL, SSL_R_ECH_SERVER_CONFIG_AND_PRIVATE_KEY_MISMATCH);
555
+ return false;
556
+ }
557
+
558
+ if (!EVP_HPKE_KEY_copy(key_.get(), key)) {
559
+ return false;
560
+ }
561
+
562
+ return true;
563
+ }
564
+
565
+ bool ECHServerConfig::SetupContext(EVP_HPKE_CTX *ctx, uint16_t kdf_id,
566
+ uint16_t aead_id,
567
+ Span<const uint8_t> enc) const {
568
+ // Check the cipher suite is supported by this ECHServerConfig.
569
+ CBS cbs(ech_config_.cipher_suites);
570
+ bool cipher_ok = false;
571
+ while (CBS_len(&cbs) != 0) {
572
+ uint16_t supported_kdf_id, supported_aead_id;
573
+ if (!CBS_get_u16(&cbs, &supported_kdf_id) ||
574
+ !CBS_get_u16(&cbs, &supported_aead_id)) {
575
+ return false;
576
+ }
577
+ if (kdf_id == supported_kdf_id && aead_id == supported_aead_id) {
578
+ cipher_ok = true;
579
+ break;
580
+ }
581
+ }
582
+ if (!cipher_ok) {
583
+ return false;
584
+ }
585
+
586
+ static const uint8_t kInfoLabel[] = "tls ech";
587
+ ScopedCBB info_cbb;
588
+ if (!CBB_init(info_cbb.get(), sizeof(kInfoLabel) + ech_config_.raw.size()) ||
589
+ !CBB_add_bytes(info_cbb.get(), kInfoLabel,
590
+ sizeof(kInfoLabel) /* includes trailing NUL */) ||
591
+ !CBB_add_bytes(info_cbb.get(), ech_config_.raw.data(),
592
+ ech_config_.raw.size())) {
593
+ return false;
594
+ }
595
+
596
+ assert(kdf_id == EVP_HPKE_HKDF_SHA256);
597
+ assert(get_ech_aead(aead_id) != nullptr);
598
+ return EVP_HPKE_CTX_setup_recipient(ctx, key_.get(), EVP_hpke_hkdf_sha256(),
599
+ get_ech_aead(aead_id), enc.data(),
600
+ enc.size(), CBB_data(info_cbb.get()),
601
+ CBB_len(info_cbb.get()));
602
+ }
603
+
604
+ bool ssl_is_valid_ech_config_list(Span<const uint8_t> ech_config_list) {
605
+ CBS cbs = ech_config_list, child;
606
+ if (!CBS_get_u16_length_prefixed(&cbs, &child) || //
607
+ CBS_len(&child) == 0 || //
608
+ CBS_len(&cbs) > 0) {
609
+ return false;
610
+ }
611
+ while (CBS_len(&child) > 0) {
612
+ ECHConfig ech_config;
613
+ bool supported;
614
+ if (!parse_ech_config(&child, &ech_config, &supported,
615
+ /*all_extensions_mandatory=*/false)) {
616
+ return false;
617
+ }
618
+ }
619
+ return true;
620
+ }
621
+
622
+ static bool select_ech_cipher_suite(const EVP_HPKE_KDF **out_kdf,
623
+ const EVP_HPKE_AEAD **out_aead,
624
+ Span<const uint8_t> cipher_suites) {
625
+ const EVP_HPKE_AEAD *aead = nullptr;
626
+ CBS cbs = cipher_suites;
627
+ while (CBS_len(&cbs) != 0) {
628
+ uint16_t kdf_id, aead_id;
629
+ if (!CBS_get_u16(&cbs, &kdf_id) || //
630
+ !CBS_get_u16(&cbs, &aead_id)) {
631
+ return false;
632
+ }
633
+ // Pick the first common cipher suite, but prefer ChaCha20-Poly1305 if we
634
+ // don't have AES hardware.
635
+ const EVP_HPKE_AEAD *candidate = get_ech_aead(aead_id);
636
+ if (kdf_id != EVP_HPKE_HKDF_SHA256 || candidate == nullptr) {
637
+ continue;
638
+ }
639
+ if (aead == nullptr ||
640
+ (!EVP_has_aes_hardware() && aead_id == EVP_HPKE_CHACHA20_POLY1305)) {
641
+ aead = candidate;
642
+ }
643
+ }
644
+ if (aead == nullptr) {
645
+ return false;
646
+ }
647
+
648
+ *out_kdf = EVP_hpke_hkdf_sha256();
649
+ *out_aead = aead;
650
+ return true;
651
+ }
652
+
653
+ bool ssl_select_ech_config(SSL_HANDSHAKE *hs, Span<uint8_t> out_enc,
654
+ size_t *out_enc_len) {
655
+ *out_enc_len = 0;
656
+ if (hs->max_version < TLS1_3_VERSION) {
657
+ // ECH requires TLS 1.3.
658
+ if (hs->config->reject_unusable_ech_config) {
659
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNUSABLE_ECH_CONFIG_LIST);
660
+ return false;
661
+ }
662
+ return true;
663
+ }
664
+
665
+ if (!hs->config->client_ech_config_list.empty()) {
666
+ CBS cbs = CBS(hs->config->client_ech_config_list);
667
+ CBS child;
668
+ if (!CBS_get_u16_length_prefixed(&cbs, &child) || //
669
+ CBS_len(&child) == 0 || //
670
+ CBS_len(&cbs) > 0) {
671
+ return false;
672
+ }
673
+ // Look for the first ECHConfig with supported parameters.
674
+ while (CBS_len(&child) > 0) {
675
+ ECHConfig ech_config;
676
+ bool supported;
677
+ if (!parse_ech_config(&child, &ech_config, &supported,
678
+ /*all_extensions_mandatory=*/false)) {
679
+ return false;
680
+ }
681
+ const EVP_HPKE_KEM *kem = EVP_hpke_x25519_hkdf_sha256();
682
+ const EVP_HPKE_KDF *kdf;
683
+ const EVP_HPKE_AEAD *aead;
684
+ if (supported && //
685
+ ech_config.kem_id == EVP_HPKE_DHKEM_X25519_HKDF_SHA256 &&
686
+ select_ech_cipher_suite(&kdf, &aead, ech_config.cipher_suites)) {
687
+ ScopedCBB info;
688
+ static const uint8_t kInfoLabel[] = "tls ech"; // includes trailing NUL
689
+ if (!CBB_init(info.get(), sizeof(kInfoLabel) + ech_config.raw.size()) ||
690
+ !CBB_add_bytes(info.get(), kInfoLabel, sizeof(kInfoLabel)) ||
691
+ !CBB_add_bytes(info.get(), ech_config.raw.data(),
692
+ ech_config.raw.size())) {
693
+ return false;
694
+ }
695
+
696
+ if (!EVP_HPKE_CTX_setup_sender(
697
+ hs->ech_hpke_ctx.get(), out_enc.data(), out_enc_len,
698
+ out_enc.size(), kem, kdf, aead, ech_config.public_key.data(),
699
+ ech_config.public_key.size(), CBB_data(info.get()),
700
+ CBB_len(info.get())) ||
701
+ !hs->inner_transcript.Init()) {
702
+ return false;
703
+ }
704
+
705
+ hs->selected_ech_config = MakeUnique<ECHConfig>(std::move(ech_config));
706
+ return hs->selected_ech_config != nullptr;
707
+ }
708
+ }
709
+ }
710
+
711
+ if (hs->config->reject_unusable_ech_config && !hs->selected_ech_config) {
712
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNUSABLE_ECH_CONFIG_LIST);
713
+ return false;
714
+ }
715
+
716
+ return true;
717
+ }
718
+
719
+ static size_t aead_overhead(const EVP_HPKE_AEAD *aead) {
720
+ if (CRYPTO_fuzzer_mode_enabled()) {
721
+ // TODO(https://crbug.com/boringssl/275): Having to adjust the overhead
722
+ // everywhere is tedious. Change fuzzer mode to append a fake tag but still
723
+ // otherwise be cleartext, refresh corpora, and then inline this function.
724
+ return 0;
725
+ }
726
+ return EVP_AEAD_max_overhead(EVP_HPKE_AEAD_aead(aead));
727
+ }
728
+
729
+ // random_size returns a random value between `min` and `max`, inclusive.
730
+ static size_t random_size(size_t min, size_t max) {
731
+ assert(min < max);
732
+ size_t value;
733
+ RAND_bytes(reinterpret_cast<uint8_t *>(&value), sizeof(value));
734
+ return value % (max - min + 1) + min;
735
+ }
736
+
737
+ static bool setup_ech_grease(SSL_HANDSHAKE *hs) {
738
+ assert(!hs->selected_ech_config);
739
+ if (hs->max_version < TLS1_3_VERSION || !hs->config->ech_grease_enabled) {
740
+ return true;
741
+ }
742
+
743
+ const uint16_t kdf_id = EVP_HPKE_HKDF_SHA256;
744
+ const EVP_HPKE_AEAD *aead = EVP_has_aes_hardware()
745
+ ? EVP_hpke_aes_128_gcm()
746
+ : EVP_hpke_chacha20_poly1305();
747
+ static_assert(ssl_grease_ech_config_id < sizeof(hs->grease_seed),
748
+ "hs->grease_seed is too small");
749
+ uint8_t config_id = hs->grease_seed[ssl_grease_ech_config_id];
750
+
751
+ uint8_t enc[X25519_PUBLIC_VALUE_LEN];
752
+ uint8_t private_key_unused[X25519_PRIVATE_KEY_LEN];
753
+ X25519_keypair(enc, private_key_unused);
754
+
755
+ // To determine a plausible length for the payload, we estimate the size of a
756
+ // typical EncodedClientHelloInner without resumption:
757
+ //
758
+ // 2+32+1+2 version, random, legacy_session_id, legacy_compression_methods
759
+ // 2+4*2 cipher_suites (three TLS 1.3 ciphers, GREASE)
760
+ // 2 extensions prefix
761
+ // 5 inner encrypted_client_hello
762
+ // 4+1+2*2 supported_versions (TLS 1.3, GREASE)
763
+ // 4+1+10*2 outer_extensions (key_share, sigalgs, sct, alpn,
764
+ // supported_groups, status_request, psk_key_exchange_modes,
765
+ // compress_certificate, GREASE x2)
766
+ //
767
+ // The server_name extension has an overhead of 9 bytes. For now, arbitrarily
768
+ // estimate maximum_name_length to be between 32 and 100 bytes. Then round up
769
+ // to a multiple of 32, to match RFC 9849, section 6.1.3.
770
+ const size_t payload_len =
771
+ 32 * random_size(128 / 32, 224 / 32) + aead_overhead(aead);
772
+ bssl::ScopedCBB cbb;
773
+ CBB enc_cbb, payload_cbb;
774
+ uint8_t *payload;
775
+ if (!CBB_init(cbb.get(), 256) || !CBB_add_u16(cbb.get(), kdf_id) ||
776
+ !CBB_add_u16(cbb.get(), EVP_HPKE_AEAD_id(aead)) ||
777
+ !CBB_add_u8(cbb.get(), config_id) ||
778
+ !CBB_add_u16_length_prefixed(cbb.get(), &enc_cbb) ||
779
+ !CBB_add_bytes(&enc_cbb, enc, sizeof(enc)) ||
780
+ !CBB_add_u16_length_prefixed(cbb.get(), &payload_cbb) ||
781
+ !CBB_add_space(&payload_cbb, &payload, payload_len) ||
782
+ !RAND_bytes(payload, payload_len) ||
783
+ !CBBFinishArray(cbb.get(), &hs->ech_client_outer)) {
784
+ return false;
785
+ }
786
+ return true;
787
+ }
788
+
789
+ bool ssl_encrypt_client_hello(SSL_HANDSHAKE *hs, Span<const uint8_t> enc) {
790
+ SSLImpl *const ssl = hs->ssl;
791
+ if (!hs->selected_ech_config) {
792
+ return setup_ech_grease(hs);
793
+ }
794
+
795
+ // Construct ClientHelloInner and EncodedClientHelloInner. See
796
+ // RFC 9849, sections 5.1 and 6.1.
797
+ ScopedCBB cbb, encoded_cbb;
798
+ CBB body;
799
+ Array<uint8_t> hello_inner;
800
+ if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_CLIENT_HELLO) ||
801
+ !CBB_init(encoded_cbb.get(), 256) ||
802
+ !ssl_write_client_hello_without_extensions(hs, &body,
803
+ ssl_client_hello_inner,
804
+ /*empty_session_id=*/false) ||
805
+ !ssl_write_client_hello_without_extensions(hs, encoded_cbb.get(),
806
+ ssl_client_hello_inner,
807
+ /*empty_session_id=*/true) ||
808
+ !ssl_add_clienthello_tlsext(hs, &body, encoded_cbb.get(),
809
+ ssl_client_hello_inner) ||
810
+ !ssl->method->finish_message(ssl, cbb.get(), &hello_inner)) {
811
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
812
+ return false;
813
+ }
814
+
815
+ ssl_do_msg_callback(ssl, /*is_write=*/1, SSL3_RT_CLIENT_HELLO_INNER,
816
+ hello_inner);
817
+ if (!hs->inner_transcript.Update(hello_inner)) {
818
+ return false;
819
+ }
820
+
821
+ // Pad the EncodedClientHelloInner. See RFC 9849, section 6.1.3.
822
+ size_t padding_len = 0;
823
+ size_t maximum_name_length = hs->selected_ech_config->maximum_name_length;
824
+ if (ssl->hostname) {
825
+ size_t hostname_len = strlen(ssl->hostname.get());
826
+ if (hostname_len <= maximum_name_length) {
827
+ padding_len = maximum_name_length - hostname_len;
828
+ }
829
+ } else {
830
+ // No SNI. Pad up to `maximum_name_length`, including server_name extension
831
+ // overhead.
832
+ padding_len = 9 + maximum_name_length;
833
+ }
834
+ // Pad the whole thing to a multiple of 32 bytes.
835
+ padding_len += 31 - ((CBB_len(encoded_cbb.get()) + padding_len - 1) % 32);
836
+ Array<uint8_t> encoded;
837
+ if (!CBB_add_zeros(encoded_cbb.get(), padding_len) ||
838
+ !CBBFinishArray(encoded_cbb.get(), &encoded)) {
839
+ return false;
840
+ }
841
+
842
+ // Encrypt `encoded`. See RFC 9849, section 6.1.1. First, assemble the
843
+ // extension with a placeholder value for ClientHelloOuterAAD. See RFC 9849,
844
+ // section 5.2.
845
+ const EVP_HPKE_KDF *kdf = EVP_HPKE_CTX_kdf(hs->ech_hpke_ctx.get());
846
+ const EVP_HPKE_AEAD *aead = EVP_HPKE_CTX_aead(hs->ech_hpke_ctx.get());
847
+ size_t payload_len = encoded.size() + aead_overhead(aead);
848
+ CBB enc_cbb, payload_cbb;
849
+ if (!CBB_init(cbb.get(), 256) ||
850
+ !CBB_add_u16(cbb.get(), EVP_HPKE_KDF_id(kdf)) ||
851
+ !CBB_add_u16(cbb.get(), EVP_HPKE_AEAD_id(aead)) ||
852
+ !CBB_add_u8(cbb.get(), hs->selected_ech_config->config_id) ||
853
+ !CBB_add_u16_length_prefixed(cbb.get(), &enc_cbb) ||
854
+ !CBB_add_bytes(&enc_cbb, enc.data(), enc.size()) ||
855
+ !CBB_add_u16_length_prefixed(cbb.get(), &payload_cbb) ||
856
+ !CBB_add_zeros(&payload_cbb, payload_len) ||
857
+ !CBBFinishArray(cbb.get(), &hs->ech_client_outer)) {
858
+ return false;
859
+ }
860
+
861
+ // Construct ClientHelloOuterAAD.
862
+ // TODO(https://crbug.com/boringssl/275): This ends up constructing the
863
+ // ClientHelloOuter twice. Instead, reuse `aad` for the ClientHello, now that
864
+ // draft-12 made the length prefixes match.
865
+ bssl::ScopedCBB aad;
866
+ if (!CBB_init(aad.get(), 256) ||
867
+ !ssl_write_client_hello_without_extensions(hs, aad.get(),
868
+ ssl_client_hello_outer,
869
+ /*empty_session_id=*/false) ||
870
+ !ssl_add_clienthello_tlsext(hs, aad.get(), /*out_encoded=*/nullptr,
871
+ ssl_client_hello_outer)) {
872
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
873
+ return false;
874
+ }
875
+
876
+ // Replace the payload in `hs->ech_client_outer` with the encrypted value.
877
+ auto payload_span = Span(hs->ech_client_outer).last(payload_len);
878
+ if (CRYPTO_fuzzer_mode_enabled()) {
879
+ // In fuzzer mode, the server expects a cleartext payload.
880
+ assert(payload_span.size() == encoded.size());
881
+ OPENSSL_memcpy(payload_span.data(), encoded.data(), encoded.size());
882
+ } else {
883
+ if (!EVP_HPKE_CTX_seal(hs->ech_hpke_ctx.get(), payload_span.data(),
884
+ &payload_len, payload_span.size(), encoded.data(),
885
+ encoded.size(), CBB_data(aad.get()),
886
+ CBB_len(aad.get())) ||
887
+ payload_len != payload_span.size()) {
888
+ return false;
889
+ }
890
+ }
891
+
892
+ return true;
893
+ }
894
+
895
+ BSSL_NAMESPACE_END
896
+
897
+ using namespace bssl;
898
+
899
+ void SSL_set_enable_ech_grease(SSL *ssl, int enable) {
900
+ auto *ssl_impl = FromOpaque(ssl);
901
+ if (!ssl_impl->config) {
902
+ return;
903
+ }
904
+ ssl_impl->config->ech_grease_enabled = !!enable;
905
+ }
906
+
907
+ void SSL_set_reject_unusable_ech_config(SSL *ssl, int enable) {
908
+ auto *ssl_impl = FromOpaque(ssl);
909
+ if (!ssl_impl->config) {
910
+ return;
911
+ }
912
+ ssl_impl->config->reject_unusable_ech_config = !!enable;
913
+ }
914
+
915
+ int SSL_set1_ech_config_list(SSL *ssl, const uint8_t *ech_config_list,
916
+ size_t ech_config_list_len) {
917
+ auto *ssl_impl = FromOpaque(ssl);
918
+ if (!ssl_impl->config) {
919
+ return 0;
920
+ }
921
+
922
+ auto span = Span(ech_config_list, ech_config_list_len);
923
+ if (!ssl_is_valid_ech_config_list(span)) {
924
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ECH_CONFIG_LIST);
925
+ return 0;
926
+ }
927
+ return ssl_impl->config->client_ech_config_list.CopyFrom(span);
928
+ }
929
+
930
+ void SSL_get0_ech_name_override(const SSL *ssl, const char **out_name,
931
+ size_t *out_name_len) {
932
+ const auto *ssl_impl = FromOpaque(ssl);
933
+ // When ECH is rejected, we use the public name. Note that, if
934
+ // `SSL_CTX_set_reverify_on_resume` is enabled, we reverify the certificate
935
+ // before the 0-RTT point. If also offering ECH, we verify as if
936
+ // ClientHelloInner was accepted and do not override. This works because, at
937
+ // this point, `ech_status` will be `ssl_ech_none`. See the
938
+ // ECH-Client-Reject-EarlyDataReject-OverrideNameOnRetry tests in runner.go.
939
+ const SSL_HANDSHAKE *hs = ssl_impl->s3->hs.get();
940
+ if (!ssl_impl->server && hs && ssl_impl->s3->ech_status == ssl_ech_rejected) {
941
+ *out_name = reinterpret_cast<const char *>(
942
+ hs->selected_ech_config->public_name.data());
943
+ *out_name_len = hs->selected_ech_config->public_name.size();
944
+ } else {
945
+ *out_name = nullptr;
946
+ *out_name_len = 0;
947
+ }
948
+ }
949
+
950
+ void SSL_get0_ech_retry_configs(const SSL *ssl,
951
+ const uint8_t **out_retry_configs,
952
+ size_t *out_retry_configs_len) {
953
+ const auto *ssl_impl = FromOpaque(ssl);
954
+ const SSL_HANDSHAKE *hs = ssl_impl->s3->hs.get();
955
+ if (!hs || !hs->ech_authenticated_reject) {
956
+ // It is an error to call this function except in response to
957
+ // `SSL_R_ECH_REJECTED`. Returning an empty string risks the caller
958
+ // mistakenly believing the server has disabled ECH. Instead, return a
959
+ // non-empty ECHConfigList with a syntax error, so the subsequent
960
+ // `SSL_set1_ech_config_list` call will fail.
961
+ assert(0);
962
+ static const uint8_t kPlaceholder[] = {
963
+ kECHConfigVersion >> 8, kECHConfigVersion & 0xff, 0xff, 0xff, 0xff};
964
+ *out_retry_configs = kPlaceholder;
965
+ *out_retry_configs_len = sizeof(kPlaceholder);
966
+ return;
967
+ }
968
+
969
+ *out_retry_configs = hs->ech_retry_configs.data();
970
+ *out_retry_configs_len = hs->ech_retry_configs.size();
971
+ }
972
+
973
+ int SSL_marshal_ech_config(uint8_t **out, size_t *out_len, uint8_t config_id,
974
+ const EVP_HPKE_KEY *key, const char *public_name,
975
+ size_t max_name_len) {
976
+ Span<const uint8_t> public_name_u8 = StringAsBytes(public_name);
977
+ if (!ssl_is_valid_ech_public_name(public_name_u8)) {
978
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ECH_PUBLIC_NAME);
979
+ return 0;
980
+ }
981
+
982
+ // The maximum name length is encoded in one byte.
983
+ if (max_name_len > 0xff) {
984
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_LENGTH);
985
+ return 0;
986
+ }
987
+
988
+ // See RFC 9849, section 4.
989
+ ScopedCBB cbb;
990
+ CBB contents, child;
991
+ uint8_t *public_key;
992
+ size_t public_key_len;
993
+ if (!CBB_init(cbb.get(), 128) || //
994
+ !CBB_add_u16(cbb.get(), kECHConfigVersion) ||
995
+ !CBB_add_u16_length_prefixed(cbb.get(), &contents) ||
996
+ !CBB_add_u8(&contents, config_id) ||
997
+ !CBB_add_u16(&contents, EVP_HPKE_KEM_id(EVP_HPKE_KEY_kem(key))) ||
998
+ !CBB_add_u16_length_prefixed(&contents, &child) ||
999
+ !CBB_reserve(&child, &public_key, EVP_HPKE_MAX_PUBLIC_KEY_LENGTH) ||
1000
+ !EVP_HPKE_KEY_public_key(key, public_key, &public_key_len,
1001
+ EVP_HPKE_MAX_PUBLIC_KEY_LENGTH) ||
1002
+ !CBB_did_write(&child, public_key_len) ||
1003
+ !CBB_add_u16_length_prefixed(&contents, &child) ||
1004
+ // Write a default cipher suite configuration.
1005
+ !CBB_add_u16(&child, EVP_HPKE_HKDF_SHA256) ||
1006
+ !CBB_add_u16(&child, EVP_HPKE_AES_128_GCM) ||
1007
+ !CBB_add_u16(&child, EVP_HPKE_HKDF_SHA256) ||
1008
+ !CBB_add_u16(&child, EVP_HPKE_CHACHA20_POLY1305) ||
1009
+ !CBB_add_u8(&contents, max_name_len) ||
1010
+ !CBB_add_u8_length_prefixed(&contents, &child) ||
1011
+ !CBB_add_bytes(&child, public_name_u8.data(), public_name_u8.size()) ||
1012
+ // TODO(https://crbug.com/boringssl/275): Reserve some GREASE extensions
1013
+ // and include some.
1014
+ !CBB_add_u16(&contents, 0 /* no extensions */) ||
1015
+ !CBB_finish(cbb.get(), out, out_len)) {
1016
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1017
+ return 0;
1018
+ }
1019
+ return 1;
1020
+ }
1021
+
1022
+ SSL_ECH_KEYS *SSL_ECH_KEYS_new() { return New<SSLECHKeys>(); }
1023
+
1024
+ void SSL_ECH_KEYS_up_ref(SSL_ECH_KEYS *keys) {
1025
+ FromOpaque(keys)->UpRefInternal();
1026
+ }
1027
+
1028
+ void SSL_ECH_KEYS_free(SSL_ECH_KEYS *keys) {
1029
+ if (keys != nullptr) {
1030
+ FromOpaque(keys)->DecRefInternal();
1031
+ }
1032
+ }
1033
+
1034
+ int SSL_ECH_KEYS_add(SSL_ECH_KEYS *configs, int is_retry_config,
1035
+ const uint8_t *ech_config, size_t ech_config_len,
1036
+ const EVP_HPKE_KEY *key) {
1037
+ UniquePtr<ECHServerConfig> parsed_config = MakeUnique<ECHServerConfig>();
1038
+ if (!parsed_config) {
1039
+ return 0;
1040
+ }
1041
+ if (!parsed_config->Init(Span(ech_config, ech_config_len), key,
1042
+ !!is_retry_config)) {
1043
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1044
+ return 0;
1045
+ }
1046
+ if (!FromOpaque(configs)->configs.Push(std::move(parsed_config))) {
1047
+ return 0;
1048
+ }
1049
+ return 1;
1050
+ }
1051
+
1052
+ int SSL_ECH_KEYS_has_duplicate_config_id(const SSL_ECH_KEYS *keys) {
1053
+ bool seen[256] = {false};
1054
+ for (const auto &config : FromOpaque(keys)->configs) {
1055
+ if (seen[config->ech_config().config_id]) {
1056
+ return 1;
1057
+ }
1058
+ seen[config->ech_config().config_id] = true;
1059
+ }
1060
+ return 0;
1061
+ }
1062
+
1063
+ int SSL_ECH_KEYS_marshal_retry_configs(const SSL_ECH_KEYS *keys, uint8_t **out,
1064
+ size_t *out_len) {
1065
+ ScopedCBB cbb;
1066
+ CBB child;
1067
+ if (!CBB_init(cbb.get(), 128) ||
1068
+ !CBB_add_u16_length_prefixed(cbb.get(), &child)) {
1069
+ return false;
1070
+ }
1071
+ for (const auto &config : FromOpaque(keys)->configs) {
1072
+ if (config->is_retry_config() &&
1073
+ !CBB_add_bytes(&child, config->ech_config().raw.data(),
1074
+ config->ech_config().raw.size())) {
1075
+ return false;
1076
+ }
1077
+ }
1078
+ return CBB_finish(cbb.get(), out, out_len);
1079
+ }
1080
+
1081
+ int SSL_CTX_set1_ech_keys(SSL_CTX *ctx, SSL_ECH_KEYS *keys) {
1082
+ auto *ctx_impl = FromOpaque(ctx);
1083
+ bool has_retry_config = false;
1084
+ for (const auto &config : FromOpaque(keys)->configs) {
1085
+ if (config->is_retry_config()) {
1086
+ has_retry_config = true;
1087
+ break;
1088
+ }
1089
+ }
1090
+ if (!has_retry_config) {
1091
+ OPENSSL_PUT_ERROR(SSL, SSL_R_ECH_SERVER_WOULD_HAVE_NO_RETRY_CONFIGS);
1092
+ return 0;
1093
+ }
1094
+ UniquePtr<SSLECHKeys> owned_keys = UpRef(FromOpaque(keys));
1095
+ MutexWriteLock lock(&ctx_impl->lock);
1096
+ ctx_impl->ech_keys.swap(owned_keys);
1097
+ return 1;
1098
+ }
1099
+
1100
+ int SSL_ech_accepted(const SSL *ssl) {
1101
+ const auto *ssl_impl = FromOpaque(ssl);
1102
+ if (SSL_in_early_data(ssl_impl) && !ssl_impl->server) {
1103
+ // In the client early data state, we report properties as if the server
1104
+ // accepted early data. The server can only accept early data with
1105
+ // ClientHelloInner.
1106
+ return ssl_impl->s3->hs->selected_ech_config != nullptr;
1107
+ }
1108
+
1109
+ return ssl_impl->s3->ech_status == ssl_ech_accepted;
1110
+ }