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