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,1856 @@
1
+ // Copyright 2014 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/base.h>
16
+
17
+ #include <assert.h>
18
+ #include <stdint.h>
19
+ #include <stdlib.h>
20
+ #include <string.h>
21
+
22
+ #include <openssl/base.h>
23
+ #include <openssl/bytestring.h>
24
+ #include <openssl/mem.h>
25
+ #include <openssl/rand.h>
26
+
27
+ #include "../../internal.h"
28
+ #include "../bcm_interface.h"
29
+ #include "../keccak/internal.h"
30
+
31
+
32
+ using namespace bssl;
33
+
34
+ #if defined(BORINGSSL_FIPS)
35
+
36
+ DEFINE_STATIC_ONCE(g_mlkem_keygen_self_test_once)
37
+ DEFINE_STATIC_ONCE(g_mlkem_encap_self_test_once)
38
+ DEFINE_STATIC_ONCE(g_mlkem_decap_self_test_once)
39
+
40
+ #endif
41
+
42
+ namespace mlkem {
43
+ namespace {
44
+
45
+ namespace fips {
46
+ void ensure_keygen_self_test();
47
+ void ensure_encap_self_test();
48
+ void ensure_decap_self_test();
49
+ } // namespace fips
50
+
51
+ // See
52
+ // https://csrc.nist.gov/pubs/fips/203/final
53
+
54
+ inline void prf(uint8_t *out, size_t out_len, const uint8_t in[33]) {
55
+ BORINGSSL_keccak(out, out_len, in, 33, boringssl_shake256);
56
+ }
57
+
58
+ #if defined(HAVE_KECCAK_X2)
59
+ inline void prf_x2(uint8_t *outs[2], size_t out_len,
60
+ const uint8_t *ins[2] /* 33 each */) {
61
+ BORINGSSL_keccak_short_x2(outs, out_len, ins, 33, boringssl_shake256);
62
+ }
63
+ #endif
64
+
65
+ #if defined(HAVE_KECCAK_X4)
66
+ inline void prf_x4(uint8_t *outs[4], size_t out_len,
67
+ const uint8_t *ins[4] /* 33 each */) {
68
+ BORINGSSL_keccak_short_x4(outs, out_len, ins, 33, boringssl_shake256);
69
+ }
70
+ #endif
71
+
72
+ // Section 4.1
73
+ void hash_h(uint8_t out[32], const uint8_t *in, size_t len) {
74
+ BORINGSSL_keccak(out, 32, in, len, boringssl_sha3_256);
75
+ }
76
+
77
+ void hash_g(uint8_t out[64], const uint8_t *in, size_t len) {
78
+ BORINGSSL_keccak(out, 64, in, len, boringssl_sha3_512);
79
+ }
80
+
81
+ // This is called `J` in the spec.
82
+ void kdf(uint8_t out[MLKEM_SHARED_SECRET_BYTES],
83
+ const uint8_t failure_secret[32], const uint8_t *ciphertext,
84
+ size_t ciphertext_len) {
85
+ BORINGSSL_keccak_st st;
86
+ BORINGSSL_keccak_init(&st, boringssl_shake256);
87
+ BORINGSSL_keccak_absorb(&st, failure_secret, 32);
88
+ BORINGSSL_keccak_absorb(&st, ciphertext, ciphertext_len);
89
+ BORINGSSL_keccak_squeeze(&st, out, MLKEM_SHARED_SECRET_BYTES);
90
+ }
91
+
92
+ // Constants that are common across all sizes.
93
+ #define DEGREE 256
94
+ const size_t kBarrettMultiplier = 1290167;
95
+ const unsigned kBarrettShift = 32;
96
+ const uint16_t kPrime = 3329;
97
+ const int kLog2Prime = 12;
98
+ const uint16_t kHalfPrime = (/*kPrime=*/3329 - 1) / 2;
99
+ // kInverseDegree is 128^-1 mod 3329; 128 because kPrime does not have a 512th
100
+ // root of unity.
101
+ const uint16_t kInverseDegree = 3303;
102
+
103
+ // Rank-specific constants.
104
+ #define RANK768 3
105
+ const int kDU768 = 10;
106
+ const int kDV768 = 4;
107
+ #define RANK1024 4
108
+ const int kDU1024 = 11;
109
+ const int kDV1024 = 5;
110
+
111
+ constexpr size_t encoded_vector_size(int rank) {
112
+ return (kLog2Prime * DEGREE / 8) * static_cast<size_t>(rank);
113
+ }
114
+
115
+ constexpr size_t encoded_public_key_size(int rank) {
116
+ return encoded_vector_size(rank) + /*sizeof(rho)=*/32;
117
+ }
118
+
119
+ static_assert(encoded_public_key_size(RANK768) == MLKEM768_PUBLIC_KEY_BYTES);
120
+ static_assert(encoded_public_key_size(RANK1024) == MLKEM1024_PUBLIC_KEY_BYTES);
121
+
122
+ constexpr size_t compressed_vector_size(int rank) {
123
+ // `if constexpr` isn't available in C++17.
124
+ return (rank == RANK768 ? kDU768 : kDU1024) * static_cast<size_t>(rank) *
125
+ DEGREE / 8;
126
+ }
127
+
128
+ constexpr size_t ciphertext_size(int rank) {
129
+ return compressed_vector_size(rank) +
130
+ (rank == RANK768 ? kDV768 : kDV1024) * DEGREE / 8;
131
+ }
132
+
133
+ static_assert(ciphertext_size(RANK768) == MLKEM768_CIPHERTEXT_BYTES);
134
+ static_assert(ciphertext_size(RANK1024) == MLKEM1024_CIPHERTEXT_BYTES);
135
+
136
+ struct scalar {
137
+ // On every function entry and exit, 0 <= c < kPrime.
138
+ uint16_t c[DEGREE];
139
+ };
140
+
141
+ template <int RANK>
142
+ struct vector {
143
+ scalar v[RANK];
144
+ };
145
+
146
+ template <int RANK>
147
+ struct matrix {
148
+ scalar v[RANK][RANK];
149
+ };
150
+
151
+ // This bit of Python will be referenced in some of the following comments:
152
+ //
153
+ // p = 3329
154
+ //
155
+ // def bitreverse(i):
156
+ // ret = 0
157
+ // for n in range(7):
158
+ // bit = i & 1
159
+ // ret <<= 1
160
+ // ret |= bit
161
+ // i >>= 1
162
+ // return ret
163
+
164
+ // kNTTRoots = [pow(17, bitreverse(i), p) for i in range(128)]
165
+ const uint16_t kNTTRoots[128] = {
166
+ 1, 1729, 2580, 3289, 2642, 630, 1897, 848, 1062, 1919, 193, 797,
167
+ 2786, 3260, 569, 1746, 296, 2447, 1339, 1476, 3046, 56, 2240, 1333,
168
+ 1426, 2094, 535, 2882, 2393, 2879, 1974, 821, 289, 331, 3253, 1756,
169
+ 1197, 2304, 2277, 2055, 650, 1977, 2513, 632, 2865, 33, 1320, 1915,
170
+ 2319, 1435, 807, 452, 1438, 2868, 1534, 2402, 2647, 2617, 1481, 648,
171
+ 2474, 3110, 1227, 910, 17, 2761, 583, 2649, 1637, 723, 2288, 1100,
172
+ 1409, 2662, 3281, 233, 756, 2156, 3015, 3050, 1703, 1651, 2789, 1789,
173
+ 1847, 952, 1461, 2687, 939, 2308, 2437, 2388, 733, 2337, 268, 641,
174
+ 1584, 2298, 2037, 3220, 375, 2549, 2090, 1645, 1063, 319, 2773, 757,
175
+ 2099, 561, 2466, 2594, 2804, 1092, 403, 1026, 1143, 2150, 2775, 886,
176
+ 1722, 1212, 1874, 1029, 2110, 2935, 885, 2154,
177
+ };
178
+
179
+ // kInverseNTTRoots = [pow(17, -bitreverse(i), p) for i in range(128)]
180
+ const uint16_t kInverseNTTRoots[128] = {
181
+ 1, 1600, 40, 749, 2481, 1432, 2699, 687, 1583, 2760, 69, 543,
182
+ 2532, 3136, 1410, 2267, 2508, 1355, 450, 936, 447, 2794, 1235, 1903,
183
+ 1996, 1089, 3273, 283, 1853, 1990, 882, 3033, 2419, 2102, 219, 855,
184
+ 2681, 1848, 712, 682, 927, 1795, 461, 1891, 2877, 2522, 1894, 1010,
185
+ 1414, 2009, 3296, 464, 2697, 816, 1352, 2679, 1274, 1052, 1025, 2132,
186
+ 1573, 76, 2998, 3040, 1175, 2444, 394, 1219, 2300, 1455, 2117, 1607,
187
+ 2443, 554, 1179, 2186, 2303, 2926, 2237, 525, 735, 863, 2768, 1230,
188
+ 2572, 556, 3010, 2266, 1684, 1239, 780, 2954, 109, 1292, 1031, 1745,
189
+ 2688, 3061, 992, 2596, 941, 892, 1021, 2390, 642, 1868, 2377, 1482,
190
+ 1540, 540, 1678, 1626, 279, 314, 1173, 2573, 3096, 48, 667, 1920,
191
+ 2229, 1041, 2606, 1692, 680, 2746, 568, 3312,
192
+ };
193
+
194
+ // kModRoots = [pow(17, 2*bitreverse(i) + 1, p) for i in range(128)]
195
+ const uint16_t kModRoots[128] = {
196
+ 17, 3312, 2761, 568, 583, 2746, 2649, 680, 1637, 1692, 723, 2606,
197
+ 2288, 1041, 1100, 2229, 1409, 1920, 2662, 667, 3281, 48, 233, 3096,
198
+ 756, 2573, 2156, 1173, 3015, 314, 3050, 279, 1703, 1626, 1651, 1678,
199
+ 2789, 540, 1789, 1540, 1847, 1482, 952, 2377, 1461, 1868, 2687, 642,
200
+ 939, 2390, 2308, 1021, 2437, 892, 2388, 941, 733, 2596, 2337, 992,
201
+ 268, 3061, 641, 2688, 1584, 1745, 2298, 1031, 2037, 1292, 3220, 109,
202
+ 375, 2954, 2549, 780, 2090, 1239, 1645, 1684, 1063, 2266, 319, 3010,
203
+ 2773, 556, 757, 2572, 2099, 1230, 561, 2768, 2466, 863, 2594, 735,
204
+ 2804, 525, 1092, 2237, 403, 2926, 1026, 2303, 1143, 2186, 2150, 1179,
205
+ 2775, 554, 886, 2443, 1722, 1607, 1212, 2117, 1874, 1455, 1029, 2300,
206
+ 2110, 1219, 2935, 394, 885, 2444, 2154, 1175,
207
+ };
208
+
209
+ // reduce_once reduces 0 <= x < 2*kPrime, mod kPrime.
210
+ inline uint16_t reduce_once(uint16_t x) {
211
+ declassify_assert(x < 2 * kPrime);
212
+ const uint16_t subtracted = x - kPrime;
213
+ uint16_t mask = 0u - (subtracted >> 15);
214
+ // Although this is a constant-time select, we omit a value barrier here.
215
+ // Value barriers impede auto-vectorization (likely because it forces the
216
+ // value to transit through a general-purpose register). On AArch64, this is a
217
+ // difference of 2x.
218
+ //
219
+ // We usually add value barriers to selects because Clang turns consecutive
220
+ // selects with the same condition into a branch instead of CMOV/CSEL. This
221
+ // condition does not occur in ML-KEM, so omitting it seems to be safe so far,
222
+ // but see `scalar_centered_binomial_distribution_eta_2_with_prf`.
223
+ return (mask & x) | (~mask & subtracted);
224
+ }
225
+
226
+ // reduce_partial returns a number equivalent to x mod kPrime. The output is
227
+ // less than 2 * kPrime. `x` can be any `uint32_t`.
228
+ inline uint32_t reduce_partial(uint32_t x) {
229
+ uint64_t product = (uint64_t)x * kBarrettMultiplier;
230
+ uint32_t quotient = (uint32_t)(product >> kBarrettShift);
231
+ uint32_t remainder = x - quotient * kPrime;
232
+ return remainder;
233
+ }
234
+
235
+ // constant time reduce x mod kPrime using Barrett reduction. `x` can be any
236
+ // `uint32_t`.
237
+ inline uint16_t reduce(uint32_t x) { return reduce_once(reduce_partial(x)); }
238
+
239
+ inline void scalar_zero(scalar *out) { OPENSSL_memset(out, 0, sizeof(*out)); }
240
+
241
+ template <int RANK>
242
+ inline void vector_zero(vector<RANK> *out) {
243
+ OPENSSL_memset(out->v, 0, sizeof(scalar) * RANK);
244
+ }
245
+
246
+ // In place number theoretic transform of a given scalar.
247
+ // Note that MLKEM's kPrime 3329 does not have a 512th root of unity, so this
248
+ // transform leaves off the last iteration of the usual FFT code, with the 128
249
+ // relevant roots of unity being stored in `kNTTRoots`. This means the output
250
+ // should be seen as 128 elements in GF(3329^2), with the coefficients of the
251
+ // elements being consecutive entries in `s->c`.
252
+ inline void scalar_ntt(scalar *s) {
253
+ // Manually unrolled loop to maximize vectorization.
254
+ //
255
+ // Intermediate values of `s` are not fully reduced. `ITER` writes to every
256
+ // element of `s` exactly once. Each write adds less than 2*kPrime to some
257
+ // value from the previous iteration. After seven iterations, each element
258
+ // will be less than 15*kPrime. This fits in `uint16_t`, so we never overflow.
259
+ #define ITER(step, offset) \
260
+ { \
261
+ int k = 0; \
262
+ for (int i = 0; i < step; i++) { \
263
+ const uint32_t step_root = kNTTRoots[step + i]; \
264
+ for (int j = k; j < k + offset; j++) { \
265
+ uint32_t even = s->c[j]; \
266
+ /* `reduce_partial` works on values up to 2^32. \
267
+ * `step_root < kPrime` because it's static data. `s->c[...] < 2^16` \
268
+ * because it's 16-bit. */ \
269
+ uint32_t odd = \
270
+ reduce_partial(uint32_t{step_root} * uint32_t{s->c[j + offset]}); \
271
+ s->c[j] = even + odd; \
272
+ s->c[j + offset] = even + 2 * kPrime - odd; \
273
+ } \
274
+ k += 2 * offset; \
275
+ } \
276
+ }
277
+
278
+ // for (int step = 1; step < DEGREE / 2; step <<= 1)
279
+ ITER(1, 128)
280
+ ITER(2, 64)
281
+ ITER(4, 32)
282
+ ITER(8, 16)
283
+ ITER(16, 8)
284
+ ITER(32, 4)
285
+ ITER(64, 2)
286
+ static_assert(DEGREE == 256);
287
+ #undef ITER
288
+
289
+ // Now `s` is correct but the elements are not fully reduced. Reduce them.
290
+ for (int i = 0; i < DEGREE; i++) {
291
+ s->c[i] = reduce(s->c[i]);
292
+ }
293
+ }
294
+
295
+ template <int RANK>
296
+ inline void vector_ntt(vector<RANK> *a) {
297
+ for (int i = 0; i < RANK; i++) {
298
+ scalar_ntt(&a->v[i]);
299
+ }
300
+ }
301
+
302
+ // In place inverse number theoretic transform of a given scalar, with pairs of
303
+ // entries of s->v being interpreted as elements of GF(3329^2). Just as with the
304
+ // number theoretic transform, this leaves off the first step of the normal iFFT
305
+ // to account for the fact that 3329 does not have a 512th root of unity, using
306
+ // the precomputed 128 roots of unity stored in `kInverseNTTRoots`.
307
+ //
308
+ // FIPS 203, Algorithm 10 (`NTT^-1`).
309
+ void scalar_inverse_ntt(scalar *s) {
310
+ // Manually unrolled loop to maximize vectorization.
311
+ //
312
+ // Intermediate values are not fully reduced. `ITER` writes to every element
313
+ // exactly once. Each write either adds two values from the previous
314
+ // iteration, or is at most 2 * kPrime. After seven iterations, each element
315
+ // will be less than 2^7 * kPrime = 128 * kPrime. This fits in `uint32_t`, so
316
+ // we never overflow.
317
+ uint32_t c[DEGREE];
318
+ #define ITER(step, offset, src) \
319
+ { \
320
+ int k = 0; \
321
+ for (int i = 0; i < step; i++) { \
322
+ const uint32_t step_root = kInverseNTTRoots[step + i]; \
323
+ for (int j = k; j < k + offset; j++) { \
324
+ uint32_t even = (src)[j]; \
325
+ uint32_t odd = (src)[j + offset]; \
326
+ c[j] = odd + even; \
327
+ /* `reduce_partial` works on values up to 2^32. \
328
+ * `step_root < kPrime` because it's static data. The other term is \
329
+ * less than 2^32, and does not overflow because `odd` is at most \
330
+ * 128 * kPrime per the above. */ \
331
+ c[j + offset] = reduce_partial(uint32_t{step_root} * \
332
+ uint32_t{128 * kPrime + even - odd}); \
333
+ } \
334
+ k += 2 * offset; \
335
+ } \
336
+ }
337
+
338
+ // for (int offset = 2; offset < DEGREE; offset <<= 1)
339
+ ITER(64, 2, s->c)
340
+ ITER(32, 4, c)
341
+ ITER(16, 8, c)
342
+ ITER(8, 16, c)
343
+ ITER(4, 32, c)
344
+ ITER(2, 64, c)
345
+ ITER(1, 128, c)
346
+ static_assert(DEGREE == 256);
347
+ #undef ITER
348
+
349
+ // The final multiplication by `kInverseDegree` also fully reduces the
350
+ // partially-reduced values above.
351
+ for (int i = 0; i < DEGREE; i++) {
352
+ s->c[i] = reduce(c[i] * kInverseDegree);
353
+ }
354
+ }
355
+
356
+ template <int RANK>
357
+ void vector_inverse_ntt(vector<RANK> *a) {
358
+ for (int i = 0; i < RANK; i++) {
359
+ scalar_inverse_ntt(&a->v[i]);
360
+ }
361
+ }
362
+
363
+ inline void scalar_add(scalar *lhs, const scalar *rhs) {
364
+ for (int i = 0; i < DEGREE; i++) {
365
+ lhs->c[i] = reduce_once(lhs->c[i] + rhs->c[i]);
366
+ }
367
+ }
368
+
369
+ inline void scalar_sub(scalar *lhs, const scalar *rhs) {
370
+ for (int i = 0; i < DEGREE; i++) {
371
+ lhs->c[i] = reduce_once(lhs->c[i] - rhs->c[i] + kPrime);
372
+ }
373
+ }
374
+
375
+ // Multiplying two scalars in the number theoretically transformed state. Since
376
+ // 3329 does not have a 512th root of unity, this means we have to interpret
377
+ // the 2*ith and (2*i+1)th entries of the scalar as elements of GF(3329)[X]/(X^2
378
+ // - 17^(2*bitreverse(i)+1)) The value of 17^(2*bitreverse(i)+1) mod 3329 is
379
+ // stored in the precomputed `kModRoots` table. Note that our Barrett transform
380
+ // only allows us to multiply two reduced numbers together, so we need some
381
+ // intermediate reduction steps, even if an uint64_t could hold 3 multiplied
382
+ // numbers.
383
+ inline void scalar_mult(scalar *out, const scalar *lhs, const scalar *rhs) {
384
+ for (int i = 0; i < DEGREE / 2; i++) {
385
+ uint32_t real_real = (uint32_t)lhs->c[2 * i] * rhs->c[2 * i];
386
+ uint32_t img_img = (uint32_t)lhs->c[2 * i + 1] * rhs->c[2 * i + 1];
387
+ uint32_t real_img = (uint32_t)lhs->c[2 * i] * rhs->c[2 * i + 1];
388
+ uint32_t img_real = (uint32_t)lhs->c[2 * i + 1] * rhs->c[2 * i];
389
+ out->c[2 * i] =
390
+ reduce(real_real + (uint32_t)reduce(img_img) * kModRoots[i]);
391
+ out->c[2 * i + 1] = reduce(img_real + real_img);
392
+ }
393
+ }
394
+
395
+ template <int RANK>
396
+ inline void vector_add(vector<RANK> *lhs, const vector<RANK> *rhs) {
397
+ for (int i = 0; i < RANK; i++) {
398
+ scalar_add(&lhs->v[i], &rhs->v[i]);
399
+ }
400
+ }
401
+
402
+ template <int RANK>
403
+ inline void matrix_mult(vector<RANK> *out, const matrix<RANK> *m,
404
+ const vector<RANK> *a) {
405
+ vector_zero(out);
406
+ for (int i = 0; i < RANK; i++) {
407
+ for (int j = 0; j < RANK; j++) {
408
+ scalar product;
409
+ scalar_mult(&product, &m->v[i][j], &a->v[j]);
410
+ scalar_add(&out->v[i], &product);
411
+ }
412
+ }
413
+ }
414
+
415
+ template <int RANK>
416
+ inline void matrix_mult_transpose(vector<RANK> *out, const matrix<RANK> *m,
417
+ const vector<RANK> *a) {
418
+ vector_zero(out);
419
+ for (int i = 0; i < RANK; i++) {
420
+ for (int j = 0; j < RANK; j++) {
421
+ scalar product;
422
+ scalar_mult(&product, &m->v[j][i], &a->v[j]);
423
+ scalar_add(&out->v[i], &product);
424
+ }
425
+ }
426
+ }
427
+
428
+ template <int RANK>
429
+ inline void scalar_inner_product(scalar *out, const vector<RANK> *lhs,
430
+ const vector<RANK> *rhs) {
431
+ scalar_zero(out);
432
+ for (int i = 0; i < RANK; i++) {
433
+ scalar product;
434
+ scalar_mult(&product, &lhs->v[i], &rhs->v[i]);
435
+ scalar_add(out, &product);
436
+ }
437
+ }
438
+
439
+ inline void scalar_from_keccak_block_vartime(scalar *out, int *done,
440
+ const uint8_t block[168]) {
441
+ // kStep is the number of loop iterations to do at once. May need to become
442
+ // platform dependent at some point. Must be a compile-time constant - if we
443
+ // ever need to runtime dispatch on it, it has to be made a template argument.
444
+ const size_t kStep = 2;
445
+
446
+ // Branchless sampling as long as there is enough space in the output buffer
447
+ // even if all sampled numbers are < `kPrime`.
448
+ size_t i = 0;
449
+ for (; i <= size_t{168 - 3 * kStep} && *done <= int{DEGREE - 2 * kStep};
450
+ i += 3 * kStep) {
451
+ uint16_t d[2 * kStep];
452
+ for (size_t k = 0; k < kStep; ++k) {
453
+ size_t di = 2 * k;
454
+ size_t bi = i + 3 * k;
455
+ d[di] = block[bi] + 256 * (block[bi + 1] % 16);
456
+ d[di + 1] = block[bi + 1] / 16 + 16 * block[bi + 2];
457
+ }
458
+ for (size_t k = 0; k < 2 * kStep; ++k) {
459
+ out->c[*done] = d[k];
460
+ *done += d[k] < kPrime;
461
+ }
462
+ }
463
+
464
+ // Branchful "tail".
465
+ for (; i < 168 && *done < DEGREE; i += 3) {
466
+ uint16_t d1 = block[i] + 256 * (block[i + 1] % 16);
467
+ uint16_t d2 = block[i + 1] / 16 + 16 * block[i + 2];
468
+ if (d1 < kPrime) {
469
+ out->c[(*done)++] = d1;
470
+ }
471
+ if (d2 < kPrime && *done < DEGREE) {
472
+ out->c[(*done)++] = d2;
473
+ }
474
+ }
475
+ }
476
+
477
+ // Algorithm 7 from the spec. Rejection samples a Keccak stream to get
478
+ // uniformly distributed elements. This is used for matrix expansion and only
479
+ // operates on public inputs.
480
+ inline void scalar_from_keccak_vartime(scalar *out,
481
+ BORINGSSL_keccak_st *keccak_ctx) {
482
+ assert(keccak_ctx->squeeze_offset == 0);
483
+ assert(keccak_ctx->rate_bytes == 168);
484
+ static_assert(168 % 3 == 0, "block and coefficient boundaries do not align");
485
+
486
+ int done = 0;
487
+ while (done < DEGREE) {
488
+ uint8_t block[168];
489
+ BORINGSSL_keccak_squeeze(keccak_ctx, block, sizeof(block));
490
+ scalar_from_keccak_block_vartime(out, &done, block);
491
+ }
492
+ }
493
+
494
+ #if defined(HAVE_KECCAK_X2)
495
+ inline void scalar_from_keccak_vartime_x2(scalar *out[2],
496
+ BORINGSSL_keccak_st keccak_ctx[2]) {
497
+ assert(keccak_ctx[0].squeeze_offset == 0);
498
+ assert(keccak_ctx[0].rate_bytes == 168);
499
+ assert(keccak_ctx[1].squeeze_offset == 0);
500
+ assert(keccak_ctx[1].rate_bytes == 168);
501
+ static_assert(168 % 3 == 0, "block and coefficient boundaries do not align");
502
+
503
+ int done[2] = {0, 0};
504
+ while (done[0] < DEGREE || done[1] < DEGREE) {
505
+ uint8_t block[2][168];
506
+ uint8_t *blocks[] = {block[0], block[1]};
507
+ BORINGSSL_keccak_squeeze_x2(keccak_ctx, blocks, sizeof(block[0]));
508
+ scalar_from_keccak_block_vartime(out[0], &done[0], block[0]);
509
+ scalar_from_keccak_block_vartime(out[1], &done[1], block[1]);
510
+ }
511
+ }
512
+ #endif
513
+
514
+ #if defined(HAVE_KECCAK_X4)
515
+ inline void scalar_from_keccak_vartime_x4(scalar *out[4],
516
+ BORINGSSL_keccak_st keccak_ctx[]) {
517
+ for (int i = 0; i < 4; i++) {
518
+ assert(keccak_ctx[i].squeeze_offset == 0);
519
+ assert(keccak_ctx[i].rate_bytes == 168);
520
+ }
521
+ static_assert(168 % 3 == 0, "block and coefficient boundaries do not align");
522
+
523
+ int done[4] = {0, 0, 0, 0};
524
+ while (done[0] < DEGREE || done[1] < DEGREE || done[2] < DEGREE ||
525
+ done[3] < DEGREE) {
526
+ uint8_t block[4][168];
527
+ uint8_t *blocks[] = {block[0], block[1], block[2], block[3]};
528
+ BORINGSSL_keccak_squeeze_x4(keccak_ctx, blocks, sizeof(block[0]));
529
+ scalar_from_keccak_block_vartime(out[0], &done[0], block[0]);
530
+ scalar_from_keccak_block_vartime(out[1], &done[1], block[1]);
531
+ scalar_from_keccak_block_vartime(out[2], &done[2], block[2]);
532
+ scalar_from_keccak_block_vartime(out[3], &done[3], block[3]);
533
+ }
534
+ }
535
+ #endif
536
+
537
+ static void scalar_centered_binomial_distribution_eta_2(
538
+ scalar *out, const uint8_t entropy[128]) {
539
+ for (int i = 0; i < DEGREE; i += 2) {
540
+ uint8_t byte = entropy[i / 2];
541
+
542
+ uint16_t value = (byte & 1) + ((byte >> 1) & 1);
543
+ value -= ((byte >> 2) & 1) + ((byte >> 3) & 1);
544
+ // Add `kPrime` if `value` underflowed. See `reduce_once` for a discussion
545
+ // on why the value barrier is omitted. While this could have been written
546
+ // reduce_once(value + kPrime), this is one extra addition and small range
547
+ // of `value` tempts some versions of Clang to emit a branch.
548
+ uint16_t mask = 0u - (value >> 15);
549
+ out->c[i] = ((value + kPrime) & mask) | (value & ~mask);
550
+
551
+ byte >>= 4;
552
+ value = (byte & 1) + ((byte >> 1) & 1);
553
+ value -= ((byte >> 2) & 1) + ((byte >> 3) & 1);
554
+ // See above.
555
+ mask = 0u - (value >> 15);
556
+ out->c[i + 1] = ((value + kPrime) & mask) | (value & ~mask);
557
+ }
558
+ }
559
+
560
+ // Algorithm 8 from the spec, with eta fixed to two and the PRF call
561
+ // included. Creates binominally distributed elements by sampling 2*`eta` bits,
562
+ // and setting the coefficient to the count of the first bits minus the count of
563
+ // the second bits, resulting in a centered binomial distribution. Since eta is
564
+ // two this gives -2/2 with a probability of 1/16, -1/1 with probability 1/4,
565
+ // and 0 with probability 3/8.
566
+ void scalar_centered_binomial_distribution_eta_2_with_prf(
567
+ scalar *out, const uint8_t input[33]) {
568
+ uint8_t entropy[128];
569
+ static_assert(sizeof(entropy) == 2 * /*kEta=*/2 * DEGREE / 8);
570
+ prf(entropy, sizeof(entropy), input);
571
+ scalar_centered_binomial_distribution_eta_2(out, entropy);
572
+ }
573
+
574
+ #if defined(HAVE_KECCAK_X2)
575
+ // scalar_centered_binomial_distribution_eta_2_with_prf_x2 computes two blocks
576
+ // of scalar_centered_binomial_distribution_eta_2_with_prf.
577
+ static void scalar_centered_binomial_distribution_eta_2_with_prf_x2(
578
+ scalar out[2], uint8_t input[33]) {
579
+ uint8_t entropy[2][128];
580
+ static_assert(sizeof(entropy[0]) == 2 * /*kEta=*/2 * DEGREE / 8);
581
+
582
+ uint8_t input1[33];
583
+ OPENSSL_memcpy(input1, input, 33);
584
+ ++input1[32]; // Counter.
585
+
586
+ uint8_t *entropies[] = {entropy[0], entropy[1]};
587
+ const uint8_t *inputs[2] = {input, input1};
588
+ prf_x2(entropies, sizeof(entropy[0]), inputs);
589
+
590
+ for (int k = 0; k < 2; k++) {
591
+ scalar_centered_binomial_distribution_eta_2(&out[k], entropy[k]);
592
+ }
593
+ }
594
+ #endif
595
+
596
+ #if defined(HAVE_KECCAK_X4)
597
+ // scalar_centered_binomial_distribution_eta_2_with_prf_x4 computes four blocks
598
+ // of scalar_centered_binomial_distribution_eta_2_with_prf.
599
+ static void scalar_centered_binomial_distribution_eta_2_with_prf_x4(
600
+ scalar out[4], uint8_t input[33]) {
601
+ uint8_t entropy[4][128];
602
+ static_assert(sizeof(entropy[0]) == 2 * /*kEta=*/2 * DEGREE / 8);
603
+
604
+ uint8_t inputs[4][33];
605
+ for (int i = 0; i < 4; i++) {
606
+ OPENSSL_memcpy(inputs[i], input, 33);
607
+ inputs[i][32] += i;
608
+ }
609
+ uint8_t *entropies[] = {entropy[0], entropy[1], entropy[2], entropy[3]};
610
+ const uint8_t *input_ptrs[4] = {inputs[0], inputs[1], inputs[2], inputs[3]};
611
+ prf_x4(entropies, sizeof(entropy[0]), input_ptrs);
612
+
613
+ for (int k = 0; k < 4; k++) {
614
+ scalar_centered_binomial_distribution_eta_2(&out[k], entropy[k]);
615
+ }
616
+ }
617
+ #endif
618
+
619
+ // Generates a secret vector by using
620
+ // `scalar_centered_binomial_distribution_eta_2_with_prf`, using the given seed
621
+ // appending and incrementing `counter` for entry of the vector.
622
+ template <int RANK>
623
+ void vector_generate_secret_eta_2(vector<RANK> *out, uint8_t *counter,
624
+ const uint8_t seed[32]) {
625
+ uint8_t input[33];
626
+ OPENSSL_memcpy(input, seed, 32);
627
+
628
+ int i = 0;
629
+ #if defined(HAVE_KECCAK_X4)
630
+ if (BORINGSSL_have_keccak_x4()) {
631
+ for (; i + 4 <= RANK; i += 4) {
632
+ input[32] = *counter;
633
+ *counter += 4;
634
+ scalar_centered_binomial_distribution_eta_2_with_prf_x4(&out->v[i],
635
+ input);
636
+ }
637
+ }
638
+ #endif
639
+ #if defined(HAVE_KECCAK_X2)
640
+ for (; i + 2 <= RANK; i += 2) {
641
+ input[32] = *counter;
642
+ *counter += 2;
643
+ scalar_centered_binomial_distribution_eta_2_with_prf_x2(&out->v[i], input);
644
+ }
645
+ #endif
646
+
647
+ for (; i < RANK; i++) {
648
+ input[32] = (*counter)++;
649
+ scalar_centered_binomial_distribution_eta_2_with_prf(&out->v[i], input);
650
+ }
651
+ }
652
+
653
+ template <int RANK>
654
+ void matrix_expand_step(scalar *out, uint8_t input[34], int i) {
655
+ input[32] = i / RANK;
656
+ input[33] = i % RANK;
657
+ BORINGSSL_keccak_st keccak_ctx;
658
+ BORINGSSL_keccak_init(&keccak_ctx, boringssl_shake128);
659
+ BORINGSSL_keccak_absorb(&keccak_ctx, input, 34);
660
+ scalar_from_keccak_vartime(out, &keccak_ctx);
661
+ }
662
+
663
+ #if defined(HAVE_KECCAK_X2)
664
+ template <int RANK>
665
+ void matrix_expand_step_x2(matrix<RANK> *out, uint8_t input[34], int i) {
666
+ input[32] = i / RANK;
667
+ input[33] = i % RANK;
668
+ uint8_t input1[34];
669
+ OPENSSL_memcpy(input1, input, 32);
670
+ input1[32] = (i + 1) / RANK;
671
+ input1[33] = (i + 1) % RANK;
672
+ BORINGSSL_keccak_st keccak_ctx[2];
673
+ BORINGSSL_keccak_init(&keccak_ctx[0], boringssl_shake128);
674
+ BORINGSSL_keccak_init(&keccak_ctx[1], boringssl_shake128);
675
+ BORINGSSL_keccak_absorb(&keccak_ctx[0], input, 34);
676
+ BORINGSSL_keccak_absorb(&keccak_ctx[1], input1, 34);
677
+ scalar *outs[] = {&out->v[i / RANK][i % RANK],
678
+ &out->v[(i + 1) / RANK][(i + 1) % RANK]};
679
+ scalar_from_keccak_vartime_x2(outs, keccak_ctx);
680
+ }
681
+ #endif
682
+
683
+ #if defined(HAVE_KECCAK_X4)
684
+ template <int RANK>
685
+ void matrix_expand_step_x4(matrix<RANK> *out, uint8_t input[34], int i) {
686
+ uint8_t inputs[4][34];
687
+ BORINGSSL_keccak_st keccak_ctx[4];
688
+ for (int k = 0; k < 4; k++) {
689
+ OPENSSL_memcpy(inputs[k], input, 32);
690
+ inputs[k][32] = (i + k) / RANK;
691
+ inputs[k][33] = (i + k) % RANK;
692
+ BORINGSSL_keccak_init(&keccak_ctx[k], boringssl_shake128);
693
+ BORINGSSL_keccak_absorb(&keccak_ctx[k], inputs[k], 34);
694
+ }
695
+ scalar *outs[] = {&out->v[i / RANK][i % RANK],
696
+ &out->v[(i + 1) / RANK][(i + 1) % RANK],
697
+ &out->v[(i + 2) / RANK][(i + 2) % RANK],
698
+ &out->v[(i + 3) / RANK][(i + 3) % RANK]};
699
+ scalar_from_keccak_vartime_x4(outs, keccak_ctx);
700
+ }
701
+ #endif
702
+
703
+ // Expands the matrix of a seed for key generation and for encaps-CPA.
704
+ template <int RANK>
705
+ void matrix_expand(matrix<RANK> *out, const uint8_t rho[32]) {
706
+ uint8_t input[34];
707
+ OPENSSL_memcpy(input, rho, 32);
708
+
709
+ int i = 0;
710
+ #if defined(HAVE_KECCAK_X4)
711
+ if (BORINGSSL_have_keccak_x4()) {
712
+ for (; i + 4 <= RANK * RANK; i += 4) {
713
+ matrix_expand_step_x4<RANK>(out, input, i);
714
+ }
715
+ }
716
+ #endif
717
+ #if defined(HAVE_KECCAK_X2)
718
+ for (; i + 2 <= RANK * RANK; i += 2) {
719
+ matrix_expand_step_x2<RANK>(out, input, i);
720
+ }
721
+ #endif
722
+
723
+ for (; i < RANK * RANK; i++) {
724
+ matrix_expand_step<RANK>(&out->v[i / RANK][i % RANK], input, i);
725
+ }
726
+ }
727
+
728
+ // Encodes a scalar of 256 `BITS`-bit words into 32*`BITS` bytes by splitting
729
+ // and joining into bytes using LSB-first bit order (i.e. opposite to standard
730
+ // reading order). See below for examples. If an input is >= 1 << `BITS`, the
731
+ // result is undefined.
732
+ template <int BITS>
733
+ void scalar_encode(uint8_t *out, const scalar *s);
734
+
735
+ // Encodes a scalar of 256 10-bit words into 320 bytes as follows:
736
+ // 000000Aaaaaaaaaa 000000Bbbbbbbbbb 000000Cccccccccc 000000Dddddddddd ...
737
+ // -> aaaaaaaa bbbbbbAa ccccBbbb ddCccccc Dddddddd ...
738
+ template <>
739
+ void scalar_encode<10>(uint8_t out[320], const scalar *s) {
740
+ for (int i = 0; i < DEGREE; i += 4) {
741
+ uint16_t s0 = s->c[i];
742
+ uint16_t s1 = s->c[i + 1];
743
+ uint16_t s2 = s->c[i + 2];
744
+ uint16_t s3 = s->c[i + 3];
745
+ declassify_assert((s0 | s1 | s2 | s3) < (1 << 10));
746
+ out[0] = (uint8_t)s0;
747
+ out[1] = (uint8_t)((s0 >> 8) | (s1 << 2));
748
+ out[2] = (uint8_t)((s1 >> 6) | (s2 << 4));
749
+ out[3] = (uint8_t)((s2 >> 4) | (s3 << 6));
750
+ out[4] = (uint8_t)(s3 >> 2);
751
+ out += 5;
752
+ }
753
+ }
754
+
755
+ // Encodes a scalar of 256 12-bit words into 384 bytes as follows:
756
+ // 0000Aaaaaaaaaaaa 0000Bbbbbbbbbbbb 0000Cccccccccccc 0000Dddddddddddd ...
757
+ // -> aaaaaaaa bbbbAaaa Bbbbbbbb cccccccc ddddCccc Dddddddd ....
758
+ template <>
759
+ void scalar_encode<12>(uint8_t out[384], const scalar *s) {
760
+ for (int i = 0; i < DEGREE; i += 2) {
761
+ uint16_t s0 = s->c[i];
762
+ uint16_t s1 = s->c[i + 1];
763
+ declassify_assert((s0 | s1) < (1 << 12));
764
+ out[0] = (uint8_t)s0;
765
+ out[1] = (uint8_t)((s0 >> 8) | (s1 << 4));
766
+ out[2] = (uint8_t)(s1 >> 4);
767
+ out += 3;
768
+ }
769
+ }
770
+
771
+ // Encodes a scalar of 256 4-bit words into 128 bytes as follows:
772
+ // 000000000000Aaaa 00000000000Bbbb 000000000000Cccc 000000000000Dddd ...
773
+ // -> BbbbAaaa DdddCccc ...
774
+ template <>
775
+ void scalar_encode<4>(uint8_t out[128], const scalar *s) {
776
+ for (int i = 0; i < DEGREE; i += 2) {
777
+ uint16_t s0 = s->c[i];
778
+ uint16_t s1 = s->c[i + 1];
779
+ declassify_assert((s0 | s1) < (1 << 4));
780
+ out[0] = (uint8_t)(s0 | (s1 << 4));
781
+ out += 1;
782
+ }
783
+ }
784
+
785
+ // Encodes a scalar of 256 11-bit words into 352 bytes as follows:
786
+ // 00000Aaaaaaaaaaa 00000Bbbbbbbbbbb 00000Ccccccccccc 00000Ddddddddddd ...
787
+ // -> aaaaaaaa bbbbbAaa ccBbbbbb cccccccc dddddddC eeeeDddd fEeeeeee ...
788
+ template <>
789
+ void scalar_encode<11>(uint8_t out[352], const scalar *s) {
790
+ for (int i = 0; i < DEGREE; i += 8) {
791
+ uint16_t s0 = s->c[i];
792
+ uint16_t s1 = s->c[i + 1];
793
+ uint16_t s2 = s->c[i + 2];
794
+ uint16_t s3 = s->c[i + 3];
795
+ uint16_t s4 = s->c[i + 4];
796
+ uint16_t s5 = s->c[i + 5];
797
+ uint16_t s6 = s->c[i + 6];
798
+ uint16_t s7 = s->c[i + 7];
799
+ declassify_assert((s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7) < (1 << 11));
800
+ out[0] = (uint8_t)s0;
801
+ out[1] = (uint8_t)((s0 >> 8) | (s1 << 3));
802
+ out[2] = (uint8_t)((s1 >> 5) | (s2 << 6));
803
+ out[3] = (uint8_t)(s2 >> 2);
804
+ out[4] = (uint8_t)((s2 >> 10) | (s3 << 1));
805
+ out[5] = (uint8_t)((s3 >> 7) | (s4 << 4));
806
+ out[6] = (uint8_t)((s4 >> 4) | (s5 << 7));
807
+ out[7] = (uint8_t)(s5 >> 1);
808
+ out[8] = (uint8_t)((s5 >> 9) | (s6 << 2));
809
+ out[9] = (uint8_t)((s6 >> 6) | (s7 << 5));
810
+ out[10] = (uint8_t)(s7 >> 3);
811
+ out += 11;
812
+ }
813
+ }
814
+
815
+ // Encodes a scalar of 256 5-bit words into 160 bytes as follows:
816
+ // 00000000000Aaaaa 00000000000Bbbbb 00000000000Ccccc 00000000000Ddddd ...
817
+ // -> bbbAaaaa dCccccBb eeeeDddd ggFffffE HhhhhGgg ...
818
+ template <>
819
+ void scalar_encode<5>(uint8_t out[160], const scalar *s) {
820
+ for (int i = 0; i < DEGREE; i += 8) {
821
+ uint16_t s0 = s->c[i];
822
+ uint16_t s1 = s->c[i + 1];
823
+ uint16_t s2 = s->c[i + 2];
824
+ uint16_t s3 = s->c[i + 3];
825
+ uint16_t s4 = s->c[i + 4];
826
+ uint16_t s5 = s->c[i + 5];
827
+ uint16_t s6 = s->c[i + 6];
828
+ uint16_t s7 = s->c[i + 7];
829
+ declassify_assert((s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7) < (1 << 5));
830
+ out[0] = (uint8_t)(s0 | (s1 << 5));
831
+ out[1] = (uint8_t)((s1 >> 3) | (s2 << 2) | (s3 << 7));
832
+ out[2] = (uint8_t)((s3 >> 1) | (s4 << 4));
833
+ out[3] = (uint8_t)((s4 >> 4) | (s5 << 1) | (s6 << 6));
834
+ out[4] = (uint8_t)((s6 >> 2) | (s7 << 3));
835
+ out += 5;
836
+ }
837
+ }
838
+
839
+ // Encodes a scalar of 256 1-bit "words" into 32 bytes as follows:
840
+ // 0000000000000A 000000000000000B 000000000000000C 000000000000000D ...
841
+ // -> HGFEDCBA PONMLKJI XWVUTSRQ ...
842
+ // This order is best understood as the natural way of joining into bytes
843
+ // assuming LSB-first bit order.
844
+ template <>
845
+ void scalar_encode<1>(uint8_t out[32], const scalar *s) {
846
+ for (int i = 0; i < DEGREE; i += 8) {
847
+ uint8_t out_byte = 0;
848
+ for (int j = 0; j < 8; j++) {
849
+ declassify_assert(s->c[i + j] <= 1);
850
+ out_byte |= s->c[i + j] << j;
851
+ }
852
+ out[i / 8] = out_byte;
853
+ }
854
+ }
855
+
856
+ // Encodes an entire vector into 32*`RANK`*`bits` bytes. Note that since 256
857
+ // (DEGREE) is divisible by 8, the individual vector entries will always fill a
858
+ // whole number of bytes, so we do not need to worry about bit packing here.
859
+ template <int bits, int RANK>
860
+ void vector_encode(uint8_t *out, const vector<RANK> *a) {
861
+ for (int i = 0; i < RANK; i++) {
862
+ scalar_encode<bits>(out + i * bits * DEGREE / 8, &a->v[i]);
863
+ }
864
+ }
865
+
866
+ // scalar_decode parses `DEGREE * BITS` bits from `in` into `DEGREE` values in
867
+ // `out`. This is the inverse of `scalar_encode`. This is only defined for `BITS
868
+ // < 12`. Otherwise, the decoding is fallible and must use `scalar_decode_12`
869
+ // instead.
870
+ template <int BITS>
871
+ void scalar_decode(scalar *out, const uint8_t *in);
872
+
873
+ template <>
874
+ void scalar_decode<10>(scalar *out, const uint8_t in[320]) {
875
+ for (int i = 0; i < DEGREE; i += 4) {
876
+ uint16_t s0 = (uint16_t)(in[0] | ((in[1] & 0x03) << 8));
877
+ uint16_t s1 = (uint16_t)((in[1] >> 2) | ((in[2] & 0x0f) << 6));
878
+ uint16_t s2 = (uint16_t)((in[2] >> 4) | ((in[3] & 0x3f) << 4));
879
+ uint16_t s3 = (uint16_t)((in[3] >> 6) | (in[4] << 2));
880
+ out->c[i] = s0;
881
+ out->c[i + 1] = s1;
882
+ out->c[i + 2] = s2;
883
+ out->c[i + 3] = s3;
884
+ in += 5;
885
+ }
886
+ }
887
+
888
+ template <>
889
+ void scalar_decode<4>(scalar *out, const uint8_t in[128]) {
890
+ for (int i = 0; i < DEGREE; i += 2) {
891
+ uint16_t s0 = (uint16_t)(in[0] & 0x0f);
892
+ uint16_t s1 = (uint16_t)(in[0] >> 4);
893
+ // kPrime is 3329, so 4-bit values are always < kPrime.
894
+ out->c[i] = s0;
895
+ out->c[i + 1] = s1;
896
+ in += 1;
897
+ }
898
+ }
899
+
900
+ template <>
901
+ void scalar_decode<11>(scalar *out, const uint8_t in[352]) {
902
+ for (int i = 0; i < DEGREE; i += 8) {
903
+ uint16_t s0 = (uint16_t)(in[0] | ((in[1] & 0x07) << 8));
904
+ uint16_t s1 = (uint16_t)((in[1] >> 3) | ((in[2] & 0x3f) << 5));
905
+ uint16_t s2 =
906
+ (uint16_t)((in[2] >> 6) | (in[3] << 2) | ((in[4] & 0x01) << 10));
907
+ uint16_t s3 = (uint16_t)((in[4] >> 1) | ((in[5] & 0x0f) << 7));
908
+ uint16_t s4 = (uint16_t)((in[5] >> 4) | ((in[6] & 0x7f) << 4));
909
+ uint16_t s5 =
910
+ (uint16_t)((in[6] >> 7) | (in[7] << 1) | ((in[8] & 0x03) << 9));
911
+ uint16_t s6 = (uint16_t)((in[8] >> 2) | ((in[9] & 0x1f) << 6));
912
+ uint16_t s7 = (uint16_t)((in[9] >> 5) | (in[10] << 3));
913
+ out->c[i] = s0;
914
+ out->c[i + 1] = s1;
915
+ out->c[i + 2] = s2;
916
+ out->c[i + 3] = s3;
917
+ out->c[i + 4] = s4;
918
+ out->c[i + 5] = s5;
919
+ out->c[i + 6] = s6;
920
+ out->c[i + 7] = s7;
921
+ in += 11;
922
+ }
923
+ }
924
+
925
+ template <>
926
+ void scalar_decode<5>(scalar *out, const uint8_t in[160]) {
927
+ for (int i = 0; i < DEGREE; i += 8) {
928
+ uint16_t s0 = (uint16_t)(in[0] & 0x1f);
929
+ uint16_t s1 = (uint16_t)((in[0] >> 5) | ((in[1] & 0x03) << 3));
930
+ uint16_t s2 = (uint16_t)((in[1] >> 2) & 0x1f);
931
+ uint16_t s3 = (uint16_t)((in[1] >> 7) | ((in[2] & 0x0f) << 1));
932
+ uint16_t s4 = (uint16_t)((in[2] >> 4) | ((in[3] & 0x01) << 4));
933
+ uint16_t s5 = (uint16_t)((in[3] >> 1) & 0x1f);
934
+ uint16_t s6 = (uint16_t)((in[3] >> 6) | ((in[4] & 0x07) << 2));
935
+ uint16_t s7 = (uint16_t)(in[4] >> 3);
936
+ // kPrime is 3329, so 5-bit values are always < kPrime.
937
+ out->c[i] = s0;
938
+ out->c[i + 1] = s1;
939
+ out->c[i + 2] = s2;
940
+ out->c[i + 3] = s3;
941
+ out->c[i + 4] = s4;
942
+ out->c[i + 5] = s5;
943
+ out->c[i + 6] = s6;
944
+ out->c[i + 7] = s7;
945
+ in += 5;
946
+ }
947
+ }
948
+
949
+ template <>
950
+ void scalar_decode<1>(scalar *out, const uint8_t in[32]) {
951
+ for (int i = 0; i < DEGREE; i += 8) {
952
+ uint8_t in_byte = in[i / 8];
953
+ for (int j = 0; j < 8; j++) {
954
+ out->c[i + j] = (in_byte >> j) & 1;
955
+ }
956
+ }
957
+ }
958
+
959
+ // The inverse of `scalar_encode<12>`. Returns 1 iff the encoded scalar is
960
+ // valid, i.e. all components are < `kPrime`. Otherwise, returns 0 and the value
961
+ // of `out` is undefined.
962
+ int scalar_decode_12(scalar *out, const uint8_t in[384]) {
963
+ for (int i = 0; i < DEGREE; i += 2) {
964
+ uint16_t s0 = (uint16_t)(in[0] | ((in[1] & 0x0f) << 8));
965
+ uint16_t s1 = (uint16_t)((in[1] >> 4) | (in[2] << 4));
966
+ // This is only used with secret input when parsing the test-only
967
+ // semi-expanded format. Leaking information about invalid inputs is OK.
968
+ if (constant_time_declassify_int(s0 >= kPrime) ||
969
+ constant_time_declassify_int(s1 >= kPrime)) {
970
+ return 0;
971
+ }
972
+ out->c[i] = s0;
973
+ out->c[i + 1] = s1;
974
+ in += 3;
975
+ }
976
+ return 1;
977
+ }
978
+
979
+ // Decodes 32*`RANK`*`bits` bytes from `in` into `out`. This only supports `bits
980
+ // < 12`, necessary for decoding to be infallible.
981
+ template <int bits, int RANK>
982
+ inline void vector_decode(vector<RANK> *out, const uint8_t *in) {
983
+ static_assert(bits < 12);
984
+ for (int i = 0; i < RANK; i++) {
985
+ scalar_decode<bits>(&out->v[i], in + i * bits * DEGREE / 8);
986
+ }
987
+ }
988
+
989
+ // Decodes 32*`RANK`*12 bytes from `in` into `out` It returns one on success or
990
+ // zero if any parsed value is >= `kPrime`.
991
+ template <int RANK>
992
+ inline int vector_decode_12(vector<RANK> *out, const uint8_t *in) {
993
+ for (int i = 0; i < RANK; i++) {
994
+ if (!scalar_decode_12(&out->v[i], in + i * 12 * DEGREE / 8)) {
995
+ return 0;
996
+ }
997
+ }
998
+ return 1;
999
+ }
1000
+
1001
+ // Compresses (lossily) an input `x` mod 3329 into `bits` many bits by grouping
1002
+ // numbers close to each other together. The formula used is
1003
+ // round(2^`bits`/kPrime*x) mod 2^`bits`.
1004
+ // Uses Barrett reduction to achieve constant time. Since we need both the
1005
+ // remainder (for rounding) and the quotient (as the result), we cannot use
1006
+ // `reduce` here, but need to do the Barrett reduction directly.
1007
+ inline uint16_t compress(uint16_t x, int bits) {
1008
+ uint32_t shifted = (uint32_t)x << bits;
1009
+ uint64_t product = (uint64_t)shifted * kBarrettMultiplier;
1010
+ uint32_t quotient = (uint32_t)(product >> kBarrettShift);
1011
+ uint32_t remainder = shifted - quotient * kPrime;
1012
+
1013
+ // Adjust the quotient to round correctly:
1014
+ // 0 <= remainder <= kHalfPrime round to 0
1015
+ // kHalfPrime < remainder <= kPrime + kHalfPrime round to 1
1016
+ // kPrime + kHalfPrime < remainder < 2 * kPrime round to 2
1017
+ declassify_assert(remainder < 2u * kPrime);
1018
+ quotient += 1 & constant_time_lt_w(kHalfPrime, remainder);
1019
+ quotient += 1 & constant_time_lt_w(kPrime + kHalfPrime, remainder);
1020
+ return quotient & ((1 << bits) - 1);
1021
+ }
1022
+
1023
+ // Decompresses `x` by using an equi-distant representative. The formula is
1024
+ // round(kPrime/2^`bits`*x). Note that 2^`bits` being the divisor allows us to
1025
+ // implement this logic using only bit operations.
1026
+ inline uint16_t decompress(uint16_t x, int bits) {
1027
+ uint32_t product = (uint32_t)x * kPrime;
1028
+ uint32_t power = 1 << bits;
1029
+ // This is `product` % power, since `power` is a power of 2.
1030
+ uint32_t remainder = product & (power - 1);
1031
+ // This is `product` / power, since `power` is a power of 2.
1032
+ uint32_t lower = product >> bits;
1033
+ // The rounding logic works since the first half of numbers mod `power` have a
1034
+ // 0 as first bit, and the second half has a 1 as first bit, since `power` is
1035
+ // a power of 2. As a 12 bit number, `remainder` is always positive, so we
1036
+ // will shift in 0s for a right shift.
1037
+ return lower + (remainder >> (bits - 1));
1038
+ }
1039
+
1040
+ inline void scalar_compress(scalar *s, int bits) {
1041
+ for (int i = 0; i < DEGREE; i++) {
1042
+ s->c[i] = compress(s->c[i], bits);
1043
+ }
1044
+ }
1045
+
1046
+ inline void scalar_decompress(scalar *s, int bits) {
1047
+ for (int i = 0; i < DEGREE; i++) {
1048
+ s->c[i] = decompress(s->c[i], bits);
1049
+ }
1050
+ }
1051
+
1052
+ template <int RANK>
1053
+ void vector_compress(vector<RANK> *a, int bits) {
1054
+ for (int i = 0; i < RANK; i++) {
1055
+ scalar_compress(&a->v[i], bits);
1056
+ }
1057
+ }
1058
+
1059
+ template <int RANK>
1060
+ void vector_decompress(vector<RANK> *a, int bits) {
1061
+ for (int i = 0; i < RANK; i++) {
1062
+ scalar_decompress(&a->v[i], bits);
1063
+ }
1064
+ }
1065
+
1066
+ template <int RANK>
1067
+ struct public_key {
1068
+ vector<RANK> t;
1069
+ uint8_t rho[32];
1070
+ uint8_t public_key_hash[32];
1071
+ matrix<RANK> m;
1072
+ };
1073
+
1074
+ template <int RANK>
1075
+ struct private_key {
1076
+ public_key<RANK> pub;
1077
+ vector<RANK> s;
1078
+ uint8_t fo_failure_secret[32];
1079
+ };
1080
+
1081
+ template <int RANK>
1082
+ inline void decrypt_cpa(uint8_t out[32], const private_key<RANK> *priv,
1083
+ const uint8_t ciphertext[MLKEM768_CIPHERTEXT_BYTES]) {
1084
+ constexpr int du = RANK == RANK768 ? kDU768 : kDU1024;
1085
+ constexpr int dv = RANK == RANK768 ? kDV768 : kDV1024;
1086
+
1087
+ vector<RANK> u;
1088
+ vector_decode<du>(&u, ciphertext);
1089
+ vector_decompress(&u, du);
1090
+ vector_ntt(&u);
1091
+ scalar v;
1092
+ scalar_decode<dv>(&v, ciphertext + compressed_vector_size(RANK));
1093
+ scalar_decompress(&v, dv);
1094
+ scalar mask;
1095
+ scalar_inner_product(&mask, &priv->s, &u);
1096
+ scalar_inverse_ntt(&mask);
1097
+ scalar_sub(&v, &mask);
1098
+ scalar_compress(&v, 1);
1099
+ scalar_encode<1>(out, &v);
1100
+ }
1101
+
1102
+ template <int RANK>
1103
+ inline bcm_status mlkem_marshal_public_key(CBB *out,
1104
+ const public_key<RANK> *pub) {
1105
+ uint8_t *vector_output;
1106
+ if (!CBB_add_space(out, &vector_output, encoded_vector_size(RANK))) {
1107
+ return bcm_status::failure;
1108
+ }
1109
+ vector_encode<kLog2Prime>(vector_output, &pub->t);
1110
+ if (!CBB_add_bytes(out, pub->rho, sizeof(pub->rho))) {
1111
+ return bcm_status::failure;
1112
+ }
1113
+ return bcm_status::approved;
1114
+ }
1115
+
1116
+ template <int RANK>
1117
+ inline bool mlkem_public_keys_equal(const public_key<RANK> *a,
1118
+ const public_key<RANK> *b) {
1119
+ return OPENSSL_memcmp(a->public_key_hash, b->public_key_hash, 32) == 0;
1120
+ }
1121
+
1122
+ template <int RANK>
1123
+ void mlkem_generate_key_external_seed_no_self_test(
1124
+ uint8_t *out_encoded_public_key, private_key<RANK> *priv,
1125
+ const uint8_t seed[MLKEM_SEED_BYTES]) {
1126
+ uint8_t augmented_seed[33];
1127
+ OPENSSL_memcpy(augmented_seed, seed, 32);
1128
+ augmented_seed[32] = RANK;
1129
+
1130
+ uint8_t hashed[64];
1131
+ hash_g(hashed, augmented_seed, sizeof(augmented_seed));
1132
+ const uint8_t *const rho = hashed;
1133
+ const uint8_t *const sigma = hashed + 32;
1134
+ // rho is public.
1135
+ CONSTTIME_DECLASSIFY(rho, 32);
1136
+ OPENSSL_memcpy(priv->pub.rho, hashed, sizeof(priv->pub.rho));
1137
+ matrix_expand(&priv->pub.m, rho);
1138
+ uint8_t counter = 0;
1139
+ vector_generate_secret_eta_2(&priv->s, &counter, sigma);
1140
+ vector_ntt(&priv->s);
1141
+ vector<RANK> error;
1142
+ vector_generate_secret_eta_2(&error, &counter, sigma);
1143
+ vector_ntt(&error);
1144
+ matrix_mult_transpose(&priv->pub.t, &priv->pub.m, &priv->s);
1145
+ vector_add(&priv->pub.t, &error);
1146
+ // t is part of the public key and thus is public.
1147
+ CONSTTIME_DECLASSIFY(&priv->pub.t, sizeof(priv->pub.t));
1148
+
1149
+ CBB cbb;
1150
+ CBB_init_fixed(&cbb, out_encoded_public_key, encoded_public_key_size(RANK));
1151
+ if (!bcm_success(mlkem_marshal_public_key(&cbb, &priv->pub))) {
1152
+ abort();
1153
+ }
1154
+
1155
+ hash_h(priv->pub.public_key_hash, out_encoded_public_key,
1156
+ encoded_public_key_size(RANK));
1157
+ OPENSSL_memcpy(priv->fo_failure_secret, seed + 32, 32);
1158
+ }
1159
+
1160
+ template <int RANK>
1161
+ void mlkem_generate_key_external_seed(uint8_t *out_encoded_public_key,
1162
+ private_key<RANK> *priv,
1163
+ const uint8_t seed[MLKEM_SEED_BYTES]) {
1164
+ fips::ensure_keygen_self_test();
1165
+ mlkem_generate_key_external_seed_no_self_test(out_encoded_public_key, priv,
1166
+ seed);
1167
+ }
1168
+
1169
+ // Encrypts a message with given randomness to
1170
+ // the ciphertext in `out`. Without applying the Fujisaki-Okamoto transform this
1171
+ // would not result in a CCA secure scheme, since lattice schemes are vulnerable
1172
+ // to decryption failure oracles.
1173
+ template <int RANK>
1174
+ void encrypt_cpa(uint8_t *out, const mlkem::public_key<RANK> *pub,
1175
+ const uint8_t message[32], const uint8_t randomness[32]) {
1176
+ constexpr int du = RANK == RANK768 ? mlkem::kDU768 : mlkem::kDU1024;
1177
+ constexpr int dv = RANK == RANK768 ? mlkem::kDV768 : mlkem::kDV1024;
1178
+
1179
+ uint8_t counter = 0;
1180
+ mlkem::vector<RANK> secret;
1181
+ vector_generate_secret_eta_2(&secret, &counter, randomness);
1182
+ vector_ntt(&secret);
1183
+ mlkem::vector<RANK> error;
1184
+ vector_generate_secret_eta_2(&error, &counter, randomness);
1185
+ uint8_t input[33];
1186
+ OPENSSL_memcpy(input, randomness, 32);
1187
+ input[32] = counter;
1188
+ mlkem::scalar scalar_error;
1189
+ scalar_centered_binomial_distribution_eta_2_with_prf(&scalar_error, input);
1190
+ mlkem::vector<RANK> u;
1191
+ matrix_mult(&u, &pub->m, &secret);
1192
+ vector_inverse_ntt(&u);
1193
+ vector_add(&u, &error);
1194
+ mlkem::scalar v;
1195
+ scalar_inner_product(&v, &pub->t, &secret);
1196
+ scalar_inverse_ntt(&v);
1197
+ scalar_add(&v, &scalar_error);
1198
+ mlkem::scalar expanded_message;
1199
+ scalar_decode<1>(&expanded_message, message);
1200
+ scalar_decompress(&expanded_message, 1);
1201
+ scalar_add(&v, &expanded_message);
1202
+ vector_compress(&u, du);
1203
+ vector_encode<du>(out, &u);
1204
+ scalar_compress(&v, dv);
1205
+ scalar_encode<dv>(out + mlkem::compressed_vector_size(RANK), &v);
1206
+ }
1207
+
1208
+ // See section 6.3
1209
+ template <int RANK>
1210
+ void mlkem_decap_no_self_test(
1211
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1212
+ const uint8_t *ciphertext, const private_key<RANK> *priv) {
1213
+ uint8_t decrypted[64];
1214
+ decrypt_cpa(decrypted, priv, ciphertext);
1215
+ OPENSSL_memcpy(decrypted + 32, priv->pub.public_key_hash,
1216
+ sizeof(decrypted) - 32);
1217
+ uint8_t key_and_randomness[64];
1218
+ hash_g(key_and_randomness, decrypted, sizeof(decrypted));
1219
+ constexpr size_t ciphertext_len = ciphertext_size(RANK);
1220
+ uint8_t expected_ciphertext[MLKEM1024_CIPHERTEXT_BYTES];
1221
+ static_assert(ciphertext_len <= sizeof(expected_ciphertext));
1222
+ encrypt_cpa(expected_ciphertext, &priv->pub, decrypted,
1223
+ key_and_randomness + 32);
1224
+
1225
+ uint8_t failure_key[32];
1226
+ kdf(failure_key, priv->fo_failure_secret, ciphertext, ciphertext_len);
1227
+
1228
+ uint8_t mask = constant_time_eq_int_8(
1229
+ CRYPTO_memcmp(ciphertext, expected_ciphertext, ciphertext_len), 0);
1230
+ for (int i = 0; i < MLKEM_SHARED_SECRET_BYTES; i++) {
1231
+ out_shared_secret[i] =
1232
+ constant_time_select_8(mask, key_and_randomness[i], failure_key[i]);
1233
+ }
1234
+ }
1235
+
1236
+ template <int RANK>
1237
+ void mlkem_decap(uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1238
+ const uint8_t *ciphertext, const private_key<RANK> *priv) {
1239
+ fips::ensure_decap_self_test();
1240
+ mlkem_decap_no_self_test(out_shared_secret, ciphertext, priv);
1241
+ }
1242
+
1243
+ // mlkem_parse_public_key_with_trailing_data parses `in` into `pub` but leaves
1244
+ // trailing data in `in` for the caller.
1245
+ template <int RANK>
1246
+ int mlkem_parse_public_key_with_trailing_data(public_key<RANK> *pub, CBS *in) {
1247
+ CBS orig_in = *in;
1248
+ CBS t_bytes;
1249
+ if (!CBS_get_bytes(in, &t_bytes, encoded_vector_size(RANK)) ||
1250
+ !vector_decode_12(&pub->t, CBS_data(&t_bytes)) ||
1251
+ !CBS_copy_bytes(in, pub->rho, sizeof(pub->rho))) {
1252
+ return 0;
1253
+ }
1254
+ matrix_expand(&pub->m, pub->rho);
1255
+ size_t pub_key_len = CBS_len(&orig_in) - CBS_len(in);
1256
+ assert(pub_key_len == encoded_public_key_size(RANK));
1257
+ hash_h(pub->public_key_hash, CBS_data(&orig_in), pub_key_len);
1258
+ return 1;
1259
+ }
1260
+
1261
+ template <int RANK>
1262
+ int mlkem_parse_public_key(public_key<RANK> *pub, CBS *in) {
1263
+ if (!mlkem_parse_public_key_with_trailing_data(pub, in) || //
1264
+ CBS_len(in) != 0) {
1265
+ return 0;
1266
+ }
1267
+ return 1;
1268
+ }
1269
+
1270
+ template <int RANK>
1271
+ int mlkem_parse_private_key(private_key<RANK> *priv, CBS *in) {
1272
+ CBS s_bytes, public_key_hash;
1273
+ if (!CBS_get_bytes(in, &s_bytes, encoded_vector_size(RANK)) ||
1274
+ !vector_decode_12(&priv->s, CBS_data(&s_bytes)) ||
1275
+ !mlkem_parse_public_key_with_trailing_data(&priv->pub, in) ||
1276
+ // We compute the public key hash ourselves, but check it matched.
1277
+ !CBS_get_bytes(in, &public_key_hash, sizeof(priv->pub.public_key_hash)) ||
1278
+ !CBS_mem_equal(&public_key_hash, priv->pub.public_key_hash,
1279
+ sizeof(priv->pub.public_key_hash)) ||
1280
+ !CBS_copy_bytes(in, priv->fo_failure_secret,
1281
+ sizeof(priv->fo_failure_secret)) ||
1282
+ CBS_len(in) != 0) {
1283
+ return 0;
1284
+ }
1285
+ return 1;
1286
+ }
1287
+
1288
+ template <int RANK>
1289
+ int mlkem_marshal_private_key(CBB *out, const private_key<RANK> *priv) {
1290
+ uint8_t *s_output;
1291
+ if (!CBB_add_space(out, &s_output, encoded_vector_size(RANK))) {
1292
+ return 0;
1293
+ }
1294
+ vector_encode<kLog2Prime>(s_output, &priv->s);
1295
+ if (!bcm_success(mlkem_marshal_public_key(out, &priv->pub)) ||
1296
+ !CBB_add_bytes(out, priv->pub.public_key_hash,
1297
+ sizeof(priv->pub.public_key_hash)) ||
1298
+ !CBB_add_bytes(out, priv->fo_failure_secret,
1299
+ sizeof(priv->fo_failure_secret))) {
1300
+ return 0;
1301
+ }
1302
+ return 1;
1303
+ }
1304
+
1305
+ static_assert(sizeof(MLKEM768_public_key) == sizeof(public_key<RANK768>));
1306
+ static_assert(alignof(MLKEM768_public_key) == alignof(public_key<RANK768>));
1307
+
1308
+ const public_key<RANK768> *public_key_768_from_external(
1309
+ const MLKEM768_public_key *external) {
1310
+ return reinterpret_cast<const public_key<RANK768> *>(external);
1311
+ }
1312
+ public_key<RANK768> *public_key_768_from_external(
1313
+ MLKEM768_public_key *external) {
1314
+ return reinterpret_cast<public_key<RANK768> *>(external);
1315
+ }
1316
+ const MLKEM768_public_key *public_key_768_to_external(
1317
+ const public_key<RANK768> *public_key) {
1318
+ return reinterpret_cast<const MLKEM768_public_key *>(public_key);
1319
+ }
1320
+
1321
+ static_assert(sizeof(MLKEM1024_public_key) == sizeof(public_key<RANK1024>));
1322
+ static_assert(alignof(MLKEM1024_public_key) == alignof(public_key<RANK1024>));
1323
+
1324
+ const public_key<RANK1024> *public_key_1024_from_external(
1325
+ const MLKEM1024_public_key *external) {
1326
+ return reinterpret_cast<const public_key<RANK1024> *>(external);
1327
+ }
1328
+ public_key<RANK1024> *public_key_1024_from_external(
1329
+ MLKEM1024_public_key *external) {
1330
+ return reinterpret_cast<public_key<RANK1024> *>(external);
1331
+ }
1332
+
1333
+ const MLKEM1024_public_key *public_key_1024_to_external(
1334
+ const public_key<RANK1024> *public_key) {
1335
+ return reinterpret_cast<const MLKEM1024_public_key *>(public_key);
1336
+ }
1337
+
1338
+ static_assert(sizeof(MLKEM768_private_key) >= sizeof(private_key<RANK768>));
1339
+ static_assert(alignof(MLKEM768_private_key) >= alignof(private_key<RANK768>));
1340
+
1341
+ const private_key<RANK768> *private_key_768_from_external(
1342
+ const MLKEM768_private_key *external) {
1343
+ return reinterpret_cast<const private_key<RANK768> *>(external);
1344
+ }
1345
+ private_key<RANK768> *private_key_768_from_external(
1346
+ MLKEM768_private_key *external) {
1347
+ return reinterpret_cast<private_key<RANK768> *>(external);
1348
+ }
1349
+
1350
+ static_assert(sizeof(MLKEM1024_private_key) >= sizeof(private_key<RANK1024>));
1351
+ static_assert(alignof(MLKEM1024_private_key) >= alignof(private_key<RANK1024>));
1352
+
1353
+ const private_key<RANK1024> *private_key_1024_from_external(
1354
+ const MLKEM1024_private_key *external) {
1355
+ return reinterpret_cast<const private_key<RANK1024> *>(external);
1356
+ }
1357
+ private_key<RANK1024> *private_key_1024_from_external(
1358
+ MLKEM1024_private_key *external) {
1359
+ return reinterpret_cast<private_key<RANK1024> *>(external);
1360
+ }
1361
+
1362
+ // See section 6.2.
1363
+ template <int RANK>
1364
+ void mlkem_encap_external_entropy_no_self_test(
1365
+ uint8_t *out_ciphertext,
1366
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1367
+ const mlkem::public_key<RANK> *pub,
1368
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY]) {
1369
+ uint8_t input[64];
1370
+ OPENSSL_memcpy(input, entropy, BCM_MLKEM_ENCAP_ENTROPY);
1371
+ OPENSSL_memcpy(input + BCM_MLKEM_ENCAP_ENTROPY, pub->public_key_hash,
1372
+ sizeof(input) - BCM_MLKEM_ENCAP_ENTROPY);
1373
+ uint8_t key_and_randomness[64];
1374
+ mlkem::hash_g(key_and_randomness, input, sizeof(input));
1375
+ encrypt_cpa(out_ciphertext, pub, entropy, key_and_randomness + 32);
1376
+ // The ciphertext is public.
1377
+ CONSTTIME_DECLASSIFY(out_ciphertext, mlkem::ciphertext_size(RANK));
1378
+ static_assert(MLKEM_SHARED_SECRET_BYTES == 32);
1379
+ memcpy(out_shared_secret, key_and_randomness, 32);
1380
+ }
1381
+
1382
+ template <int RANK>
1383
+ void mlkem_encap_external_entropy(
1384
+ uint8_t *out_ciphertext,
1385
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1386
+ const mlkem::public_key<RANK> *pub,
1387
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY]) {
1388
+ fips::ensure_encap_self_test();
1389
+ mlkem_encap_external_entropy_no_self_test(out_ciphertext, out_shared_secret,
1390
+ pub, entropy);
1391
+ }
1392
+
1393
+ namespace fips {
1394
+
1395
+ #include "fips_known_values.inc"
1396
+
1397
+ inline int keygen_self_test() {
1398
+ uint8_t pub_key[MLKEM768_PUBLIC_KEY_BYTES];
1399
+ private_key<RANK768> priv;
1400
+ static_assert(sizeof(kTestEntropy) >= MLKEM_SEED_BYTES);
1401
+ mlkem_generate_key_external_seed_no_self_test(pub_key, &priv, kTestEntropy);
1402
+ CBB cbb;
1403
+ constexpr size_t kMarshaledPrivateKeySize = 2400;
1404
+ uint8_t priv_bytes[kMarshaledPrivateKeySize];
1405
+ CBB_init_fixed(&cbb, priv_bytes, sizeof(priv_bytes));
1406
+ if (!mlkem_marshal_private_key(&cbb, &priv) ||
1407
+ !BORINGSSL_check_test(kExpectedPrivateKeyBytes, priv_bytes,
1408
+ "ML-KEM keygen private key") ||
1409
+ !BORINGSSL_check_test(kExpectedPublicKeyBytes, pub_key,
1410
+ "ML-KEM keygen public key")) {
1411
+ return 0;
1412
+ }
1413
+ return 1;
1414
+ }
1415
+
1416
+ inline int encap_self_test() {
1417
+ CBS cbs;
1418
+ CBS_init(&cbs, kExpectedPublicKeyBytes, sizeof(kExpectedPublicKeyBytes));
1419
+ public_key<RANK768> pub;
1420
+ if (!mlkem_parse_public_key(&pub, &cbs)) {
1421
+ return 0;
1422
+ }
1423
+ uint8_t ciphertext[MLKEM768_CIPHERTEXT_BYTES];
1424
+ uint8_t shared_secret[MLKEM_SHARED_SECRET_BYTES];
1425
+ static_assert(sizeof(kTestEntropy) >= BCM_MLKEM_ENCAP_ENTROPY);
1426
+ mlkem_encap_external_entropy_no_self_test(ciphertext, shared_secret, &pub,
1427
+ kTestEntropy);
1428
+ if (!BORINGSSL_check_test(ciphertext, kExpectedCiphertext,
1429
+ "ML-KEM encap ciphertext") ||
1430
+ !BORINGSSL_check_test(kExpectedSharedSecret, shared_secret,
1431
+ "ML-KEM encap shared secret")) {
1432
+ return 0;
1433
+ }
1434
+ return 1;
1435
+ }
1436
+
1437
+ inline int decap_self_test() {
1438
+ CBS cbs;
1439
+ CBS_init(&cbs, kExpectedPrivateKeyBytes, sizeof(kExpectedPrivateKeyBytes));
1440
+ private_key<RANK768> priv;
1441
+ if (!mlkem_parse_private_key(&priv, &cbs)) {
1442
+ return 0;
1443
+ }
1444
+ uint8_t shared_secret[MLKEM_SHARED_SECRET_BYTES];
1445
+ mlkem_decap_no_self_test(shared_secret, kExpectedCiphertext, &priv);
1446
+ if (!BORINGSSL_check_test(kExpectedSharedSecret, shared_secret,
1447
+ "ML-KEM decap shared secret")) {
1448
+ return 0;
1449
+ }
1450
+
1451
+ uint8_t implicit_rejection_shared_secret[MLKEM_SHARED_SECRET_BYTES];
1452
+ static_assert(sizeof(kExpectedPrivateKeyBytes) >=
1453
+ sizeof(kExpectedCiphertext));
1454
+ mlkem_decap_no_self_test(implicit_rejection_shared_secret,
1455
+ kExpectedPrivateKeyBytes, &priv);
1456
+ if (!BORINGSSL_check_test(kExpectedImplicitRejectionSharedSecret,
1457
+ implicit_rejection_shared_secret,
1458
+ "ML-KEM decap implicit rejection shared secret")) {
1459
+ return 0;
1460
+ }
1461
+ return 1;
1462
+ }
1463
+
1464
+ #if defined(BORINGSSL_FIPS)
1465
+
1466
+ void ensure_keygen_self_test() {
1467
+ CRYPTO_once(g_mlkem_keygen_self_test_once_bss_get(), []() {
1468
+ if (!keygen_self_test()) {
1469
+ BORINGSSL_FIPS_abort();
1470
+ }
1471
+ });
1472
+ }
1473
+
1474
+ void ensure_encap_self_test() {
1475
+ CRYPTO_once(g_mlkem_encap_self_test_once_bss_get(), []() {
1476
+ if (!encap_self_test()) {
1477
+ BORINGSSL_FIPS_abort();
1478
+ }
1479
+ });
1480
+ }
1481
+
1482
+ void ensure_decap_self_test() {
1483
+ CRYPTO_once(g_mlkem_decap_self_test_once_bss_get(), []() {
1484
+ if (!decap_self_test()) {
1485
+ BORINGSSL_FIPS_abort();
1486
+ }
1487
+ });
1488
+ }
1489
+
1490
+ #else
1491
+
1492
+ void ensure_keygen_self_test() {}
1493
+ void ensure_encap_self_test() {}
1494
+ void ensure_decap_self_test() {}
1495
+
1496
+ #endif
1497
+ } // namespace fips
1498
+
1499
+ } // namespace
1500
+ } // namespace mlkem
1501
+
1502
+ bcm_status bssl::BCM_mlkem768_check_fips(
1503
+ const MLKEM768_private_key *private_key) {
1504
+ const mlkem::private_key<RANK768> *priv =
1505
+ mlkem::private_key_768_from_external(private_key);
1506
+
1507
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY] = {1, 2, 3, 4};
1508
+ uint8_t ciphertext[MLKEM768_CIPHERTEXT_BYTES];
1509
+ uint8_t shared_secret[MLKEM_SHARED_SECRET_BYTES];
1510
+ mlkem_encap_external_entropy_no_self_test(ciphertext, shared_secret,
1511
+ &priv->pub, entropy);
1512
+
1513
+ if (boringssl_fips_break_test("MLKEM_PWCT")) {
1514
+ shared_secret[0] ^= 1;
1515
+ }
1516
+
1517
+ uint8_t shared_secret2[MLKEM_SHARED_SECRET_BYTES];
1518
+ mlkem::mlkem_decap_no_self_test(shared_secret2, ciphertext, priv);
1519
+ if (CRYPTO_memcmp(shared_secret, shared_secret2, sizeof(shared_secret)) !=
1520
+ 0) {
1521
+ return bcm_status::failure;
1522
+ }
1523
+ return bcm_status::approved;
1524
+ }
1525
+
1526
+ bcm_status bssl::BCM_mlkem768_generate_key_fips(
1527
+ uint8_t out_encoded_public_key[MLKEM768_PUBLIC_KEY_BYTES],
1528
+ uint8_t optional_out_seed[MLKEM_SEED_BYTES],
1529
+ MLKEM768_private_key *out_private_key) {
1530
+ if (out_encoded_public_key == nullptr || out_private_key == nullptr) {
1531
+ return bcm_status::failure;
1532
+ }
1533
+ BCM_mlkem768_generate_key(out_encoded_public_key, optional_out_seed,
1534
+ out_private_key);
1535
+ return BCM_mlkem768_check_fips(out_private_key);
1536
+ }
1537
+
1538
+ bcm_infallible bssl::BCM_mlkem768_generate_key(
1539
+ uint8_t out_encoded_public_key[MLKEM768_PUBLIC_KEY_BYTES],
1540
+ uint8_t optional_out_seed[MLKEM_SEED_BYTES],
1541
+ MLKEM768_private_key *out_private_key) {
1542
+ uint8_t seed[MLKEM_SEED_BYTES];
1543
+ BCM_rand_bytes(seed, sizeof(seed));
1544
+ CONSTTIME_SECRET(seed, sizeof(seed));
1545
+ if (optional_out_seed) {
1546
+ OPENSSL_memcpy(optional_out_seed, seed, sizeof(seed));
1547
+ }
1548
+ BCM_mlkem768_generate_key_external_seed(out_encoded_public_key,
1549
+ out_private_key, seed);
1550
+ return bcm_infallible::not_approved;
1551
+ }
1552
+
1553
+ bcm_status bssl::BCM_mlkem768_private_key_from_seed(
1554
+ MLKEM768_private_key *out_private_key, const uint8_t *seed,
1555
+ size_t seed_len) {
1556
+ if (seed_len != MLKEM_SEED_BYTES) {
1557
+ return bcm_status::failure;
1558
+ }
1559
+
1560
+ uint8_t public_key_bytes[MLKEM768_PUBLIC_KEY_BYTES];
1561
+ BCM_mlkem768_generate_key_external_seed(public_key_bytes, out_private_key,
1562
+ seed);
1563
+ return bcm_status::not_approved;
1564
+ }
1565
+
1566
+ bcm_status bssl::BCM_mlkem1024_check_fips(
1567
+ const MLKEM1024_private_key *private_key) {
1568
+ const mlkem::private_key<RANK1024> *priv =
1569
+ mlkem::private_key_1024_from_external(private_key);
1570
+
1571
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY] = {1, 2, 3, 4};
1572
+ uint8_t ciphertext[MLKEM1024_CIPHERTEXT_BYTES];
1573
+ uint8_t shared_secret[MLKEM_SHARED_SECRET_BYTES];
1574
+ mlkem_encap_external_entropy_no_self_test(ciphertext, shared_secret,
1575
+ &priv->pub, entropy);
1576
+
1577
+ if (boringssl_fips_break_test("MLKEM_PWCT")) {
1578
+ shared_secret[0] ^= 1;
1579
+ }
1580
+
1581
+ uint8_t shared_secret2[MLKEM_SHARED_SECRET_BYTES];
1582
+ mlkem::mlkem_decap_no_self_test(shared_secret2, ciphertext, priv);
1583
+ if (CRYPTO_memcmp(shared_secret, shared_secret2, sizeof(shared_secret)) !=
1584
+ 0) {
1585
+ return bcm_status::failure;
1586
+ }
1587
+ return bcm_status::approved;
1588
+ }
1589
+
1590
+ bcm_status bssl::BCM_mlkem1024_generate_key_fips(
1591
+ uint8_t out_encoded_public_key[MLKEM1024_PUBLIC_KEY_BYTES],
1592
+ uint8_t optional_out_seed[MLKEM_SEED_BYTES],
1593
+ MLKEM1024_private_key *out_private_key) {
1594
+ if (out_encoded_public_key == nullptr || out_private_key == nullptr) {
1595
+ return bcm_status::failure;
1596
+ }
1597
+ BCM_mlkem1024_generate_key(out_encoded_public_key, optional_out_seed,
1598
+ out_private_key);
1599
+ return BCM_mlkem1024_check_fips(out_private_key);
1600
+ }
1601
+
1602
+ bcm_infallible bssl::BCM_mlkem1024_generate_key(
1603
+ uint8_t out_encoded_public_key[MLKEM1024_PUBLIC_KEY_BYTES],
1604
+ uint8_t optional_out_seed[MLKEM_SEED_BYTES],
1605
+ MLKEM1024_private_key *out_private_key) {
1606
+ uint8_t seed[MLKEM_SEED_BYTES];
1607
+ BCM_rand_bytes(seed, sizeof(seed));
1608
+ CONSTTIME_SECRET(seed, sizeof(seed));
1609
+ if (optional_out_seed) {
1610
+ OPENSSL_memcpy(optional_out_seed, seed, sizeof(seed));
1611
+ }
1612
+ BCM_mlkem1024_generate_key_external_seed(out_encoded_public_key,
1613
+ out_private_key, seed);
1614
+ return bcm_infallible::not_approved;
1615
+ }
1616
+
1617
+ bcm_status bssl::BCM_mlkem1024_private_key_from_seed(
1618
+ MLKEM1024_private_key *out_private_key, const uint8_t *seed,
1619
+ size_t seed_len) {
1620
+ if (seed_len != MLKEM_SEED_BYTES) {
1621
+ return bcm_status::failure;
1622
+ }
1623
+ uint8_t public_key_bytes[MLKEM1024_PUBLIC_KEY_BYTES];
1624
+ BCM_mlkem1024_generate_key_external_seed(public_key_bytes, out_private_key,
1625
+ seed);
1626
+ return bcm_status::not_approved;
1627
+ }
1628
+
1629
+ bcm_infallible bssl::BCM_mlkem768_generate_key_external_seed(
1630
+ uint8_t out_encoded_public_key[MLKEM768_PUBLIC_KEY_BYTES],
1631
+ MLKEM768_private_key *out_private_key,
1632
+ const uint8_t seed[MLKEM_SEED_BYTES]) {
1633
+ mlkem::private_key<RANK768> *priv =
1634
+ mlkem::private_key_768_from_external(out_private_key);
1635
+ mlkem_generate_key_external_seed(out_encoded_public_key, priv, seed);
1636
+ return bcm_infallible::approved;
1637
+ }
1638
+
1639
+ bcm_infallible bssl::BCM_mlkem1024_generate_key_external_seed(
1640
+ uint8_t out_encoded_public_key[MLKEM1024_PUBLIC_KEY_BYTES],
1641
+ MLKEM1024_private_key *out_private_key,
1642
+ const uint8_t seed[MLKEM_SEED_BYTES]) {
1643
+ mlkem::private_key<RANK1024> *priv =
1644
+ mlkem::private_key_1024_from_external(out_private_key);
1645
+ mlkem_generate_key_external_seed(out_encoded_public_key, priv, seed);
1646
+ return bcm_infallible::approved;
1647
+ }
1648
+
1649
+ bcm_infallible bssl::BCM_mlkem768_public_from_private(
1650
+ MLKEM768_public_key *out_public_key,
1651
+ const MLKEM768_private_key *private_key) {
1652
+ mlkem::public_key<RANK768> *const pub =
1653
+ mlkem::public_key_768_from_external(out_public_key);
1654
+ const mlkem::private_key<RANK768> *const priv =
1655
+ mlkem::private_key_768_from_external(private_key);
1656
+ *pub = priv->pub;
1657
+ return bcm_infallible::approved;
1658
+ }
1659
+
1660
+ bcm_infallible bssl::BCM_mlkem1024_public_from_private(
1661
+ MLKEM1024_public_key *out_public_key,
1662
+ const MLKEM1024_private_key *private_key) {
1663
+ mlkem::public_key<RANK1024> *const pub =
1664
+ mlkem::public_key_1024_from_external(out_public_key);
1665
+ const mlkem::private_key<RANK1024> *const priv =
1666
+ mlkem::private_key_1024_from_external(private_key);
1667
+ *pub = priv->pub;
1668
+ return bcm_infallible::approved;
1669
+ }
1670
+
1671
+ const MLKEM768_public_key *bssl::BCM_mlkem768_public_of_private(
1672
+ const MLKEM768_private_key *private_key) {
1673
+ const mlkem::private_key<RANK768> *const priv =
1674
+ mlkem::private_key_768_from_external(private_key);
1675
+ return mlkem::public_key_768_to_external(&priv->pub);
1676
+ }
1677
+
1678
+ const MLKEM1024_public_key *bssl::BCM_mlkem1024_public_of_private(
1679
+ const MLKEM1024_private_key *private_key) {
1680
+ const mlkem::private_key<RANK1024> *const priv =
1681
+ mlkem::private_key_1024_from_external(private_key);
1682
+ return mlkem::public_key_1024_to_external(&priv->pub);
1683
+ }
1684
+
1685
+ // Calls `MLKEM768_encap_external_entropy` with random bytes from
1686
+ // `BCM_rand_bytes`
1687
+ bcm_infallible bssl::BCM_mlkem768_encap(
1688
+ uint8_t out_ciphertext[MLKEM768_CIPHERTEXT_BYTES],
1689
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1690
+ const MLKEM768_public_key *public_key) {
1691
+ uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY];
1692
+ BCM_rand_bytes(entropy, BCM_MLKEM_ENCAP_ENTROPY);
1693
+ CONSTTIME_SECRET(entropy, BCM_MLKEM_ENCAP_ENTROPY);
1694
+ BCM_mlkem768_encap_external_entropy(out_ciphertext, out_shared_secret,
1695
+ public_key, entropy);
1696
+ return bcm_infallible::approved;
1697
+ }
1698
+
1699
+ bcm_infallible bssl::BCM_mlkem1024_encap(
1700
+ uint8_t out_ciphertext[MLKEM1024_CIPHERTEXT_BYTES],
1701
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1702
+ const MLKEM1024_public_key *public_key) {
1703
+ uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY];
1704
+ BCM_rand_bytes(entropy, BCM_MLKEM_ENCAP_ENTROPY);
1705
+ CONSTTIME_SECRET(entropy, BCM_MLKEM_ENCAP_ENTROPY);
1706
+ BCM_mlkem1024_encap_external_entropy(out_ciphertext, out_shared_secret,
1707
+ public_key, entropy);
1708
+ return bcm_infallible::approved;
1709
+ }
1710
+
1711
+ bcm_infallible bssl::BCM_mlkem768_encap_external_entropy(
1712
+ uint8_t out_ciphertext[MLKEM768_CIPHERTEXT_BYTES],
1713
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1714
+ const MLKEM768_public_key *public_key,
1715
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY]) {
1716
+ const mlkem::public_key<RANK768> *pub =
1717
+ mlkem::public_key_768_from_external(public_key);
1718
+ mlkem_encap_external_entropy(out_ciphertext, out_shared_secret, pub, entropy);
1719
+ return bcm_infallible::approved;
1720
+ }
1721
+
1722
+ bcm_infallible bssl::BCM_mlkem1024_encap_external_entropy(
1723
+ uint8_t out_ciphertext[MLKEM1024_CIPHERTEXT_BYTES],
1724
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1725
+ const MLKEM1024_public_key *public_key,
1726
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY]) {
1727
+ const mlkem::public_key<RANK1024> *pub =
1728
+ mlkem::public_key_1024_from_external(public_key);
1729
+ mlkem_encap_external_entropy(out_ciphertext, out_shared_secret, pub, entropy);
1730
+ return bcm_infallible::approved;
1731
+ }
1732
+
1733
+ bcm_status bssl::BCM_mlkem768_decap(
1734
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1735
+ const uint8_t *ciphertext, size_t ciphertext_len,
1736
+ const MLKEM768_private_key *private_key) {
1737
+ if (ciphertext_len != MLKEM768_CIPHERTEXT_BYTES) {
1738
+ BCM_rand_bytes(out_shared_secret, MLKEM_SHARED_SECRET_BYTES);
1739
+ return bcm_status::failure;
1740
+ }
1741
+ const mlkem::private_key<RANK768> *priv =
1742
+ mlkem::private_key_768_from_external(private_key);
1743
+ mlkem_decap(out_shared_secret, ciphertext, priv);
1744
+ return bcm_status::approved;
1745
+ }
1746
+
1747
+ bcm_status bssl::BCM_mlkem1024_decap(
1748
+ uint8_t out_shared_secret[MLKEM_SHARED_SECRET_BYTES],
1749
+ const uint8_t *ciphertext, size_t ciphertext_len,
1750
+ const MLKEM1024_private_key *private_key) {
1751
+ if (ciphertext_len != MLKEM1024_CIPHERTEXT_BYTES) {
1752
+ BCM_rand_bytes(out_shared_secret, MLKEM_SHARED_SECRET_BYTES);
1753
+ return bcm_status::failure;
1754
+ }
1755
+ const mlkem::private_key<RANK1024> *priv =
1756
+ mlkem::private_key_1024_from_external(private_key);
1757
+ mlkem_decap(out_shared_secret, ciphertext, priv);
1758
+ return bcm_status::approved;
1759
+ }
1760
+
1761
+ bcm_status bssl::BCM_mlkem768_marshal_public_key(
1762
+ CBB *out, const MLKEM768_public_key *public_key) {
1763
+ return mlkem_marshal_public_key(
1764
+ out, mlkem::public_key_768_from_external(public_key));
1765
+ }
1766
+
1767
+ bcm_status bssl::BCM_mlkem1024_marshal_public_key(
1768
+ CBB *out, const MLKEM1024_public_key *public_key) {
1769
+ return mlkem_marshal_public_key(
1770
+ out, mlkem::public_key_1024_from_external(public_key));
1771
+ }
1772
+
1773
+ int bssl::BCM_mlkem768_public_keys_equal(const MLKEM768_public_key *a,
1774
+ const MLKEM768_public_key *b) {
1775
+ const auto *pub_a = mlkem::public_key_768_from_external(a);
1776
+ const auto *pub_b = mlkem::public_key_768_from_external(b);
1777
+ if (mlkem_public_keys_equal(pub_a, pub_b)) {
1778
+ return 1;
1779
+ }
1780
+ return 0;
1781
+ }
1782
+
1783
+ int bssl::BCM_mlkem1024_public_keys_equal(const MLKEM1024_public_key *a,
1784
+ const MLKEM1024_public_key *b) {
1785
+ const auto *pub_a = mlkem::public_key_1024_from_external(a);
1786
+ const auto *pub_b = mlkem::public_key_1024_from_external(b);
1787
+ if (mlkem_public_keys_equal(pub_a, pub_b)) {
1788
+ return 1;
1789
+ }
1790
+ return 0;
1791
+ }
1792
+
1793
+ bcm_status bssl::BCM_mlkem768_parse_public_key(MLKEM768_public_key *public_key,
1794
+ CBS *in) {
1795
+ mlkem::public_key<RANK768> *pub =
1796
+ mlkem::public_key_768_from_external(public_key);
1797
+ if (!mlkem_parse_public_key(pub, in)) {
1798
+ return bcm_status::failure;
1799
+ }
1800
+ return bcm_status::approved;
1801
+ }
1802
+
1803
+ bcm_status bssl::BCM_mlkem1024_parse_public_key(
1804
+ MLKEM1024_public_key *public_key, CBS *in) {
1805
+ mlkem::public_key<RANK1024> *pub =
1806
+ mlkem::public_key_1024_from_external(public_key);
1807
+ if (!mlkem_parse_public_key(pub, in)) {
1808
+ return bcm_status::failure;
1809
+ }
1810
+ return bcm_status::approved;
1811
+ }
1812
+
1813
+ bcm_status bssl::BCM_mlkem768_marshal_private_key(
1814
+ CBB *out, const MLKEM768_private_key *private_key) {
1815
+ const mlkem::private_key<RANK768> *const priv =
1816
+ mlkem::private_key_768_from_external(private_key);
1817
+ if (!mlkem_marshal_private_key(out, priv)) {
1818
+ return bcm_status::failure;
1819
+ }
1820
+ return bcm_status::approved;
1821
+ }
1822
+
1823
+ bcm_status bssl::BCM_mlkem1024_marshal_private_key(
1824
+ CBB *out, const MLKEM1024_private_key *private_key) {
1825
+ const mlkem::private_key<RANK1024> *const priv =
1826
+ mlkem::private_key_1024_from_external(private_key);
1827
+ if (!mlkem_marshal_private_key(out, priv)) {
1828
+ return bcm_status::failure;
1829
+ }
1830
+ return bcm_status::approved;
1831
+ }
1832
+
1833
+ bcm_status bssl::BCM_mlkem768_parse_private_key(
1834
+ MLKEM768_private_key *out_private_key, CBS *in) {
1835
+ mlkem::private_key<RANK768> *const priv =
1836
+ mlkem::private_key_768_from_external(out_private_key);
1837
+ if (!mlkem_parse_private_key(priv, in)) {
1838
+ return bcm_status::failure;
1839
+ }
1840
+ return bcm_status::approved;
1841
+ }
1842
+
1843
+ bcm_status bssl::BCM_mlkem1024_parse_private_key(
1844
+ MLKEM1024_private_key *out_private_key, CBS *in) {
1845
+ mlkem::private_key<RANK1024> *const priv =
1846
+ mlkem::private_key_1024_from_external(out_private_key);
1847
+ if (!mlkem_parse_private_key(priv, in)) {
1848
+ return bcm_status::failure;
1849
+ }
1850
+ return bcm_status::approved;
1851
+ }
1852
+
1853
+ int bssl::boringssl_self_test_mlkem() {
1854
+ return mlkem::fips::keygen_self_test() && mlkem::fips::encap_self_test() &&
1855
+ mlkem::fips::decap_self_test();
1856
+ }