visaljs 0.0.2 → 0.0.3

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