@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
@@ -74,17 +74,14 @@
74
74
  typedef STACK_OF(X509_NAME_ENTRY) STACK_OF_X509_NAME_ENTRY;
75
75
  DEFINE_STACK_OF(STACK_OF_X509_NAME_ENTRY)
76
76
 
77
- /*
78
- * Maximum length of X509_NAME: much larger than anything we should
79
- * ever see in practice.
80
- */
77
+ // Maximum length of X509_NAME: much larger than anything we should
78
+ // ever see in practice.
81
79
 
82
80
  #define X509_NAME_MAX (1024 * 1024)
83
81
 
84
- static int x509_name_ex_d2i(ASN1_VALUE **val,
85
- const unsigned char **in, long len,
86
- const ASN1_ITEM *it,
87
- int tag, int aclass, char opt, ASN1_TLC *ctx);
82
+ static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in,
83
+ long len, const ASN1_ITEM *it, int tag, int aclass,
84
+ char opt, ASN1_TLC *ctx);
88
85
 
89
86
  static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out,
90
87
  const ASN1_ITEM *it, int tag, int aclass);
@@ -94,42 +91,39 @@ static void x509_name_ex_free(ASN1_VALUE **val, const ASN1_ITEM *it);
94
91
  static int x509_name_encode(X509_NAME *a);
95
92
  static int x509_name_canon(X509_NAME *a);
96
93
  static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in);
97
- static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) * intname,
94
+ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname,
98
95
  unsigned char **in);
99
96
 
100
97
  ASN1_SEQUENCE(X509_NAME_ENTRY) = {
101
- ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT),
102
- ASN1_SIMPLE(X509_NAME_ENTRY, value, ASN1_PRINTABLE),
98
+ ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT),
99
+ ASN1_SIMPLE(X509_NAME_ENTRY, value, ASN1_PRINTABLE),
103
100
  } ASN1_SEQUENCE_END(X509_NAME_ENTRY)
104
101
 
105
102
  IMPLEMENT_ASN1_FUNCTIONS(X509_NAME_ENTRY)
106
103
  IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME_ENTRY)
107
104
 
108
- /*
109
- * For the "Name" type we need a SEQUENCE OF { SET OF X509_NAME_ENTRY } so
110
- * declare two template wrappers for this
111
- */
105
+ // For the "Name" type we need a SEQUENCE OF { SET OF X509_NAME_ENTRY } so
106
+ // declare two template wrappers for this
112
107
 
113
- ASN1_ITEM_TEMPLATE(X509_NAME_ENTRIES) =
114
- ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF, 0, RDNS, X509_NAME_ENTRY)
108
+ ASN1_ITEM_TEMPLATE(X509_NAME_ENTRIES) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF,
109
+ 0, RDNS,
110
+ X509_NAME_ENTRY)
115
111
  ASN1_ITEM_TEMPLATE_END(X509_NAME_ENTRIES)
116
112
 
117
113
  ASN1_ITEM_TEMPLATE(X509_NAME_INTERNAL) =
118
- ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Name, X509_NAME_ENTRIES)
114
+ ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Name, X509_NAME_ENTRIES)
119
115
  ASN1_ITEM_TEMPLATE_END(X509_NAME_INTERNAL)
120
116
 
121
- /*
122
- * Normally that's where it would end: we'd have two nested STACK structures
123
- * representing the ASN1. Unfortunately X509_NAME uses a completely different
124
- * form and caches encodings so we have to process the internal form and
125
- * convert to the external form.
126
- */
117
+ // Normally that's where it would end: we'd have two nested STACK structures
118
+ // representing the ASN1. Unfortunately X509_NAME uses a completely different
119
+ // form and caches encodings so we have to process the internal form and
120
+ // convert to the external form.
127
121
 
128
122
  static const ASN1_EXTERN_FUNCS x509_name_ff = {
129
123
  NULL,
130
124
  x509_name_ex_new,
131
125
  x509_name_ex_free,
132
- 0, /* Default clear behaviour is OK */
126
+ 0, // Default clear behaviour is OK
133
127
  x509_name_ex_d2i,
134
128
  x509_name_ex_i2d,
135
129
  NULL,
@@ -141,404 +135,406 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_NAME)
141
135
 
142
136
  IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME)
143
137
 
144
- static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it)
145
- {
146
- X509_NAME *ret = NULL;
147
- ret = OPENSSL_malloc(sizeof(X509_NAME));
148
- if (!ret)
149
- goto memerr;
150
- if ((ret->entries = sk_X509_NAME_ENTRY_new_null()) == NULL)
151
- goto memerr;
152
- if ((ret->bytes = BUF_MEM_new()) == NULL)
153
- goto memerr;
154
- ret->canon_enc = NULL;
155
- ret->canon_enclen = 0;
156
- ret->modified = 1;
157
- *val = (ASN1_VALUE *)ret;
158
- return 1;
159
-
160
- memerr:
161
- OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
162
- if (ret) {
163
- if (ret->entries)
164
- sk_X509_NAME_ENTRY_free(ret->entries);
165
- OPENSSL_free(ret);
138
+ static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it) {
139
+ X509_NAME *ret = NULL;
140
+ ret = OPENSSL_malloc(sizeof(X509_NAME));
141
+ if (!ret) {
142
+ goto memerr;
143
+ }
144
+ if ((ret->entries = sk_X509_NAME_ENTRY_new_null()) == NULL) {
145
+ goto memerr;
146
+ }
147
+ if ((ret->bytes = BUF_MEM_new()) == NULL) {
148
+ goto memerr;
149
+ }
150
+ ret->canon_enc = NULL;
151
+ ret->canon_enclen = 0;
152
+ ret->modified = 1;
153
+ *val = (ASN1_VALUE *)ret;
154
+ return 1;
155
+
156
+ memerr:
157
+ OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
158
+ if (ret) {
159
+ if (ret->entries) {
160
+ sk_X509_NAME_ENTRY_free(ret->entries);
166
161
  }
167
- return 0;
162
+ OPENSSL_free(ret);
163
+ }
164
+ return 0;
168
165
  }
169
166
 
170
- static void x509_name_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
171
- {
172
- X509_NAME *a;
173
- if (!pval || !*pval)
174
- return;
175
- a = (X509_NAME *)*pval;
176
-
177
- BUF_MEM_free(a->bytes);
178
- sk_X509_NAME_ENTRY_pop_free(a->entries, X509_NAME_ENTRY_free);
179
- if (a->canon_enc)
180
- OPENSSL_free(a->canon_enc);
181
- OPENSSL_free(a);
182
- *pval = NULL;
167
+ static void x509_name_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it) {
168
+ X509_NAME *a;
169
+ if (!pval || !*pval) {
170
+ return;
171
+ }
172
+ a = (X509_NAME *)*pval;
173
+
174
+ BUF_MEM_free(a->bytes);
175
+ sk_X509_NAME_ENTRY_pop_free(a->entries, X509_NAME_ENTRY_free);
176
+ if (a->canon_enc) {
177
+ OPENSSL_free(a->canon_enc);
178
+ }
179
+ OPENSSL_free(a);
180
+ *pval = NULL;
183
181
  }
184
182
 
185
- static void local_sk_X509_NAME_ENTRY_free(STACK_OF(X509_NAME_ENTRY) *ne)
186
- {
187
- sk_X509_NAME_ENTRY_free(ne);
183
+ static void local_sk_X509_NAME_ENTRY_free(STACK_OF(X509_NAME_ENTRY) *ne) {
184
+ sk_X509_NAME_ENTRY_free(ne);
188
185
  }
189
186
 
190
- static void local_sk_X509_NAME_ENTRY_pop_free(STACK_OF(X509_NAME_ENTRY) *ne)
191
- {
192
- sk_X509_NAME_ENTRY_pop_free(ne, X509_NAME_ENTRY_free);
187
+ static void local_sk_X509_NAME_ENTRY_pop_free(STACK_OF(X509_NAME_ENTRY) *ne) {
188
+ sk_X509_NAME_ENTRY_pop_free(ne, X509_NAME_ENTRY_free);
193
189
  }
194
190
 
195
- static int x509_name_ex_d2i(ASN1_VALUE **val,
196
- const unsigned char **in, long len,
197
- const ASN1_ITEM *it, int tag, int aclass,
198
- char opt, ASN1_TLC *ctx)
199
- {
200
- const unsigned char *p = *in, *q;
201
- STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL;
202
- X509_NAME *nm = NULL;
203
- size_t i, j;
204
- int ret;
205
- STACK_OF(X509_NAME_ENTRY) *entries;
206
- X509_NAME_ENTRY *entry;
207
- /* Bound the size of an X509_NAME we are willing to parse. */
208
- if (len > X509_NAME_MAX) {
209
- len = X509_NAME_MAX;
210
- }
211
- q = p;
212
-
213
- /* Get internal representation of Name */
214
- ASN1_VALUE *intname_val = NULL;
215
- ret = ASN1_item_ex_d2i(&intname_val,
216
- &p, len, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
217
- tag, aclass, opt, ctx);
218
- if (ret <= 0)
219
- return ret;
220
- intname = (STACK_OF(STACK_OF_X509_NAME_ENTRY) *)intname_val;
221
-
222
- if (*val)
223
- x509_name_ex_free(val, NULL);
224
- ASN1_VALUE *nm_val = NULL;
225
- if (!x509_name_ex_new(&nm_val, NULL))
226
- goto err;
227
- nm = (X509_NAME *)nm_val;
228
- /* We've decoded it: now cache encoding */
229
- if (!BUF_MEM_grow(nm->bytes, p - q))
191
+ static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in,
192
+ long len, const ASN1_ITEM *it, int tag, int aclass,
193
+ char opt, ASN1_TLC *ctx) {
194
+ const unsigned char *p = *in, *q;
195
+ STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL;
196
+ X509_NAME *nm = NULL;
197
+ size_t i, j;
198
+ int ret;
199
+ STACK_OF(X509_NAME_ENTRY) *entries;
200
+ X509_NAME_ENTRY *entry;
201
+ // Bound the size of an X509_NAME we are willing to parse.
202
+ if (len > X509_NAME_MAX) {
203
+ len = X509_NAME_MAX;
204
+ }
205
+ q = p;
206
+
207
+ // Get internal representation of Name
208
+ ASN1_VALUE *intname_val = NULL;
209
+ ret = ASN1_item_ex_d2i(&intname_val, &p, len,
210
+ ASN1_ITEM_rptr(X509_NAME_INTERNAL), tag, aclass, opt,
211
+ ctx);
212
+ if (ret <= 0) {
213
+ return ret;
214
+ }
215
+ intname = (STACK_OF(STACK_OF_X509_NAME_ENTRY) *)intname_val;
216
+
217
+ if (*val) {
218
+ x509_name_ex_free(val, NULL);
219
+ }
220
+ ASN1_VALUE *nm_val = NULL;
221
+ if (!x509_name_ex_new(&nm_val, NULL)) {
222
+ goto err;
223
+ }
224
+ nm = (X509_NAME *)nm_val;
225
+ // We've decoded it: now cache encoding
226
+ if (!BUF_MEM_grow(nm->bytes, p - q)) {
227
+ goto err;
228
+ }
229
+ OPENSSL_memcpy(nm->bytes->data, q, p - q);
230
+
231
+ // Convert internal representation to X509_NAME structure
232
+ for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname); i++) {
233
+ entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname, i);
234
+ for (j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) {
235
+ entry = sk_X509_NAME_ENTRY_value(entries, j);
236
+ entry->set = i;
237
+ if (!sk_X509_NAME_ENTRY_push(nm->entries, entry)) {
230
238
  goto err;
231
- OPENSSL_memcpy(nm->bytes->data, q, p - q);
232
-
233
- /* Convert internal representation to X509_NAME structure */
234
- for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname); i++) {
235
- entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname, i);
236
- for (j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) {
237
- entry = sk_X509_NAME_ENTRY_value(entries, j);
238
- entry->set = i;
239
- if (!sk_X509_NAME_ENTRY_push(nm->entries, entry))
240
- goto err;
241
- (void)sk_X509_NAME_ENTRY_set(entries, j, NULL);
242
- }
239
+ }
240
+ (void)sk_X509_NAME_ENTRY_set(entries, j, NULL);
243
241
  }
244
- ret = x509_name_canon(nm);
245
- if (!ret)
246
- goto err;
247
- sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
248
- local_sk_X509_NAME_ENTRY_free);
249
- nm->modified = 0;
250
- *val = (ASN1_VALUE *)nm;
251
- *in = p;
252
- return ret;
253
- err:
254
- X509_NAME_free(nm);
255
- sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
256
- local_sk_X509_NAME_ENTRY_pop_free);
257
- OPENSSL_PUT_ERROR(X509, ERR_R_ASN1_LIB);
258
- return 0;
242
+ }
243
+ ret = x509_name_canon(nm);
244
+ if (!ret) {
245
+ goto err;
246
+ }
247
+ sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, local_sk_X509_NAME_ENTRY_free);
248
+ nm->modified = 0;
249
+ *val = (ASN1_VALUE *)nm;
250
+ *in = p;
251
+ return ret;
252
+ err:
253
+ X509_NAME_free(nm);
254
+ sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
255
+ local_sk_X509_NAME_ENTRY_pop_free);
256
+ OPENSSL_PUT_ERROR(X509, ERR_R_ASN1_LIB);
257
+ return 0;
259
258
  }
260
259
 
261
260
  static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out,
262
- const ASN1_ITEM *it, int tag, int aclass)
263
- {
264
- X509_NAME *a = (X509_NAME *)*val;
265
- if (a->modified &&
266
- (!x509_name_encode(a) ||
267
- !x509_name_canon(a))) {
268
- return -1;
269
- }
270
- int ret = a->bytes->length;
271
- if (out != NULL) {
272
- OPENSSL_memcpy(*out, a->bytes->data, ret);
273
- *out += ret;
274
- }
275
- return ret;
261
+ const ASN1_ITEM *it, int tag, int aclass) {
262
+ X509_NAME *a = (X509_NAME *)*val;
263
+ if (a->modified && (!x509_name_encode(a) || !x509_name_canon(a))) {
264
+ return -1;
265
+ }
266
+ int ret = a->bytes->length;
267
+ if (out != NULL) {
268
+ OPENSSL_memcpy(*out, a->bytes->data, ret);
269
+ *out += ret;
270
+ }
271
+ return ret;
276
272
  }
277
273
 
278
- static int x509_name_encode(X509_NAME *a)
279
- {
280
- int len;
281
- unsigned char *p;
282
- STACK_OF(X509_NAME_ENTRY) *entries = NULL;
283
- X509_NAME_ENTRY *entry;
284
- int set = -1;
285
- size_t i;
286
- STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname =
287
- sk_STACK_OF_X509_NAME_ENTRY_new_null();
288
- if (!intname)
274
+ static int x509_name_encode(X509_NAME *a) {
275
+ int len;
276
+ unsigned char *p;
277
+ STACK_OF(X509_NAME_ENTRY) *entries = NULL;
278
+ X509_NAME_ENTRY *entry;
279
+ int set = -1;
280
+ size_t i;
281
+ STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname =
282
+ sk_STACK_OF_X509_NAME_ENTRY_new_null();
283
+ if (!intname) {
284
+ goto memerr;
285
+ }
286
+ for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
287
+ entry = sk_X509_NAME_ENTRY_value(a->entries, i);
288
+ if (entry->set != set) {
289
+ entries = sk_X509_NAME_ENTRY_new_null();
290
+ if (!entries) {
289
291
  goto memerr;
290
- for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
291
- entry = sk_X509_NAME_ENTRY_value(a->entries, i);
292
- if (entry->set != set) {
293
- entries = sk_X509_NAME_ENTRY_new_null();
294
- if (!entries)
295
- goto memerr;
296
- if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
297
- sk_X509_NAME_ENTRY_free(entries);
298
- goto memerr;
299
- }
300
- set = entry->set;
301
- }
302
- if (!sk_X509_NAME_ENTRY_push(entries, entry))
303
- goto memerr;
304
- }
305
- ASN1_VALUE *intname_val = (ASN1_VALUE *)intname;
306
- len =
307
- ASN1_item_ex_i2d(&intname_val, NULL, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
308
- /*tag=*/-1, /*aclass=*/0);
309
- if (len <= 0) {
310
- goto err;
311
- }
312
- if (!BUF_MEM_grow(a->bytes, len))
292
+ }
293
+ if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
294
+ sk_X509_NAME_ENTRY_free(entries);
313
295
  goto memerr;
314
- p = (unsigned char *)a->bytes->data;
315
- if (ASN1_item_ex_i2d(&intname_val, &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
316
- /*tag=*/-1, /*aclass=*/0) <= 0) {
317
- goto err;
296
+ }
297
+ set = entry->set;
318
298
  }
319
- sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
320
- local_sk_X509_NAME_ENTRY_free);
321
- a->modified = 0;
322
- return 1;
323
- memerr:
324
- OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
299
+ if (!sk_X509_NAME_ENTRY_push(entries, entry)) {
300
+ goto memerr;
301
+ }
302
+ }
303
+ ASN1_VALUE *intname_val = (ASN1_VALUE *)intname;
304
+ len = ASN1_item_ex_i2d(&intname_val, NULL, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
305
+ /*tag=*/-1, /*aclass=*/0);
306
+ if (len <= 0) {
307
+ goto err;
308
+ }
309
+ if (!BUF_MEM_grow(a->bytes, len)) {
310
+ goto memerr;
311
+ }
312
+ p = (unsigned char *)a->bytes->data;
313
+ if (ASN1_item_ex_i2d(&intname_val, &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
314
+ /*tag=*/-1, /*aclass=*/0) <= 0) {
315
+ goto err;
316
+ }
317
+ sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, local_sk_X509_NAME_ENTRY_free);
318
+ a->modified = 0;
319
+ return 1;
320
+ memerr:
321
+ OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
325
322
  err:
326
- sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
327
- local_sk_X509_NAME_ENTRY_free);
328
- return 0;
323
+ sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, local_sk_X509_NAME_ENTRY_free);
324
+ return 0;
329
325
  }
330
326
 
331
- /*
332
- * This function generates the canonical encoding of the Name structure. In
333
- * it all strings are converted to UTF8, leading, trailing and multiple
334
- * spaces collapsed, converted to lower case and the leading SEQUENCE header
335
- * removed. In future we could also normalize the UTF8 too. By doing this
336
- * comparison of Name structures can be rapidly perfomed by just using
337
- * OPENSSL_memcmp() of the canonical encoding. By omitting the leading SEQUENCE name
338
- * constraints of type dirName can also be checked with a simple OPENSSL_memcmp().
339
- */
340
-
341
- static int x509_name_canon(X509_NAME *a)
342
- {
343
- unsigned char *p;
344
- STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL;
345
- STACK_OF(X509_NAME_ENTRY) *entries = NULL;
346
- X509_NAME_ENTRY *entry, *tmpentry = NULL;
347
- int set = -1, ret = 0, len;
348
- size_t i;
349
-
350
- if (a->canon_enc) {
351
- OPENSSL_free(a->canon_enc);
352
- a->canon_enc = NULL;
327
+ // This function generates the canonical encoding of the Name structure. In
328
+ // it all strings are converted to UTF8, leading, trailing and multiple
329
+ // spaces collapsed, converted to lower case and the leading SEQUENCE header
330
+ // removed. In future we could also normalize the UTF8 too. By doing this
331
+ // comparison of Name structures can be rapidly perfomed by just using
332
+ // OPENSSL_memcmp() of the canonical encoding. By omitting the leading SEQUENCE
333
+ // name constraints of type dirName can also be checked with a simple
334
+ // OPENSSL_memcmp().
335
+
336
+ static int x509_name_canon(X509_NAME *a) {
337
+ unsigned char *p;
338
+ STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL;
339
+ STACK_OF(X509_NAME_ENTRY) *entries = NULL;
340
+ X509_NAME_ENTRY *entry, *tmpentry = NULL;
341
+ int set = -1, ret = 0, len;
342
+ size_t i;
343
+
344
+ if (a->canon_enc) {
345
+ OPENSSL_free(a->canon_enc);
346
+ a->canon_enc = NULL;
347
+ }
348
+ // Special case: empty X509_NAME => null encoding
349
+ if (sk_X509_NAME_ENTRY_num(a->entries) == 0) {
350
+ a->canon_enclen = 0;
351
+ return 1;
352
+ }
353
+ intname = sk_STACK_OF_X509_NAME_ENTRY_new_null();
354
+ if (!intname) {
355
+ goto err;
356
+ }
357
+ for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
358
+ entry = sk_X509_NAME_ENTRY_value(a->entries, i);
359
+ if (entry->set != set) {
360
+ entries = sk_X509_NAME_ENTRY_new_null();
361
+ if (!entries) {
362
+ goto err;
363
+ }
364
+ if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
365
+ sk_X509_NAME_ENTRY_free(entries);
366
+ goto err;
367
+ }
368
+ set = entry->set;
369
+ }
370
+ tmpentry = X509_NAME_ENTRY_new();
371
+ if (tmpentry == NULL) {
372
+ goto err;
353
373
  }
354
- /* Special case: empty X509_NAME => null encoding */
355
- if (sk_X509_NAME_ENTRY_num(a->entries) == 0) {
356
- a->canon_enclen = 0;
357
- return 1;
374
+ tmpentry->object = OBJ_dup(entry->object);
375
+ if (!asn1_string_canon(tmpentry->value, entry->value)) {
376
+ goto err;
358
377
  }
359
- intname = sk_STACK_OF_X509_NAME_ENTRY_new_null();
360
- if (!intname)
361
- goto err;
362
- for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
363
- entry = sk_X509_NAME_ENTRY_value(a->entries, i);
364
- if (entry->set != set) {
365
- entries = sk_X509_NAME_ENTRY_new_null();
366
- if (!entries)
367
- goto err;
368
- if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) {
369
- sk_X509_NAME_ENTRY_free(entries);
370
- goto err;
371
- }
372
- set = entry->set;
373
- }
374
- tmpentry = X509_NAME_ENTRY_new();
375
- if (tmpentry == NULL)
376
- goto err;
377
- tmpentry->object = OBJ_dup(entry->object);
378
- if (!asn1_string_canon(tmpentry->value, entry->value))
379
- goto err;
380
- if (!sk_X509_NAME_ENTRY_push(entries, tmpentry))
381
- goto err;
382
- tmpentry = NULL;
378
+ if (!sk_X509_NAME_ENTRY_push(entries, tmpentry)) {
379
+ goto err;
383
380
  }
381
+ tmpentry = NULL;
382
+ }
384
383
 
385
- /* Finally generate encoding */
384
+ // Finally generate encoding
386
385
 
387
- len = i2d_name_canon(intname, NULL);
388
- if (len < 0) {
389
- goto err;
390
- }
391
- a->canon_enclen = len;
386
+ len = i2d_name_canon(intname, NULL);
387
+ if (len < 0) {
388
+ goto err;
389
+ }
390
+ a->canon_enclen = len;
392
391
 
393
- p = OPENSSL_malloc(a->canon_enclen);
392
+ p = OPENSSL_malloc(a->canon_enclen);
394
393
 
395
- if (!p)
396
- goto err;
394
+ if (!p) {
395
+ goto err;
396
+ }
397
397
 
398
- a->canon_enc = p;
398
+ a->canon_enc = p;
399
399
 
400
- i2d_name_canon(intname, &p);
400
+ i2d_name_canon(intname, &p);
401
401
 
402
- ret = 1;
402
+ ret = 1;
403
403
 
404
- err:
404
+ err:
405
405
 
406
- if (tmpentry)
407
- X509_NAME_ENTRY_free(tmpentry);
408
- if (intname)
409
- sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
410
- local_sk_X509_NAME_ENTRY_pop_free);
411
- return ret;
406
+ if (tmpentry) {
407
+ X509_NAME_ENTRY_free(tmpentry);
408
+ }
409
+ if (intname) {
410
+ sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname,
411
+ local_sk_X509_NAME_ENTRY_pop_free);
412
+ }
413
+ return ret;
412
414
  }
413
415
 
414
- /* Bitmap of all the types of string that will be canonicalized. */
416
+ // Bitmap of all the types of string that will be canonicalized.
415
417
 
416
- #define ASN1_MASK_CANON \
417
- (B_ASN1_UTF8STRING | B_ASN1_BMPSTRING | B_ASN1_UNIVERSALSTRING \
418
- | B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_IA5STRING \
419
- | B_ASN1_VISIBLESTRING)
418
+ #define ASN1_MASK_CANON \
419
+ (B_ASN1_UTF8STRING | B_ASN1_BMPSTRING | B_ASN1_UNIVERSALSTRING | \
420
+ B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_IA5STRING | \
421
+ B_ASN1_VISIBLESTRING)
420
422
 
421
- static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in)
422
- {
423
- unsigned char *to, *from;
424
- int len, i;
423
+ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) {
424
+ unsigned char *to, *from;
425
+ int len, i;
425
426
 
426
- /* If type not in bitmask just copy string across */
427
- if (!(ASN1_tag2bit(in->type) & ASN1_MASK_CANON)) {
428
- if (!ASN1_STRING_copy(out, in))
429
- return 0;
430
- return 1;
427
+ // If type not in bitmask just copy string across
428
+ if (!(ASN1_tag2bit(in->type) & ASN1_MASK_CANON)) {
429
+ if (!ASN1_STRING_copy(out, in)) {
430
+ return 0;
431
431
  }
432
+ return 1;
433
+ }
432
434
 
433
- out->type = V_ASN1_UTF8STRING;
434
- out->length = ASN1_STRING_to_UTF8(&out->data, in);
435
- if (out->length == -1)
436
- return 0;
435
+ out->type = V_ASN1_UTF8STRING;
436
+ out->length = ASN1_STRING_to_UTF8(&out->data, in);
437
+ if (out->length == -1) {
438
+ return 0;
439
+ }
437
440
 
438
- to = out->data;
439
- from = to;
441
+ to = out->data;
442
+ from = to;
440
443
 
441
- len = out->length;
444
+ len = out->length;
442
445
 
443
- /*
444
- * Convert string in place to canonical form. Ultimately we may need to
445
- * handle a wider range of characters but for now ignore anything with
446
- * MSB set and rely on the isspace() and tolower() functions.
447
- */
446
+ // Convert string in place to canonical form. Ultimately we may need to
447
+ // handle a wider range of characters but for now ignore anything with
448
+ // MSB set and rely on the isspace() and tolower() functions.
448
449
 
449
- /* Ignore leading spaces */
450
- while ((len > 0) && !(*from & 0x80) && isspace(*from)) {
451
- from++;
452
- len--;
453
- }
450
+ // Ignore leading spaces
451
+ while ((len > 0) && !(*from & 0x80) && isspace(*from)) {
452
+ from++;
453
+ len--;
454
+ }
454
455
 
455
- to = from + len;
456
+ to = from + len;
456
457
 
457
- /* Ignore trailing spaces */
458
- while ((len > 0) && !(to[-1] & 0x80) && isspace(to[-1])) {
459
- to--;
460
- len--;
461
- }
458
+ // Ignore trailing spaces
459
+ while ((len > 0) && !(to[-1] & 0x80) && isspace(to[-1])) {
460
+ to--;
461
+ len--;
462
+ }
462
463
 
463
- to = out->data;
464
-
465
- i = 0;
466
- while (i < len) {
467
- /* If MSB set just copy across */
468
- if (*from & 0x80) {
469
- *to++ = *from++;
470
- i++;
471
- }
472
- /* Collapse multiple spaces */
473
- else if (isspace(*from)) {
474
- /* Copy one space across */
475
- *to++ = ' ';
476
- /*
477
- * Ignore subsequent spaces. Note: don't need to check len here
478
- * because we know the last character is a non-space so we can't
479
- * overflow.
480
- */
481
- do {
482
- from++;
483
- i++;
484
- }
485
- while (!(*from & 0x80) && isspace(*from));
486
- } else {
487
- *to++ = OPENSSL_tolower(*from);
488
- from++;
489
- i++;
490
- }
491
- }
464
+ to = out->data;
492
465
 
493
- out->length = to - out->data;
466
+ i = 0;
467
+ while (i < len) {
468
+ // If MSB set just copy across
469
+ if (*from & 0x80) {
470
+ *to++ = *from++;
471
+ i++;
472
+ }
473
+ // Collapse multiple spaces
474
+ else if (isspace(*from)) {
475
+ // Copy one space across
476
+ *to++ = ' ';
477
+ // Ignore subsequent spaces. Note: don't need to check len here
478
+ // because we know the last character is a non-space so we can't
479
+ // overflow.
480
+ do {
481
+ from++;
482
+ i++;
483
+ } while (!(*from & 0x80) && isspace(*from));
484
+ } else {
485
+ *to++ = OPENSSL_tolower(*from);
486
+ from++;
487
+ i++;
488
+ }
489
+ }
494
490
 
495
- return 1;
491
+ out->length = to - out->data;
496
492
 
493
+ return 1;
497
494
  }
498
495
 
499
- static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) * _intname,
500
- unsigned char **in)
501
- {
502
- int len, ltmp;
503
- size_t i;
504
- ASN1_VALUE *v;
505
- STACK_OF(ASN1_VALUE) *intname = (STACK_OF(ASN1_VALUE) *)_intname;
506
-
507
- len = 0;
508
- for (i = 0; i < sk_ASN1_VALUE_num(intname); i++) {
509
- v = sk_ASN1_VALUE_value(intname, i);
510
- ltmp = ASN1_item_ex_i2d(&v, in, ASN1_ITEM_rptr(X509_NAME_ENTRIES),
511
- /*tag=*/-1, /*aclass=*/0);
512
- if (ltmp < 0)
513
- return ltmp;
514
- len += ltmp;
496
+ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname,
497
+ unsigned char **in) {
498
+ int len, ltmp;
499
+ size_t i;
500
+ ASN1_VALUE *v;
501
+ STACK_OF(ASN1_VALUE) *intname = (STACK_OF(ASN1_VALUE) *)_intname;
502
+
503
+ len = 0;
504
+ for (i = 0; i < sk_ASN1_VALUE_num(intname); i++) {
505
+ v = sk_ASN1_VALUE_value(intname, i);
506
+ ltmp = ASN1_item_ex_i2d(&v, in, ASN1_ITEM_rptr(X509_NAME_ENTRIES),
507
+ /*tag=*/-1, /*aclass=*/0);
508
+ if (ltmp < 0) {
509
+ return ltmp;
515
510
  }
516
- return len;
511
+ len += ltmp;
512
+ }
513
+ return len;
517
514
  }
518
515
 
519
- int X509_NAME_set(X509_NAME **xn, X509_NAME *name)
520
- {
521
- if ((name = X509_NAME_dup(name)) == NULL)
522
- return 0;
523
- X509_NAME_free(*xn);
524
- *xn = name;
525
- return 1;
516
+ int X509_NAME_set(X509_NAME **xn, X509_NAME *name) {
517
+ if ((name = X509_NAME_dup(name)) == NULL) {
518
+ return 0;
519
+ }
520
+ X509_NAME_free(*xn);
521
+ *xn = name;
522
+ return 1;
526
523
  }
527
524
 
528
- int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne)
529
- {
530
- return ne->set;
531
- }
525
+ int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne) { return ne->set; }
532
526
 
533
527
  int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder,
534
- size_t *pderlen)
535
- {
536
- /* Make sure encoding is valid */
537
- if (i2d_X509_NAME(nm, NULL) <= 0)
538
- return 0;
539
- if (pder != NULL)
540
- *pder = (unsigned char *)nm->bytes->data;
541
- if (pderlen != NULL)
542
- *pderlen = nm->bytes->length;
543
- return 1;
528
+ size_t *pderlen) {
529
+ // Make sure encoding is valid
530
+ if (i2d_X509_NAME(nm, NULL) <= 0) {
531
+ return 0;
532
+ }
533
+ if (pder != NULL) {
534
+ *pder = (unsigned char *)nm->bytes->data;
535
+ }
536
+ if (pderlen != NULL) {
537
+ *pderlen = nm->bytes->length;
538
+ }
539
+ return 1;
544
540
  }