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