visaljs 0.0.2 → 0.0.3

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