visaljs 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1008) hide show
  1. package/README.md +17 -1
  2. package/cli.js +565 -75
  3. package/node/include/js_node.h +28 -5
  4. package/node/include/js_uv.h +36 -0
  5. package/node/prelude/crypto.js +7 -10
  6. package/node/prelude/dns.js +99 -0
  7. package/node/prelude/dns_promises.js +10 -0
  8. package/node/prelude/http.js +1039 -195
  9. package/node/prelude/internal/crypto/asym.js +39 -12
  10. package/node/prelude/internal/crypto/dh_groups.js +12 -0
  11. package/node/prelude/internal/crypto/diffiehellman.js +354 -0
  12. package/node/prelude/internal/crypto/hash.js +1 -1
  13. package/node/prelude/internal/crypto/key_type.js +3 -0
  14. package/node/prelude/internal/crypto/keys.js +39 -9
  15. package/node/prelude/internal/http_agent.js +249 -0
  16. package/node/prelude/internal/net.js +33 -0
  17. package/node/prelude/internal/socketaddress.js +249 -0
  18. package/node/prelude/internal/tls/common.js +306 -0
  19. package/node/prelude/internal/tls/wrap.js +1217 -0
  20. package/node/prelude/internal/tls/x509.js +394 -0
  21. package/node/prelude/net.js +1083 -50
  22. package/node/prelude/stream.js +6 -0
  23. package/node/prelude/tls.js +141 -0
  24. package/node/prelude/util.js +5 -2
  25. package/node/prelude/util_types.js +85 -0
  26. package/node/src/host_http.c +268 -270
  27. package/node/src/host_loop.c +84 -0
  28. package/node/src/host_net.c +495 -0
  29. package/node/src/host_sys.c +16 -0
  30. package/package.json +1 -1
  31. package/runtime/include/js_builtins.h +16 -0
  32. package/runtime/include/js_console.h +2 -0
  33. package/runtime/include/js_core.def +23 -0
  34. package/runtime/include/js_crypto.h +23 -0
  35. package/runtime/include/js_generator.h +2 -3
  36. package/runtime/include/js_promise.h +0 -2
  37. package/runtime/src/async_iter.c +4 -1
  38. package/runtime/src/boringssl_support.cc +34 -0
  39. package/runtime/src/builtin_table.c +8 -0
  40. package/runtime/src/components.c +10 -0
  41. package/runtime/src/console.c +6 -18
  42. package/runtime/src/core_all.c +1 -0
  43. package/runtime/src/crypto_asym.c +450 -241
  44. package/runtime/src/crypto_bn.c +91 -0
  45. package/runtime/src/crypto_cipher.c +153 -75
  46. package/runtime/src/crypto_hash.c +68 -53
  47. package/runtime/src/crypto_internal.h +55 -26
  48. package/runtime/src/crypto_pkey.c +198 -61
  49. package/runtime/src/crypto_subtle.c +42 -16
  50. package/runtime/src/crypto_tls.c +678 -0
  51. package/runtime/src/generator.c +8 -1
  52. package/runtime/src/global.c +2 -4
  53. package/runtime/src/internal.h +0 -1
  54. package/runtime/src/jobs.c +2 -1
  55. package/runtime/src/promise.c +4 -1
  56. package/runtime/src/tls_roots.gen.h +3215 -0
  57. package/runtime/src/util_types.c +52 -0
  58. package/runtime/src/weak.c +2 -1
  59. package/runtime/third_party/boringssl/LICENSE +238 -0
  60. package/runtime/third_party/boringssl/README.md +46 -0
  61. package/runtime/third_party/boringssl/VERSION +1 -0
  62. package/runtime/third_party/boringssl/crypto/aes/aes.cc +44 -0
  63. package/runtime/third_party/boringssl/crypto/armv8_feature_parsing.h +67 -0
  64. package/runtime/third_party/boringssl/crypto/asn1/a_bitstr.cc +297 -0
  65. package/runtime/third_party/boringssl/crypto/asn1/a_bool.cc +50 -0
  66. package/runtime/third_party/boringssl/crypto/asn1/a_d2i_fp.cc +47 -0
  67. package/runtime/third_party/boringssl/crypto/asn1/a_dup.cc +42 -0
  68. package/runtime/third_party/boringssl/crypto/asn1/a_gentm.cc +130 -0
  69. package/runtime/third_party/boringssl/crypto/asn1/a_i2d_fp.cc +44 -0
  70. package/runtime/third_party/boringssl/crypto/asn1/a_int.cc +467 -0
  71. package/runtime/third_party/boringssl/crypto/asn1/a_mbstr.cc +242 -0
  72. package/runtime/third_party/boringssl/crypto/asn1/a_object.cc +191 -0
  73. package/runtime/third_party/boringssl/crypto/asn1/a_octet.cc +32 -0
  74. package/runtime/third_party/boringssl/crypto/asn1/a_strex.cc +411 -0
  75. package/runtime/third_party/boringssl/crypto/asn1/a_strnid.cc +208 -0
  76. package/runtime/third_party/boringssl/crypto/asn1/a_time.cc +248 -0
  77. package/runtime/third_party/boringssl/crypto/asn1/a_type.cc +467 -0
  78. package/runtime/third_party/boringssl/crypto/asn1/a_utctm.cc +128 -0
  79. package/runtime/third_party/boringssl/crypto/asn1/asn1_lib.cc +453 -0
  80. package/runtime/third_party/boringssl/crypto/asn1/asn1_par.cc +61 -0
  81. package/runtime/third_party/boringssl/crypto/asn1/asn_pack.cc +56 -0
  82. package/runtime/third_party/boringssl/crypto/asn1/f_int.cc +63 -0
  83. package/runtime/third_party/boringssl/crypto/asn1/f_string.cc +52 -0
  84. package/runtime/third_party/boringssl/crypto/asn1/internal.h +430 -0
  85. package/runtime/third_party/boringssl/crypto/asn1/posix_time.cc +244 -0
  86. package/runtime/third_party/boringssl/crypto/asn1/tasn_dec.cc +611 -0
  87. package/runtime/third_party/boringssl/crypto/asn1/tasn_enc.cc +348 -0
  88. package/runtime/third_party/boringssl/crypto/asn1/tasn_fre.cc +163 -0
  89. package/runtime/third_party/boringssl/crypto/asn1/tasn_new.cc +274 -0
  90. package/runtime/third_party/boringssl/crypto/asn1/tasn_typ.cc +92 -0
  91. package/runtime/third_party/boringssl/crypto/asn1/tasn_utl.cc +218 -0
  92. package/runtime/third_party/boringssl/crypto/base64/base64.cc +433 -0
  93. package/runtime/third_party/boringssl/crypto/bcm_support.h +62 -0
  94. package/runtime/third_party/boringssl/crypto/bio/bio.cc +715 -0
  95. package/runtime/third_party/boringssl/crypto/bio/bio_mem.cc +260 -0
  96. package/runtime/third_party/boringssl/crypto/bio/connect.cc +463 -0
  97. package/runtime/third_party/boringssl/crypto/bio/errno.cc +52 -0
  98. package/runtime/third_party/boringssl/crypto/bio/fd.cc +193 -0
  99. package/runtime/third_party/boringssl/crypto/bio/file.cc +283 -0
  100. package/runtime/third_party/boringssl/crypto/bio/hexdump.cc +154 -0
  101. package/runtime/third_party/boringssl/crypto/bio/internal.h +128 -0
  102. package/runtime/third_party/boringssl/crypto/bio/pair.cc +426 -0
  103. package/runtime/third_party/boringssl/crypto/bio/printf.cc +59 -0
  104. package/runtime/third_party/boringssl/crypto/bio/socket.cc +210 -0
  105. package/runtime/third_party/boringssl/crypto/bio/socket_helper.cc +179 -0
  106. package/runtime/third_party/boringssl/crypto/blake2/blake2.cc +173 -0
  107. package/runtime/third_party/boringssl/crypto/bn/bn_asn1.cc +57 -0
  108. package/runtime/third_party/boringssl/crypto/bn/convert.cc +409 -0
  109. package/runtime/third_party/boringssl/crypto/bn/div.cc +102 -0
  110. package/runtime/third_party/boringssl/crypto/bn/exponentiation.cc +168 -0
  111. package/runtime/third_party/boringssl/crypto/bn/sqrt.cc +93 -0
  112. package/runtime/third_party/boringssl/crypto/buf/buf.cc +119 -0
  113. package/runtime/third_party/boringssl/crypto/bytestring/asn1_compat.cc +54 -0
  114. package/runtime/third_party/boringssl/crypto/bytestring/ber.cc +268 -0
  115. package/runtime/third_party/boringssl/crypto/bytestring/cbb.cc +787 -0
  116. package/runtime/third_party/boringssl/crypto/bytestring/cbs.cc +977 -0
  117. package/runtime/third_party/boringssl/crypto/bytestring/internal.h +134 -0
  118. package/runtime/third_party/boringssl/crypto/bytestring/unicode.cc +156 -0
  119. package/runtime/third_party/boringssl/crypto/chacha/chacha.cc +226 -0
  120. package/runtime/third_party/boringssl/crypto/chacha/internal.h +103 -0
  121. package/runtime/third_party/boringssl/crypto/cipher/derive_key.cc +106 -0
  122. package/runtime/third_party/boringssl/crypto/cipher/e_aesctrhmac.cc +294 -0
  123. package/runtime/third_party/boringssl/crypto/cipher/e_aeseax.cc +351 -0
  124. package/runtime/third_party/boringssl/crypto/cipher/e_aesgcmsiv.cc +918 -0
  125. package/runtime/third_party/boringssl/crypto/cipher/e_chacha20poly1305.cc +404 -0
  126. package/runtime/third_party/boringssl/crypto/cipher/e_des.cc +214 -0
  127. package/runtime/third_party/boringssl/crypto/cipher/e_null.cc +55 -0
  128. package/runtime/third_party/boringssl/crypto/cipher/e_rc2.cc +432 -0
  129. package/runtime/third_party/boringssl/crypto/cipher/e_rc4.cc +56 -0
  130. package/runtime/third_party/boringssl/crypto/cipher/e_tls.cc +615 -0
  131. package/runtime/third_party/boringssl/crypto/cipher/get_cipher.cc +85 -0
  132. package/runtime/third_party/boringssl/crypto/cipher/internal.h +399 -0
  133. package/runtime/third_party/boringssl/crypto/cipher/tls_cbc.cc +476 -0
  134. package/runtime/third_party/boringssl/crypto/cms/cms.cc +178 -0
  135. package/runtime/third_party/boringssl/crypto/conf/conf.cc +637 -0
  136. package/runtime/third_party/boringssl/crypto/conf/internal.h +54 -0
  137. package/runtime/third_party/boringssl/crypto/cpu_aarch64_apple.cc +76 -0
  138. package/runtime/third_party/boringssl/crypto/cpu_aarch64_fuchsia.cc +58 -0
  139. package/runtime/third_party/boringssl/crypto/cpu_aarch64_linux.cc +66 -0
  140. package/runtime/third_party/boringssl/crypto/cpu_aarch64_openbsd.cc +45 -0
  141. package/runtime/third_party/boringssl/crypto/cpu_aarch64_sysreg.cc +66 -0
  142. package/runtime/third_party/boringssl/crypto/cpu_aarch64_win.cc +52 -0
  143. package/runtime/third_party/boringssl/crypto/cpu_arm_freebsd.cc +55 -0
  144. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.cc +173 -0
  145. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.h +141 -0
  146. package/runtime/third_party/boringssl/crypto/cpu_intel.cc +287 -0
  147. package/runtime/third_party/boringssl/crypto/crypto.cc +152 -0
  148. package/runtime/third_party/boringssl/crypto/curve25519/asm/x25519-asm-arm.S +2124 -0
  149. package/runtime/third_party/boringssl/crypto/curve25519/cpace.cc +227 -0
  150. package/runtime/third_party/boringssl/crypto/curve25519/curve25519.cc +2436 -0
  151. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_64_adx.cc +18 -0
  152. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_tables.h +3264 -0
  153. package/runtime/third_party/boringssl/crypto/curve25519/internal.h +202 -0
  154. package/runtime/third_party/boringssl/crypto/curve25519/spake25519.cc +532 -0
  155. package/runtime/third_party/boringssl/crypto/des/des.cc +837 -0
  156. package/runtime/third_party/boringssl/crypto/des/internal.h +144 -0
  157. package/runtime/third_party/boringssl/crypto/dh/dh_asn1.cc +109 -0
  158. package/runtime/third_party/boringssl/crypto/dh/params.cc +411 -0
  159. package/runtime/third_party/boringssl/crypto/digest/digest_extra.cc +361 -0
  160. package/runtime/third_party/boringssl/crypto/dsa/dsa.cc +922 -0
  161. package/runtime/third_party/boringssl/crypto/dsa/dsa_asn1.cc +306 -0
  162. package/runtime/third_party/boringssl/crypto/dsa/internal.h +56 -0
  163. package/runtime/third_party/boringssl/crypto/ec/ec_asn1.cc +542 -0
  164. package/runtime/third_party/boringssl/crypto/ec/ec_derive.cc +94 -0
  165. package/runtime/third_party/boringssl/crypto/ec/hash_to_curve.cc +773 -0
  166. package/runtime/third_party/boringssl/crypto/ec/internal.h +114 -0
  167. package/runtime/third_party/boringssl/crypto/ecdh/ecdh.cc +75 -0
  168. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.cc +337 -0
  169. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  170. package/runtime/third_party/boringssl/crypto/engine/engine.cc +95 -0
  171. package/runtime/third_party/boringssl/crypto/err/err.cc +820 -0
  172. package/runtime/third_party/boringssl/crypto/err/internal.h +45 -0
  173. package/runtime/third_party/boringssl/crypto/evp/evp.cc +454 -0
  174. package/runtime/third_party/boringssl/crypto/evp/evp_asn1.cc +439 -0
  175. package/runtime/third_party/boringssl/crypto/evp/evp_ctx.cc +541 -0
  176. package/runtime/third_party/boringssl/crypto/evp/evp_kem.cc +101 -0
  177. package/runtime/third_party/boringssl/crypto/evp/internal.h +427 -0
  178. package/runtime/third_party/boringssl/crypto/evp/p_dh.cc +326 -0
  179. package/runtime/third_party/boringssl/crypto/evp/p_dsa.cc +333 -0
  180. package/runtime/third_party/boringssl/crypto/evp/p_ec.cc +736 -0
  181. package/runtime/third_party/boringssl/crypto/evp/p_ed25519.cc +359 -0
  182. package/runtime/third_party/boringssl/crypto/evp/p_hkdf.cc +204 -0
  183. package/runtime/third_party/boringssl/crypto/evp/p_mldsa.cc +549 -0
  184. package/runtime/third_party/boringssl/crypto/evp/p_mlkem.cc +510 -0
  185. package/runtime/third_party/boringssl/crypto/evp/p_rsa.cc +1185 -0
  186. package/runtime/third_party/boringssl/crypto/evp/p_x25519.cc +371 -0
  187. package/runtime/third_party/boringssl/crypto/evp/p_xwing.cc +300 -0
  188. package/runtime/third_party/boringssl/crypto/evp/pbkdf.cc +105 -0
  189. package/runtime/third_party/boringssl/crypto/evp/print.cc +287 -0
  190. package/runtime/third_party/boringssl/crypto/evp/scrypt.cc +218 -0
  191. package/runtime/third_party/boringssl/crypto/evp/sign.cc +95 -0
  192. package/runtime/third_party/boringssl/crypto/ex_data.cc +140 -0
  193. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes.cc.inc +208 -0
  194. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes_nohw.cc.inc +1279 -0
  195. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cbc.cc.inc +132 -0
  196. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cfb.cc.inc +168 -0
  197. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ctr.cc.inc +102 -0
  198. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm.cc.inc +614 -0
  199. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm_nohw.cc.inc +304 -0
  200. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/internal.h +590 -0
  201. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.cc.inc +211 -0
  202. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.cc.inc +97 -0
  203. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ofb.cc.inc +55 -0
  204. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm.cc +288 -0
  205. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm_interface.h +953 -0
  206. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/add.cc.inc +276 -0
  207. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +573 -0
  208. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bn.cc.inc +377 -0
  209. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bytes.cc.inc +230 -0
  210. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/cmp.cc.inc +161 -0
  211. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/ctx.cc.inc +127 -0
  212. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div.cc.inc +738 -0
  213. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div_extra.cc.inc +90 -0
  214. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.cc.inc +743 -0
  215. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd.cc.inc +281 -0
  216. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.cc.inc +327 -0
  217. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/generic.cc.inc +579 -0
  218. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/internal.h +810 -0
  219. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/jacobi.cc.inc +101 -0
  220. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery.cc.inc +408 -0
  221. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.cc.inc +179 -0
  222. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/mul.cc.inc +347 -0
  223. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/prime.cc.inc +931 -0
  224. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/random.cc.inc +261 -0
  225. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.cc.inc +144 -0
  226. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +109 -0
  227. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/shift.cc.inc +317 -0
  228. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/sqrt.cc.inc +370 -0
  229. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/aead.cc.inc +619 -0
  230. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/cipher.cc.inc +837 -0
  231. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.cc.inc +1240 -0
  232. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aesccm.cc.inc +440 -0
  233. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +461 -0
  234. package/runtime/third_party/boringssl/crypto/fipsmodule/cmac/cmac.cc.inc +293 -0
  235. package/runtime/third_party/boringssl/crypto/fipsmodule/delocate.h +95 -0
  236. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/check.cc.inc +198 -0
  237. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/dh.cc.inc +401 -0
  238. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/internal.h +63 -0
  239. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digest.cc.inc +221 -0
  240. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digests.cc.inc +184 -0
  241. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/internal.h +72 -0
  242. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +166 -0
  243. package/runtime/third_party/boringssl/crypto/fipsmodule/digestsign/digestsign.cc.inc +230 -0
  244. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  245. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec.cc.inc +1024 -0
  246. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_key.cc.inc +536 -0
  247. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.cc.inc +379 -0
  248. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/felem.cc.inc +250 -0
  249. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/internal.h +752 -0
  250. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/oct.cc.inc +174 -0
  251. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz-table.h +9502 -0
  252. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.cc.inc +740 -0
  253. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.h +207 -0
  254. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256.cc.inc +578 -0
  255. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256_table.h +297 -0
  256. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/scalar.cc.inc +184 -0
  257. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple.cc.inc +246 -0
  258. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.cc.inc +274 -0
  259. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/util.cc.inc +258 -0
  260. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/wnaf.cc.inc +224 -0
  261. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.cc.inc +91 -0
  262. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +288 -0
  263. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/internal.h +57 -0
  264. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/internal.h +38 -0
  265. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/jitter.cc.inc +487 -0
  266. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  267. package/runtime/third_party/boringssl/crypto/fipsmodule/fips_shared_support.cc +28 -0
  268. package/runtime/third_party/boringssl/crypto/fipsmodule/hkdf/hkdf.cc.inc +114 -0
  269. package/runtime/third_party/boringssl/crypto/fipsmodule/hmac/hmac.cc.inc +218 -0
  270. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/internal.h +165 -0
  271. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/keccak.cc.inc +647 -0
  272. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  273. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/mldsa.cc.inc +3323 -0
  274. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  275. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/mlkem.cc.inc +1856 -0
  276. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  277. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.cc.inc +401 -0
  278. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/internal.h +99 -0
  279. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/rand.cc.inc +486 -0
  280. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +167 -0
  281. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/padding.cc.inc +371 -0
  282. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa.cc.inc +996 -0
  283. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.cc.inc +1000 -0
  284. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/fips.cc.inc +129 -0
  285. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/self_check.cc.inc +1093 -0
  286. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/internal.h +112 -0
  287. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +330 -0
  288. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/internal.h +205 -0
  289. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha1.cc.inc +404 -0
  290. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha256.cc.inc +315 -0
  291. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha512.cc.inc +473 -0
  292. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/address.h +144 -0
  293. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  294. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.cc.inc +179 -0
  295. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.h +48 -0
  296. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.cc.inc +164 -0
  297. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.h +58 -0
  298. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/params.h +178 -0
  299. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +690 -0
  300. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.cc.inc +326 -0
  301. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.h +71 -0
  302. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.cc.inc +172 -0
  303. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.h +40 -0
  304. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/internal.h +33 -0
  305. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/kdf.cc.inc +180 -0
  306. package/runtime/third_party/boringssl/crypto/fuzzer_mode.cc +30 -0
  307. package/runtime/third_party/boringssl/crypto/hpke/hpke.cc +1514 -0
  308. package/runtime/third_party/boringssl/crypto/hrss/asm/poly_rq_mul.S +8489 -0
  309. package/runtime/third_party/boringssl/crypto/hrss/hrss.cc +2189 -0
  310. package/runtime/third_party/boringssl/crypto/hrss/internal.h +64 -0
  311. package/runtime/third_party/boringssl/crypto/internal.h +1767 -0
  312. package/runtime/third_party/boringssl/crypto/lhash/internal.h +222 -0
  313. package/runtime/third_party/boringssl/crypto/lhash/lhash.cc +312 -0
  314. package/runtime/third_party/boringssl/crypto/md4/md4.cc +207 -0
  315. package/runtime/third_party/boringssl/crypto/md5/internal.h +34 -0
  316. package/runtime/third_party/boringssl/crypto/md5/md5.cc +255 -0
  317. package/runtime/third_party/boringssl/crypto/mem.cc +577 -0
  318. package/runtime/third_party/boringssl/crypto/mem_internal.h +706 -0
  319. package/runtime/third_party/boringssl/crypto/mldsa/mldsa.cc +296 -0
  320. package/runtime/third_party/boringssl/crypto/mlkem/mlkem.cc +108 -0
  321. package/runtime/third_party/boringssl/crypto/obj/obj.cc +494 -0
  322. package/runtime/third_party/boringssl/crypto/obj/obj_dat.h +11722 -0
  323. package/runtime/third_party/boringssl/crypto/obj/obj_xref.cc +83 -0
  324. package/runtime/third_party/boringssl/crypto/params_internal.h +30 -0
  325. package/runtime/third_party/boringssl/crypto/pem/internal.h +135 -0
  326. package/runtime/third_party/boringssl/crypto/pem/pem_all.cc +153 -0
  327. package/runtime/third_party/boringssl/crypto/pem/pem_info.cc +250 -0
  328. package/runtime/third_party/boringssl/crypto/pem/pem_lib.cc +707 -0
  329. package/runtime/third_party/boringssl/crypto/pem/pem_oth.cc +45 -0
  330. package/runtime/third_party/boringssl/crypto/pem/pem_pk8.cc +211 -0
  331. package/runtime/third_party/boringssl/crypto/pem/pem_pkey.cc +147 -0
  332. package/runtime/third_party/boringssl/crypto/pem/pem_x509.cc +25 -0
  333. package/runtime/third_party/boringssl/crypto/pem/pem_xaux.cc +25 -0
  334. package/runtime/third_party/boringssl/crypto/pkcs7/internal.h +67 -0
  335. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7.cc +198 -0
  336. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7_x509.cc +527 -0
  337. package/runtime/third_party/boringssl/crypto/pkcs8/internal.h +98 -0
  338. package/runtime/third_party/boringssl/crypto/pkcs8/p5_pbev2.cc +286 -0
  339. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8.cc +473 -0
  340. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8_x509.cc +1328 -0
  341. package/runtime/third_party/boringssl/crypto/poly1305/internal.h +54 -0
  342. package/runtime/third_party/boringssl/crypto/poly1305/poly1305.cc +315 -0
  343. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm.cc +294 -0
  344. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm_asm.S +2017 -0
  345. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_vec.cc +853 -0
  346. package/runtime/third_party/boringssl/crypto/pool/internal.h +95 -0
  347. package/runtime/third_party/boringssl/crypto/pool/pool.cc +282 -0
  348. package/runtime/third_party/boringssl/crypto/rand/deterministic.cc +58 -0
  349. package/runtime/third_party/boringssl/crypto/rand/fork_detect.cc +222 -0
  350. package/runtime/third_party/boringssl/crypto/rand/forkunsafe.cc +44 -0
  351. package/runtime/third_party/boringssl/crypto/rand/getentropy.cc +53 -0
  352. package/runtime/third_party/boringssl/crypto/rand/internal.h +67 -0
  353. package/runtime/third_party/boringssl/crypto/rand/ios.cc +35 -0
  354. package/runtime/third_party/boringssl/crypto/rand/rand.cc +79 -0
  355. package/runtime/third_party/boringssl/crypto/rand/trusty.cc +39 -0
  356. package/runtime/third_party/boringssl/crypto/rand/urandom.cc +149 -0
  357. package/runtime/third_party/boringssl/crypto/rand/windows.cc +91 -0
  358. package/runtime/third_party/boringssl/crypto/rc4/rc4.cc +56 -0
  359. package/runtime/third_party/boringssl/crypto/refcount.cc +49 -0
  360. package/runtime/third_party/boringssl/crypto/rsa/internal.h +51 -0
  361. package/runtime/third_party/boringssl/crypto/rsa/rsa_asn1.cc +404 -0
  362. package/runtime/third_party/boringssl/crypto/rsa/rsa_crypt.cc +530 -0
  363. package/runtime/third_party/boringssl/crypto/rsa/rsa_extra.cc +30 -0
  364. package/runtime/third_party/boringssl/crypto/rsa/rsa_print.cc +25 -0
  365. package/runtime/third_party/boringssl/crypto/sha/sha1.cc +55 -0
  366. package/runtime/third_party/boringssl/crypto/sha/sha256.cc +89 -0
  367. package/runtime/third_party/boringssl/crypto/sha/sha512.cc +106 -0
  368. package/runtime/third_party/boringssl/crypto/siphash/siphash.cc +81 -0
  369. package/runtime/third_party/boringssl/crypto/slhdsa/slhdsa.cc +167 -0
  370. package/runtime/third_party/boringssl/crypto/spake2plus/internal.h +204 -0
  371. package/runtime/third_party/boringssl/crypto/spake2plus/spake2plus.cc +501 -0
  372. package/runtime/third_party/boringssl/crypto/stack/stack.cc +462 -0
  373. package/runtime/third_party/boringssl/crypto/thread.cc +68 -0
  374. package/runtime/third_party/boringssl/crypto/thread_none.cc +48 -0
  375. package/runtime/third_party/boringssl/crypto/thread_pthread.cc +138 -0
  376. package/runtime/third_party/boringssl/crypto/thread_win.cc +227 -0
  377. package/runtime/third_party/boringssl/crypto/trust_token/internal.h +405 -0
  378. package/runtime/third_party/boringssl/crypto/trust_token/pmbtoken.cc +1672 -0
  379. package/runtime/third_party/boringssl/crypto/trust_token/trust_token.cc +701 -0
  380. package/runtime/third_party/boringssl/crypto/trust_token/voprf.cc +1266 -0
  381. package/runtime/third_party/boringssl/crypto/x509/a_digest.cc +52 -0
  382. package/runtime/third_party/boringssl/crypto/x509/a_sign.cc +100 -0
  383. package/runtime/third_party/boringssl/crypto/x509/a_verify.cc +77 -0
  384. package/runtime/third_party/boringssl/crypto/x509/algorithm.cc +167 -0
  385. package/runtime/third_party/boringssl/crypto/x509/asn1_gen.cc +540 -0
  386. package/runtime/third_party/boringssl/crypto/x509/by_dir.cc +301 -0
  387. package/runtime/third_party/boringssl/crypto/x509/by_file.cc +226 -0
  388. package/runtime/third_party/boringssl/crypto/x509/i2d_pr.cc +37 -0
  389. package/runtime/third_party/boringssl/crypto/x509/internal.h +697 -0
  390. package/runtime/third_party/boringssl/crypto/x509/name_print.cc +187 -0
  391. package/runtime/third_party/boringssl/crypto/x509/policy.cc +686 -0
  392. package/runtime/third_party/boringssl/crypto/x509/rsa_pss.cc +187 -0
  393. package/runtime/third_party/boringssl/crypto/x509/t_crl.cc +106 -0
  394. package/runtime/third_party/boringssl/crypto/x509/t_req.cc +206 -0
  395. package/runtime/third_party/boringssl/crypto/x509/t_x509.cc +292 -0
  396. package/runtime/third_party/boringssl/crypto/x509/t_x509a.cc +81 -0
  397. package/runtime/third_party/boringssl/crypto/x509/v3_akey.cc +174 -0
  398. package/runtime/third_party/boringssl/crypto/x509/v3_akeya.cc +31 -0
  399. package/runtime/third_party/boringssl/crypto/x509/v3_alt.cc +636 -0
  400. package/runtime/third_party/boringssl/crypto/x509/v3_bcons.cc +96 -0
  401. package/runtime/third_party/boringssl/crypto/x509/v3_bitst.cc +100 -0
  402. package/runtime/third_party/boringssl/crypto/x509/v3_conf.cc +369 -0
  403. package/runtime/third_party/boringssl/crypto/x509/v3_cpols.cc +417 -0
  404. package/runtime/third_party/boringssl/crypto/x509/v3_crld.cc +471 -0
  405. package/runtime/third_party/boringssl/crypto/x509/v3_enum.cc +74 -0
  406. package/runtime/third_party/boringssl/crypto/x509/v3_extku.cc +97 -0
  407. package/runtime/third_party/boringssl/crypto/x509/v3_genn.cc +238 -0
  408. package/runtime/third_party/boringssl/crypto/x509/v3_ia5.cc +83 -0
  409. package/runtime/third_party/boringssl/crypto/x509/v3_info.cc +162 -0
  410. package/runtime/third_party/boringssl/crypto/x509/v3_int.cc +83 -0
  411. package/runtime/third_party/boringssl/crypto/x509/v3_lib.cc +349 -0
  412. package/runtime/third_party/boringssl/crypto/x509/v3_ncons.cc +798 -0
  413. package/runtime/third_party/boringssl/crypto/x509/v3_ocsp.cc +92 -0
  414. package/runtime/third_party/boringssl/crypto/x509/v3_pcons.cc +102 -0
  415. package/runtime/third_party/boringssl/crypto/x509/v3_pmaps.cc +110 -0
  416. package/runtime/third_party/boringssl/crypto/x509/v3_prn.cc +183 -0
  417. package/runtime/third_party/boringssl/crypto/x509/v3_purp.cc +580 -0
  418. package/runtime/third_party/boringssl/crypto/x509/v3_skey.cc +128 -0
  419. package/runtime/third_party/boringssl/crypto/x509/v3_utl.cc +1311 -0
  420. package/runtime/third_party/boringssl/crypto/x509/x509.cc +47 -0
  421. package/runtime/third_party/boringssl/crypto/x509/x509_att.cc +188 -0
  422. package/runtime/third_party/boringssl/crypto/x509/x509_cmp.cc +243 -0
  423. package/runtime/third_party/boringssl/crypto/x509/x509_d2.cc +66 -0
  424. package/runtime/third_party/boringssl/crypto/x509/x509_def.cc +42 -0
  425. package/runtime/third_party/boringssl/crypto/x509/x509_ext.cc +161 -0
  426. package/runtime/third_party/boringssl/crypto/x509/x509_lu.cc +570 -0
  427. package/runtime/third_party/boringssl/crypto/x509/x509_mtc.cc +598 -0
  428. package/runtime/third_party/boringssl/crypto/x509/x509_obj.cc +169 -0
  429. package/runtime/third_party/boringssl/crypto/x509/x509_req.cc +248 -0
  430. package/runtime/third_party/boringssl/crypto/x509/x509_set.cc +166 -0
  431. package/runtime/third_party/boringssl/crypto/x509/x509_trs.cc +123 -0
  432. package/runtime/third_party/boringssl/crypto/x509/x509_txt.cc +147 -0
  433. package/runtime/third_party/boringssl/crypto/x509/x509_v3.cc +249 -0
  434. package/runtime/third_party/boringssl/crypto/x509/x509_vfy.cc +1531 -0
  435. package/runtime/third_party/boringssl/crypto/x509/x509_vpm.cc +449 -0
  436. package/runtime/third_party/boringssl/crypto/x509/x509cset.cc +222 -0
  437. package/runtime/third_party/boringssl/crypto/x509/x509name.cc +377 -0
  438. package/runtime/third_party/boringssl/crypto/x509/x509rset.cc +55 -0
  439. package/runtime/third_party/boringssl/crypto/x509/x509spki.cc +91 -0
  440. package/runtime/third_party/boringssl/crypto/x509/x_algor.cc +223 -0
  441. package/runtime/third_party/boringssl/crypto/x509/x_all.cc +352 -0
  442. package/runtime/third_party/boringssl/crypto/x509/x_attrib.cc +61 -0
  443. package/runtime/third_party/boringssl/crypto/x509/x_crl.cc +325 -0
  444. package/runtime/third_party/boringssl/crypto/x509/x_exten.cc +42 -0
  445. package/runtime/third_party/boringssl/crypto/x509/x_name.cc +407 -0
  446. package/runtime/third_party/boringssl/crypto/x509/x_pubkey.cc +199 -0
  447. package/runtime/third_party/boringssl/crypto/x509/x_req.cc +80 -0
  448. package/runtime/third_party/boringssl/crypto/x509/x_sig.cc +51 -0
  449. package/runtime/third_party/boringssl/crypto/x509/x_spki.cc +44 -0
  450. package/runtime/third_party/boringssl/crypto/x509/x_x509.cc +495 -0
  451. package/runtime/third_party/boringssl/crypto/x509/x_x509a.cc +169 -0
  452. package/runtime/third_party/boringssl/crypto/xwing/xwing.cc +257 -0
  453. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-apple.S +1326 -0
  454. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-linux.S +1327 -0
  455. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-apple.S +1252 -0
  456. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-linux.S +1253 -0
  457. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-apple.S +873 -0
  458. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-linux.S +885 -0
  459. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-apple.S +2490 -0
  460. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-linux.S +2530 -0
  461. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-apple.S +2413 -0
  462. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-linux.S +2397 -0
  463. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv7-linux.S +784 -0
  464. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-apple.S +792 -0
  465. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-linux.S +786 -0
  466. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-win.S +798 -0
  467. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-apple.S +2912 -0
  468. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-linux.S +2907 -0
  469. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-win.S +2915 -0
  470. package/runtime/third_party/boringssl/gen/bcm/armv4-mont-linux.S +932 -0
  471. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-apple.S +1440 -0
  472. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-linux.S +1440 -0
  473. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-win.S +1446 -0
  474. package/runtime/third_party/boringssl/gen/bcm/bn-586-apple.S +530 -0
  475. package/runtime/third_party/boringssl/gen/bcm/bn-586-linux.S +540 -0
  476. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-apple.S +88 -0
  477. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-linux.S +87 -0
  478. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-win.S +87 -0
  479. package/runtime/third_party/boringssl/gen/bcm/bsaes-armv7-linux.S +1520 -0
  480. package/runtime/third_party/boringssl/gen/bcm/co-586-apple.S +1256 -0
  481. package/runtime/third_party/boringssl/gen/bcm/co-586-linux.S +1264 -0
  482. package/runtime/third_party/boringssl/gen/bcm/ghash-armv4-linux.S +242 -0
  483. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-apple.S +337 -0
  484. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-linux.S +335 -0
  485. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-win.S +341 -0
  486. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-apple.S +288 -0
  487. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-linux.S +292 -0
  488. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-apple.S +426 -0
  489. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-linux.S +425 -0
  490. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-apple.S +322 -0
  491. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-linux.S +328 -0
  492. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-apple.S +1134 -0
  493. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-linux.S +1129 -0
  494. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv7-linux.S +244 -0
  495. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-apple.S +567 -0
  496. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-linux.S +563 -0
  497. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-win.S +571 -0
  498. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-apple.S +1744 -0
  499. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-linux.S +1725 -0
  500. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-win.S +1765 -0
  501. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-apple.S +4544 -0
  502. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-linux.S +4600 -0
  503. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-apple.S +310 -0
  504. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-linux.S +310 -0
  505. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-win.S +310 -0
  506. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-apple.S +321 -0
  507. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-linux.S +335 -0
  508. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-apple.S +58 -0
  509. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-linux.S +57 -0
  510. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-apple.S +1756 -0
  511. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-linux.S +1751 -0
  512. package/runtime/third_party/boringssl/gen/bcm/sha1-586-apple.S +3782 -0
  513. package/runtime/third_party/boringssl/gen/bcm/sha1-586-linux.S +3788 -0
  514. package/runtime/third_party/boringssl/gen/bcm/sha1-armv4-large-linux.S +1479 -0
  515. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-apple.S +1219 -0
  516. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-linux.S +1218 -0
  517. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-win.S +1222 -0
  518. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-apple.S +5454 -0
  519. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-linux.S +5450 -0
  520. package/runtime/third_party/boringssl/gen/bcm/sha256-586-apple.S +5593 -0
  521. package/runtime/third_party/boringssl/gen/bcm/sha256-586-linux.S +5599 -0
  522. package/runtime/third_party/boringssl/gen/bcm/sha256-armv4-linux.S +2840 -0
  523. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-apple.S +1195 -0
  524. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-linux.S +1194 -0
  525. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-win.S +1198 -0
  526. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-apple.S +4173 -0
  527. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-linux.S +4170 -0
  528. package/runtime/third_party/boringssl/gen/bcm/sha512-586-apple.S +2406 -0
  529. package/runtime/third_party/boringssl/gen/bcm/sha512-586-linux.S +2410 -0
  530. package/runtime/third_party/boringssl/gen/bcm/sha512-armv4-linux.S +1857 -0
  531. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-apple.S +1598 -0
  532. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-linux.S +1597 -0
  533. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-win.S +1601 -0
  534. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-apple.S +2979 -0
  535. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-linux.S +2978 -0
  536. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv7-linux.S +1225 -0
  537. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-apple.S +1238 -0
  538. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-linux.S +1220 -0
  539. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-win.S +1256 -0
  540. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-apple.S +680 -0
  541. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-linux.S +706 -0
  542. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-apple.S +1146 -0
  543. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-linux.S +1133 -0
  544. package/runtime/third_party/boringssl/gen/bcm/x86-mont-apple.S +216 -0
  545. package/runtime/third_party/boringssl/gen/bcm/x86-mont-linux.S +218 -0
  546. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-apple.S +1238 -0
  547. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-linux.S +1237 -0
  548. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-apple.S +3644 -0
  549. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-linux.S +3628 -0
  550. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +325 -0
  551. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +325 -0
  552. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-apple.S +3113 -0
  553. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-linux.S +3091 -0
  554. package/runtime/third_party/boringssl/gen/crypto/chacha-armv4-linux.S +1450 -0
  555. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-apple.S +1969 -0
  556. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-linux.S +1967 -0
  557. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-win.S +1973 -0
  558. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-apple.S +957 -0
  559. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-linux.S +961 -0
  560. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-apple.S +1608 -0
  561. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-linux.S +1611 -0
  562. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-apple.S +3010 -0
  563. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-linux.S +3008 -0
  564. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-win.S +3014 -0
  565. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-apple.S +8903 -0
  566. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-linux.S +8940 -0
  567. package/runtime/third_party/boringssl/gen/crypto/err_data.cc +1578 -0
  568. package/runtime/third_party/boringssl/gen/crypto/md5-586-apple.S +684 -0
  569. package/runtime/third_party/boringssl/gen/crypto/md5-586-linux.S +686 -0
  570. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-apple.S +690 -0
  571. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-linux.S +695 -0
  572. package/runtime/third_party/boringssl/include/openssl/aead.h +650 -0
  573. package/runtime/third_party/boringssl/include/openssl/aes.h +173 -0
  574. package/runtime/third_party/boringssl/include/openssl/arm_arch.h +24 -0
  575. package/runtime/third_party/boringssl/include/openssl/asm_base.h +219 -0
  576. package/runtime/third_party/boringssl/include/openssl/asn1.h +2002 -0
  577. package/runtime/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  578. package/runtime/third_party/boringssl/include/openssl/asn1t.h +584 -0
  579. package/runtime/third_party/boringssl/include/openssl/base.h +548 -0
  580. package/runtime/third_party/boringssl/include/openssl/base64.h +156 -0
  581. package/runtime/third_party/boringssl/include/openssl/bio.h +1061 -0
  582. package/runtime/third_party/boringssl/include/openssl/blake2.h +63 -0
  583. package/runtime/third_party/boringssl/include/openssl/blowfish.h +58 -0
  584. package/runtime/third_party/boringssl/include/openssl/bn.h +986 -0
  585. package/runtime/third_party/boringssl/include/openssl/buf.h +95 -0
  586. package/runtime/third_party/boringssl/include/openssl/buffer.h +18 -0
  587. package/runtime/third_party/boringssl/include/openssl/bytestring.h +798 -0
  588. package/runtime/third_party/boringssl/include/openssl/cast.h +91 -0
  589. package/runtime/third_party/boringssl/include/openssl/chacha.h +47 -0
  590. package/runtime/third_party/boringssl/include/openssl/cipher.h +819 -0
  591. package/runtime/third_party/boringssl/include/openssl/cmac.h +91 -0
  592. package/runtime/third_party/boringssl/include/openssl/cms.h +147 -0
  593. package/runtime/third_party/boringssl/include/openssl/conf.h +136 -0
  594. package/runtime/third_party/boringssl/include/openssl/configuration.h +18 -0
  595. package/runtime/third_party/boringssl/include/openssl/cpu.h +18 -0
  596. package/runtime/third_party/boringssl/include/openssl/crypto.h +235 -0
  597. package/runtime/third_party/boringssl/include/openssl/ctrdrbg.h +116 -0
  598. package/runtime/third_party/boringssl/include/openssl/curve25519.h +309 -0
  599. package/runtime/third_party/boringssl/include/openssl/des.h +134 -0
  600. package/runtime/third_party/boringssl/include/openssl/dh.h +336 -0
  601. package/runtime/third_party/boringssl/include/openssl/digest.h +399 -0
  602. package/runtime/third_party/boringssl/include/openssl/dsa.h +392 -0
  603. package/runtime/third_party/boringssl/include/openssl/dtls1.h +16 -0
  604. package/runtime/third_party/boringssl/include/openssl/e_os2.h +18 -0
  605. package/runtime/third_party/boringssl/include/openssl/ec.h +530 -0
  606. package/runtime/third_party/boringssl/include/openssl/ec_key.h +358 -0
  607. package/runtime/third_party/boringssl/include/openssl/ecdh.h +67 -0
  608. package/runtime/third_party/boringssl/include/openssl/ecdsa.h +242 -0
  609. package/runtime/third_party/boringssl/include/openssl/engine.h +109 -0
  610. package/runtime/third_party/boringssl/include/openssl/err.h +416 -0
  611. package/runtime/third_party/boringssl/include/openssl/evp.h +1645 -0
  612. package/runtime/third_party/boringssl/include/openssl/evp_errors.h +66 -0
  613. package/runtime/third_party/boringssl/include/openssl/ex_data.h +117 -0
  614. package/runtime/third_party/boringssl/include/openssl/hkdf.h +68 -0
  615. package/runtime/third_party/boringssl/include/openssl/hmac.h +151 -0
  616. package/runtime/third_party/boringssl/include/openssl/hpke.h +456 -0
  617. package/runtime/third_party/boringssl/include/openssl/hrss.h +108 -0
  618. package/runtime/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  619. package/runtime/third_party/boringssl/include/openssl/kdf.h +92 -0
  620. package/runtime/third_party/boringssl/include/openssl/lhash.h +18 -0
  621. package/runtime/third_party/boringssl/include/openssl/md4.h +73 -0
  622. package/runtime/third_party/boringssl/include/openssl/md5.h +67 -0
  623. package/runtime/third_party/boringssl/include/openssl/mem.h +215 -0
  624. package/runtime/third_party/boringssl/include/openssl/mldsa.h +486 -0
  625. package/runtime/third_party/boringssl/include/openssl/mlkem.h +222 -0
  626. package/runtime/third_party/boringssl/include/openssl/nid.h +5561 -0
  627. package/runtime/third_party/boringssl/include/openssl/obj.h +225 -0
  628. package/runtime/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  629. package/runtime/third_party/boringssl/include/openssl/objects.h +18 -0
  630. package/runtime/third_party/boringssl/include/openssl/opensslconf.h +108 -0
  631. package/runtime/third_party/boringssl/include/openssl/opensslv.h +18 -0
  632. package/runtime/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  633. package/runtime/third_party/boringssl/include/openssl/params.h +42 -0
  634. package/runtime/third_party/boringssl/include/openssl/pem.h +769 -0
  635. package/runtime/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  636. package/runtime/third_party/boringssl/include/openssl/pkcs7.h +239 -0
  637. package/runtime/third_party/boringssl/include/openssl/pkcs8.h +267 -0
  638. package/runtime/third_party/boringssl/include/openssl/poly1305.h +52 -0
  639. package/runtime/third_party/boringssl/include/openssl/pool.h +137 -0
  640. package/runtime/third_party/boringssl/include/openssl/posix_time.h +51 -0
  641. package/runtime/third_party/boringssl/include/openssl/prefix_symbols.h +8000 -0
  642. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_S.h +633 -0
  643. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_c.h +329 -0
  644. package/runtime/third_party/boringssl/include/openssl/rand.h +138 -0
  645. package/runtime/third_party/boringssl/include/openssl/rc4.h +54 -0
  646. package/runtime/third_party/boringssl/include/openssl/ripemd.h +71 -0
  647. package/runtime/third_party/boringssl/include/openssl/rsa.h +893 -0
  648. package/runtime/third_party/boringssl/include/openssl/safestack.h +16 -0
  649. package/runtime/third_party/boringssl/include/openssl/service_indicator.h +19 -0
  650. package/runtime/third_party/boringssl/include/openssl/sha.h +108 -0
  651. package/runtime/third_party/boringssl/include/openssl/sha2.h +201 -0
  652. package/runtime/third_party/boringssl/include/openssl/siphash.h +37 -0
  653. package/runtime/third_party/boringssl/include/openssl/slhdsa.h +250 -0
  654. package/runtime/third_party/boringssl/include/openssl/span.h +376 -0
  655. package/runtime/third_party/boringssl/include/openssl/srtp.h +18 -0
  656. package/runtime/third_party/boringssl/include/openssl/ssl.h +7211 -0
  657. package/runtime/third_party/boringssl/include/openssl/ssl3.h +171 -0
  658. package/runtime/third_party/boringssl/include/openssl/stack.h +688 -0
  659. package/runtime/third_party/boringssl/include/openssl/target.h +246 -0
  660. package/runtime/third_party/boringssl/include/openssl/thread.h +114 -0
  661. package/runtime/third_party/boringssl/include/openssl/time.h +22 -0
  662. package/runtime/third_party/boringssl/include/openssl/tls1.h +263 -0
  663. package/runtime/third_party/boringssl/include/openssl/tls_prf.h +47 -0
  664. package/runtime/third_party/boringssl/include/openssl/trust_token.h +349 -0
  665. package/runtime/third_party/boringssl/include/openssl/type_check.h +37 -0
  666. package/runtime/third_party/boringssl/include/openssl/types.h +18 -0
  667. package/runtime/third_party/boringssl/include/openssl/x509.h +5404 -0
  668. package/runtime/third_party/boringssl/include/openssl/x509_vfy.h +18 -0
  669. package/runtime/third_party/boringssl/include/openssl/x509v3.h +63 -0
  670. package/runtime/third_party/boringssl/include/openssl/x509v3_errors.h +84 -0
  671. package/runtime/third_party/boringssl/include/openssl/xwing.h +115 -0
  672. package/runtime/third_party/boringssl/sources.json +696 -0
  673. package/runtime/third_party/boringssl/ssl/bio_ssl.cc +196 -0
  674. package/runtime/third_party/boringssl/ssl/d1_both.cc +1137 -0
  675. package/runtime/third_party/boringssl/ssl/d1_lib.cc +245 -0
  676. package/runtime/third_party/boringssl/ssl/d1_pkt.cc +322 -0
  677. package/runtime/third_party/boringssl/ssl/d1_srtp.cc +128 -0
  678. package/runtime/third_party/boringssl/ssl/dtls_method.cc +216 -0
  679. package/runtime/third_party/boringssl/ssl/dtls_record.cc +586 -0
  680. package/runtime/third_party/boringssl/ssl/encrypted_client_hello.cc +1110 -0
  681. package/runtime/third_party/boringssl/ssl/extensions.cc +5368 -0
  682. package/runtime/third_party/boringssl/ssl/handoff.cc +625 -0
  683. package/runtime/third_party/boringssl/ssl/handshake.cc +694 -0
  684. package/runtime/third_party/boringssl/ssl/handshake_client.cc +1958 -0
  685. package/runtime/third_party/boringssl/ssl/handshake_server.cc +1875 -0
  686. package/runtime/third_party/boringssl/ssl/internal.h +4506 -0
  687. package/runtime/third_party/boringssl/ssl/s3_both.cc +555 -0
  688. package/runtime/third_party/boringssl/ssl/s3_lib.cc +88 -0
  689. package/runtime/third_party/boringssl/ssl/s3_pkt.cc +396 -0
  690. package/runtime/third_party/boringssl/ssl/ssl_aead_ctx.cc +416 -0
  691. package/runtime/third_party/boringssl/ssl/ssl_asn1.cc +851 -0
  692. package/runtime/third_party/boringssl/ssl/ssl_buffer.cc +304 -0
  693. package/runtime/third_party/boringssl/ssl/ssl_cert.cc +723 -0
  694. package/runtime/third_party/boringssl/ssl/ssl_cipher.cc +1762 -0
  695. package/runtime/third_party/boringssl/ssl/ssl_credential.cc +913 -0
  696. package/runtime/third_party/boringssl/ssl/ssl_file.cc +375 -0
  697. package/runtime/third_party/boringssl/ssl/ssl_key_share.cc +445 -0
  698. package/runtime/third_party/boringssl/ssl/ssl_lib.cc +4132 -0
  699. package/runtime/third_party/boringssl/ssl/ssl_privkey.cc +973 -0
  700. package/runtime/third_party/boringssl/ssl/ssl_session.cc +1273 -0
  701. package/runtime/third_party/boringssl/ssl/ssl_stat.cc +162 -0
  702. package/runtime/third_party/boringssl/ssl/ssl_transcript.cc +224 -0
  703. package/runtime/third_party/boringssl/ssl/ssl_versions.cc +436 -0
  704. package/runtime/third_party/boringssl/ssl/ssl_x509.cc +1229 -0
  705. package/runtime/third_party/boringssl/ssl/t1_enc.cc +266 -0
  706. package/runtime/third_party/boringssl/ssl/tls13_both.cc +764 -0
  707. package/runtime/third_party/boringssl/ssl/tls13_client.cc +1325 -0
  708. package/runtime/third_party/boringssl/ssl/tls13_enc.cc +746 -0
  709. package/runtime/third_party/boringssl/ssl/tls13_server.cc +1623 -0
  710. package/runtime/third_party/boringssl/ssl/tls_method.cc +266 -0
  711. package/runtime/third_party/boringssl/ssl/tls_record.cc +524 -0
  712. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_mul.S +178 -0
  713. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_square.S +146 -0
  714. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_mul.S +177 -0
  715. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_sqr.S +166 -0
  716. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  717. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  718. package/runtime/third_party/boringssl/third_party/fiat/curve25519_32.h +1571 -0
  719. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64.h +978 -0
  720. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_adx.h +700 -0
  721. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_msvc.h +1281 -0
  722. package/runtime/third_party/boringssl/third_party/fiat/p256_32.h +4760 -0
  723. package/runtime/third_party/boringssl/third_party/fiat/p256_64.h +1984 -0
  724. package/runtime/third_party/boringssl/third_party/fiat/p256_64_msvc.h +1939 -0
  725. package/runtime/third_party/boringssl/third_party/fiat/p256_field.c.inc +26 -0
  726. package/runtime/third_party/boringssl/third_party/fiat/p256_field_32.br.c.inc +71 -0
  727. package/runtime/third_party/boringssl/third_party/fiat/p256_field_64.br.c.inc +84 -0
  728. package/runtime/third_party/boringssl/third_party/fiat/p256_point.br.c.inc +112 -0
  729. package/runtime/third_party/v8-ieee754/README.md +2 -1
  730. package/runtime/third_party/v8-ieee754/convert.py +4 -0
  731. package/runtime/third_party/v8-ieee754/ieee754.c +1 -1
  732. package/runtime/third_party/bearssl/LICENSE.txt +0 -21
  733. package/runtime/third_party/bearssl/README.txt +0 -136
  734. package/runtime/third_party/bearssl/VERSION +0 -1
  735. package/runtime/third_party/bearssl/inc/bearssl.h +0 -183
  736. package/runtime/third_party/bearssl/inc/bearssl_aead.h +0 -1059
  737. package/runtime/third_party/bearssl/inc/bearssl_block.h +0 -2618
  738. package/runtime/third_party/bearssl/inc/bearssl_ec.h +0 -967
  739. package/runtime/third_party/bearssl/inc/bearssl_hash.h +0 -1346
  740. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +0 -241
  741. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +0 -284
  742. package/runtime/third_party/bearssl/inc/bearssl_pem.h +0 -294
  743. package/runtime/third_party/bearssl/inc/bearssl_prf.h +0 -150
  744. package/runtime/third_party/bearssl/inc/bearssl_rand.h +0 -397
  745. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +0 -1655
  746. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +0 -4296
  747. package/runtime/third_party/bearssl/inc/bearssl_x509.h +0 -1474
  748. package/runtime/third_party/bearssl/src/aead/ccm.c +0 -346
  749. package/runtime/third_party/bearssl/src/aead/eax.c +0 -525
  750. package/runtime/third_party/bearssl/src/aead/gcm.c +0 -318
  751. package/runtime/third_party/bearssl/src/codec/ccopy.c +0 -44
  752. package/runtime/third_party/bearssl/src/codec/dec16be.c +0 -38
  753. package/runtime/third_party/bearssl/src/codec/dec16le.c +0 -38
  754. package/runtime/third_party/bearssl/src/codec/dec32be.c +0 -38
  755. package/runtime/third_party/bearssl/src/codec/dec32le.c +0 -38
  756. package/runtime/third_party/bearssl/src/codec/dec64be.c +0 -38
  757. package/runtime/third_party/bearssl/src/codec/dec64le.c +0 -38
  758. package/runtime/third_party/bearssl/src/codec/enc16be.c +0 -38
  759. package/runtime/third_party/bearssl/src/codec/enc16le.c +0 -38
  760. package/runtime/third_party/bearssl/src/codec/enc32be.c +0 -38
  761. package/runtime/third_party/bearssl/src/codec/enc32le.c +0 -38
  762. package/runtime/third_party/bearssl/src/codec/enc64be.c +0 -38
  763. package/runtime/third_party/bearssl/src/codec/enc64le.c +0 -38
  764. package/runtime/third_party/bearssl/src/codec/pemdec.c +0 -526
  765. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +0 -314
  766. package/runtime/third_party/bearssl/src/codec/pemenc.c +0 -173
  767. package/runtime/third_party/bearssl/src/config.h +0 -247
  768. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +0 -121
  769. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +0 -171
  770. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +0 -398
  771. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +0 -390
  772. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +0 -1478
  773. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +0 -800
  774. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +0 -605
  775. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +0 -831
  776. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +0 -46
  777. package/runtime/third_party/bearssl/src/ec/ec_default.c +0 -36
  778. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +0 -86
  779. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +0 -2124
  780. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +0 -1469
  781. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +0 -1765
  782. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +0 -1781
  783. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +0 -824
  784. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +0 -826
  785. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +0 -85
  786. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +0 -51
  787. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +0 -57
  788. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +0 -64
  789. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +0 -134
  790. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +0 -36
  791. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +0 -36
  792. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +0 -36
  793. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +0 -36
  794. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +0 -47
  795. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +0 -45
  796. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +0 -174
  797. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +0 -48
  798. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +0 -166
  799. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +0 -47
  800. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +0 -45
  801. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +0 -173
  802. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +0 -48
  803. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +0 -165
  804. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +0 -121
  805. package/runtime/third_party/bearssl/src/hash/dig_oid.c +0 -84
  806. package/runtime/third_party/bearssl/src/hash/dig_size.c +0 -50
  807. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +0 -345
  808. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +0 -251
  809. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +0 -154
  810. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +0 -389
  811. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +0 -411
  812. package/runtime/third_party/bearssl/src/hash/md5.c +0 -208
  813. package/runtime/third_party/bearssl/src/hash/md5sha1.c +0 -141
  814. package/runtime/third_party/bearssl/src/hash/mgf1.c +0 -56
  815. package/runtime/third_party/bearssl/src/hash/multihash.c +0 -166
  816. package/runtime/third_party/bearssl/src/hash/sha1.c +0 -191
  817. package/runtime/third_party/bearssl/src/hash/sha2big.c +0 -285
  818. package/runtime/third_party/bearssl/src/hash/sha2small.c +0 -341
  819. package/runtime/third_party/bearssl/src/inner.h +0 -2577
  820. package/runtime/third_party/bearssl/src/int/i15_add.c +0 -46
  821. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +0 -44
  822. package/runtime/third_party/bearssl/src/int/i15_decmod.c +0 -124
  823. package/runtime/third_party/bearssl/src/int/i15_decode.c +0 -56
  824. package/runtime/third_party/bearssl/src/int/i15_decred.c +0 -100
  825. package/runtime/third_party/bearssl/src/int/i15_encode.c +0 -56
  826. package/runtime/third_party/bearssl/src/int/i15_fmont.c +0 -59
  827. package/runtime/third_party/bearssl/src/int/i15_iszero.c +0 -39
  828. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +0 -465
  829. package/runtime/third_party/bearssl/src/int/i15_modpow.c +0 -50
  830. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +0 -160
  831. package/runtime/third_party/bearssl/src/int/i15_montmul.c +0 -184
  832. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +0 -61
  833. package/runtime/third_party/bearssl/src/int/i15_muladd.c +0 -173
  834. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +0 -38
  835. package/runtime/third_party/bearssl/src/int/i15_reduce.c +0 -66
  836. package/runtime/third_party/bearssl/src/int/i15_rshift.c +0 -47
  837. package/runtime/third_party/bearssl/src/int/i15_sub.c +0 -46
  838. package/runtime/third_party/bearssl/src/int/i15_tmont.c +0 -36
  839. package/runtime/third_party/bearssl/src/int/i31_add.c +0 -46
  840. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +0 -44
  841. package/runtime/third_party/bearssl/src/int/i31_decmod.c +0 -124
  842. package/runtime/third_party/bearssl/src/int/i31_decode.c +0 -57
  843. package/runtime/third_party/bearssl/src/int/i31_decred.c +0 -103
  844. package/runtime/third_party/bearssl/src/int/i31_encode.c +0 -79
  845. package/runtime/third_party/bearssl/src/int/i31_fmont.c +0 -60
  846. package/runtime/third_party/bearssl/src/int/i31_iszero.c +0 -39
  847. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +0 -488
  848. package/runtime/third_party/bearssl/src/int/i31_modpow.c +0 -65
  849. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +0 -160
  850. package/runtime/third_party/bearssl/src/int/i31_montmul.c +0 -127
  851. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +0 -74
  852. package/runtime/third_party/bearssl/src/int/i31_muladd.c +0 -157
  853. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +0 -39
  854. package/runtime/third_party/bearssl/src/int/i31_reduce.c +0 -66
  855. package/runtime/third_party/bearssl/src/int/i31_rshift.c +0 -47
  856. package/runtime/third_party/bearssl/src/int/i31_sub.c +0 -46
  857. package/runtime/third_party/bearssl/src/int/i31_tmont.c +0 -36
  858. package/runtime/third_party/bearssl/src/int/i32_add.c +0 -51
  859. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +0 -44
  860. package/runtime/third_party/bearssl/src/int/i32_decmod.c +0 -77
  861. package/runtime/third_party/bearssl/src/int/i32_decode.c +0 -63
  862. package/runtime/third_party/bearssl/src/int/i32_decred.c +0 -107
  863. package/runtime/third_party/bearssl/src/int/i32_div32.c +0 -56
  864. package/runtime/third_party/bearssl/src/int/i32_encode.c +0 -72
  865. package/runtime/third_party/bearssl/src/int/i32_fmont.c +0 -60
  866. package/runtime/third_party/bearssl/src/int/i32_iszero.c +0 -39
  867. package/runtime/third_party/bearssl/src/int/i32_modpow.c +0 -65
  868. package/runtime/third_party/bearssl/src/int/i32_montmul.c +0 -69
  869. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +0 -56
  870. package/runtime/third_party/bearssl/src/int/i32_muladd.c +0 -138
  871. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +0 -39
  872. package/runtime/third_party/bearssl/src/int/i32_reduce.c +0 -66
  873. package/runtime/third_party/bearssl/src/int/i32_sub.c +0 -51
  874. package/runtime/third_party/bearssl/src/int/i32_tmont.c +0 -36
  875. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +0 -493
  876. package/runtime/third_party/bearssl/src/kdf/hkdf.c +0 -107
  877. package/runtime/third_party/bearssl/src/kdf/shake.c +0 -590
  878. package/runtime/third_party/bearssl/src/mac/hmac.c +0 -122
  879. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +0 -193
  880. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +0 -206
  881. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +0 -157
  882. package/runtime/third_party/bearssl/src/rand/sysrng.c +0 -252
  883. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +0 -38
  884. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +0 -36
  885. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +0 -38
  886. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +0 -38
  887. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +0 -38
  888. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +0 -38
  889. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +0 -38
  890. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +0 -36
  891. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +0 -38
  892. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +0 -38
  893. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +0 -38
  894. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +0 -36
  895. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +0 -583
  896. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +0 -99
  897. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +0 -41
  898. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +0 -44
  899. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +0 -37
  900. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +0 -43
  901. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +0 -209
  902. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +0 -320
  903. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +0 -40
  904. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +0 -44
  905. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +0 -113
  906. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +0 -152
  907. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +0 -37
  908. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +0 -608
  909. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +0 -99
  910. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +0 -41
  911. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +0 -44
  912. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +0 -37
  913. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +0 -43
  914. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +0 -203
  915. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +0 -318
  916. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +0 -40
  917. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +0 -44
  918. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +0 -106
  919. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +0 -152
  920. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +0 -41
  921. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +0 -44
  922. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +0 -37
  923. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +0 -43
  924. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +0 -160
  925. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +0 -40
  926. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +0 -44
  927. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +0 -77
  928. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +0 -57
  929. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +0 -61
  930. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +0 -64
  931. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +0 -57
  932. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +0 -63
  933. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +0 -223
  934. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +0 -60
  935. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +0 -64
  936. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +0 -125
  937. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +0 -112
  938. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +0 -145
  939. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +0 -100
  940. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +0 -121
  941. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +0 -106
  942. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +0 -121
  943. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +0 -52
  944. package/runtime/third_party/bearssl/src/settings.c +0 -306
  945. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +0 -69
  946. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +0 -67
  947. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +0 -84
  948. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +0 -142
  949. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +0 -254
  950. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +0 -157
  951. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +0 -112
  952. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +0 -328
  953. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +0 -398
  954. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +0 -104
  955. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +0 -81
  956. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +0 -114
  957. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +0 -433
  958. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +0 -159
  959. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +0 -115
  960. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +0 -111
  961. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +0 -91
  962. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +0 -116
  963. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +0 -422
  964. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +0 -170
  965. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +0 -112
  966. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +0 -445
  967. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +0 -670
  968. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +0 -417
  969. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +0 -717
  970. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +0 -946
  971. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +0 -69
  972. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +0 -67
  973. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +0 -84
  974. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +0 -142
  975. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +0 -176
  976. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +0 -129
  977. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +0 -240
  978. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +0 -223
  979. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +0 -122
  980. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +0 -211
  981. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +0 -596
  982. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +0 -106
  983. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +0 -237
  984. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +0 -411
  985. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +0 -87
  986. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +0 -69
  987. package/runtime/third_party/bearssl/src/symcipher/des_support.c +0 -166
  988. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +0 -310
  989. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +0 -85
  990. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +0 -67
  991. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +0 -260
  992. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +0 -297
  993. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +0 -475
  994. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +0 -221
  995. package/runtime/third_party/bearssl/src/x509/asn1.t0 +0 -757
  996. package/runtime/third_party/bearssl/src/x509/asn1enc.c +0 -93
  997. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +0 -110
  998. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +0 -161
  999. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +0 -97
  1000. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +0 -96
  1001. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +0 -653
  1002. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +0 -376
  1003. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +0 -776
  1004. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +0 -324
  1005. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +0 -105
  1006. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +0 -1722
  1007. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +0 -1526
  1008. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +0 -59
@@ -0,0 +1,1514 @@
1
+ // Copyright 2020 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/hpke.h>
16
+
17
+ #include <assert.h>
18
+ #include <string.h>
19
+
20
+ #include <array>
21
+ #include <string_view>
22
+
23
+ #include <openssl/aead.h>
24
+ #include <openssl/bytestring.h>
25
+ #include <openssl/curve25519.h>
26
+ #include <openssl/digest.h>
27
+ #include <openssl/ec.h>
28
+ #include <openssl/err.h>
29
+ #include <openssl/evp.h>
30
+ #include <openssl/evp_errors.h>
31
+ #include <openssl/hkdf.h>
32
+ #include <openssl/mem.h>
33
+ #include <openssl/mlkem.h>
34
+ #include <openssl/rand.h>
35
+ #include <openssl/sha2.h>
36
+ #include <openssl/span.h>
37
+ #include <openssl/xwing.h>
38
+
39
+ #include "../fipsmodule/ec/internal.h"
40
+ #include "../fipsmodule/keccak/internal.h"
41
+ #include "../internal.h"
42
+ #include "../mem_internal.h"
43
+
44
+
45
+ using namespace bssl;
46
+
47
+ // This file implements RFC 9180.
48
+
49
+ #define MAX_SEED_LEN XWING_SEED_LEN
50
+ #define MAX_SHARED_SECRET_LEN SHA256_DIGEST_LENGTH
51
+
52
+ struct evp_hpke_kem_st {
53
+ uint16_t id;
54
+
55
+ // evp_pkey_alg_func and evp_kem_func, if non-null, provide the EVP_PKEY_CTX
56
+ // and EVP_KEM functionality backing this EVP_HPKE_KEM. If these are non-null,
57
+ // then `init_key`, `generate_key`, `derive_key`, `encap_with_seed`, and
58
+ // `decap` are null and 'seed_len` and `enc_len` are zero (until fully
59
+ // migrated), and the `evp_*` function pointers are non-null.
60
+ // TODO(crbug.com/535883377): Unify EVP_HPKE_KEM and EVP_KEM for all supported
61
+ // HPKE KEMs.
62
+ const EVP_PKEY_ALG *(*evp_pkey_alg_func)();
63
+ const EVP_KEM *(*evp_kem_func)();
64
+
65
+ size_t public_key_len;
66
+ size_t private_key_len;
67
+ size_t seed_len;
68
+ size_t enc_len;
69
+ int (*init_key)(EVP_HPKE_KEY *key, const uint8_t *priv_key,
70
+ size_t priv_key_len);
71
+ int (*generate_key)(EVP_HPKE_KEY *key);
72
+ int (*derive_key)(EVP_HPKE_KEY *key, Span<const uint8_t> ikm);
73
+ int (*encap_with_seed)(const EVP_HPKE_KEM *kem, uint8_t *out_shared_secret,
74
+ size_t *out_shared_secret_len, uint8_t *out_enc,
75
+ size_t *out_enc_len, size_t max_enc,
76
+ const uint8_t *peer_public_key,
77
+ size_t peer_public_key_len, const uint8_t *seed,
78
+ size_t seed_len);
79
+ int (*decap)(const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
80
+ size_t *out_shared_secret_len, const uint8_t *enc,
81
+ size_t enc_len);
82
+ int (*auth_encap_with_seed)(const EVP_HPKE_KEY *key,
83
+ uint8_t *out_shared_secret,
84
+ size_t *out_shared_secret_len, uint8_t *out_enc,
85
+ size_t *out_enc_len, size_t max_enc,
86
+ const uint8_t *peer_public_key,
87
+ size_t peer_public_key_len, const uint8_t *seed,
88
+ size_t seed_len);
89
+ int (*auth_decap)(const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
90
+ size_t *out_shared_secret_len, const uint8_t *enc,
91
+ size_t enc_len, const uint8_t *peer_public_key,
92
+ size_t peer_public_key_len);
93
+
94
+ // Hooks used for operations with `evp_pkey_alg_func` and `evp_kem_func`, when
95
+ // they are non-null.
96
+ // TODO(crbug.com/535883377): Unify EVP_HPKE_KEM and EVP_KEM for all supported
97
+ // HPKE KEMs.
98
+ EVP_PKEY *(*evp_deserialize_private_key)(const EVP_PKEY_ALG *alg,
99
+ const uint8_t *in, size_t len);
100
+ int (*evp_serialize_private_key)(const EVP_PKEY *pkey, uint8_t *out,
101
+ size_t *out_len);
102
+ EVP_PKEY *(*evp_deserialize_public_key)(const EVP_PKEY_ALG *alg,
103
+ const uint8_t *in, size_t len);
104
+ int (*evp_serialize_public_key)(const EVP_PKEY *pkey, uint8_t *out,
105
+ size_t *out_len);
106
+ EVP_PKEY *(*evp_derive_key_pair)(const EVP_PKEY_ALG *alg,
107
+ Span<const uint8_t> ikm);
108
+ };
109
+
110
+ struct evp_hpke_kdf_st {
111
+ uint16_t id;
112
+ // We only support HKDF-based KDFs.
113
+ const EVP_MD *(*hkdf_md_func)();
114
+ };
115
+
116
+ struct evp_hpke_aead_st {
117
+ uint16_t id;
118
+ const EVP_AEAD *(*aead_func)();
119
+ };
120
+
121
+
122
+ // Low-level labeled KDF functions.
123
+
124
+ static const char kHpkeVersionId[] = "HPKE-v1";
125
+
126
+ static int add_label_string(CBB *cbb, const char *label) {
127
+ return CBB_add_bytes(cbb, (const uint8_t *)label, strlen(label));
128
+ }
129
+
130
+ static int hpke_labeled_extract(const EVP_MD *hkdf_md, uint8_t *out_key,
131
+ size_t *out_len, const uint8_t *salt,
132
+ size_t salt_len, const uint8_t *suite_id,
133
+ size_t suite_id_len, const char *label,
134
+ const uint8_t *ikm, size_t ikm_len) {
135
+ // labeledIKM = concat("HPKE-v1", suite_id, label, IKM)
136
+ CBB labeled_ikm;
137
+ int ok = CBB_init(&labeled_ikm, 0) &&
138
+ add_label_string(&labeled_ikm, kHpkeVersionId) &&
139
+ CBB_add_bytes(&labeled_ikm, suite_id, suite_id_len) &&
140
+ add_label_string(&labeled_ikm, label) &&
141
+ CBB_add_bytes(&labeled_ikm, ikm, ikm_len) &&
142
+ HKDF_extract(out_key, out_len, hkdf_md, CBB_data(&labeled_ikm),
143
+ CBB_len(&labeled_ikm), salt, salt_len);
144
+ CBB_cleanup(&labeled_ikm);
145
+ return ok;
146
+ }
147
+
148
+ static int hpke_labeled_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
149
+ size_t out_len, const uint8_t *prk,
150
+ size_t prk_len, const uint8_t *suite_id,
151
+ size_t suite_id_len, const char *label,
152
+ const uint8_t *info, size_t info_len) {
153
+ // labeledInfo = concat(I2OSP(L, 2), "HPKE-v1", suite_id, label, info)
154
+ CBB labeled_info;
155
+ int ok = CBB_init(&labeled_info, 0) && //
156
+ CBB_add_u16(&labeled_info, out_len) &&
157
+ add_label_string(&labeled_info, kHpkeVersionId) &&
158
+ CBB_add_bytes(&labeled_info, suite_id, suite_id_len) &&
159
+ add_label_string(&labeled_info, label) &&
160
+ CBB_add_bytes(&labeled_info, info, info_len) &&
161
+ HKDF_expand(out_key, out_len, hkdf_md, prk, prk_len,
162
+ CBB_data(&labeled_info), CBB_len(&labeled_info));
163
+ CBB_cleanup(&labeled_info);
164
+ return ok;
165
+ }
166
+
167
+ static void absorb_u16(BORINGSSL_keccak_st *ctx, uint16_t n) {
168
+ uint8_t bytes[2];
169
+ CRYPTO_store_u16_be(bytes, n);
170
+ BORINGSSL_keccak_absorb(ctx, bytes, sizeof(bytes));
171
+ }
172
+
173
+ static void hpke_shake256_labeled_derive(Span<uint8_t> out,
174
+ Span<const uint8_t> ikm,
175
+ Span<const uint8_t> suite_id,
176
+ std::string_view label,
177
+ Span<const uint8_t> context) {
178
+ // https://www.ietf.org/archive/id/draft-ietf-hpke-hpke-03.html#name-labeled-derivation-function
179
+ // https://www.ietf.org/archive/id/draft-ietf-hpke-pq-04.html#name-single-stage-kdfs
180
+ BORINGSSL_keccak_st ctx;
181
+ BORINGSSL_keccak_init(&ctx, boringssl_shake256);
182
+ BORINGSSL_keccak_absorb(&ctx, ikm.data(), ikm.size());
183
+ auto hpke_version_id = StringAsBytes(kHpkeVersionId);
184
+ BORINGSSL_keccak_absorb(&ctx, hpke_version_id.data(), hpke_version_id.size());
185
+ BORINGSSL_keccak_absorb(&ctx, suite_id.data(), suite_id.size());
186
+ auto label_bytes = StringAsBytes(label);
187
+ assert(label_bytes.size() < 0xffff);
188
+ absorb_u16(&ctx, static_cast<uint16_t>(label_bytes.size()));
189
+ BORINGSSL_keccak_absorb(&ctx, label_bytes.data(), label_bytes.size());
190
+ assert(out.size() <= 0xffff);
191
+ absorb_u16(&ctx, static_cast<uint16_t>(out.size()));
192
+ BORINGSSL_keccak_absorb(&ctx, context.data(), context.size());
193
+ BORINGSSL_keccak_squeeze(&ctx, out.data(), out.size());
194
+ }
195
+
196
+
197
+ // KEM implementations.
198
+
199
+ static std::array<uint8_t, 5> hpke_kem_suite_id(uint16_t kem_id) {
200
+ // concat("KEM", I2OSP(kem_id, 2))
201
+ return {'K', 'E', 'M', static_cast<uint8_t>(kem_id >> 8),
202
+ static_cast<uint8_t>(kem_id)};
203
+ }
204
+
205
+ // dhkem_extract_and_expand implements the ExtractAndExpand operation in the
206
+ // DHKEM construction. See section 4.1 of RFC 9180.
207
+ static int dhkem_extract_and_expand(uint16_t kem_id, const EVP_MD *hkdf_md,
208
+ uint8_t *out_key, size_t out_len,
209
+ const uint8_t *dh, size_t dh_len,
210
+ const uint8_t *kem_context,
211
+ size_t kem_context_len) {
212
+ auto suite_id = hpke_kem_suite_id(kem_id);
213
+ uint8_t prk[EVP_MAX_MD_SIZE];
214
+ size_t prk_len;
215
+ return hpke_labeled_extract(hkdf_md, prk, &prk_len, nullptr, 0,
216
+ suite_id.data(), suite_id.size(), "eae_prk", dh,
217
+ dh_len) &&
218
+ hpke_labeled_expand(hkdf_md, out_key, out_len, prk, prk_len,
219
+ suite_id.data(), suite_id.size(), "shared_secret",
220
+ kem_context, kem_context_len);
221
+ }
222
+
223
+ static int x25519_init_key(EVP_HPKE_KEY *key, const uint8_t *priv_key,
224
+ size_t priv_key_len) {
225
+ if (priv_key_len != X25519_PRIVATE_KEY_LEN) {
226
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
227
+ return 0;
228
+ }
229
+
230
+ OPENSSL_memcpy(key->private_key, priv_key, priv_key_len);
231
+ X25519_public_from_private(key->public_key, priv_key);
232
+ return 1;
233
+ }
234
+
235
+ static int x25519_generate_key(EVP_HPKE_KEY *key) {
236
+ X25519_keypair(key->public_key, key->private_key);
237
+ return 1;
238
+ }
239
+
240
+ static int x25519_derive_key(EVP_HPKE_KEY *key, Span<const uint8_t> ikm) {
241
+ // https://www.rfc-editor.org/rfc/rfc9180.html#name-derivekeypair
242
+ auto suite_id = hpke_kem_suite_id(EVP_HPKE_DHKEM_X25519_HKDF_SHA256);
243
+ uint8_t dkp_prk[SHA256_DIGEST_LENGTH];
244
+ size_t dkp_prk_len;
245
+ uint8_t sk[32];
246
+ if (!hpke_labeled_extract(EVP_sha256(), dkp_prk, &dkp_prk_len, nullptr, 0,
247
+ suite_id.data(), suite_id.size(), "dkp_prk",
248
+ ikm.data(), ikm.size()) ||
249
+ !hpke_labeled_expand(EVP_sha256(), sk, sizeof(sk), dkp_prk, dkp_prk_len,
250
+ suite_id.data(), suite_id.size(), "sk",
251
+ /*info=*/nullptr, /*info_len=*/0)) {
252
+ return 0;
253
+ }
254
+ return x25519_init_key(key, sk, sizeof(sk));
255
+ }
256
+
257
+ static int x25519_encap_with_seed(
258
+ const EVP_HPKE_KEM *kem, uint8_t *out_shared_secret,
259
+ size_t *out_shared_secret_len, uint8_t *out_enc, size_t *out_enc_len,
260
+ size_t max_enc, const uint8_t *peer_public_key, size_t peer_public_key_len,
261
+ const uint8_t *seed, size_t seed_len) {
262
+ if (max_enc < X25519_PUBLIC_VALUE_LEN) {
263
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
264
+ return 0;
265
+ }
266
+ if (seed_len != X25519_PRIVATE_KEY_LEN) {
267
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
268
+ return 0;
269
+ }
270
+ X25519_public_from_private(out_enc, seed);
271
+
272
+ uint8_t dh[X25519_SHARED_KEY_LEN];
273
+ if (peer_public_key_len != X25519_PUBLIC_VALUE_LEN ||
274
+ !X25519(dh, seed, peer_public_key)) {
275
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
276
+ return 0;
277
+ }
278
+
279
+ uint8_t kem_context[2 * X25519_PUBLIC_VALUE_LEN];
280
+ OPENSSL_memcpy(kem_context, out_enc, X25519_PUBLIC_VALUE_LEN);
281
+ OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, peer_public_key,
282
+ X25519_PUBLIC_VALUE_LEN);
283
+ if (!dhkem_extract_and_expand(kem->id, EVP_sha256(), out_shared_secret,
284
+ SHA256_DIGEST_LENGTH, dh, sizeof(dh),
285
+ kem_context, sizeof(kem_context))) {
286
+ return 0;
287
+ }
288
+
289
+ *out_enc_len = X25519_PUBLIC_VALUE_LEN;
290
+ *out_shared_secret_len = SHA256_DIGEST_LENGTH;
291
+ return 1;
292
+ }
293
+
294
+ static int x25519_decap(const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
295
+ size_t *out_shared_secret_len, const uint8_t *enc,
296
+ size_t enc_len) {
297
+ uint8_t dh[X25519_SHARED_KEY_LEN];
298
+ if (enc_len != X25519_PUBLIC_VALUE_LEN ||
299
+ !X25519(dh, key->private_key, enc)) {
300
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
301
+ return 0;
302
+ }
303
+
304
+ uint8_t kem_context[2 * X25519_PUBLIC_VALUE_LEN];
305
+ OPENSSL_memcpy(kem_context, enc, X25519_PUBLIC_VALUE_LEN);
306
+ OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, key->public_key,
307
+ X25519_PUBLIC_VALUE_LEN);
308
+ if (!dhkem_extract_and_expand(key->kem->id, EVP_sha256(), out_shared_secret,
309
+ SHA256_DIGEST_LENGTH, dh, sizeof(dh),
310
+ kem_context, sizeof(kem_context))) {
311
+ return 0;
312
+ }
313
+
314
+ *out_shared_secret_len = SHA256_DIGEST_LENGTH;
315
+ return 1;
316
+ }
317
+
318
+ static int x25519_auth_encap_with_seed(
319
+ const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
320
+ size_t *out_shared_secret_len, uint8_t *out_enc, size_t *out_enc_len,
321
+ size_t max_enc, const uint8_t *peer_public_key, size_t peer_public_key_len,
322
+ const uint8_t *seed, size_t seed_len) {
323
+ if (max_enc < X25519_PUBLIC_VALUE_LEN) {
324
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
325
+ return 0;
326
+ }
327
+ if (seed_len != X25519_PRIVATE_KEY_LEN) {
328
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
329
+ return 0;
330
+ }
331
+ X25519_public_from_private(out_enc, seed);
332
+
333
+ uint8_t dh[2 * X25519_SHARED_KEY_LEN];
334
+ if (peer_public_key_len != X25519_PUBLIC_VALUE_LEN ||
335
+ !X25519(dh, seed, peer_public_key) ||
336
+ !X25519(dh + X25519_SHARED_KEY_LEN, key->private_key, peer_public_key)) {
337
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
338
+ return 0;
339
+ }
340
+
341
+ uint8_t kem_context[3 * X25519_PUBLIC_VALUE_LEN];
342
+ OPENSSL_memcpy(kem_context, out_enc, X25519_PUBLIC_VALUE_LEN);
343
+ OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, peer_public_key,
344
+ X25519_PUBLIC_VALUE_LEN);
345
+ OPENSSL_memcpy(kem_context + 2 * X25519_PUBLIC_VALUE_LEN, key->public_key,
346
+ X25519_PUBLIC_VALUE_LEN);
347
+ if (!dhkem_extract_and_expand(key->kem->id, EVP_sha256(), out_shared_secret,
348
+ SHA256_DIGEST_LENGTH, dh, sizeof(dh),
349
+ kem_context, sizeof(kem_context))) {
350
+ return 0;
351
+ }
352
+
353
+ *out_enc_len = X25519_PUBLIC_VALUE_LEN;
354
+ *out_shared_secret_len = SHA256_DIGEST_LENGTH;
355
+ return 1;
356
+ }
357
+
358
+ static int x25519_auth_decap(const EVP_HPKE_KEY *key,
359
+ uint8_t *out_shared_secret,
360
+ size_t *out_shared_secret_len, const uint8_t *enc,
361
+ size_t enc_len, const uint8_t *peer_public_key,
362
+ size_t peer_public_key_len) {
363
+ uint8_t dh[2 * X25519_SHARED_KEY_LEN];
364
+ if (enc_len != X25519_PUBLIC_VALUE_LEN ||
365
+ peer_public_key_len != X25519_PUBLIC_VALUE_LEN ||
366
+ !X25519(dh, key->private_key, enc) ||
367
+ !X25519(dh + X25519_SHARED_KEY_LEN, key->private_key, peer_public_key)) {
368
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
369
+ return 0;
370
+ }
371
+
372
+ uint8_t kem_context[3 * X25519_PUBLIC_VALUE_LEN];
373
+ OPENSSL_memcpy(kem_context, enc, X25519_PUBLIC_VALUE_LEN);
374
+ OPENSSL_memcpy(kem_context + X25519_PUBLIC_VALUE_LEN, key->public_key,
375
+ X25519_PUBLIC_VALUE_LEN);
376
+ OPENSSL_memcpy(kem_context + 2 * X25519_PUBLIC_VALUE_LEN, peer_public_key,
377
+ X25519_PUBLIC_VALUE_LEN);
378
+ if (!dhkem_extract_and_expand(key->kem->id, EVP_sha256(), out_shared_secret,
379
+ SHA256_DIGEST_LENGTH, dh, sizeof(dh),
380
+ kem_context, sizeof(kem_context))) {
381
+ return 0;
382
+ }
383
+
384
+ *out_shared_secret_len = SHA256_DIGEST_LENGTH;
385
+ return 1;
386
+ }
387
+
388
+ const EVP_HPKE_KEM *EVP_hpke_x25519_hkdf_sha256() {
389
+ static const EVP_HPKE_KEM kKEM = {
390
+ /*id=*/EVP_HPKE_DHKEM_X25519_HKDF_SHA256,
391
+ // TODO(crbug.com/503758094): Expose this as an EVP_KEM.
392
+ /*evp_pkey_alg_func=*/nullptr,
393
+ /*evp_kem_func=*/nullptr,
394
+ /*public_key_len=*/X25519_PUBLIC_VALUE_LEN,
395
+ /*private_key_len=*/X25519_PRIVATE_KEY_LEN,
396
+ /*seed_len=*/X25519_PRIVATE_KEY_LEN,
397
+ /*enc_len=*/X25519_PUBLIC_VALUE_LEN,
398
+ x25519_init_key,
399
+ x25519_generate_key,
400
+ x25519_derive_key,
401
+ x25519_encap_with_seed,
402
+ x25519_decap,
403
+ x25519_auth_encap_with_seed,
404
+ x25519_auth_decap,
405
+ // TODO(crbug.com/503758094): Implement this in terms of an EVP_KEM.
406
+ /*evp_deserialize_private_key=*/nullptr,
407
+ /*evp_serialize_private_key=*/nullptr,
408
+ /*evp_deserialize_public_key=*/nullptr,
409
+ /*evp_serialize_public_key=*/nullptr,
410
+ /*evp_derive_key_pair=*/nullptr,
411
+ };
412
+ return &kKEM;
413
+ }
414
+
415
+ #define P256_PRIVATE_KEY_LEN 32
416
+ #define P256_PUBLIC_KEY_LEN 65
417
+ #define P256_PUBLIC_VALUE_LEN 65
418
+ #define P256_SEED_LEN 32
419
+ #define P256_SHARED_KEY_LEN 32
420
+
421
+ static int p256_public_from_private(uint8_t out_pub[P256_PUBLIC_VALUE_LEN],
422
+ const uint8_t priv[P256_PRIVATE_KEY_LEN]) {
423
+ const EC_GROUP *const group = EC_group_p256();
424
+ const uint8_t kAllZeros[P256_PRIVATE_KEY_LEN] = {0};
425
+ EC_SCALAR private_scalar;
426
+ EC_JACOBIAN public_point;
427
+ EC_AFFINE public_point_affine;
428
+
429
+ if (CRYPTO_memcmp(kAllZeros, priv, sizeof(kAllZeros)) == 0) {
430
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
431
+ return 0;
432
+ }
433
+
434
+ if (!ec_scalar_from_bytes(group, &private_scalar, priv,
435
+ P256_PRIVATE_KEY_LEN) ||
436
+ !ec_point_mul_scalar_base(group, &public_point, &private_scalar) ||
437
+ !ec_jacobian_to_affine(group, &public_point_affine, &public_point)) {
438
+ return 0;
439
+ }
440
+
441
+ size_t out_len_x, out_len_y;
442
+ out_pub[0] = POINT_CONVERSION_UNCOMPRESSED;
443
+ ec_felem_to_bytes(group, &out_pub[1], &out_len_x, &public_point_affine.X);
444
+ ec_felem_to_bytes(group, &out_pub[33], &out_len_y, &public_point_affine.Y);
445
+ return 1;
446
+ }
447
+
448
+ static int p256_init_key(EVP_HPKE_KEY *key, const uint8_t *priv_key,
449
+ size_t priv_key_len) {
450
+ if (priv_key_len != P256_PRIVATE_KEY_LEN) {
451
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
452
+ return 0;
453
+ }
454
+
455
+ if (!p256_public_from_private(key->public_key, priv_key)) {
456
+ return 0;
457
+ }
458
+
459
+ OPENSSL_memcpy(key->private_key, priv_key, priv_key_len);
460
+ return 1;
461
+ }
462
+
463
+ static int p256_private_key_from_seed(uint8_t out_priv[P256_PRIVATE_KEY_LEN],
464
+ const uint8_t *seed, size_t seed_len) {
465
+ // https://www.rfc-editor.org/rfc/rfc9180.html#name-derivekeypair
466
+ auto suite_id = hpke_kem_suite_id(EVP_HPKE_DHKEM_P256_HKDF_SHA256);
467
+ uint8_t dkp_prk[32];
468
+ size_t dkp_prk_len;
469
+ if (!hpke_labeled_extract(EVP_sha256(), dkp_prk, &dkp_prk_len, nullptr, 0,
470
+ suite_id.data(), suite_id.size(), "dkp_prk", seed,
471
+ seed_len)) {
472
+ return 0;
473
+ }
474
+ assert(dkp_prk_len == sizeof(dkp_prk));
475
+
476
+ const EC_GROUP *const group = EC_group_p256();
477
+ EC_SCALAR private_scalar;
478
+
479
+ for (unsigned counter = 0; counter < 256; counter++) {
480
+ const uint8_t counter_byte = counter & 0xff;
481
+ if (!hpke_labeled_expand(EVP_sha256(), out_priv, P256_PRIVATE_KEY_LEN,
482
+ dkp_prk, sizeof(dkp_prk), suite_id.data(),
483
+ suite_id.size(), "candidate", &counter_byte,
484
+ sizeof(counter_byte))) {
485
+ return 0;
486
+ }
487
+
488
+ // `ec_scalar_from_bytes` checks that the scalar is less than the order.
489
+ if (ec_scalar_from_bytes(group, &private_scalar, out_priv,
490
+ P256_PRIVATE_KEY_LEN) &&
491
+ !ec_scalar_is_zero(group, &private_scalar)) {
492
+ return 1;
493
+ }
494
+ }
495
+
496
+ // This happens with probability of 2^-(32*256).
497
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
498
+ return 0;
499
+ }
500
+
501
+ static int p256_derive_key(EVP_HPKE_KEY *key, Span<const uint8_t> ikm) {
502
+ if (!p256_private_key_from_seed(key->private_key, ikm.data(), ikm.size()) ||
503
+ !p256_public_from_private(key->public_key, key->private_key)) {
504
+ return 0;
505
+ }
506
+ return 1;
507
+ }
508
+
509
+ static int p256_generate_key(EVP_HPKE_KEY *key) {
510
+ uint8_t seed[P256_SEED_LEN];
511
+ RAND_bytes(seed, sizeof(seed));
512
+ return p256_derive_key(key, seed);
513
+ }
514
+
515
+ static int p256(uint8_t out_dh[P256_SHARED_KEY_LEN],
516
+ const uint8_t my_private[P256_PRIVATE_KEY_LEN],
517
+ const uint8_t their_public[P256_PUBLIC_VALUE_LEN]) {
518
+ const EC_GROUP *const group = EC_group_p256();
519
+ EC_SCALAR private_scalar;
520
+ EC_FELEM x, y;
521
+ EC_JACOBIAN shared_point, their_point;
522
+ EC_AFFINE their_point_affine, shared_point_affine;
523
+
524
+ if (their_public[0] != POINT_CONVERSION_UNCOMPRESSED ||
525
+ !ec_felem_from_bytes(group, &x, &their_public[1], 32) ||
526
+ !ec_felem_from_bytes(group, &y, &their_public[33], 32) ||
527
+ !ec_point_set_affine_coordinates(group, &their_point_affine, &x, &y) ||
528
+ !ec_scalar_from_bytes(group, &private_scalar, my_private,
529
+ P256_PRIVATE_KEY_LEN)) {
530
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
531
+ return 0;
532
+ }
533
+
534
+ ec_affine_to_jacobian(group, &their_point, &their_point_affine);
535
+ if (!ec_point_mul_scalar(group, &shared_point, &their_point,
536
+ &private_scalar) ||
537
+ !ec_jacobian_to_affine(group, &shared_point_affine, &shared_point)) {
538
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
539
+ return 0;
540
+ }
541
+
542
+ size_t out_len;
543
+ ec_felem_to_bytes(group, out_dh, &out_len, &shared_point_affine.X);
544
+ assert(out_len == P256_SHARED_KEY_LEN);
545
+ return 1;
546
+ }
547
+
548
+ static int p256_encap_with_seed(const EVP_HPKE_KEM *kem,
549
+ uint8_t *out_shared_secret,
550
+ size_t *out_shared_secret_len, uint8_t *out_enc,
551
+ size_t *out_enc_len, size_t max_enc,
552
+ const uint8_t *peer_public_key,
553
+ size_t peer_public_key_len, const uint8_t *seed,
554
+ size_t seed_len) {
555
+ if (max_enc < P256_PUBLIC_VALUE_LEN) {
556
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
557
+ return 0;
558
+ }
559
+ if (seed_len != P256_SEED_LEN) {
560
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
561
+ return 0;
562
+ }
563
+ uint8_t private_key[P256_PRIVATE_KEY_LEN];
564
+ if (!p256_private_key_from_seed(private_key, seed, seed_len) ||
565
+ !p256_public_from_private(out_enc, private_key)) {
566
+ return 0;
567
+ }
568
+
569
+ uint8_t dh[P256_SHARED_KEY_LEN];
570
+ if (peer_public_key_len != P256_PUBLIC_VALUE_LEN ||
571
+ !p256(dh, private_key, peer_public_key)) {
572
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
573
+ return 0;
574
+ }
575
+
576
+ uint8_t kem_context[2 * P256_PUBLIC_VALUE_LEN];
577
+ OPENSSL_memcpy(kem_context, out_enc, P256_PUBLIC_VALUE_LEN);
578
+ OPENSSL_memcpy(kem_context + P256_PUBLIC_VALUE_LEN, peer_public_key,
579
+ P256_PUBLIC_VALUE_LEN);
580
+ if (!dhkem_extract_and_expand(kem->id, EVP_sha256(), out_shared_secret,
581
+ SHA256_DIGEST_LENGTH, dh, sizeof(dh),
582
+ kem_context, sizeof(kem_context))) {
583
+ return 0;
584
+ }
585
+
586
+ *out_enc_len = P256_PUBLIC_VALUE_LEN;
587
+ *out_shared_secret_len = SHA256_DIGEST_LENGTH;
588
+ return 1;
589
+ }
590
+
591
+ static int p256_decap(const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
592
+ size_t *out_shared_secret_len, const uint8_t *enc,
593
+ size_t enc_len) {
594
+ uint8_t dh[P256_SHARED_KEY_LEN];
595
+ if (enc_len != P256_PUBLIC_VALUE_LEN || //
596
+ !p256(dh, key->private_key, enc)) {
597
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
598
+ return 0;
599
+ }
600
+
601
+ uint8_t kem_context[2 * P256_PUBLIC_VALUE_LEN];
602
+ OPENSSL_memcpy(kem_context, enc, P256_PUBLIC_VALUE_LEN);
603
+ OPENSSL_memcpy(kem_context + P256_PUBLIC_VALUE_LEN, key->public_key,
604
+ P256_PUBLIC_VALUE_LEN);
605
+ if (!dhkem_extract_and_expand(key->kem->id, EVP_sha256(), out_shared_secret,
606
+ SHA256_DIGEST_LENGTH, dh, sizeof(dh),
607
+ kem_context, sizeof(kem_context))) {
608
+ return 0;
609
+ }
610
+
611
+ *out_shared_secret_len = SHA256_DIGEST_LENGTH;
612
+ return 1;
613
+ }
614
+
615
+ static int p256_auth_encap_with_seed(
616
+ const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
617
+ size_t *out_shared_secret_len, uint8_t *out_enc, size_t *out_enc_len,
618
+ size_t max_enc, const uint8_t *peer_public_key, size_t peer_public_key_len,
619
+ const uint8_t *seed, size_t seed_len) {
620
+ if (max_enc < P256_PUBLIC_VALUE_LEN) {
621
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
622
+ return 0;
623
+ }
624
+ if (seed_len != P256_SEED_LEN) {
625
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
626
+ return 0;
627
+ }
628
+ uint8_t private_key[P256_PRIVATE_KEY_LEN];
629
+ if (!p256_private_key_from_seed(private_key, seed, seed_len) ||
630
+ !p256_public_from_private(out_enc, private_key)) {
631
+ return 0;
632
+ }
633
+
634
+ uint8_t dh[2 * P256_SHARED_KEY_LEN];
635
+ if (peer_public_key_len != P256_PUBLIC_VALUE_LEN ||
636
+ !p256(dh, private_key, peer_public_key) ||
637
+ !p256(dh + P256_SHARED_KEY_LEN, key->private_key, peer_public_key)) {
638
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
639
+ return 0;
640
+ }
641
+
642
+ uint8_t kem_context[3 * P256_PUBLIC_VALUE_LEN];
643
+ OPENSSL_memcpy(kem_context, out_enc, P256_PUBLIC_VALUE_LEN);
644
+ OPENSSL_memcpy(kem_context + P256_PUBLIC_VALUE_LEN, peer_public_key,
645
+ P256_PUBLIC_VALUE_LEN);
646
+ OPENSSL_memcpy(kem_context + 2 * P256_PUBLIC_VALUE_LEN, key->public_key,
647
+ P256_PUBLIC_VALUE_LEN);
648
+ if (!dhkem_extract_and_expand(key->kem->id, EVP_sha256(), out_shared_secret,
649
+ SHA256_DIGEST_LENGTH, dh, sizeof(dh),
650
+ kem_context, sizeof(kem_context))) {
651
+ return 0;
652
+ }
653
+
654
+ *out_enc_len = P256_PUBLIC_VALUE_LEN;
655
+ *out_shared_secret_len = SHA256_DIGEST_LENGTH;
656
+ return 1;
657
+ }
658
+
659
+ static int p256_auth_decap(const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
660
+ size_t *out_shared_secret_len, const uint8_t *enc,
661
+ size_t enc_len, const uint8_t *peer_public_key,
662
+ size_t peer_public_key_len) {
663
+ uint8_t dh[2 * P256_SHARED_KEY_LEN];
664
+ if (enc_len != P256_PUBLIC_VALUE_LEN ||
665
+ peer_public_key_len != P256_PUBLIC_VALUE_LEN ||
666
+ !p256(dh, key->private_key, enc) ||
667
+ !p256(dh + P256_SHARED_KEY_LEN, key->private_key, peer_public_key)) {
668
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
669
+ return 0;
670
+ }
671
+
672
+ uint8_t kem_context[3 * P256_PUBLIC_VALUE_LEN];
673
+ OPENSSL_memcpy(kem_context, enc, P256_PUBLIC_VALUE_LEN);
674
+ OPENSSL_memcpy(kem_context + P256_PUBLIC_VALUE_LEN, key->public_key,
675
+ P256_PUBLIC_VALUE_LEN);
676
+ OPENSSL_memcpy(kem_context + 2 * P256_PUBLIC_VALUE_LEN, peer_public_key,
677
+ P256_PUBLIC_VALUE_LEN);
678
+ if (!dhkem_extract_and_expand(key->kem->id, EVP_sha256(), out_shared_secret,
679
+ SHA256_DIGEST_LENGTH, dh, sizeof(dh),
680
+ kem_context, sizeof(kem_context))) {
681
+ return 0;
682
+ }
683
+
684
+ *out_shared_secret_len = SHA256_DIGEST_LENGTH;
685
+ return 1;
686
+ }
687
+
688
+ const EVP_HPKE_KEM *EVP_hpke_p256_hkdf_sha256() {
689
+ static const EVP_HPKE_KEM kKEM = {
690
+ /*id=*/EVP_HPKE_DHKEM_P256_HKDF_SHA256,
691
+ // TODO(crbug.com/503758094): Expose this as an EVP_KEM.
692
+ /*evp_pkey_alg_func=*/nullptr,
693
+ /*evp_kem_func=*/nullptr,
694
+ /*public_key_len=*/P256_PUBLIC_KEY_LEN,
695
+ /*private_key_len=*/P256_PRIVATE_KEY_LEN,
696
+ /*seed_len=*/P256_SEED_LEN,
697
+ /*enc_len=*/P256_PUBLIC_VALUE_LEN,
698
+ p256_init_key,
699
+ p256_generate_key,
700
+ p256_derive_key,
701
+ p256_encap_with_seed,
702
+ p256_decap,
703
+ p256_auth_encap_with_seed,
704
+ p256_auth_decap,
705
+ // TODO(crbug.com/503758094): Implement this in terms of an EVP_KEM.
706
+ /*evp_deserialize_private_key=*/nullptr,
707
+ /*evp_serialize_private_key=*/nullptr,
708
+ /*evp_deserialize_public_key=*/nullptr,
709
+ /*evp_serialize_public_key=*/nullptr,
710
+ /*evp_derive_key_pair=*/nullptr,
711
+ };
712
+ return &kKEM;
713
+ }
714
+
715
+ #define XWING_PRIVATE_KEY_LEN XWING_PRIVATE_KEY_BYTES
716
+ #define XWING_PUBLIC_KEY_LEN XWING_PUBLIC_KEY_BYTES
717
+ #define XWING_PUBLIC_VALUE_LEN XWING_CIPHERTEXT_BYTES
718
+ #define XWING_SEED_LEN 64
719
+ #define XWING_SHARED_KEY_LEN XWING_SHARED_SECRET_BYTES
720
+
721
+ static EVP_PKEY *xwing_derive_key_pair(const EVP_PKEY_ALG *alg,
722
+ Span<const uint8_t> ikm) {
723
+ uint8_t seed[XWING_PRIVATE_KEY_BYTES];
724
+ hpke_shake256_labeled_derive(seed, ikm, hpke_kem_suite_id(EVP_HPKE_XWING),
725
+ "DeriveKeyPair", /*context=*/{});
726
+ return EVP_PKEY_from_private_seed(alg, seed, sizeof(seed));
727
+ }
728
+
729
+
730
+ const EVP_HPKE_KEM *EVP_hpke_xwing() {
731
+ static const EVP_HPKE_KEM kKEM = {
732
+ /*id=*/EVP_HPKE_XWING,
733
+ /*evp_pkey_alg_func=*/&EVP_pkey_xwing,
734
+ /*evp_kem_func=*/&EVP_kem_xwing,
735
+ /*public_key_len=*/XWING_PUBLIC_KEY_LEN,
736
+ /*private_key_len=*/XWING_PRIVATE_KEY_LEN,
737
+ /*seed_len=*/0,
738
+ /*enc_len=*/0,
739
+ /*init_key=*/nullptr,
740
+ /*generate_key=*/nullptr,
741
+ /*derive_key=*/nullptr,
742
+ /*encap_with_seed=*/nullptr,
743
+ /*decap=*/nullptr,
744
+ // X-Wing doesn't support authenticated encapsulation/decapsulation:
745
+ // https://datatracker.ietf.org/doc/html/draft-connolly-cfrg-xwing-kem-08#name-use-in-hpke
746
+ /* auth_encap_with_seed= */ nullptr,
747
+ /* auth_decap= */ nullptr,
748
+ /*evp_deserialize_private_key=*/&EVP_PKEY_from_private_seed,
749
+ /*evp_serialize_private_key=*/&EVP_PKEY_get_private_seed,
750
+ /*evp_deserialize_public_key=*/&EVP_PKEY_from_raw_public_key,
751
+ /*evp_serialize_public_key=*/&EVP_PKEY_get_raw_public_key,
752
+ /*evp_derive_key_pair=*/xwing_derive_key_pair,
753
+ };
754
+ return &kKEM;
755
+ }
756
+
757
+ static EVP_PKEY *mlkem768_derive_key_pair(const EVP_PKEY_ALG *alg,
758
+ Span<const uint8_t> ikm) {
759
+ uint8_t seed[MLKEM_SEED_BYTES];
760
+ hpke_shake256_labeled_derive(seed, ikm, hpke_kem_suite_id(EVP_HPKE_MLKEM768),
761
+ "DeriveKeyPair", /*context=*/{});
762
+ return EVP_PKEY_from_private_seed(alg, seed, sizeof(seed));
763
+ }
764
+
765
+ const EVP_HPKE_KEM *EVP_hpke_mlkem768() {
766
+ static const EVP_HPKE_KEM kKEM = {
767
+ /*id=*/EVP_HPKE_MLKEM768,
768
+ /*evp_pkey_alg_func=*/&EVP_pkey_ml_kem_768,
769
+ /*evp_kem_func=*/&EVP_kem_ml_kem_768,
770
+ /*public_key_len=*/MLKEM768_PUBLIC_KEY_BYTES,
771
+ /*private_key_len=*/MLKEM_SEED_BYTES,
772
+ /*seed_len=*/0,
773
+ /*enc_len=*/0,
774
+ /*init_key=*/nullptr,
775
+ /*generate_key=*/nullptr,
776
+ /*derive_key=*/nullptr,
777
+ /*encap_with_seed=*/nullptr,
778
+ /*decap=*/nullptr,
779
+ // ML-KEM doesn't support authenticated encapsulation/decapsulation:
780
+ // https://datatracker.ietf.org/doc/draft-ietf-hpke-pq/01/
781
+ /*auth_encap_with_seed=*/nullptr,
782
+ /*auth_decap=*/nullptr,
783
+ /*evp_deserialize_private_key=*/&EVP_PKEY_from_private_seed,
784
+ /*evp_serialize_private_key=*/&EVP_PKEY_get_private_seed,
785
+ /*evp_deserialize_public_key=*/&EVP_PKEY_from_raw_public_key,
786
+ /*evp_serialize_public_key=*/&EVP_PKEY_get_raw_public_key,
787
+ /*evp_derive_key_pair=*/mlkem768_derive_key_pair,
788
+ };
789
+ return &kKEM;
790
+ }
791
+
792
+ static EVP_PKEY *mlkem1024_derive_key_pair(const EVP_PKEY_ALG *alg,
793
+ Span<const uint8_t> ikm) {
794
+ uint8_t seed[MLKEM_SEED_BYTES];
795
+ hpke_shake256_labeled_derive(seed, ikm, hpke_kem_suite_id(EVP_HPKE_MLKEM1024),
796
+ "DeriveKeyPair", /*context=*/{});
797
+ return EVP_PKEY_from_private_seed(alg, seed, sizeof(seed));
798
+ }
799
+
800
+ const EVP_HPKE_KEM *EVP_hpke_mlkem1024() {
801
+ static const EVP_HPKE_KEM kKEM = {
802
+ /*id=*/EVP_HPKE_MLKEM1024,
803
+ /*evp_pkey_alg_func=*/&EVP_pkey_ml_kem_1024,
804
+ /*evp_kem_func=*/&EVP_kem_ml_kem_1024,
805
+ /*public_key_len=*/MLKEM1024_PUBLIC_KEY_BYTES,
806
+ /*private_key_len=*/MLKEM_SEED_BYTES,
807
+ /*seed_len=*/0,
808
+ /*enc_len=*/0,
809
+ /*init_key=*/nullptr,
810
+ /*generate_key=*/nullptr,
811
+ /*derive_key=*/nullptr,
812
+ /*encap_with_seed=*/nullptr,
813
+ /*decap=*/nullptr,
814
+ // ML-KEM doesn't support authenticated encapsulation/decapsulation:
815
+ // https://datatracker.ietf.org/doc/draft-ietf-hpke-pq/01/
816
+ /*auth_encap_with_seed=*/nullptr,
817
+ /*auth_decap=*/nullptr,
818
+ /*evp_deserialize_private_key=*/&EVP_PKEY_from_private_seed,
819
+ /*evp_serialize_private_key=*/&EVP_PKEY_get_private_seed,
820
+ /*evp_deserialize_public_key=*/&EVP_PKEY_from_raw_public_key,
821
+ /*evp_serialize_public_key=*/&EVP_PKEY_get_raw_public_key,
822
+ /*evp_derive_key_pair=*/mlkem1024_derive_key_pair,
823
+ };
824
+ return &kKEM;
825
+ }
826
+
827
+ namespace {
828
+
829
+ // Temporary helper to switch between EVP_KEM-based implementation and legacy
830
+ // EVP_HPKE_KEM implementation.
831
+ // TODO(crbug.com/535883377): Unify EVP_HPKE_KEM and EVP_KEM for all supported
832
+ // HPKE KEMs.
833
+
834
+ bool uses_evp(const EVP_HPKE_KEM *kem) {
835
+ return kem->evp_pkey_alg_func != nullptr && kem->evp_kem_func != nullptr;
836
+ }
837
+
838
+ } // namespace
839
+
840
+ uint16_t EVP_HPKE_KEM_id(const EVP_HPKE_KEM *kem) { return kem->id; }
841
+
842
+ size_t EVP_HPKE_KEM_public_key_len(const EVP_HPKE_KEM *kem) {
843
+ return kem->public_key_len;
844
+ }
845
+
846
+ size_t EVP_HPKE_KEM_private_key_len(const EVP_HPKE_KEM *kem) {
847
+ return kem->private_key_len;
848
+ }
849
+
850
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
851
+ // HPKE KEMs.
852
+ size_t EVP_HPKE_KEM_enc_len(const EVP_HPKE_KEM *kem) {
853
+ if (uses_evp(kem)) {
854
+ return EVP_KEM_ciphertext_len(kem->evp_kem_func());
855
+ }
856
+ return kem->enc_len;
857
+ }
858
+
859
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
860
+ // HPKE KEMs.
861
+ size_t EVP_HPKE_KEM_shared_secret_len(const EVP_HPKE_KEM *kem) {
862
+ if (uses_evp(kem)) {
863
+ return EVP_KEM_secret_len(kem->evp_kem_func());
864
+ }
865
+ // All other KEMs have the same shared secret length. We assume we'll finish
866
+ // https://crbug.com/503758094 and move all KEMs to EVP before adding one that
867
+ // breaks this.
868
+ return SHA256_DIGEST_LENGTH;
869
+ }
870
+
871
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
872
+ // HPKE KEMs.
873
+ void EVP_HPKE_KEY_zero(EVP_HPKE_KEY *key) {
874
+ OPENSSL_memset(key, 0, sizeof(EVP_HPKE_KEY));
875
+ }
876
+
877
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
878
+ // HPKE KEMs.
879
+ void EVP_HPKE_KEY_cleanup(EVP_HPKE_KEY *key) {
880
+ EVP_PKEY_free(key->pkey);
881
+ key->pkey = nullptr;
882
+ }
883
+
884
+ EVP_HPKE_KEY *EVP_HPKE_KEY_new() {
885
+ EVP_HPKE_KEY *key = New<EVP_HPKE_KEY>();
886
+ if (key == nullptr) {
887
+ return nullptr;
888
+ }
889
+ EVP_HPKE_KEY_zero(key);
890
+ return key;
891
+ }
892
+
893
+ void EVP_HPKE_KEY_free(EVP_HPKE_KEY *key) {
894
+ if (key != nullptr) {
895
+ EVP_HPKE_KEY_cleanup(key);
896
+ Delete(key);
897
+ }
898
+ }
899
+
900
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
901
+ // HPKE KEMs.
902
+ int EVP_HPKE_KEY_copy(EVP_HPKE_KEY *dst, const EVP_HPKE_KEY *src) {
903
+ dst->kem = src->kem;
904
+ OPENSSL_memcpy(dst->private_key, src->private_key, sizeof(src->private_key));
905
+ OPENSSL_memcpy(dst->public_key, src->public_key, sizeof(src->public_key));
906
+ dst->pkey = EVP_PKEY_dup_ref(src->pkey);
907
+ return 1;
908
+ }
909
+
910
+ void EVP_HPKE_KEY_move(EVP_HPKE_KEY *out, EVP_HPKE_KEY *in) {
911
+ EVP_HPKE_KEY_cleanup(out);
912
+ // For now, `EVP_HPKE_KEY` is trivially movable.
913
+ // Note that Rust may move this structure. See
914
+ // bssl-crypto/src/scoped.rs:EvpHpkeKey.
915
+ *out = *in;
916
+ EVP_HPKE_KEY_zero(in);
917
+ }
918
+
919
+ int EVP_HPKE_KEY_init(EVP_HPKE_KEY *key, const EVP_HPKE_KEM *kem,
920
+ const uint8_t *priv_key, size_t priv_key_len) {
921
+ EVP_HPKE_KEY_zero(key);
922
+ key->kem = kem;
923
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
924
+ // HPKE KEMs.
925
+ if (uses_evp(kem)) {
926
+ UniquePtr<EVP_PKEY> pkey(kem->evp_deserialize_private_key(
927
+ kem->evp_pkey_alg_func(), priv_key, priv_key_len));
928
+ if (pkey == nullptr) {
929
+ key->kem = nullptr;
930
+ return 0;
931
+ }
932
+ key->pkey = pkey.release();
933
+ return 1;
934
+ }
935
+ if (!kem->init_key(key, priv_key, priv_key_len)) {
936
+ key->kem = nullptr;
937
+ return 0;
938
+ }
939
+ return 1;
940
+ }
941
+
942
+ int EVP_HPKE_KEY_generate(EVP_HPKE_KEY *key, const EVP_HPKE_KEM *kem) {
943
+ EVP_HPKE_KEY_zero(key);
944
+ key->kem = kem;
945
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
946
+ // HPKE KEMs.
947
+ if (uses_evp(kem)) {
948
+ UniquePtr<EVP_PKEY> pkey(
949
+ EVP_PKEY_generate_from_alg(kem->evp_pkey_alg_func()));
950
+ if (pkey == nullptr) {
951
+ key->kem = nullptr;
952
+ return 0;
953
+ }
954
+ key->pkey = pkey.release();
955
+ return 1;
956
+ }
957
+ if (!kem->generate_key(key)) {
958
+ key->kem = nullptr;
959
+ return 0;
960
+ }
961
+ return 1;
962
+ }
963
+
964
+ int EVP_HPKE_KEY_derive(EVP_HPKE_KEY *key, const EVP_HPKE_KEM *kem,
965
+ const uint8_t *ikm, size_t ikm_len) {
966
+ EVP_HPKE_KEY_zero(key);
967
+ key->kem = kem;
968
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
969
+ // HPKE KEMs.
970
+ if (uses_evp(kem)) {
971
+ UniquePtr<EVP_PKEY> pkey(
972
+ kem->evp_derive_key_pair(kem->evp_pkey_alg_func(), Span(ikm, ikm_len)));
973
+ if (pkey == nullptr) {
974
+ key->kem = nullptr;
975
+ return 0;
976
+ }
977
+ key->pkey = pkey.release();
978
+ return 1;
979
+ }
980
+ if (!kem->derive_key(key, Span(ikm, ikm_len))) {
981
+ key->kem = nullptr;
982
+ return 0;
983
+ }
984
+ return 1;
985
+ }
986
+
987
+ const EVP_HPKE_KEM *EVP_HPKE_KEY_kem(const EVP_HPKE_KEY *key) {
988
+ return key->kem;
989
+ }
990
+
991
+ int EVP_HPKE_KEY_public_key(const EVP_HPKE_KEY *key, uint8_t *out,
992
+ size_t *out_len, size_t max_out) {
993
+ if (max_out < key->kem->public_key_len) {
994
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
995
+ return 0;
996
+ }
997
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
998
+ // HPKE KEMs.
999
+ if (uses_evp(key->kem)) {
1000
+ *out_len = max_out;
1001
+ return key->kem->evp_serialize_public_key(key->pkey, out, out_len);
1002
+ }
1003
+ OPENSSL_memcpy(out, key->public_key, key->kem->public_key_len);
1004
+ *out_len = key->kem->public_key_len;
1005
+ return 1;
1006
+ }
1007
+
1008
+ int EVP_HPKE_KEY_private_key(const EVP_HPKE_KEY *key, uint8_t *out,
1009
+ size_t *out_len, size_t max_out) {
1010
+ if (max_out < key->kem->private_key_len) {
1011
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
1012
+ return 0;
1013
+ }
1014
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
1015
+ // HPKE KEMs.
1016
+ if (uses_evp(key->kem)) {
1017
+ *out_len = max_out;
1018
+ return key->kem->evp_serialize_private_key(key->pkey, out, out_len);
1019
+ }
1020
+ OPENSSL_memcpy(out, key->private_key, key->kem->private_key_len);
1021
+ *out_len = key->kem->private_key_len;
1022
+ return 1;
1023
+ }
1024
+
1025
+
1026
+ // Supported KDFs and AEADs.
1027
+
1028
+ const EVP_HPKE_KDF *EVP_hpke_hkdf_sha256() {
1029
+ static const EVP_HPKE_KDF kKDF = {EVP_HPKE_HKDF_SHA256, &EVP_sha256};
1030
+ return &kKDF;
1031
+ }
1032
+
1033
+ const EVP_HPKE_KDF *EVP_hpke_hkdf_sha384() {
1034
+ static const EVP_HPKE_KDF kKDF = {EVP_HPKE_HKDF_SHA384, &EVP_sha384};
1035
+ return &kKDF;
1036
+ }
1037
+
1038
+ uint16_t EVP_HPKE_KDF_id(const EVP_HPKE_KDF *kdf) { return kdf->id; }
1039
+
1040
+ const EVP_MD *EVP_HPKE_KDF_hkdf_md(const EVP_HPKE_KDF *kdf) {
1041
+ return kdf->hkdf_md_func();
1042
+ }
1043
+
1044
+ const EVP_HPKE_AEAD *EVP_hpke_aes_128_gcm() {
1045
+ static const EVP_HPKE_AEAD kAEAD = {EVP_HPKE_AES_128_GCM,
1046
+ &EVP_aead_aes_128_gcm};
1047
+ return &kAEAD;
1048
+ }
1049
+
1050
+ const EVP_HPKE_AEAD *EVP_hpke_aes_256_gcm() {
1051
+ static const EVP_HPKE_AEAD kAEAD = {EVP_HPKE_AES_256_GCM,
1052
+ &EVP_aead_aes_256_gcm};
1053
+ return &kAEAD;
1054
+ }
1055
+
1056
+ const EVP_HPKE_AEAD *EVP_hpke_chacha20_poly1305() {
1057
+ static const EVP_HPKE_AEAD kAEAD = {EVP_HPKE_CHACHA20_POLY1305,
1058
+ &EVP_aead_chacha20_poly1305};
1059
+ return &kAEAD;
1060
+ }
1061
+
1062
+ uint16_t EVP_HPKE_AEAD_id(const EVP_HPKE_AEAD *aead) { return aead->id; }
1063
+
1064
+ const EVP_AEAD *EVP_HPKE_AEAD_aead(const EVP_HPKE_AEAD *aead) {
1065
+ return aead->aead_func();
1066
+ }
1067
+
1068
+
1069
+ // HPKE implementation.
1070
+
1071
+ static std::array<uint8_t, 10> hpke_full_suite_id(const EVP_HPKE_CTX *ctx) {
1072
+ return {
1073
+ 'H',
1074
+ 'P',
1075
+ 'K',
1076
+ 'E',
1077
+ static_cast<uint8_t>(ctx->kem->id >> 8),
1078
+ static_cast<uint8_t>(ctx->kem->id),
1079
+ static_cast<uint8_t>(ctx->kdf->id >> 8),
1080
+ static_cast<uint8_t>(ctx->kdf->id),
1081
+ static_cast<uint8_t>(ctx->aead->id >> 8),
1082
+ static_cast<uint8_t>(ctx->aead->id),
1083
+ };
1084
+ }
1085
+
1086
+ #define HPKE_MODE_BASE 0
1087
+ #define HPKE_MODE_AUTH 2
1088
+
1089
+ static int hpke_key_schedule(EVP_HPKE_CTX *ctx, uint8_t mode,
1090
+ const uint8_t *shared_secret,
1091
+ size_t shared_secret_len, const uint8_t *info,
1092
+ size_t info_len) {
1093
+ auto suite_id = hpke_full_suite_id(ctx);
1094
+
1095
+ // psk_id_hash = LabeledExtract("", "psk_id_hash", psk_id)
1096
+ // TODO(davidben): Precompute this value and store it with the EVP_HPKE_KDF.
1097
+ const EVP_MD *hkdf_md = ctx->kdf->hkdf_md_func();
1098
+ uint8_t psk_id_hash[EVP_MAX_MD_SIZE];
1099
+ size_t psk_id_hash_len;
1100
+ if (!hpke_labeled_extract(hkdf_md, psk_id_hash, &psk_id_hash_len, nullptr, 0,
1101
+ suite_id.data(), suite_id.size(), "psk_id_hash",
1102
+ nullptr, 0)) {
1103
+ return 0;
1104
+ }
1105
+
1106
+ // info_hash = LabeledExtract("", "info_hash", info)
1107
+ uint8_t info_hash[EVP_MAX_MD_SIZE];
1108
+ size_t info_hash_len;
1109
+ if (!hpke_labeled_extract(hkdf_md, info_hash, &info_hash_len, nullptr, 0,
1110
+ suite_id.data(), suite_id.size(), "info_hash", info,
1111
+ info_len)) {
1112
+ return 0;
1113
+ }
1114
+
1115
+ // key_schedule_context = concat(mode, psk_id_hash, info_hash)
1116
+ uint8_t context[sizeof(uint8_t) + 2 * EVP_MAX_MD_SIZE];
1117
+ size_t context_len;
1118
+ CBB context_cbb;
1119
+ CBB_init_fixed(&context_cbb, context, sizeof(context));
1120
+ if (!CBB_add_u8(&context_cbb, mode) ||
1121
+ !CBB_add_bytes(&context_cbb, psk_id_hash, psk_id_hash_len) ||
1122
+ !CBB_add_bytes(&context_cbb, info_hash, info_hash_len) ||
1123
+ !CBB_finish(&context_cbb, nullptr, &context_len)) {
1124
+ return 0;
1125
+ }
1126
+
1127
+ // secret = LabeledExtract(shared_secret, "secret", psk)
1128
+ uint8_t secret[EVP_MAX_MD_SIZE];
1129
+ size_t secret_len;
1130
+ if (!hpke_labeled_extract(hkdf_md, secret, &secret_len, shared_secret,
1131
+ shared_secret_len, suite_id.data(), suite_id.size(),
1132
+ "secret", nullptr, 0)) {
1133
+ return 0;
1134
+ }
1135
+
1136
+ // key = LabeledExpand(secret, "key", key_schedule_context, Nk)
1137
+ const EVP_AEAD *aead = EVP_HPKE_AEAD_aead(ctx->aead);
1138
+ uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
1139
+ const size_t kKeyLen = EVP_AEAD_key_length(aead);
1140
+ if (!hpke_labeled_expand(hkdf_md, key, kKeyLen, secret, secret_len,
1141
+ suite_id.data(), suite_id.size(), "key", context,
1142
+ context_len) ||
1143
+ !EVP_AEAD_CTX_init(&ctx->aead_ctx, aead, key, kKeyLen,
1144
+ EVP_AEAD_DEFAULT_TAG_LENGTH, nullptr)) {
1145
+ return 0;
1146
+ }
1147
+
1148
+ // base_nonce = LabeledExpand(secret, "base_nonce", key_schedule_context, Nn)
1149
+ if (!hpke_labeled_expand(hkdf_md, ctx->base_nonce,
1150
+ EVP_AEAD_nonce_length(aead), secret, secret_len,
1151
+ suite_id.data(), suite_id.size(), "base_nonce",
1152
+ context, context_len)) {
1153
+ return 0;
1154
+ }
1155
+
1156
+ // exporter_secret = LabeledExpand(secret, "exp", key_schedule_context, Nh)
1157
+ if (!hpke_labeled_expand(hkdf_md, ctx->exporter_secret, EVP_MD_size(hkdf_md),
1158
+ secret, secret_len, suite_id.data(), suite_id.size(),
1159
+ "exp", context, context_len)) {
1160
+ return 0;
1161
+ }
1162
+
1163
+ return 1;
1164
+ }
1165
+
1166
+ void EVP_HPKE_CTX_zero(EVP_HPKE_CTX *ctx) {
1167
+ OPENSSL_memset(ctx, 0, sizeof(EVP_HPKE_CTX));
1168
+ EVP_AEAD_CTX_zero(&ctx->aead_ctx);
1169
+ }
1170
+
1171
+ void EVP_HPKE_CTX_cleanup(EVP_HPKE_CTX *ctx) {
1172
+ EVP_AEAD_CTX_cleanup(&ctx->aead_ctx);
1173
+ }
1174
+
1175
+ EVP_HPKE_CTX *EVP_HPKE_CTX_new() {
1176
+ EVP_HPKE_CTX *ctx = New<EVP_HPKE_CTX>();
1177
+ if (ctx == nullptr) {
1178
+ return nullptr;
1179
+ }
1180
+ EVP_HPKE_CTX_zero(ctx);
1181
+ return ctx;
1182
+ }
1183
+
1184
+ void EVP_HPKE_CTX_free(EVP_HPKE_CTX *ctx) {
1185
+ if (ctx != nullptr) {
1186
+ EVP_HPKE_CTX_cleanup(ctx);
1187
+ Delete(ctx);
1188
+ }
1189
+ }
1190
+
1191
+ int EVP_HPKE_CTX_setup_sender(EVP_HPKE_CTX *ctx, uint8_t *out_enc,
1192
+ size_t *out_enc_len, size_t max_enc,
1193
+ const EVP_HPKE_KEM *kem, const EVP_HPKE_KDF *kdf,
1194
+ const EVP_HPKE_AEAD *aead,
1195
+ const uint8_t *peer_public_key,
1196
+ size_t peer_public_key_len, const uint8_t *info,
1197
+ size_t info_len) {
1198
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
1199
+ // HPKE KEMs.
1200
+ if (uses_evp(kem)) {
1201
+ EVP_HPKE_CTX_zero(ctx);
1202
+ ctx->is_sender = 1;
1203
+ ctx->kem = kem;
1204
+ ctx->kdf = kdf;
1205
+ ctx->aead = aead;
1206
+ uint8_t shared_secret[MAX_SHARED_SECRET_LEN];
1207
+ size_t shared_secret_len;
1208
+
1209
+ const EVP_KEM *evp_kem = kem->evp_kem_func();
1210
+ if (max_enc < EVP_KEM_ciphertext_len(evp_kem)) {
1211
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
1212
+ return 0;
1213
+ }
1214
+ *out_enc_len = EVP_KEM_ciphertext_len(evp_kem);
1215
+ shared_secret_len = EVP_KEM_secret_len(evp_kem);
1216
+ assert(size_t{MAX_SHARED_SECRET_LEN} >= shared_secret_len);
1217
+
1218
+ UniquePtr<EVP_PKEY> peer_pubkey(kem->evp_deserialize_public_key(
1219
+ kem->evp_pkey_alg_func(), peer_public_key, peer_public_key_len));
1220
+ if (peer_pubkey == nullptr ||
1221
+ !EVP_KEM_encap(evp_kem, out_enc, *out_enc_len, shared_secret,
1222
+ shared_secret_len, peer_pubkey.get()) ||
1223
+ !hpke_key_schedule(ctx, HPKE_MODE_BASE, shared_secret,
1224
+ shared_secret_len, info, info_len)) {
1225
+ EVP_HPKE_CTX_cleanup(ctx);
1226
+ return 0;
1227
+ }
1228
+ return 1;
1229
+ }
1230
+
1231
+ uint8_t seed[MAX_SEED_LEN];
1232
+ RAND_bytes(seed, kem->seed_len);
1233
+ return EVP_HPKE_CTX_setup_sender_with_seed_for_testing(
1234
+ ctx, out_enc, out_enc_len, max_enc, kem, kdf, aead, peer_public_key,
1235
+ peer_public_key_len, info, info_len, seed, kem->seed_len);
1236
+ }
1237
+
1238
+ int EVP_HPKE_CTX_setup_sender_with_seed_for_testing(
1239
+ EVP_HPKE_CTX *ctx, uint8_t *out_enc, size_t *out_enc_len, size_t max_enc,
1240
+ const EVP_HPKE_KEM *kem, const EVP_HPKE_KDF *kdf, const EVP_HPKE_AEAD *aead,
1241
+ const uint8_t *peer_public_key, size_t peer_public_key_len,
1242
+ const uint8_t *info, size_t info_len, const uint8_t *seed,
1243
+ size_t seed_len) {
1244
+ EVP_HPKE_CTX_zero(ctx);
1245
+ ctx->is_sender = 1;
1246
+ ctx->kem = kem;
1247
+ ctx->kdf = kdf;
1248
+ ctx->aead = aead;
1249
+ uint8_t shared_secret[MAX_SHARED_SECRET_LEN];
1250
+ size_t shared_secret_len;
1251
+
1252
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
1253
+ // HPKE KEMs.
1254
+ if (uses_evp(kem)) {
1255
+ const EVP_KEM *evp_kem = kem->evp_kem_func();
1256
+ if (max_enc < EVP_KEM_ciphertext_len(evp_kem)) {
1257
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
1258
+ return 0;
1259
+ }
1260
+ *out_enc_len = EVP_KEM_ciphertext_len(evp_kem);
1261
+ shared_secret_len = EVP_KEM_secret_len(evp_kem);
1262
+ assert(size_t{MAX_SHARED_SECRET_LEN} >= shared_secret_len);
1263
+
1264
+ UniquePtr<EVP_PKEY> peer_pubkey(kem->evp_deserialize_public_key(
1265
+ kem->evp_pkey_alg_func(), peer_public_key, peer_public_key_len));
1266
+ if (peer_pubkey == nullptr ||
1267
+ !EVP_KEM_encap_external_entropy_for_testing(
1268
+ evp_kem, out_enc, *out_enc_len, shared_secret, shared_secret_len,
1269
+ peer_pubkey.get(), seed, seed_len) ||
1270
+ !hpke_key_schedule(ctx, HPKE_MODE_BASE, shared_secret,
1271
+ shared_secret_len, info, info_len)) {
1272
+ EVP_HPKE_CTX_cleanup(ctx);
1273
+ return 0;
1274
+ }
1275
+ return 1;
1276
+ }
1277
+
1278
+ if (!kem->encap_with_seed(kem, shared_secret, &shared_secret_len, out_enc,
1279
+ out_enc_len, max_enc, peer_public_key,
1280
+ peer_public_key_len, seed, seed_len) ||
1281
+ !hpke_key_schedule(ctx, HPKE_MODE_BASE, shared_secret, shared_secret_len,
1282
+ info, info_len)) {
1283
+ EVP_HPKE_CTX_cleanup(ctx);
1284
+ return 0;
1285
+ }
1286
+ return 1;
1287
+ }
1288
+
1289
+ int EVP_HPKE_CTX_setup_recipient_with_shared_secret(
1290
+ EVP_HPKE_CTX *ctx, const EVP_HPKE_KEM *kem, const EVP_HPKE_KDF *kdf,
1291
+ const EVP_HPKE_AEAD *aead, const uint8_t *shared_secret,
1292
+ size_t shared_secret_len, const uint8_t *info, size_t info_len) {
1293
+ EVP_HPKE_CTX_zero(ctx);
1294
+
1295
+ if (shared_secret_len != EVP_HPKE_KEM_shared_secret_len(kem)) {
1296
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
1297
+ return 0;
1298
+ }
1299
+
1300
+ ctx->is_sender = 0;
1301
+ ctx->kem = kem;
1302
+ ctx->kdf = kdf;
1303
+ ctx->aead = aead;
1304
+ if (!hpke_key_schedule(ctx, HPKE_MODE_BASE, shared_secret, shared_secret_len,
1305
+ info, info_len)) {
1306
+ EVP_HPKE_CTX_cleanup(ctx);
1307
+ return 0;
1308
+ }
1309
+ return 1;
1310
+ }
1311
+
1312
+ int EVP_HPKE_CTX_setup_recipient(EVP_HPKE_CTX *ctx, const EVP_HPKE_KEY *key,
1313
+ const EVP_HPKE_KDF *kdf,
1314
+ const EVP_HPKE_AEAD *aead, const uint8_t *enc,
1315
+ size_t enc_len, const uint8_t *info,
1316
+ size_t info_len) {
1317
+ EVP_HPKE_CTX_zero(ctx);
1318
+
1319
+ uint8_t shared_secret[MAX_SHARED_SECRET_LEN];
1320
+ size_t shared_secret_len;
1321
+
1322
+ // TODO(crbug.com/535883377): Implement in terms of EVP_KEM for all supported
1323
+ // HPKE KEMs.
1324
+ int decap_ok;
1325
+ if (uses_evp(key->kem)) {
1326
+ const EVP_KEM *evp_kem = key->kem->evp_kem_func();
1327
+ const EVP_PKEY *decap_key = key->pkey;
1328
+ shared_secret_len = EVP_KEM_secret_len(evp_kem);
1329
+ assert(size_t{MAX_SHARED_SECRET_LEN} >= shared_secret_len);
1330
+
1331
+ decap_ok = EVP_KEM_decap(evp_kem, shared_secret, shared_secret_len, enc,
1332
+ enc_len, decap_key);
1333
+ } else {
1334
+ decap_ok = key->kem->decap(key, shared_secret, &shared_secret_len, enc,
1335
+ enc_len);
1336
+ }
1337
+
1338
+ return decap_ok && EVP_HPKE_CTX_setup_recipient_with_shared_secret(
1339
+ ctx, key->kem, kdf, aead, shared_secret,
1340
+ shared_secret_len, info, info_len);
1341
+ }
1342
+
1343
+
1344
+ int EVP_HPKE_CTX_setup_auth_sender(
1345
+ EVP_HPKE_CTX *ctx, uint8_t *out_enc, size_t *out_enc_len, size_t max_enc,
1346
+ const EVP_HPKE_KEY *key, const EVP_HPKE_KDF *kdf, const EVP_HPKE_AEAD *aead,
1347
+ const uint8_t *peer_public_key, size_t peer_public_key_len,
1348
+ const uint8_t *info, size_t info_len) {
1349
+ if (key->kem->auth_encap_with_seed == nullptr) {
1350
+ // Not all HPKE KEMs support AuthEncap.
1351
+ OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
1352
+ return 0;
1353
+ }
1354
+ assert(!uses_evp(key->kem));
1355
+ uint8_t seed[MAX_SEED_LEN];
1356
+ RAND_bytes(seed, key->kem->seed_len);
1357
+ return EVP_HPKE_CTX_setup_auth_sender_with_seed_for_testing(
1358
+ ctx, out_enc, out_enc_len, max_enc, key, kdf, aead, peer_public_key,
1359
+ peer_public_key_len, info, info_len, seed, key->kem->seed_len);
1360
+ }
1361
+
1362
+ int EVP_HPKE_CTX_setup_auth_sender_with_seed_for_testing(
1363
+ EVP_HPKE_CTX *ctx, uint8_t *out_enc, size_t *out_enc_len, size_t max_enc,
1364
+ const EVP_HPKE_KEY *key, const EVP_HPKE_KDF *kdf, const EVP_HPKE_AEAD *aead,
1365
+ const uint8_t *peer_public_key, size_t peer_public_key_len,
1366
+ const uint8_t *info, size_t info_len, const uint8_t *seed,
1367
+ size_t seed_len) {
1368
+ if (key->kem->auth_encap_with_seed == nullptr) {
1369
+ // Not all HPKE KEMs support AuthEncap.
1370
+ OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
1371
+ return 0;
1372
+ }
1373
+
1374
+ EVP_HPKE_CTX_zero(ctx);
1375
+ ctx->is_sender = 1;
1376
+ ctx->kem = key->kem;
1377
+ ctx->kdf = kdf;
1378
+ ctx->aead = aead;
1379
+ uint8_t shared_secret[MAX_SHARED_SECRET_LEN];
1380
+ size_t shared_secret_len;
1381
+ if (!key->kem->auth_encap_with_seed(
1382
+ key, shared_secret, &shared_secret_len, out_enc, out_enc_len, max_enc,
1383
+ peer_public_key, peer_public_key_len, seed, seed_len) ||
1384
+ !hpke_key_schedule(ctx, HPKE_MODE_AUTH, shared_secret, shared_secret_len,
1385
+ info, info_len)) {
1386
+ EVP_HPKE_CTX_cleanup(ctx);
1387
+ return 0;
1388
+ }
1389
+ return 1;
1390
+ }
1391
+
1392
+ int EVP_HPKE_CTX_setup_auth_recipient(
1393
+ EVP_HPKE_CTX *ctx, const EVP_HPKE_KEY *key, const EVP_HPKE_KDF *kdf,
1394
+ const EVP_HPKE_AEAD *aead, const uint8_t *enc, size_t enc_len,
1395
+ const uint8_t *info, size_t info_len, const uint8_t *peer_public_key,
1396
+ size_t peer_public_key_len) {
1397
+ if (key->kem->auth_decap == nullptr) {
1398
+ // Not all HPKE KEMs support AuthDecap.
1399
+ OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
1400
+ return 0;
1401
+ }
1402
+
1403
+ EVP_HPKE_CTX_zero(ctx);
1404
+ ctx->is_sender = 0;
1405
+ ctx->kem = key->kem;
1406
+ ctx->kdf = kdf;
1407
+ ctx->aead = aead;
1408
+ uint8_t shared_secret[MAX_SHARED_SECRET_LEN];
1409
+ size_t shared_secret_len;
1410
+ if (!key->kem->auth_decap(key, shared_secret, &shared_secret_len, enc,
1411
+ enc_len, peer_public_key, peer_public_key_len) ||
1412
+ !hpke_key_schedule(ctx, HPKE_MODE_AUTH, shared_secret, shared_secret_len,
1413
+ info, info_len)) {
1414
+ EVP_HPKE_CTX_cleanup(ctx);
1415
+ return 0;
1416
+ }
1417
+ return 1;
1418
+ }
1419
+
1420
+ static void hpke_nonce(const EVP_HPKE_CTX *ctx, uint8_t *out_nonce,
1421
+ size_t nonce_len) {
1422
+ assert(nonce_len >= 8);
1423
+
1424
+ // Write padded big-endian bytes of `ctx->seq` to `out_nonce`.
1425
+ OPENSSL_memset(out_nonce, 0, nonce_len);
1426
+ uint64_t seq_copy = ctx->seq;
1427
+ for (size_t i = 0; i < 8; i++) {
1428
+ out_nonce[nonce_len - i - 1] = seq_copy & 0xff;
1429
+ seq_copy >>= 8;
1430
+ }
1431
+
1432
+ // XOR the encoded sequence with the `ctx->base_nonce`.
1433
+ for (size_t i = 0; i < nonce_len; i++) {
1434
+ out_nonce[i] ^= ctx->base_nonce[i];
1435
+ }
1436
+ }
1437
+
1438
+ int EVP_HPKE_CTX_open(EVP_HPKE_CTX *ctx, uint8_t *out, size_t *out_len,
1439
+ size_t max_out_len, const uint8_t *in, size_t in_len,
1440
+ const uint8_t *ad, size_t ad_len) {
1441
+ if (ctx->is_sender) {
1442
+ OPENSSL_PUT_ERROR(EVP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1443
+ return 0;
1444
+ }
1445
+ if (ctx->seq == UINT64_MAX) {
1446
+ OPENSSL_PUT_ERROR(EVP, ERR_R_OVERFLOW);
1447
+ return 0;
1448
+ }
1449
+
1450
+ uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
1451
+ const size_t nonce_len = EVP_AEAD_nonce_length(ctx->aead_ctx.aead);
1452
+ hpke_nonce(ctx, nonce, nonce_len);
1453
+
1454
+ if (!EVP_AEAD_CTX_open(&ctx->aead_ctx, out, out_len, max_out_len, nonce,
1455
+ nonce_len, in, in_len, ad, ad_len)) {
1456
+ return 0;
1457
+ }
1458
+ ctx->seq++;
1459
+ return 1;
1460
+ }
1461
+
1462
+ int EVP_HPKE_CTX_seal(EVP_HPKE_CTX *ctx, uint8_t *out, size_t *out_len,
1463
+ size_t max_out_len, const uint8_t *in, size_t in_len,
1464
+ const uint8_t *ad, size_t ad_len) {
1465
+ if (!ctx->is_sender) {
1466
+ OPENSSL_PUT_ERROR(EVP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1467
+ return 0;
1468
+ }
1469
+ if (ctx->seq == UINT64_MAX) {
1470
+ OPENSSL_PUT_ERROR(EVP, ERR_R_OVERFLOW);
1471
+ return 0;
1472
+ }
1473
+
1474
+ uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
1475
+ const size_t nonce_len = EVP_AEAD_nonce_length(ctx->aead_ctx.aead);
1476
+ hpke_nonce(ctx, nonce, nonce_len);
1477
+
1478
+ if (!EVP_AEAD_CTX_seal(&ctx->aead_ctx, out, out_len, max_out_len, nonce,
1479
+ nonce_len, in, in_len, ad, ad_len)) {
1480
+ return 0;
1481
+ }
1482
+ ctx->seq++;
1483
+ return 1;
1484
+ }
1485
+
1486
+ int EVP_HPKE_CTX_export(const EVP_HPKE_CTX *ctx, uint8_t *out,
1487
+ size_t secret_len, const uint8_t *context,
1488
+ size_t context_len) {
1489
+ auto suite_id = hpke_full_suite_id(ctx);
1490
+ const EVP_MD *hkdf_md = ctx->kdf->hkdf_md_func();
1491
+ if (!hpke_labeled_expand(hkdf_md, out, secret_len, ctx->exporter_secret,
1492
+ EVP_MD_size(hkdf_md), suite_id.data(),
1493
+ suite_id.size(), "sec", context, context_len)) {
1494
+ return 0;
1495
+ }
1496
+ return 1;
1497
+ }
1498
+
1499
+ size_t EVP_HPKE_CTX_max_overhead(const EVP_HPKE_CTX *ctx) {
1500
+ assert(ctx->is_sender);
1501
+ return EVP_AEAD_max_overhead(EVP_AEAD_CTX_aead(&ctx->aead_ctx));
1502
+ }
1503
+
1504
+ const EVP_HPKE_KEM *EVP_HPKE_CTX_kem(const EVP_HPKE_CTX *ctx) {
1505
+ return ctx->kem;
1506
+ }
1507
+
1508
+ const EVP_HPKE_AEAD *EVP_HPKE_CTX_aead(const EVP_HPKE_CTX *ctx) {
1509
+ return ctx->aead;
1510
+ }
1511
+
1512
+ const EVP_HPKE_KDF *EVP_HPKE_CTX_kdf(const EVP_HPKE_CTX *ctx) {
1513
+ return ctx->kdf;
1514
+ }