@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
@@ -70,8 +70,7 @@
70
70
 
71
71
 
72
72
  static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
73
- X509V3_CTX *ctx,
74
- STACK_OF(CONF_VALUE) *nval);
73
+ X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
75
74
  static int i2r_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, void *a,
76
75
  BIO *bp, int ind);
77
76
  static int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
@@ -87,26 +86,33 @@ static int nc_email(ASN1_IA5STRING *sub, ASN1_IA5STRING *eml);
87
86
  static int nc_uri(ASN1_IA5STRING *uri, ASN1_IA5STRING *base);
88
87
 
89
88
  const X509V3_EXT_METHOD v3_name_constraints = {
90
- NID_name_constraints, 0,
89
+ NID_name_constraints,
90
+ 0,
91
91
  ASN1_ITEM_ref(NAME_CONSTRAINTS),
92
- 0, 0, 0, 0,
93
- 0, 0,
94
- 0, v2i_NAME_CONSTRAINTS,
95
- i2r_NAME_CONSTRAINTS, 0,
92
+ 0,
93
+ 0,
94
+ 0,
95
+ 0,
96
+ 0,
97
+ 0,
98
+ 0,
99
+ v2i_NAME_CONSTRAINTS,
100
+ i2r_NAME_CONSTRAINTS,
101
+ 0,
96
102
  NULL,
97
103
  };
98
104
 
99
105
  ASN1_SEQUENCE(GENERAL_SUBTREE) = {
100
- ASN1_SIMPLE(GENERAL_SUBTREE, base, GENERAL_NAME),
101
- ASN1_IMP_OPT(GENERAL_SUBTREE, minimum, ASN1_INTEGER, 0),
102
- ASN1_IMP_OPT(GENERAL_SUBTREE, maximum, ASN1_INTEGER, 1),
106
+ ASN1_SIMPLE(GENERAL_SUBTREE, base, GENERAL_NAME),
107
+ ASN1_IMP_OPT(GENERAL_SUBTREE, minimum, ASN1_INTEGER, 0),
108
+ ASN1_IMP_OPT(GENERAL_SUBTREE, maximum, ASN1_INTEGER, 1),
103
109
  } ASN1_SEQUENCE_END(GENERAL_SUBTREE)
104
110
 
105
111
  ASN1_SEQUENCE(NAME_CONSTRAINTS) = {
106
- ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, permittedSubtrees,
107
- GENERAL_SUBTREE, 0),
108
- ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, excludedSubtrees,
109
- GENERAL_SUBTREE, 1),
112
+ ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, permittedSubtrees,
113
+ GENERAL_SUBTREE, 0),
114
+ ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, excludedSubtrees,
115
+ GENERAL_SUBTREE, 1),
110
116
  } ASN1_SEQUENCE_END(NAME_CONSTRAINTS)
111
117
 
112
118
 
@@ -114,446 +120,444 @@ IMPLEMENT_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)
114
120
  IMPLEMENT_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)
115
121
 
116
122
  static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
117
- X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval)
118
- {
119
- size_t i;
120
- CONF_VALUE tval, *val;
121
- STACK_OF(GENERAL_SUBTREE) **ptree = NULL;
122
- NAME_CONSTRAINTS *ncons = NULL;
123
- GENERAL_SUBTREE *sub = NULL;
124
- ncons = NAME_CONSTRAINTS_new();
125
- if (!ncons)
126
- goto memerr;
127
- for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
128
- val = sk_CONF_VALUE_value(nval, i);
129
- if (!strncmp(val->name, "permitted", 9) && val->name[9]) {
130
- ptree = &ncons->permittedSubtrees;
131
- tval.name = val->name + 10;
132
- } else if (!strncmp(val->name, "excluded", 8) && val->name[8]) {
133
- ptree = &ncons->excludedSubtrees;
134
- tval.name = val->name + 9;
135
- } else {
136
- OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SYNTAX);
137
- goto err;
138
- }
139
- tval.value = val->value;
140
- sub = GENERAL_SUBTREE_new();
141
- if (!v2i_GENERAL_NAME_ex(sub->base, method, ctx, &tval, 1))
142
- goto err;
143
- if (!*ptree)
144
- *ptree = sk_GENERAL_SUBTREE_new_null();
145
- if (!*ptree || !sk_GENERAL_SUBTREE_push(*ptree, sub))
146
- goto memerr;
147
- sub = NULL;
123
+ X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) {
124
+ size_t i;
125
+ CONF_VALUE tval, *val;
126
+ STACK_OF(GENERAL_SUBTREE) **ptree = NULL;
127
+ NAME_CONSTRAINTS *ncons = NULL;
128
+ GENERAL_SUBTREE *sub = NULL;
129
+ ncons = NAME_CONSTRAINTS_new();
130
+ if (!ncons) {
131
+ goto memerr;
132
+ }
133
+ for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
134
+ val = sk_CONF_VALUE_value(nval, i);
135
+ if (!strncmp(val->name, "permitted", 9) && val->name[9]) {
136
+ ptree = &ncons->permittedSubtrees;
137
+ tval.name = val->name + 10;
138
+ } else if (!strncmp(val->name, "excluded", 8) && val->name[8]) {
139
+ ptree = &ncons->excludedSubtrees;
140
+ tval.name = val->name + 9;
141
+ } else {
142
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SYNTAX);
143
+ goto err;
148
144
  }
149
-
150
- return ncons;
151
-
152
- memerr:
153
- OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
154
- err:
155
- if (ncons)
156
- NAME_CONSTRAINTS_free(ncons);
157
- if (sub)
158
- GENERAL_SUBTREE_free(sub);
159
-
160
- return NULL;
145
+ tval.value = val->value;
146
+ sub = GENERAL_SUBTREE_new();
147
+ if (!v2i_GENERAL_NAME_ex(sub->base, method, ctx, &tval, 1)) {
148
+ goto err;
149
+ }
150
+ if (!*ptree) {
151
+ *ptree = sk_GENERAL_SUBTREE_new_null();
152
+ }
153
+ if (!*ptree || !sk_GENERAL_SUBTREE_push(*ptree, sub)) {
154
+ goto memerr;
155
+ }
156
+ sub = NULL;
157
+ }
158
+
159
+ return ncons;
160
+
161
+ memerr:
162
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
163
+ err:
164
+ if (ncons) {
165
+ NAME_CONSTRAINTS_free(ncons);
166
+ }
167
+ if (sub) {
168
+ GENERAL_SUBTREE_free(sub);
169
+ }
170
+
171
+ return NULL;
161
172
  }
162
173
 
163
174
  static int i2r_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, void *a,
164
- BIO *bp, int ind)
165
- {
166
- NAME_CONSTRAINTS *ncons = a;
167
- do_i2r_name_constraints(method, ncons->permittedSubtrees,
168
- bp, ind, "Permitted");
169
- do_i2r_name_constraints(method, ncons->excludedSubtrees,
170
- bp, ind, "Excluded");
171
- return 1;
175
+ BIO *bp, int ind) {
176
+ NAME_CONSTRAINTS *ncons = a;
177
+ do_i2r_name_constraints(method, ncons->permittedSubtrees, bp, ind,
178
+ "Permitted");
179
+ do_i2r_name_constraints(method, ncons->excludedSubtrees, bp, ind, "Excluded");
180
+ return 1;
172
181
  }
173
182
 
174
183
  static int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
175
- STACK_OF(GENERAL_SUBTREE) *trees,
176
- BIO *bp, int ind, const char *name)
177
- {
178
- GENERAL_SUBTREE *tree;
179
- size_t i;
180
- if (sk_GENERAL_SUBTREE_num(trees) > 0)
181
- BIO_printf(bp, "%*s%s:\n", ind, "", name);
182
- for (i = 0; i < sk_GENERAL_SUBTREE_num(trees); i++) {
183
- tree = sk_GENERAL_SUBTREE_value(trees, i);
184
- BIO_printf(bp, "%*s", ind + 2, "");
185
- if (tree->base->type == GEN_IPADD)
186
- print_nc_ipadd(bp, tree->base->d.ip);
187
- else
188
- GENERAL_NAME_print(bp, tree->base);
189
- BIO_puts(bp, "\n");
184
+ STACK_OF(GENERAL_SUBTREE) *trees, BIO *bp,
185
+ int ind, const char *name) {
186
+ GENERAL_SUBTREE *tree;
187
+ size_t i;
188
+ if (sk_GENERAL_SUBTREE_num(trees) > 0) {
189
+ BIO_printf(bp, "%*s%s:\n", ind, "", name);
190
+ }
191
+ for (i = 0; i < sk_GENERAL_SUBTREE_num(trees); i++) {
192
+ tree = sk_GENERAL_SUBTREE_value(trees, i);
193
+ BIO_printf(bp, "%*s", ind + 2, "");
194
+ if (tree->base->type == GEN_IPADD) {
195
+ print_nc_ipadd(bp, tree->base->d.ip);
196
+ } else {
197
+ GENERAL_NAME_print(bp, tree->base);
190
198
  }
191
- return 1;
199
+ BIO_puts(bp, "\n");
200
+ }
201
+ return 1;
192
202
  }
193
203
 
194
- static int print_nc_ipadd(BIO *bp, ASN1_OCTET_STRING *ip)
195
- {
196
- int i, len;
197
- unsigned char *p;
198
- p = ip->data;
199
- len = ip->length;
200
- BIO_puts(bp, "IP:");
201
- if (len == 8) {
202
- BIO_printf(bp, "%d.%d.%d.%d/%d.%d.%d.%d",
203
- p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
204
- } else if (len == 32) {
205
- for (i = 0; i < 16; i++) {
206
- uint16_t v = ((uint16_t)p[0] << 8) | p[1];
207
- BIO_printf(bp, "%X", v);
208
- p += 2;
209
- if (i == 7)
210
- BIO_puts(bp, "/");
211
- else if (i != 15)
212
- BIO_puts(bp, ":");
213
- }
214
- } else
215
- BIO_printf(bp, "IP Address:<invalid>");
216
- return 1;
204
+ static int print_nc_ipadd(BIO *bp, ASN1_OCTET_STRING *ip) {
205
+ int i, len;
206
+ unsigned char *p;
207
+ p = ip->data;
208
+ len = ip->length;
209
+ BIO_puts(bp, "IP:");
210
+ if (len == 8) {
211
+ BIO_printf(bp, "%d.%d.%d.%d/%d.%d.%d.%d", p[0], p[1], p[2], p[3], p[4],
212
+ p[5], p[6], p[7]);
213
+ } else if (len == 32) {
214
+ for (i = 0; i < 16; i++) {
215
+ uint16_t v = ((uint16_t)p[0] << 8) | p[1];
216
+ BIO_printf(bp, "%X", v);
217
+ p += 2;
218
+ if (i == 7) {
219
+ BIO_puts(bp, "/");
220
+ } else if (i != 15) {
221
+ BIO_puts(bp, ":");
222
+ }
223
+ }
224
+ } else {
225
+ BIO_printf(bp, "IP Address:<invalid>");
226
+ }
227
+ return 1;
217
228
  }
218
229
 
219
- /*-
220
- * Check a certificate conforms to a specified set of constraints.
221
- * Return values:
222
- * X509_V_OK: All constraints obeyed.
223
- * X509_V_ERR_PERMITTED_VIOLATION: Permitted subtree violation.
224
- * X509_V_ERR_EXCLUDED_VIOLATION: Excluded subtree violation.
225
- * X509_V_ERR_SUBTREE_MINMAX: Min or max values present and matching type.
226
- * X509_V_ERR_UNSPECIFIED: Unspecified error.
227
- * X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: Unsupported constraint type.
228
- * X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: Bad or unsupported constraint
229
- * syntax.
230
- * X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: Bad or unsupported syntax of name.
231
- */
232
-
233
- int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc)
234
- {
235
- int r, i;
236
- size_t j;
237
- X509_NAME *nm;
238
-
239
- nm = X509_get_subject_name(x);
240
-
241
- /* Guard against certificates with an excessive number of names or
242
- * constraints causing a computationally expensive name constraints
243
- * check. */
244
- size_t name_count =
245
- X509_NAME_entry_count(nm) + sk_GENERAL_NAME_num(x->altname);
246
- size_t constraint_count = sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) +
247
- sk_GENERAL_SUBTREE_num(nc->excludedSubtrees);
248
- size_t check_count = constraint_count * name_count;
249
- if (name_count < (size_t)X509_NAME_entry_count(nm) ||
250
- constraint_count < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) ||
251
- (constraint_count && check_count / constraint_count != name_count) ||
252
- check_count > 1 << 20) {
253
- return X509_V_ERR_UNSPECIFIED;
230
+ //-
231
+ // Check a certificate conforms to a specified set of constraints.
232
+ // Return values:
233
+ // X509_V_OK: All constraints obeyed.
234
+ // X509_V_ERR_PERMITTED_VIOLATION: Permitted subtree violation.
235
+ // X509_V_ERR_EXCLUDED_VIOLATION: Excluded subtree violation.
236
+ // X509_V_ERR_SUBTREE_MINMAX: Min or max values present and matching type.
237
+ // X509_V_ERR_UNSPECIFIED: Unspecified error.
238
+ // X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: Unsupported constraint type.
239
+ // X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: Bad or unsupported constraint
240
+ // syntax.
241
+ // X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: Bad or unsupported syntax of name.
242
+
243
+ int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc) {
244
+ int r, i;
245
+ size_t j;
246
+ X509_NAME *nm;
247
+
248
+ nm = X509_get_subject_name(x);
249
+
250
+ // Guard against certificates with an excessive number of names or
251
+ // constraints causing a computationally expensive name constraints
252
+ // check.
253
+ size_t name_count =
254
+ X509_NAME_entry_count(nm) + sk_GENERAL_NAME_num(x->altname);
255
+ size_t constraint_count = sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) +
256
+ sk_GENERAL_SUBTREE_num(nc->excludedSubtrees);
257
+ size_t check_count = constraint_count * name_count;
258
+ if (name_count < (size_t)X509_NAME_entry_count(nm) ||
259
+ constraint_count < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) ||
260
+ (constraint_count && check_count / constraint_count != name_count) ||
261
+ check_count > 1 << 20) {
262
+ return X509_V_ERR_UNSPECIFIED;
263
+ }
264
+
265
+ if (X509_NAME_entry_count(nm) > 0) {
266
+ GENERAL_NAME gntmp;
267
+ gntmp.type = GEN_DIRNAME;
268
+ gntmp.d.directoryName = nm;
269
+
270
+ r = nc_match(&gntmp, nc);
271
+
272
+ if (r != X509_V_OK) {
273
+ return r;
254
274
  }
255
275
 
256
- if (X509_NAME_entry_count(nm) > 0) {
257
- GENERAL_NAME gntmp;
258
- gntmp.type = GEN_DIRNAME;
259
- gntmp.d.directoryName = nm;
260
-
261
- r = nc_match(&gntmp, nc);
262
-
263
- if (r != X509_V_OK)
264
- return r;
265
-
266
- gntmp.type = GEN_EMAIL;
276
+ gntmp.type = GEN_EMAIL;
267
277
 
268
- /* Process any email address attributes in subject name */
278
+ // Process any email address attributes in subject name
269
279
 
270
- for (i = -1;;) {
271
- X509_NAME_ENTRY *ne;
272
- i = X509_NAME_get_index_by_NID(nm, NID_pkcs9_emailAddress, i);
273
- if (i == -1)
274
- break;
275
- ne = X509_NAME_get_entry(nm, i);
276
- gntmp.d.rfc822Name = X509_NAME_ENTRY_get_data(ne);
277
- if (gntmp.d.rfc822Name->type != V_ASN1_IA5STRING)
278
- return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
279
-
280
- r = nc_match(&gntmp, nc);
280
+ for (i = -1;;) {
281
+ X509_NAME_ENTRY *ne;
282
+ i = X509_NAME_get_index_by_NID(nm, NID_pkcs9_emailAddress, i);
283
+ if (i == -1) {
284
+ break;
285
+ }
286
+ ne = X509_NAME_get_entry(nm, i);
287
+ gntmp.d.rfc822Name = X509_NAME_ENTRY_get_data(ne);
288
+ if (gntmp.d.rfc822Name->type != V_ASN1_IA5STRING) {
289
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
290
+ }
281
291
 
282
- if (r != X509_V_OK)
283
- return r;
284
- }
292
+ r = nc_match(&gntmp, nc);
285
293
 
294
+ if (r != X509_V_OK) {
295
+ return r;
296
+ }
286
297
  }
298
+ }
287
299
 
288
- for (j = 0; j < sk_GENERAL_NAME_num(x->altname); j++) {
289
- GENERAL_NAME *gen = sk_GENERAL_NAME_value(x->altname, j);
290
- r = nc_match(gen, nc);
291
- if (r != X509_V_OK)
292
- return r;
300
+ for (j = 0; j < sk_GENERAL_NAME_num(x->altname); j++) {
301
+ GENERAL_NAME *gen = sk_GENERAL_NAME_value(x->altname, j);
302
+ r = nc_match(gen, nc);
303
+ if (r != X509_V_OK) {
304
+ return r;
293
305
  }
306
+ }
294
307
 
295
- return X509_V_OK;
296
-
308
+ return X509_V_OK;
297
309
  }
298
310
 
299
- static int nc_match(GENERAL_NAME *gen, NAME_CONSTRAINTS *nc)
300
- {
301
- GENERAL_SUBTREE *sub;
302
- int r, match = 0;
303
- size_t i;
304
-
305
- /*
306
- * Permitted subtrees: if any subtrees exist of matching the type at
307
- * least one subtree must match.
308
- */
309
-
310
- for (i = 0; i < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees); i++) {
311
- sub = sk_GENERAL_SUBTREE_value(nc->permittedSubtrees, i);
312
- if (gen->type != sub->base->type)
313
- continue;
314
- if (sub->minimum || sub->maximum)
315
- return X509_V_ERR_SUBTREE_MINMAX;
316
- /* If we already have a match don't bother trying any more */
317
- if (match == 2)
318
- continue;
319
- if (match == 0)
320
- match = 1;
321
- r = nc_match_single(gen, sub->base);
322
- if (r == X509_V_OK)
323
- match = 2;
324
- else if (r != X509_V_ERR_PERMITTED_VIOLATION)
325
- return r;
326
- }
311
+ static int nc_match(GENERAL_NAME *gen, NAME_CONSTRAINTS *nc) {
312
+ GENERAL_SUBTREE *sub;
313
+ int r, match = 0;
314
+ size_t i;
327
315
 
328
- if (match == 1)
329
- return X509_V_ERR_PERMITTED_VIOLATION;
316
+ // Permitted subtrees: if any subtrees exist of matching the type at
317
+ // least one subtree must match.
330
318
 
331
- /* Excluded subtrees: must not match any of these */
319
+ for (i = 0; i < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees); i++) {
320
+ sub = sk_GENERAL_SUBTREE_value(nc->permittedSubtrees, i);
321
+ if (gen->type != sub->base->type) {
322
+ continue;
323
+ }
324
+ if (sub->minimum || sub->maximum) {
325
+ return X509_V_ERR_SUBTREE_MINMAX;
326
+ }
327
+ // If we already have a match don't bother trying any more
328
+ if (match == 2) {
329
+ continue;
330
+ }
331
+ if (match == 0) {
332
+ match = 1;
333
+ }
334
+ r = nc_match_single(gen, sub->base);
335
+ if (r == X509_V_OK) {
336
+ match = 2;
337
+ } else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
338
+ return r;
339
+ }
340
+ }
332
341
 
333
- for (i = 0; i < sk_GENERAL_SUBTREE_num(nc->excludedSubtrees); i++) {
334
- sub = sk_GENERAL_SUBTREE_value(nc->excludedSubtrees, i);
335
- if (gen->type != sub->base->type)
336
- continue;
337
- if (sub->minimum || sub->maximum)
338
- return X509_V_ERR_SUBTREE_MINMAX;
342
+ if (match == 1) {
343
+ return X509_V_ERR_PERMITTED_VIOLATION;
344
+ }
339
345
 
340
- r = nc_match_single(gen, sub->base);
341
- if (r == X509_V_OK)
342
- return X509_V_ERR_EXCLUDED_VIOLATION;
343
- else if (r != X509_V_ERR_PERMITTED_VIOLATION)
344
- return r;
346
+ // Excluded subtrees: must not match any of these
345
347
 
348
+ for (i = 0; i < sk_GENERAL_SUBTREE_num(nc->excludedSubtrees); i++) {
349
+ sub = sk_GENERAL_SUBTREE_value(nc->excludedSubtrees, i);
350
+ if (gen->type != sub->base->type) {
351
+ continue;
352
+ }
353
+ if (sub->minimum || sub->maximum) {
354
+ return X509_V_ERR_SUBTREE_MINMAX;
346
355
  }
347
356
 
348
- return X509_V_OK;
357
+ r = nc_match_single(gen, sub->base);
358
+ if (r == X509_V_OK) {
359
+ return X509_V_ERR_EXCLUDED_VIOLATION;
360
+ } else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
361
+ return r;
362
+ }
363
+ }
349
364
 
365
+ return X509_V_OK;
350
366
  }
351
367
 
352
- static int nc_match_single(GENERAL_NAME *gen, GENERAL_NAME *base)
353
- {
354
- switch (base->type) {
368
+ static int nc_match_single(GENERAL_NAME *gen, GENERAL_NAME *base) {
369
+ switch (base->type) {
355
370
  case GEN_DIRNAME:
356
- return nc_dn(gen->d.directoryName, base->d.directoryName);
371
+ return nc_dn(gen->d.directoryName, base->d.directoryName);
357
372
 
358
373
  case GEN_DNS:
359
- return nc_dns(gen->d.dNSName, base->d.dNSName);
374
+ return nc_dns(gen->d.dNSName, base->d.dNSName);
360
375
 
361
376
  case GEN_EMAIL:
362
- return nc_email(gen->d.rfc822Name, base->d.rfc822Name);
377
+ return nc_email(gen->d.rfc822Name, base->d.rfc822Name);
363
378
 
364
379
  case GEN_URI:
365
- return nc_uri(gen->d.uniformResourceIdentifier,
366
- base->d.uniformResourceIdentifier);
380
+ return nc_uri(gen->d.uniformResourceIdentifier,
381
+ base->d.uniformResourceIdentifier);
367
382
 
368
383
  default:
369
- return X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE;
370
- }
371
-
384
+ return X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE;
385
+ }
372
386
  }
373
387
 
374
- /*
375
- * directoryName name constraint matching. The canonical encoding of
376
- * X509_NAME makes this comparison easy. It is matched if the subtree is a
377
- * subset of the name.
378
- */
379
-
380
- static int nc_dn(X509_NAME *nm, X509_NAME *base)
381
- {
382
- /* Ensure canonical encodings are up to date. */
383
- if (nm->modified && i2d_X509_NAME(nm, NULL) < 0)
384
- return X509_V_ERR_OUT_OF_MEM;
385
- if (base->modified && i2d_X509_NAME(base, NULL) < 0)
386
- return X509_V_ERR_OUT_OF_MEM;
387
- if (base->canon_enclen > nm->canon_enclen)
388
- return X509_V_ERR_PERMITTED_VIOLATION;
389
- if (OPENSSL_memcmp(base->canon_enc, nm->canon_enc, base->canon_enclen))
390
- return X509_V_ERR_PERMITTED_VIOLATION;
391
- return X509_V_OK;
388
+ // directoryName name constraint matching. The canonical encoding of
389
+ // X509_NAME makes this comparison easy. It is matched if the subtree is a
390
+ // subset of the name.
391
+
392
+ static int nc_dn(X509_NAME *nm, X509_NAME *base) {
393
+ // Ensure canonical encodings are up to date.
394
+ if (nm->modified && i2d_X509_NAME(nm, NULL) < 0) {
395
+ return X509_V_ERR_OUT_OF_MEM;
396
+ }
397
+ if (base->modified && i2d_X509_NAME(base, NULL) < 0) {
398
+ return X509_V_ERR_OUT_OF_MEM;
399
+ }
400
+ if (base->canon_enclen > nm->canon_enclen) {
401
+ return X509_V_ERR_PERMITTED_VIOLATION;
402
+ }
403
+ if (OPENSSL_memcmp(base->canon_enc, nm->canon_enc, base->canon_enclen)) {
404
+ return X509_V_ERR_PERMITTED_VIOLATION;
405
+ }
406
+ return X509_V_OK;
392
407
  }
393
408
 
394
- static int starts_with(const CBS *cbs, uint8_t c)
395
- {
396
- return CBS_len(cbs) > 0 && CBS_data(cbs)[0] == c;
409
+ static int starts_with(const CBS *cbs, uint8_t c) {
410
+ return CBS_len(cbs) > 0 && CBS_data(cbs)[0] == c;
397
411
  }
398
412
 
399
- static int equal_case(const CBS *a, const CBS *b)
400
- {
401
- if (CBS_len(a) != CBS_len(b)) {
402
- return 0;
403
- }
404
- /* Note we cannot use |OPENSSL_strncasecmp| because that would stop
405
- * iterating at NUL. */
406
- const uint8_t *a_data = CBS_data(a), *b_data = CBS_data(b);
407
- for (size_t i = 0; i < CBS_len(a); i++) {
408
- if (OPENSSL_tolower(a_data[i]) != OPENSSL_tolower(b_data[i])) {
409
- return 0;
410
- }
413
+ static int equal_case(const CBS *a, const CBS *b) {
414
+ if (CBS_len(a) != CBS_len(b)) {
415
+ return 0;
416
+ }
417
+ // Note we cannot use |OPENSSL_strncasecmp| because that would stop
418
+ // iterating at NUL.
419
+ const uint8_t *a_data = CBS_data(a), *b_data = CBS_data(b);
420
+ for (size_t i = 0; i < CBS_len(a); i++) {
421
+ if (OPENSSL_tolower(a_data[i]) != OPENSSL_tolower(b_data[i])) {
422
+ return 0;
411
423
  }
412
- return 1;
424
+ }
425
+ return 1;
413
426
  }
414
427
 
415
- static int has_suffix_case(const CBS *a, const CBS *b)
416
- {
417
- if (CBS_len(a) < CBS_len(b)) {
418
- return 0;
419
- }
420
- CBS copy = *a;
421
- CBS_skip(&copy, CBS_len(a) - CBS_len(b));
422
- return equal_case(&copy, b);
428
+ static int has_suffix_case(const CBS *a, const CBS *b) {
429
+ if (CBS_len(a) < CBS_len(b)) {
430
+ return 0;
431
+ }
432
+ CBS copy = *a;
433
+ CBS_skip(&copy, CBS_len(a) - CBS_len(b));
434
+ return equal_case(&copy, b);
423
435
  }
424
436
 
425
- static int nc_dns(ASN1_IA5STRING *dns, ASN1_IA5STRING *base)
426
- {
427
- CBS dns_cbs, base_cbs;
428
- CBS_init(&dns_cbs, dns->data, dns->length);
429
- CBS_init(&base_cbs, base->data, base->length);
430
-
431
- /* Empty matches everything */
432
- if (CBS_len(&base_cbs) == 0) {
433
- return X509_V_OK;
434
- }
435
-
436
- /* If |base_cbs| begins with a '.', do a simple suffix comparison. This is
437
- * not part of RFC5280, but is part of OpenSSL's original behavior. */
438
- if (starts_with(&base_cbs, '.')) {
439
- if (has_suffix_case(&dns_cbs, &base_cbs)) {
440
- return X509_V_OK;
441
- }
442
- return X509_V_ERR_PERMITTED_VIOLATION;
443
- }
444
-
445
- /*
446
- * Otherwise can add zero or more components on the left so compare RHS
447
- * and if dns is longer and expect '.' as preceding character.
448
- */
449
- if (CBS_len(&dns_cbs) > CBS_len(&base_cbs)) {
450
- uint8_t dot;
451
- if (!CBS_skip(&dns_cbs, CBS_len(&dns_cbs) - CBS_len(&base_cbs) - 1) ||
452
- !CBS_get_u8(&dns_cbs, &dot) ||
453
- dot != '.') {
454
- return X509_V_ERR_PERMITTED_VIOLATION;
455
- }
456
- }
457
-
458
- if (!equal_case(&dns_cbs, &base_cbs)) {
459
- return X509_V_ERR_PERMITTED_VIOLATION;
460
- }
437
+ static int nc_dns(ASN1_IA5STRING *dns, ASN1_IA5STRING *base) {
438
+ CBS dns_cbs, base_cbs;
439
+ CBS_init(&dns_cbs, dns->data, dns->length);
440
+ CBS_init(&base_cbs, base->data, base->length);
461
441
 
442
+ // Empty matches everything
443
+ if (CBS_len(&base_cbs) == 0) {
462
444
  return X509_V_OK;
445
+ }
463
446
 
464
- }
465
-
466
- static int nc_email(ASN1_IA5STRING *eml, ASN1_IA5STRING *base)
467
- {
468
- CBS eml_cbs, base_cbs;
469
- CBS_init(&eml_cbs, eml->data, eml->length);
470
- CBS_init(&base_cbs, base->data, base->length);
471
-
472
- /* TODO(davidben): In OpenSSL 1.1.1, this switched from the first '@' to the
473
- * last one. Match them here, or perhaps do an actual parse. Looks like
474
- * multiple '@'s may be allowed in quoted strings. */
475
- CBS eml_local, base_local;
476
- if (!CBS_get_until_first(&eml_cbs, &eml_local, '@')) {
477
- return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
447
+ // If |base_cbs| begins with a '.', do a simple suffix comparison. This is
448
+ // not part of RFC5280, but is part of OpenSSL's original behavior.
449
+ if (starts_with(&base_cbs, '.')) {
450
+ if (has_suffix_case(&dns_cbs, &base_cbs)) {
451
+ return X509_V_OK;
478
452
  }
479
- int base_has_at = CBS_get_until_first(&base_cbs, &base_local, '@');
480
-
481
- /* Special case: inital '.' is RHS match */
482
- if (!base_has_at && starts_with(&base_cbs, '.')) {
483
- if (has_suffix_case(&eml_cbs, &base_cbs)) {
484
- return X509_V_OK;
485
- }
486
- return X509_V_ERR_PERMITTED_VIOLATION;
487
- }
488
-
489
- /* If we have anything before '@' match local part */
490
- if (base_has_at) {
491
- /* TODO(davidben): This interprets a constraint of "@example.com" as
492
- * "example.com", which is not part of RFC5280. */
493
- if (CBS_len(&base_local) > 0) {
494
- /* Case sensitive match of local part */
495
- if (!CBS_mem_equal(&base_local, CBS_data(&eml_local),
496
- CBS_len(&eml_local))) {
497
- return X509_V_ERR_PERMITTED_VIOLATION;
498
- }
499
- }
500
- /* Position base after '@' */
501
- assert(starts_with(&base_cbs, '@'));
502
- CBS_skip(&base_cbs, 1);
453
+ return X509_V_ERR_PERMITTED_VIOLATION;
454
+ }
455
+
456
+ // Otherwise can add zero or more components on the left so compare RHS
457
+ // and if dns is longer and expect '.' as preceding character.
458
+ if (CBS_len(&dns_cbs) > CBS_len(&base_cbs)) {
459
+ uint8_t dot;
460
+ if (!CBS_skip(&dns_cbs, CBS_len(&dns_cbs) - CBS_len(&base_cbs) - 1) ||
461
+ !CBS_get_u8(&dns_cbs, &dot) || dot != '.') {
462
+ return X509_V_ERR_PERMITTED_VIOLATION;
503
463
  }
464
+ }
504
465
 
505
- /* Just have hostname left to match: case insensitive */
506
- assert(starts_with(&eml_cbs, '@'));
507
- CBS_skip(&eml_cbs, 1);
508
- if (!equal_case(&base_cbs, &eml_cbs)) {
509
- return X509_V_ERR_PERMITTED_VIOLATION;
510
- }
466
+ if (!equal_case(&dns_cbs, &base_cbs)) {
467
+ return X509_V_ERR_PERMITTED_VIOLATION;
468
+ }
511
469
 
512
- return X509_V_OK;
470
+ return X509_V_OK;
513
471
  }
514
472
 
515
- static int nc_uri(ASN1_IA5STRING *uri, ASN1_IA5STRING *base)
516
- {
517
- CBS uri_cbs, base_cbs;
518
- CBS_init(&uri_cbs, uri->data, uri->length);
519
- CBS_init(&base_cbs, base->data, base->length);
520
-
521
- /* Check for foo:// and skip past it */
522
- CBS scheme;
523
- uint8_t byte;
524
- if (!CBS_get_until_first(&uri_cbs, &scheme, ':') ||
525
- !CBS_skip(&uri_cbs, 1) || // Skip the colon
526
- !CBS_get_u8(&uri_cbs, &byte) || byte != '/' ||
527
- !CBS_get_u8(&uri_cbs, &byte) || byte != '/') {
528
- return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
529
- }
530
-
531
- /* Look for a port indicator as end of hostname first. Otherwise look for
532
- * trailing slash, or the end of the string.
533
- * TODO(davidben): This is not a correct URI parser and mishandles IPv6
534
- * literals. */
535
- CBS host;
536
- if (!CBS_get_until_first(&uri_cbs, &host, ':') &&
537
- !CBS_get_until_first(&uri_cbs, &host, '/')) {
538
- host = uri_cbs;
539
- }
540
-
541
- if (CBS_len(&host) == 0) {
542
- return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
473
+ static int nc_email(ASN1_IA5STRING *eml, ASN1_IA5STRING *base) {
474
+ CBS eml_cbs, base_cbs;
475
+ CBS_init(&eml_cbs, eml->data, eml->length);
476
+ CBS_init(&base_cbs, base->data, base->length);
477
+
478
+ // TODO(davidben): In OpenSSL 1.1.1, this switched from the first '@' to the
479
+ // last one. Match them here, or perhaps do an actual parse. Looks like
480
+ // multiple '@'s may be allowed in quoted strings.
481
+ CBS eml_local, base_local;
482
+ if (!CBS_get_until_first(&eml_cbs, &eml_local, '@')) {
483
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
484
+ }
485
+ int base_has_at = CBS_get_until_first(&base_cbs, &base_local, '@');
486
+
487
+ // Special case: inital '.' is RHS match
488
+ if (!base_has_at && starts_with(&base_cbs, '.')) {
489
+ if (has_suffix_case(&eml_cbs, &base_cbs)) {
490
+ return X509_V_OK;
543
491
  }
544
-
545
- /* Special case: inital '.' is RHS match */
546
- if (starts_with(&base_cbs, '.')) {
547
- if (has_suffix_case(&host, &base_cbs)) {
548
- return X509_V_OK;
549
- }
492
+ return X509_V_ERR_PERMITTED_VIOLATION;
493
+ }
494
+
495
+ // If we have anything before '@' match local part
496
+ if (base_has_at) {
497
+ // TODO(davidben): This interprets a constraint of "@example.com" as
498
+ // "example.com", which is not part of RFC5280.
499
+ if (CBS_len(&base_local) > 0) {
500
+ // Case sensitive match of local part
501
+ if (!CBS_mem_equal(&base_local, CBS_data(&eml_local),
502
+ CBS_len(&eml_local))) {
550
503
  return X509_V_ERR_PERMITTED_VIOLATION;
504
+ }
551
505
  }
506
+ // Position base after '@'
507
+ assert(starts_with(&base_cbs, '@'));
508
+ CBS_skip(&base_cbs, 1);
509
+ }
510
+
511
+ // Just have hostname left to match: case insensitive
512
+ assert(starts_with(&eml_cbs, '@'));
513
+ CBS_skip(&eml_cbs, 1);
514
+ if (!equal_case(&base_cbs, &eml_cbs)) {
515
+ return X509_V_ERR_PERMITTED_VIOLATION;
516
+ }
517
+
518
+ return X509_V_OK;
519
+ }
552
520
 
553
- if (!equal_case(&base_cbs, &host)) {
554
- return X509_V_ERR_PERMITTED_VIOLATION;
521
+ static int nc_uri(ASN1_IA5STRING *uri, ASN1_IA5STRING *base) {
522
+ CBS uri_cbs, base_cbs;
523
+ CBS_init(&uri_cbs, uri->data, uri->length);
524
+ CBS_init(&base_cbs, base->data, base->length);
525
+
526
+ // Check for foo:// and skip past it
527
+ CBS scheme;
528
+ uint8_t byte;
529
+ if (!CBS_get_until_first(&uri_cbs, &scheme, ':') ||
530
+ !CBS_skip(&uri_cbs, 1) || // Skip the colon
531
+ !CBS_get_u8(&uri_cbs, &byte) || byte != '/' ||
532
+ !CBS_get_u8(&uri_cbs, &byte) || byte != '/') {
533
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
534
+ }
535
+
536
+ // Look for a port indicator as end of hostname first. Otherwise look for
537
+ // trailing slash, or the end of the string.
538
+ // TODO(davidben): This is not a correct URI parser and mishandles IPv6
539
+ // literals.
540
+ CBS host;
541
+ if (!CBS_get_until_first(&uri_cbs, &host, ':') &&
542
+ !CBS_get_until_first(&uri_cbs, &host, '/')) {
543
+ host = uri_cbs;
544
+ }
545
+
546
+ if (CBS_len(&host) == 0) {
547
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
548
+ }
549
+
550
+ // Special case: inital '.' is RHS match
551
+ if (starts_with(&base_cbs, '.')) {
552
+ if (has_suffix_case(&host, &base_cbs)) {
553
+ return X509_V_OK;
555
554
  }
555
+ return X509_V_ERR_PERMITTED_VIOLATION;
556
+ }
556
557
 
557
- return X509_V_OK;
558
+ if (!equal_case(&base_cbs, &host)) {
559
+ return X509_V_ERR_PERMITTED_VIOLATION;
560
+ }
558
561
 
562
+ return X509_V_OK;
559
563
  }