grpc 1.30.1 → 1.40.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (1628) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1195 -18269
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/event_engine/README.md +38 -0
  6. data/include/grpc/event_engine/endpoint_config.h +48 -0
  7. data/include/grpc/event_engine/event_engine.h +330 -0
  8. data/include/grpc/event_engine/port.h +41 -0
  9. data/include/grpc/event_engine/slice_allocator.h +66 -0
  10. data/include/grpc/grpc.h +38 -9
  11. data/include/grpc/grpc_security.h +291 -186
  12. data/include/grpc/grpc_security_constants.h +18 -0
  13. data/include/grpc/impl/codegen/README.md +22 -0
  14. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  15. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  16. data/include/grpc/impl/codegen/grpc_types.h +60 -31
  17. data/include/grpc/impl/codegen/log.h +0 -2
  18. data/include/grpc/impl/codegen/port_platform.h +75 -87
  19. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  20. data/include/grpc/module.modulemap +14 -14
  21. data/include/grpc/slice_buffer.h +3 -3
  22. data/include/grpc/support/sync.h +3 -3
  23. data/include/grpc/support/time.h +7 -7
  24. data/src/core/ext/filters/client_channel/backend_metric.cc +14 -13
  25. data/src/core/ext/filters/client_channel/backup_poller.cc +6 -5
  26. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  27. data/src/core/ext/filters/client_channel/client_channel.cc +2112 -2959
  28. data/src/core/ext/filters/client_channel/client_channel.h +514 -62
  29. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -4
  30. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  31. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  32. data/src/core/ext/filters/client_channel/config_selector.cc +58 -0
  33. data/src/core/ext/filters/client_channel/config_selector.h +146 -0
  34. data/src/core/ext/filters/client_channel/connector.h +1 -1
  35. data/src/core/ext/filters/client_channel/dynamic_filters.cc +190 -0
  36. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  37. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +26 -122
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  39. data/src/core/ext/filters/client_channel/health/health_check_client.cc +46 -35
  40. data/src/core/ext/filters/client_channel/health/health_check_client.h +34 -33
  41. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +39 -37
  42. data/src/core/ext/filters/client_channel/http_proxy.cc +42 -24
  43. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  44. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  45. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -7
  46. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +301 -267
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -40
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  57. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +34 -37
  58. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -51
  59. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +757 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +18 -24
  62. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +15 -37
  63. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +41 -34
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +472 -145
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  66. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  67. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +787 -0
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +700 -0
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1372 -0
  70. data/src/core/ext/filters/client_channel/lb_policy.cc +11 -18
  71. data/src/core/ext/filters/client_channel/lb_policy.h +80 -53
  72. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  73. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +16 -10
  74. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  75. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  76. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +71 -78
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -33
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +11 -9
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +14 -12
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -20
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +495 -79
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -1
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  88. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +45 -36
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +40 -45
  90. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -6
  91. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +384 -0
  92. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +38 -31
  93. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +883 -71
  94. data/src/core/ext/filters/client_channel/{xds/xds_channel_args.h → resolver/xds/xds_resolver.h} +9 -7
  95. data/src/core/ext/filters/client_channel/resolver.cc +7 -5
  96. data/src/core/ext/filters/client_channel/resolver.h +7 -15
  97. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  98. data/src/core/ext/filters/client_channel/resolver_registry.cc +49 -49
  99. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  100. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +50 -303
  101. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +26 -54
  102. data/src/core/ext/filters/client_channel/retry_filter.cc +2611 -0
  103. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  104. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  105. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  106. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  107. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  108. data/src/core/ext/filters/client_channel/server_address.cc +129 -7
  109. data/src/core/ext/filters/client_channel/server_address.h +75 -21
  110. data/src/core/ext/filters/client_channel/service_config.cc +27 -21
  111. data/src/core/ext/filters/client_channel/service_config.h +11 -7
  112. data/src/core/ext/filters/client_channel/service_config_call_data.h +60 -2
  113. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +143 -0
  114. data/src/core/ext/filters/client_channel/service_config_parser.cc +14 -12
  115. data/src/core/ext/filters/client_channel/service_config_parser.h +12 -6
  116. data/src/core/ext/filters/client_channel/subchannel.cc +188 -236
  117. data/src/core/ext/filters/client_channel/subchannel.h +88 -113
  118. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  119. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  120. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -10
  121. data/src/core/ext/filters/client_idle/client_idle_filter.cc +18 -17
  122. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -86
  123. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  124. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
  125. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  126. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  127. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  128. data/src/core/ext/filters/http/client/http_client_filter.cc +39 -29
  129. data/src/core/ext/filters/http/client_authority_filter.cc +9 -9
  130. data/src/core/ext/filters/http/http_filters_plugin.cc +8 -4
  131. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  132. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +91 -50
  133. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  134. data/src/core/ext/filters/http/server/http_server_filter.cc +30 -26
  135. data/src/core/ext/filters/max_age/max_age_filter.cc +50 -44
  136. data/src/core/ext/filters/message_size/message_size_filter.cc +72 -92
  137. data/src/core/ext/filters/message_size/message_size_filter.h +8 -1
  138. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
  139. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  140. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  141. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +90 -34
  142. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +22 -5
  143. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
  144. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +23 -11
  145. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +38 -50
  146. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +803 -352
  147. data/src/core/ext/transport/chttp2/server/chttp2_server.h +16 -2
  148. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +14 -5
  149. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +22 -20
  150. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +67 -24
  151. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +8 -8
  152. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
  153. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
  154. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +457 -447
  155. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  156. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  157. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  158. data/src/core/ext/transport/chttp2/transport/flow_control.cc +36 -33
  159. data/src/core/ext/transport/chttp2/transport/flow_control.h +34 -26
  160. data/src/core/ext/transport/chttp2/transport/frame_data.cc +26 -25
  161. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  162. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +21 -23
  163. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  164. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -14
  165. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  166. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +19 -20
  167. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  168. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  169. data/src/core/ext/transport/chttp2/transport/frame_settings.h +8 -7
  170. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +19 -24
  171. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  172. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  173. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +681 -765
  174. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
  175. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +17 -20
  176. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  177. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  178. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  179. data/src/core/ext/transport/chttp2/transport/internal.h +57 -30
  180. data/src/core/ext/transport/chttp2/transport/parsing.cc +181 -180
  181. data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
  182. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
  183. data/src/core/ext/transport/inproc/inproc_transport.cc +154 -88
  184. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  185. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  186. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -1
  187. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  188. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +10 -4
  189. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +243 -0
  190. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +865 -0
  191. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +371 -0
  192. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1452 -0
  193. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  194. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +253 -0
  195. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +461 -0
  196. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1850 -0
  197. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  198. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +77 -0
  199. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +56 -0
  200. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +364 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +428 -0
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +88 -0
  205. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +370 -0
  206. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1126 -0
  207. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  208. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +388 -0
  209. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  210. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +78 -0
  211. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  212. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
  213. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  214. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +839 -0
  215. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  216. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +767 -0
  217. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  218. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +88 -0
  219. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +239 -0
  220. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +982 -0
  221. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +27 -0
  222. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +65 -0
  223. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  224. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
  225. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +8 -8
  226. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +95 -0
  227. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +43 -0
  228. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +126 -0
  229. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  230. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
  231. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +90 -0
  232. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +243 -0
  233. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  234. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +305 -0
  235. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  236. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +367 -0
  237. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  238. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +73 -0
  239. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +138 -0
  240. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +604 -0
  241. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +161 -0
  242. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +638 -0
  243. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  244. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
  245. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +42 -0
  246. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +115 -0
  247. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  248. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  249. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  250. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  251. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +179 -0
  252. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +662 -0
  253. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +82 -0
  254. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +294 -0
  255. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +953 -0
  256. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3862 -0
  257. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  258. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +159 -0
  259. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +49 -0
  260. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +122 -0
  261. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  262. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  265. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +79 -0
  266. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +285 -0
  267. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -0
  268. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +117 -0
  269. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +404 -0
  270. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1671 -0
  271. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +19 -0
  272. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +35 -0
  273. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +116 -0
  274. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +475 -0
  275. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +73 -0
  276. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +219 -0
  277. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +146 -0
  278. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +621 -0
  279. data/src/core/ext/upb-generated/envoy/{api/v2/rds.upb.c → service/cluster/v3/cds.upb.c} +6 -9
  280. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +56 -0
  281. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +6 -5
  282. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +56 -0
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +146 -0
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +499 -0
  285. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +6 -10
  286. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +56 -0
  287. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +6 -10
  288. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +56 -0
  289. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +54 -0
  290. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +151 -0
  291. data/src/core/ext/upb-generated/envoy/{api/v2/srds.upb.c → service/route/v3/rds.upb.c} +6 -7
  292. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +56 -0
  293. data/src/core/ext/upb-generated/envoy/{api/v2/cds.upb.c → service/route/v3/srds.upb.c} +6 -7
  294. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +56 -0
  295. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +121 -0
  296. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +438 -0
  297. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  298. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +128 -0
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +84 -0
  305. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  306. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +78 -0
  307. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +65 -0
  308. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +166 -0
  309. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  310. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +146 -0
  311. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  312. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  313. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  314. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +207 -0
  315. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  316. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +301 -0
  317. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  318. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +283 -0
  319. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  320. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +9 -9
  321. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  322. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +99 -0
  323. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  324. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +130 -0
  325. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +7 -6
  326. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +68 -0
  327. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  328. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  329. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
  330. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +251 -0
  331. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +871 -0
  332. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  333. data/src/core/ext/upb-generated/google/api/http.upb.h +52 -32
  334. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  335. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -6
  336. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +106 -106
  337. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +688 -499
  338. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  339. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +12 -6
  340. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  341. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +8 -2
  342. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +5 -5
  343. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +55 -57
  344. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  345. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +12 -6
  346. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  347. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +82 -28
  348. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  349. data/src/core/ext/upb-generated/google/rpc/status.upb.h +17 -10
  350. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +5 -5
  351. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +40 -45
  352. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +43 -43
  353. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +236 -184
  354. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  355. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +29 -13
  356. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  357. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +19 -7
  358. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  359. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +122 -62
  360. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  361. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +30 -12
  362. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  363. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -0
  364. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -1
  365. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  366. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +12 -6
  367. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  368. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +60 -0
  369. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +9 -9
  370. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +48 -68
  371. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  372. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  373. data/src/core/ext/upb-generated/validate/validate.upb.c +133 -117
  374. data/src/core/ext/upb-generated/validate/validate.upb.h +881 -645
  375. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  376. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  377. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  378. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  379. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  380. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  381. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  382. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  383. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  384. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  385. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  386. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  387. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  388. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  389. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +46 -0
  390. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  391. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  392. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +252 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +424 -0
  396. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  397. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  398. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  399. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +570 -0
  400. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  403. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  404. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  405. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  406. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  407. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  408. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  409. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +300 -0
  410. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +145 -0
  411. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +144 -0
  412. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  413. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  414. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  415. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  416. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  417. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  418. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  419. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  420. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  421. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  422. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  423. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +287 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +100 -0
  425. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  426. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  428. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  429. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  430. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  431. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +72 -0
  432. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  433. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  434. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  435. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  436. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  437. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  438. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  439. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  440. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  441. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  442. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  443. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +205 -0
  444. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +60 -0
  445. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +201 -0
  446. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  447. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  448. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  449. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +67 -0
  450. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  451. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  452. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  453. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  454. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  455. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +115 -0
  456. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +45 -0
  457. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +964 -0
  458. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +295 -0
  459. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  460. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  461. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  462. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  463. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  464. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  465. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  466. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  467. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +123 -0
  468. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  469. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +79 -0
  470. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  471. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +571 -0
  472. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +125 -0
  473. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  474. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  475. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +178 -0
  476. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  477. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  478. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  479. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  480. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  481. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  482. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  483. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  484. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  485. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  486. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  487. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  488. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  489. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  490. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  491. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  492. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  493. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  494. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  495. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  496. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  497. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +163 -0
  498. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  499. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  500. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  501. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  502. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  503. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  504. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  505. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  506. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  507. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  508. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  509. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +76 -0
  510. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  511. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  512. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  513. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  514. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  515. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  516. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  517. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  518. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  519. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  520. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  521. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  522. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -10
  523. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  524. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  525. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  526. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  527. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  528. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  529. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  530. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  531. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  532. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  533. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  534. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  535. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  536. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  537. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  538. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  539. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  540. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  541. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  542. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  543. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  544. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  545. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  546. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  547. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  548. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  549. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  550. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  551. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  552. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  553. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  554. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  555. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  556. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  557. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  558. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  559. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  560. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  561. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +332 -0
  562. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  563. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  564. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  565. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  566. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  567. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  568. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  569. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  570. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  571. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  572. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  573. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  574. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  575. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  576. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  577. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  578. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  579. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  580. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  581. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  582. data/src/core/ext/xds/xds_api.cc +4124 -0
  583. data/src/core/ext/xds/xds_api.h +709 -0
  584. data/src/core/ext/xds/xds_bootstrap.cc +496 -0
  585. data/src/core/ext/xds/xds_bootstrap.h +115 -0
  586. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  587. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  588. data/src/core/ext/xds/xds_channel_args.h +32 -0
  589. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +1056 -884
  590. data/src/core/ext/xds/xds_client.h +375 -0
  591. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +63 -19
  592. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +52 -23
  593. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  594. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  595. data/src/core/ext/xds/xds_http_filters.cc +115 -0
  596. data/src/core/ext/xds/xds_http_filters.h +133 -0
  597. data/src/core/ext/xds/xds_server_config_fetcher.cc +546 -0
  598. data/src/core/{ext/filters/client_channel → lib/address_utils}/parse_address.cc +129 -45
  599. data/src/core/lib/address_utils/parse_address.h +77 -0
  600. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +138 -19
  601. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +38 -7
  602. data/src/core/lib/channel/call_tracer.h +85 -0
  603. data/src/core/lib/channel/channel_args.cc +9 -8
  604. data/src/core/lib/channel/channel_args.h +0 -1
  605. data/src/core/lib/channel/channel_stack.cc +22 -9
  606. data/src/core/lib/channel/channel_stack.h +18 -10
  607. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  608. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  609. data/src/core/lib/channel/channel_trace.cc +6 -8
  610. data/src/core/lib/channel/channel_trace.h +1 -1
  611. data/src/core/lib/channel/channelz.cc +148 -99
  612. data/src/core/lib/channel/channelz.h +47 -24
  613. data/src/core/lib/channel/channelz_registry.cc +29 -12
  614. data/src/core/lib/channel/channelz_registry.h +3 -1
  615. data/src/core/lib/channel/connected_channel.cc +4 -4
  616. data/src/core/lib/channel/context.h +3 -0
  617. data/src/core/lib/channel/handshaker.cc +11 -52
  618. data/src/core/lib/channel/handshaker.h +8 -25
  619. data/src/core/lib/channel/status_util.cc +12 -2
  620. data/src/core/lib/channel/status_util.h +9 -0
  621. data/src/core/lib/compression/compression.cc +8 -4
  622. data/src/core/lib/compression/compression_args.cc +3 -2
  623. data/src/core/lib/compression/compression_internal.cc +10 -5
  624. data/src/core/lib/compression/compression_internal.h +2 -1
  625. data/src/core/lib/compression/stream_compression.h +1 -1
  626. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  627. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  628. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  629. data/src/core/lib/debug/stats.h +3 -3
  630. data/src/core/lib/debug/stats_data.cc +1 -0
  631. data/src/core/lib/debug/stats_data.h +13 -13
  632. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  633. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  634. data/src/core/lib/event_engine/event_engine.cc +50 -0
  635. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  636. data/src/core/lib/event_engine/sockaddr.h +44 -0
  637. data/src/core/lib/gpr/alloc.cc +3 -2
  638. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  639. data/src/core/lib/gpr/log.cc +59 -17
  640. data/src/core/lib/gpr/log_linux.cc +23 -9
  641. data/src/core/lib/gpr/log_posix.cc +19 -7
  642. data/src/core/lib/gpr/log_windows.cc +18 -4
  643. data/src/core/lib/gpr/murmur_hash.cc +5 -3
  644. data/src/core/lib/gpr/spinlock.h +10 -2
  645. data/src/core/lib/gpr/string.cc +33 -31
  646. data/src/core/lib/gpr/string.h +9 -8
  647. data/src/core/lib/gpr/sync.cc +4 -4
  648. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  649. data/src/core/lib/gpr/sync_posix.cc +2 -8
  650. data/src/core/lib/gpr/sync_windows.cc +2 -2
  651. data/src/core/lib/gpr/time.cc +12 -12
  652. data/src/core/lib/gpr/time_precise.cc +5 -2
  653. data/src/core/lib/gpr/time_precise.h +6 -2
  654. data/src/core/lib/gpr/tls.h +4 -0
  655. data/src/core/lib/gpr/tls_msvc.h +2 -0
  656. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  657. data/src/core/lib/gpr/useful.h +5 -4
  658. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  659. data/src/core/lib/gprpp/arena.h +3 -2
  660. data/src/core/lib/gprpp/atomic.h +3 -3
  661. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  662. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  663. data/src/core/lib/gprpp/examine_stack.h +46 -0
  664. data/src/core/lib/gprpp/fork.cc +2 -2
  665. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  666. data/src/core/lib/gprpp/manual_constructor.h +2 -2
  667. data/src/core/lib/gprpp/mpscq.cc +2 -2
  668. data/src/core/lib/gprpp/orphanable.h +7 -11
  669. data/src/core/lib/gprpp/ref_counted.h +105 -68
  670. data/src/core/lib/gprpp/ref_counted_ptr.h +168 -7
  671. data/src/core/lib/gprpp/stat.h +38 -0
  672. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  673. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  674. data/src/core/lib/gprpp/status_helper.cc +407 -0
  675. data/src/core/lib/gprpp/status_helper.h +183 -0
  676. data/src/core/lib/gprpp/sync.h +104 -43
  677. data/src/core/lib/gprpp/thd.h +3 -3
  678. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  679. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  680. data/src/core/lib/gprpp/time_util.cc +77 -0
  681. data/src/core/lib/gprpp/time_util.h +42 -0
  682. data/src/core/lib/http/httpcli.cc +25 -22
  683. data/src/core/lib/http/httpcli.h +2 -3
  684. data/src/core/lib/http/httpcli_security_connector.cc +19 -15
  685. data/src/core/lib/http/parser.cc +63 -43
  686. data/src/core/lib/http/parser.h +4 -4
  687. data/src/core/lib/iomgr/buffer_list.cc +8 -10
  688. data/src/core/lib/iomgr/buffer_list.h +5 -6
  689. data/src/core/lib/iomgr/call_combiner.cc +21 -15
  690. data/src/core/lib/iomgr/call_combiner.h +12 -14
  691. data/src/core/lib/iomgr/cfstream_handle.cc +6 -5
  692. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  693. data/src/core/lib/iomgr/closure.h +7 -6
  694. data/src/core/lib/iomgr/combiner.cc +16 -13
  695. data/src/core/lib/iomgr/combiner.h +2 -2
  696. data/src/core/lib/iomgr/endpoint.cc +6 -2
  697. data/src/core/lib/iomgr/endpoint.h +10 -6
  698. data/src/core/lib/iomgr/endpoint_cfstream.cc +46 -23
  699. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  700. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  701. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  702. data/src/core/lib/iomgr/error.cc +185 -73
  703. data/src/core/lib/iomgr/error.h +218 -107
  704. data/src/core/lib/iomgr/error_cfstream.cc +12 -10
  705. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  706. data/src/core/lib/iomgr/error_internal.h +6 -2
  707. data/src/core/lib/iomgr/ev_apple.cc +16 -13
  708. data/src/core/lib/iomgr/ev_apple.h +1 -1
  709. data/src/core/lib/iomgr/ev_epoll1_linux.cc +47 -41
  710. data/src/core/lib/iomgr/ev_epollex_linux.cc +92 -87
  711. data/src/core/lib/iomgr/ev_poll_posix.cc +41 -35
  712. data/src/core/lib/iomgr/ev_posix.cc +12 -11
  713. data/src/core/lib/iomgr/ev_posix.h +9 -9
  714. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  715. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  716. data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
  717. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  718. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  719. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  720. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  721. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  722. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  723. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  724. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  725. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  726. data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
  727. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  728. data/src/core/lib/iomgr/exec_ctx.cc +19 -7
  729. data/src/core/lib/iomgr/exec_ctx.h +20 -17
  730. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  731. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  732. data/src/core/lib/iomgr/executor/threadpool.h +6 -6
  733. data/src/core/lib/iomgr/executor.cc +10 -9
  734. data/src/core/lib/iomgr/executor.h +3 -3
  735. data/src/core/lib/iomgr/iomgr.cc +3 -3
  736. data/src/core/lib/iomgr/iomgr.h +1 -1
  737. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  738. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  739. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  740. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  741. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -13
  742. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  743. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  744. data/src/core/lib/iomgr/load_file.cc +4 -4
  745. data/src/core/lib/iomgr/load_file.h +2 -2
  746. data/src/core/lib/iomgr/lockfree_event.cc +20 -15
  747. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  748. data/src/core/lib/iomgr/pollset.cc +5 -5
  749. data/src/core/lib/iomgr/pollset.h +9 -9
  750. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  751. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  752. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  753. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  754. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  755. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  756. data/src/core/lib/iomgr/port.h +8 -26
  757. data/src/core/lib/iomgr/python_util.h +5 -5
  758. data/src/core/lib/iomgr/resolve_address.cc +12 -8
  759. data/src/core/lib/iomgr/resolve_address.h +12 -6
  760. data/src/core/lib/iomgr/resolve_address_custom.cc +23 -27
  761. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  762. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -8
  763. data/src/core/lib/iomgr/resolve_address_windows.cc +12 -12
  764. data/src/core/lib/iomgr/resource_quota.cc +48 -42
  765. data/src/core/lib/iomgr/sockaddr.h +1 -0
  766. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  767. data/src/core/lib/iomgr/socket_mutator.cc +18 -4
  768. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  769. data/src/core/lib/iomgr/socket_utils_common_posix.cc +120 -77
  770. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  771. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  772. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  773. data/src/core/lib/iomgr/tcp_client_cfstream.cc +13 -15
  774. data/src/core/lib/iomgr/tcp_client_custom.cc +17 -20
  775. data/src/core/lib/iomgr/tcp_client_posix.cc +48 -54
  776. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  777. data/src/core/lib/iomgr/tcp_client_windows.cc +16 -14
  778. data/src/core/lib/iomgr/tcp_custom.cc +67 -48
  779. data/src/core/lib/iomgr/tcp_custom.h +14 -13
  780. data/src/core/lib/iomgr/tcp_posix.cc +118 -94
  781. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  782. data/src/core/lib/iomgr/tcp_server.cc +9 -10
  783. data/src/core/lib/iomgr/tcp_server.h +19 -16
  784. data/src/core/lib/iomgr/tcp_server_custom.cc +57 -58
  785. data/src/core/lib/iomgr/tcp_server_posix.cc +62 -61
  786. data/src/core/lib/iomgr/tcp_server_utils_posix.h +16 -16
  787. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +26 -25
  788. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -17
  789. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  790. data/src/core/lib/iomgr/tcp_server_windows.cc +42 -41
  791. data/src/core/lib/iomgr/tcp_uv.cc +27 -25
  792. data/src/core/lib/iomgr/tcp_windows.cc +39 -23
  793. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  794. data/src/core/lib/iomgr/timer.h +6 -1
  795. data/src/core/lib/iomgr/timer_custom.cc +7 -6
  796. data/src/core/lib/iomgr/timer_custom.h +1 -1
  797. data/src/core/lib/iomgr/timer_generic.cc +24 -23
  798. data/src/core/lib/iomgr/timer_manager.cc +4 -4
  799. data/src/core/lib/iomgr/udp_server.cc +46 -45
  800. data/src/core/lib/iomgr/udp_server.h +6 -4
  801. data/src/core/lib/iomgr/unix_sockets_posix.cc +36 -30
  802. data/src/core/lib/iomgr/unix_sockets_posix.h +9 -2
  803. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +20 -7
  804. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  805. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  806. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -6
  807. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  808. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  809. data/src/core/lib/iomgr/work_serializer.h +17 -1
  810. data/src/core/lib/json/json.h +13 -3
  811. data/src/core/lib/json/json_reader.cc +33 -31
  812. data/src/core/lib/json/json_util.cc +58 -0
  813. data/src/core/lib/json/json_util.h +204 -0
  814. data/src/core/lib/json/json_writer.cc +2 -1
  815. data/src/core/lib/matchers/matchers.cc +327 -0
  816. data/src/core/lib/matchers/matchers.h +161 -0
  817. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  818. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  819. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  820. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  821. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  822. data/src/core/lib/security/context/security_context.cc +4 -3
  823. data/src/core/lib/security/context/security_context.h +3 -1
  824. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  825. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  826. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  827. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  828. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  829. data/src/core/lib/security/credentials/credentials.cc +7 -7
  830. data/src/core/lib/security/credentials/credentials.h +12 -9
  831. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +417 -0
  832. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +82 -0
  833. data/src/core/lib/security/credentials/external/aws_request_signer.cc +214 -0
  834. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  835. data/src/core/lib/security/credentials/external/external_account_credentials.cc +500 -0
  836. data/src/core/lib/security/credentials/external/external_account_credentials.h +121 -0
  837. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  838. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  839. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  840. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +60 -0
  841. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  842. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  843. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  844. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +95 -65
  845. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  846. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  847. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  848. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -5
  849. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +10 -7
  850. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -5
  851. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +12 -9
  852. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  853. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  854. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +78 -92
  855. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +10 -9
  856. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -12
  857. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  858. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +27 -6
  859. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  860. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +347 -0
  861. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
  862. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +454 -0
  863. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +145 -0
  864. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +82 -150
  865. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +65 -185
  866. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  867. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  868. data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
  869. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  870. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  871. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  872. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +14 -4
  873. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +33 -28
  874. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  875. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +97 -0
  876. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  877. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  878. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  879. data/src/core/lib/security/security_connector/local/local_security_connector.cc +25 -12
  880. data/src/core/lib/security/security_connector/security_connector.cc +6 -3
  881. data/src/core/lib/security/security_connector/security_connector.h +14 -7
  882. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -21
  883. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  884. data/src/core/lib/security/security_connector/ssl_utils.cc +82 -33
  885. data/src/core/lib/security/security_connector/ssl_utils.h +29 -25
  886. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +380 -312
  887. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +141 -79
  888. data/src/core/lib/security/transport/client_auth_filter.cc +28 -19
  889. data/src/core/lib/security/transport/secure_endpoint.cc +13 -7
  890. data/src/core/lib/security/transport/security_handshaker.cc +81 -44
  891. data/src/core/lib/security/transport/server_auth_filter.cc +19 -12
  892. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  893. data/src/core/lib/security/transport/tsi_error.h +2 -1
  894. data/src/core/lib/security/util/json_util.cc +14 -15
  895. data/src/core/lib/security/util/json_util.h +2 -1
  896. data/src/core/lib/slice/slice.cc +57 -7
  897. data/src/core/lib/slice/slice_buffer.cc +2 -1
  898. data/src/core/lib/slice/slice_intern.cc +11 -13
  899. data/src/core/lib/slice/slice_internal.h +4 -2
  900. data/src/core/lib/surface/call.cc +164 -136
  901. data/src/core/lib/surface/call.h +15 -3
  902. data/src/core/lib/surface/call_details.cc +8 -8
  903. data/src/core/lib/surface/channel.cc +55 -63
  904. data/src/core/lib/surface/channel.h +24 -7
  905. data/src/core/lib/surface/channel_init.cc +1 -1
  906. data/src/core/lib/surface/channel_ping.cc +1 -1
  907. data/src/core/lib/surface/completion_queue.cc +96 -96
  908. data/src/core/lib/surface/completion_queue.h +18 -17
  909. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  910. data/src/core/lib/surface/init.cc +46 -32
  911. data/src/core/lib/surface/init.h +10 -1
  912. data/src/core/lib/surface/lame_client.cc +51 -58
  913. data/src/core/lib/surface/lame_client.h +5 -0
  914. data/src/core/lib/surface/server.cc +1181 -1365
  915. data/src/core/lib/surface/server.h +463 -70
  916. data/src/core/lib/surface/validate_metadata.cc +7 -7
  917. data/src/core/lib/surface/validate_metadata.h +6 -2
  918. data/src/core/lib/surface/version.cc +2 -2
  919. data/src/core/lib/transport/authority_override.cc +40 -0
  920. data/src/core/lib/transport/authority_override.h +37 -0
  921. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  922. data/src/core/lib/transport/bdp_estimator.h +2 -1
  923. data/src/core/lib/transport/byte_stream.cc +5 -5
  924. data/src/core/lib/transport/byte_stream.h +11 -11
  925. data/src/core/lib/transport/connectivity_state.cc +19 -14
  926. data/src/core/lib/transport/connectivity_state.h +26 -12
  927. data/src/core/lib/transport/error_utils.cc +33 -9
  928. data/src/core/lib/transport/error_utils.h +15 -3
  929. data/src/core/lib/transport/metadata.cc +16 -2
  930. data/src/core/lib/transport/metadata.h +2 -2
  931. data/src/core/lib/transport/metadata_batch.cc +76 -38
  932. data/src/core/lib/transport/metadata_batch.h +43 -21
  933. data/src/core/lib/transport/static_metadata.cc +296 -277
  934. data/src/core/lib/transport/static_metadata.h +80 -73
  935. data/src/core/lib/transport/status_metadata.cc +4 -3
  936. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  937. data/src/core/lib/transport/transport.cc +9 -6
  938. data/src/core/lib/transport/transport.h +26 -11
  939. data/src/core/lib/transport/transport_op_string.cc +6 -6
  940. data/src/core/lib/uri/uri_parser.cc +135 -258
  941. data/src/core/lib/uri/uri_parser.h +58 -20
  942. data/src/core/plugin_registry/grpc_plugin_registry.cc +61 -20
  943. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  944. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  945. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  946. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +47 -42
  947. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +74 -53
  948. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  949. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  950. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -3
  951. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  952. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  953. data/src/core/tsi/fake_transport_security.cc +17 -5
  954. data/src/core/tsi/local_transport_security.cc +5 -1
  955. data/src/core/tsi/local_transport_security.h +6 -7
  956. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  957. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  958. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -2
  959. data/src/core/tsi/ssl_transport_security.cc +199 -73
  960. data/src/core/tsi/ssl_transport_security.h +23 -12
  961. data/src/core/tsi/transport_security.cc +10 -8
  962. data/src/core/tsi/transport_security_interface.h +6 -1
  963. data/src/ruby/bin/math_services_pb.rb +5 -5
  964. data/src/ruby/ext/grpc/extconf.rb +17 -4
  965. data/src/ruby/ext/grpc/rb_call.c +3 -2
  966. data/src/ruby/ext/grpc/rb_call.h +4 -0
  967. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  968. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  969. data/src/ruby/ext/grpc/rb_channel_credentials.c +20 -1
  970. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  971. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  972. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  973. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  974. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  975. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +46 -18
  976. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +87 -45
  977. data/src/ruby/ext/grpc/rb_server.c +13 -1
  978. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  979. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  980. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  981. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  982. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  983. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  984. data/src/ruby/lib/grpc/generic/client_stub.rb +5 -3
  985. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  986. data/src/ruby/lib/grpc/version.rb +1 -1
  987. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +3 -3
  988. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +40 -0
  989. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +50 -16
  990. data/src/ruby/spec/call_spec.rb +1 -1
  991. data/src/ruby/spec/channel_credentials_spec.rb +42 -0
  992. data/src/ruby/spec/channel_spec.rb +17 -6
  993. data/src/ruby/spec/client_auth_spec.rb +27 -1
  994. data/src/ruby/spec/errors_spec.rb +1 -1
  995. data/src/ruby/spec/generic/active_call_spec.rb +21 -10
  996. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  997. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  998. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  999. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  1000. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  1001. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  1002. data/src/ruby/spec/pb/codegen/package_option_spec.rb +27 -7
  1003. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1004. data/src/ruby/spec/server_spec.rb +22 -0
  1005. data/src/ruby/spec/user_agent_spec.rb +74 -0
  1006. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  1007. data/third_party/abseil-cpp/absl/base/attributes.h +122 -41
  1008. data/third_party/abseil-cpp/absl/base/call_once.h +3 -10
  1009. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  1010. data/third_party/abseil-cpp/absl/base/config.h +97 -26
  1011. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +442 -335
  1012. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +169 -0
  1013. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  1014. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1015. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  1016. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  1017. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  1018. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  1019. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  1020. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +31 -4
  1021. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +35 -33
  1022. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +17 -5
  1023. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +36 -40
  1024. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +33 -30
  1025. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1026. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +11 -3
  1027. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1028. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  1029. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1030. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  1031. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  1032. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  1033. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  1034. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1035. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  1036. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1037. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  1038. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  1039. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1040. data/third_party/abseil-cpp/absl/base/macros.h +47 -109
  1041. data/third_party/abseil-cpp/absl/base/optimization.h +69 -6
  1042. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  1043. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  1044. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1045. data/third_party/abseil-cpp/absl/base/thread_annotations.h +95 -40
  1046. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  1047. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  1048. data/third_party/abseil-cpp/absl/container/inlined_vector.h +38 -39
  1049. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  1050. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +34 -9
  1051. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  1052. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  1053. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  1054. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  1055. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +274 -0
  1056. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +322 -0
  1057. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  1058. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  1059. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  1060. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  1061. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  1062. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +61 -0
  1063. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  1064. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  1065. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  1066. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1949 -0
  1067. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  1068. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  1069. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  1070. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +199 -0
  1071. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1072. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +80 -0
  1073. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1074. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +253 -0
  1075. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1076. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1077. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  1078. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +147 -0
  1079. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  1080. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1081. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  1082. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1083. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  1084. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1085. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1086. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  1087. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1088. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1089. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1090. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  1091. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1092. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1093. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  1094. data/third_party/abseil-cpp/absl/hash/internal/city.cc +349 -0
  1095. data/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  1096. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +70 -0
  1097. data/third_party/abseil-cpp/absl/hash/internal/hash.h +1045 -0
  1098. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  1099. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  1100. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1101. data/third_party/abseil-cpp/absl/meta/type_traits.h +18 -10
  1102. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1103. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  1104. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  1105. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1106. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1107. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +69 -0
  1108. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1109. data/third_party/abseil-cpp/absl/status/status.cc +452 -0
  1110. data/third_party/abseil-cpp/absl/status/status.h +878 -0
  1111. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1112. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1113. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  1114. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  1115. data/third_party/abseil-cpp/absl/strings/charconv.cc +7 -7
  1116. data/third_party/abseil-cpp/absl/strings/cord.cc +1953 -0
  1117. data/third_party/abseil-cpp/absl/strings/cord.h +1394 -0
  1118. data/third_party/abseil-cpp/absl/strings/escaping.cc +13 -13
  1119. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1120. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1121. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1122. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +8 -8
  1123. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  1124. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +543 -0
  1125. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1126. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  1127. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  1128. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  1129. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +236 -136
  1130. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +150 -64
  1131. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +16 -2
  1132. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +29 -21
  1133. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +21 -14
  1134. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  1135. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  1136. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1017 -87
  1137. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +17 -3
  1138. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  1139. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +22 -6
  1140. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +27 -11
  1141. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  1142. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1143. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1144. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1145. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  1146. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  1147. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1148. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  1149. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  1150. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1151. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1152. data/third_party/abseil-cpp/absl/strings/str_split.h +39 -4
  1153. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  1154. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  1155. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  1156. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1157. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1158. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  1159. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  1160. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1161. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1162. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1163. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1164. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1165. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +156 -0
  1166. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1167. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1168. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +428 -0
  1169. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +155 -0
  1170. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2751 -0
  1171. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1082 -0
  1172. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1173. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1174. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  1175. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1176. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1177. data/third_party/abseil-cpp/absl/time/duration.cc +93 -61
  1178. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  1179. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +33 -27
  1180. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  1181. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  1182. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  1183. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  1184. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  1185. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  1186. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  1187. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +15 -8
  1188. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +2 -2
  1189. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  1190. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1191. data/third_party/abseil-cpp/absl/time/time.h +41 -40
  1192. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1193. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1194. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1195. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  1196. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  1197. data/third_party/abseil-cpp/absl/types/variant.h +866 -0
  1198. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1199. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1200. data/third_party/boringssl-with-bazel/err_data.c +763 -721
  1201. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +6 -6
  1202. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  1203. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +5 -5
  1204. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +6 -6
  1205. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +15 -20
  1206. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1207. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  1208. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +23 -11
  1209. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  1210. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -22
  1211. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +35 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  1213. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  1214. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  1215. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  1216. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  1217. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +40 -86
  1218. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +6 -17
  1219. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  1220. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  1221. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  1222. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1223. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1224. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1226. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  1227. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  1228. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1230. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1231. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1232. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +120 -273
  1233. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  1235. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1236. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1237. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1238. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  1242. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  1243. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → dsa/internal.h} +16 -11
  1244. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1245. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  1246. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  1247. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1248. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +13 -0
  1249. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  1250. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  1251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  1252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  1253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  1255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +21 -3
  1256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  1258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +198 -37
  1259. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  1261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
  1262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  1266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -5
  1267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  1268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  1269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  1270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  1271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  1272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  1273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  1275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  1276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +25 -0
  1283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +122 -43
  1284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -14
  1285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +56 -34
  1287. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +116 -60
  1288. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1289. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +231 -11
  1290. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  1291. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  1292. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  1293. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +584 -0
  1294. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  1295. data/third_party/boringssl-with-bazel/src/crypto/mem.c +43 -15
  1296. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  1297. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  1298. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  1299. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +131 -53
  1300. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  1301. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1302. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1303. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1304. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1305. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1306. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1307. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1308. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +110 -70
  1309. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +348 -423
  1310. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +217 -79
  1311. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  1312. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +7 -7
  1313. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  1314. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  1315. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  1316. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  1317. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  1318. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1319. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  1320. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  1321. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  1322. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  1323. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +24 -39
  1324. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +27 -21
  1325. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  1326. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +52 -89
  1327. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +67 -12
  1328. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +9 -4
  1329. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  1330. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +4 -4
  1331. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +71 -59
  1332. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  1333. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +98 -25
  1334. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  1335. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1336. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  1337. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +13 -10
  1338. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1339. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +43 -17
  1340. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  1341. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1342. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +21 -172
  1343. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1344. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +25 -0
  1345. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1346. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +68 -9
  1347. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1348. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  1349. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +12 -0
  1350. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  1351. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  1352. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  1353. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  1354. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +32 -28
  1355. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +4 -6
  1356. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  1357. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  1358. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1359. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  1360. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  1361. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  1362. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +127 -41
  1363. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +8 -7
  1364. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +11 -14
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +25 -4
  1366. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +119 -0
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +746 -561
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +58 -10
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +23 -7
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -4
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1377. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +25 -5
  1378. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1379. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +62 -20
  1380. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +16 -2
  1381. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1382. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  1383. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1384. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +104 -51
  1385. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  1386. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  1387. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  1388. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1389. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  1390. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  1391. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  1392. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  1393. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  1394. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  1395. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +467 -125
  1396. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +28 -12
  1397. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +43 -24
  1398. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1456 -780
  1399. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  1400. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +595 -441
  1401. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1402. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  1403. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1404. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  1405. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +336 -25
  1406. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +97 -53
  1407. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +202 -109
  1408. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +174 -30
  1409. data/third_party/boringssl-with-bazel/src/ssl/internal.h +504 -162
  1410. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1411. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -3
  1412. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1413. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +55 -15
  1414. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +7 -12
  1415. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  1416. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  1417. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +162 -60
  1418. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1419. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +26 -73
  1420. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1421. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -5
  1422. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +12 -8
  1423. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +47 -28
  1424. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +1070 -566
  1425. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +66 -9
  1426. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +183 -76
  1427. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +169 -89
  1428. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +379 -140
  1429. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1430. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  1431. data/third_party/re2/re2/bitmap256.h +117 -0
  1432. data/third_party/re2/re2/bitstate.cc +385 -0
  1433. data/third_party/re2/re2/compile.cc +1279 -0
  1434. data/third_party/re2/re2/dfa.cc +2130 -0
  1435. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1436. data/third_party/re2/re2/filtered_re2.h +109 -0
  1437. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1438. data/third_party/re2/re2/nfa.cc +713 -0
  1439. data/third_party/re2/re2/onepass.cc +623 -0
  1440. data/third_party/re2/re2/parse.cc +2464 -0
  1441. data/third_party/re2/re2/perl_groups.cc +119 -0
  1442. data/third_party/re2/re2/pod_array.h +55 -0
  1443. data/third_party/re2/re2/prefilter.cc +710 -0
  1444. data/third_party/re2/re2/prefilter.h +108 -0
  1445. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1446. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1447. data/third_party/re2/re2/prog.cc +988 -0
  1448. data/third_party/re2/re2/prog.h +436 -0
  1449. data/third_party/re2/re2/re2.cc +1362 -0
  1450. data/third_party/re2/re2/re2.h +1002 -0
  1451. data/third_party/re2/re2/regexp.cc +980 -0
  1452. data/third_party/re2/re2/regexp.h +659 -0
  1453. data/third_party/re2/re2/set.cc +154 -0
  1454. data/third_party/re2/re2/set.h +80 -0
  1455. data/third_party/re2/re2/simplify.cc +657 -0
  1456. data/third_party/re2/re2/sparse_array.h +392 -0
  1457. data/third_party/re2/re2/sparse_set.h +264 -0
  1458. data/third_party/re2/re2/stringpiece.cc +65 -0
  1459. data/third_party/re2/re2/stringpiece.h +210 -0
  1460. data/third_party/re2/re2/tostring.cc +351 -0
  1461. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1462. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1463. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1464. data/third_party/re2/re2/unicode_groups.h +67 -0
  1465. data/third_party/re2/re2/walker-inl.h +246 -0
  1466. data/third_party/re2/util/benchmark.h +156 -0
  1467. data/third_party/re2/util/flags.h +26 -0
  1468. data/third_party/re2/util/logging.h +109 -0
  1469. data/third_party/re2/util/malloc_counter.h +19 -0
  1470. data/third_party/re2/util/mix.h +41 -0
  1471. data/third_party/re2/util/mutex.h +148 -0
  1472. data/third_party/re2/util/pcre.cc +1025 -0
  1473. data/third_party/re2/util/pcre.h +681 -0
  1474. data/third_party/re2/util/rune.cc +260 -0
  1475. data/third_party/re2/util/strutil.cc +149 -0
  1476. data/third_party/re2/util/strutil.h +21 -0
  1477. data/third_party/re2/util/test.h +50 -0
  1478. data/third_party/re2/util/utf.h +44 -0
  1479. data/third_party/re2/util/util.h +42 -0
  1480. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  1481. data/third_party/upb/upb/decode.c +604 -511
  1482. data/third_party/upb/upb/decode.h +20 -1
  1483. data/third_party/upb/upb/decode.int.h +163 -0
  1484. data/third_party/upb/upb/decode_fast.c +1040 -0
  1485. data/third_party/upb/upb/decode_fast.h +126 -0
  1486. data/third_party/upb/upb/def.c +2178 -0
  1487. data/third_party/upb/upb/def.h +315 -0
  1488. data/third_party/upb/upb/def.hpp +439 -0
  1489. data/third_party/upb/upb/encode.c +311 -211
  1490. data/third_party/upb/upb/encode.h +27 -2
  1491. data/third_party/upb/upb/msg.c +215 -70
  1492. data/third_party/upb/upb/msg.h +558 -14
  1493. data/third_party/upb/upb/port_def.inc +105 -63
  1494. data/third_party/upb/upb/port_undef.inc +10 -7
  1495. data/third_party/upb/upb/reflection.c +408 -0
  1496. data/third_party/upb/upb/reflection.h +168 -0
  1497. data/third_party/upb/upb/table.c +73 -269
  1498. data/third_party/upb/upb/table.int.h +25 -57
  1499. data/third_party/upb/upb/text_encode.c +421 -0
  1500. data/third_party/upb/upb/text_encode.h +38 -0
  1501. data/third_party/upb/upb/upb.c +138 -135
  1502. data/third_party/upb/upb/upb.h +119 -146
  1503. data/third_party/upb/upb/upb.hpp +88 -0
  1504. data/third_party/upb/upb/upb.int.h +29 -0
  1505. data/third_party/xxhash/xxhash.h +5325 -0
  1506. metadata +698 -181
  1507. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -938
  1508. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  1509. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -834
  1510. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1511. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -484
  1512. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  1513. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -348
  1514. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -123
  1515. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
  1516. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -280
  1517. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +0 -342
  1518. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +0 -88
  1519. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  1520. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  1521. data/src/core/ext/filters/client_channel/xds/xds_client.h +0 -309
  1522. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  1523. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
  1524. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  1525. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
  1526. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  1527. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
  1528. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  1529. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
  1530. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  1531. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  1532. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  1533. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +0 -35
  1534. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  1535. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +0 -55
  1536. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  1537. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  1538. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
  1539. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  1540. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  1541. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +0 -35
  1542. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
  1543. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  1544. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
  1545. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  1546. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  1547. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  1548. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
  1549. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  1550. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  1551. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  1552. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
  1553. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +0 -36
  1554. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  1555. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  1556. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
  1557. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
  1558. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  1559. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  1560. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  1561. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  1562. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  1563. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  1564. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
  1565. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  1566. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  1567. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  1568. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  1569. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  1570. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  1571. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  1572. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  1573. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  1574. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  1575. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  1576. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  1577. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
  1578. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  1579. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  1580. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  1581. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  1582. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
  1583. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  1584. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  1585. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  1586. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  1587. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  1588. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  1589. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  1590. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  1591. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
  1592. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +0 -33
  1593. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  1594. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  1595. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  1596. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  1597. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  1598. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
  1599. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  1600. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
  1601. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  1602. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  1603. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  1604. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  1605. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +0 -39
  1606. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  1607. data/src/core/ext/upb-generated/envoy/type/range.upb.c +0 -50
  1608. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  1609. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  1610. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  1611. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  1612. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1613. data/src/core/lib/gpr/arena.h +0 -47
  1614. data/src/core/lib/gprpp/map.h +0 -53
  1615. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1616. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -87
  1617. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  1618. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1619. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1620. data/src/core/lib/slice/slice_hash_table.h +0 -199
  1621. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  1622. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1623. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -218
  1624. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  1625. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1626. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1627. data/third_party/upb/upb/generated_util.h +0 -105
  1628. data/third_party/upb/upb/port.c +0 -26
@@ -113,25 +113,30 @@
113
113
  #include <stdlib.h>
114
114
  #include <string.h>
115
115
 
116
+ #include <algorithm>
116
117
  #include <utility>
117
118
 
119
+ #include <openssl/aead.h>
118
120
  #include <openssl/bytestring.h>
119
121
  #include <openssl/chacha.h>
122
+ #include <openssl/curve25519.h>
120
123
  #include <openssl/digest.h>
121
124
  #include <openssl/err.h>
122
125
  #include <openssl/evp.h>
123
126
  #include <openssl/hmac.h>
127
+ #include <openssl/hpke.h>
124
128
  #include <openssl/mem.h>
125
129
  #include <openssl/nid.h>
126
130
  #include <openssl/rand.h>
127
131
 
128
- #include "internal.h"
129
132
  #include "../crypto/internal.h"
133
+ #include "internal.h"
130
134
 
131
135
 
132
136
  BSSL_NAMESPACE_BEGIN
133
137
 
134
138
  static bool ssl_check_clienthello_tlsext(SSL_HANDSHAKE *hs);
139
+ static bool ssl_check_serverhello_tlsext(SSL_HANDSHAKE *hs);
135
140
 
136
141
  static int compare_uint16_t(const void *p1, const void *p2) {
137
142
  uint16_t u1 = *((const uint16_t *)p1);
@@ -204,11 +209,11 @@ static bool is_post_quantum_group(uint16_t id) {
204
209
  }
205
210
 
206
211
  bool ssl_client_hello_init(const SSL *ssl, SSL_CLIENT_HELLO *out,
207
- const SSLMessage &msg) {
212
+ Span<const uint8_t> body) {
208
213
  OPENSSL_memset(out, 0, sizeof(*out));
209
214
  out->ssl = const_cast<SSL *>(ssl);
210
- out->client_hello = CBS_data(&msg.body);
211
- out->client_hello_len = CBS_len(&msg.body);
215
+ out->client_hello = body.data();
216
+ out->client_hello_len = body.size();
212
217
 
213
218
  CBS client_hello, random, session_id;
214
219
  CBS_init(&client_hello, out->client_hello, out->client_hello_len);
@@ -400,6 +405,11 @@ bool tls1_check_group_id(const SSL_HANDSHAKE *hs, uint16_t group_id) {
400
405
  return false;
401
406
  }
402
407
 
408
+ // We internally assume zero is never allocated as a group ID.
409
+ if (group_id == 0) {
410
+ return false;
411
+ }
412
+
403
413
  for (uint16_t supported : tls1_get_grouplist(hs)) {
404
414
  if (supported == group_id) {
405
415
  return true;
@@ -483,9 +493,7 @@ bool tls12_check_peer_sigalg(const SSL_HANDSHAKE *hs, uint8_t *out_alert,
483
493
  return false;
484
494
  }
485
495
 
486
- // tls_extension represents a TLS extension that is handled internally. The
487
- // |init| function is called for each handshake, before any other functions of
488
- // the extension. Then the add and parse callbacks are called as needed.
496
+ // tls_extension represents a TLS extension that is handled internally.
489
497
  //
490
498
  // The parse callbacks receive a |CBS| that contains the contents of the
491
499
  // extension (i.e. not including the type and length bytes). If an extension is
@@ -495,14 +503,27 @@ bool tls12_check_peer_sigalg(const SSL_HANDSHAKE *hs, uint8_t *out_alert,
495
503
  // The add callbacks receive a |CBB| to which the extension can be appended but
496
504
  // the function is responsible for appending the type and length bytes too.
497
505
  //
506
+ // |add_clienthello| may be called multiple times and must not mutate |hs|. It
507
+ // is additionally passed two output |CBB|s. If the extension is the same
508
+ // independent of the value of |type|, the callback may write to
509
+ // |out_compressible| instead of |out|. When serializing the ClientHelloInner,
510
+ // all compressible extensions will be made continguous and replaced with
511
+ // ech_outer_extensions when encrypted. When serializing the ClientHelloOuter
512
+ // or not offering ECH, |out| will be equal to |out_compressible|, so writing to
513
+ // |out_compressible| still works.
514
+ //
515
+ // Note the |parse_serverhello| and |add_serverhello| callbacks refer to the
516
+ // TLS 1.2 ServerHello. In TLS 1.3, these callbacks act on EncryptedExtensions,
517
+ // with ServerHello extensions handled elsewhere in the handshake.
518
+ //
498
519
  // All callbacks return true for success and false for error. If a parse
499
520
  // function returns zero then a fatal alert with value |*out_alert| will be
500
521
  // sent. If |*out_alert| isn't set, then a |decode_error| alert will be sent.
501
522
  struct tls_extension {
502
523
  uint16_t value;
503
- void (*init)(SSL_HANDSHAKE *hs);
504
524
 
505
- bool (*add_clienthello)(SSL_HANDSHAKE *hs, CBB *out);
525
+ bool (*add_clienthello)(const SSL_HANDSHAKE *hs, CBB *out,
526
+ CBB *out_compressible, ssl_client_hello_type_t type);
506
527
  bool (*parse_serverhello)(SSL_HANDSHAKE *hs, uint8_t *out_alert,
507
528
  CBS *contents);
508
529
 
@@ -512,7 +533,7 @@ struct tls_extension {
512
533
  };
513
534
 
514
535
  static bool forbid_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
515
- CBS *contents) {
536
+ CBS *contents) {
516
537
  if (contents != NULL) {
517
538
  // Servers MUST NOT send this extension.
518
539
  *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
@@ -524,7 +545,7 @@ static bool forbid_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
524
545
  }
525
546
 
526
547
  static bool ignore_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
527
- CBS *contents) {
548
+ CBS *contents) {
528
549
  // This extension from the client is handled elsewhere.
529
550
  return true;
530
551
  }
@@ -537,10 +558,21 @@ static bool dont_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
537
558
  //
538
559
  // https://tools.ietf.org/html/rfc6066#section-3.
539
560
 
540
- static bool ext_sni_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
541
- SSL *const ssl = hs->ssl;
542
- if (ssl->hostname == nullptr) {
543
- return true;
561
+ static bool ext_sni_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
562
+ CBB *out_compressible,
563
+ ssl_client_hello_type_t type) {
564
+ const SSL *const ssl = hs->ssl;
565
+ // If offering ECH, send the public name instead of the configured name.
566
+ Span<const uint8_t> hostname;
567
+ if (type == ssl_client_hello_outer) {
568
+ hostname = hs->selected_ech_config->public_name;
569
+ } else {
570
+ if (ssl->hostname == nullptr) {
571
+ return true;
572
+ }
573
+ hostname =
574
+ MakeConstSpan(reinterpret_cast<const uint8_t *>(ssl->hostname.get()),
575
+ strlen(ssl->hostname.get()));
544
576
  }
545
577
 
546
578
  CBB contents, server_name_list, name;
@@ -549,8 +581,7 @@ static bool ext_sni_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
549
581
  !CBB_add_u16_length_prefixed(&contents, &server_name_list) ||
550
582
  !CBB_add_u8(&server_name_list, TLSEXT_NAMETYPE_host_name) ||
551
583
  !CBB_add_u16_length_prefixed(&server_name_list, &name) ||
552
- !CBB_add_bytes(&name, (const uint8_t *)ssl->hostname.get(),
553
- strlen(ssl->hostname.get())) ||
584
+ !CBB_add_bytes(&name, hostname.data(), hostname.size()) ||
554
585
  !CBB_flush(out)) {
555
586
  return false;
556
587
  }
@@ -586,14 +617,138 @@ static bool ext_sni_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
586
617
  }
587
618
 
588
619
 
620
+ // Encrypted ClientHello (ECH)
621
+ //
622
+ // https://tools.ietf.org/html/draft-ietf-tls-esni-10
623
+
624
+ static bool ext_ech_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
625
+ CBB *out_compressible,
626
+ ssl_client_hello_type_t type) {
627
+ if (type == ssl_client_hello_inner || hs->ech_client_bytes.empty()) {
628
+ return true;
629
+ }
630
+
631
+ CBB ech_body;
632
+ if (!CBB_add_u16(out, TLSEXT_TYPE_encrypted_client_hello) ||
633
+ !CBB_add_u16_length_prefixed(out, &ech_body) ||
634
+ !CBB_add_bytes(&ech_body, hs->ech_client_bytes.data(),
635
+ hs->ech_client_bytes.size()) ||
636
+ !CBB_flush(out)) {
637
+ return false;
638
+ }
639
+ return true;
640
+ }
641
+
642
+ static bool ext_ech_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
643
+ CBS *contents) {
644
+ SSL *const ssl = hs->ssl;
645
+ if (contents == NULL) {
646
+ return true;
647
+ }
648
+
649
+ // The ECH extension may not be sent in TLS 1.2 ServerHello, only TLS 1.3
650
+ // EncryptedExtension.
651
+ if (ssl_protocol_version(ssl) < TLS1_3_VERSION) {
652
+ *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
653
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
654
+ return false;
655
+ }
656
+
657
+ // The server may only send retry configs in response to ClientHelloOuter (or
658
+ // ECH GREASE), not ClientHelloInner. The unsolicited extension rule checks
659
+ // this implicitly because the ClientHelloInner has no encrypted_client_hello
660
+ // extension.
661
+ //
662
+ // TODO(https://crbug.com/boringssl/275): If
663
+ // https://github.com/tlswg/draft-ietf-tls-esni/pull/422 is merged, a later
664
+ // draft will fold encrypted_client_hello and ech_is_inner together. Then this
665
+ // assert should become a runtime check.
666
+ assert(!ssl->s3->ech_accept);
667
+
668
+ // TODO(https://crbug.com/boringssl/275): When the implementing the
669
+ // ClientHelloOuter flow, save the retry configs.
670
+ if (!ssl_is_valid_ech_config_list(*contents)) {
671
+ *out_alert = SSL_AD_DECODE_ERROR;
672
+ return false;
673
+ }
674
+ return true;
675
+ }
676
+
677
+ static bool ext_ech_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
678
+ CBS *contents) {
679
+ if (contents != nullptr) {
680
+ hs->ech_present = true;
681
+ return true;
682
+ }
683
+ return true;
684
+ }
685
+
686
+ static bool ext_ech_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
687
+ SSL *const ssl = hs->ssl;
688
+ if (ssl_protocol_version(ssl) < TLS1_3_VERSION || //
689
+ ssl->s3->ech_accept || //
690
+ hs->ech_keys == nullptr) {
691
+ return true;
692
+ }
693
+
694
+ // Write the list of retry configs to |out|. Note |SSL_CTX_set1_ech_keys|
695
+ // ensures |ech_keys| contains at least one retry config.
696
+ CBB body, retry_configs;
697
+ if (!CBB_add_u16(out, TLSEXT_TYPE_encrypted_client_hello) ||
698
+ !CBB_add_u16_length_prefixed(out, &body) ||
699
+ !CBB_add_u16_length_prefixed(&body, &retry_configs)) {
700
+ return false;
701
+ }
702
+ for (const auto &config : hs->ech_keys->configs) {
703
+ if (!config->is_retry_config()) {
704
+ continue;
705
+ }
706
+ if (!CBB_add_bytes(&retry_configs, config->ech_config().raw.data(),
707
+ config->ech_config().raw.size())) {
708
+ return false;
709
+ }
710
+ }
711
+ return CBB_flush(out);
712
+ }
713
+
714
+ static bool ext_ech_is_inner_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
715
+ CBB *out_compressible,
716
+ ssl_client_hello_type_t type) {
717
+ if (type == ssl_client_hello_inner) {
718
+ if (!CBB_add_u16(out, TLSEXT_TYPE_ech_is_inner) ||
719
+ !CBB_add_u16(out, 0 /* empty extension */)) {
720
+ return false;
721
+ }
722
+ }
723
+ return true;
724
+ }
725
+
726
+ static bool ext_ech_is_inner_parse_clienthello(SSL_HANDSHAKE *hs,
727
+ uint8_t *out_alert,
728
+ CBS *contents) {
729
+ if (contents == nullptr) {
730
+ return true;
731
+ }
732
+ if (CBS_len(contents) > 0) {
733
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
734
+ return false;
735
+ }
736
+ hs->ech_is_inner_present = true;
737
+ return true;
738
+ }
739
+
740
+
589
741
  // Renegotiation indication.
590
742
  //
591
743
  // https://tools.ietf.org/html/rfc5746
592
744
 
593
- static bool ext_ri_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
594
- SSL *const ssl = hs->ssl;
745
+ static bool ext_ri_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
746
+ CBB *out_compressible,
747
+ ssl_client_hello_type_t type) {
748
+ const SSL *const ssl = hs->ssl;
595
749
  // Renegotiation indication is not necessary in TLS 1.3.
596
- if (hs->min_version >= TLS1_3_VERSION) {
750
+ if (hs->min_version >= TLS1_3_VERSION ||
751
+ type == ssl_client_hello_inner) {
597
752
  return true;
598
753
  }
599
754
 
@@ -755,9 +910,11 @@ static bool ext_ri_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
755
910
  //
756
911
  // https://tools.ietf.org/html/rfc7627
757
912
 
758
- static bool ext_ems_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
913
+ static bool ext_ems_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
914
+ CBB *out_compressible,
915
+ ssl_client_hello_type_t type) {
759
916
  // Extended master secret is not necessary in TLS 1.3.
760
- if (hs->min_version >= TLS1_3_VERSION) {
917
+ if (hs->min_version >= TLS1_3_VERSION || type == ssl_client_hello_inner) {
761
918
  return true;
762
919
  }
763
920
 
@@ -830,10 +987,12 @@ static bool ext_ems_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
830
987
  //
831
988
  // https://tools.ietf.org/html/rfc5077
832
989
 
833
- static bool ext_ticket_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
834
- SSL *const ssl = hs->ssl;
990
+ static bool ext_ticket_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
991
+ CBB *out_compressible,
992
+ ssl_client_hello_type_t type) {
993
+ const SSL *const ssl = hs->ssl;
835
994
  // TLS 1.3 uses a different ticket extension.
836
- if (hs->min_version >= TLS1_3_VERSION ||
995
+ if (hs->min_version >= TLS1_3_VERSION || type == ssl_client_hello_inner ||
837
996
  SSL_get_options(ssl) & SSL_OP_NO_TICKET) {
838
997
  return true;
839
998
  }
@@ -908,17 +1067,19 @@ static bool ext_ticket_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
908
1067
  //
909
1068
  // https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1
910
1069
 
911
- static bool ext_sigalgs_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1070
+ static bool ext_sigalgs_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1071
+ CBB *out_compressible,
1072
+ ssl_client_hello_type_t type) {
912
1073
  if (hs->max_version < TLS1_2_VERSION) {
913
1074
  return true;
914
1075
  }
915
1076
 
916
1077
  CBB contents, sigalgs_cbb;
917
- if (!CBB_add_u16(out, TLSEXT_TYPE_signature_algorithms) ||
918
- !CBB_add_u16_length_prefixed(out, &contents) ||
1078
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_signature_algorithms) ||
1079
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
919
1080
  !CBB_add_u16_length_prefixed(&contents, &sigalgs_cbb) ||
920
1081
  !tls12_add_verify_sigalgs(hs, &sigalgs_cbb) ||
921
- !CBB_flush(out)) {
1082
+ !CBB_flush(out_compressible)) {
922
1083
  return false;
923
1084
  }
924
1085
 
@@ -947,18 +1108,20 @@ static bool ext_sigalgs_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
947
1108
  //
948
1109
  // https://tools.ietf.org/html/rfc6066#section-8
949
1110
 
950
- static bool ext_ocsp_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1111
+ static bool ext_ocsp_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1112
+ CBB *out_compressible,
1113
+ ssl_client_hello_type_t type) {
951
1114
  if (!hs->config->ocsp_stapling_enabled) {
952
1115
  return true;
953
1116
  }
954
1117
 
955
1118
  CBB contents;
956
- if (!CBB_add_u16(out, TLSEXT_TYPE_status_request) ||
957
- !CBB_add_u16_length_prefixed(out, &contents) ||
1119
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_status_request) ||
1120
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
958
1121
  !CBB_add_u8(&contents, TLSEXT_STATUSTYPE_ocsp) ||
959
1122
  !CBB_add_u16(&contents, 0 /* empty responder ID list */) ||
960
1123
  !CBB_add_u16(&contents, 0 /* empty request extensions */) ||
961
- !CBB_flush(out)) {
1124
+ !CBB_flush(out_compressible)) {
962
1125
  return false;
963
1126
  }
964
1127
 
@@ -1029,11 +1192,16 @@ static bool ext_ocsp_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1029
1192
  //
1030
1193
  // https://htmlpreview.github.io/?https://github.com/agl/technotes/blob/master/nextprotoneg.html
1031
1194
 
1032
- static bool ext_npn_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1033
- SSL *const ssl = hs->ssl;
1034
- if (ssl->s3->initial_handshake_complete ||
1035
- ssl->ctx->next_proto_select_cb == NULL ||
1036
- SSL_is_dtls(ssl)) {
1195
+ static bool ext_npn_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1196
+ CBB *out_compressible,
1197
+ ssl_client_hello_type_t type) {
1198
+ const SSL *const ssl = hs->ssl;
1199
+ if (ssl->ctx->next_proto_select_cb == NULL ||
1200
+ // Do not allow NPN to change on renegotiation.
1201
+ ssl->s3->initial_handshake_complete ||
1202
+ // NPN is not defined in DTLS or TLS 1.3.
1203
+ SSL_is_dtls(ssl) || hs->min_version >= TLS1_3_VERSION ||
1204
+ type == ssl_client_hello_inner) {
1037
1205
  return true;
1038
1206
  }
1039
1207
 
@@ -1152,13 +1320,15 @@ static bool ext_npn_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1152
1320
  //
1153
1321
  // https://tools.ietf.org/html/rfc6962#section-3.3.1
1154
1322
 
1155
- static bool ext_sct_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1323
+ static bool ext_sct_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1324
+ CBB *out_compressible,
1325
+ ssl_client_hello_type_t type) {
1156
1326
  if (!hs->config->signed_cert_timestamps_enabled) {
1157
1327
  return true;
1158
1328
  }
1159
1329
 
1160
- if (!CBB_add_u16(out, TLSEXT_TYPE_certificate_timestamp) ||
1161
- !CBB_add_u16(out, 0 /* length */)) {
1330
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_certificate_timestamp) ||
1331
+ !CBB_add_u16(out_compressible, 0 /* length */)) {
1162
1332
  return false;
1163
1333
  }
1164
1334
 
@@ -1243,20 +1413,29 @@ static bool ext_sct_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1243
1413
  //
1244
1414
  // https://tools.ietf.org/html/rfc7301
1245
1415
 
1246
- static bool ext_alpn_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1247
- SSL *const ssl = hs->ssl;
1416
+ static bool ext_alpn_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1417
+ CBB *out_compressible,
1418
+ ssl_client_hello_type_t type) {
1419
+ const SSL *const ssl = hs->ssl;
1420
+ if (hs->config->alpn_client_proto_list.empty() && ssl->quic_method) {
1421
+ // ALPN MUST be used with QUIC.
1422
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_APPLICATION_PROTOCOL);
1423
+ return false;
1424
+ }
1425
+
1248
1426
  if (hs->config->alpn_client_proto_list.empty() ||
1249
1427
  ssl->s3->initial_handshake_complete) {
1250
1428
  return true;
1251
1429
  }
1252
1430
 
1253
1431
  CBB contents, proto_list;
1254
- if (!CBB_add_u16(out, TLSEXT_TYPE_application_layer_protocol_negotiation) ||
1255
- !CBB_add_u16_length_prefixed(out, &contents) ||
1432
+ if (!CBB_add_u16(out_compressible,
1433
+ TLSEXT_TYPE_application_layer_protocol_negotiation) ||
1434
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
1256
1435
  !CBB_add_u16_length_prefixed(&contents, &proto_list) ||
1257
1436
  !CBB_add_bytes(&proto_list, hs->config->alpn_client_proto_list.data(),
1258
1437
  hs->config->alpn_client_proto_list.size()) ||
1259
- !CBB_flush(out)) {
1438
+ !CBB_flush(out_compressible)) {
1260
1439
  return false;
1261
1440
  }
1262
1441
 
@@ -1267,6 +1446,12 @@ static bool ext_alpn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1267
1446
  CBS *contents) {
1268
1447
  SSL *const ssl = hs->ssl;
1269
1448
  if (contents == NULL) {
1449
+ if (ssl->quic_method) {
1450
+ // ALPN is required when QUIC is used.
1451
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_APPLICATION_PROTOCOL);
1452
+ *out_alert = SSL_AD_NO_APPLICATION_PROTOCOL;
1453
+ return false;
1454
+ }
1270
1455
  return true;
1271
1456
  }
1272
1457
 
@@ -1306,6 +1491,22 @@ static bool ext_alpn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1306
1491
  return true;
1307
1492
  }
1308
1493
 
1494
+ bool ssl_is_valid_alpn_list(Span<const uint8_t> in) {
1495
+ CBS protocol_name_list = in;
1496
+ if (CBS_len(&protocol_name_list) == 0) {
1497
+ return false;
1498
+ }
1499
+ while (CBS_len(&protocol_name_list) > 0) {
1500
+ CBS protocol_name;
1501
+ if (!CBS_get_u8_length_prefixed(&protocol_name_list, &protocol_name) ||
1502
+ // Empty protocol names are forbidden.
1503
+ CBS_len(&protocol_name) == 0) {
1504
+ return false;
1505
+ }
1506
+ }
1507
+ return true;
1508
+ }
1509
+
1309
1510
  bool ssl_is_alpn_protocol_allowed(const SSL_HANDSHAKE *hs,
1310
1511
  Span<const uint8_t> protocol) {
1311
1512
  if (hs->config->alpn_client_proto_list.empty()) {
@@ -1342,6 +1543,12 @@ bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1342
1543
  !ssl_client_hello_get_extension(
1343
1544
  client_hello, &contents,
1344
1545
  TLSEXT_TYPE_application_layer_protocol_negotiation)) {
1546
+ if (ssl->quic_method) {
1547
+ // ALPN is required when QUIC is used.
1548
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_APPLICATION_PROTOCOL);
1549
+ *out_alert = SSL_AD_NO_APPLICATION_PROTOCOL;
1550
+ return false;
1551
+ }
1345
1552
  // Ignore ALPN if not configured or no extension was supplied.
1346
1553
  return true;
1347
1554
  }
@@ -1352,42 +1559,47 @@ bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1352
1559
  CBS protocol_name_list;
1353
1560
  if (!CBS_get_u16_length_prefixed(&contents, &protocol_name_list) ||
1354
1561
  CBS_len(&contents) != 0 ||
1355
- CBS_len(&protocol_name_list) < 2) {
1562
+ !ssl_is_valid_alpn_list(protocol_name_list)) {
1356
1563
  OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
1357
1564
  *out_alert = SSL_AD_DECODE_ERROR;
1358
1565
  return false;
1359
1566
  }
1360
1567
 
1361
- // Validate the protocol list.
1362
- CBS protocol_name_list_copy = protocol_name_list;
1363
- while (CBS_len(&protocol_name_list_copy) > 0) {
1364
- CBS protocol_name;
1365
-
1366
- if (!CBS_get_u8_length_prefixed(&protocol_name_list_copy, &protocol_name) ||
1367
- // Empty protocol names are forbidden.
1368
- CBS_len(&protocol_name) == 0) {
1369
- OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
1370
- *out_alert = SSL_AD_DECODE_ERROR;
1371
- return false;
1372
- }
1373
- }
1374
-
1375
1568
  const uint8_t *selected;
1376
1569
  uint8_t selected_len;
1377
- if (ssl->ctx->alpn_select_cb(
1378
- ssl, &selected, &selected_len, CBS_data(&protocol_name_list),
1379
- CBS_len(&protocol_name_list),
1380
- ssl->ctx->alpn_select_cb_arg) == SSL_TLSEXT_ERR_OK) {
1381
- if (selected_len == 0) {
1382
- OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL);
1383
- *out_alert = SSL_AD_INTERNAL_ERROR;
1570
+ int ret = ssl->ctx->alpn_select_cb(
1571
+ ssl, &selected, &selected_len, CBS_data(&protocol_name_list),
1572
+ CBS_len(&protocol_name_list), ssl->ctx->alpn_select_cb_arg);
1573
+ // ALPN is required when QUIC is used.
1574
+ if (ssl->quic_method &&
1575
+ (ret == SSL_TLSEXT_ERR_NOACK || ret == SSL_TLSEXT_ERR_ALERT_WARNING)) {
1576
+ ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1577
+ }
1578
+ switch (ret) {
1579
+ case SSL_TLSEXT_ERR_OK:
1580
+ if (selected_len == 0) {
1581
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL);
1582
+ *out_alert = SSL_AD_INTERNAL_ERROR;
1583
+ return false;
1584
+ }
1585
+ if (!ssl->s3->alpn_selected.CopyFrom(
1586
+ MakeConstSpan(selected, selected_len))) {
1587
+ *out_alert = SSL_AD_INTERNAL_ERROR;
1588
+ return false;
1589
+ }
1590
+ break;
1591
+ case SSL_TLSEXT_ERR_NOACK:
1592
+ case SSL_TLSEXT_ERR_ALERT_WARNING:
1593
+ break;
1594
+ case SSL_TLSEXT_ERR_ALERT_FATAL:
1595
+ *out_alert = SSL_AD_NO_APPLICATION_PROTOCOL;
1596
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_APPLICATION_PROTOCOL);
1384
1597
  return false;
1385
- }
1386
- if (!ssl->s3->alpn_selected.CopyFrom(
1387
- MakeConstSpan(selected, selected_len))) {
1598
+ default:
1599
+ // Invalid return value.
1388
1600
  *out_alert = SSL_AD_INTERNAL_ERROR;
1601
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1389
1602
  return false;
1390
- }
1391
1603
  }
1392
1604
 
1393
1605
  return true;
@@ -1418,18 +1630,16 @@ static bool ext_alpn_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1418
1630
  //
1419
1631
  // https://tools.ietf.org/html/draft-balfanz-tls-channelid-01
1420
1632
 
1421
- static void ext_channel_id_init(SSL_HANDSHAKE *hs) {
1422
- hs->ssl->s3->channel_id_valid = false;
1423
- }
1424
-
1425
- static bool ext_channel_id_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1426
- SSL *const ssl = hs->ssl;
1427
- if (!hs->config->channel_id_enabled || SSL_is_dtls(ssl)) {
1633
+ static bool ext_channel_id_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1634
+ CBB *out_compressible,
1635
+ ssl_client_hello_type_t type) {
1636
+ const SSL *const ssl = hs->ssl;
1637
+ if (!hs->config->channel_id_private || SSL_is_dtls(ssl)) {
1428
1638
  return true;
1429
1639
  }
1430
1640
 
1431
- if (!CBB_add_u16(out, TLSEXT_TYPE_channel_id) ||
1432
- !CBB_add_u16(out, 0 /* length */)) {
1641
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_channel_id) ||
1642
+ !CBB_add_u16(out_compressible, 0 /* length */)) {
1433
1643
  return false;
1434
1644
  }
1435
1645
 
@@ -1439,19 +1649,18 @@ static bool ext_channel_id_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1439
1649
  static bool ext_channel_id_parse_serverhello(SSL_HANDSHAKE *hs,
1440
1650
  uint8_t *out_alert,
1441
1651
  CBS *contents) {
1442
- SSL *const ssl = hs->ssl;
1443
1652
  if (contents == NULL) {
1444
1653
  return true;
1445
1654
  }
1446
1655
 
1447
- assert(!SSL_is_dtls(ssl));
1448
- assert(hs->config->channel_id_enabled);
1656
+ assert(!SSL_is_dtls(hs->ssl));
1657
+ assert(hs->config->channel_id_private);
1449
1658
 
1450
1659
  if (CBS_len(contents) != 0) {
1451
1660
  return false;
1452
1661
  }
1453
1662
 
1454
- ssl->s3->channel_id_valid = true;
1663
+ hs->channel_id_negotiated = true;
1455
1664
  return true;
1456
1665
  }
1457
1666
 
@@ -1467,13 +1676,12 @@ static bool ext_channel_id_parse_clienthello(SSL_HANDSHAKE *hs,
1467
1676
  return false;
1468
1677
  }
1469
1678
 
1470
- ssl->s3->channel_id_valid = true;
1679
+ hs->channel_id_negotiated = true;
1471
1680
  return true;
1472
1681
  }
1473
1682
 
1474
1683
  static bool ext_channel_id_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1475
- SSL *const ssl = hs->ssl;
1476
- if (!ssl->s3->channel_id_valid) {
1684
+ if (!hs->channel_id_negotiated) {
1477
1685
  return true;
1478
1686
  }
1479
1687
 
@@ -1490,22 +1698,21 @@ static bool ext_channel_id_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1490
1698
  //
1491
1699
  // https://tools.ietf.org/html/rfc5764
1492
1700
 
1493
-
1494
- static void ext_srtp_init(SSL_HANDSHAKE *hs) {
1495
- hs->ssl->s3->srtp_profile = NULL;
1496
- }
1497
-
1498
- static bool ext_srtp_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1499
- SSL *const ssl = hs->ssl;
1500
- STACK_OF(SRTP_PROTECTION_PROFILE) *profiles = SSL_get_srtp_profiles(ssl);
1701
+ static bool ext_srtp_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1702
+ CBB *out_compressible,
1703
+ ssl_client_hello_type_t type) {
1704
+ const SSL *const ssl = hs->ssl;
1705
+ const STACK_OF(SRTP_PROTECTION_PROFILE) *profiles =
1706
+ SSL_get_srtp_profiles(ssl);
1501
1707
  if (profiles == NULL ||
1502
- sk_SRTP_PROTECTION_PROFILE_num(profiles) == 0) {
1708
+ sk_SRTP_PROTECTION_PROFILE_num(profiles) == 0 ||
1709
+ !SSL_is_dtls(ssl)) {
1503
1710
  return true;
1504
1711
  }
1505
1712
 
1506
1713
  CBB contents, profile_ids;
1507
- if (!CBB_add_u16(out, TLSEXT_TYPE_srtp) ||
1508
- !CBB_add_u16_length_prefixed(out, &contents) ||
1714
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_srtp) ||
1715
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
1509
1716
  !CBB_add_u16_length_prefixed(&contents, &profile_ids)) {
1510
1717
  return false;
1511
1718
  }
@@ -1517,7 +1724,7 @@ static bool ext_srtp_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1517
1724
  }
1518
1725
 
1519
1726
  if (!CBB_add_u8(&contents, 0 /* empty use_mki value */) ||
1520
- !CBB_flush(out)) {
1727
+ !CBB_flush(out_compressible)) {
1521
1728
  return false;
1522
1729
  }
1523
1730
 
@@ -1535,6 +1742,7 @@ static bool ext_srtp_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1535
1742
  // single uint16_t profile ID, then followed by a u8-prefixed srtp_mki field.
1536
1743
  //
1537
1744
  // See https://tools.ietf.org/html/rfc5764#section-4.1.1
1745
+ assert(SSL_is_dtls(ssl));
1538
1746
  CBS profile_ids, srtp_mki;
1539
1747
  uint16_t profile_id;
1540
1748
  if (!CBS_get_u16_length_prefixed(contents, &profile_ids) ||
@@ -1553,11 +1761,8 @@ static bool ext_srtp_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1553
1761
  return false;
1554
1762
  }
1555
1763
 
1556
- STACK_OF(SRTP_PROTECTION_PROFILE) *profiles = SSL_get_srtp_profiles(ssl);
1557
-
1558
- // Check to see if the server gave us something we support (and presumably
1559
- // offered).
1560
- for (const SRTP_PROTECTION_PROFILE *profile : profiles) {
1764
+ // Check to see if the server gave us something we support and offered.
1765
+ for (const SRTP_PROTECTION_PROFILE *profile : SSL_get_srtp_profiles(ssl)) {
1561
1766
  if (profile->id == profile_id) {
1562
1767
  ssl->s3->srtp_profile = profile;
1563
1768
  return true;
@@ -1572,7 +1777,8 @@ static bool ext_srtp_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1572
1777
  static bool ext_srtp_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1573
1778
  CBS *contents) {
1574
1779
  SSL *const ssl = hs->ssl;
1575
- if (contents == NULL) {
1780
+ // DTLS-SRTP is only defined for DTLS.
1781
+ if (contents == NULL || !SSL_is_dtls(ssl)) {
1576
1782
  return true;
1577
1783
  }
1578
1784
 
@@ -1616,6 +1822,7 @@ static bool ext_srtp_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1616
1822
  return true;
1617
1823
  }
1618
1824
 
1825
+ assert(SSL_is_dtls(ssl));
1619
1826
  CBB contents, profile_ids;
1620
1827
  if (!CBB_add_u16(out, TLSEXT_TYPE_srtp) ||
1621
1828
  !CBB_add_u16_length_prefixed(out, &contents) ||
@@ -1634,7 +1841,7 @@ static bool ext_srtp_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1634
1841
  //
1635
1842
  // https://tools.ietf.org/html/rfc4492#section-5.1.2
1636
1843
 
1637
- static bool ext_ec_point_add_extension(SSL_HANDSHAKE *hs, CBB *out) {
1844
+ static bool ext_ec_point_add_extension(const SSL_HANDSHAKE *hs, CBB *out) {
1638
1845
  CBB contents, formats;
1639
1846
  if (!CBB_add_u16(out, TLSEXT_TYPE_ec_point_formats) ||
1640
1847
  !CBB_add_u16_length_prefixed(out, &contents) ||
@@ -1647,9 +1854,11 @@ static bool ext_ec_point_add_extension(SSL_HANDSHAKE *hs, CBB *out) {
1647
1854
  return true;
1648
1855
  }
1649
1856
 
1650
- static bool ext_ec_point_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1857
+ static bool ext_ec_point_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1858
+ CBB *out_compressible,
1859
+ ssl_client_hello_type_t type) {
1651
1860
  // The point format extension is unnecessary in TLS 1.3.
1652
- if (hs->min_version >= TLS1_3_VERSION) {
1861
+ if (hs->min_version >= TLS1_3_VERSION || type == ssl_client_hello_inner) {
1653
1862
  return true;
1654
1863
  }
1655
1864
 
@@ -1715,10 +1924,37 @@ static bool ext_ec_point_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1715
1924
  //
1716
1925
  // https://tools.ietf.org/html/rfc8446#section-4.2.11
1717
1926
 
1718
- static size_t ext_pre_shared_key_clienthello_length(SSL_HANDSHAKE *hs) {
1719
- SSL *const ssl = hs->ssl;
1927
+ static bool should_offer_psk(const SSL_HANDSHAKE *hs,
1928
+ ssl_client_hello_type_t type) {
1929
+ const SSL *const ssl = hs->ssl;
1720
1930
  if (hs->max_version < TLS1_3_VERSION || ssl->session == nullptr ||
1721
- ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION) {
1931
+ ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION ||
1932
+ // The ClientHelloOuter cannot include the PSK extension.
1933
+ //
1934
+ // TODO(https://crbug.com/boringssl/275): draft-ietf-tls-esni-10 mandates
1935
+ // this, but it risks breaking the ClientHelloOuter flow on 0-RTT reject.
1936
+ // Later drafts will recommend including a placeholder one, at which point
1937
+ // we will need to synthesize a ticket. See
1938
+ // https://github.com/tlswg/draft-ietf-tls-esni/issues/408
1939
+ type == ssl_client_hello_outer) {
1940
+ return false;
1941
+ }
1942
+
1943
+ // Per RFC 8446 section 4.1.4, skip offering the session if the selected
1944
+ // cipher in HelloRetryRequest does not match. This avoids performing the
1945
+ // transcript hash transformation for multiple hashes.
1946
+ if (ssl->s3->used_hello_retry_request &&
1947
+ ssl->session->cipher->algorithm_prf != hs->new_cipher->algorithm_prf) {
1948
+ return false;
1949
+ }
1950
+
1951
+ return true;
1952
+ }
1953
+
1954
+ static size_t ext_pre_shared_key_clienthello_length(
1955
+ const SSL_HANDSHAKE *hs, ssl_client_hello_type_t type) {
1956
+ const SSL *const ssl = hs->ssl;
1957
+ if (!should_offer_psk(hs, type)) {
1722
1958
  return 0;
1723
1959
  }
1724
1960
 
@@ -1726,19 +1962,12 @@ static size_t ext_pre_shared_key_clienthello_length(SSL_HANDSHAKE *hs) {
1726
1962
  return 15 + ssl->session->ticket.size() + binder_len;
1727
1963
  }
1728
1964
 
1729
- static bool ext_pre_shared_key_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1730
- SSL *const ssl = hs->ssl;
1731
- hs->needs_psk_binder = false;
1732
- if (hs->max_version < TLS1_3_VERSION || ssl->session == nullptr ||
1733
- ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION) {
1734
- return true;
1735
- }
1736
-
1737
- // Per RFC 8446 section 4.1.4, skip offering the session if the selected
1738
- // cipher in HelloRetryRequest does not match. This avoids performing the
1739
- // transcript hash transformation for multiple hashes.
1740
- if (ssl->s3 && ssl->s3->used_hello_retry_request &&
1741
- ssl->session->cipher->algorithm_prf != hs->new_cipher->algorithm_prf) {
1965
+ static bool ext_pre_shared_key_add_clienthello(const SSL_HANDSHAKE *hs,
1966
+ CBB *out, bool *out_needs_binder,
1967
+ ssl_client_hello_type_t type) {
1968
+ const SSL *const ssl = hs->ssl;
1969
+ *out_needs_binder = false;
1970
+ if (!should_offer_psk(hs, type)) {
1742
1971
  return true;
1743
1972
  }
1744
1973
 
@@ -1766,7 +1995,7 @@ static bool ext_pre_shared_key_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1766
1995
  return false;
1767
1996
  }
1768
1997
 
1769
- hs->needs_psk_binder = true;
1998
+ *out_needs_binder = true;
1770
1999
  return CBB_flush(out);
1771
2000
  }
1772
2001
 
@@ -1879,21 +2108,22 @@ bool ssl_ext_pre_shared_key_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1879
2108
  //
1880
2109
  // https://tools.ietf.org/html/rfc8446#section-4.2.9
1881
2110
 
1882
- static bool ext_psk_key_exchange_modes_add_clienthello(SSL_HANDSHAKE *hs,
1883
- CBB *out) {
2111
+ static bool ext_psk_key_exchange_modes_add_clienthello(
2112
+ const SSL_HANDSHAKE *hs, CBB *out, CBB *out_compressible,
2113
+ ssl_client_hello_type_t type) {
1884
2114
  if (hs->max_version < TLS1_3_VERSION) {
1885
2115
  return true;
1886
2116
  }
1887
2117
 
1888
2118
  CBB contents, ke_modes;
1889
- if (!CBB_add_u16(out, TLSEXT_TYPE_psk_key_exchange_modes) ||
1890
- !CBB_add_u16_length_prefixed(out, &contents) ||
2119
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_psk_key_exchange_modes) ||
2120
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
1891
2121
  !CBB_add_u8_length_prefixed(&contents, &ke_modes) ||
1892
2122
  !CBB_add_u8(&ke_modes, SSL_PSK_DHE_KE)) {
1893
2123
  return false;
1894
2124
  }
1895
2125
 
1896
- return CBB_flush(out);
2126
+ return CBB_flush(out_compressible);
1897
2127
  }
1898
2128
 
1899
2129
  static bool ext_psk_key_exchange_modes_parse_clienthello(SSL_HANDSHAKE *hs,
@@ -1923,8 +2153,10 @@ static bool ext_psk_key_exchange_modes_parse_clienthello(SSL_HANDSHAKE *hs,
1923
2153
  //
1924
2154
  // https://tools.ietf.org/html/rfc8446#section-4.2.10
1925
2155
 
1926
- static bool ext_early_data_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1927
- SSL *const ssl = hs->ssl;
2156
+ static bool ext_early_data_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2157
+ CBB *out_compressible,
2158
+ ssl_client_hello_type_t type) {
2159
+ const SSL *const ssl = hs->ssl;
1928
2160
  // The second ClientHello never offers early data, and we must have already
1929
2161
  // filled in |early_data_reason| by this point.
1930
2162
  if (ssl->s3->used_hello_retry_request) {
@@ -1932,44 +2164,20 @@ static bool ext_early_data_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
1932
2164
  return true;
1933
2165
  }
1934
2166
 
1935
- if (!ssl->enable_early_data) {
1936
- ssl->s3->early_data_reason = ssl_early_data_disabled;
1937
- return true;
1938
- }
1939
-
1940
- if (hs->max_version < TLS1_3_VERSION) {
1941
- // We discard inapplicable sessions, so this is redundant with the session
1942
- // checks below, but we check give a more useful reason.
1943
- ssl->s3->early_data_reason = ssl_early_data_protocol_version;
1944
- return true;
1945
- }
1946
-
1947
- if (ssl->session == nullptr) {
1948
- ssl->s3->early_data_reason = ssl_early_data_no_session_offered;
1949
- return true;
1950
- }
1951
-
1952
- if (ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION ||
1953
- ssl->session->ticket_max_early_data == 0) {
1954
- ssl->s3->early_data_reason = ssl_early_data_unsupported_for_session;
1955
- return true;
1956
- }
1957
-
1958
- // In case ALPN preferences changed since this session was established, avoid
1959
- // reporting a confusing value in |SSL_get0_alpn_selected| and sending early
1960
- // data we know will be rejected.
1961
- if (!ssl->session->early_alpn.empty() &&
1962
- !ssl_is_alpn_protocol_allowed(hs, ssl->session->early_alpn)) {
1963
- ssl->s3->early_data_reason = ssl_early_data_alpn_mismatch;
2167
+ if (!hs->early_data_offered) {
1964
2168
  return true;
1965
2169
  }
1966
2170
 
1967
- // |early_data_reason| will be filled in later when the server responds.
1968
- hs->early_data_offered = true;
1969
-
1970
- if (!CBB_add_u16(out, TLSEXT_TYPE_early_data) ||
1971
- !CBB_add_u16(out, 0) ||
1972
- !CBB_flush(out)) {
2171
+ // If offering ECH, the extension only applies to ClientHelloInner, but we
2172
+ // send the extension in both ClientHellos. This ensures that, if the server
2173
+ // handshakes with ClientHelloOuter, it can skip past early data. See
2174
+ // https://github.com/tlswg/draft-ietf-tls-esni/pull/415
2175
+ //
2176
+ // TODO(https://crbug.com/boringssl/275): Replace this with a reference to the
2177
+ // right section in the next draft.
2178
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_early_data) ||
2179
+ !CBB_add_u16(out_compressible, 0) ||
2180
+ !CBB_flush(out_compressible)) {
1973
2181
  return false;
1974
2182
  }
1975
2183
 
@@ -2050,43 +2258,33 @@ static bool ext_early_data_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2050
2258
  //
2051
2259
  // https://tools.ietf.org/html/rfc8446#section-4.2.8
2052
2260
 
2053
- static bool ext_key_share_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2261
+ bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id) {
2054
2262
  SSL *const ssl = hs->ssl;
2263
+ hs->key_shares[0].reset();
2264
+ hs->key_shares[1].reset();
2265
+ hs->key_share_bytes.Reset();
2266
+
2055
2267
  if (hs->max_version < TLS1_3_VERSION) {
2056
2268
  return true;
2057
2269
  }
2058
2270
 
2059
- CBB contents, kse_bytes;
2060
- if (!CBB_add_u16(out, TLSEXT_TYPE_key_share) ||
2061
- !CBB_add_u16_length_prefixed(out, &contents) ||
2062
- !CBB_add_u16_length_prefixed(&contents, &kse_bytes)) {
2271
+ bssl::ScopedCBB cbb;
2272
+ if (!CBB_init(cbb.get(), 64)) {
2063
2273
  return false;
2064
2274
  }
2065
2275
 
2066
- uint16_t group_id = hs->retry_group;
2067
- uint16_t second_group_id = 0;
2068
- if (ssl->s3 && ssl->s3->used_hello_retry_request) {
2069
- // We received a HelloRetryRequest without a new curve, so there is no new
2070
- // share to append. Leave |hs->key_share| as-is.
2071
- if (group_id == 0 &&
2072
- !CBB_add_bytes(&kse_bytes, hs->key_share_bytes.data(),
2073
- hs->key_share_bytes.size())) {
2074
- return false;
2075
- }
2076
- hs->key_share_bytes.Reset();
2077
- if (group_id == 0) {
2078
- return CBB_flush(out);
2079
- }
2080
- } else {
2081
- // Add a fake group. See draft-davidben-tls-grease-01.
2082
- if (ssl->ctx->grease_enabled &&
2083
- (!CBB_add_u16(&kse_bytes,
2084
- ssl_get_grease_value(hs, ssl_grease_group)) ||
2085
- !CBB_add_u16(&kse_bytes, 1 /* length */) ||
2086
- !CBB_add_u8(&kse_bytes, 0 /* one byte key share */))) {
2276
+ if (override_group_id == 0 && ssl->ctx->grease_enabled) {
2277
+ // Add a fake group. See RFC 8701.
2278
+ if (!CBB_add_u16(cbb.get(), ssl_get_grease_value(hs, ssl_grease_group)) ||
2279
+ !CBB_add_u16(cbb.get(), 1 /* length */) ||
2280
+ !CBB_add_u8(cbb.get(), 0 /* one byte key share */)) {
2087
2281
  return false;
2088
2282
  }
2283
+ }
2089
2284
 
2285
+ uint16_t group_id = override_group_id;
2286
+ uint16_t second_group_id = 0;
2287
+ if (override_group_id == 0) {
2090
2288
  // Predict the most preferred group.
2091
2289
  Span<const uint16_t> groups = tls1_get_grouplist(hs);
2092
2290
  if (groups.empty()) {
@@ -2106,34 +2304,45 @@ static bool ext_key_share_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2106
2304
 
2107
2305
  CBB key_exchange;
2108
2306
  hs->key_shares[0] = SSLKeyShare::Create(group_id);
2109
- if (!hs->key_shares[0] ||
2110
- !CBB_add_u16(&kse_bytes, group_id) ||
2111
- !CBB_add_u16_length_prefixed(&kse_bytes, &key_exchange) ||
2112
- !hs->key_shares[0]->Offer(&key_exchange) ||
2113
- !CBB_flush(&kse_bytes)) {
2307
+ if (!hs->key_shares[0] || //
2308
+ !CBB_add_u16(cbb.get(), group_id) ||
2309
+ !CBB_add_u16_length_prefixed(cbb.get(), &key_exchange) ||
2310
+ !hs->key_shares[0]->Offer(&key_exchange)) {
2114
2311
  return false;
2115
2312
  }
2116
2313
 
2117
2314
  if (second_group_id != 0) {
2118
2315
  hs->key_shares[1] = SSLKeyShare::Create(second_group_id);
2119
- if (!hs->key_shares[1] ||
2120
- !CBB_add_u16(&kse_bytes, second_group_id) ||
2121
- !CBB_add_u16_length_prefixed(&kse_bytes, &key_exchange) ||
2122
- !hs->key_shares[1]->Offer(&key_exchange) ||
2123
- !CBB_flush(&kse_bytes)) {
2316
+ if (!hs->key_shares[1] || //
2317
+ !CBB_add_u16(cbb.get(), second_group_id) ||
2318
+ !CBB_add_u16_length_prefixed(cbb.get(), &key_exchange) ||
2319
+ !hs->key_shares[1]->Offer(&key_exchange)) {
2124
2320
  return false;
2125
2321
  }
2126
2322
  }
2127
2323
 
2128
- // Save the contents of the extension to repeat it in the second
2129
- // ClientHello.
2130
- if (ssl->s3 && !ssl->s3->used_hello_retry_request &&
2131
- !hs->key_share_bytes.CopyFrom(
2132
- MakeConstSpan(CBB_data(&kse_bytes), CBB_len(&kse_bytes)))) {
2324
+ return CBBFinishArray(cbb.get(), &hs->key_share_bytes);
2325
+ }
2326
+
2327
+ static bool ext_key_share_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2328
+ CBB *out_compressible,
2329
+ ssl_client_hello_type_t type) {
2330
+ if (hs->max_version < TLS1_3_VERSION) {
2331
+ return true;
2332
+ }
2333
+
2334
+ assert(!hs->key_share_bytes.empty());
2335
+ CBB contents, kse_bytes;
2336
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_key_share) ||
2337
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
2338
+ !CBB_add_u16_length_prefixed(&contents, &kse_bytes) ||
2339
+ !CBB_add_bytes(&kse_bytes, hs->key_share_bytes.data(),
2340
+ hs->key_share_bytes.size()) ||
2341
+ !CBB_flush(out_compressible)) {
2133
2342
  return false;
2134
2343
  }
2135
2344
 
2136
- return CBB_flush(out);
2345
+ return true;
2137
2346
  }
2138
2347
 
2139
2348
  bool ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs,
@@ -2171,25 +2380,29 @@ bool ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs,
2171
2380
  }
2172
2381
 
2173
2382
  bool ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, bool *out_found,
2174
- Array<uint8_t> *out_secret,
2175
- uint8_t *out_alert, CBS *contents) {
2176
- uint16_t group_id;
2177
- CBS key_shares;
2178
- if (!tls1_get_shared_group(hs, &group_id)) {
2179
- OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_GROUP);
2180
- *out_alert = SSL_AD_HANDSHAKE_FAILURE;
2383
+ Span<const uint8_t> *out_peer_key,
2384
+ uint8_t *out_alert,
2385
+ const SSL_CLIENT_HELLO *client_hello) {
2386
+ // We only support connections that include an ECDHE key exchange.
2387
+ CBS contents;
2388
+ if (!ssl_client_hello_get_extension(client_hello, &contents,
2389
+ TLSEXT_TYPE_key_share)) {
2390
+ OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
2391
+ *out_alert = SSL_AD_MISSING_EXTENSION;
2181
2392
  return false;
2182
2393
  }
2183
2394
 
2184
- if (!CBS_get_u16_length_prefixed(contents, &key_shares) ||
2185
- CBS_len(contents) != 0) {
2395
+ CBS key_shares;
2396
+ if (!CBS_get_u16_length_prefixed(&contents, &key_shares) ||
2397
+ CBS_len(&contents) != 0) {
2186
2398
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
2187
2399
  return false;
2188
2400
  }
2189
2401
 
2190
2402
  // Find the corresponding key share.
2403
+ const uint16_t group_id = hs->new_session->group_id;
2191
2404
  CBS peer_key;
2192
- CBS_init(&peer_key, NULL, 0);
2405
+ CBS_init(&peer_key, nullptr, 0);
2193
2406
  while (CBS_len(&key_shares) > 0) {
2194
2407
  uint16_t id;
2195
2408
  CBS peer_key_tmp;
@@ -2212,46 +2425,24 @@ bool ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, bool *out_found,
2212
2425
  }
2213
2426
  }
2214
2427
 
2215
- if (CBS_len(&peer_key) == 0) {
2216
- *out_found = false;
2217
- out_secret->Reset();
2218
- return true;
2219
- }
2220
-
2221
- // Compute the DH secret.
2222
- Array<uint8_t> secret;
2223
- ScopedCBB public_key;
2224
- UniquePtr<SSLKeyShare> key_share = SSLKeyShare::Create(group_id);
2225
- if (!key_share ||
2226
- !CBB_init(public_key.get(), 32) ||
2227
- !key_share->Accept(public_key.get(), &secret, out_alert, peer_key) ||
2228
- !CBBFinishArray(public_key.get(), &hs->ecdh_public_key)) {
2229
- *out_alert = SSL_AD_ILLEGAL_PARAMETER;
2230
- return false;
2428
+ if (out_peer_key != nullptr) {
2429
+ *out_peer_key = peer_key;
2231
2430
  }
2232
-
2233
- *out_secret = std::move(secret);
2234
- *out_found = true;
2431
+ *out_found = CBS_len(&peer_key) != 0;
2235
2432
  return true;
2236
2433
  }
2237
2434
 
2238
2435
  bool ssl_ext_key_share_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2239
- uint16_t group_id;
2240
2436
  CBB kse_bytes, public_key;
2241
- if (!tls1_get_shared_group(hs, &group_id) ||
2242
- !CBB_add_u16(out, TLSEXT_TYPE_key_share) ||
2437
+ if (!CBB_add_u16(out, TLSEXT_TYPE_key_share) ||
2243
2438
  !CBB_add_u16_length_prefixed(out, &kse_bytes) ||
2244
- !CBB_add_u16(&kse_bytes, group_id) ||
2439
+ !CBB_add_u16(&kse_bytes, hs->new_session->group_id) ||
2245
2440
  !CBB_add_u16_length_prefixed(&kse_bytes, &public_key) ||
2246
2441
  !CBB_add_bytes(&public_key, hs->ecdh_public_key.data(),
2247
2442
  hs->ecdh_public_key.size()) ||
2248
2443
  !CBB_flush(out)) {
2249
2444
  return false;
2250
2445
  }
2251
-
2252
- hs->ecdh_public_key.Reset();
2253
-
2254
- hs->new_session->group_id = group_id;
2255
2446
  return true;
2256
2447
  }
2257
2448
 
@@ -2260,26 +2451,37 @@ bool ssl_ext_key_share_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2260
2451
  //
2261
2452
  // https://tools.ietf.org/html/rfc8446#section-4.2.1
2262
2453
 
2263
- static bool ext_supported_versions_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2264
- SSL *const ssl = hs->ssl;
2454
+ static bool ext_supported_versions_add_clienthello(
2455
+ const SSL_HANDSHAKE *hs, CBB *out, CBB *out_compressible,
2456
+ ssl_client_hello_type_t type) {
2457
+ const SSL *const ssl = hs->ssl;
2265
2458
  if (hs->max_version <= TLS1_2_VERSION) {
2266
2459
  return true;
2267
2460
  }
2268
2461
 
2269
- CBB contents, versions;
2270
- if (!CBB_add_u16(out, TLSEXT_TYPE_supported_versions) ||
2462
+ // supported_versions is compressible in ECH if ClientHelloOuter already
2463
+ // requires TLS 1.3. Otherwise the extensions differ in the older versions.
2464
+ if (hs->min_version >= TLS1_3_VERSION) {
2465
+ out = out_compressible;
2466
+ }
2467
+
2468
+ CBB contents, versions;
2469
+ if (!CBB_add_u16(out, TLSEXT_TYPE_supported_versions) ||
2271
2470
  !CBB_add_u16_length_prefixed(out, &contents) ||
2272
2471
  !CBB_add_u8_length_prefixed(&contents, &versions)) {
2273
2472
  return false;
2274
2473
  }
2275
2474
 
2276
- // Add a fake version. See draft-davidben-tls-grease-01.
2475
+ // Add a fake version. See RFC 8701.
2277
2476
  if (ssl->ctx->grease_enabled &&
2278
2477
  !CBB_add_u16(&versions, ssl_get_grease_value(hs, ssl_grease_version))) {
2279
2478
  return false;
2280
2479
  }
2281
2480
 
2282
- if (!ssl_add_supported_versions(hs, &versions) ||
2481
+ // Encrypted ClientHellos requires TLS 1.3 or later.
2482
+ uint16_t extra_min_version =
2483
+ type == ssl_client_hello_inner ? TLS1_3_VERSION : 0;
2484
+ if (!ssl_add_supported_versions(hs, &versions, extra_min_version) ||
2283
2485
  !CBB_flush(out)) {
2284
2486
  return false;
2285
2487
  }
@@ -2292,22 +2494,22 @@ static bool ext_supported_versions_add_clienthello(SSL_HANDSHAKE *hs, CBB *out)
2292
2494
  //
2293
2495
  // https://tools.ietf.org/html/rfc8446#section-4.2.2
2294
2496
 
2295
- static bool ext_cookie_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2497
+ static bool ext_cookie_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2498
+ CBB *out_compressible,
2499
+ ssl_client_hello_type_t type) {
2296
2500
  if (hs->cookie.empty()) {
2297
2501
  return true;
2298
2502
  }
2299
2503
 
2300
2504
  CBB contents, cookie;
2301
- if (!CBB_add_u16(out, TLSEXT_TYPE_cookie) ||
2302
- !CBB_add_u16_length_prefixed(out, &contents) ||
2505
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_cookie) ||
2506
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
2303
2507
  !CBB_add_u16_length_prefixed(&contents, &cookie) ||
2304
2508
  !CBB_add_bytes(&cookie, hs->cookie.data(), hs->cookie.size()) ||
2305
- !CBB_flush(out)) {
2509
+ !CBB_flush(out_compressible)) {
2306
2510
  return false;
2307
2511
  }
2308
2512
 
2309
- // The cookie is no longer needed in memory.
2310
- hs->cookie.Reset();
2311
2513
  return true;
2312
2514
  }
2313
2515
 
@@ -2317,16 +2519,19 @@ static bool ext_cookie_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2317
2519
  // https://tools.ietf.org/html/rfc4492#section-5.1.1
2318
2520
  // https://tools.ietf.org/html/rfc8446#section-4.2.7
2319
2521
 
2320
- static bool ext_supported_groups_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2321
- SSL *const ssl = hs->ssl;
2522
+ static bool ext_supported_groups_add_clienthello(const SSL_HANDSHAKE *hs,
2523
+ CBB *out,
2524
+ CBB *out_compressible,
2525
+ ssl_client_hello_type_t type) {
2526
+ const SSL *const ssl = hs->ssl;
2322
2527
  CBB contents, groups_bytes;
2323
- if (!CBB_add_u16(out, TLSEXT_TYPE_supported_groups) ||
2324
- !CBB_add_u16_length_prefixed(out, &contents) ||
2528
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_supported_groups) ||
2529
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
2325
2530
  !CBB_add_u16_length_prefixed(&contents, &groups_bytes)) {
2326
2531
  return false;
2327
2532
  }
2328
2533
 
2329
- // Add a fake group. See draft-davidben-tls-grease-01.
2534
+ // Add a fake group. See RFC 8701.
2330
2535
  if (ssl->ctx->grease_enabled &&
2331
2536
  !CBB_add_u16(&groups_bytes,
2332
2537
  ssl_get_grease_value(hs, ssl_grease_group))) {
@@ -2343,7 +2548,7 @@ static bool ext_supported_groups_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2343
2548
  }
2344
2549
  }
2345
2550
 
2346
- return CBB_flush(out);
2551
+ return CBB_flush(out_compressible);
2347
2552
  }
2348
2553
 
2349
2554
  static bool ext_supported_groups_parse_serverhello(SSL_HANDSHAKE *hs,
@@ -2395,158 +2600,11 @@ static bool ext_supported_groups_parse_clienthello(SSL_HANDSHAKE *hs,
2395
2600
  return true;
2396
2601
  }
2397
2602
 
2398
- // Token Binding
2399
- //
2400
- // https://tools.ietf.org/html/draft-ietf-tokbind-negotiation-10
2401
-
2402
- // The Token Binding version number currently matches the draft number of
2403
- // draft-ietf-tokbind-protocol, and when published as an RFC it will be 0x0100.
2404
- // Since there are no wire changes to the protocol from draft 13 through the
2405
- // current draft (16), this implementation supports all versions in that range.
2406
- static uint16_t kTokenBindingMaxVersion = 16;
2407
- static uint16_t kTokenBindingMinVersion = 13;
2408
-
2409
- static bool ext_token_binding_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2410
- SSL *const ssl = hs->ssl;
2411
- if (hs->config->token_binding_params.empty() || SSL_is_dtls(ssl)) {
2412
- return true;
2413
- }
2414
-
2415
- CBB contents, params;
2416
- if (!CBB_add_u16(out, TLSEXT_TYPE_token_binding) ||
2417
- !CBB_add_u16_length_prefixed(out, &contents) ||
2418
- !CBB_add_u16(&contents, kTokenBindingMaxVersion) ||
2419
- !CBB_add_u8_length_prefixed(&contents, &params) ||
2420
- !CBB_add_bytes(&params, hs->config->token_binding_params.data(),
2421
- hs->config->token_binding_params.size()) ||
2422
- !CBB_flush(out)) {
2423
- return false;
2424
- }
2425
-
2426
- return true;
2427
- }
2428
-
2429
- static bool ext_token_binding_parse_serverhello(SSL_HANDSHAKE *hs,
2430
- uint8_t *out_alert,
2431
- CBS *contents) {
2432
- SSL *const ssl = hs->ssl;
2433
- if (contents == nullptr) {
2434
- return true;
2435
- }
2436
-
2437
- CBS params_list;
2438
- uint16_t version;
2439
- uint8_t param;
2440
- if (!CBS_get_u16(contents, &version) ||
2441
- !CBS_get_u8_length_prefixed(contents, &params_list) ||
2442
- !CBS_get_u8(&params_list, &param) ||
2443
- CBS_len(&params_list) > 0 ||
2444
- CBS_len(contents) > 0) {
2445
- *out_alert = SSL_AD_DECODE_ERROR;
2446
- return false;
2447
- }
2448
-
2449
- // The server-negotiated version must be less than or equal to our version.
2450
- if (version > kTokenBindingMaxVersion) {
2451
- *out_alert = SSL_AD_ILLEGAL_PARAMETER;
2452
- return false;
2453
- }
2454
-
2455
- // If the server-selected version is less than what we support, then Token
2456
- // Binding wasn't negotiated (but the extension was parsed successfully).
2457
- if (version < kTokenBindingMinVersion) {
2458
- return true;
2459
- }
2460
-
2461
- for (uint8_t config_param : hs->config->token_binding_params) {
2462
- if (param == config_param) {
2463
- ssl->s3->negotiated_token_binding_param = param;
2464
- ssl->s3->token_binding_negotiated = true;
2465
- return true;
2466
- }
2467
- }
2468
-
2469
- *out_alert = SSL_AD_ILLEGAL_PARAMETER;
2470
- return false;
2471
- }
2472
-
2473
- // select_tb_param looks for the first token binding param in
2474
- // |hs->ssl->token_binding_params| that is also in |params| and puts it in
2475
- // |hs->ssl->negotiated_token_binding_param|. It returns true if a token binding
2476
- // param is found, and false otherwise.
2477
- static bool select_tb_param(SSL_HANDSHAKE *hs,
2478
- Span<const uint8_t> peer_params) {
2479
- for (uint8_t tb_param : hs->config->token_binding_params) {
2480
- for (uint8_t peer_param : peer_params) {
2481
- if (tb_param == peer_param) {
2482
- hs->ssl->s3->negotiated_token_binding_param = tb_param;
2483
- return true;
2484
- }
2485
- }
2486
- }
2487
- return false;
2488
- }
2489
-
2490
- static bool ext_token_binding_parse_clienthello(SSL_HANDSHAKE *hs,
2491
- uint8_t *out_alert,
2492
- CBS *contents) {
2493
- SSL *const ssl = hs->ssl;
2494
- if (contents == nullptr || hs->config->token_binding_params.empty()) {
2495
- return true;
2496
- }
2497
-
2498
- CBS params;
2499
- uint16_t version;
2500
- if (!CBS_get_u16(contents, &version) ||
2501
- !CBS_get_u8_length_prefixed(contents, &params) ||
2502
- CBS_len(&params) == 0 ||
2503
- CBS_len(contents) > 0) {
2504
- *out_alert = SSL_AD_DECODE_ERROR;
2505
- return false;
2506
- }
2507
-
2508
- // If the client-selected version is less than what we support, then Token
2509
- // Binding wasn't negotiated (but the extension was parsed successfully).
2510
- if (version < kTokenBindingMinVersion) {
2511
- return true;
2512
- }
2513
-
2514
- // If the client-selected version is higher than we support, use our max
2515
- // version. Otherwise, use the client's version.
2516
- hs->negotiated_token_binding_version =
2517
- std::min(version, kTokenBindingMaxVersion);
2518
- if (!select_tb_param(hs, params)) {
2519
- return true;
2520
- }
2521
-
2522
- ssl->s3->token_binding_negotiated = true;
2523
- return true;
2524
- }
2525
-
2526
- static bool ext_token_binding_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2527
- SSL *const ssl = hs->ssl;
2528
-
2529
- if (!ssl->s3->token_binding_negotiated) {
2530
- return true;
2531
- }
2532
-
2533
- CBB contents, params;
2534
- if (!CBB_add_u16(out, TLSEXT_TYPE_token_binding) ||
2535
- !CBB_add_u16_length_prefixed(out, &contents) ||
2536
- !CBB_add_u16(&contents, hs->negotiated_token_binding_version) ||
2537
- !CBB_add_u8_length_prefixed(&contents, &params) ||
2538
- !CBB_add_u8(&params, ssl->s3->negotiated_token_binding_param) ||
2539
- !CBB_flush(out)) {
2540
- return false;
2541
- }
2542
-
2543
- return true;
2544
- }
2545
2603
 
2546
2604
  // QUIC Transport Parameters
2547
2605
 
2548
- static bool ext_quic_transport_params_add_clienthello(SSL_HANDSHAKE *hs,
2549
- CBB *out) {
2606
+ static bool ext_quic_transport_params_add_clienthello_impl(
2607
+ const SSL_HANDSHAKE *hs, CBB *out, bool use_legacy_codepoint) {
2550
2608
  if (hs->config->quic_transport_params.empty() && !hs->ssl->quic_method) {
2551
2609
  return true;
2552
2610
  }
@@ -2558,9 +2616,18 @@ static bool ext_quic_transport_params_add_clienthello(SSL_HANDSHAKE *hs,
2558
2616
  return false;
2559
2617
  }
2560
2618
  assert(hs->min_version > TLS1_2_VERSION);
2619
+ if (use_legacy_codepoint != hs->config->quic_use_legacy_codepoint) {
2620
+ // Do nothing, we'll send the other codepoint.
2621
+ return true;
2622
+ }
2623
+
2624
+ uint16_t extension_type = TLSEXT_TYPE_quic_transport_parameters;
2625
+ if (hs->config->quic_use_legacy_codepoint) {
2626
+ extension_type = TLSEXT_TYPE_quic_transport_parameters_legacy;
2627
+ }
2561
2628
 
2562
2629
  CBB contents;
2563
- if (!CBB_add_u16(out, TLSEXT_TYPE_quic_transport_parameters) ||
2630
+ if (!CBB_add_u16(out, extension_type) ||
2564
2631
  !CBB_add_u16_length_prefixed(out, &contents) ||
2565
2632
  !CBB_add_bytes(&contents, hs->config->quic_transport_params.data(),
2566
2633
  hs->config->quic_transport_params.size()) ||
@@ -2570,31 +2637,59 @@ static bool ext_quic_transport_params_add_clienthello(SSL_HANDSHAKE *hs,
2570
2637
  return true;
2571
2638
  }
2572
2639
 
2573
- static bool ext_quic_transport_params_parse_serverhello(SSL_HANDSHAKE *hs,
2574
- uint8_t *out_alert,
2575
- CBS *contents) {
2640
+ static bool ext_quic_transport_params_add_clienthello(
2641
+ const SSL_HANDSHAKE *hs, CBB *out, CBB *out_compressible,
2642
+ ssl_client_hello_type_t type) {
2643
+ return ext_quic_transport_params_add_clienthello_impl(
2644
+ hs, out_compressible, /*use_legacy_codepoint=*/false);
2645
+ }
2646
+
2647
+ static bool ext_quic_transport_params_add_clienthello_legacy(
2648
+ const SSL_HANDSHAKE *hs, CBB *out, CBB *out_compressible,
2649
+ ssl_client_hello_type_t type) {
2650
+ return ext_quic_transport_params_add_clienthello_impl(
2651
+ hs, out_compressible, /*use_legacy_codepoint=*/true);
2652
+ }
2653
+
2654
+ static bool ext_quic_transport_params_parse_serverhello_impl(
2655
+ SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents,
2656
+ bool used_legacy_codepoint) {
2576
2657
  SSL *const ssl = hs->ssl;
2577
2658
  if (contents == nullptr) {
2659
+ if (used_legacy_codepoint != hs->config->quic_use_legacy_codepoint) {
2660
+ // Silently ignore because we expect the other QUIC codepoint.
2661
+ return true;
2662
+ }
2578
2663
  if (!ssl->quic_method) {
2579
2664
  return true;
2580
2665
  }
2581
- assert(ssl->quic_method);
2582
2666
  *out_alert = SSL_AD_MISSING_EXTENSION;
2583
2667
  return false;
2584
2668
  }
2585
- if (!ssl->quic_method) {
2586
- *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
2587
- return false;
2588
- }
2589
- // QUIC requires TLS 1.3.
2669
+ // The extensions parser will check for unsolicited extensions before
2670
+ // calling the callback.
2671
+ assert(ssl->quic_method != nullptr);
2590
2672
  assert(ssl_protocol_version(ssl) == TLS1_3_VERSION);
2591
-
2673
+ assert(used_legacy_codepoint == hs->config->quic_use_legacy_codepoint);
2592
2674
  return ssl->s3->peer_quic_transport_params.CopyFrom(*contents);
2593
2675
  }
2594
2676
 
2595
- static bool ext_quic_transport_params_parse_clienthello(SSL_HANDSHAKE *hs,
2677
+ static bool ext_quic_transport_params_parse_serverhello(SSL_HANDSHAKE *hs,
2596
2678
  uint8_t *out_alert,
2597
2679
  CBS *contents) {
2680
+ return ext_quic_transport_params_parse_serverhello_impl(
2681
+ hs, out_alert, contents, /*used_legacy_codepoint=*/false);
2682
+ }
2683
+
2684
+ static bool ext_quic_transport_params_parse_serverhello_legacy(
2685
+ SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents) {
2686
+ return ext_quic_transport_params_parse_serverhello_impl(
2687
+ hs, out_alert, contents, /*used_legacy_codepoint=*/true);
2688
+ }
2689
+
2690
+ static bool ext_quic_transport_params_parse_clienthello_impl(
2691
+ SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents,
2692
+ bool used_legacy_codepoint) {
2598
2693
  SSL *const ssl = hs->ssl;
2599
2694
  if (!contents) {
2600
2695
  if (!ssl->quic_method) {
@@ -2605,29 +2700,72 @@ static bool ext_quic_transport_params_parse_clienthello(SSL_HANDSHAKE *hs,
2605
2700
  // for QUIC.
2606
2701
  OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED);
2607
2702
  *out_alert = SSL_AD_INTERNAL_ERROR;
2703
+ return false;
2704
+ }
2705
+ if (used_legacy_codepoint != hs->config->quic_use_legacy_codepoint) {
2706
+ // Silently ignore because we expect the other QUIC codepoint.
2707
+ return true;
2608
2708
  }
2609
2709
  *out_alert = SSL_AD_MISSING_EXTENSION;
2610
2710
  return false;
2611
2711
  }
2612
2712
  if (!ssl->quic_method) {
2713
+ if (used_legacy_codepoint) {
2714
+ // Ignore the legacy private-use codepoint because that could be sent
2715
+ // to mean something else than QUIC transport parameters.
2716
+ return true;
2717
+ }
2718
+ // Fail if we received the codepoint registered with IANA for QUIC
2719
+ // because that is not allowed outside of QUIC.
2613
2720
  *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
2614
2721
  return false;
2615
2722
  }
2616
2723
  assert(ssl_protocol_version(ssl) == TLS1_3_VERSION);
2724
+ if (used_legacy_codepoint != hs->config->quic_use_legacy_codepoint) {
2725
+ // Silently ignore because we expect the other QUIC codepoint.
2726
+ return true;
2727
+ }
2617
2728
  return ssl->s3->peer_quic_transport_params.CopyFrom(*contents);
2618
2729
  }
2619
2730
 
2620
- static bool ext_quic_transport_params_add_serverhello(SSL_HANDSHAKE *hs,
2621
- CBB *out) {
2731
+ static bool ext_quic_transport_params_parse_clienthello(SSL_HANDSHAKE *hs,
2732
+ uint8_t *out_alert,
2733
+ CBS *contents) {
2734
+ return ext_quic_transport_params_parse_clienthello_impl(
2735
+ hs, out_alert, contents, /*used_legacy_codepoint=*/false);
2736
+ }
2737
+
2738
+ static bool ext_quic_transport_params_parse_clienthello_legacy(
2739
+ SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents) {
2740
+ return ext_quic_transport_params_parse_clienthello_impl(
2741
+ hs, out_alert, contents, /*used_legacy_codepoint=*/true);
2742
+ }
2743
+
2744
+ static bool ext_quic_transport_params_add_serverhello_impl(
2745
+ SSL_HANDSHAKE *hs, CBB *out, bool use_legacy_codepoint) {
2746
+ if (hs->ssl->quic_method == nullptr && use_legacy_codepoint) {
2747
+ // Ignore the legacy private-use codepoint because that could be sent
2748
+ // to mean something else than QUIC transport parameters.
2749
+ return true;
2750
+ }
2622
2751
  assert(hs->ssl->quic_method != nullptr);
2623
2752
  if (hs->config->quic_transport_params.empty()) {
2624
2753
  // Transport parameters must be set when using QUIC.
2625
2754
  OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED);
2626
2755
  return false;
2627
2756
  }
2757
+ if (use_legacy_codepoint != hs->config->quic_use_legacy_codepoint) {
2758
+ // Do nothing, we'll send the other codepoint.
2759
+ return true;
2760
+ }
2761
+
2762
+ uint16_t extension_type = TLSEXT_TYPE_quic_transport_parameters;
2763
+ if (hs->config->quic_use_legacy_codepoint) {
2764
+ extension_type = TLSEXT_TYPE_quic_transport_parameters_legacy;
2765
+ }
2628
2766
 
2629
2767
  CBB contents;
2630
- if (!CBB_add_u16(out, TLSEXT_TYPE_quic_transport_parameters) ||
2768
+ if (!CBB_add_u16(out, extension_type) ||
2631
2769
  !CBB_add_u16_length_prefixed(out, &contents) ||
2632
2770
  !CBB_add_bytes(&contents, hs->config->quic_transport_params.data(),
2633
2771
  hs->config->quic_transport_params.size()) ||
@@ -2638,39 +2776,56 @@ static bool ext_quic_transport_params_add_serverhello(SSL_HANDSHAKE *hs,
2638
2776
  return true;
2639
2777
  }
2640
2778
 
2779
+ static bool ext_quic_transport_params_add_serverhello(SSL_HANDSHAKE *hs,
2780
+ CBB *out) {
2781
+ return ext_quic_transport_params_add_serverhello_impl(
2782
+ hs, out, /*use_legacy_codepoint=*/false);
2783
+ }
2784
+
2785
+ static bool ext_quic_transport_params_add_serverhello_legacy(SSL_HANDSHAKE *hs,
2786
+ CBB *out) {
2787
+ return ext_quic_transport_params_add_serverhello_impl(
2788
+ hs, out, /*use_legacy_codepoint=*/true);
2789
+ }
2790
+
2641
2791
  // Delegated credentials.
2642
2792
  //
2643
2793
  // https://tools.ietf.org/html/draft-ietf-tls-subcerts
2644
2794
 
2645
- static bool ext_delegated_credential_add_clienthello(SSL_HANDSHAKE *hs,
2646
- CBB *out) {
2795
+ static bool ext_delegated_credential_add_clienthello(
2796
+ const SSL_HANDSHAKE *hs, CBB *out, CBB *out_compressible,
2797
+ ssl_client_hello_type_t type) {
2647
2798
  return true;
2648
2799
  }
2649
2800
 
2650
2801
  static bool ext_delegated_credential_parse_clienthello(SSL_HANDSHAKE *hs,
2651
2802
  uint8_t *out_alert,
2652
2803
  CBS *contents) {
2653
- assert(TLSEXT_TYPE_delegated_credential == 0xff02);
2654
- // TODO: Check that the extension is empty.
2655
- //
2656
- // As of draft-03, the client sends an empty extension in order indicate
2657
- // support for delegated credentials. This could change, however, since the
2658
- // spec is not yet finalized. This assertion is here to remind us to enforce
2659
- // this check once the extension ID is assigned.
2660
-
2661
2804
  if (contents == nullptr || ssl_protocol_version(hs->ssl) < TLS1_3_VERSION) {
2662
2805
  // Don't use delegated credentials unless we're negotiating TLS 1.3 or
2663
2806
  // higher.
2664
2807
  return true;
2665
2808
  }
2666
2809
 
2810
+ // The contents of the extension are the signature algorithms the client will
2811
+ // accept for a delegated credential.
2812
+ CBS sigalg_list;
2813
+ if (!CBS_get_u16_length_prefixed(contents, &sigalg_list) ||
2814
+ CBS_len(&sigalg_list) == 0 ||
2815
+ CBS_len(contents) != 0 ||
2816
+ !parse_u16_array(&sigalg_list, &hs->peer_delegated_credential_sigalgs)) {
2817
+ return false;
2818
+ }
2819
+
2667
2820
  hs->delegated_credential_requested = true;
2668
2821
  return true;
2669
2822
  }
2670
2823
 
2671
2824
  // Certificate compression
2672
2825
 
2673
- static bool cert_compression_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2826
+ static bool cert_compression_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2827
+ CBB *out_compressible,
2828
+ ssl_client_hello_type_t type) {
2674
2829
  bool first = true;
2675
2830
  CBB contents, algs;
2676
2831
 
@@ -2679,9 +2834,10 @@ static bool cert_compression_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2679
2834
  continue;
2680
2835
  }
2681
2836
 
2682
- if (first && (!CBB_add_u16(out, TLSEXT_TYPE_cert_compression) ||
2683
- !CBB_add_u16_length_prefixed(out, &contents) ||
2684
- !CBB_add_u8_length_prefixed(&contents, &algs))) {
2837
+ if (first &&
2838
+ (!CBB_add_u16(out_compressible, TLSEXT_TYPE_cert_compression) ||
2839
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
2840
+ !CBB_add_u8_length_prefixed(&contents, &algs))) {
2685
2841
  return false;
2686
2842
  }
2687
2843
  first = false;
@@ -2690,7 +2846,7 @@ static bool cert_compression_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
2690
2846
  }
2691
2847
  }
2692
2848
 
2693
- return first || CBB_flush(out);
2849
+ return first || CBB_flush(out_compressible);
2694
2850
  }
2695
2851
 
2696
2852
  static bool cert_compression_parse_serverhello(SSL_HANDSHAKE *hs,
@@ -2772,20 +2928,184 @@ static bool cert_compression_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2772
2928
  return true;
2773
2929
  }
2774
2930
 
2931
+ // Application-level Protocol Settings
2932
+ //
2933
+ // https://tools.ietf.org/html/draft-vvv-tls-alps-01
2934
+
2935
+ bool ssl_get_local_application_settings(const SSL_HANDSHAKE *hs,
2936
+ Span<const uint8_t> *out_settings,
2937
+ Span<const uint8_t> protocol) {
2938
+ for (const ALPSConfig &config : hs->config->alps_configs) {
2939
+ if (protocol == config.protocol) {
2940
+ *out_settings = config.settings;
2941
+ return true;
2942
+ }
2943
+ }
2944
+ return false;
2945
+ }
2946
+
2947
+ static bool ext_alps_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2948
+ CBB *out_compressible,
2949
+ ssl_client_hello_type_t type) {
2950
+ const SSL *const ssl = hs->ssl;
2951
+ if (// ALPS requires TLS 1.3.
2952
+ hs->max_version < TLS1_3_VERSION ||
2953
+ // Do not offer ALPS without ALPN.
2954
+ hs->config->alpn_client_proto_list.empty() ||
2955
+ // Do not offer ALPS if not configured.
2956
+ hs->config->alps_configs.empty() ||
2957
+ // Do not offer ALPS on renegotiation handshakes.
2958
+ ssl->s3->initial_handshake_complete) {
2959
+ return true;
2960
+ }
2961
+
2962
+ CBB contents, proto_list, proto;
2963
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_application_settings) ||
2964
+ !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
2965
+ !CBB_add_u16_length_prefixed(&contents, &proto_list)) {
2966
+ return false;
2967
+ }
2968
+
2969
+ for (const ALPSConfig &config : hs->config->alps_configs) {
2970
+ if (!CBB_add_u8_length_prefixed(&proto_list, &proto) ||
2971
+ !CBB_add_bytes(&proto, config.protocol.data(),
2972
+ config.protocol.size())) {
2973
+ return false;
2974
+ }
2975
+ }
2976
+
2977
+ return CBB_flush(out_compressible);
2978
+ }
2979
+
2980
+ static bool ext_alps_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
2981
+ CBS *contents) {
2982
+ SSL *const ssl = hs->ssl;
2983
+ if (contents == nullptr) {
2984
+ return true;
2985
+ }
2986
+
2987
+ assert(!ssl->s3->initial_handshake_complete);
2988
+ assert(!hs->config->alpn_client_proto_list.empty());
2989
+ assert(!hs->config->alps_configs.empty());
2990
+
2991
+ // ALPS requires TLS 1.3.
2992
+ if (ssl_protocol_version(ssl) < TLS1_3_VERSION) {
2993
+ *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
2994
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
2995
+ return false;
2996
+ }
2997
+
2998
+ // Note extension callbacks may run in any order, so we defer checking
2999
+ // consistency with ALPN to |ssl_check_serverhello_tlsext|.
3000
+ if (!hs->new_session->peer_application_settings.CopyFrom(*contents)) {
3001
+ *out_alert = SSL_AD_INTERNAL_ERROR;
3002
+ return false;
3003
+ }
3004
+
3005
+ hs->new_session->has_application_settings = true;
3006
+ return true;
3007
+ }
3008
+
3009
+ static bool ext_alps_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
3010
+ SSL *const ssl = hs->ssl;
3011
+ // If early data is accepted, we omit the ALPS extension. It is implicitly
3012
+ // carried over from the previous connection.
3013
+ if (hs->new_session == nullptr ||
3014
+ !hs->new_session->has_application_settings ||
3015
+ ssl->s3->early_data_accepted) {
3016
+ return true;
3017
+ }
3018
+
3019
+ CBB contents;
3020
+ if (!CBB_add_u16(out, TLSEXT_TYPE_application_settings) ||
3021
+ !CBB_add_u16_length_prefixed(out, &contents) ||
3022
+ !CBB_add_bytes(&contents,
3023
+ hs->new_session->local_application_settings.data(),
3024
+ hs->new_session->local_application_settings.size()) ||
3025
+ !CBB_flush(out)) {
3026
+ return false;
3027
+ }
3028
+
3029
+ return true;
3030
+ }
3031
+
3032
+ bool ssl_negotiate_alps(SSL_HANDSHAKE *hs, uint8_t *out_alert,
3033
+ const SSL_CLIENT_HELLO *client_hello) {
3034
+ SSL *const ssl = hs->ssl;
3035
+ if (ssl->s3->alpn_selected.empty()) {
3036
+ return true;
3037
+ }
3038
+
3039
+ // If we negotiate ALPN over TLS 1.3, try to negotiate ALPS.
3040
+ CBS alps_contents;
3041
+ Span<const uint8_t> settings;
3042
+ if (ssl_protocol_version(ssl) >= TLS1_3_VERSION &&
3043
+ ssl_get_local_application_settings(hs, &settings,
3044
+ ssl->s3->alpn_selected) &&
3045
+ ssl_client_hello_get_extension(client_hello, &alps_contents,
3046
+ TLSEXT_TYPE_application_settings)) {
3047
+ // Check if the client supports ALPS with the selected ALPN.
3048
+ bool found = false;
3049
+ CBS alps_list;
3050
+ if (!CBS_get_u16_length_prefixed(&alps_contents, &alps_list) ||
3051
+ CBS_len(&alps_contents) != 0 ||
3052
+ CBS_len(&alps_list) == 0) {
3053
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
3054
+ *out_alert = SSL_AD_DECODE_ERROR;
3055
+ return false;
3056
+ }
3057
+ while (CBS_len(&alps_list) > 0) {
3058
+ CBS protocol_name;
3059
+ if (!CBS_get_u8_length_prefixed(&alps_list, &protocol_name) ||
3060
+ // Empty protocol names are forbidden.
3061
+ CBS_len(&protocol_name) == 0) {
3062
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
3063
+ *out_alert = SSL_AD_DECODE_ERROR;
3064
+ return false;
3065
+ }
3066
+ if (protocol_name == MakeConstSpan(ssl->s3->alpn_selected)) {
3067
+ found = true;
3068
+ }
3069
+ }
3070
+
3071
+ // Negotiate ALPS if both client also supports ALPS for this protocol.
3072
+ if (found) {
3073
+ hs->new_session->has_application_settings = true;
3074
+ if (!hs->new_session->local_application_settings.CopyFrom(settings)) {
3075
+ *out_alert = SSL_AD_INTERNAL_ERROR;
3076
+ return false;
3077
+ }
3078
+ }
3079
+ }
3080
+
3081
+ return true;
3082
+ }
2775
3083
 
2776
3084
  // kExtensions contains all the supported extensions.
2777
3085
  static const struct tls_extension kExtensions[] = {
2778
3086
  {
2779
3087
  TLSEXT_TYPE_server_name,
2780
- NULL,
2781
3088
  ext_sni_add_clienthello,
2782
3089
  ext_sni_parse_serverhello,
2783
3090
  ext_sni_parse_clienthello,
2784
3091
  ext_sni_add_serverhello,
2785
3092
  },
3093
+ {
3094
+ TLSEXT_TYPE_encrypted_client_hello,
3095
+ ext_ech_add_clienthello,
3096
+ ext_ech_parse_serverhello,
3097
+ ext_ech_parse_clienthello,
3098
+ ext_ech_add_serverhello,
3099
+ },
3100
+ {
3101
+ TLSEXT_TYPE_ech_is_inner,
3102
+ ext_ech_is_inner_add_clienthello,
3103
+ forbid_parse_serverhello,
3104
+ ext_ech_is_inner_parse_clienthello,
3105
+ dont_add_serverhello,
3106
+ },
2786
3107
  {
2787
3108
  TLSEXT_TYPE_extended_master_secret,
2788
- NULL,
2789
3109
  ext_ems_add_clienthello,
2790
3110
  ext_ems_parse_serverhello,
2791
3111
  ext_ems_parse_clienthello,
@@ -2793,7 +3113,6 @@ static const struct tls_extension kExtensions[] = {
2793
3113
  },
2794
3114
  {
2795
3115
  TLSEXT_TYPE_renegotiate,
2796
- NULL,
2797
3116
  ext_ri_add_clienthello,
2798
3117
  ext_ri_parse_serverhello,
2799
3118
  ext_ri_parse_clienthello,
@@ -2801,7 +3120,6 @@ static const struct tls_extension kExtensions[] = {
2801
3120
  },
2802
3121
  {
2803
3122
  TLSEXT_TYPE_supported_groups,
2804
- NULL,
2805
3123
  ext_supported_groups_add_clienthello,
2806
3124
  ext_supported_groups_parse_serverhello,
2807
3125
  ext_supported_groups_parse_clienthello,
@@ -2809,7 +3127,6 @@ static const struct tls_extension kExtensions[] = {
2809
3127
  },
2810
3128
  {
2811
3129
  TLSEXT_TYPE_ec_point_formats,
2812
- NULL,
2813
3130
  ext_ec_point_add_clienthello,
2814
3131
  ext_ec_point_parse_serverhello,
2815
3132
  ext_ec_point_parse_clienthello,
@@ -2817,7 +3134,6 @@ static const struct tls_extension kExtensions[] = {
2817
3134
  },
2818
3135
  {
2819
3136
  TLSEXT_TYPE_session_ticket,
2820
- NULL,
2821
3137
  ext_ticket_add_clienthello,
2822
3138
  ext_ticket_parse_serverhello,
2823
3139
  // Ticket extension client parsing is handled in ssl_session.c
@@ -2826,7 +3142,6 @@ static const struct tls_extension kExtensions[] = {
2826
3142
  },
2827
3143
  {
2828
3144
  TLSEXT_TYPE_application_layer_protocol_negotiation,
2829
- NULL,
2830
3145
  ext_alpn_add_clienthello,
2831
3146
  ext_alpn_parse_serverhello,
2832
3147
  // ALPN is negotiated late in |ssl_negotiate_alpn|.
@@ -2835,7 +3150,6 @@ static const struct tls_extension kExtensions[] = {
2835
3150
  },
2836
3151
  {
2837
3152
  TLSEXT_TYPE_status_request,
2838
- NULL,
2839
3153
  ext_ocsp_add_clienthello,
2840
3154
  ext_ocsp_parse_serverhello,
2841
3155
  ext_ocsp_parse_clienthello,
@@ -2843,7 +3157,6 @@ static const struct tls_extension kExtensions[] = {
2843
3157
  },
2844
3158
  {
2845
3159
  TLSEXT_TYPE_signature_algorithms,
2846
- NULL,
2847
3160
  ext_sigalgs_add_clienthello,
2848
3161
  forbid_parse_serverhello,
2849
3162
  ext_sigalgs_parse_clienthello,
@@ -2851,7 +3164,6 @@ static const struct tls_extension kExtensions[] = {
2851
3164
  },
2852
3165
  {
2853
3166
  TLSEXT_TYPE_next_proto_neg,
2854
- NULL,
2855
3167
  ext_npn_add_clienthello,
2856
3168
  ext_npn_parse_serverhello,
2857
3169
  ext_npn_parse_clienthello,
@@ -2859,7 +3171,6 @@ static const struct tls_extension kExtensions[] = {
2859
3171
  },
2860
3172
  {
2861
3173
  TLSEXT_TYPE_certificate_timestamp,
2862
- NULL,
2863
3174
  ext_sct_add_clienthello,
2864
3175
  ext_sct_parse_serverhello,
2865
3176
  ext_sct_parse_clienthello,
@@ -2867,7 +3178,6 @@ static const struct tls_extension kExtensions[] = {
2867
3178
  },
2868
3179
  {
2869
3180
  TLSEXT_TYPE_channel_id,
2870
- ext_channel_id_init,
2871
3181
  ext_channel_id_add_clienthello,
2872
3182
  ext_channel_id_parse_serverhello,
2873
3183
  ext_channel_id_parse_clienthello,
@@ -2875,7 +3185,6 @@ static const struct tls_extension kExtensions[] = {
2875
3185
  },
2876
3186
  {
2877
3187
  TLSEXT_TYPE_srtp,
2878
- ext_srtp_init,
2879
3188
  ext_srtp_add_clienthello,
2880
3189
  ext_srtp_parse_serverhello,
2881
3190
  ext_srtp_parse_clienthello,
@@ -2883,7 +3192,6 @@ static const struct tls_extension kExtensions[] = {
2883
3192
  },
2884
3193
  {
2885
3194
  TLSEXT_TYPE_key_share,
2886
- NULL,
2887
3195
  ext_key_share_add_clienthello,
2888
3196
  forbid_parse_serverhello,
2889
3197
  ignore_parse_clienthello,
@@ -2891,7 +3199,6 @@ static const struct tls_extension kExtensions[] = {
2891
3199
  },
2892
3200
  {
2893
3201
  TLSEXT_TYPE_psk_key_exchange_modes,
2894
- NULL,
2895
3202
  ext_psk_key_exchange_modes_add_clienthello,
2896
3203
  forbid_parse_serverhello,
2897
3204
  ext_psk_key_exchange_modes_parse_clienthello,
@@ -2899,7 +3206,6 @@ static const struct tls_extension kExtensions[] = {
2899
3206
  },
2900
3207
  {
2901
3208
  TLSEXT_TYPE_early_data,
2902
- NULL,
2903
3209
  ext_early_data_add_clienthello,
2904
3210
  ext_early_data_parse_serverhello,
2905
3211
  ext_early_data_parse_clienthello,
@@ -2907,7 +3213,6 @@ static const struct tls_extension kExtensions[] = {
2907
3213
  },
2908
3214
  {
2909
3215
  TLSEXT_TYPE_supported_versions,
2910
- NULL,
2911
3216
  ext_supported_versions_add_clienthello,
2912
3217
  forbid_parse_serverhello,
2913
3218
  ignore_parse_clienthello,
@@ -2915,7 +3220,6 @@ static const struct tls_extension kExtensions[] = {
2915
3220
  },
2916
3221
  {
2917
3222
  TLSEXT_TYPE_cookie,
2918
- NULL,
2919
3223
  ext_cookie_add_clienthello,
2920
3224
  forbid_parse_serverhello,
2921
3225
  ignore_parse_clienthello,
@@ -2923,23 +3227,20 @@ static const struct tls_extension kExtensions[] = {
2923
3227
  },
2924
3228
  {
2925
3229
  TLSEXT_TYPE_quic_transport_parameters,
2926
- NULL,
2927
3230
  ext_quic_transport_params_add_clienthello,
2928
3231
  ext_quic_transport_params_parse_serverhello,
2929
3232
  ext_quic_transport_params_parse_clienthello,
2930
3233
  ext_quic_transport_params_add_serverhello,
2931
3234
  },
2932
3235
  {
2933
- TLSEXT_TYPE_token_binding,
2934
- NULL,
2935
- ext_token_binding_add_clienthello,
2936
- ext_token_binding_parse_serverhello,
2937
- ext_token_binding_parse_clienthello,
2938
- ext_token_binding_add_serverhello,
3236
+ TLSEXT_TYPE_quic_transport_parameters_legacy,
3237
+ ext_quic_transport_params_add_clienthello_legacy,
3238
+ ext_quic_transport_params_parse_serverhello_legacy,
3239
+ ext_quic_transport_params_parse_clienthello_legacy,
3240
+ ext_quic_transport_params_add_serverhello_legacy,
2939
3241
  },
2940
3242
  {
2941
3243
  TLSEXT_TYPE_cert_compression,
2942
- NULL,
2943
3244
  cert_compression_add_clienthello,
2944
3245
  cert_compression_parse_serverhello,
2945
3246
  cert_compression_parse_clienthello,
@@ -2947,12 +3248,19 @@ static const struct tls_extension kExtensions[] = {
2947
3248
  },
2948
3249
  {
2949
3250
  TLSEXT_TYPE_delegated_credential,
2950
- NULL,
2951
3251
  ext_delegated_credential_add_clienthello,
2952
3252
  forbid_parse_serverhello,
2953
3253
  ext_delegated_credential_parse_clienthello,
2954
3254
  dont_add_serverhello,
2955
3255
  },
3256
+ {
3257
+ TLSEXT_TYPE_application_settings,
3258
+ ext_alps_add_clienthello,
3259
+ ext_alps_parse_serverhello,
3260
+ // ALPS is negotiated late in |ssl_negotiate_alpn|.
3261
+ ignore_parse_clienthello,
3262
+ ext_alps_add_serverhello,
3263
+ },
2956
3264
  };
2957
3265
 
2958
3266
  #define kNumExtensions (sizeof(kExtensions) / sizeof(struct tls_extension))
@@ -2964,6 +3272,30 @@ static_assert(kNumExtensions <=
2964
3272
  sizeof(((SSL_HANDSHAKE *)NULL)->extensions.received) * 8,
2965
3273
  "too many extensions for received bitset");
2966
3274
 
3275
+ bool ssl_setup_extension_permutation(SSL_HANDSHAKE *hs) {
3276
+ if (!hs->config->permute_extensions) {
3277
+ return true;
3278
+ }
3279
+
3280
+ static_assert(kNumExtensions <= UINT8_MAX,
3281
+ "extensions_permutation type is too small");
3282
+ uint32_t seeds[kNumExtensions - 1];
3283
+ Array<uint8_t> permutation;
3284
+ if (!RAND_bytes(reinterpret_cast<uint8_t *>(seeds), sizeof(seeds)) ||
3285
+ !permutation.Init(kNumExtensions)) {
3286
+ return false;
3287
+ }
3288
+ for (size_t i = 0; i < kNumExtensions; i++) {
3289
+ permutation[i] = i;
3290
+ }
3291
+ for (size_t i = kNumExtensions - 1; i > 0; i--) {
3292
+ // Set element |i| to a randomly-selected element 0 <= j <= i.
3293
+ std::swap(permutation[i], permutation[seeds[i - 1] % (i + 1)]);
3294
+ }
3295
+ hs->extension_permutation = std::move(permutation);
3296
+ return true;
3297
+ }
3298
+
2967
3299
  static const struct tls_extension *tls_extension_find(uint32_t *out_index,
2968
3300
  uint16_t value) {
2969
3301
  unsigned i;
@@ -2977,47 +3309,205 @@ static const struct tls_extension *tls_extension_find(uint32_t *out_index,
2977
3309
  return NULL;
2978
3310
  }
2979
3311
 
2980
- bool ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out,
2981
- size_t header_len) {
2982
- SSL *const ssl = hs->ssl;
2983
- CBB extensions;
2984
- if (!CBB_add_u16_length_prefixed(out, &extensions)) {
3312
+ static bool add_padding_extension(CBB *cbb, uint16_t ext, size_t len) {
3313
+ CBB child;
3314
+ uint8_t *ptr;
3315
+ if (!CBB_add_u16(cbb, ext) || //
3316
+ !CBB_add_u16_length_prefixed(cbb, &child) ||
3317
+ !CBB_add_space(&child, &ptr, len)) {
2985
3318
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
2986
3319
  return false;
2987
3320
  }
3321
+ OPENSSL_memset(ptr, 0, len);
3322
+ return CBB_flush(cbb);
3323
+ }
2988
3324
 
2989
- // Note we may send multiple ClientHellos for DTLS HelloVerifyRequest and TLS
2990
- // 1.3 HelloRetryRequest. For the latter, the extensions may change, so it is
2991
- // important to reset this value.
2992
- hs->extensions.sent = 0;
2993
-
2994
- for (size_t i = 0; i < kNumExtensions; i++) {
2995
- if (kExtensions[i].init != NULL) {
2996
- kExtensions[i].init(hs);
2997
- }
3325
+ static bool ssl_add_clienthello_tlsext_inner(SSL_HANDSHAKE *hs, CBB *out,
3326
+ CBB *out_encoded,
3327
+ bool *out_needs_psk_binder) {
3328
+ // When writing ClientHelloInner, we construct the real and encoded
3329
+ // ClientHellos concurrently, to handle compression. Uncompressed extensions
3330
+ // are written to |extensions| and copied to |extensions_encoded|. Compressed
3331
+ // extensions are buffered in |compressed| and written to the end. (ECH can
3332
+ // only compress continguous extensions.)
3333
+ SSL *const ssl = hs->ssl;
3334
+ bssl::ScopedCBB compressed, outer_extensions;
3335
+ CBB extensions, extensions_encoded;
3336
+ if (!CBB_add_u16_length_prefixed(out, &extensions) ||
3337
+ !CBB_add_u16_length_prefixed(out_encoded, &extensions_encoded) ||
3338
+ !CBB_init(compressed.get(), 64) ||
3339
+ !CBB_init(outer_extensions.get(), 64)) {
3340
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
3341
+ return false;
2998
3342
  }
2999
3343
 
3000
- uint16_t grease_ext1 = 0;
3344
+ hs->inner_extensions_sent = 0;
3345
+
3001
3346
  if (ssl->ctx->grease_enabled) {
3002
- // Add a fake empty extension. See draft-davidben-tls-grease-01.
3003
- grease_ext1 = ssl_get_grease_value(hs, ssl_grease_extension1);
3004
- if (!CBB_add_u16(&extensions, grease_ext1) ||
3005
- !CBB_add_u16(&extensions, 0 /* zero length */)) {
3006
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
3347
+ // Add a fake empty extension. See RFC 8701. This always matches
3348
+ // |ssl_add_clienthello_tlsext|, so compress it.
3349
+ uint16_t grease_ext = ssl_get_grease_value(hs, ssl_grease_extension1);
3350
+ if (!add_padding_extension(compressed.get(), grease_ext, 0) ||
3351
+ !CBB_add_u16(outer_extensions.get(), grease_ext)) {
3007
3352
  return false;
3008
3353
  }
3009
3354
  }
3010
3355
 
3011
- bool last_was_empty = false;
3012
- for (size_t i = 0; i < kNumExtensions; i++) {
3356
+ for (size_t unpermuted = 0; unpermuted < kNumExtensions; unpermuted++) {
3357
+ size_t i = hs->extension_permutation.empty()
3358
+ ? unpermuted
3359
+ : hs->extension_permutation[unpermuted];
3013
3360
  const size_t len_before = CBB_len(&extensions);
3014
- if (!kExtensions[i].add_clienthello(hs, &extensions)) {
3361
+ const size_t len_compressed_before = CBB_len(compressed.get());
3362
+ if (!kExtensions[i].add_clienthello(hs, &extensions, compressed.get(),
3363
+ ssl_client_hello_inner)) {
3015
3364
  OPENSSL_PUT_ERROR(SSL, SSL_R_ERROR_ADDING_EXTENSION);
3016
3365
  ERR_add_error_dataf("extension %u", (unsigned)kExtensions[i].value);
3017
3366
  return false;
3018
3367
  }
3019
3368
 
3020
3369
  const size_t bytes_written = CBB_len(&extensions) - len_before;
3370
+ const size_t bytes_written_compressed =
3371
+ CBB_len(compressed.get()) - len_compressed_before;
3372
+ // The callback may write to at most one output.
3373
+ assert(bytes_written == 0 || bytes_written_compressed == 0);
3374
+ if (bytes_written != 0 || bytes_written_compressed != 0) {
3375
+ hs->inner_extensions_sent |= (1u << i);
3376
+ }
3377
+ // If compressed, update the running ech_outer_extensions extension.
3378
+ if (bytes_written_compressed != 0 &&
3379
+ !CBB_add_u16(outer_extensions.get(), kExtensions[i].value)) {
3380
+ return false;
3381
+ }
3382
+ }
3383
+
3384
+ if (ssl->ctx->grease_enabled) {
3385
+ // Add a fake non-empty extension. See RFC 8701. This always matches
3386
+ // |ssl_add_clienthello_tlsext|, so compress it.
3387
+ uint16_t grease_ext = ssl_get_grease_value(hs, ssl_grease_extension2);
3388
+ if (!add_padding_extension(compressed.get(), grease_ext, 1) ||
3389
+ !CBB_add_u16(outer_extensions.get(), grease_ext)) {
3390
+ return false;
3391
+ }
3392
+ }
3393
+
3394
+ // Pad the server name. See draft-ietf-tls-esni-10, section 6.1.2.
3395
+ // TODO(https://crbug.com/boringssl/275): Ideally we'd pad the whole thing to
3396
+ // reduce the output range. See
3397
+ // https://github.com/tlswg/draft-ietf-tls-esni/issues/433
3398
+ size_t padding_len = 0;
3399
+ size_t maximum_name_length = hs->selected_ech_config->maximum_name_length;
3400
+ if (ssl->hostname) {
3401
+ size_t hostname_len = strlen(ssl->hostname.get());
3402
+ if (hostname_len <= maximum_name_length) {
3403
+ padding_len = maximum_name_length - hostname_len;
3404
+ } else {
3405
+ // If the server underestimated the maximum size, pad to a multiple of 32.
3406
+ padding_len = 31 - (hostname_len - 1) % 32;
3407
+ // If the input is close to |maximum_name_length|, pad to the next
3408
+ // multiple for at least 32 bytes of length ambiguity.
3409
+ if (hostname_len + padding_len < maximum_name_length + 32) {
3410
+ padding_len += 32;
3411
+ }
3412
+ }
3413
+ } else {
3414
+ // No SNI. Pad up to |maximum_name_length|, including server_name extension
3415
+ // overhead.
3416
+ padding_len = 9 + maximum_name_length;
3417
+ }
3418
+ if (!add_padding_extension(&extensions, TLSEXT_TYPE_padding, padding_len)) {
3419
+ return false;
3420
+ }
3421
+
3422
+ // Uncompressed extensions are encoded as-is.
3423
+ if (!CBB_add_bytes(&extensions_encoded, CBB_data(&extensions),
3424
+ CBB_len(&extensions))) {
3425
+ return false;
3426
+ }
3427
+
3428
+ // Flush all the compressed extensions.
3429
+ if (CBB_len(compressed.get()) != 0) {
3430
+ CBB extension, child;
3431
+ // Copy them as-is in the real ClientHelloInner.
3432
+ if (!CBB_add_bytes(&extensions, CBB_data(compressed.get()),
3433
+ CBB_len(compressed.get())) ||
3434
+ // Replace with ech_outer_extensions in the encoded form.
3435
+ !CBB_add_u16(&extensions_encoded, TLSEXT_TYPE_ech_outer_extensions) ||
3436
+ !CBB_add_u16_length_prefixed(&extensions_encoded, &extension) ||
3437
+ !CBB_add_u8_length_prefixed(&extension, &child) ||
3438
+ !CBB_add_bytes(&child, CBB_data(outer_extensions.get()),
3439
+ CBB_len(outer_extensions.get())) ||
3440
+ !CBB_flush(&extensions_encoded)) {
3441
+ return false;
3442
+ }
3443
+ }
3444
+
3445
+ // The PSK extension must be last. It is never compressed. Note, if there is a
3446
+ // binder, the caller will need to update both ClientHelloInner and
3447
+ // EncodedClientHelloInner after computing it.
3448
+ const size_t len_before = CBB_len(&extensions);
3449
+ if (!ext_pre_shared_key_add_clienthello(hs, &extensions, out_needs_psk_binder,
3450
+ ssl_client_hello_inner) ||
3451
+ !CBB_add_bytes(&extensions_encoded, CBB_data(&extensions) + len_before,
3452
+ CBB_len(&extensions) - len_before) ||
3453
+ !CBB_flush(out) || //
3454
+ !CBB_flush(out_encoded)) {
3455
+ return false;
3456
+ }
3457
+
3458
+ return true;
3459
+ }
3460
+
3461
+ bool ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out, CBB *out_encoded,
3462
+ bool *out_needs_psk_binder,
3463
+ ssl_client_hello_type_t type, size_t header_len,
3464
+ size_t omit_ech_len) {
3465
+ *out_needs_psk_binder = false;
3466
+
3467
+ if (type == ssl_client_hello_inner) {
3468
+ return ssl_add_clienthello_tlsext_inner(hs, out, out_encoded,
3469
+ out_needs_psk_binder);
3470
+ }
3471
+
3472
+ assert(out_encoded == nullptr); // Only ClientHelloInner needs two outputs.
3473
+ SSL *const ssl = hs->ssl;
3474
+ CBB extensions;
3475
+ if (!CBB_add_u16_length_prefixed(out, &extensions)) {
3476
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
3477
+ return false;
3478
+ }
3479
+
3480
+ // Note we may send multiple ClientHellos for DTLS HelloVerifyRequest and TLS
3481
+ // 1.3 HelloRetryRequest. For the latter, the extensions may change, so it is
3482
+ // important to reset this value.
3483
+ hs->extensions.sent = 0;
3484
+
3485
+ // Add a fake empty extension. See RFC 8701.
3486
+ if (ssl->ctx->grease_enabled &&
3487
+ !add_padding_extension(
3488
+ &extensions, ssl_get_grease_value(hs, ssl_grease_extension1), 0)) {
3489
+ return false;
3490
+ }
3491
+
3492
+ bool last_was_empty = false;
3493
+ for (size_t unpermuted = 0; unpermuted < kNumExtensions; unpermuted++) {
3494
+ size_t i = hs->extension_permutation.empty()
3495
+ ? unpermuted
3496
+ : hs->extension_permutation[unpermuted];
3497
+ size_t bytes_written;
3498
+ if (omit_ech_len != 0 &&
3499
+ kExtensions[i].value == TLSEXT_TYPE_encrypted_client_hello) {
3500
+ bytes_written = omit_ech_len;
3501
+ } else {
3502
+ const size_t len_before = CBB_len(&extensions);
3503
+ if (!kExtensions[i].add_clienthello(hs, &extensions, &extensions, type)) {
3504
+ OPENSSL_PUT_ERROR(SSL, SSL_R_ERROR_ADDING_EXTENSION);
3505
+ ERR_add_error_dataf("extension %u", (unsigned)kExtensions[i].value);
3506
+ return false;
3507
+ }
3508
+
3509
+ bytes_written = CBB_len(&extensions) - len_before;
3510
+ }
3021
3511
  if (bytes_written != 0) {
3022
3512
  hs->extensions.sent |= (1u << i);
3023
3513
  }
@@ -3027,29 +3517,22 @@ bool ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out,
3027
3517
  }
3028
3518
 
3029
3519
  if (ssl->ctx->grease_enabled) {
3030
- // Add a fake non-empty extension. See draft-davidben-tls-grease-01.
3031
- uint16_t grease_ext2 = ssl_get_grease_value(hs, ssl_grease_extension2);
3032
-
3033
- // The two fake extensions must not have the same value. GREASE values are
3034
- // of the form 0x1a1a, 0x2a2a, 0x3a3a, etc., so XOR to generate a different
3035
- // one.
3036
- if (grease_ext1 == grease_ext2) {
3037
- grease_ext2 ^= 0x1010;
3038
- }
3039
-
3040
- if (!CBB_add_u16(&extensions, grease_ext2) ||
3041
- !CBB_add_u16(&extensions, 1 /* one byte length */) ||
3042
- !CBB_add_u8(&extensions, 0 /* single zero byte as contents */)) {
3043
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
3520
+ // Add a fake non-empty extension. See RFC 8701.
3521
+ if (!add_padding_extension(
3522
+ &extensions, ssl_get_grease_value(hs, ssl_grease_extension2), 1)) {
3044
3523
  return false;
3045
3524
  }
3046
-
3047
3525
  last_was_empty = false;
3048
3526
  }
3049
3527
 
3050
- if (!SSL_is_dtls(ssl)) {
3051
- size_t psk_extension_len = ext_pre_shared_key_clienthello_length(hs);
3052
- header_len += 2 + CBB_len(&extensions) + psk_extension_len;
3528
+ // In cleartext ClientHellos, we add the padding extension to work around
3529
+ // bugs. We also apply this padding to ClientHelloOuter, to keep the wire
3530
+ // images aligned.
3531
+ size_t psk_extension_len = ext_pre_shared_key_clienthello_length(hs, type);
3532
+ if (!SSL_is_dtls(ssl) && !ssl->quic_method &&
3533
+ !ssl->s3->used_hello_retry_request) {
3534
+ header_len += SSL3_HM_HEADER_LENGTH + 2 + CBB_len(&extensions) +
3535
+ omit_ech_len + psk_extension_len;
3053
3536
  size_t padding_len = 0;
3054
3537
 
3055
3538
  // The final extension must be non-empty. WebSphere Application
@@ -3083,24 +3566,21 @@ bool ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out,
3083
3566
  }
3084
3567
  }
3085
3568
 
3086
- if (padding_len != 0) {
3087
- uint8_t *padding_bytes;
3088
- if (!CBB_add_u16(&extensions, TLSEXT_TYPE_padding) ||
3089
- !CBB_add_u16(&extensions, padding_len) ||
3090
- !CBB_add_space(&extensions, &padding_bytes, padding_len)) {
3091
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
3092
- return false;
3093
- }
3094
-
3095
- OPENSSL_memset(padding_bytes, 0, padding_len);
3569
+ if (padding_len != 0 &&
3570
+ !add_padding_extension(&extensions, TLSEXT_TYPE_padding, padding_len)) {
3571
+ return false;
3096
3572
  }
3097
3573
  }
3098
3574
 
3099
3575
  // The PSK extension must be last, including after the padding.
3100
- if (!ext_pre_shared_key_add_clienthello(hs, &extensions)) {
3576
+ const size_t len_before = CBB_len(&extensions);
3577
+ if (!ext_pre_shared_key_add_clienthello(hs, &extensions, out_needs_psk_binder,
3578
+ type)) {
3101
3579
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
3102
3580
  return false;
3103
3581
  }
3582
+ assert(psk_extension_len == CBB_len(&extensions) - len_before);
3583
+ (void)len_before; // |assert| is omitted in release builds.
3104
3584
 
3105
3585
  // Discard empty extensions blocks.
3106
3586
  if (CBB_len(&extensions) == 0) {
@@ -3146,12 +3626,6 @@ err:
3146
3626
  static bool ssl_scan_clienthello_tlsext(SSL_HANDSHAKE *hs,
3147
3627
  const SSL_CLIENT_HELLO *client_hello,
3148
3628
  int *out_alert) {
3149
- for (size_t i = 0; i < kNumExtensions; i++) {
3150
- if (kExtensions[i].init != NULL) {
3151
- kExtensions[i].init(hs);
3152
- }
3153
- }
3154
-
3155
3629
  hs->extensions.received = 0;
3156
3630
  CBS extensions;
3157
3631
  CBS_init(&extensions, client_hello->extensions, client_hello->extensions_len);
@@ -3312,18 +3786,8 @@ static bool ssl_scan_serverhello_tlsext(SSL_HANDSHAKE *hs, CBS *cbs,
3312
3786
 
3313
3787
  static bool ssl_check_clienthello_tlsext(SSL_HANDSHAKE *hs) {
3314
3788
  SSL *const ssl = hs->ssl;
3315
-
3316
- if (ssl->s3->token_binding_negotiated &&
3317
- !(SSL_get_secure_renegotiation_support(ssl) &&
3318
- SSL_get_extms_support(ssl))) {
3319
- OPENSSL_PUT_ERROR(SSL, SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI);
3320
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
3321
- return false;
3322
- }
3323
-
3324
3789
  int ret = SSL_TLSEXT_ERR_NOACK;
3325
3790
  int al = SSL_AD_UNRECOGNIZED_NAME;
3326
-
3327
3791
  if (ssl->ctx->servername_callback != 0) {
3328
3792
  ret = ssl->ctx->servername_callback(ssl, &al, ssl->ctx->servername_arg);
3329
3793
  } else if (ssl->session_ctx->servername_callback != 0) {
@@ -3345,6 +3809,36 @@ static bool ssl_check_clienthello_tlsext(SSL_HANDSHAKE *hs) {
3345
3809
  }
3346
3810
  }
3347
3811
 
3812
+ static bool ssl_check_serverhello_tlsext(SSL_HANDSHAKE *hs) {
3813
+ SSL *const ssl = hs->ssl;
3814
+ // ALPS and ALPN have a dependency between each other, so we defer checking
3815
+ // consistency to after the callbacks run.
3816
+ if (hs->new_session != nullptr && hs->new_session->has_application_settings) {
3817
+ // ALPN must be negotiated.
3818
+ if (ssl->s3->alpn_selected.empty()) {
3819
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NEGOTIATED_ALPS_WITHOUT_ALPN);
3820
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
3821
+ return false;
3822
+ }
3823
+
3824
+ // The negotiated protocol must be one of the ones we advertised for ALPS.
3825
+ Span<const uint8_t> settings;
3826
+ if (!ssl_get_local_application_settings(hs, &settings,
3827
+ ssl->s3->alpn_selected)) {
3828
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL);
3829
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
3830
+ return false;
3831
+ }
3832
+
3833
+ if (!hs->new_session->local_application_settings.CopyFrom(settings)) {
3834
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
3835
+ return false;
3836
+ }
3837
+ }
3838
+
3839
+ return true;
3840
+ }
3841
+
3348
3842
  bool ssl_parse_serverhello_tlsext(SSL_HANDSHAKE *hs, CBS *cbs) {
3349
3843
  SSL *const ssl = hs->ssl;
3350
3844
  int alert = SSL_AD_DECODE_ERROR;
@@ -3353,6 +3847,10 @@ bool ssl_parse_serverhello_tlsext(SSL_HANDSHAKE *hs, CBS *cbs) {
3353
3847
  return false;
3354
3848
  }
3355
3849
 
3850
+ if (!ssl_check_serverhello_tlsext(hs)) {
3851
+ return false;
3852
+ }
3853
+
3356
3854
  return true;
3357
3855
  }
3358
3856
 
@@ -3504,6 +4002,7 @@ enum ssl_ticket_aead_result_t ssl_process_ticket(
3504
4002
  SSL_HANDSHAKE *hs, UniquePtr<SSL_SESSION> *out_session,
3505
4003
  bool *out_renew_ticket, Span<const uint8_t> ticket,
3506
4004
  Span<const uint8_t> session_id) {
4005
+ SSL *const ssl = hs->ssl;
3507
4006
  *out_renew_ticket = false;
3508
4007
  out_session->reset();
3509
4008
 
@@ -3512,9 +4011,21 @@ enum ssl_ticket_aead_result_t ssl_process_ticket(
3512
4011
  return ssl_ticket_aead_ignore_ticket;
3513
4012
  }
3514
4013
 
4014
+ // Tickets in TLS 1.3 are tied into pre-shared keys (PSKs), unlike in TLS 1.2
4015
+ // where that concept doesn't exist. The |decrypted_psk| and |ignore_psk|
4016
+ // hints only apply to PSKs. We check the version to determine which this is.
4017
+ const bool is_psk = ssl_protocol_version(ssl) >= TLS1_3_VERSION;
4018
+
3515
4019
  Array<uint8_t> plaintext;
3516
4020
  enum ssl_ticket_aead_result_t result;
3517
- if (hs->ssl->session_ctx->ticket_aead_method != NULL) {
4021
+ SSL_HANDSHAKE_HINTS *const hints = hs->hints.get();
4022
+ if (is_psk && hints && !hs->hints_requested &&
4023
+ !hints->decrypted_psk.empty()) {
4024
+ result = plaintext.CopyFrom(hints->decrypted_psk) ? ssl_ticket_aead_success
4025
+ : ssl_ticket_aead_error;
4026
+ } else if (is_psk && hints && !hs->hints_requested && hints->ignore_psk) {
4027
+ result = ssl_ticket_aead_ignore_ticket;
4028
+ } else if (ssl->session_ctx->ticket_aead_method != NULL) {
3518
4029
  result = ssl_decrypt_ticket_with_method(hs, &plaintext, out_renew_ticket,
3519
4030
  ticket);
3520
4031
  } else {
@@ -3523,9 +4034,8 @@ enum ssl_ticket_aead_result_t ssl_process_ticket(
3523
4034
  // length should be well under the minimum size for the session material and
3524
4035
  // HMAC.
3525
4036
  if (ticket.size() < SSL_TICKET_KEY_NAME_LEN + EVP_MAX_IV_LENGTH) {
3526
- return ssl_ticket_aead_ignore_ticket;
3527
- }
3528
- if (hs->ssl->session_ctx->ticket_key_cb != NULL) {
4037
+ result = ssl_ticket_aead_ignore_ticket;
4038
+ } else if (ssl->session_ctx->ticket_key_cb != NULL) {
3529
4039
  result =
3530
4040
  ssl_decrypt_ticket_with_cb(hs, &plaintext, out_renew_ticket, ticket);
3531
4041
  } else {
@@ -3533,22 +4043,33 @@ enum ssl_ticket_aead_result_t ssl_process_ticket(
3533
4043
  }
3534
4044
  }
3535
4045
 
4046
+ if (is_psk && hints && hs->hints_requested) {
4047
+ if (result == ssl_ticket_aead_ignore_ticket) {
4048
+ hints->ignore_psk = true;
4049
+ } else if (result == ssl_ticket_aead_success &&
4050
+ !hints->decrypted_psk.CopyFrom(plaintext)) {
4051
+ return ssl_ticket_aead_error;
4052
+ }
4053
+ }
4054
+
3536
4055
  if (result != ssl_ticket_aead_success) {
3537
4056
  return result;
3538
4057
  }
3539
4058
 
3540
4059
  // Decode the session.
3541
4060
  UniquePtr<SSL_SESSION> session(SSL_SESSION_from_bytes(
3542
- plaintext.data(), plaintext.size(), hs->ssl->ctx.get()));
4061
+ plaintext.data(), plaintext.size(), ssl->ctx.get()));
3543
4062
  if (!session) {
3544
4063
  ERR_clear_error(); // Don't leave an error on the queue.
3545
4064
  return ssl_ticket_aead_ignore_ticket;
3546
4065
  }
3547
4066
 
3548
- // Copy the client's session ID into the new session, to denote the ticket has
3549
- // been accepted.
3550
- OPENSSL_memcpy(session->session_id, session_id.data(), session_id.size());
3551
- session->session_id_length = session_id.size();
4067
+ // Envoy's tests expect the session to have a session ID that matches the
4068
+ // placeholder used by the client. It's unclear whether this is a good idea,
4069
+ // but we maintain it for now.
4070
+ SHA256(ticket.data(), ticket.size(), session->session_id);
4071
+ // Other consumers may expect a non-empty session ID to indicate resumption.
4072
+ session->session_id_length = SHA256_DIGEST_LENGTH;
3552
4073
 
3553
4074
  *out_session = std::move(session);
3554
4075
  return ssl_ticket_aead_success;
@@ -3696,11 +4217,11 @@ bool tls1_verify_channel_id(SSL_HANDSHAKE *hs, const SSLMessage &msg) {
3696
4217
  if (!sig_ok) {
3697
4218
  OPENSSL_PUT_ERROR(SSL, SSL_R_CHANNEL_ID_SIGNATURE_INVALID);
3698
4219
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
3699
- ssl->s3->channel_id_valid = false;
3700
4220
  return false;
3701
4221
  }
3702
4222
 
3703
4223
  OPENSSL_memcpy(ssl->s3->channel_id, p, 64);
4224
+ ssl->s3->channel_id_valid = true;
3704
4225
  return true;
3705
4226
  }
3706
4227
 
@@ -3811,23 +4332,6 @@ bool tls1_record_handshake_hashes_for_channel_id(SSL_HANDSHAKE *hs) {
3811
4332
  return true;
3812
4333
  }
3813
4334
 
3814
- bool ssl_do_channel_id_callback(SSL_HANDSHAKE *hs) {
3815
- if (hs->config->channel_id_private != NULL ||
3816
- hs->ssl->ctx->channel_id_cb == NULL) {
3817
- return true;
3818
- }
3819
-
3820
- EVP_PKEY *key = NULL;
3821
- hs->ssl->ctx->channel_id_cb(hs->ssl, &key);
3822
- if (key == NULL) {
3823
- // The caller should try again later.
3824
- return true;
3825
- }
3826
-
3827
- UniquePtr<EVP_PKEY> free_key(key);
3828
- return SSL_set1_tls_channel_id(hs->ssl, key);
3829
- }
3830
-
3831
4335
  bool ssl_is_sct_list_valid(const CBS *contents) {
3832
4336
  // Shallow parse the SCT list for sanity. By the RFC
3833
4337
  // (https://tools.ietf.org/html/rfc6962#section-3.3) neither the list nor any