@fails-components/webtransport 0.0.1 → 0.0.2

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 (300) hide show
  1. package/package.json +1 -1
  2. package/readme.md +1 -3
  3. package/src/http3eventloop.cc +83 -9
  4. package/src/http3eventloop.h +13 -3
  5. package/src/http3server.cc +22 -22
  6. package/src/http3server.h +7 -20
  7. package/src/http3wtstreamvisitor.cc +31 -10
  8. package/src/http3wtstreamvisitor.h +38 -11
  9. package/src/webtransport.js +91 -23
  10. package/test/echoserver.js +29 -5
  11. package/test/testsuite.js +242 -220
  12. package/third_party/boringssl/src/CMakeLists.txt +2 -0
  13. package/third_party/boringssl/src/crypto/CMakeLists.txt +1 -0
  14. package/third_party/boringssl/src/crypto/asn1/a_bitstr.c +174 -177
  15. package/third_party/boringssl/src/crypto/asn1/a_bool.c +46 -48
  16. package/third_party/boringssl/src/crypto/asn1/a_d2i_fp.c +21 -23
  17. package/third_party/boringssl/src/crypto/asn1/a_dup.c +21 -23
  18. package/third_party/boringssl/src/crypto/asn1/a_gentm.c +84 -187
  19. package/third_party/boringssl/src/crypto/asn1/a_i2d_fp.c +19 -21
  20. package/third_party/boringssl/src/crypto/asn1/a_int.c +305 -329
  21. package/third_party/boringssl/src/crypto/asn1/a_mbstr.c +190 -195
  22. package/third_party/boringssl/src/crypto/asn1/a_object.c +182 -189
  23. package/third_party/boringssl/src/crypto/asn1/a_octet.c +6 -9
  24. package/third_party/boringssl/src/crypto/asn1/a_print.c +15 -16
  25. package/third_party/boringssl/src/crypto/asn1/a_strex.c +386 -399
  26. package/third_party/boringssl/src/crypto/asn1/a_strnid.c +110 -131
  27. package/third_party/boringssl/src/crypto/asn1/a_time.c +118 -111
  28. package/third_party/boringssl/src/crypto/asn1/a_type.c +59 -60
  29. package/third_party/boringssl/src/crypto/asn1/a_utctm.c +114 -186
  30. package/third_party/boringssl/src/crypto/asn1/a_utf8.c +171 -159
  31. package/third_party/boringssl/src/crypto/asn1/asn1_lib.c +245 -260
  32. package/third_party/boringssl/src/crypto/asn1/asn1_par.c +41 -40
  33. package/third_party/boringssl/src/crypto/asn1/asn1_test.cc +31 -0
  34. package/third_party/boringssl/src/crypto/asn1/asn_pack.c +31 -33
  35. package/third_party/boringssl/src/crypto/asn1/f_int.c +36 -33
  36. package/third_party/boringssl/src/crypto/asn1/f_string.c +29 -26
  37. package/third_party/boringssl/src/crypto/asn1/internal.h +62 -61
  38. package/third_party/boringssl/src/crypto/asn1/tasn_dec.c +706 -702
  39. package/third_party/boringssl/src/crypto/asn1/tasn_enc.c +507 -524
  40. package/third_party/boringssl/src/crypto/asn1/tasn_fre.c +141 -133
  41. package/third_party/boringssl/src/crypto/asn1/tasn_new.c +207 -199
  42. package/third_party/boringssl/src/crypto/asn1/tasn_typ.c +19 -22
  43. package/third_party/boringssl/src/crypto/asn1/tasn_utl.c +24 -24
  44. package/third_party/boringssl/src/crypto/asn1/time_support.c +13 -13
  45. package/third_party/boringssl/src/crypto/bio/connect.c +9 -3
  46. package/third_party/boringssl/src/crypto/bytestring/bytestring_test.cc +125 -1
  47. package/third_party/boringssl/src/crypto/bytestring/cbb.c +4 -7
  48. package/third_party/boringssl/src/crypto/bytestring/cbs.c +167 -9
  49. package/third_party/boringssl/src/crypto/cipher_extra/e_aesctrhmac.c +0 -2
  50. package/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.c +23 -54
  51. package/third_party/boringssl/src/crypto/cipher_extra/e_chacha20poly1305.c +0 -2
  52. package/third_party/boringssl/src/crypto/cipher_extra/e_tls.c +0 -2
  53. package/third_party/boringssl/src/crypto/curve25519/curve25519.c +6 -8
  54. package/third_party/boringssl/src/crypto/evp/evp_ctx.c +25 -22
  55. package/third_party/boringssl/src/crypto/evp/internal.h +15 -9
  56. package/third_party/boringssl/src/crypto/evp/p_dsa_asn1.c +2 -0
  57. package/third_party/boringssl/src/crypto/evp/p_ec_asn1.c +2 -0
  58. package/third_party/boringssl/src/crypto/evp/p_ed25519.c +3 -3
  59. package/third_party/boringssl/src/crypto/evp/p_ed25519_asn1.c +10 -7
  60. package/third_party/boringssl/src/crypto/evp/p_hkdf.c +241 -0
  61. package/third_party/boringssl/src/crypto/evp/p_rsa_asn1.c +2 -0
  62. package/third_party/boringssl/src/crypto/evp/p_x25519_asn1.c +1 -0
  63. package/third_party/boringssl/src/crypto/fipsmodule/aes/aes_nohw.c +9 -10
  64. package/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.c +2 -6
  65. package/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.c +5 -11
  66. package/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +1 -1
  67. package/third_party/boringssl/src/crypto/fipsmodule/bn/prime.c +2 -0
  68. package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.c +10 -26
  69. package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aesccm.c +2 -3
  70. package/third_party/boringssl/src/crypto/fipsmodule/digestsign/digestsign.c +1 -0
  71. package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.c +44 -43
  72. package/third_party/boringssl/src/crypto/fipsmodule/modes/cbc.c +5 -9
  73. package/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.c +14 -21
  74. package/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c +8 -8
  75. package/third_party/boringssl/src/crypto/fipsmodule/rand/internal.h +1 -4
  76. package/third_party/boringssl/src/crypto/hkdf/hkdf_test.cc +104 -0
  77. package/third_party/boringssl/src/crypto/internal.h +18 -4
  78. package/third_party/boringssl/src/crypto/lhash/internal.h +13 -1
  79. package/third_party/boringssl/src/crypto/obj/obj_dat.h +4 -1
  80. package/third_party/boringssl/src/crypto/obj/obj_mac.num +1 -0
  81. package/third_party/boringssl/src/crypto/obj/objects.txt +2 -0
  82. package/third_party/boringssl/src/crypto/pem/pem_all.c +77 -86
  83. package/third_party/boringssl/src/crypto/pem/pem_info.c +221 -233
  84. package/third_party/boringssl/src/crypto/pem/pem_lib.c +639 -608
  85. package/third_party/boringssl/src/crypto/pem/pem_oth.c +17 -16
  86. package/third_party/boringssl/src/crypto/pem/pem_pk8.c +133 -142
  87. package/third_party/boringssl/src/crypto/pem/pem_pkey.c +96 -92
  88. package/third_party/boringssl/src/crypto/poly1305/poly1305_vec.c +12 -28
  89. package/third_party/boringssl/src/crypto/siphash/siphash.c +8 -11
  90. package/third_party/boringssl/src/crypto/siphash/siphash_test.cc +5 -7
  91. package/third_party/boringssl/src/crypto/stack/stack.c +33 -16
  92. package/third_party/boringssl/src/crypto/thread_pthread.c +0 -2
  93. package/third_party/boringssl/src/crypto/thread_win.c +0 -2
  94. package/third_party/boringssl/src/crypto/trust_token/internal.h +14 -0
  95. package/third_party/boringssl/src/crypto/trust_token/pmbtoken.c +127 -30
  96. package/third_party/boringssl/src/crypto/trust_token/trust_token.c +40 -0
  97. package/third_party/boringssl/src/crypto/trust_token/trust_token_test.cc +165 -0
  98. package/third_party/boringssl/src/crypto/trust_token/voprf.c +55 -6
  99. package/third_party/boringssl/src/crypto/x509/a_digest.c +23 -24
  100. package/third_party/boringssl/src/crypto/x509/a_sign.c +52 -55
  101. package/third_party/boringssl/src/crypto/x509/a_verify.c +33 -34
  102. package/third_party/boringssl/src/crypto/x509/algorithm.c +17 -18
  103. package/third_party/boringssl/src/crypto/x509/asn1_gen.c +618 -612
  104. package/third_party/boringssl/src/crypto/x509/by_dir.c +320 -337
  105. package/third_party/boringssl/src/crypto/x509/by_file.c +186 -186
  106. package/third_party/boringssl/src/crypto/x509/i2d_pr.c +11 -14
  107. package/third_party/boringssl/src/crypto/x509/internal.h +22 -22
  108. package/third_party/boringssl/src/crypto/x509/name_print.c +155 -150
  109. package/third_party/boringssl/src/crypto/x509/rsa_pss.c +27 -29
  110. package/third_party/boringssl/src/crypto/x509/t_crl.c +67 -70
  111. package/third_party/boringssl/src/crypto/x509/t_req.c +3 -5
  112. package/third_party/boringssl/src/crypto/x509/t_x509.c +280 -251
  113. package/third_party/boringssl/src/crypto/x509/t_x509a.c +52 -47
  114. package/third_party/boringssl/src/crypto/x509/x509.c +3 -4
  115. package/third_party/boringssl/src/crypto/x509/x509_att.c +234 -223
  116. package/third_party/boringssl/src/crypto/x509/x509_cmp.c +286 -296
  117. package/third_party/boringssl/src/crypto/x509/x509_d2.c +37 -32
  118. package/third_party/boringssl/src/crypto/x509/x509_def.c +14 -30
  119. package/third_party/boringssl/src/crypto/x509/x509_ext.c +55 -84
  120. package/third_party/boringssl/src/crypto/x509/x509_lu.c +545 -581
  121. package/third_party/boringssl/src/crypto/x509/x509_obj.c +131 -121
  122. package/third_party/boringssl/src/crypto/x509/x509_req.c +120 -139
  123. package/third_party/boringssl/src/crypto/x509/x509_set.c +128 -142
  124. package/third_party/boringssl/src/crypto/x509/x509_trs.c +185 -193
  125. package/third_party/boringssl/src/crypto/x509/x509_txt.c +70 -72
  126. package/third_party/boringssl/src/crypto/x509/x509_v3.c +172 -161
  127. package/third_party/boringssl/src/crypto/x509/x509_vfy.c +2041 -2053
  128. package/third_party/boringssl/src/crypto/x509/x509_vpm.c +441 -461
  129. package/third_party/boringssl/src/crypto/x509/x509cset.c +152 -170
  130. package/third_party/boringssl/src/crypto/x509/x509name.c +274 -260
  131. package/third_party/boringssl/src/crypto/x509/x509rset.c +43 -20
  132. package/third_party/boringssl/src/crypto/x509/x509spki.c +62 -63
  133. package/third_party/boringssl/src/crypto/x509/x_algor.c +64 -62
  134. package/third_party/boringssl/src/crypto/x509/x_all.c +103 -133
  135. package/third_party/boringssl/src/crypto/x509/x_attrib.c +23 -24
  136. package/third_party/boringssl/src/crypto/x509/x_crl.c +310 -321
  137. package/third_party/boringssl/src/crypto/x509/x_exten.c +6 -5
  138. package/third_party/boringssl/src/crypto/x509/x_info.c +31 -28
  139. package/third_party/boringssl/src/crypto/x509/x_name.c +361 -365
  140. package/third_party/boringssl/src/crypto/x509/x_pkey.c +38 -32
  141. package/third_party/boringssl/src/crypto/x509/x_pubkey.c +114 -117
  142. package/third_party/boringssl/src/crypto/x509/x_req.c +27 -29
  143. package/third_party/boringssl/src/crypto/x509/x_sig.c +2 -2
  144. package/third_party/boringssl/src/crypto/x509/x_spki.c +8 -10
  145. package/third_party/boringssl/src/crypto/x509/x_val.c +2 -2
  146. package/third_party/boringssl/src/crypto/x509/x_x509.c +212 -226
  147. package/third_party/boringssl/src/crypto/x509/x_x509a.c +112 -109
  148. package/third_party/boringssl/src/crypto/x509v3/ext_dat.h +10 -13
  149. package/third_party/boringssl/src/crypto/x509v3/internal.h +72 -87
  150. package/third_party/boringssl/src/crypto/x509v3/pcy_cache.c +184 -176
  151. package/third_party/boringssl/src/crypto/x509v3/pcy_data.c +58 -56
  152. package/third_party/boringssl/src/crypto/x509v3/pcy_lib.c +71 -70
  153. package/third_party/boringssl/src/crypto/x509v3/pcy_map.c +56 -58
  154. package/third_party/boringssl/src/crypto/x509v3/pcy_node.c +89 -91
  155. package/third_party/boringssl/src/crypto/x509v3/pcy_tree.c +585 -590
  156. package/third_party/boringssl/src/crypto/x509v3/v3_akey.c +118 -112
  157. package/third_party/boringssl/src/crypto/x509v3/v3_akeya.c +3 -3
  158. package/third_party/boringssl/src/crypto/x509v3/v3_alt.c +447 -451
  159. package/third_party/boringssl/src/crypto/x509v3/v3_bcons.c +44 -38
  160. package/third_party/boringssl/src/crypto/x509v3/v3_bitst.c +39 -43
  161. package/third_party/boringssl/src/crypto/x509v3/v3_conf.c +321 -320
  162. package/third_party/boringssl/src/crypto/x509v3/v3_cpols.c +352 -327
  163. package/third_party/boringssl/src/crypto/x509v3/v3_crld.c +437 -383
  164. package/third_party/boringssl/src/crypto/x509v3/v3_enum.c +23 -16
  165. package/third_party/boringssl/src/crypto/x509v3/v3_extku.c +62 -53
  166. package/third_party/boringssl/src/crypto/x509v3/v3_genn.c +118 -115
  167. package/third_party/boringssl/src/crypto/x509v3/v3_ia5.c +30 -31
  168. package/third_party/boringssl/src/crypto/x509v3/v3_info.c +112 -98
  169. package/third_party/boringssl/src/crypto/x509v3/v3_int.c +40 -15
  170. package/third_party/boringssl/src/crypto/x509v3/v3_lib.c +248 -252
  171. package/third_party/boringssl/src/crypto/x509v3/v3_ncons.c +390 -386
  172. package/third_party/boringssl/src/crypto/x509v3/v3_ocsp.c +45 -32
  173. package/third_party/boringssl/src/crypto/x509v3/v3_pci.c +206 -209
  174. package/third_party/boringssl/src/crypto/x509v3/v3_pcia.c +6 -8
  175. package/third_party/boringssl/src/crypto/x509v3/v3_pcons.c +54 -50
  176. package/third_party/boringssl/src/crypto/x509v3/v3_pmaps.c +66 -65
  177. package/third_party/boringssl/src/crypto/x509v3/v3_prn.c +144 -133
  178. package/third_party/boringssl/src/crypto/x509v3/v3_purp.c +695 -709
  179. package/third_party/boringssl/src/crypto/x509v3/v3_skey.c +75 -69
  180. package/third_party/boringssl/src/crypto/x509v3/v3_utl.c +1102 -1082
  181. package/third_party/boringssl/src/include/openssl/base.h +3 -1
  182. package/third_party/boringssl/src/include/openssl/bn.h +3 -0
  183. package/third_party/boringssl/src/include/openssl/bytestring.h +20 -0
  184. package/third_party/boringssl/src/include/openssl/evp.h +6 -5
  185. package/third_party/boringssl/src/include/openssl/kdf.h +91 -0
  186. package/third_party/boringssl/src/include/openssl/nid.h +4 -0
  187. package/third_party/boringssl/src/include/openssl/ssl.h +6 -1
  188. package/third_party/boringssl/src/include/openssl/stack.h +47 -32
  189. package/third_party/boringssl/src/include/openssl/trust_token.h +18 -3
  190. package/third_party/boringssl/src/include/openssl/x509.h +18 -0
  191. package/third_party/boringssl/src/ssl/ssl_file.cc +61 -99
  192. package/third_party/boringssl/src/ssl/ssl_test.cc +101 -0
  193. package/third_party/boringssl/src/util/doc.config +2 -1
  194. package/third_party/boringssl/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go +8 -0
  195. package/third_party/googleurl/AUTHORS +16 -2
  196. package/third_party/googleurl/base/BUILD +1 -0
  197. package/third_party/googleurl/base/compiler_specific.h +16 -17
  198. package/third_party/googleurl/base/containers/contiguous_iterator.h +13 -9
  199. package/third_party/googleurl/base/containers/span.h +23 -8
  200. package/third_party/googleurl/base/memory/raw_ptr.h +17 -25
  201. package/third_party/googleurl/base/memory/raw_ptr_exclusion.h +21 -0
  202. package/third_party/googleurl/base/strings/escape.cc +14 -2
  203. package/third_party/googleurl/base/strings/safe_sprintf.h +1 -1
  204. package/third_party/googleurl/base/strings/string_number_conversions.cc +5 -3
  205. package/third_party/googleurl/base/strings/string_number_conversions_internal.h +5 -5
  206. package/third_party/googleurl/base/strings/string_piece.h +3 -3
  207. package/third_party/googleurl/base/strings/string_util.cc +4 -27
  208. package/third_party/googleurl/base/strings/string_util.h +43 -8
  209. package/third_party/googleurl/base/strings/string_util_internal.h +11 -12
  210. package/third_party/googleurl/base/strings/string_util_unittest.cc +33 -0
  211. package/third_party/googleurl/base/strings/string_util_win.cc +0 -5
  212. package/third_party/googleurl/base/strings/string_util_win.h +9 -1
  213. package/third_party/googleurl/base/strings/utf_offset_string_conversions.cc +1 -1
  214. package/third_party/googleurl/base/strings/utf_string_conversion_utils.cc +5 -8
  215. package/third_party/googleurl/base/strings/utf_string_conversion_utils.h +13 -10
  216. package/third_party/googleurl/base/strings/utf_string_conversions.cc +32 -25
  217. package/third_party/googleurl/base/template_util.h +23 -35
  218. package/third_party/googleurl/build/build_config.h +14 -3
  219. package/third_party/googleurl/copy.bara.sky +1 -1
  220. package/third_party/googleurl/url/gurl.cc +8 -4
  221. package/third_party/googleurl/url/gurl.h +1 -0
  222. package/third_party/googleurl/url/gurl_unittest.cc +1 -0
  223. package/third_party/googleurl/url/origin.h +36 -26
  224. package/third_party/googleurl/url/scheme_host_port.h +4 -1
  225. package/third_party/googleurl/url/url_canon.h +2 -1
  226. package/third_party/googleurl/url/url_canon_internal.cc +9 -7
  227. package/third_party/googleurl/url/url_canon_internal.h +16 -16
  228. package/third_party/googleurl/url/url_canon_stdstring.h +2 -1
  229. package/third_party/googleurl/url/url_util.cc +9 -8
  230. package/third_party/quiche/build/source_list.bzl +7 -0
  231. package/third_party/quiche/build/source_list.gni +7 -0
  232. package/third_party/quiche/build/source_list.json +7 -0
  233. package/third_party/quiche/quiche/common/platform/api/quiche_mem_slice.h +7 -3
  234. package/third_party/quiche/quiche/http2/adapter/nghttp2_adapter_test.cc +86 -2
  235. package/third_party/quiche/quiche/http2/adapter/oghttp2_adapter_test.cc +104 -2
  236. package/third_party/quiche/quiche/http2/adapter/oghttp2_session.cc +23 -0
  237. package/third_party/quiche/quiche/http2/adapter/oghttp2_session.h +6 -1
  238. package/third_party/quiche/quiche/quic/core/congestion_control/send_algorithm_test.cc +0 -16
  239. package/third_party/quiche/quiche/quic/core/crypto/crypto_protocol.h +1 -1
  240. package/third_party/quiche/quiche/quic/core/http/end_to_end_test.cc +56 -2
  241. package/third_party/quiche/quiche/quic/core/http/http_constants.cc +1 -0
  242. package/third_party/quiche/quiche/quic/core/http/http_constants.h +1 -0
  243. package/third_party/quiche/quiche/quic/core/http/http_encoder.cc +28 -17
  244. package/third_party/quiche/quiche/quic/core/http/http_encoder.h +5 -0
  245. package/third_party/quiche/quiche/quic/core/http/http_encoder_test.cc +26 -30
  246. package/third_party/quiche/quiche/quic/core/http/http_frames.h +1 -0
  247. package/third_party/quiche/quiche/quic/core/http/quic_server_session_base.cc +4 -4
  248. package/third_party/quiche/quiche/quic/core/http/quic_server_session_base_test.cc +1 -1
  249. package/third_party/quiche/quiche/quic/core/http/quic_spdy_client_session.cc +5 -1
  250. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.cc +6 -33
  251. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.h +0 -17
  252. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream_test.cc +5 -20
  253. package/third_party/quiche/quiche/quic/core/io/quic_event_loop.h +81 -0
  254. package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop.cc +265 -0
  255. package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop.h +152 -0
  256. package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop_test.cc +341 -0
  257. package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store.cc +3 -1
  258. package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store.h +7 -7
  259. package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store_test.cc +4 -3
  260. package/third_party/quiche/quiche/quic/core/quic_connection.cc +69 -19
  261. package/third_party/quiche/quiche/quic/core/quic_connection.h +9 -3
  262. package/third_party/quiche/quiche/quic/core/quic_connection_id_manager.cc +29 -10
  263. package/third_party/quiche/quiche/quic/core/quic_connection_id_manager.h +5 -3
  264. package/third_party/quiche/quiche/quic/core/quic_connection_id_manager_test.cc +85 -22
  265. package/third_party/quiche/quiche/quic/core/quic_connection_test.cc +186 -30
  266. package/third_party/quiche/quiche/quic/core/quic_crypto_stream.cc +2 -1
  267. package/third_party/quiche/quiche/quic/core/quic_default_clock.cc +31 -0
  268. package/third_party/quiche/quiche/quic/core/quic_default_clock.h +34 -0
  269. package/third_party/quiche/quiche/quic/core/quic_default_connection_helper.h +49 -0
  270. package/third_party/quiche/quiche/quic/core/quic_dispatcher.cc +53 -37
  271. package/third_party/quiche/quiche/quic/core/quic_dispatcher.h +19 -11
  272. package/third_party/quiche/quiche/quic/core/quic_dispatcher_test.cc +15 -2
  273. package/third_party/quiche/quiche/quic/core/quic_flags_list.h +10 -4
  274. package/third_party/quiche/quiche/quic/core/quic_idle_network_detector.cc +2 -2
  275. package/third_party/quiche/quiche/quic/core/quic_idle_network_detector_test.cc +4 -4
  276. package/third_party/quiche/quiche/quic/core/quic_packet_creator.cc +14 -3
  277. package/third_party/quiche/quiche/quic/core/quic_packet_creator_test.cc +145 -2
  278. package/third_party/quiche/quiche/quic/core/quic_packets.cc +3 -1
  279. package/third_party/quiche/quiche/quic/core/quic_packets.h +4 -0
  280. package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.cc +13 -11
  281. package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.h +9 -0
  282. package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager_test.cc +6 -0
  283. package/third_party/quiche/quiche/quic/core/quic_session.cc +3 -2
  284. package/third_party/quiche/quiche/quic/core/quic_session.h +8 -3
  285. package/third_party/quiche/quiche/quic/core/quic_types.cc +18 -0
  286. package/third_party/quiche/quiche/quic/core/quic_types.h +3 -0
  287. package/third_party/quiche/quiche/quic/core/tls_chlo_extractor.cc +3 -0
  288. package/third_party/quiche/quiche/quic/core/tls_chlo_extractor.h +10 -0
  289. package/third_party/quiche/quiche/quic/test_tools/mock_quic_session_visitor.h +1 -1
  290. package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.h +1 -1
  291. package/third_party/quiche/quiche/quic/test_tools/server_thread.cc +3 -2
  292. package/third_party/quiche/quiche/quic/test_tools/simple_session_notifier.cc +7 -1
  293. package/third_party/quiche/quiche/quic/test_tools/simple_session_notifier.h +3 -0
  294. package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint.h +4 -2
  295. package/certs/ca.cnf +0 -69
  296. package/certs/generate_certs.sh +0 -53
  297. package/certs/generate_certs_leaf.sh +0 -53
  298. package/certs/leaf.cnf +0 -24
  299. package/certs/readme.txt +0 -2
  300. package/third_party/quiche/build/BUILD.bazel +0 -7
@@ -71,19 +71,19 @@
71
71
  #include "internal.h"
72
72
 
73
73
  typedef struct lookup_dir_hashes_st {
74
- unsigned long hash;
75
- int suffix;
74
+ unsigned long hash;
75
+ int suffix;
76
76
  } BY_DIR_HASH;
77
77
 
78
78
  typedef struct lookup_dir_entry_st {
79
- char *dir;
80
- int dir_type;
81
- STACK_OF(BY_DIR_HASH) *hashes;
79
+ char *dir;
80
+ int dir_type;
81
+ STACK_OF(BY_DIR_HASH) *hashes;
82
82
  } BY_DIR_ENTRY;
83
83
 
84
84
  typedef struct lookup_dir_st {
85
- BUF_MEM *buffer;
86
- STACK_OF(BY_DIR_ENTRY) *dirs;
85
+ BUF_MEM *buffer;
86
+ STACK_OF(BY_DIR_ENTRY) *dirs;
87
87
  } BY_DIR;
88
88
 
89
89
  DEFINE_STACK_OF(BY_DIR_HASH)
@@ -98,369 +98,352 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name,
98
98
  X509_OBJECT *ret);
99
99
  static X509_LOOKUP_METHOD x509_dir_lookup = {
100
100
  "Load certs from files in a directory",
101
- new_dir, /* new */
102
- free_dir, /* free */
103
- NULL, /* init */
104
- NULL, /* shutdown */
105
- dir_ctrl, /* ctrl */
106
- get_cert_by_subject, /* get_by_subject */
107
- NULL, /* get_by_issuer_serial */
108
- NULL, /* get_by_fingerprint */
109
- NULL, /* get_by_alias */
101
+ new_dir, // new
102
+ free_dir, // free
103
+ NULL, // init
104
+ NULL, // shutdown
105
+ dir_ctrl, // ctrl
106
+ get_cert_by_subject, // get_by_subject
107
+ NULL, // get_by_issuer_serial
108
+ NULL, // get_by_fingerprint
109
+ NULL, // get_by_alias
110
110
  };
111
111
 
112
- X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void)
113
- {
114
- return (&x509_dir_lookup);
115
- }
112
+ X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void) { return &x509_dir_lookup; }
116
113
 
117
114
  static int dir_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,
118
- char **retp)
119
- {
120
- int ret = 0;
121
- BY_DIR *ld;
122
- char *dir = NULL;
115
+ char **retp) {
116
+ int ret = 0;
117
+ BY_DIR *ld;
118
+ char *dir = NULL;
123
119
 
124
- ld = (BY_DIR *)ctx->method_data;
120
+ ld = (BY_DIR *)ctx->method_data;
125
121
 
126
- switch (cmd) {
122
+ switch (cmd) {
127
123
  case X509_L_ADD_DIR:
128
- if (argl == X509_FILETYPE_DEFAULT) {
129
- dir = (char *)getenv(X509_get_default_cert_dir_env());
130
- if (dir)
131
- ret = add_cert_dir(ld, dir, X509_FILETYPE_PEM);
132
- else
133
- ret = add_cert_dir(ld, X509_get_default_cert_dir(),
134
- X509_FILETYPE_PEM);
135
- if (!ret) {
136
- OPENSSL_PUT_ERROR(X509, X509_R_LOADING_CERT_DIR);
137
- }
138
- } else
139
- ret = add_cert_dir(ld, argp, (int)argl);
140
- break;
141
- }
142
- return (ret);
124
+ if (argl == X509_FILETYPE_DEFAULT) {
125
+ dir = (char *)getenv(X509_get_default_cert_dir_env());
126
+ if (dir) {
127
+ ret = add_cert_dir(ld, dir, X509_FILETYPE_PEM);
128
+ } else {
129
+ ret =
130
+ add_cert_dir(ld, X509_get_default_cert_dir(), X509_FILETYPE_PEM);
131
+ }
132
+ if (!ret) {
133
+ OPENSSL_PUT_ERROR(X509, X509_R_LOADING_CERT_DIR);
134
+ }
135
+ } else {
136
+ ret = add_cert_dir(ld, argp, (int)argl);
137
+ }
138
+ break;
139
+ }
140
+ return ret;
143
141
  }
144
142
 
145
- static int new_dir(X509_LOOKUP *lu)
146
- {
147
- BY_DIR *a;
143
+ static int new_dir(X509_LOOKUP *lu) {
144
+ BY_DIR *a;
148
145
 
149
- if ((a = (BY_DIR *)OPENSSL_malloc(sizeof(BY_DIR))) == NULL)
150
- return (0);
151
- if ((a->buffer = BUF_MEM_new()) == NULL) {
152
- OPENSSL_free(a);
153
- return (0);
154
- }
155
- a->dirs = NULL;
156
- lu->method_data = (char *)a;
157
- return (1);
146
+ if ((a = (BY_DIR *)OPENSSL_malloc(sizeof(BY_DIR))) == NULL) {
147
+ return 0;
148
+ }
149
+ if ((a->buffer = BUF_MEM_new()) == NULL) {
150
+ OPENSSL_free(a);
151
+ return 0;
152
+ }
153
+ a->dirs = NULL;
154
+ lu->method_data = (char *)a;
155
+ return 1;
158
156
  }
159
157
 
160
- static void by_dir_hash_free(BY_DIR_HASH *hash)
161
- {
162
- OPENSSL_free(hash);
163
- }
158
+ static void by_dir_hash_free(BY_DIR_HASH *hash) { OPENSSL_free(hash); }
164
159
 
165
- static int by_dir_hash_cmp(const BY_DIR_HASH **a, const BY_DIR_HASH **b)
166
- {
167
- if ((*a)->hash > (*b)->hash)
168
- return 1;
169
- if ((*a)->hash < (*b)->hash)
170
- return -1;
171
- return 0;
160
+ static int by_dir_hash_cmp(const BY_DIR_HASH **a, const BY_DIR_HASH **b) {
161
+ if ((*a)->hash > (*b)->hash) {
162
+ return 1;
163
+ }
164
+ if ((*a)->hash < (*b)->hash) {
165
+ return -1;
166
+ }
167
+ return 0;
172
168
  }
173
169
 
174
- static void by_dir_entry_free(BY_DIR_ENTRY *ent)
175
- {
176
- if (ent->dir)
177
- OPENSSL_free(ent->dir);
178
- if (ent->hashes)
179
- sk_BY_DIR_HASH_pop_free(ent->hashes, by_dir_hash_free);
180
- OPENSSL_free(ent);
170
+ static void by_dir_entry_free(BY_DIR_ENTRY *ent) {
171
+ if (ent->dir) {
172
+ OPENSSL_free(ent->dir);
173
+ }
174
+ if (ent->hashes) {
175
+ sk_BY_DIR_HASH_pop_free(ent->hashes, by_dir_hash_free);
176
+ }
177
+ OPENSSL_free(ent);
181
178
  }
182
179
 
183
- static void free_dir(X509_LOOKUP *lu)
184
- {
185
- BY_DIR *a;
186
-
187
- a = (BY_DIR *)lu->method_data;
188
- if (a->dirs != NULL)
189
- sk_BY_DIR_ENTRY_pop_free(a->dirs, by_dir_entry_free);
190
- if (a->buffer != NULL)
191
- BUF_MEM_free(a->buffer);
192
- OPENSSL_free(a);
180
+ static void free_dir(X509_LOOKUP *lu) {
181
+ BY_DIR *a;
182
+
183
+ a = (BY_DIR *)lu->method_data;
184
+ if (a->dirs != NULL) {
185
+ sk_BY_DIR_ENTRY_pop_free(a->dirs, by_dir_entry_free);
186
+ }
187
+ if (a->buffer != NULL) {
188
+ BUF_MEM_free(a->buffer);
189
+ }
190
+ OPENSSL_free(a);
193
191
  }
194
192
 
195
- static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
196
- {
197
- size_t j, len;
198
- const char *s, *ss, *p;
193
+ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) {
194
+ size_t j, len;
195
+ const char *s, *ss, *p;
199
196
 
200
- if (dir == NULL || !*dir) {
201
- OPENSSL_PUT_ERROR(X509, X509_R_INVALID_DIRECTORY);
197
+ if (dir == NULL || !*dir) {
198
+ OPENSSL_PUT_ERROR(X509, X509_R_INVALID_DIRECTORY);
199
+ return 0;
200
+ }
201
+
202
+ s = dir;
203
+ p = s;
204
+ do {
205
+ if ((*p == ':') || (*p == '\0')) {
206
+ BY_DIR_ENTRY *ent;
207
+ ss = s;
208
+ s = p + 1;
209
+ len = p - ss;
210
+ if (len == 0) {
211
+ continue;
212
+ }
213
+ for (j = 0; j < sk_BY_DIR_ENTRY_num(ctx->dirs); j++) {
214
+ ent = sk_BY_DIR_ENTRY_value(ctx->dirs, j);
215
+ if (strlen(ent->dir) == len && strncmp(ent->dir, ss, len) == 0) {
216
+ break;
217
+ }
218
+ }
219
+ if (j < sk_BY_DIR_ENTRY_num(ctx->dirs)) {
220
+ continue;
221
+ }
222
+ if (ctx->dirs == NULL) {
223
+ ctx->dirs = sk_BY_DIR_ENTRY_new_null();
224
+ if (!ctx->dirs) {
225
+ OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
226
+ return 0;
227
+ }
228
+ }
229
+ ent = OPENSSL_malloc(sizeof(BY_DIR_ENTRY));
230
+ if (!ent) {
231
+ return 0;
232
+ }
233
+ ent->dir_type = type;
234
+ ent->hashes = sk_BY_DIR_HASH_new(by_dir_hash_cmp);
235
+ ent->dir = OPENSSL_malloc(len + 1);
236
+ if (!ent->dir || !ent->hashes) {
237
+ by_dir_entry_free(ent);
238
+ return 0;
239
+ }
240
+ OPENSSL_strlcpy(ent->dir, ss, len + 1);
241
+ if (!sk_BY_DIR_ENTRY_push(ctx->dirs, ent)) {
242
+ by_dir_entry_free(ent);
202
243
  return 0;
244
+ }
203
245
  }
204
-
205
- s = dir;
206
- p = s;
207
- do {
208
- if ((*p == ':') || (*p == '\0')) {
209
- BY_DIR_ENTRY *ent;
210
- ss = s;
211
- s = p + 1;
212
- len = p - ss;
213
- if (len == 0)
214
- continue;
215
- for (j = 0; j < sk_BY_DIR_ENTRY_num(ctx->dirs); j++) {
216
- ent = sk_BY_DIR_ENTRY_value(ctx->dirs, j);
217
- if (strlen(ent->dir) == len &&
218
- strncmp(ent->dir, ss, len) == 0)
219
- break;
220
- }
221
- if (j < sk_BY_DIR_ENTRY_num(ctx->dirs))
222
- continue;
223
- if (ctx->dirs == NULL) {
224
- ctx->dirs = sk_BY_DIR_ENTRY_new_null();
225
- if (!ctx->dirs) {
226
- OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
227
- return 0;
228
- }
229
- }
230
- ent = OPENSSL_malloc(sizeof(BY_DIR_ENTRY));
231
- if (!ent)
232
- return 0;
233
- ent->dir_type = type;
234
- ent->hashes = sk_BY_DIR_HASH_new(by_dir_hash_cmp);
235
- ent->dir = OPENSSL_malloc(len + 1);
236
- if (!ent->dir || !ent->hashes) {
237
- by_dir_entry_free(ent);
238
- return 0;
239
- }
240
- OPENSSL_strlcpy(ent->dir, ss, len + 1);
241
- if (!sk_BY_DIR_ENTRY_push(ctx->dirs, ent)) {
242
- by_dir_entry_free(ent);
243
- return 0;
244
- }
245
- }
246
- } while (*p++ != '\0');
247
- return 1;
246
+ } while (*p++ != '\0');
247
+ return 1;
248
248
  }
249
249
 
250
- /*
251
- * g_ent_hashes_lock protects the |hashes| member of all |BY_DIR_ENTRY|
252
- * objects.
253
- */
254
- static struct CRYPTO_STATIC_MUTEX g_ent_hashes_lock =
255
- CRYPTO_STATIC_MUTEX_INIT;
250
+ // g_ent_hashes_lock protects the |hashes| member of all |BY_DIR_ENTRY|
251
+ // objects.
252
+ static struct CRYPTO_STATIC_MUTEX g_ent_hashes_lock = CRYPTO_STATIC_MUTEX_INIT;
256
253
 
257
254
  static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name,
258
- X509_OBJECT *ret)
259
- {
260
- BY_DIR *ctx;
261
- union {
262
- struct {
263
- X509 st_x509;
264
- X509_CINF st_x509_cinf;
265
- } x509;
266
- struct {
267
- X509_CRL st_crl;
268
- X509_CRL_INFO st_crl_info;
269
- } crl;
270
- } data;
271
- int ok = 0;
272
- size_t i;
273
- int j, k;
274
- unsigned long h;
275
- unsigned long hash_array[2];
276
- int hash_index;
277
- BUF_MEM *b = NULL;
278
- X509_OBJECT stmp, *tmp;
279
- const char *postfix = "";
280
-
281
- if (name == NULL)
282
- return (0);
283
-
284
- stmp.type = type;
285
- if (type == X509_LU_X509) {
286
- data.x509.st_x509.cert_info = &data.x509.st_x509_cinf;
287
- data.x509.st_x509_cinf.subject = name;
288
- stmp.data.x509 = &data.x509.st_x509;
289
- postfix = "";
290
- } else if (type == X509_LU_CRL) {
291
- data.crl.st_crl.crl = &data.crl.st_crl_info;
292
- data.crl.st_crl_info.issuer = name;
293
- stmp.data.crl = &data.crl.st_crl;
294
- postfix = "r";
295
- } else {
296
- OPENSSL_PUT_ERROR(X509, X509_R_WRONG_LOOKUP_TYPE);
297
- goto finish;
298
- }
299
-
300
- if ((b = BUF_MEM_new()) == NULL) {
301
- OPENSSL_PUT_ERROR(X509, ERR_R_BUF_LIB);
255
+ X509_OBJECT *ret) {
256
+ BY_DIR *ctx;
257
+ union {
258
+ struct {
259
+ X509 st_x509;
260
+ X509_CINF st_x509_cinf;
261
+ } x509;
262
+ struct {
263
+ X509_CRL st_crl;
264
+ X509_CRL_INFO st_crl_info;
265
+ } crl;
266
+ } data;
267
+ int ok = 0;
268
+ size_t i;
269
+ int j, k;
270
+ unsigned long h;
271
+ unsigned long hash_array[2];
272
+ int hash_index;
273
+ BUF_MEM *b = NULL;
274
+ X509_OBJECT stmp, *tmp;
275
+ const char *postfix = "";
276
+
277
+ if (name == NULL) {
278
+ return 0;
279
+ }
280
+
281
+ stmp.type = type;
282
+ if (type == X509_LU_X509) {
283
+ data.x509.st_x509.cert_info = &data.x509.st_x509_cinf;
284
+ data.x509.st_x509_cinf.subject = name;
285
+ stmp.data.x509 = &data.x509.st_x509;
286
+ postfix = "";
287
+ } else if (type == X509_LU_CRL) {
288
+ data.crl.st_crl.crl = &data.crl.st_crl_info;
289
+ data.crl.st_crl_info.issuer = name;
290
+ stmp.data.crl = &data.crl.st_crl;
291
+ postfix = "r";
292
+ } else {
293
+ OPENSSL_PUT_ERROR(X509, X509_R_WRONG_LOOKUP_TYPE);
294
+ goto finish;
295
+ }
296
+
297
+ if ((b = BUF_MEM_new()) == NULL) {
298
+ OPENSSL_PUT_ERROR(X509, ERR_R_BUF_LIB);
299
+ goto finish;
300
+ }
301
+
302
+ ctx = (BY_DIR *)xl->method_data;
303
+
304
+ hash_array[0] = X509_NAME_hash(name);
305
+ hash_array[1] = X509_NAME_hash_old(name);
306
+ for (hash_index = 0; hash_index < 2; ++hash_index) {
307
+ h = hash_array[hash_index];
308
+ for (i = 0; i < sk_BY_DIR_ENTRY_num(ctx->dirs); i++) {
309
+ BY_DIR_ENTRY *ent;
310
+ size_t idx;
311
+ BY_DIR_HASH htmp, *hent;
312
+ ent = sk_BY_DIR_ENTRY_value(ctx->dirs, i);
313
+ j = strlen(ent->dir) + 1 + 8 + 6 + 1 + 1;
314
+ if (!BUF_MEM_grow(b, j)) {
315
+ OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
302
316
  goto finish;
303
- }
304
-
305
- ctx = (BY_DIR *)xl->method_data;
306
-
307
- hash_array[0] = X509_NAME_hash(name);
308
- hash_array[1] = X509_NAME_hash_old(name);
309
- for (hash_index = 0; hash_index < 2; ++hash_index) {
310
- h = hash_array[hash_index];
311
- for (i = 0; i < sk_BY_DIR_ENTRY_num(ctx->dirs); i++) {
312
- BY_DIR_ENTRY *ent;
313
- size_t idx;
314
- BY_DIR_HASH htmp, *hent;
315
- ent = sk_BY_DIR_ENTRY_value(ctx->dirs, i);
316
- j = strlen(ent->dir) + 1 + 8 + 6 + 1 + 1;
317
- if (!BUF_MEM_grow(b, j)) {
318
- OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
319
- goto finish;
320
- }
321
- if (type == X509_LU_CRL && ent->hashes) {
322
- htmp.hash = h;
323
- CRYPTO_STATIC_MUTEX_lock_read(&g_ent_hashes_lock);
324
- if (sk_BY_DIR_HASH_find(ent->hashes, &idx, &htmp)) {
325
- hent = sk_BY_DIR_HASH_value(ent->hashes, idx);
326
- k = hent->suffix;
327
- } else {
328
- hent = NULL;
329
- k = 0;
330
- }
331
- CRYPTO_STATIC_MUTEX_unlock_read(&g_ent_hashes_lock);
332
- } else {
333
- k = 0;
334
- hent = NULL;
335
- }
336
- for (;;) {
337
- char c = '/';
317
+ }
318
+ if (type == X509_LU_CRL && ent->hashes) {
319
+ htmp.hash = h;
320
+ CRYPTO_STATIC_MUTEX_lock_read(&g_ent_hashes_lock);
321
+ if (sk_BY_DIR_HASH_find(ent->hashes, &idx, &htmp)) {
322
+ hent = sk_BY_DIR_HASH_value(ent->hashes, idx);
323
+ k = hent->suffix;
324
+ } else {
325
+ hent = NULL;
326
+ k = 0;
327
+ }
328
+ CRYPTO_STATIC_MUTEX_unlock_read(&g_ent_hashes_lock);
329
+ } else {
330
+ k = 0;
331
+ hent = NULL;
332
+ }
333
+ for (;;) {
334
+ char c = '/';
338
335
  #ifdef OPENSSL_SYS_VMS
339
- c = ent->dir[strlen(ent->dir) - 1];
340
- if (c != ':' && c != '>' && c != ']') {
341
- /*
342
- * If no separator is present, we assume the directory
343
- * specifier is a logical name, and add a colon. We
344
- * really should use better VMS routines for merging
345
- * things like this, but this will do for now... --
346
- * Richard Levitte
347
- */
348
- c = ':';
349
- } else {
350
- c = '\0';
351
- }
336
+ c = ent->dir[strlen(ent->dir) - 1];
337
+ if (c != ':' && c != '>' && c != ']') {
338
+ // If no separator is present, we assume the directory
339
+ // specifier is a logical name, and add a colon. We
340
+ // really should use better VMS routines for merging
341
+ // things like this, but this will do for now... --
342
+ // Richard Levitte
343
+ c = ':';
344
+ } else {
345
+ c = '\0';
346
+ }
352
347
  #endif
353
- if (c == '\0') {
354
- /*
355
- * This is special. When c == '\0', no directory
356
- * separator should be added.
357
- */
358
- BIO_snprintf(b->data, b->max,
359
- "%s%08lx.%s%d", ent->dir, h, postfix, k);
360
- } else {
361
- BIO_snprintf(b->data, b->max,
362
- "%s%c%08lx.%s%d", ent->dir, c, h,
363
- postfix, k);
364
- }
348
+ if (c == '\0') {
349
+ // This is special. When c == '\0', no directory
350
+ // separator should be added.
351
+ BIO_snprintf(b->data, b->max, "%s%08lx.%s%d", ent->dir, h, postfix,
352
+ k);
353
+ } else {
354
+ BIO_snprintf(b->data, b->max, "%s%c%08lx.%s%d", ent->dir, c, h,
355
+ postfix, k);
356
+ }
365
357
  #ifndef OPENSSL_NO_POSIX_IO
366
- # if defined(_WIN32) && !defined(stat)
367
- # define stat _stat
368
- # endif
369
- {
370
- struct stat st;
371
- if (stat(b->data, &st) < 0)
372
- break;
373
- }
358
+ #if defined(_WIN32) && !defined(stat)
359
+ #define stat _stat
374
360
  #endif
375
- /* found one. */
376
- if (type == X509_LU_X509) {
377
- if ((X509_load_cert_file(xl, b->data,
378
- ent->dir_type)) == 0)
379
- break;
380
- } else if (type == X509_LU_CRL) {
381
- if ((X509_load_crl_file(xl, b->data, ent->dir_type)) == 0)
382
- break;
383
- }
384
- /* else case will caught higher up */
385
- k++;
386
- }
387
-
388
- /*
389
- * we have added it to the cache so now pull it out again
390
- */
391
- CRYPTO_MUTEX_lock_write(&xl->store_ctx->objs_lock);
392
- tmp = NULL;
393
- sk_X509_OBJECT_sort(xl->store_ctx->objs);
394
- if (sk_X509_OBJECT_find(xl->store_ctx->objs, &idx, &stmp)) {
395
- tmp = sk_X509_OBJECT_value(xl->store_ctx->objs, idx);
396
- }
397
- CRYPTO_MUTEX_unlock_write(&xl->store_ctx->objs_lock);
398
-
399
- /*
400
- * If a CRL, update the last file suffix added for this
401
- */
402
-
403
- if (type == X509_LU_CRL) {
404
- CRYPTO_STATIC_MUTEX_lock_write(&g_ent_hashes_lock);
405
- /*
406
- * Look for entry again in case another thread added an entry
407
- * first.
408
- */
409
- if (!hent) {
410
- htmp.hash = h;
411
- sk_BY_DIR_HASH_sort(ent->hashes);
412
- if (sk_BY_DIR_HASH_find(ent->hashes, &idx, &htmp))
413
- hent = sk_BY_DIR_HASH_value(ent->hashes, idx);
414
- }
415
- if (!hent) {
416
- hent = OPENSSL_malloc(sizeof(BY_DIR_HASH));
417
- if (hent == NULL) {
418
- CRYPTO_STATIC_MUTEX_unlock_write(&g_ent_hashes_lock);
419
- ok = 0;
420
- goto finish;
421
- }
422
- hent->hash = h;
423
- hent->suffix = k;
424
- if (!sk_BY_DIR_HASH_push(ent->hashes, hent)) {
425
- CRYPTO_STATIC_MUTEX_unlock_write(&g_ent_hashes_lock);
426
- OPENSSL_free(hent);
427
- ok = 0;
428
- goto finish;
429
- }
430
- sk_BY_DIR_HASH_sort(ent->hashes);
431
- } else if (hent->suffix < k)
432
- hent->suffix = k;
433
-
434
- CRYPTO_STATIC_MUTEX_unlock_write(&g_ent_hashes_lock);
435
- }
436
-
437
- if (tmp != NULL) {
438
- ok = 1;
439
- ret->type = tmp->type;
440
- OPENSSL_memcpy(&ret->data, &tmp->data, sizeof(ret->data));
441
-
442
- /*
443
- * Clear any errors that might have been raised processing empty
444
- * or malformed files.
445
- */
446
- ERR_clear_error();
447
-
448
- /*
449
- * If we were going to up the reference count, we would need
450
- * to do it on a perl 'type' basis
451
- */
452
- /*
453
- * CRYPTO_add(&tmp->data.x509->references,1,
454
- * CRYPTO_LOCK_X509);
455
- */
456
- goto finish;
457
- }
361
+ {
362
+ struct stat st;
363
+ if (stat(b->data, &st) < 0) {
364
+ break;
365
+ }
458
366
  }
367
+ #endif
368
+ // found one.
369
+ if (type == X509_LU_X509) {
370
+ if ((X509_load_cert_file(xl, b->data, ent->dir_type)) == 0) {
371
+ break;
372
+ }
373
+ } else if (type == X509_LU_CRL) {
374
+ if ((X509_load_crl_file(xl, b->data, ent->dir_type)) == 0) {
375
+ break;
376
+ }
377
+ }
378
+ // else case will caught higher up
379
+ k++;
380
+ }
381
+
382
+ // we have added it to the cache so now pull it out again
383
+ CRYPTO_MUTEX_lock_write(&xl->store_ctx->objs_lock);
384
+ tmp = NULL;
385
+ sk_X509_OBJECT_sort(xl->store_ctx->objs);
386
+ if (sk_X509_OBJECT_find(xl->store_ctx->objs, &idx, &stmp)) {
387
+ tmp = sk_X509_OBJECT_value(xl->store_ctx->objs, idx);
388
+ }
389
+ CRYPTO_MUTEX_unlock_write(&xl->store_ctx->objs_lock);
390
+
391
+ // If a CRL, update the last file suffix added for this
392
+
393
+ if (type == X509_LU_CRL) {
394
+ CRYPTO_STATIC_MUTEX_lock_write(&g_ent_hashes_lock);
395
+ // Look for entry again in case another thread added an entry
396
+ // first.
397
+ if (!hent) {
398
+ htmp.hash = h;
399
+ sk_BY_DIR_HASH_sort(ent->hashes);
400
+ if (sk_BY_DIR_HASH_find(ent->hashes, &idx, &htmp)) {
401
+ hent = sk_BY_DIR_HASH_value(ent->hashes, idx);
402
+ }
403
+ }
404
+ if (!hent) {
405
+ hent = OPENSSL_malloc(sizeof(BY_DIR_HASH));
406
+ if (hent == NULL) {
407
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_ent_hashes_lock);
408
+ ok = 0;
409
+ goto finish;
410
+ }
411
+ hent->hash = h;
412
+ hent->suffix = k;
413
+ if (!sk_BY_DIR_HASH_push(ent->hashes, hent)) {
414
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_ent_hashes_lock);
415
+ OPENSSL_free(hent);
416
+ ok = 0;
417
+ goto finish;
418
+ }
419
+ sk_BY_DIR_HASH_sort(ent->hashes);
420
+ } else if (hent->suffix < k) {
421
+ hent->suffix = k;
422
+ }
423
+
424
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_ent_hashes_lock);
425
+ }
426
+
427
+ if (tmp != NULL) {
428
+ ok = 1;
429
+ ret->type = tmp->type;
430
+ OPENSSL_memcpy(&ret->data, &tmp->data, sizeof(ret->data));
431
+
432
+ // Clear any errors that might have been raised processing empty
433
+ // or malformed files.
434
+ ERR_clear_error();
435
+
436
+ // If we were going to up the reference count, we would need
437
+ // to do it on a perl 'type' basis
438
+ goto finish;
439
+ }
459
440
  }
460
- finish:
461
- if (b != NULL)
462
- BUF_MEM_free(b);
463
- return (ok);
441
+ }
442
+ finish:
443
+ if (b != NULL) {
444
+ BUF_MEM_free(b);
445
+ }
446
+ return ok;
464
447
  }
465
448
 
466
449
  #endif // OPENSSL_TRUSTY