visaljs 0.0.2 → 0.0.3

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