visaljs 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1008) hide show
  1. package/README.md +17 -1
  2. package/cli.js +565 -75
  3. package/node/include/js_node.h +28 -5
  4. package/node/include/js_uv.h +36 -0
  5. package/node/prelude/crypto.js +7 -10
  6. package/node/prelude/dns.js +99 -0
  7. package/node/prelude/dns_promises.js +10 -0
  8. package/node/prelude/http.js +1039 -195
  9. package/node/prelude/internal/crypto/asym.js +39 -12
  10. package/node/prelude/internal/crypto/dh_groups.js +12 -0
  11. package/node/prelude/internal/crypto/diffiehellman.js +354 -0
  12. package/node/prelude/internal/crypto/hash.js +1 -1
  13. package/node/prelude/internal/crypto/key_type.js +3 -0
  14. package/node/prelude/internal/crypto/keys.js +39 -9
  15. package/node/prelude/internal/http_agent.js +249 -0
  16. package/node/prelude/internal/net.js +33 -0
  17. package/node/prelude/internal/socketaddress.js +249 -0
  18. package/node/prelude/internal/tls/common.js +306 -0
  19. package/node/prelude/internal/tls/wrap.js +1217 -0
  20. package/node/prelude/internal/tls/x509.js +394 -0
  21. package/node/prelude/net.js +1083 -50
  22. package/node/prelude/stream.js +6 -0
  23. package/node/prelude/tls.js +141 -0
  24. package/node/prelude/util.js +5 -2
  25. package/node/prelude/util_types.js +85 -0
  26. package/node/src/host_http.c +268 -270
  27. package/node/src/host_loop.c +84 -0
  28. package/node/src/host_net.c +495 -0
  29. package/node/src/host_sys.c +16 -0
  30. package/package.json +1 -1
  31. package/runtime/include/js_builtins.h +16 -0
  32. package/runtime/include/js_console.h +2 -0
  33. package/runtime/include/js_core.def +23 -0
  34. package/runtime/include/js_crypto.h +23 -0
  35. package/runtime/include/js_generator.h +2 -3
  36. package/runtime/include/js_promise.h +0 -2
  37. package/runtime/src/async_iter.c +4 -1
  38. package/runtime/src/boringssl_support.cc +34 -0
  39. package/runtime/src/builtin_table.c +8 -0
  40. package/runtime/src/components.c +10 -0
  41. package/runtime/src/console.c +6 -18
  42. package/runtime/src/core_all.c +1 -0
  43. package/runtime/src/crypto_asym.c +450 -241
  44. package/runtime/src/crypto_bn.c +91 -0
  45. package/runtime/src/crypto_cipher.c +153 -75
  46. package/runtime/src/crypto_hash.c +68 -53
  47. package/runtime/src/crypto_internal.h +55 -26
  48. package/runtime/src/crypto_pkey.c +198 -61
  49. package/runtime/src/crypto_subtle.c +42 -16
  50. package/runtime/src/crypto_tls.c +678 -0
  51. package/runtime/src/generator.c +8 -1
  52. package/runtime/src/global.c +2 -4
  53. package/runtime/src/internal.h +0 -1
  54. package/runtime/src/jobs.c +2 -1
  55. package/runtime/src/promise.c +4 -1
  56. package/runtime/src/tls_roots.gen.h +3215 -0
  57. package/runtime/src/util_types.c +52 -0
  58. package/runtime/src/weak.c +2 -1
  59. package/runtime/third_party/boringssl/LICENSE +238 -0
  60. package/runtime/third_party/boringssl/README.md +46 -0
  61. package/runtime/third_party/boringssl/VERSION +1 -0
  62. package/runtime/third_party/boringssl/crypto/aes/aes.cc +44 -0
  63. package/runtime/third_party/boringssl/crypto/armv8_feature_parsing.h +67 -0
  64. package/runtime/third_party/boringssl/crypto/asn1/a_bitstr.cc +297 -0
  65. package/runtime/third_party/boringssl/crypto/asn1/a_bool.cc +50 -0
  66. package/runtime/third_party/boringssl/crypto/asn1/a_d2i_fp.cc +47 -0
  67. package/runtime/third_party/boringssl/crypto/asn1/a_dup.cc +42 -0
  68. package/runtime/third_party/boringssl/crypto/asn1/a_gentm.cc +130 -0
  69. package/runtime/third_party/boringssl/crypto/asn1/a_i2d_fp.cc +44 -0
  70. package/runtime/third_party/boringssl/crypto/asn1/a_int.cc +467 -0
  71. package/runtime/third_party/boringssl/crypto/asn1/a_mbstr.cc +242 -0
  72. package/runtime/third_party/boringssl/crypto/asn1/a_object.cc +191 -0
  73. package/runtime/third_party/boringssl/crypto/asn1/a_octet.cc +32 -0
  74. package/runtime/third_party/boringssl/crypto/asn1/a_strex.cc +411 -0
  75. package/runtime/third_party/boringssl/crypto/asn1/a_strnid.cc +208 -0
  76. package/runtime/third_party/boringssl/crypto/asn1/a_time.cc +248 -0
  77. package/runtime/third_party/boringssl/crypto/asn1/a_type.cc +467 -0
  78. package/runtime/third_party/boringssl/crypto/asn1/a_utctm.cc +128 -0
  79. package/runtime/third_party/boringssl/crypto/asn1/asn1_lib.cc +453 -0
  80. package/runtime/third_party/boringssl/crypto/asn1/asn1_par.cc +61 -0
  81. package/runtime/third_party/boringssl/crypto/asn1/asn_pack.cc +56 -0
  82. package/runtime/third_party/boringssl/crypto/asn1/f_int.cc +63 -0
  83. package/runtime/third_party/boringssl/crypto/asn1/f_string.cc +52 -0
  84. package/runtime/third_party/boringssl/crypto/asn1/internal.h +430 -0
  85. package/runtime/third_party/boringssl/crypto/asn1/posix_time.cc +244 -0
  86. package/runtime/third_party/boringssl/crypto/asn1/tasn_dec.cc +611 -0
  87. package/runtime/third_party/boringssl/crypto/asn1/tasn_enc.cc +348 -0
  88. package/runtime/third_party/boringssl/crypto/asn1/tasn_fre.cc +163 -0
  89. package/runtime/third_party/boringssl/crypto/asn1/tasn_new.cc +274 -0
  90. package/runtime/third_party/boringssl/crypto/asn1/tasn_typ.cc +92 -0
  91. package/runtime/third_party/boringssl/crypto/asn1/tasn_utl.cc +218 -0
  92. package/runtime/third_party/boringssl/crypto/base64/base64.cc +433 -0
  93. package/runtime/third_party/boringssl/crypto/bcm_support.h +62 -0
  94. package/runtime/third_party/boringssl/crypto/bio/bio.cc +715 -0
  95. package/runtime/third_party/boringssl/crypto/bio/bio_mem.cc +260 -0
  96. package/runtime/third_party/boringssl/crypto/bio/connect.cc +463 -0
  97. package/runtime/third_party/boringssl/crypto/bio/errno.cc +52 -0
  98. package/runtime/third_party/boringssl/crypto/bio/fd.cc +193 -0
  99. package/runtime/third_party/boringssl/crypto/bio/file.cc +283 -0
  100. package/runtime/third_party/boringssl/crypto/bio/hexdump.cc +154 -0
  101. package/runtime/third_party/boringssl/crypto/bio/internal.h +128 -0
  102. package/runtime/third_party/boringssl/crypto/bio/pair.cc +426 -0
  103. package/runtime/third_party/boringssl/crypto/bio/printf.cc +59 -0
  104. package/runtime/third_party/boringssl/crypto/bio/socket.cc +210 -0
  105. package/runtime/third_party/boringssl/crypto/bio/socket_helper.cc +179 -0
  106. package/runtime/third_party/boringssl/crypto/blake2/blake2.cc +173 -0
  107. package/runtime/third_party/boringssl/crypto/bn/bn_asn1.cc +57 -0
  108. package/runtime/third_party/boringssl/crypto/bn/convert.cc +409 -0
  109. package/runtime/third_party/boringssl/crypto/bn/div.cc +102 -0
  110. package/runtime/third_party/boringssl/crypto/bn/exponentiation.cc +168 -0
  111. package/runtime/third_party/boringssl/crypto/bn/sqrt.cc +93 -0
  112. package/runtime/third_party/boringssl/crypto/buf/buf.cc +119 -0
  113. package/runtime/third_party/boringssl/crypto/bytestring/asn1_compat.cc +54 -0
  114. package/runtime/third_party/boringssl/crypto/bytestring/ber.cc +268 -0
  115. package/runtime/third_party/boringssl/crypto/bytestring/cbb.cc +787 -0
  116. package/runtime/third_party/boringssl/crypto/bytestring/cbs.cc +977 -0
  117. package/runtime/third_party/boringssl/crypto/bytestring/internal.h +134 -0
  118. package/runtime/third_party/boringssl/crypto/bytestring/unicode.cc +156 -0
  119. package/runtime/third_party/boringssl/crypto/chacha/chacha.cc +226 -0
  120. package/runtime/third_party/boringssl/crypto/chacha/internal.h +103 -0
  121. package/runtime/third_party/boringssl/crypto/cipher/derive_key.cc +106 -0
  122. package/runtime/third_party/boringssl/crypto/cipher/e_aesctrhmac.cc +294 -0
  123. package/runtime/third_party/boringssl/crypto/cipher/e_aeseax.cc +351 -0
  124. package/runtime/third_party/boringssl/crypto/cipher/e_aesgcmsiv.cc +918 -0
  125. package/runtime/third_party/boringssl/crypto/cipher/e_chacha20poly1305.cc +404 -0
  126. package/runtime/third_party/boringssl/crypto/cipher/e_des.cc +214 -0
  127. package/runtime/third_party/boringssl/crypto/cipher/e_null.cc +55 -0
  128. package/runtime/third_party/boringssl/crypto/cipher/e_rc2.cc +432 -0
  129. package/runtime/third_party/boringssl/crypto/cipher/e_rc4.cc +56 -0
  130. package/runtime/third_party/boringssl/crypto/cipher/e_tls.cc +615 -0
  131. package/runtime/third_party/boringssl/crypto/cipher/get_cipher.cc +85 -0
  132. package/runtime/third_party/boringssl/crypto/cipher/internal.h +399 -0
  133. package/runtime/third_party/boringssl/crypto/cipher/tls_cbc.cc +476 -0
  134. package/runtime/third_party/boringssl/crypto/cms/cms.cc +178 -0
  135. package/runtime/third_party/boringssl/crypto/conf/conf.cc +637 -0
  136. package/runtime/third_party/boringssl/crypto/conf/internal.h +54 -0
  137. package/runtime/third_party/boringssl/crypto/cpu_aarch64_apple.cc +76 -0
  138. package/runtime/third_party/boringssl/crypto/cpu_aarch64_fuchsia.cc +58 -0
  139. package/runtime/third_party/boringssl/crypto/cpu_aarch64_linux.cc +66 -0
  140. package/runtime/third_party/boringssl/crypto/cpu_aarch64_openbsd.cc +45 -0
  141. package/runtime/third_party/boringssl/crypto/cpu_aarch64_sysreg.cc +66 -0
  142. package/runtime/third_party/boringssl/crypto/cpu_aarch64_win.cc +52 -0
  143. package/runtime/third_party/boringssl/crypto/cpu_arm_freebsd.cc +55 -0
  144. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.cc +173 -0
  145. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.h +141 -0
  146. package/runtime/third_party/boringssl/crypto/cpu_intel.cc +287 -0
  147. package/runtime/third_party/boringssl/crypto/crypto.cc +152 -0
  148. package/runtime/third_party/boringssl/crypto/curve25519/asm/x25519-asm-arm.S +2124 -0
  149. package/runtime/third_party/boringssl/crypto/curve25519/cpace.cc +227 -0
  150. package/runtime/third_party/boringssl/crypto/curve25519/curve25519.cc +2436 -0
  151. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_64_adx.cc +18 -0
  152. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_tables.h +3264 -0
  153. package/runtime/third_party/boringssl/crypto/curve25519/internal.h +202 -0
  154. package/runtime/third_party/boringssl/crypto/curve25519/spake25519.cc +532 -0
  155. package/runtime/third_party/boringssl/crypto/des/des.cc +837 -0
  156. package/runtime/third_party/boringssl/crypto/des/internal.h +144 -0
  157. package/runtime/third_party/boringssl/crypto/dh/dh_asn1.cc +109 -0
  158. package/runtime/third_party/boringssl/crypto/dh/params.cc +411 -0
  159. package/runtime/third_party/boringssl/crypto/digest/digest_extra.cc +361 -0
  160. package/runtime/third_party/boringssl/crypto/dsa/dsa.cc +922 -0
  161. package/runtime/third_party/boringssl/crypto/dsa/dsa_asn1.cc +306 -0
  162. package/runtime/third_party/boringssl/crypto/dsa/internal.h +56 -0
  163. package/runtime/third_party/boringssl/crypto/ec/ec_asn1.cc +542 -0
  164. package/runtime/third_party/boringssl/crypto/ec/ec_derive.cc +94 -0
  165. package/runtime/third_party/boringssl/crypto/ec/hash_to_curve.cc +773 -0
  166. package/runtime/third_party/boringssl/crypto/ec/internal.h +114 -0
  167. package/runtime/third_party/boringssl/crypto/ecdh/ecdh.cc +75 -0
  168. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.cc +337 -0
  169. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  170. package/runtime/third_party/boringssl/crypto/engine/engine.cc +95 -0
  171. package/runtime/third_party/boringssl/crypto/err/err.cc +820 -0
  172. package/runtime/third_party/boringssl/crypto/err/internal.h +45 -0
  173. package/runtime/third_party/boringssl/crypto/evp/evp.cc +454 -0
  174. package/runtime/third_party/boringssl/crypto/evp/evp_asn1.cc +439 -0
  175. package/runtime/third_party/boringssl/crypto/evp/evp_ctx.cc +541 -0
  176. package/runtime/third_party/boringssl/crypto/evp/evp_kem.cc +101 -0
  177. package/runtime/third_party/boringssl/crypto/evp/internal.h +427 -0
  178. package/runtime/third_party/boringssl/crypto/evp/p_dh.cc +326 -0
  179. package/runtime/third_party/boringssl/crypto/evp/p_dsa.cc +333 -0
  180. package/runtime/third_party/boringssl/crypto/evp/p_ec.cc +736 -0
  181. package/runtime/third_party/boringssl/crypto/evp/p_ed25519.cc +359 -0
  182. package/runtime/third_party/boringssl/crypto/evp/p_hkdf.cc +204 -0
  183. package/runtime/third_party/boringssl/crypto/evp/p_mldsa.cc +549 -0
  184. package/runtime/third_party/boringssl/crypto/evp/p_mlkem.cc +510 -0
  185. package/runtime/third_party/boringssl/crypto/evp/p_rsa.cc +1185 -0
  186. package/runtime/third_party/boringssl/crypto/evp/p_x25519.cc +371 -0
  187. package/runtime/third_party/boringssl/crypto/evp/p_xwing.cc +300 -0
  188. package/runtime/third_party/boringssl/crypto/evp/pbkdf.cc +105 -0
  189. package/runtime/third_party/boringssl/crypto/evp/print.cc +287 -0
  190. package/runtime/third_party/boringssl/crypto/evp/scrypt.cc +218 -0
  191. package/runtime/third_party/boringssl/crypto/evp/sign.cc +95 -0
  192. package/runtime/third_party/boringssl/crypto/ex_data.cc +140 -0
  193. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes.cc.inc +208 -0
  194. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes_nohw.cc.inc +1279 -0
  195. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cbc.cc.inc +132 -0
  196. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cfb.cc.inc +168 -0
  197. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ctr.cc.inc +102 -0
  198. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm.cc.inc +614 -0
  199. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm_nohw.cc.inc +304 -0
  200. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/internal.h +590 -0
  201. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.cc.inc +211 -0
  202. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.cc.inc +97 -0
  203. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ofb.cc.inc +55 -0
  204. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm.cc +288 -0
  205. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm_interface.h +953 -0
  206. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/add.cc.inc +276 -0
  207. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +573 -0
  208. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bn.cc.inc +377 -0
  209. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bytes.cc.inc +230 -0
  210. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/cmp.cc.inc +161 -0
  211. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/ctx.cc.inc +127 -0
  212. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div.cc.inc +738 -0
  213. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div_extra.cc.inc +90 -0
  214. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.cc.inc +743 -0
  215. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd.cc.inc +281 -0
  216. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.cc.inc +327 -0
  217. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/generic.cc.inc +579 -0
  218. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/internal.h +810 -0
  219. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/jacobi.cc.inc +101 -0
  220. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery.cc.inc +408 -0
  221. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.cc.inc +179 -0
  222. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/mul.cc.inc +347 -0
  223. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/prime.cc.inc +931 -0
  224. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/random.cc.inc +261 -0
  225. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.cc.inc +144 -0
  226. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +109 -0
  227. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/shift.cc.inc +317 -0
  228. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/sqrt.cc.inc +370 -0
  229. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/aead.cc.inc +619 -0
  230. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/cipher.cc.inc +837 -0
  231. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.cc.inc +1240 -0
  232. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aesccm.cc.inc +440 -0
  233. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +461 -0
  234. package/runtime/third_party/boringssl/crypto/fipsmodule/cmac/cmac.cc.inc +293 -0
  235. package/runtime/third_party/boringssl/crypto/fipsmodule/delocate.h +95 -0
  236. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/check.cc.inc +198 -0
  237. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/dh.cc.inc +401 -0
  238. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/internal.h +63 -0
  239. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digest.cc.inc +221 -0
  240. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digests.cc.inc +184 -0
  241. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/internal.h +72 -0
  242. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +166 -0
  243. package/runtime/third_party/boringssl/crypto/fipsmodule/digestsign/digestsign.cc.inc +230 -0
  244. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  245. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec.cc.inc +1024 -0
  246. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_key.cc.inc +536 -0
  247. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.cc.inc +379 -0
  248. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/felem.cc.inc +250 -0
  249. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/internal.h +752 -0
  250. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/oct.cc.inc +174 -0
  251. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz-table.h +9502 -0
  252. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.cc.inc +740 -0
  253. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.h +207 -0
  254. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256.cc.inc +578 -0
  255. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256_table.h +297 -0
  256. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/scalar.cc.inc +184 -0
  257. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple.cc.inc +246 -0
  258. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.cc.inc +274 -0
  259. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/util.cc.inc +258 -0
  260. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/wnaf.cc.inc +224 -0
  261. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.cc.inc +91 -0
  262. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +288 -0
  263. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/internal.h +57 -0
  264. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/internal.h +38 -0
  265. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/jitter.cc.inc +487 -0
  266. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  267. package/runtime/third_party/boringssl/crypto/fipsmodule/fips_shared_support.cc +28 -0
  268. package/runtime/third_party/boringssl/crypto/fipsmodule/hkdf/hkdf.cc.inc +114 -0
  269. package/runtime/third_party/boringssl/crypto/fipsmodule/hmac/hmac.cc.inc +218 -0
  270. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/internal.h +165 -0
  271. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/keccak.cc.inc +647 -0
  272. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  273. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/mldsa.cc.inc +3323 -0
  274. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  275. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/mlkem.cc.inc +1856 -0
  276. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  277. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.cc.inc +401 -0
  278. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/internal.h +99 -0
  279. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/rand.cc.inc +486 -0
  280. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +167 -0
  281. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/padding.cc.inc +371 -0
  282. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa.cc.inc +996 -0
  283. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.cc.inc +1000 -0
  284. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/fips.cc.inc +129 -0
  285. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/self_check.cc.inc +1093 -0
  286. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/internal.h +112 -0
  287. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +330 -0
  288. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/internal.h +205 -0
  289. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha1.cc.inc +404 -0
  290. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha256.cc.inc +315 -0
  291. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha512.cc.inc +473 -0
  292. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/address.h +144 -0
  293. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  294. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.cc.inc +179 -0
  295. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.h +48 -0
  296. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.cc.inc +164 -0
  297. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.h +58 -0
  298. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/params.h +178 -0
  299. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +690 -0
  300. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.cc.inc +326 -0
  301. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.h +71 -0
  302. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.cc.inc +172 -0
  303. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.h +40 -0
  304. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/internal.h +33 -0
  305. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/kdf.cc.inc +180 -0
  306. package/runtime/third_party/boringssl/crypto/fuzzer_mode.cc +30 -0
  307. package/runtime/third_party/boringssl/crypto/hpke/hpke.cc +1514 -0
  308. package/runtime/third_party/boringssl/crypto/hrss/asm/poly_rq_mul.S +8489 -0
  309. package/runtime/third_party/boringssl/crypto/hrss/hrss.cc +2189 -0
  310. package/runtime/third_party/boringssl/crypto/hrss/internal.h +64 -0
  311. package/runtime/third_party/boringssl/crypto/internal.h +1767 -0
  312. package/runtime/third_party/boringssl/crypto/lhash/internal.h +222 -0
  313. package/runtime/third_party/boringssl/crypto/lhash/lhash.cc +312 -0
  314. package/runtime/third_party/boringssl/crypto/md4/md4.cc +207 -0
  315. package/runtime/third_party/boringssl/crypto/md5/internal.h +34 -0
  316. package/runtime/third_party/boringssl/crypto/md5/md5.cc +255 -0
  317. package/runtime/third_party/boringssl/crypto/mem.cc +577 -0
  318. package/runtime/third_party/boringssl/crypto/mem_internal.h +706 -0
  319. package/runtime/third_party/boringssl/crypto/mldsa/mldsa.cc +296 -0
  320. package/runtime/third_party/boringssl/crypto/mlkem/mlkem.cc +108 -0
  321. package/runtime/third_party/boringssl/crypto/obj/obj.cc +494 -0
  322. package/runtime/third_party/boringssl/crypto/obj/obj_dat.h +11722 -0
  323. package/runtime/third_party/boringssl/crypto/obj/obj_xref.cc +83 -0
  324. package/runtime/third_party/boringssl/crypto/params_internal.h +30 -0
  325. package/runtime/third_party/boringssl/crypto/pem/internal.h +135 -0
  326. package/runtime/third_party/boringssl/crypto/pem/pem_all.cc +153 -0
  327. package/runtime/third_party/boringssl/crypto/pem/pem_info.cc +250 -0
  328. package/runtime/third_party/boringssl/crypto/pem/pem_lib.cc +707 -0
  329. package/runtime/third_party/boringssl/crypto/pem/pem_oth.cc +45 -0
  330. package/runtime/third_party/boringssl/crypto/pem/pem_pk8.cc +211 -0
  331. package/runtime/third_party/boringssl/crypto/pem/pem_pkey.cc +147 -0
  332. package/runtime/third_party/boringssl/crypto/pem/pem_x509.cc +25 -0
  333. package/runtime/third_party/boringssl/crypto/pem/pem_xaux.cc +25 -0
  334. package/runtime/third_party/boringssl/crypto/pkcs7/internal.h +67 -0
  335. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7.cc +198 -0
  336. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7_x509.cc +527 -0
  337. package/runtime/third_party/boringssl/crypto/pkcs8/internal.h +98 -0
  338. package/runtime/third_party/boringssl/crypto/pkcs8/p5_pbev2.cc +286 -0
  339. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8.cc +473 -0
  340. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8_x509.cc +1328 -0
  341. package/runtime/third_party/boringssl/crypto/poly1305/internal.h +54 -0
  342. package/runtime/third_party/boringssl/crypto/poly1305/poly1305.cc +315 -0
  343. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm.cc +294 -0
  344. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm_asm.S +2017 -0
  345. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_vec.cc +853 -0
  346. package/runtime/third_party/boringssl/crypto/pool/internal.h +95 -0
  347. package/runtime/third_party/boringssl/crypto/pool/pool.cc +282 -0
  348. package/runtime/third_party/boringssl/crypto/rand/deterministic.cc +58 -0
  349. package/runtime/third_party/boringssl/crypto/rand/fork_detect.cc +222 -0
  350. package/runtime/third_party/boringssl/crypto/rand/forkunsafe.cc +44 -0
  351. package/runtime/third_party/boringssl/crypto/rand/getentropy.cc +53 -0
  352. package/runtime/third_party/boringssl/crypto/rand/internal.h +67 -0
  353. package/runtime/third_party/boringssl/crypto/rand/ios.cc +35 -0
  354. package/runtime/third_party/boringssl/crypto/rand/rand.cc +79 -0
  355. package/runtime/third_party/boringssl/crypto/rand/trusty.cc +39 -0
  356. package/runtime/third_party/boringssl/crypto/rand/urandom.cc +149 -0
  357. package/runtime/third_party/boringssl/crypto/rand/windows.cc +91 -0
  358. package/runtime/third_party/boringssl/crypto/rc4/rc4.cc +56 -0
  359. package/runtime/third_party/boringssl/crypto/refcount.cc +49 -0
  360. package/runtime/third_party/boringssl/crypto/rsa/internal.h +51 -0
  361. package/runtime/third_party/boringssl/crypto/rsa/rsa_asn1.cc +404 -0
  362. package/runtime/third_party/boringssl/crypto/rsa/rsa_crypt.cc +530 -0
  363. package/runtime/third_party/boringssl/crypto/rsa/rsa_extra.cc +30 -0
  364. package/runtime/third_party/boringssl/crypto/rsa/rsa_print.cc +25 -0
  365. package/runtime/third_party/boringssl/crypto/sha/sha1.cc +55 -0
  366. package/runtime/third_party/boringssl/crypto/sha/sha256.cc +89 -0
  367. package/runtime/third_party/boringssl/crypto/sha/sha512.cc +106 -0
  368. package/runtime/third_party/boringssl/crypto/siphash/siphash.cc +81 -0
  369. package/runtime/third_party/boringssl/crypto/slhdsa/slhdsa.cc +167 -0
  370. package/runtime/third_party/boringssl/crypto/spake2plus/internal.h +204 -0
  371. package/runtime/third_party/boringssl/crypto/spake2plus/spake2plus.cc +501 -0
  372. package/runtime/third_party/boringssl/crypto/stack/stack.cc +462 -0
  373. package/runtime/third_party/boringssl/crypto/thread.cc +68 -0
  374. package/runtime/third_party/boringssl/crypto/thread_none.cc +48 -0
  375. package/runtime/third_party/boringssl/crypto/thread_pthread.cc +138 -0
  376. package/runtime/third_party/boringssl/crypto/thread_win.cc +227 -0
  377. package/runtime/third_party/boringssl/crypto/trust_token/internal.h +405 -0
  378. package/runtime/third_party/boringssl/crypto/trust_token/pmbtoken.cc +1672 -0
  379. package/runtime/third_party/boringssl/crypto/trust_token/trust_token.cc +701 -0
  380. package/runtime/third_party/boringssl/crypto/trust_token/voprf.cc +1266 -0
  381. package/runtime/third_party/boringssl/crypto/x509/a_digest.cc +52 -0
  382. package/runtime/third_party/boringssl/crypto/x509/a_sign.cc +100 -0
  383. package/runtime/third_party/boringssl/crypto/x509/a_verify.cc +77 -0
  384. package/runtime/third_party/boringssl/crypto/x509/algorithm.cc +167 -0
  385. package/runtime/third_party/boringssl/crypto/x509/asn1_gen.cc +540 -0
  386. package/runtime/third_party/boringssl/crypto/x509/by_dir.cc +301 -0
  387. package/runtime/third_party/boringssl/crypto/x509/by_file.cc +226 -0
  388. package/runtime/third_party/boringssl/crypto/x509/i2d_pr.cc +37 -0
  389. package/runtime/third_party/boringssl/crypto/x509/internal.h +697 -0
  390. package/runtime/third_party/boringssl/crypto/x509/name_print.cc +187 -0
  391. package/runtime/third_party/boringssl/crypto/x509/policy.cc +686 -0
  392. package/runtime/third_party/boringssl/crypto/x509/rsa_pss.cc +187 -0
  393. package/runtime/third_party/boringssl/crypto/x509/t_crl.cc +106 -0
  394. package/runtime/third_party/boringssl/crypto/x509/t_req.cc +206 -0
  395. package/runtime/third_party/boringssl/crypto/x509/t_x509.cc +292 -0
  396. package/runtime/third_party/boringssl/crypto/x509/t_x509a.cc +81 -0
  397. package/runtime/third_party/boringssl/crypto/x509/v3_akey.cc +174 -0
  398. package/runtime/third_party/boringssl/crypto/x509/v3_akeya.cc +31 -0
  399. package/runtime/third_party/boringssl/crypto/x509/v3_alt.cc +636 -0
  400. package/runtime/third_party/boringssl/crypto/x509/v3_bcons.cc +96 -0
  401. package/runtime/third_party/boringssl/crypto/x509/v3_bitst.cc +100 -0
  402. package/runtime/third_party/boringssl/crypto/x509/v3_conf.cc +369 -0
  403. package/runtime/third_party/boringssl/crypto/x509/v3_cpols.cc +417 -0
  404. package/runtime/third_party/boringssl/crypto/x509/v3_crld.cc +471 -0
  405. package/runtime/third_party/boringssl/crypto/x509/v3_enum.cc +74 -0
  406. package/runtime/third_party/boringssl/crypto/x509/v3_extku.cc +97 -0
  407. package/runtime/third_party/boringssl/crypto/x509/v3_genn.cc +238 -0
  408. package/runtime/third_party/boringssl/crypto/x509/v3_ia5.cc +83 -0
  409. package/runtime/third_party/boringssl/crypto/x509/v3_info.cc +162 -0
  410. package/runtime/third_party/boringssl/crypto/x509/v3_int.cc +83 -0
  411. package/runtime/third_party/boringssl/crypto/x509/v3_lib.cc +349 -0
  412. package/runtime/third_party/boringssl/crypto/x509/v3_ncons.cc +798 -0
  413. package/runtime/third_party/boringssl/crypto/x509/v3_ocsp.cc +92 -0
  414. package/runtime/third_party/boringssl/crypto/x509/v3_pcons.cc +102 -0
  415. package/runtime/third_party/boringssl/crypto/x509/v3_pmaps.cc +110 -0
  416. package/runtime/third_party/boringssl/crypto/x509/v3_prn.cc +183 -0
  417. package/runtime/third_party/boringssl/crypto/x509/v3_purp.cc +580 -0
  418. package/runtime/third_party/boringssl/crypto/x509/v3_skey.cc +128 -0
  419. package/runtime/third_party/boringssl/crypto/x509/v3_utl.cc +1311 -0
  420. package/runtime/third_party/boringssl/crypto/x509/x509.cc +47 -0
  421. package/runtime/third_party/boringssl/crypto/x509/x509_att.cc +188 -0
  422. package/runtime/third_party/boringssl/crypto/x509/x509_cmp.cc +243 -0
  423. package/runtime/third_party/boringssl/crypto/x509/x509_d2.cc +66 -0
  424. package/runtime/third_party/boringssl/crypto/x509/x509_def.cc +42 -0
  425. package/runtime/third_party/boringssl/crypto/x509/x509_ext.cc +161 -0
  426. package/runtime/third_party/boringssl/crypto/x509/x509_lu.cc +570 -0
  427. package/runtime/third_party/boringssl/crypto/x509/x509_mtc.cc +598 -0
  428. package/runtime/third_party/boringssl/crypto/x509/x509_obj.cc +169 -0
  429. package/runtime/third_party/boringssl/crypto/x509/x509_req.cc +248 -0
  430. package/runtime/third_party/boringssl/crypto/x509/x509_set.cc +166 -0
  431. package/runtime/third_party/boringssl/crypto/x509/x509_trs.cc +123 -0
  432. package/runtime/third_party/boringssl/crypto/x509/x509_txt.cc +147 -0
  433. package/runtime/third_party/boringssl/crypto/x509/x509_v3.cc +249 -0
  434. package/runtime/third_party/boringssl/crypto/x509/x509_vfy.cc +1531 -0
  435. package/runtime/third_party/boringssl/crypto/x509/x509_vpm.cc +449 -0
  436. package/runtime/third_party/boringssl/crypto/x509/x509cset.cc +222 -0
  437. package/runtime/third_party/boringssl/crypto/x509/x509name.cc +377 -0
  438. package/runtime/third_party/boringssl/crypto/x509/x509rset.cc +55 -0
  439. package/runtime/third_party/boringssl/crypto/x509/x509spki.cc +91 -0
  440. package/runtime/third_party/boringssl/crypto/x509/x_algor.cc +223 -0
  441. package/runtime/third_party/boringssl/crypto/x509/x_all.cc +352 -0
  442. package/runtime/third_party/boringssl/crypto/x509/x_attrib.cc +61 -0
  443. package/runtime/third_party/boringssl/crypto/x509/x_crl.cc +325 -0
  444. package/runtime/third_party/boringssl/crypto/x509/x_exten.cc +42 -0
  445. package/runtime/third_party/boringssl/crypto/x509/x_name.cc +407 -0
  446. package/runtime/third_party/boringssl/crypto/x509/x_pubkey.cc +199 -0
  447. package/runtime/third_party/boringssl/crypto/x509/x_req.cc +80 -0
  448. package/runtime/third_party/boringssl/crypto/x509/x_sig.cc +51 -0
  449. package/runtime/third_party/boringssl/crypto/x509/x_spki.cc +44 -0
  450. package/runtime/third_party/boringssl/crypto/x509/x_x509.cc +495 -0
  451. package/runtime/third_party/boringssl/crypto/x509/x_x509a.cc +169 -0
  452. package/runtime/third_party/boringssl/crypto/xwing/xwing.cc +257 -0
  453. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-apple.S +1326 -0
  454. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-linux.S +1327 -0
  455. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-apple.S +1252 -0
  456. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-linux.S +1253 -0
  457. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-apple.S +873 -0
  458. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-linux.S +885 -0
  459. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-apple.S +2490 -0
  460. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-linux.S +2530 -0
  461. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-apple.S +2413 -0
  462. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-linux.S +2397 -0
  463. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv7-linux.S +784 -0
  464. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-apple.S +792 -0
  465. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-linux.S +786 -0
  466. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-win.S +798 -0
  467. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-apple.S +2912 -0
  468. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-linux.S +2907 -0
  469. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-win.S +2915 -0
  470. package/runtime/third_party/boringssl/gen/bcm/armv4-mont-linux.S +932 -0
  471. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-apple.S +1440 -0
  472. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-linux.S +1440 -0
  473. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-win.S +1446 -0
  474. package/runtime/third_party/boringssl/gen/bcm/bn-586-apple.S +530 -0
  475. package/runtime/third_party/boringssl/gen/bcm/bn-586-linux.S +540 -0
  476. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-apple.S +88 -0
  477. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-linux.S +87 -0
  478. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-win.S +87 -0
  479. package/runtime/third_party/boringssl/gen/bcm/bsaes-armv7-linux.S +1520 -0
  480. package/runtime/third_party/boringssl/gen/bcm/co-586-apple.S +1256 -0
  481. package/runtime/third_party/boringssl/gen/bcm/co-586-linux.S +1264 -0
  482. package/runtime/third_party/boringssl/gen/bcm/ghash-armv4-linux.S +242 -0
  483. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-apple.S +337 -0
  484. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-linux.S +335 -0
  485. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-win.S +341 -0
  486. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-apple.S +288 -0
  487. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-linux.S +292 -0
  488. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-apple.S +426 -0
  489. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-linux.S +425 -0
  490. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-apple.S +322 -0
  491. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-linux.S +328 -0
  492. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-apple.S +1134 -0
  493. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-linux.S +1129 -0
  494. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv7-linux.S +244 -0
  495. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-apple.S +567 -0
  496. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-linux.S +563 -0
  497. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-win.S +571 -0
  498. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-apple.S +1744 -0
  499. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-linux.S +1725 -0
  500. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-win.S +1765 -0
  501. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-apple.S +4544 -0
  502. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-linux.S +4600 -0
  503. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-apple.S +310 -0
  504. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-linux.S +310 -0
  505. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-win.S +310 -0
  506. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-apple.S +321 -0
  507. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-linux.S +335 -0
  508. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-apple.S +58 -0
  509. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-linux.S +57 -0
  510. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-apple.S +1756 -0
  511. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-linux.S +1751 -0
  512. package/runtime/third_party/boringssl/gen/bcm/sha1-586-apple.S +3782 -0
  513. package/runtime/third_party/boringssl/gen/bcm/sha1-586-linux.S +3788 -0
  514. package/runtime/third_party/boringssl/gen/bcm/sha1-armv4-large-linux.S +1479 -0
  515. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-apple.S +1219 -0
  516. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-linux.S +1218 -0
  517. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-win.S +1222 -0
  518. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-apple.S +5454 -0
  519. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-linux.S +5450 -0
  520. package/runtime/third_party/boringssl/gen/bcm/sha256-586-apple.S +5593 -0
  521. package/runtime/third_party/boringssl/gen/bcm/sha256-586-linux.S +5599 -0
  522. package/runtime/third_party/boringssl/gen/bcm/sha256-armv4-linux.S +2840 -0
  523. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-apple.S +1195 -0
  524. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-linux.S +1194 -0
  525. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-win.S +1198 -0
  526. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-apple.S +4173 -0
  527. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-linux.S +4170 -0
  528. package/runtime/third_party/boringssl/gen/bcm/sha512-586-apple.S +2406 -0
  529. package/runtime/third_party/boringssl/gen/bcm/sha512-586-linux.S +2410 -0
  530. package/runtime/third_party/boringssl/gen/bcm/sha512-armv4-linux.S +1857 -0
  531. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-apple.S +1598 -0
  532. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-linux.S +1597 -0
  533. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-win.S +1601 -0
  534. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-apple.S +2979 -0
  535. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-linux.S +2978 -0
  536. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv7-linux.S +1225 -0
  537. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-apple.S +1238 -0
  538. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-linux.S +1220 -0
  539. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-win.S +1256 -0
  540. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-apple.S +680 -0
  541. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-linux.S +706 -0
  542. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-apple.S +1146 -0
  543. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-linux.S +1133 -0
  544. package/runtime/third_party/boringssl/gen/bcm/x86-mont-apple.S +216 -0
  545. package/runtime/third_party/boringssl/gen/bcm/x86-mont-linux.S +218 -0
  546. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-apple.S +1238 -0
  547. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-linux.S +1237 -0
  548. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-apple.S +3644 -0
  549. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-linux.S +3628 -0
  550. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +325 -0
  551. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +325 -0
  552. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-apple.S +3113 -0
  553. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-linux.S +3091 -0
  554. package/runtime/third_party/boringssl/gen/crypto/chacha-armv4-linux.S +1450 -0
  555. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-apple.S +1969 -0
  556. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-linux.S +1967 -0
  557. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-win.S +1973 -0
  558. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-apple.S +957 -0
  559. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-linux.S +961 -0
  560. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-apple.S +1608 -0
  561. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-linux.S +1611 -0
  562. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-apple.S +3010 -0
  563. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-linux.S +3008 -0
  564. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-win.S +3014 -0
  565. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-apple.S +8903 -0
  566. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-linux.S +8940 -0
  567. package/runtime/third_party/boringssl/gen/crypto/err_data.cc +1578 -0
  568. package/runtime/third_party/boringssl/gen/crypto/md5-586-apple.S +684 -0
  569. package/runtime/third_party/boringssl/gen/crypto/md5-586-linux.S +686 -0
  570. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-apple.S +690 -0
  571. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-linux.S +695 -0
  572. package/runtime/third_party/boringssl/include/openssl/aead.h +650 -0
  573. package/runtime/third_party/boringssl/include/openssl/aes.h +173 -0
  574. package/runtime/third_party/boringssl/include/openssl/arm_arch.h +24 -0
  575. package/runtime/third_party/boringssl/include/openssl/asm_base.h +219 -0
  576. package/runtime/third_party/boringssl/include/openssl/asn1.h +2002 -0
  577. package/runtime/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  578. package/runtime/third_party/boringssl/include/openssl/asn1t.h +584 -0
  579. package/runtime/third_party/boringssl/include/openssl/base.h +548 -0
  580. package/runtime/third_party/boringssl/include/openssl/base64.h +156 -0
  581. package/runtime/third_party/boringssl/include/openssl/bio.h +1061 -0
  582. package/runtime/third_party/boringssl/include/openssl/blake2.h +63 -0
  583. package/runtime/third_party/boringssl/include/openssl/blowfish.h +58 -0
  584. package/runtime/third_party/boringssl/include/openssl/bn.h +986 -0
  585. package/runtime/third_party/boringssl/include/openssl/buf.h +95 -0
  586. package/runtime/third_party/boringssl/include/openssl/buffer.h +18 -0
  587. package/runtime/third_party/boringssl/include/openssl/bytestring.h +798 -0
  588. package/runtime/third_party/boringssl/include/openssl/cast.h +91 -0
  589. package/runtime/third_party/boringssl/include/openssl/chacha.h +47 -0
  590. package/runtime/third_party/boringssl/include/openssl/cipher.h +819 -0
  591. package/runtime/third_party/boringssl/include/openssl/cmac.h +91 -0
  592. package/runtime/third_party/boringssl/include/openssl/cms.h +147 -0
  593. package/runtime/third_party/boringssl/include/openssl/conf.h +136 -0
  594. package/runtime/third_party/boringssl/include/openssl/configuration.h +18 -0
  595. package/runtime/third_party/boringssl/include/openssl/cpu.h +18 -0
  596. package/runtime/third_party/boringssl/include/openssl/crypto.h +235 -0
  597. package/runtime/third_party/boringssl/include/openssl/ctrdrbg.h +116 -0
  598. package/runtime/third_party/boringssl/include/openssl/curve25519.h +309 -0
  599. package/runtime/third_party/boringssl/include/openssl/des.h +134 -0
  600. package/runtime/third_party/boringssl/include/openssl/dh.h +336 -0
  601. package/runtime/third_party/boringssl/include/openssl/digest.h +399 -0
  602. package/runtime/third_party/boringssl/include/openssl/dsa.h +392 -0
  603. package/runtime/third_party/boringssl/include/openssl/dtls1.h +16 -0
  604. package/runtime/third_party/boringssl/include/openssl/e_os2.h +18 -0
  605. package/runtime/third_party/boringssl/include/openssl/ec.h +530 -0
  606. package/runtime/third_party/boringssl/include/openssl/ec_key.h +358 -0
  607. package/runtime/third_party/boringssl/include/openssl/ecdh.h +67 -0
  608. package/runtime/third_party/boringssl/include/openssl/ecdsa.h +242 -0
  609. package/runtime/third_party/boringssl/include/openssl/engine.h +109 -0
  610. package/runtime/third_party/boringssl/include/openssl/err.h +416 -0
  611. package/runtime/third_party/boringssl/include/openssl/evp.h +1645 -0
  612. package/runtime/third_party/boringssl/include/openssl/evp_errors.h +66 -0
  613. package/runtime/third_party/boringssl/include/openssl/ex_data.h +117 -0
  614. package/runtime/third_party/boringssl/include/openssl/hkdf.h +68 -0
  615. package/runtime/third_party/boringssl/include/openssl/hmac.h +151 -0
  616. package/runtime/third_party/boringssl/include/openssl/hpke.h +456 -0
  617. package/runtime/third_party/boringssl/include/openssl/hrss.h +108 -0
  618. package/runtime/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  619. package/runtime/third_party/boringssl/include/openssl/kdf.h +92 -0
  620. package/runtime/third_party/boringssl/include/openssl/lhash.h +18 -0
  621. package/runtime/third_party/boringssl/include/openssl/md4.h +73 -0
  622. package/runtime/third_party/boringssl/include/openssl/md5.h +67 -0
  623. package/runtime/third_party/boringssl/include/openssl/mem.h +215 -0
  624. package/runtime/third_party/boringssl/include/openssl/mldsa.h +486 -0
  625. package/runtime/third_party/boringssl/include/openssl/mlkem.h +222 -0
  626. package/runtime/third_party/boringssl/include/openssl/nid.h +5561 -0
  627. package/runtime/third_party/boringssl/include/openssl/obj.h +225 -0
  628. package/runtime/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  629. package/runtime/third_party/boringssl/include/openssl/objects.h +18 -0
  630. package/runtime/third_party/boringssl/include/openssl/opensslconf.h +108 -0
  631. package/runtime/third_party/boringssl/include/openssl/opensslv.h +18 -0
  632. package/runtime/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  633. package/runtime/third_party/boringssl/include/openssl/params.h +42 -0
  634. package/runtime/third_party/boringssl/include/openssl/pem.h +769 -0
  635. package/runtime/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  636. package/runtime/third_party/boringssl/include/openssl/pkcs7.h +239 -0
  637. package/runtime/third_party/boringssl/include/openssl/pkcs8.h +267 -0
  638. package/runtime/third_party/boringssl/include/openssl/poly1305.h +52 -0
  639. package/runtime/third_party/boringssl/include/openssl/pool.h +137 -0
  640. package/runtime/third_party/boringssl/include/openssl/posix_time.h +51 -0
  641. package/runtime/third_party/boringssl/include/openssl/prefix_symbols.h +8000 -0
  642. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_S.h +633 -0
  643. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_c.h +329 -0
  644. package/runtime/third_party/boringssl/include/openssl/rand.h +138 -0
  645. package/runtime/third_party/boringssl/include/openssl/rc4.h +54 -0
  646. package/runtime/third_party/boringssl/include/openssl/ripemd.h +71 -0
  647. package/runtime/third_party/boringssl/include/openssl/rsa.h +893 -0
  648. package/runtime/third_party/boringssl/include/openssl/safestack.h +16 -0
  649. package/runtime/third_party/boringssl/include/openssl/service_indicator.h +19 -0
  650. package/runtime/third_party/boringssl/include/openssl/sha.h +108 -0
  651. package/runtime/third_party/boringssl/include/openssl/sha2.h +201 -0
  652. package/runtime/third_party/boringssl/include/openssl/siphash.h +37 -0
  653. package/runtime/third_party/boringssl/include/openssl/slhdsa.h +250 -0
  654. package/runtime/third_party/boringssl/include/openssl/span.h +376 -0
  655. package/runtime/third_party/boringssl/include/openssl/srtp.h +18 -0
  656. package/runtime/third_party/boringssl/include/openssl/ssl.h +7211 -0
  657. package/runtime/third_party/boringssl/include/openssl/ssl3.h +171 -0
  658. package/runtime/third_party/boringssl/include/openssl/stack.h +688 -0
  659. package/runtime/third_party/boringssl/include/openssl/target.h +246 -0
  660. package/runtime/third_party/boringssl/include/openssl/thread.h +114 -0
  661. package/runtime/third_party/boringssl/include/openssl/time.h +22 -0
  662. package/runtime/third_party/boringssl/include/openssl/tls1.h +263 -0
  663. package/runtime/third_party/boringssl/include/openssl/tls_prf.h +47 -0
  664. package/runtime/third_party/boringssl/include/openssl/trust_token.h +349 -0
  665. package/runtime/third_party/boringssl/include/openssl/type_check.h +37 -0
  666. package/runtime/third_party/boringssl/include/openssl/types.h +18 -0
  667. package/runtime/third_party/boringssl/include/openssl/x509.h +5404 -0
  668. package/runtime/third_party/boringssl/include/openssl/x509_vfy.h +18 -0
  669. package/runtime/third_party/boringssl/include/openssl/x509v3.h +63 -0
  670. package/runtime/third_party/boringssl/include/openssl/x509v3_errors.h +84 -0
  671. package/runtime/third_party/boringssl/include/openssl/xwing.h +115 -0
  672. package/runtime/third_party/boringssl/sources.json +696 -0
  673. package/runtime/third_party/boringssl/ssl/bio_ssl.cc +196 -0
  674. package/runtime/third_party/boringssl/ssl/d1_both.cc +1137 -0
  675. package/runtime/third_party/boringssl/ssl/d1_lib.cc +245 -0
  676. package/runtime/third_party/boringssl/ssl/d1_pkt.cc +322 -0
  677. package/runtime/third_party/boringssl/ssl/d1_srtp.cc +128 -0
  678. package/runtime/third_party/boringssl/ssl/dtls_method.cc +216 -0
  679. package/runtime/third_party/boringssl/ssl/dtls_record.cc +586 -0
  680. package/runtime/third_party/boringssl/ssl/encrypted_client_hello.cc +1110 -0
  681. package/runtime/third_party/boringssl/ssl/extensions.cc +5368 -0
  682. package/runtime/third_party/boringssl/ssl/handoff.cc +625 -0
  683. package/runtime/third_party/boringssl/ssl/handshake.cc +694 -0
  684. package/runtime/third_party/boringssl/ssl/handshake_client.cc +1958 -0
  685. package/runtime/third_party/boringssl/ssl/handshake_server.cc +1875 -0
  686. package/runtime/third_party/boringssl/ssl/internal.h +4506 -0
  687. package/runtime/third_party/boringssl/ssl/s3_both.cc +555 -0
  688. package/runtime/third_party/boringssl/ssl/s3_lib.cc +88 -0
  689. package/runtime/third_party/boringssl/ssl/s3_pkt.cc +396 -0
  690. package/runtime/third_party/boringssl/ssl/ssl_aead_ctx.cc +416 -0
  691. package/runtime/third_party/boringssl/ssl/ssl_asn1.cc +851 -0
  692. package/runtime/third_party/boringssl/ssl/ssl_buffer.cc +304 -0
  693. package/runtime/third_party/boringssl/ssl/ssl_cert.cc +723 -0
  694. package/runtime/third_party/boringssl/ssl/ssl_cipher.cc +1762 -0
  695. package/runtime/third_party/boringssl/ssl/ssl_credential.cc +913 -0
  696. package/runtime/third_party/boringssl/ssl/ssl_file.cc +375 -0
  697. package/runtime/third_party/boringssl/ssl/ssl_key_share.cc +445 -0
  698. package/runtime/third_party/boringssl/ssl/ssl_lib.cc +4132 -0
  699. package/runtime/third_party/boringssl/ssl/ssl_privkey.cc +973 -0
  700. package/runtime/third_party/boringssl/ssl/ssl_session.cc +1273 -0
  701. package/runtime/third_party/boringssl/ssl/ssl_stat.cc +162 -0
  702. package/runtime/third_party/boringssl/ssl/ssl_transcript.cc +224 -0
  703. package/runtime/third_party/boringssl/ssl/ssl_versions.cc +436 -0
  704. package/runtime/third_party/boringssl/ssl/ssl_x509.cc +1229 -0
  705. package/runtime/third_party/boringssl/ssl/t1_enc.cc +266 -0
  706. package/runtime/third_party/boringssl/ssl/tls13_both.cc +764 -0
  707. package/runtime/third_party/boringssl/ssl/tls13_client.cc +1325 -0
  708. package/runtime/third_party/boringssl/ssl/tls13_enc.cc +746 -0
  709. package/runtime/third_party/boringssl/ssl/tls13_server.cc +1623 -0
  710. package/runtime/third_party/boringssl/ssl/tls_method.cc +266 -0
  711. package/runtime/third_party/boringssl/ssl/tls_record.cc +524 -0
  712. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_mul.S +178 -0
  713. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_square.S +146 -0
  714. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_mul.S +177 -0
  715. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_sqr.S +166 -0
  716. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  717. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  718. package/runtime/third_party/boringssl/third_party/fiat/curve25519_32.h +1571 -0
  719. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64.h +978 -0
  720. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_adx.h +700 -0
  721. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_msvc.h +1281 -0
  722. package/runtime/third_party/boringssl/third_party/fiat/p256_32.h +4760 -0
  723. package/runtime/third_party/boringssl/third_party/fiat/p256_64.h +1984 -0
  724. package/runtime/third_party/boringssl/third_party/fiat/p256_64_msvc.h +1939 -0
  725. package/runtime/third_party/boringssl/third_party/fiat/p256_field.c.inc +26 -0
  726. package/runtime/third_party/boringssl/third_party/fiat/p256_field_32.br.c.inc +71 -0
  727. package/runtime/third_party/boringssl/third_party/fiat/p256_field_64.br.c.inc +84 -0
  728. package/runtime/third_party/boringssl/third_party/fiat/p256_point.br.c.inc +112 -0
  729. package/runtime/third_party/v8-ieee754/README.md +2 -1
  730. package/runtime/third_party/v8-ieee754/convert.py +4 -0
  731. package/runtime/third_party/v8-ieee754/ieee754.c +1 -1
  732. package/runtime/third_party/bearssl/LICENSE.txt +0 -21
  733. package/runtime/third_party/bearssl/README.txt +0 -136
  734. package/runtime/third_party/bearssl/VERSION +0 -1
  735. package/runtime/third_party/bearssl/inc/bearssl.h +0 -183
  736. package/runtime/third_party/bearssl/inc/bearssl_aead.h +0 -1059
  737. package/runtime/third_party/bearssl/inc/bearssl_block.h +0 -2618
  738. package/runtime/third_party/bearssl/inc/bearssl_ec.h +0 -967
  739. package/runtime/third_party/bearssl/inc/bearssl_hash.h +0 -1346
  740. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +0 -241
  741. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +0 -284
  742. package/runtime/third_party/bearssl/inc/bearssl_pem.h +0 -294
  743. package/runtime/third_party/bearssl/inc/bearssl_prf.h +0 -150
  744. package/runtime/third_party/bearssl/inc/bearssl_rand.h +0 -397
  745. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +0 -1655
  746. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +0 -4296
  747. package/runtime/third_party/bearssl/inc/bearssl_x509.h +0 -1474
  748. package/runtime/third_party/bearssl/src/aead/ccm.c +0 -346
  749. package/runtime/third_party/bearssl/src/aead/eax.c +0 -525
  750. package/runtime/third_party/bearssl/src/aead/gcm.c +0 -318
  751. package/runtime/third_party/bearssl/src/codec/ccopy.c +0 -44
  752. package/runtime/third_party/bearssl/src/codec/dec16be.c +0 -38
  753. package/runtime/third_party/bearssl/src/codec/dec16le.c +0 -38
  754. package/runtime/third_party/bearssl/src/codec/dec32be.c +0 -38
  755. package/runtime/third_party/bearssl/src/codec/dec32le.c +0 -38
  756. package/runtime/third_party/bearssl/src/codec/dec64be.c +0 -38
  757. package/runtime/third_party/bearssl/src/codec/dec64le.c +0 -38
  758. package/runtime/third_party/bearssl/src/codec/enc16be.c +0 -38
  759. package/runtime/third_party/bearssl/src/codec/enc16le.c +0 -38
  760. package/runtime/third_party/bearssl/src/codec/enc32be.c +0 -38
  761. package/runtime/third_party/bearssl/src/codec/enc32le.c +0 -38
  762. package/runtime/third_party/bearssl/src/codec/enc64be.c +0 -38
  763. package/runtime/third_party/bearssl/src/codec/enc64le.c +0 -38
  764. package/runtime/third_party/bearssl/src/codec/pemdec.c +0 -526
  765. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +0 -314
  766. package/runtime/third_party/bearssl/src/codec/pemenc.c +0 -173
  767. package/runtime/third_party/bearssl/src/config.h +0 -247
  768. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +0 -121
  769. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +0 -171
  770. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +0 -398
  771. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +0 -390
  772. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +0 -1478
  773. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +0 -800
  774. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +0 -605
  775. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +0 -831
  776. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +0 -46
  777. package/runtime/third_party/bearssl/src/ec/ec_default.c +0 -36
  778. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +0 -86
  779. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +0 -2124
  780. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +0 -1469
  781. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +0 -1765
  782. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +0 -1781
  783. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +0 -824
  784. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +0 -826
  785. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +0 -85
  786. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +0 -51
  787. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +0 -57
  788. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +0 -64
  789. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +0 -134
  790. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +0 -36
  791. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +0 -36
  792. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +0 -36
  793. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +0 -36
  794. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +0 -47
  795. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +0 -45
  796. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +0 -174
  797. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +0 -48
  798. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +0 -166
  799. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +0 -47
  800. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +0 -45
  801. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +0 -173
  802. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +0 -48
  803. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +0 -165
  804. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +0 -121
  805. package/runtime/third_party/bearssl/src/hash/dig_oid.c +0 -84
  806. package/runtime/third_party/bearssl/src/hash/dig_size.c +0 -50
  807. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +0 -345
  808. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +0 -251
  809. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +0 -154
  810. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +0 -389
  811. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +0 -411
  812. package/runtime/third_party/bearssl/src/hash/md5.c +0 -208
  813. package/runtime/third_party/bearssl/src/hash/md5sha1.c +0 -141
  814. package/runtime/third_party/bearssl/src/hash/mgf1.c +0 -56
  815. package/runtime/third_party/bearssl/src/hash/multihash.c +0 -166
  816. package/runtime/third_party/bearssl/src/hash/sha1.c +0 -191
  817. package/runtime/third_party/bearssl/src/hash/sha2big.c +0 -285
  818. package/runtime/third_party/bearssl/src/hash/sha2small.c +0 -341
  819. package/runtime/third_party/bearssl/src/inner.h +0 -2577
  820. package/runtime/third_party/bearssl/src/int/i15_add.c +0 -46
  821. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +0 -44
  822. package/runtime/third_party/bearssl/src/int/i15_decmod.c +0 -124
  823. package/runtime/third_party/bearssl/src/int/i15_decode.c +0 -56
  824. package/runtime/third_party/bearssl/src/int/i15_decred.c +0 -100
  825. package/runtime/third_party/bearssl/src/int/i15_encode.c +0 -56
  826. package/runtime/third_party/bearssl/src/int/i15_fmont.c +0 -59
  827. package/runtime/third_party/bearssl/src/int/i15_iszero.c +0 -39
  828. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +0 -465
  829. package/runtime/third_party/bearssl/src/int/i15_modpow.c +0 -50
  830. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +0 -160
  831. package/runtime/third_party/bearssl/src/int/i15_montmul.c +0 -184
  832. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +0 -61
  833. package/runtime/third_party/bearssl/src/int/i15_muladd.c +0 -173
  834. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +0 -38
  835. package/runtime/third_party/bearssl/src/int/i15_reduce.c +0 -66
  836. package/runtime/third_party/bearssl/src/int/i15_rshift.c +0 -47
  837. package/runtime/third_party/bearssl/src/int/i15_sub.c +0 -46
  838. package/runtime/third_party/bearssl/src/int/i15_tmont.c +0 -36
  839. package/runtime/third_party/bearssl/src/int/i31_add.c +0 -46
  840. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +0 -44
  841. package/runtime/third_party/bearssl/src/int/i31_decmod.c +0 -124
  842. package/runtime/third_party/bearssl/src/int/i31_decode.c +0 -57
  843. package/runtime/third_party/bearssl/src/int/i31_decred.c +0 -103
  844. package/runtime/third_party/bearssl/src/int/i31_encode.c +0 -79
  845. package/runtime/third_party/bearssl/src/int/i31_fmont.c +0 -60
  846. package/runtime/third_party/bearssl/src/int/i31_iszero.c +0 -39
  847. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +0 -488
  848. package/runtime/third_party/bearssl/src/int/i31_modpow.c +0 -65
  849. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +0 -160
  850. package/runtime/third_party/bearssl/src/int/i31_montmul.c +0 -127
  851. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +0 -74
  852. package/runtime/third_party/bearssl/src/int/i31_muladd.c +0 -157
  853. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +0 -39
  854. package/runtime/third_party/bearssl/src/int/i31_reduce.c +0 -66
  855. package/runtime/third_party/bearssl/src/int/i31_rshift.c +0 -47
  856. package/runtime/third_party/bearssl/src/int/i31_sub.c +0 -46
  857. package/runtime/third_party/bearssl/src/int/i31_tmont.c +0 -36
  858. package/runtime/third_party/bearssl/src/int/i32_add.c +0 -51
  859. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +0 -44
  860. package/runtime/third_party/bearssl/src/int/i32_decmod.c +0 -77
  861. package/runtime/third_party/bearssl/src/int/i32_decode.c +0 -63
  862. package/runtime/third_party/bearssl/src/int/i32_decred.c +0 -107
  863. package/runtime/third_party/bearssl/src/int/i32_div32.c +0 -56
  864. package/runtime/third_party/bearssl/src/int/i32_encode.c +0 -72
  865. package/runtime/third_party/bearssl/src/int/i32_fmont.c +0 -60
  866. package/runtime/third_party/bearssl/src/int/i32_iszero.c +0 -39
  867. package/runtime/third_party/bearssl/src/int/i32_modpow.c +0 -65
  868. package/runtime/third_party/bearssl/src/int/i32_montmul.c +0 -69
  869. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +0 -56
  870. package/runtime/third_party/bearssl/src/int/i32_muladd.c +0 -138
  871. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +0 -39
  872. package/runtime/third_party/bearssl/src/int/i32_reduce.c +0 -66
  873. package/runtime/third_party/bearssl/src/int/i32_sub.c +0 -51
  874. package/runtime/third_party/bearssl/src/int/i32_tmont.c +0 -36
  875. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +0 -493
  876. package/runtime/third_party/bearssl/src/kdf/hkdf.c +0 -107
  877. package/runtime/third_party/bearssl/src/kdf/shake.c +0 -590
  878. package/runtime/third_party/bearssl/src/mac/hmac.c +0 -122
  879. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +0 -193
  880. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +0 -206
  881. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +0 -157
  882. package/runtime/third_party/bearssl/src/rand/sysrng.c +0 -252
  883. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +0 -38
  884. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +0 -36
  885. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +0 -38
  886. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +0 -38
  887. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +0 -38
  888. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +0 -38
  889. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +0 -38
  890. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +0 -36
  891. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +0 -38
  892. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +0 -38
  893. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +0 -38
  894. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +0 -36
  895. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +0 -583
  896. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +0 -99
  897. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +0 -41
  898. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +0 -44
  899. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +0 -37
  900. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +0 -43
  901. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +0 -209
  902. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +0 -320
  903. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +0 -40
  904. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +0 -44
  905. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +0 -113
  906. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +0 -152
  907. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +0 -37
  908. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +0 -608
  909. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +0 -99
  910. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +0 -41
  911. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +0 -44
  912. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +0 -37
  913. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +0 -43
  914. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +0 -203
  915. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +0 -318
  916. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +0 -40
  917. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +0 -44
  918. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +0 -106
  919. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +0 -152
  920. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +0 -41
  921. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +0 -44
  922. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +0 -37
  923. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +0 -43
  924. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +0 -160
  925. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +0 -40
  926. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +0 -44
  927. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +0 -77
  928. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +0 -57
  929. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +0 -61
  930. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +0 -64
  931. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +0 -57
  932. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +0 -63
  933. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +0 -223
  934. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +0 -60
  935. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +0 -64
  936. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +0 -125
  937. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +0 -112
  938. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +0 -145
  939. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +0 -100
  940. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +0 -121
  941. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +0 -106
  942. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +0 -121
  943. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +0 -52
  944. package/runtime/third_party/bearssl/src/settings.c +0 -306
  945. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +0 -69
  946. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +0 -67
  947. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +0 -84
  948. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +0 -142
  949. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +0 -254
  950. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +0 -157
  951. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +0 -112
  952. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +0 -328
  953. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +0 -398
  954. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +0 -104
  955. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +0 -81
  956. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +0 -114
  957. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +0 -433
  958. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +0 -159
  959. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +0 -115
  960. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +0 -111
  961. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +0 -91
  962. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +0 -116
  963. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +0 -422
  964. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +0 -170
  965. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +0 -112
  966. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +0 -445
  967. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +0 -670
  968. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +0 -417
  969. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +0 -717
  970. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +0 -946
  971. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +0 -69
  972. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +0 -67
  973. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +0 -84
  974. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +0 -142
  975. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +0 -176
  976. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +0 -129
  977. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +0 -240
  978. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +0 -223
  979. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +0 -122
  980. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +0 -211
  981. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +0 -596
  982. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +0 -106
  983. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +0 -237
  984. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +0 -411
  985. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +0 -87
  986. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +0 -69
  987. package/runtime/third_party/bearssl/src/symcipher/des_support.c +0 -166
  988. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +0 -310
  989. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +0 -85
  990. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +0 -67
  991. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +0 -260
  992. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +0 -297
  993. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +0 -475
  994. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +0 -221
  995. package/runtime/third_party/bearssl/src/x509/asn1.t0 +0 -757
  996. package/runtime/third_party/bearssl/src/x509/asn1enc.c +0 -93
  997. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +0 -110
  998. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +0 -161
  999. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +0 -97
  1000. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +0 -96
  1001. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +0 -653
  1002. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +0 -376
  1003. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +0 -776
  1004. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +0 -324
  1005. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +0 -105
  1006. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +0 -1722
  1007. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +0 -1526
  1008. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +0 -59
@@ -0,0 +1,1328 @@
1
+ // Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
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/pkcs8.h>
16
+
17
+ #include <limits.h>
18
+
19
+ #include <openssl/asn1.h>
20
+ #include <openssl/asn1t.h>
21
+ #include <openssl/bio.h>
22
+ #include <openssl/buf.h>
23
+ #include <openssl/bytestring.h>
24
+ #include <openssl/cipher.h>
25
+ #include <openssl/digest.h>
26
+ #include <openssl/err.h>
27
+ #include <openssl/evp.h>
28
+ #include <openssl/hmac.h>
29
+ #include <openssl/mem.h>
30
+ #include <openssl/nid.h>
31
+ #include <openssl/rand.h>
32
+ #include <openssl/x509.h>
33
+
34
+ #include "../bytestring/internal.h"
35
+ #include "../internal.h"
36
+ #include "../mem_internal.h"
37
+ #include "../x509/internal.h"
38
+ #include "internal.h"
39
+
40
+
41
+ using namespace bssl;
42
+
43
+ int bssl::pkcs12_iterations_acceptable(uint64_t iterations) {
44
+ #if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
45
+ static const uint64_t kIterationsLimit = 2048;
46
+ #else
47
+ // Windows imposes a limit of 600K. Mozilla say: “so them increasing
48
+ // maximum to something like 100M or 1G (to have few decades of breathing
49
+ // room) would be very welcome”[1]. So here we set the limit to 100M.
50
+ //
51
+ // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1436873#c14
52
+ static const uint64_t kIterationsLimit = 100 * 1000000;
53
+ #endif
54
+
55
+ assert(kIterationsLimit <= UINT32_MAX);
56
+ return 0 < iterations && iterations <= kIterationsLimit;
57
+ }
58
+
59
+ ASN1_SEQUENCE(PKCS8_PRIV_KEY_INFO) = {
60
+ ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, version, ASN1_INTEGER),
61
+ ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkeyalg, X509_ALGOR),
62
+ ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkey, ASN1_OCTET_STRING),
63
+ ASN1_IMP_SET_OF_OPT(PKCS8_PRIV_KEY_INFO, attributes, bssl::X509_ATTRIBUTE,
64
+ 0),
65
+ } ASN1_SEQUENCE_END(PKCS8_PRIV_KEY_INFO)
66
+
67
+ IMPLEMENT_ASN1_FUNCTIONS_const(PKCS8_PRIV_KEY_INFO)
68
+
69
+ EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8) {
70
+ uint8_t *der = nullptr;
71
+ int der_len = i2d_PKCS8_PRIV_KEY_INFO(p8, &der);
72
+ if (der_len < 0) {
73
+ return nullptr;
74
+ }
75
+
76
+ CBS cbs;
77
+ CBS_init(&cbs, der, (size_t)der_len);
78
+ EVP_PKEY *ret = EVP_parse_private_key(&cbs);
79
+ if (ret == nullptr || CBS_len(&cbs) != 0) {
80
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
81
+ EVP_PKEY_free(ret);
82
+ OPENSSL_free(der);
83
+ return nullptr;
84
+ }
85
+
86
+ OPENSSL_free(der);
87
+ return ret;
88
+ }
89
+
90
+ PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey) {
91
+ CBB cbb;
92
+ uint8_t *der = nullptr;
93
+ size_t der_len;
94
+ if (!CBB_init(&cbb, 0) || !EVP_marshal_private_key(&cbb, pkey) ||
95
+ !CBB_finish(&cbb, &der, &der_len) || der_len > LONG_MAX) {
96
+ CBB_cleanup(&cbb);
97
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_ENCODE_ERROR);
98
+ OPENSSL_free(der);
99
+ return nullptr;
100
+ }
101
+
102
+ const uint8_t *p = der;
103
+ PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(nullptr, &p, (long)der_len);
104
+ if (p8 == nullptr || p != der + der_len) {
105
+ PKCS8_PRIV_KEY_INFO_free(p8);
106
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
107
+ goto err;
108
+ }
109
+
110
+ OPENSSL_free(der);
111
+ return p8;
112
+
113
+ err:
114
+ OPENSSL_free(der);
115
+ return nullptr;
116
+ }
117
+
118
+ PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(X509_SIG *pkcs8, const char *pass,
119
+ int pass_len_in) {
120
+ size_t pass_len;
121
+ if (pass_len_in == -1 && pass != nullptr) {
122
+ pass_len = strlen(pass);
123
+ } else {
124
+ pass_len = (size_t)pass_len_in;
125
+ }
126
+
127
+ PKCS8_PRIV_KEY_INFO *ret = nullptr;
128
+ EVP_PKEY *pkey = nullptr;
129
+ uint8_t *in = nullptr;
130
+
131
+ // Convert the legacy ASN.1 object to a byte string.
132
+ int in_len = i2d_X509_SIG(pkcs8, &in);
133
+ if (in_len < 0) {
134
+ goto err;
135
+ }
136
+
137
+ CBS cbs;
138
+ CBS_init(&cbs, in, in_len);
139
+ pkey = PKCS8_parse_encrypted_private_key(&cbs, pass, pass_len);
140
+ if (pkey == nullptr || CBS_len(&cbs) != 0) {
141
+ goto err;
142
+ }
143
+
144
+ ret = EVP_PKEY2PKCS8(pkey);
145
+
146
+ err:
147
+ OPENSSL_free(in);
148
+ EVP_PKEY_free(pkey);
149
+ return ret;
150
+ }
151
+
152
+ X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, const char *pass,
153
+ int pass_len_in, const uint8_t *salt, size_t salt_len,
154
+ int iterations, PKCS8_PRIV_KEY_INFO *p8inf) {
155
+ size_t pass_len;
156
+ if (pass_len_in == -1 && pass != nullptr) {
157
+ pass_len = strlen(pass);
158
+ } else {
159
+ pass_len = (size_t)pass_len_in;
160
+ }
161
+
162
+ // Parse out the private key.
163
+ EVP_PKEY *pkey = EVP_PKCS82PKEY(p8inf);
164
+ if (pkey == nullptr) {
165
+ return nullptr;
166
+ }
167
+
168
+ X509_SIG *ret = nullptr;
169
+ uint8_t *der = nullptr;
170
+ const uint8_t *ptr;
171
+ size_t der_len;
172
+ CBB cbb;
173
+ if (!CBB_init(&cbb, 128) ||
174
+ !PKCS8_marshal_encrypted_private_key(&cbb, pbe_nid, cipher, pass,
175
+ pass_len, salt, salt_len, iterations,
176
+ pkey) ||
177
+ !CBB_finish(&cbb, &der, &der_len)) {
178
+ CBB_cleanup(&cbb);
179
+ goto err;
180
+ }
181
+
182
+ // Convert back to legacy ASN.1 objects.
183
+ ptr = der;
184
+ ret = d2i_X509_SIG(nullptr, &ptr, der_len);
185
+ if (ret == nullptr || ptr != der + der_len) {
186
+ OPENSSL_PUT_ERROR(PKCS8, ERR_R_INTERNAL_ERROR);
187
+ X509_SIG_free(ret);
188
+ ret = nullptr;
189
+ }
190
+
191
+ err:
192
+ OPENSSL_free(der);
193
+ EVP_PKEY_free(pkey);
194
+ return ret;
195
+ }
196
+
197
+ struct pkcs12_context {
198
+ EVP_PKEY **out_key;
199
+ STACK_OF(X509) *out_certs;
200
+ const char *password;
201
+ size_t password_len;
202
+ };
203
+
204
+ // PKCS12_handle_sequence parses a BER-encoded SEQUENCE of elements in a PKCS#12
205
+ // structure.
206
+ static int PKCS12_handle_sequence(
207
+ CBS *sequence, struct pkcs12_context *ctx,
208
+ int (*handle_element)(CBS *cbs, struct pkcs12_context *ctx)) {
209
+ uint8_t *storage = nullptr;
210
+ CBS in;
211
+ int ret = 0;
212
+
213
+ // Although a BER->DER conversion is done at the beginning of `PKCS12_parse`,
214
+ // the ASN.1 data gets wrapped in OCTETSTRINGs and/or encrypted and the
215
+ // conversion cannot see through those wrappings. So each time we step
216
+ // through one we need to convert to DER again.
217
+ if (!CBS_asn1_ber_to_der(sequence, &in, &storage)) {
218
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
219
+ return 0;
220
+ }
221
+
222
+ CBS child;
223
+ if (!CBS_get_asn1(&in, &child, CBS_ASN1_SEQUENCE) || CBS_len(&in) != 0) {
224
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
225
+ goto err;
226
+ }
227
+
228
+ while (CBS_len(&child) > 0) {
229
+ CBS element;
230
+ if (!CBS_get_asn1(&child, &element, CBS_ASN1_SEQUENCE)) {
231
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
232
+ goto err;
233
+ }
234
+
235
+ if (!handle_element(&element, ctx)) {
236
+ goto err;
237
+ }
238
+ }
239
+
240
+ ret = 1;
241
+
242
+ err:
243
+ OPENSSL_free(storage);
244
+ return ret;
245
+ }
246
+
247
+ // 1.2.840.113549.1.12.10.1.1
248
+ static const uint8_t kKeyBag[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
249
+ 0x01, 0x0c, 0x0a, 0x01, 0x01};
250
+
251
+ // 1.2.840.113549.1.12.10.1.2
252
+ static const uint8_t kPKCS8ShroudedKeyBag[] = {
253
+ 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, 0x02};
254
+
255
+ // 1.2.840.113549.1.12.10.1.3
256
+ static const uint8_t kCertBag[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
257
+ 0x01, 0x0c, 0x0a, 0x01, 0x03};
258
+
259
+ // 1.2.840.113549.1.9.20
260
+ static const uint8_t kFriendlyName[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
261
+ 0x0d, 0x01, 0x09, 0x14};
262
+
263
+ // 1.2.840.113549.1.9.21
264
+ static const uint8_t kLocalKeyID[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
265
+ 0x0d, 0x01, 0x09, 0x15};
266
+
267
+ // 1.2.840.113549.1.9.22.1
268
+ static const uint8_t kX509Certificate[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
269
+ 0x0d, 0x01, 0x09, 0x16, 0x01};
270
+
271
+ // parse_bag_attributes parses the bagAttributes field of a SafeBag structure.
272
+ // It sets `*out_friendly_name` to a newly-allocated copy of the friendly name,
273
+ // encoded as a UTF-8 string, or NULL if there is none. It returns one on
274
+ // success and zero on error.
275
+ static int parse_bag_attributes(CBS *attrs, uint8_t **out_friendly_name,
276
+ size_t *out_friendly_name_len) {
277
+ *out_friendly_name = nullptr;
278
+ *out_friendly_name_len = 0;
279
+
280
+ // See https://tools.ietf.org/html/rfc7292#section-4.2.
281
+ while (CBS_len(attrs) != 0) {
282
+ CBS attr, oid, values;
283
+ if (!CBS_get_asn1(attrs, &attr, CBS_ASN1_SEQUENCE) ||
284
+ !CBS_get_asn1(&attr, &oid, CBS_ASN1_OBJECT) ||
285
+ !CBS_get_asn1(&attr, &values, CBS_ASN1_SET) || CBS_len(&attr) != 0) {
286
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
287
+ goto err;
288
+ }
289
+ if (CBS_mem_equal(&oid, kFriendlyName, sizeof(kFriendlyName))) {
290
+ // See https://tools.ietf.org/html/rfc2985, section 5.5.1.
291
+ CBS value;
292
+ if (*out_friendly_name != nullptr ||
293
+ !CBS_get_asn1(&values, &value, CBS_ASN1_BMPSTRING) ||
294
+ CBS_len(&values) != 0 || CBS_len(&value) == 0) {
295
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
296
+ goto err;
297
+ }
298
+ // Convert the friendly name to UTF-8.
299
+ CBB cbb;
300
+ if (!CBB_init(&cbb, CBS_len(&value))) {
301
+ goto err;
302
+ }
303
+ while (CBS_len(&value) != 0) {
304
+ uint32_t c;
305
+ if (!CBS_get_ucs2_be(&value, &c) || !CBB_add_utf8(&cbb, c)) {
306
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_INVALID_CHARACTERS);
307
+ CBB_cleanup(&cbb);
308
+ goto err;
309
+ }
310
+ }
311
+ if (!CBB_finish(&cbb, out_friendly_name, out_friendly_name_len)) {
312
+ CBB_cleanup(&cbb);
313
+ goto err;
314
+ }
315
+ }
316
+ }
317
+
318
+ return 1;
319
+
320
+ err:
321
+ OPENSSL_free(*out_friendly_name);
322
+ *out_friendly_name = nullptr;
323
+ *out_friendly_name_len = 0;
324
+ return 0;
325
+ }
326
+
327
+ // PKCS12_handle_safe_bag parses a single SafeBag element in a PKCS#12
328
+ // structure.
329
+ static int PKCS12_handle_safe_bag(CBS *safe_bag, struct pkcs12_context *ctx) {
330
+ CBS bag_id, wrapped_value, bag_attrs;
331
+ if (!CBS_get_asn1(safe_bag, &bag_id, CBS_ASN1_OBJECT) ||
332
+ !CBS_get_asn1(safe_bag, &wrapped_value,
333
+ CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
334
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
335
+ return 0;
336
+ }
337
+ if (CBS_len(safe_bag) == 0) {
338
+ CBS_init(&bag_attrs, nullptr, 0);
339
+ } else if (!CBS_get_asn1(safe_bag, &bag_attrs, CBS_ASN1_SET) ||
340
+ CBS_len(safe_bag) != 0) {
341
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
342
+ return 0;
343
+ }
344
+
345
+ const int is_key_bag = CBS_mem_equal(&bag_id, kKeyBag, sizeof(kKeyBag));
346
+ const int is_shrouded_key_bag = CBS_mem_equal(&bag_id, kPKCS8ShroudedKeyBag,
347
+ sizeof(kPKCS8ShroudedKeyBag));
348
+ if (is_key_bag || is_shrouded_key_bag) {
349
+ // See RFC 7292, section 4.2.1 and 4.2.2.
350
+ if (*ctx->out_key) {
351
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_MULTIPLE_PRIVATE_KEYS_IN_PKCS12);
352
+ return 0;
353
+ }
354
+
355
+ EVP_PKEY *pkey =
356
+ is_key_bag ? EVP_parse_private_key(&wrapped_value)
357
+ : PKCS8_parse_encrypted_private_key(
358
+ &wrapped_value, ctx->password, ctx->password_len);
359
+ if (pkey == nullptr) {
360
+ return 0;
361
+ }
362
+
363
+ if (CBS_len(&wrapped_value) != 0) {
364
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
365
+ EVP_PKEY_free(pkey);
366
+ return 0;
367
+ }
368
+
369
+ *ctx->out_key = pkey;
370
+ return 1;
371
+ }
372
+
373
+ if (CBS_mem_equal(&bag_id, kCertBag, sizeof(kCertBag))) {
374
+ // See RFC 7292, section 4.2.3.
375
+ CBS cert_bag, cert_type, wrapped_cert, cert;
376
+ if (!CBS_get_asn1(&wrapped_value, &cert_bag, CBS_ASN1_SEQUENCE) ||
377
+ !CBS_get_asn1(&cert_bag, &cert_type, CBS_ASN1_OBJECT) ||
378
+ !CBS_get_asn1(&cert_bag, &wrapped_cert,
379
+ CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
380
+ !CBS_get_asn1(&wrapped_cert, &cert, CBS_ASN1_OCTETSTRING)) {
381
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
382
+ return 0;
383
+ }
384
+
385
+ // Skip unknown certificate types.
386
+ if (!CBS_mem_equal(&cert_type, kX509Certificate,
387
+ sizeof(kX509Certificate))) {
388
+ return 1;
389
+ }
390
+
391
+ if (CBS_len(&cert) > LONG_MAX) {
392
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
393
+ return 0;
394
+ }
395
+
396
+ const uint8_t *inp = CBS_data(&cert);
397
+ X509 *x509 = d2i_X509(nullptr, &inp, (long)CBS_len(&cert));
398
+ if (!x509) {
399
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
400
+ return 0;
401
+ }
402
+
403
+ if (inp != CBS_data(&cert) + CBS_len(&cert)) {
404
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
405
+ X509_free(x509);
406
+ return 0;
407
+ }
408
+
409
+ uint8_t *friendly_name;
410
+ size_t friendly_name_len;
411
+ if (!parse_bag_attributes(&bag_attrs, &friendly_name, &friendly_name_len)) {
412
+ X509_free(x509);
413
+ return 0;
414
+ }
415
+ int ok = friendly_name_len == 0 ||
416
+ X509_alias_set1(x509, friendly_name, friendly_name_len);
417
+ OPENSSL_free(friendly_name);
418
+ if (!ok || 0 == sk_X509_push(ctx->out_certs, x509)) {
419
+ X509_free(x509);
420
+ return 0;
421
+ }
422
+
423
+ return 1;
424
+ }
425
+
426
+ // Unknown element type - ignore it.
427
+ return 1;
428
+ }
429
+
430
+ // 1.2.840.113549.1.7.1
431
+ static const uint8_t kPKCS7Data[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
432
+ 0x0d, 0x01, 0x07, 0x01};
433
+
434
+ // 1.2.840.113549.1.7.6
435
+ static const uint8_t kPKCS7EncryptedData[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
436
+ 0x0d, 0x01, 0x07, 0x06};
437
+
438
+ // PKCS12_handle_content_info parses a single PKCS#7 ContentInfo element in a
439
+ // PKCS#12 structure.
440
+ static int PKCS12_handle_content_info(CBS *content_info,
441
+ struct pkcs12_context *ctx) {
442
+ CBS content_type, wrapped_contents, contents;
443
+ int ret = 0;
444
+ uint8_t *storage = nullptr;
445
+
446
+ if (!CBS_get_asn1(content_info, &content_type, CBS_ASN1_OBJECT) ||
447
+ !CBS_get_asn1(content_info, &wrapped_contents,
448
+ CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
449
+ CBS_len(content_info) != 0) {
450
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
451
+ goto err;
452
+ }
453
+
454
+ if (CBS_mem_equal(&content_type, kPKCS7EncryptedData,
455
+ sizeof(kPKCS7EncryptedData))) {
456
+ // See https://tools.ietf.org/html/rfc2315#section-13.
457
+ //
458
+ // PKCS#7 encrypted data inside a PKCS#12 structure is generally an
459
+ // encrypted certificate bag and it's generally encrypted with 40-bit
460
+ // RC2-CBC.
461
+ CBS version_bytes, eci, contents_type, ai, encrypted_contents;
462
+ uint8_t *out;
463
+ size_t out_len;
464
+
465
+ if (!CBS_get_asn1(&wrapped_contents, &contents, CBS_ASN1_SEQUENCE) ||
466
+ !CBS_get_asn1(&contents, &version_bytes, CBS_ASN1_INTEGER) ||
467
+ // EncryptedContentInfo, see
468
+ // https://tools.ietf.org/html/rfc2315#section-10.1
469
+ !CBS_get_asn1(&contents, &eci, CBS_ASN1_SEQUENCE) ||
470
+ !CBS_get_asn1(&eci, &contents_type, CBS_ASN1_OBJECT) ||
471
+ // AlgorithmIdentifier, see
472
+ // https://tools.ietf.org/html/rfc5280#section-4.1.1.2
473
+ !CBS_get_asn1(&eci, &ai, CBS_ASN1_SEQUENCE) ||
474
+ !CBS_get_asn1_implicit_string(&eci, &encrypted_contents, &storage,
475
+ CBS_ASN1_CONTEXT_SPECIFIC | 0,
476
+ CBS_ASN1_OCTETSTRING)) {
477
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
478
+ goto err;
479
+ }
480
+
481
+ if (!CBS_mem_equal(&contents_type, kPKCS7Data, sizeof(kPKCS7Data))) {
482
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
483
+ goto err;
484
+ }
485
+
486
+ if (!pkcs8_pbe_decrypt(&out, &out_len, &ai, ctx->password,
487
+ ctx->password_len, CBS_data(&encrypted_contents),
488
+ CBS_len(&encrypted_contents))) {
489
+ goto err;
490
+ }
491
+
492
+ CBS safe_contents;
493
+ CBS_init(&safe_contents, out, out_len);
494
+ ret = PKCS12_handle_sequence(&safe_contents, ctx, PKCS12_handle_safe_bag);
495
+ OPENSSL_free(out);
496
+ } else if (CBS_mem_equal(&content_type, kPKCS7Data, sizeof(kPKCS7Data))) {
497
+ CBS octet_string_contents;
498
+
499
+ if (!CBS_get_asn1(&wrapped_contents, &octet_string_contents,
500
+ CBS_ASN1_OCTETSTRING)) {
501
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
502
+ goto err;
503
+ }
504
+
505
+ ret = PKCS12_handle_sequence(&octet_string_contents, ctx,
506
+ PKCS12_handle_safe_bag);
507
+ } else {
508
+ // Unknown element type - ignore it.
509
+ ret = 1;
510
+ }
511
+
512
+ err:
513
+ OPENSSL_free(storage);
514
+ return ret;
515
+ }
516
+
517
+ static int pkcs12_check_mac(int *out_mac_ok, const char *password,
518
+ size_t password_len, const CBS *salt,
519
+ uint32_t iterations, const EVP_MD *md,
520
+ const CBS *authsafes, const CBS *expected_mac) {
521
+ int ret = 0;
522
+ uint8_t hmac_key[EVP_MAX_MD_SIZE];
523
+ if (!pkcs12_key_gen(password, password_len, CBS_data(salt), CBS_len(salt),
524
+ PKCS12_MAC_ID, iterations, EVP_MD_size(md), hmac_key,
525
+ md)) {
526
+ goto err;
527
+ }
528
+
529
+ uint8_t hmac[EVP_MAX_MD_SIZE];
530
+ unsigned hmac_len;
531
+ if (nullptr == HMAC(md, hmac_key, EVP_MD_size(md), CBS_data(authsafes),
532
+ CBS_len(authsafes), hmac, &hmac_len)) {
533
+ goto err;
534
+ }
535
+
536
+ *out_mac_ok = CBS_mem_equal(expected_mac, hmac, hmac_len);
537
+ if (CRYPTO_fuzzer_mode_enabled()) {
538
+ *out_mac_ok = 1;
539
+ }
540
+ ret = 1;
541
+
542
+ err:
543
+ OPENSSL_cleanse(hmac_key, sizeof(hmac_key));
544
+ return ret;
545
+ }
546
+
547
+
548
+ int PKCS12_get_key_and_certs(EVP_PKEY **out_key, STACK_OF(X509) *out_certs,
549
+ CBS *ber_in, const char *password) {
550
+ uint8_t *storage = nullptr;
551
+ CBS in, pfx, mac_data, authsafe, content_type, wrapped_authsafes, authsafes;
552
+ uint64_t version;
553
+ int ret = 0;
554
+ struct pkcs12_context ctx;
555
+ const size_t original_out_certs_len = sk_X509_num(out_certs);
556
+
557
+ // The input may be in BER format.
558
+ if (!CBS_asn1_ber_to_der(ber_in, &in, &storage)) {
559
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
560
+ return 0;
561
+ }
562
+
563
+ *out_key = nullptr;
564
+ OPENSSL_memset(&ctx, 0, sizeof(ctx));
565
+
566
+ // See ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12v1.pdf, section
567
+ // four.
568
+ if (!CBS_get_asn1(&in, &pfx, CBS_ASN1_SEQUENCE) || CBS_len(&in) != 0 ||
569
+ !CBS_get_asn1_uint64(&pfx, &version)) {
570
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
571
+ goto err;
572
+ }
573
+
574
+ if (version < 3) {
575
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_VERSION);
576
+ goto err;
577
+ }
578
+
579
+ if (!CBS_get_asn1(&pfx, &authsafe, CBS_ASN1_SEQUENCE)) {
580
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
581
+ goto err;
582
+ }
583
+
584
+ if (CBS_len(&pfx) == 0) {
585
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_MISSING_MAC);
586
+ goto err;
587
+ }
588
+
589
+ if (!CBS_get_asn1(&pfx, &mac_data, CBS_ASN1_SEQUENCE)) {
590
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
591
+ goto err;
592
+ }
593
+
594
+ // authsafe is a PKCS#7 ContentInfo. See
595
+ // https://tools.ietf.org/html/rfc2315#section-7.
596
+ if (!CBS_get_asn1(&authsafe, &content_type, CBS_ASN1_OBJECT) ||
597
+ !CBS_get_asn1(&authsafe, &wrapped_authsafes,
598
+ CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
599
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
600
+ goto err;
601
+ }
602
+
603
+ // The content type can either be data or signedData. The latter indicates
604
+ // that it's signed by a public key, which isn't supported.
605
+ if (!CBS_mem_equal(&content_type, kPKCS7Data, sizeof(kPKCS7Data))) {
606
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED);
607
+ goto err;
608
+ }
609
+
610
+ if (!CBS_get_asn1(&wrapped_authsafes, &authsafes, CBS_ASN1_OCTETSTRING)) {
611
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
612
+ goto err;
613
+ }
614
+
615
+ ctx.out_key = out_key;
616
+ ctx.out_certs = out_certs;
617
+ ctx.password = password;
618
+ ctx.password_len = password != nullptr ? strlen(password) : 0;
619
+
620
+ // Verify the MAC.
621
+ {
622
+ CBS mac, salt, expected_mac;
623
+ if (!CBS_get_asn1(&mac_data, &mac, CBS_ASN1_SEQUENCE)) {
624
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
625
+ goto err;
626
+ }
627
+
628
+ const EVP_MD *md = EVP_parse_digest_algorithm(&mac);
629
+ if (md == nullptr) {
630
+ goto err;
631
+ }
632
+
633
+ if (!CBS_get_asn1(&mac, &expected_mac, CBS_ASN1_OCTETSTRING) ||
634
+ !CBS_get_asn1(&mac_data, &salt, CBS_ASN1_OCTETSTRING)) {
635
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
636
+ goto err;
637
+ }
638
+
639
+ // The iteration count is optional and the default is one.
640
+ uint32_t iterations = 1;
641
+ if (CBS_len(&mac_data) > 0) {
642
+ uint64_t iterations_u64;
643
+ if (!CBS_get_asn1_uint64(&mac_data, &iterations_u64) ||
644
+ !pkcs12_iterations_acceptable(iterations_u64)) {
645
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
646
+ goto err;
647
+ }
648
+ iterations = (uint32_t)iterations_u64;
649
+ }
650
+
651
+ int mac_ok;
652
+ if (!pkcs12_check_mac(&mac_ok, ctx.password, ctx.password_len, &salt,
653
+ iterations, md, &authsafes, &expected_mac)) {
654
+ goto err;
655
+ }
656
+ if (!mac_ok && ctx.password_len == 0) {
657
+ // PKCS#12 encodes passwords as NUL-terminated UCS-2, so the empty
658
+ // password is encoded as {0, 0}. Some implementations use the empty byte
659
+ // array for "no password". OpenSSL considers a non-NULL password as {0,
660
+ // 0} and a NULL password as {}. It then, in high-level PKCS#12 parsing
661
+ // code, tries both options. We match this behavior.
662
+ ctx.password = ctx.password != nullptr ? nullptr : "";
663
+ if (!pkcs12_check_mac(&mac_ok, ctx.password, ctx.password_len, &salt,
664
+ iterations, md, &authsafes, &expected_mac)) {
665
+ goto err;
666
+ }
667
+ }
668
+ if (!mac_ok) {
669
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_INCORRECT_PASSWORD);
670
+ goto err;
671
+ }
672
+ }
673
+
674
+ // authsafes contains a series of PKCS#7 ContentInfos.
675
+ if (!PKCS12_handle_sequence(&authsafes, &ctx, PKCS12_handle_content_info)) {
676
+ goto err;
677
+ }
678
+
679
+ ret = 1;
680
+
681
+ err:
682
+ OPENSSL_free(storage);
683
+ if (!ret) {
684
+ EVP_PKEY_free(*out_key);
685
+ *out_key = nullptr;
686
+ while (sk_X509_num(out_certs) > original_out_certs_len) {
687
+ X509 *x509 = sk_X509_pop(out_certs);
688
+ X509_free(x509);
689
+ }
690
+ }
691
+
692
+ return ret;
693
+ }
694
+
695
+ void PKCS12_PBE_add() {}
696
+
697
+ struct pkcs12_st {
698
+ uint8_t *ber_bytes;
699
+ size_t ber_len;
700
+ };
701
+
702
+ PKCS12 *d2i_PKCS12(PKCS12 **out_p12, const uint8_t **ber_bytes,
703
+ size_t ber_len) {
704
+ PKCS12 *p12 = New<PKCS12>();
705
+ if (!p12) {
706
+ return nullptr;
707
+ }
708
+
709
+ p12->ber_bytes =
710
+ reinterpret_cast<uint8_t *>(OPENSSL_memdup(*ber_bytes, ber_len));
711
+ if (!p12->ber_bytes) {
712
+ Delete(p12);
713
+ return nullptr;
714
+ }
715
+
716
+ p12->ber_len = ber_len;
717
+ *ber_bytes += ber_len;
718
+
719
+ if (out_p12) {
720
+ PKCS12_free(*out_p12);
721
+ *out_p12 = p12;
722
+ }
723
+
724
+ return p12;
725
+ }
726
+
727
+ PKCS12 *d2i_PKCS12_bio(BIO *bio, PKCS12 **out_p12) {
728
+ size_t used = 0;
729
+ BUF_MEM *buf;
730
+ const uint8_t *dummy;
731
+ static const size_t kMaxSize = 256 * 1024;
732
+ PKCS12 *ret = nullptr;
733
+
734
+ buf = BUF_MEM_new();
735
+ if (buf == nullptr) {
736
+ return nullptr;
737
+ }
738
+ if (BUF_MEM_grow(buf, 8192) == 0) {
739
+ goto out;
740
+ }
741
+
742
+ for (;;) {
743
+ size_t max_read = buf->length - used;
744
+ int n = BIO_read(bio, &buf->data[used],
745
+ max_read > INT_MAX ? INT_MAX : (int)max_read);
746
+ if (n < 0) {
747
+ if (used == 0) {
748
+ goto out;
749
+ }
750
+ // Workaround a bug in node.js. It uses a memory BIO for this in the wrong
751
+ // mode.
752
+ n = 0;
753
+ }
754
+
755
+ if (n == 0) {
756
+ break;
757
+ }
758
+ used += n;
759
+
760
+ if (used < buf->length) {
761
+ continue;
762
+ }
763
+
764
+ if (buf->length > kMaxSize || BUF_MEM_grow(buf, buf->length * 2) == 0) {
765
+ goto out;
766
+ }
767
+ }
768
+
769
+ dummy = (uint8_t *)buf->data;
770
+ ret = d2i_PKCS12(out_p12, &dummy, used);
771
+
772
+ out:
773
+ BUF_MEM_free(buf);
774
+ return ret;
775
+ }
776
+
777
+ PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **out_p12) {
778
+ BIO *bio;
779
+ PKCS12 *ret;
780
+
781
+ bio = BIO_new_fp(fp, 0 /* don't take ownership */);
782
+ if (!bio) {
783
+ return nullptr;
784
+ }
785
+
786
+ ret = d2i_PKCS12_bio(bio, out_p12);
787
+ BIO_free(bio);
788
+ return ret;
789
+ }
790
+
791
+ int i2d_PKCS12(const PKCS12 *p12, uint8_t **out) {
792
+ if (p12->ber_len > INT_MAX) {
793
+ OPENSSL_PUT_ERROR(PKCS8, ERR_R_OVERFLOW);
794
+ return -1;
795
+ }
796
+
797
+ if (out == nullptr) {
798
+ return (int)p12->ber_len;
799
+ }
800
+
801
+ if (*out == nullptr) {
802
+ *out = reinterpret_cast<uint8_t *>(
803
+ OPENSSL_memdup(p12->ber_bytes, p12->ber_len));
804
+ if (*out == nullptr) {
805
+ return -1;
806
+ }
807
+ } else {
808
+ OPENSSL_memcpy(*out, p12->ber_bytes, p12->ber_len);
809
+ *out += p12->ber_len;
810
+ }
811
+ return (int)p12->ber_len;
812
+ }
813
+
814
+ int i2d_PKCS12_bio(BIO *bio, const PKCS12 *p12) {
815
+ return BIO_write_all(bio, p12->ber_bytes, p12->ber_len);
816
+ }
817
+
818
+ int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12) {
819
+ BIO *bio = BIO_new_fp(fp, 0 /* don't take ownership */);
820
+ if (bio == nullptr) {
821
+ return 0;
822
+ }
823
+
824
+ int ret = i2d_PKCS12_bio(bio, p12);
825
+ BIO_free(bio);
826
+ return ret;
827
+ }
828
+
829
+ int PKCS12_parse(const PKCS12 *p12, const char *password, EVP_PKEY **out_pkey,
830
+ X509 **out_cert, STACK_OF(X509) **out_ca_certs) {
831
+ CBS ber_bytes;
832
+ STACK_OF(X509) *ca_certs = nullptr;
833
+ char ca_certs_alloced = 0;
834
+
835
+ if (out_ca_certs != nullptr && *out_ca_certs != nullptr) {
836
+ ca_certs = *out_ca_certs;
837
+ }
838
+
839
+ if (!ca_certs) {
840
+ ca_certs = sk_X509_new_null();
841
+ if (ca_certs == nullptr) {
842
+ return 0;
843
+ }
844
+ ca_certs_alloced = 1;
845
+ }
846
+
847
+ CBS_init(&ber_bytes, p12->ber_bytes, p12->ber_len);
848
+ if (!PKCS12_get_key_and_certs(out_pkey, ca_certs, &ber_bytes, password)) {
849
+ if (ca_certs_alloced) {
850
+ sk_X509_free(ca_certs);
851
+ }
852
+ return 0;
853
+ }
854
+
855
+ // OpenSSL selects the last certificate which matches the private key as
856
+ // `out_cert`.
857
+ *out_cert = nullptr;
858
+ size_t num_certs = sk_X509_num(ca_certs);
859
+ if (*out_pkey != nullptr && num_certs > 0) {
860
+ for (size_t i = num_certs - 1; i < num_certs; i--) {
861
+ X509 *cert = sk_X509_value(ca_certs, i);
862
+ if (X509_check_private_key(cert, *out_pkey)) {
863
+ *out_cert = cert;
864
+ sk_X509_delete(ca_certs, i);
865
+ break;
866
+ }
867
+ ERR_clear_error();
868
+ }
869
+ }
870
+
871
+ if (out_ca_certs) {
872
+ *out_ca_certs = ca_certs;
873
+ } else {
874
+ sk_X509_pop_free(ca_certs, X509_free);
875
+ }
876
+
877
+ return 1;
878
+ }
879
+
880
+ int PKCS12_verify_mac(const PKCS12 *p12, const char *password,
881
+ int password_len) {
882
+ if (password == nullptr) {
883
+ if (password_len != 0) {
884
+ return 0;
885
+ }
886
+ } else if (password_len != -1 &&
887
+ (password[password_len] != 0 ||
888
+ OPENSSL_memchr(password, 0, password_len) != nullptr)) {
889
+ return 0;
890
+ }
891
+
892
+ EVP_PKEY *pkey = nullptr;
893
+ X509 *cert = nullptr;
894
+ if (!PKCS12_parse(p12, password, &pkey, &cert, nullptr)) {
895
+ ERR_clear_error();
896
+ return 0;
897
+ }
898
+
899
+ EVP_PKEY_free(pkey);
900
+ X509_free(cert);
901
+
902
+ return 1;
903
+ }
904
+
905
+ // add_bag_attributes adds the bagAttributes field of a SafeBag structure,
906
+ // containing the specified friendlyName and localKeyId attributes.
907
+ static int add_bag_attributes(CBB *bag, const char *name, size_t name_len,
908
+ const uint8_t *key_id, size_t key_id_len) {
909
+ if (name == nullptr && key_id_len == 0) {
910
+ return 1; // Omit the OPTIONAL SET.
911
+ }
912
+ // See https://tools.ietf.org/html/rfc7292#section-4.2.
913
+ CBB attrs, attr, values, value;
914
+ if (!CBB_add_asn1(bag, &attrs, CBS_ASN1_SET)) {
915
+ return 0;
916
+ }
917
+ if (name_len != 0) {
918
+ // See https://tools.ietf.org/html/rfc2985, section 5.5.1.
919
+ if (!CBB_add_asn1(&attrs, &attr, CBS_ASN1_SEQUENCE) ||
920
+ !CBB_add_asn1_element(&attr, CBS_ASN1_OBJECT, kFriendlyName,
921
+ sizeof(kFriendlyName)) ||
922
+ !CBB_add_asn1(&attr, &values, CBS_ASN1_SET) ||
923
+ !CBB_add_asn1(&values, &value, CBS_ASN1_BMPSTRING)) {
924
+ return 0;
925
+ }
926
+ // Convert the friendly name to a BMPString.
927
+ CBS name_cbs;
928
+ CBS_init(&name_cbs, (const uint8_t *)name, name_len);
929
+ while (CBS_len(&name_cbs) != 0) {
930
+ uint32_t c;
931
+ if (!CBS_get_utf8(&name_cbs, &c) || !CBB_add_ucs2_be(&value, c)) {
932
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_INVALID_CHARACTERS);
933
+ return 0;
934
+ }
935
+ }
936
+ }
937
+ if (key_id_len != 0) {
938
+ // See https://tools.ietf.org/html/rfc2985, section 5.5.2.
939
+ if (!CBB_add_asn1(&attrs, &attr, CBS_ASN1_SEQUENCE) ||
940
+ !CBB_add_asn1_element(&attr, CBS_ASN1_OBJECT, kLocalKeyID,
941
+ sizeof(kLocalKeyID)) ||
942
+ !CBB_add_asn1(&attr, &values, CBS_ASN1_SET) ||
943
+ !CBB_add_asn1_octet_string(&values, key_id, key_id_len)) {
944
+ return 0;
945
+ }
946
+ }
947
+ return CBB_flush_asn1_set_of(&attrs) && CBB_flush(bag);
948
+ }
949
+
950
+ static int add_cert_bag(CBB *cbb, X509 *cert, const char *name,
951
+ const uint8_t *key_id, size_t key_id_len) {
952
+ CBB bag, bag_contents, cert_bag, wrapped_cert, cert_value;
953
+ if ( // See https://tools.ietf.org/html/rfc7292#section-4.2.
954
+ !CBB_add_asn1(cbb, &bag, CBS_ASN1_SEQUENCE) ||
955
+ !CBB_add_asn1_element(&bag, CBS_ASN1_OBJECT, kCertBag,
956
+ sizeof(kCertBag)) ||
957
+ !CBB_add_asn1(&bag, &bag_contents,
958
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
959
+ // See https://tools.ietf.org/html/rfc7292#section-4.2.3.
960
+ !CBB_add_asn1(&bag_contents, &cert_bag, CBS_ASN1_SEQUENCE) ||
961
+ !CBB_add_asn1_element(&cert_bag, CBS_ASN1_OBJECT, kX509Certificate,
962
+ sizeof(kX509Certificate)) ||
963
+ !CBB_add_asn1(&cert_bag, &wrapped_cert,
964
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
965
+ !CBB_add_asn1(&wrapped_cert, &cert_value, CBS_ASN1_OCTETSTRING)) {
966
+ return 0;
967
+ }
968
+ uint8_t *buf;
969
+ int len = i2d_X509(cert, nullptr);
970
+
971
+ int int_name_len = 0;
972
+ const char *cert_name = (const char *)X509_alias_get0(cert, &int_name_len);
973
+ size_t name_len = int_name_len;
974
+ if (name) {
975
+ if (name_len != 0) {
976
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_AMBIGUOUS_FRIENDLY_NAME);
977
+ return 0;
978
+ }
979
+ name_len = strlen(name);
980
+ } else {
981
+ name = cert_name;
982
+ }
983
+
984
+ if (len < 0 || !CBB_add_space(&cert_value, &buf, (size_t)len) ||
985
+ i2d_X509(cert, &buf) < 0 ||
986
+ !add_bag_attributes(&bag, name, name_len, key_id, key_id_len) ||
987
+ !CBB_flush(cbb)) {
988
+ return 0;
989
+ }
990
+ return 1;
991
+ }
992
+
993
+ static int add_cert_safe_contents(CBB *cbb, X509 *cert,
994
+ const STACK_OF(X509) *chain, const char *name,
995
+ const uint8_t *key_id, size_t key_id_len) {
996
+ CBB safe_contents;
997
+ if (!CBB_add_asn1(cbb, &safe_contents, CBS_ASN1_SEQUENCE) ||
998
+ (cert != nullptr &&
999
+ !add_cert_bag(&safe_contents, cert, name, key_id, key_id_len))) {
1000
+ return 0;
1001
+ }
1002
+
1003
+ for (size_t i = 0; i < sk_X509_num(chain); i++) {
1004
+ // Only the leaf certificate gets attributes.
1005
+ if (!add_cert_bag(&safe_contents, sk_X509_value(chain, i), nullptr, nullptr,
1006
+ 0)) {
1007
+ return 0;
1008
+ }
1009
+ }
1010
+
1011
+ return CBB_flush(cbb);
1012
+ }
1013
+
1014
+ // add_encrypted_data encrypts `in` with `pbe_nid` and `pbe_cipher`, writing the
1015
+ // result to `out`. It returns one on success and zero on error. `pbe_nid` and
1016
+ // `pbe_cipher` are interpreted as in `PKCS8_encrypt`.
1017
+ static int add_encrypted_data(CBB *out, int pbe_nid,
1018
+ const EVP_CIPHER *pbe_cipher,
1019
+ const char *password, size_t password_len,
1020
+ uint32_t iterations, const uint8_t *in,
1021
+ size_t in_len) {
1022
+ uint8_t salt[PKCS5_SALT_LEN];
1023
+ if (!RAND_bytes(salt, sizeof(salt))) {
1024
+ return 0;
1025
+ }
1026
+
1027
+ ScopedEVP_CIPHER_CTX ctx;
1028
+ CBB content_info, wrapper, encrypted_data, encrypted_content_info,
1029
+ encrypted_content;
1030
+ if ( // Add the ContentInfo wrapping.
1031
+ !CBB_add_asn1(out, &content_info, CBS_ASN1_SEQUENCE) ||
1032
+ !CBB_add_asn1_element(&content_info, CBS_ASN1_OBJECT, kPKCS7EncryptedData,
1033
+ sizeof(kPKCS7EncryptedData)) ||
1034
+ !CBB_add_asn1(&content_info, &wrapper,
1035
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1036
+ // See https://tools.ietf.org/html/rfc2315#section-13.
1037
+ !CBB_add_asn1(&wrapper, &encrypted_data, CBS_ASN1_SEQUENCE) ||
1038
+ !CBB_add_asn1_uint64(&encrypted_data, 0 /* version */) ||
1039
+ // See https://tools.ietf.org/html/rfc2315#section-10.1.
1040
+ !CBB_add_asn1(&encrypted_data, &encrypted_content_info,
1041
+ CBS_ASN1_SEQUENCE) ||
1042
+ !CBB_add_asn1_element(&encrypted_content_info, CBS_ASN1_OBJECT,
1043
+ kPKCS7Data, sizeof(kPKCS7Data)) ||
1044
+ // Set up encryption and fill in contentEncryptionAlgorithm.
1045
+ !pkcs12_pbe_encrypt_init(&encrypted_content_info, ctx.get(), pbe_nid,
1046
+ pbe_cipher, iterations, password, password_len,
1047
+ salt, sizeof(salt)) ||
1048
+ // Note this tag is primitive. It is an implicitly-tagged OCTET_STRING, so
1049
+ // it inherits the inner tag's constructed bit.
1050
+ !CBB_add_asn1(&encrypted_content_info, &encrypted_content,
1051
+ CBS_ASN1_CONTEXT_SPECIFIC | 0)) {
1052
+ return 0;
1053
+ }
1054
+
1055
+ size_t max_out = in_len + EVP_CIPHER_CTX_block_size(ctx.get());
1056
+ if (max_out < in_len) {
1057
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_TOO_LONG);
1058
+ return 0;
1059
+ }
1060
+
1061
+ uint8_t *ptr;
1062
+ size_t n1, n2;
1063
+ if (!CBB_reserve(&encrypted_content, &ptr, max_out) ||
1064
+ !EVP_CipherUpdate_ex(ctx.get(), ptr, &n1, max_out, in, in_len) ||
1065
+ !EVP_CipherFinal_ex2(ctx.get(), ptr + n1, &n2, max_out - n1) ||
1066
+ !CBB_did_write(&encrypted_content, n1 + n2) || !CBB_flush(out)) {
1067
+ return 0;
1068
+ }
1069
+
1070
+ return 1;
1071
+ }
1072
+
1073
+ PKCS12 *PKCS12_create(const char *password, const char *name,
1074
+ const EVP_PKEY *pkey, X509 *cert,
1075
+ const STACK_OF(X509) *chain, int key_nid, int cert_nid,
1076
+ int iterations, int mac_iterations, int key_type) {
1077
+ if (key_nid == 0) {
1078
+ key_nid = NID_aes_256_cbc;
1079
+ }
1080
+ if (cert_nid == 0) {
1081
+ cert_nid = NID_aes_256_cbc;
1082
+ }
1083
+ if (iterations == 0) {
1084
+ iterations = PKCS12_DEFAULT_ITER;
1085
+ }
1086
+ if (mac_iterations == 0) {
1087
+ mac_iterations = PKCS12_DEFAULT_ITER;
1088
+ }
1089
+ if ( // In OpenSSL, this specifies a non-standard Microsoft key usage
1090
+ // extension which we do not currently support.
1091
+ key_type != 0 ||
1092
+ // In OpenSSL, -1 here means to omit the MAC, which we do not
1093
+ // currently support. Omitting it is also invalid for a password-based
1094
+ // PKCS#12 file.
1095
+ mac_iterations < 0 ||
1096
+ // Don't encode empty objects.
1097
+ (pkey == nullptr && cert == nullptr && sk_X509_num(chain) == 0)) {
1098
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_OPTIONS);
1099
+ return nullptr;
1100
+ }
1101
+
1102
+ // PKCS#12 is a very confusing recursive data format, built out of another
1103
+ // recursive data format. Section 5.1 of RFC 7292 describes the encoding
1104
+ // algorithm, but there is no clear overview. A quick summary:
1105
+ //
1106
+ // PKCS#7 defines a ContentInfo structure, which is an overgeneralized typed
1107
+ // combinator structure for applying cryptography. We care about two types. A
1108
+ // data ContentInfo contains an OCTET STRING and is a leaf node of the
1109
+ // combinator tree. An encrypted-data ContentInfo contains encryption
1110
+ // parameters (key derivation and encryption) and wraps another ContentInfo,
1111
+ // usually data.
1112
+ //
1113
+ // A PKCS#12 file is a PFX structure (section 4), which contains a single data
1114
+ // ContentInfo and a MAC over it. This root ContentInfo is the
1115
+ // AuthenticatedSafe and its payload is a SEQUENCE of other ContentInfos, so
1116
+ // that different parts of the PKCS#12 file can by differently protected.
1117
+ //
1118
+ // Each ContentInfo in the AuthenticatedSafe, after undoing all the PKCS#7
1119
+ // combinators, has SafeContents payload. A SafeContents is a SEQUENCE of
1120
+ // SafeBag. SafeBag is PKCS#12's typed structure, with subtypes such as KeyBag
1121
+ // and CertBag. Confusingly, there is a SafeContents bag type which itself
1122
+ // recursively contains more SafeBags, but we do not implement this. Bags also
1123
+ // can have attributes.
1124
+ //
1125
+ // The grouping of SafeBags into intermediate ContentInfos does not appear to
1126
+ // be significant, except that all SafeBags sharing a ContentInfo have the
1127
+ // same level of protection. Additionally, while keys may be encrypted by
1128
+ // placing a KeyBag in an encrypted-data ContentInfo, PKCS#12 also defines a
1129
+ // key-specific encryption container, PKCS8ShroudedKeyBag, which is used
1130
+ // instead.
1131
+
1132
+ // Note that `password` may be NULL to specify no password, rather than the
1133
+ // empty string. They are encoded differently in PKCS#12. (One is the empty
1134
+ // byte array and the other is NUL-terminated UCS-2.)
1135
+ size_t password_len = password != nullptr ? strlen(password) : 0;
1136
+
1137
+ uint8_t key_id[EVP_MAX_MD_SIZE];
1138
+ unsigned key_id_len = 0;
1139
+ if (cert != nullptr && pkey != nullptr) {
1140
+ if (!X509_check_private_key(cert, pkey) ||
1141
+ // Matching OpenSSL, use the SHA-1 hash of the certificate as the local
1142
+ // key ID. Some PKCS#12 consumers require one to connect the private key
1143
+ // and certificate.
1144
+ !X509_digest(cert, EVP_sha1(), key_id, &key_id_len)) {
1145
+ return nullptr;
1146
+ }
1147
+ }
1148
+
1149
+ // See https://tools.ietf.org/html/rfc7292#section-4.
1150
+ PKCS12 *ret = nullptr;
1151
+ CBB cbb, pfx, auth_safe, auth_safe_wrapper, auth_safe_data, content_infos;
1152
+ uint8_t mac_key[EVP_MAX_MD_SIZE];
1153
+ if (!CBB_init(&cbb, 0) || !CBB_add_asn1(&cbb, &pfx, CBS_ASN1_SEQUENCE) ||
1154
+ !CBB_add_asn1_uint64(&pfx, 3) ||
1155
+ // auth_safe is a data ContentInfo.
1156
+ !CBB_add_asn1(&pfx, &auth_safe, CBS_ASN1_SEQUENCE) ||
1157
+ !CBB_add_asn1_element(&auth_safe, CBS_ASN1_OBJECT, kPKCS7Data,
1158
+ sizeof(kPKCS7Data)) ||
1159
+ !CBB_add_asn1(&auth_safe, &auth_safe_wrapper,
1160
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1161
+ !CBB_add_asn1(&auth_safe_wrapper, &auth_safe_data,
1162
+ CBS_ASN1_OCTETSTRING) ||
1163
+ // See https://tools.ietf.org/html/rfc7292#section-4.1. `auth_safe`'s
1164
+ // contains a SEQUENCE of ContentInfos.
1165
+ !CBB_add_asn1(&auth_safe_data, &content_infos, CBS_ASN1_SEQUENCE)) {
1166
+ goto err;
1167
+ }
1168
+
1169
+ // If there are any certificates, place them in CertBags wrapped in a single
1170
+ // encrypted ContentInfo.
1171
+ if (cert != nullptr || sk_X509_num(chain) > 0) {
1172
+ if (cert_nid < 0) {
1173
+ // Place the certificates in an unencrypted ContentInfo. This could be
1174
+ // more compactly-encoded by reusing the same ContentInfo as the key, but
1175
+ // OpenSSL does not do this. We keep them separate for consistency. (Keys,
1176
+ // even when encrypted, are always placed in unencrypted ContentInfos.
1177
+ // PKCS#12 defines bag-level encryption for keys.)
1178
+ CBB content_info, wrapper, data;
1179
+ if (!CBB_add_asn1(&content_infos, &content_info, CBS_ASN1_SEQUENCE) ||
1180
+ !CBB_add_asn1_element(&content_info, CBS_ASN1_OBJECT, kPKCS7Data,
1181
+ sizeof(kPKCS7Data)) ||
1182
+ !CBB_add_asn1(&content_info, &wrapper,
1183
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1184
+ !CBB_add_asn1(&wrapper, &data, CBS_ASN1_OCTETSTRING) ||
1185
+ !add_cert_safe_contents(&data, cert, chain, name, key_id,
1186
+ key_id_len) ||
1187
+ !CBB_flush(&content_infos)) {
1188
+ goto err;
1189
+ }
1190
+ } else {
1191
+ // This function differs from other OpenSSL functions in how PBES1 and
1192
+ // PBES2 schemes are selected. If the NID matches a cipher, treat this as
1193
+ // PBES2 instead. Convert to the other convention.
1194
+ const EVP_CIPHER *cipher = pkcs5_pbe2_nid_to_cipher(cert_nid);
1195
+ if (cipher != nullptr) {
1196
+ cert_nid = -1;
1197
+ }
1198
+ CBB plaintext_cbb;
1199
+ int ok =
1200
+ CBB_init(&plaintext_cbb, 0) &&
1201
+ add_cert_safe_contents(&plaintext_cbb, cert, chain, name, key_id,
1202
+ key_id_len) &&
1203
+ add_encrypted_data(&content_infos, cert_nid, cipher, password,
1204
+ password_len, iterations, CBB_data(&plaintext_cbb),
1205
+ CBB_len(&plaintext_cbb));
1206
+ CBB_cleanup(&plaintext_cbb);
1207
+ if (!ok) {
1208
+ goto err;
1209
+ }
1210
+ }
1211
+ }
1212
+
1213
+ // If there is a key, place it in a single KeyBag or PKCS8ShroudedKeyBag
1214
+ // wrapped in an unencrypted ContentInfo. (One could also place it in a KeyBag
1215
+ // inside an encrypted ContentInfo, but OpenSSL does not do this and some
1216
+ // PKCS#12 consumers do not support KeyBags.)
1217
+ if (pkey != nullptr) {
1218
+ CBB content_info, wrapper, data, safe_contents, bag, bag_contents;
1219
+ if ( // Add another data ContentInfo.
1220
+ !CBB_add_asn1(&content_infos, &content_info, CBS_ASN1_SEQUENCE) ||
1221
+ !CBB_add_asn1_element(&content_info, CBS_ASN1_OBJECT, kPKCS7Data,
1222
+ sizeof(kPKCS7Data)) ||
1223
+ !CBB_add_asn1(&content_info, &wrapper,
1224
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1225
+ !CBB_add_asn1(&wrapper, &data, CBS_ASN1_OCTETSTRING) ||
1226
+ !CBB_add_asn1(&data, &safe_contents, CBS_ASN1_SEQUENCE) ||
1227
+ // Add a SafeBag containing a PKCS8ShroudedKeyBag.
1228
+ !CBB_add_asn1(&safe_contents, &bag, CBS_ASN1_SEQUENCE)) {
1229
+ goto err;
1230
+ }
1231
+ if (key_nid < 0) {
1232
+ if (!CBB_add_asn1_element(&bag, CBS_ASN1_OBJECT, kKeyBag,
1233
+ sizeof(kKeyBag)) ||
1234
+ !CBB_add_asn1(&bag, &bag_contents,
1235
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1236
+ !EVP_marshal_private_key(&bag_contents, pkey)) {
1237
+ goto err;
1238
+ }
1239
+ } else {
1240
+ // This function differs from other OpenSSL functions in how PBES1 and
1241
+ // PBES2 schemes are selected. If the NID matches a cipher, treat this as
1242
+ // PBES2 instead. Convert to the other convention.
1243
+ const EVP_CIPHER *cipher = pkcs5_pbe2_nid_to_cipher(key_nid);
1244
+ if (cipher != nullptr) {
1245
+ key_nid = -1;
1246
+ }
1247
+ if (!CBB_add_asn1_element(&bag, CBS_ASN1_OBJECT, kPKCS8ShroudedKeyBag,
1248
+ sizeof(kPKCS8ShroudedKeyBag)) ||
1249
+ !CBB_add_asn1(&bag, &bag_contents,
1250
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1251
+ !PKCS8_marshal_encrypted_private_key(
1252
+ &bag_contents, key_nid, cipher, password, password_len,
1253
+ nullptr /* generate a random salt */,
1254
+ 0 /* use default salt length */, iterations, pkey)) {
1255
+ goto err;
1256
+ }
1257
+ }
1258
+ size_t name_len = 0;
1259
+ if (name) {
1260
+ name_len = strlen(name);
1261
+ }
1262
+ if (!add_bag_attributes(&bag, name, name_len, key_id, key_id_len) ||
1263
+ !CBB_flush(&content_infos)) {
1264
+ goto err;
1265
+ }
1266
+ }
1267
+
1268
+ {
1269
+ // Compute the MAC. Match OpenSSL in using SHA-1 as the hash function. The
1270
+ // MAC covers `auth_safe_data`.
1271
+ const EVP_MD *mac_md = EVP_sha1();
1272
+ uint8_t mac_salt[PKCS5_SALT_LEN];
1273
+ uint8_t mac[EVP_MAX_MD_SIZE];
1274
+ unsigned mac_len;
1275
+ if (!CBB_flush(&auth_safe_data) ||
1276
+ !RAND_bytes(mac_salt, sizeof(mac_salt)) ||
1277
+ !pkcs12_key_gen(password, password_len, mac_salt, sizeof(mac_salt),
1278
+ PKCS12_MAC_ID, mac_iterations, EVP_MD_size(mac_md),
1279
+ mac_key, mac_md) ||
1280
+ !HMAC(mac_md, mac_key, EVP_MD_size(mac_md), CBB_data(&auth_safe_data),
1281
+ CBB_len(&auth_safe_data), mac, &mac_len)) {
1282
+ goto err;
1283
+ }
1284
+
1285
+ CBB mac_data, digest_info;
1286
+ if (!CBB_add_asn1(&pfx, &mac_data, CBS_ASN1_SEQUENCE) ||
1287
+ !CBB_add_asn1(&mac_data, &digest_info, CBS_ASN1_SEQUENCE) ||
1288
+ // OpenSSL and NSS always include a NULL parameter with the digest
1289
+ // algorithm. Windows does not. RFC 7292 imports DigestInfo from PKCS
1290
+ // #7. PKCS #7 does not actually use DigestInfo. It just describes
1291
+ // RSASSA-PKCS1-v1_5 signing as encoding a DigestInfo and then
1292
+ // "encrypting" it with the private key. In that context, NULL should be
1293
+ // included. Confusingly, there is also a digestAlgorithm field in
1294
+ // SignerInfo. There, RFC 5754 says to omit the NULL. But that field
1295
+ // does not use DigestInfo per se.
1296
+ //
1297
+ // We match OpenSSL, NSS, and RSASSA-PKCS1-v1_5 in including the NULL.
1298
+ !EVP_marshal_digest_algorithm(&digest_info, mac_md) ||
1299
+ !CBB_add_asn1_octet_string(&digest_info, mac, mac_len) ||
1300
+ !CBB_add_asn1_octet_string(&mac_data, mac_salt, sizeof(mac_salt)) ||
1301
+ // The iteration count has a DEFAULT of 1, but RFC 7292 says "The
1302
+ // default is for historical reasons and its use is deprecated." Thus we
1303
+ // explicitly encode the iteration count, though it is not valid DER.
1304
+ !CBB_add_asn1_uint64(&mac_data, mac_iterations)) {
1305
+ goto err;
1306
+ }
1307
+
1308
+ ret = New<PKCS12>();
1309
+ if (ret == nullptr || !CBB_finish(&cbb, &ret->ber_bytes, &ret->ber_len)) {
1310
+ Delete(ret);
1311
+ ret = nullptr;
1312
+ goto err;
1313
+ }
1314
+ }
1315
+
1316
+ err:
1317
+ OPENSSL_cleanse(mac_key, sizeof(mac_key));
1318
+ CBB_cleanup(&cbb);
1319
+ return ret;
1320
+ }
1321
+
1322
+ void PKCS12_free(PKCS12 *p12) {
1323
+ if (p12 == nullptr) {
1324
+ return;
1325
+ }
1326
+ OPENSSL_free(p12->ber_bytes);
1327
+ Delete(p12);
1328
+ }