grpc 1.37.1 → 1.39.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 +96 -59
- 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 +334 -0
- data/include/grpc/event_engine/port.h +41 -0
- data/include/grpc/event_engine/slice_allocator.h +91 -0
- data/include/grpc/grpc.h +11 -4
- data/include/grpc/grpc_security.h +32 -0
- data/include/grpc/grpc_security_constants.h +15 -0
- data/include/grpc/impl/codegen/grpc_types.h +28 -13
- data/include/grpc/impl/codegen/port_platform.h +22 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/http_proxy.cc +16 -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 +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -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/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +755 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- 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 +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -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 +18 -12
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +25 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- 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 +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
- 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 +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- 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 +32 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +348 -199
- data/src/core/ext/xds/xds_api.h +21 -12
- data/src/core/ext/xds/xds_bootstrap.cc +97 -159
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +310 -178
- data/src/core/ext/xds/xds_client.h +41 -27
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +10 -9
- 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/channelz.cc +21 -13
- data/src/core/lib/channel/channelz.h +3 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- 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/slice_allocator.cc +89 -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/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +183 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- 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 +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +168 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- 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 +194 -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 +243 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
- data/src/core/lib/iomgr/exec_ctx.cc +12 -4
- data/src/core/lib/iomgr/exec_ctx.h +4 -5
- data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
- data/src/core/lib/iomgr/executor/threadpool.h +2 -2
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +2 -2
- 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 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- 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 +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- 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_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 +7 -5
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +8 -4
- data/src/core/lib/iomgr/resolve_address.h +12 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +11 -10
- data/src/core/lib/iomgr/sockaddr.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +15 -2
- data/src/core/lib/iomgr/socket_mutator.h +26 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +78 -73
- data/src/core/lib/iomgr/tcp_posix.h +8 -0
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
- data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- 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 +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- 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 +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/matchers/matchers.cc +39 -39
- data/src/core/lib/matchers/matchers.h +28 -28
- 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/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.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
- 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/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +33 -32
- data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
- 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 +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +13 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +68 -69
- data/src/core/lib/surface/completion_queue.h +3 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -2
- data/src/core/lib/surface/init.cc +1 -3
- data/src/core/lib/surface/init.h +10 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +28 -22
- data/src/core/lib/surface/server.h +16 -15
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +21 -10
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +6 -4
- data/src/core/lib/transport/transport_op_string.cc +6 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/crypt/gsec.h +6 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -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 +1 -1
- 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/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- 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/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- 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 +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- 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 +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- 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_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- 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 +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +483 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- 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_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- 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/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- 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 +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -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 +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- 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 +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
- 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 +14 -9
- 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 +367 -315
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- 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/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
- 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 +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
- 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 +31 -0
- 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 +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- 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 +5 -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_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -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 +20 -49
- 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/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 +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
- 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 +2 -1
- 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 +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
- 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 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- 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 +51 -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 +8 -31
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +94 -46
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -23,6 +23,7 @@
|
|
23
23
|
#include <openssl/bytestring.h>
|
24
24
|
#include <openssl/digest.h>
|
25
25
|
#include <openssl/err.h>
|
26
|
+
#include <openssl/hpke.h>
|
26
27
|
#include <openssl/mem.h>
|
27
28
|
#include <openssl/rand.h>
|
28
29
|
#include <openssl/stack.h>
|
@@ -41,35 +42,57 @@ static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0};
|
|
41
42
|
// See RFC 8446, section 8.3.
|
42
43
|
static const int32_t kMaxTicketAgeSkewSeconds = 60;
|
43
44
|
|
44
|
-
static
|
45
|
-
|
45
|
+
static bool resolve_ecdhe_secret(SSL_HANDSHAKE *hs,
|
46
|
+
const SSL_CLIENT_HELLO *client_hello) {
|
46
47
|
SSL *const ssl = hs->ssl;
|
47
|
-
|
48
|
-
|
49
|
-
// We only support connections that include an ECDHE key exchange.
|
50
|
-
CBS key_share;
|
51
|
-
if (!ssl_client_hello_get_extension(client_hello, &key_share,
|
52
|
-
TLSEXT_TYPE_key_share)) {
|
53
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
|
54
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
|
55
|
-
return 0;
|
56
|
-
}
|
48
|
+
const uint16_t group_id = hs->new_session->group_id;
|
57
49
|
|
58
50
|
bool found_key_share;
|
59
|
-
|
51
|
+
Span<const uint8_t> peer_key;
|
60
52
|
uint8_t alert = SSL_AD_DECODE_ERROR;
|
61
|
-
if (!ssl_ext_key_share_parse_clienthello(hs, &found_key_share, &
|
62
|
-
&alert,
|
53
|
+
if (!ssl_ext_key_share_parse_clienthello(hs, &found_key_share, &peer_key,
|
54
|
+
&alert, client_hello)) {
|
63
55
|
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
64
|
-
return
|
56
|
+
return false;
|
65
57
|
}
|
66
58
|
|
67
59
|
if (!found_key_share) {
|
68
|
-
|
69
|
-
|
60
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
61
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
|
62
|
+
return false;
|
70
63
|
}
|
71
64
|
|
72
|
-
|
65
|
+
Array<uint8_t> secret;
|
66
|
+
SSL_HANDSHAKE_HINTS *const hints = hs->hints.get();
|
67
|
+
if (hints && !hs->hints_requested && hints->key_share_group_id == group_id &&
|
68
|
+
!hints->key_share_secret.empty()) {
|
69
|
+
// Copy DH secret from hints.
|
70
|
+
if (!hs->ecdh_public_key.CopyFrom(hints->key_share_public_key) ||
|
71
|
+
!secret.CopyFrom(hints->key_share_secret)) {
|
72
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
73
|
+
return false;
|
74
|
+
}
|
75
|
+
} else {
|
76
|
+
ScopedCBB public_key;
|
77
|
+
UniquePtr<SSLKeyShare> key_share = SSLKeyShare::Create(group_id);
|
78
|
+
if (!key_share || //
|
79
|
+
!CBB_init(public_key.get(), 32) ||
|
80
|
+
!key_share->Accept(public_key.get(), &secret, &alert, peer_key) ||
|
81
|
+
!CBBFinishArray(public_key.get(), &hs->ecdh_public_key)) {
|
82
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
83
|
+
return false;
|
84
|
+
}
|
85
|
+
if (hints && hs->hints_requested) {
|
86
|
+
hints->key_share_group_id = group_id;
|
87
|
+
if (!hints->key_share_public_key.CopyFrom(hs->ecdh_public_key) ||
|
88
|
+
!hints->key_share_secret.CopyFrom(secret)) {
|
89
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
90
|
+
return false;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
return tls13_advance_key_schedule(hs, secret);
|
73
96
|
}
|
74
97
|
|
75
98
|
static int ssl_ext_supported_versions_add_serverhello(SSL_HANDSHAKE *hs,
|
@@ -132,7 +155,7 @@ static bool add_new_session_tickets(SSL_HANDSHAKE *hs, bool *out_sent_tickets) {
|
|
132
155
|
(!ssl->quic_method || !ssl->config->quic_early_data_context.empty());
|
133
156
|
if (enable_early_data) {
|
134
157
|
// QUIC does not use the max_early_data_size parameter and always sets it
|
135
|
-
// to a fixed value. See
|
158
|
+
// to a fixed value. See RFC 9001, section 4.6.1.
|
136
159
|
session->ticket_max_early_data =
|
137
160
|
ssl->quic_method != nullptr ? 0xffffffff : kMaxEarlyDataAccepted;
|
138
161
|
}
|
@@ -165,7 +188,7 @@ static bool add_new_session_tickets(SSL_HANDSHAKE *hs, bool *out_sent_tickets) {
|
|
165
188
|
}
|
166
189
|
}
|
167
190
|
|
168
|
-
// Add a fake extension. See
|
191
|
+
// Add a fake extension. See RFC 8701.
|
169
192
|
if (!CBB_add_u16(&extensions,
|
170
193
|
ssl_get_grease_value(hs, ssl_grease_ticket_extension)) ||
|
171
194
|
!CBB_add_u16(&extensions, 0 /* empty */)) {
|
@@ -186,13 +209,8 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
|
|
186
209
|
// the common handshake logic. Resolve the remaining non-PSK parameters.
|
187
210
|
SSL *const ssl = hs->ssl;
|
188
211
|
SSLMessage msg;
|
189
|
-
if (!ssl->method->get_message(ssl, &msg)) {
|
190
|
-
return ssl_hs_read_message;
|
191
|
-
}
|
192
212
|
SSL_CLIENT_HELLO client_hello;
|
193
|
-
if (!
|
194
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
|
195
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
213
|
+
if (!hs->GetClientHello(&msg, &client_hello)) {
|
196
214
|
return ssl_hs_error;
|
197
215
|
}
|
198
216
|
|
@@ -252,6 +270,16 @@ static enum ssl_ticket_aead_result_t select_session(
|
|
252
270
|
return ssl_ticket_aead_ignore_ticket;
|
253
271
|
}
|
254
272
|
|
273
|
+
// Per RFC8446, section 4.2.9, servers MUST abort the handshake if the client
|
274
|
+
// sends pre_shared_key without psk_key_exchange_modes.
|
275
|
+
CBS unused;
|
276
|
+
if (!ssl_client_hello_get_extension(client_hello, &unused,
|
277
|
+
TLSEXT_TYPE_psk_key_exchange_modes)) {
|
278
|
+
*out_alert = SSL_AD_MISSING_EXTENSION;
|
279
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_EXTENSION);
|
280
|
+
return ssl_ticket_aead_error;
|
281
|
+
}
|
282
|
+
|
255
283
|
CBS ticket, binders;
|
256
284
|
uint32_t client_ticket_age;
|
257
285
|
if (!ssl_ext_pre_shared_key_parse_clienthello(
|
@@ -337,13 +365,8 @@ static bool quic_ticket_compatible(const SSL_SESSION *session,
|
|
337
365
|
static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
338
366
|
SSL *const ssl = hs->ssl;
|
339
367
|
SSLMessage msg;
|
340
|
-
if (!ssl->method->get_message(ssl, &msg)) {
|
341
|
-
return ssl_hs_read_message;
|
342
|
-
}
|
343
368
|
SSL_CLIENT_HELLO client_hello;
|
344
|
-
if (!
|
345
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
|
346
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
369
|
+
if (!hs->GetClientHello(&msg, &client_hello)) {
|
347
370
|
return ssl_hs_error;
|
348
371
|
}
|
349
372
|
|
@@ -354,7 +377,7 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
|
354
377
|
&offered_ticket, msg, &client_hello)) {
|
355
378
|
case ssl_ticket_aead_ignore_ticket:
|
356
379
|
assert(!session);
|
357
|
-
if (!ssl_get_new_session(hs
|
380
|
+
if (!ssl_get_new_session(hs)) {
|
358
381
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
359
382
|
return ssl_hs_error;
|
360
383
|
}
|
@@ -371,6 +394,7 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
|
371
394
|
}
|
372
395
|
|
373
396
|
ssl->s3->session_reused = true;
|
397
|
+
hs->can_release_private_key = true;
|
374
398
|
|
375
399
|
// Resumption incorporates fresh key material, so refresh the timeout.
|
376
400
|
ssl_session_renew_timeout(ssl, hs->new_session.get(),
|
@@ -393,6 +417,23 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
|
393
417
|
return ssl_hs_error;
|
394
418
|
}
|
395
419
|
|
420
|
+
// Record connection properties in the new session.
|
421
|
+
hs->new_session->cipher = hs->new_cipher;
|
422
|
+
if (!tls1_get_shared_group(hs, &hs->new_session->group_id)) {
|
423
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_GROUP);
|
424
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
|
425
|
+
return ssl_hs_error;
|
426
|
+
}
|
427
|
+
|
428
|
+
// Determine if we need HelloRetryRequest.
|
429
|
+
bool found_key_share;
|
430
|
+
if (!ssl_ext_key_share_parse_clienthello(hs, &found_key_share,
|
431
|
+
/*out_key_share=*/nullptr, &alert,
|
432
|
+
&client_hello)) {
|
433
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
434
|
+
return ssl_hs_error;
|
435
|
+
}
|
436
|
+
|
396
437
|
// Determine if we're negotiating 0-RTT.
|
397
438
|
if (!ssl->enable_early_data) {
|
398
439
|
ssl->s3->early_data_reason = ssl_early_data_disabled;
|
@@ -404,12 +445,9 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
|
404
445
|
ssl->s3->early_data_reason = ssl_early_data_unsupported_for_session;
|
405
446
|
} else if (!hs->early_data_offered) {
|
406
447
|
ssl->s3->early_data_reason = ssl_early_data_peer_declined;
|
407
|
-
} else if (
|
448
|
+
} else if (hs->channel_id_negotiated) {
|
408
449
|
// Channel ID is incompatible with 0-RTT.
|
409
450
|
ssl->s3->early_data_reason = ssl_early_data_channel_id;
|
410
|
-
} else if (ssl->s3->token_binding_negotiated) {
|
411
|
-
// Token Binding is incompatible with 0-RTT.
|
412
|
-
ssl->s3->early_data_reason = ssl_early_data_token_binding;
|
413
451
|
} else if (MakeConstSpan(ssl->s3->alpn_selected) != session->early_alpn) {
|
414
452
|
// The negotiated ALPN must match the one in the ticket.
|
415
453
|
ssl->s3->early_data_reason = ssl_early_data_alpn_mismatch;
|
@@ -423,6 +461,8 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
|
423
461
|
ssl->s3->early_data_reason = ssl_early_data_ticket_age_skew;
|
424
462
|
} else if (!quic_ticket_compatible(session.get(), hs->config)) {
|
425
463
|
ssl->s3->early_data_reason = ssl_early_data_quic_parameter_mismatch;
|
464
|
+
} else if (!found_key_share) {
|
465
|
+
ssl->s3->early_data_reason = ssl_early_data_hello_retry_request;
|
426
466
|
} else {
|
427
467
|
// |ssl_session_is_resumable| forbids cross-cipher resumptions even if the
|
428
468
|
// PRF hashes match.
|
@@ -432,9 +472,6 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
|
432
472
|
ssl->s3->early_data_accepted = true;
|
433
473
|
}
|
434
474
|
|
435
|
-
// Record connection properties in the new session.
|
436
|
-
hs->new_session->cipher = hs->new_cipher;
|
437
|
-
|
438
475
|
// Store the ALPN and ALPS values in the session for 0-RTT. Note the peer
|
439
476
|
// applications settings are not generally known until client
|
440
477
|
// EncryptedExtensions.
|
@@ -475,17 +512,12 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
|
475
512
|
ssl_get_handshake_digest(ssl_protocol_version(ssl), hs->new_cipher));
|
476
513
|
|
477
514
|
// Set up the key schedule and incorporate the PSK into the running secret.
|
478
|
-
if (
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
} else if (!tls13_init_key_schedule(hs, MakeConstSpan(kZeroes, hash_len))) {
|
485
|
-
return ssl_hs_error;
|
486
|
-
}
|
487
|
-
|
488
|
-
if (!ssl_hash_message(hs, msg)) {
|
515
|
+
if (!tls13_init_key_schedule(
|
516
|
+
hs, ssl->s3->session_reused
|
517
|
+
? MakeConstSpan(hs->new_session->secret,
|
518
|
+
hs->new_session->secret_length)
|
519
|
+
: MakeConstSpan(kZeroes, hash_len)) ||
|
520
|
+
!ssl_hash_message(hs, msg)) {
|
489
521
|
return ssl_hs_error;
|
490
522
|
}
|
491
523
|
|
@@ -497,33 +529,30 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
|
|
497
529
|
ssl->s3->skip_early_data = true;
|
498
530
|
}
|
499
531
|
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
if (ssl->s3->early_data_accepted) {
|
505
|
-
ssl->s3->early_data_reason = ssl_early_data_hello_retry_request;
|
506
|
-
ssl->s3->early_data_accepted = false;
|
507
|
-
}
|
508
|
-
ssl->s3->skip_early_data = true;
|
509
|
-
ssl->method->next_message(ssl);
|
510
|
-
if (!hs->transcript.UpdateForHelloRetryRequest()) {
|
511
|
-
return ssl_hs_error;
|
512
|
-
}
|
513
|
-
hs->tls13_state = state13_send_hello_retry_request;
|
514
|
-
return ssl_hs_ok;
|
532
|
+
if (!found_key_share) {
|
533
|
+
ssl->method->next_message(ssl);
|
534
|
+
if (!hs->transcript.UpdateForHelloRetryRequest()) {
|
535
|
+
return ssl_hs_error;
|
515
536
|
}
|
537
|
+
hs->tls13_state = state13_send_hello_retry_request;
|
538
|
+
return ssl_hs_ok;
|
539
|
+
}
|
540
|
+
|
541
|
+
if (!resolve_ecdhe_secret(hs, &client_hello)) {
|
516
542
|
return ssl_hs_error;
|
517
543
|
}
|
518
544
|
|
519
545
|
ssl->method->next_message(ssl);
|
546
|
+
hs->ech_client_hello_buf.Reset();
|
520
547
|
hs->tls13_state = state13_send_server_hello;
|
521
548
|
return ssl_hs_ok;
|
522
549
|
}
|
523
550
|
|
524
551
|
static enum ssl_hs_wait_t do_send_hello_retry_request(SSL_HANDSHAKE *hs) {
|
525
552
|
SSL *const ssl = hs->ssl;
|
526
|
-
|
553
|
+
if (hs->hints_requested) {
|
554
|
+
return ssl_hs_hints_ready;
|
555
|
+
}
|
527
556
|
|
528
557
|
ScopedCBB cbb;
|
529
558
|
CBB body, session_id, extensions;
|
@@ -566,12 +595,80 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
|
|
566
595
|
return ssl_hs_error;
|
567
596
|
}
|
568
597
|
SSL_CLIENT_HELLO client_hello;
|
569
|
-
if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
|
598
|
+
if (!ssl_client_hello_init(ssl, &client_hello, msg.body)) {
|
570
599
|
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
|
571
600
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
572
601
|
return ssl_hs_error;
|
573
602
|
}
|
574
603
|
|
604
|
+
if (ssl->s3->ech_accept) {
|
605
|
+
// If we previously accepted the ClientHelloInner, check that the second
|
606
|
+
// ClientHello contains an encrypted_client_hello extension.
|
607
|
+
CBS ech_body;
|
608
|
+
if (!ssl_client_hello_get_extension(&client_hello, &ech_body,
|
609
|
+
TLSEXT_TYPE_encrypted_client_hello)) {
|
610
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_EXTENSION);
|
611
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
|
612
|
+
return ssl_hs_error;
|
613
|
+
}
|
614
|
+
|
615
|
+
// Parse a ClientECH out of the extension body.
|
616
|
+
uint16_t kdf_id, aead_id;
|
617
|
+
uint8_t config_id;
|
618
|
+
CBS enc, payload;
|
619
|
+
if (!CBS_get_u16(&ech_body, &kdf_id) || //
|
620
|
+
!CBS_get_u16(&ech_body, &aead_id) ||
|
621
|
+
!CBS_get_u8(&ech_body, &config_id) ||
|
622
|
+
!CBS_get_u16_length_prefixed(&ech_body, &enc) ||
|
623
|
+
!CBS_get_u16_length_prefixed(&ech_body, &payload) ||
|
624
|
+
CBS_len(&ech_body) != 0) {
|
625
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
626
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
627
|
+
return ssl_hs_error;
|
628
|
+
}
|
629
|
+
|
630
|
+
// Check that ClientECH.cipher_suite is unchanged and that
|
631
|
+
// ClientECH.enc is empty.
|
632
|
+
if (kdf_id != EVP_HPKE_KDF_id(EVP_HPKE_CTX_kdf(hs->ech_hpke_ctx.get())) ||
|
633
|
+
aead_id !=
|
634
|
+
EVP_HPKE_AEAD_id(EVP_HPKE_CTX_aead(hs->ech_hpke_ctx.get())) ||
|
635
|
+
config_id != hs->ech_config_id || CBS_len(&enc) > 0) {
|
636
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
637
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
638
|
+
return ssl_hs_error;
|
639
|
+
}
|
640
|
+
|
641
|
+
// Decrypt the payload with the HPKE context from the first ClientHello.
|
642
|
+
Array<uint8_t> encoded_client_hello_inner;
|
643
|
+
bool unused;
|
644
|
+
if (!ssl_client_hello_decrypt(
|
645
|
+
hs->ech_hpke_ctx.get(), &encoded_client_hello_inner, &unused,
|
646
|
+
&client_hello, kdf_id, aead_id, config_id, enc, payload)) {
|
647
|
+
// Decryption failure is fatal in the second ClientHello.
|
648
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECRYPTION_FAILED);
|
649
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
|
650
|
+
return ssl_hs_error;
|
651
|
+
}
|
652
|
+
|
653
|
+
// Recover the ClientHelloInner from the EncodedClientHelloInner.
|
654
|
+
uint8_t alert = SSL_AD_DECODE_ERROR;
|
655
|
+
bssl::Array<uint8_t> client_hello_inner;
|
656
|
+
if (!ssl_decode_client_hello_inner(ssl, &alert, &client_hello_inner,
|
657
|
+
encoded_client_hello_inner,
|
658
|
+
&client_hello)) {
|
659
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
660
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
661
|
+
return ssl_hs_error;
|
662
|
+
}
|
663
|
+
hs->ech_client_hello_buf = std::move(client_hello_inner);
|
664
|
+
|
665
|
+
// Reparse |client_hello| from the buffer owned by |hs|.
|
666
|
+
if (!hs->GetClientHello(&msg, &client_hello)) {
|
667
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
668
|
+
return ssl_hs_error;
|
669
|
+
}
|
670
|
+
}
|
671
|
+
|
575
672
|
// We perform all our negotiation based on the first ClientHello (for
|
576
673
|
// consistency with what |select_certificate_cb| observed), which is in the
|
577
674
|
// transcript, so we can ignore most of this second one.
|
@@ -607,13 +704,7 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
|
|
607
704
|
}
|
608
705
|
}
|
609
706
|
|
610
|
-
|
611
|
-
if (!resolve_ecdhe_secret(hs, &need_retry, &client_hello)) {
|
612
|
-
if (need_retry) {
|
613
|
-
// Only send one HelloRetryRequest.
|
614
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
615
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
|
616
|
-
}
|
707
|
+
if (!resolve_ecdhe_secret(hs, &client_hello)) {
|
617
708
|
return ssl_hs_error;
|
618
709
|
}
|
619
710
|
|
@@ -629,6 +720,7 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
|
|
629
720
|
}
|
630
721
|
|
631
722
|
ssl->method->next_message(ssl);
|
723
|
+
hs->ech_client_hello_buf.Reset();
|
632
724
|
hs->tls13_state = state13_send_server_hello;
|
633
725
|
return ssl_hs_ok;
|
634
726
|
}
|
@@ -637,62 +729,61 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
|
|
637
729
|
SSL *const ssl = hs->ssl;
|
638
730
|
|
639
731
|
Span<uint8_t> random(ssl->s3->server_random);
|
640
|
-
RAND_bytes(random.data(), random.size());
|
641
|
-
|
642
|
-
// If the ClientHello has an ech_is_inner extension, we must be the ECH
|
643
|
-
// backend server. In response to ech_is_inner, we will overwrite part of the
|
644
|
-
// ServerHello.random with the ECH acceptance confirmation.
|
645
|
-
if (hs->ech_is_inner_present) {
|
646
|
-
// Construct the ServerHelloECHConf message, which is the same as
|
647
|
-
// ServerHello, except the last 8 bytes of its random field are zeroed out.
|
648
|
-
Span<uint8_t> random_suffix = random.subspan(24);
|
649
|
-
OPENSSL_memset(random_suffix.data(), 0, random_suffix.size());
|
650
|
-
|
651
|
-
ScopedCBB cbb;
|
652
|
-
CBB body, extensions, session_id;
|
653
|
-
if (!ssl->method->init_message(ssl, cbb.get(), &body,
|
654
|
-
SSL3_MT_SERVER_HELLO) ||
|
655
|
-
!CBB_add_u16(&body, TLS1_2_VERSION) ||
|
656
|
-
!CBB_add_bytes(&body, random.data(), random.size()) ||
|
657
|
-
!CBB_add_u8_length_prefixed(&body, &session_id) ||
|
658
|
-
!CBB_add_bytes(&session_id, hs->session_id, hs->session_id_len) ||
|
659
|
-
!CBB_add_u16(&body, SSL_CIPHER_get_protocol_id(hs->new_cipher)) ||
|
660
|
-
!CBB_add_u8(&body, 0) ||
|
661
|
-
!CBB_add_u16_length_prefixed(&body, &extensions) ||
|
662
|
-
!ssl_ext_pre_shared_key_add_serverhello(hs, &extensions) ||
|
663
|
-
!ssl_ext_key_share_add_serverhello(hs, &extensions, /*dry_run=*/true) ||
|
664
|
-
!ssl_ext_supported_versions_add_serverhello(hs, &extensions) ||
|
665
|
-
!CBB_flush(cbb.get())) {
|
666
|
-
return ssl_hs_error;
|
667
|
-
}
|
668
732
|
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
733
|
+
SSL_HANDSHAKE_HINTS *const hints = hs->hints.get();
|
734
|
+
if (hints && !hs->hints_requested &&
|
735
|
+
hints->server_random.size() == random.size()) {
|
736
|
+
OPENSSL_memcpy(random.data(), hints->server_random.data(), random.size());
|
737
|
+
} else {
|
738
|
+
RAND_bytes(random.data(), random.size());
|
739
|
+
if (hints && hs->hints_requested &&
|
740
|
+
!hints->server_random.CopyFrom(random)) {
|
674
741
|
return ssl_hs_error;
|
675
742
|
}
|
676
743
|
}
|
677
744
|
|
678
|
-
|
745
|
+
Array<uint8_t> server_hello;
|
679
746
|
ScopedCBB cbb;
|
680
747
|
CBB body, extensions, session_id;
|
681
748
|
if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_SERVER_HELLO) ||
|
682
749
|
!CBB_add_u16(&body, TLS1_2_VERSION) ||
|
683
|
-
!CBB_add_bytes(&body,
|
750
|
+
!CBB_add_bytes(&body, ssl->s3->server_random,
|
751
|
+
sizeof(ssl->s3->server_random)) ||
|
684
752
|
!CBB_add_u8_length_prefixed(&body, &session_id) ||
|
685
753
|
!CBB_add_bytes(&session_id, hs->session_id, hs->session_id_len) ||
|
686
754
|
!CBB_add_u16(&body, SSL_CIPHER_get_protocol_id(hs->new_cipher)) ||
|
687
755
|
!CBB_add_u8(&body, 0) ||
|
688
756
|
!CBB_add_u16_length_prefixed(&body, &extensions) ||
|
689
757
|
!ssl_ext_pre_shared_key_add_serverhello(hs, &extensions) ||
|
690
|
-
!ssl_ext_key_share_add_serverhello(hs, &extensions
|
758
|
+
!ssl_ext_key_share_add_serverhello(hs, &extensions) ||
|
691
759
|
!ssl_ext_supported_versions_add_serverhello(hs, &extensions) ||
|
692
|
-
!
|
760
|
+
!ssl->method->finish_message(ssl, cbb.get(), &server_hello)) {
|
693
761
|
return ssl_hs_error;
|
694
762
|
}
|
695
763
|
|
764
|
+
assert(!ssl->s3->ech_accept || hs->ech_is_inner_present);
|
765
|
+
if (hs->ech_is_inner_present) {
|
766
|
+
// Fill in the ECH confirmation signal.
|
767
|
+
Span<uint8_t> random_suffix =
|
768
|
+
random.subspan(SSL3_RANDOM_SIZE - ECH_CONFIRMATION_SIGNAL_LEN);
|
769
|
+
if (!ssl_ech_accept_confirmation(hs, random_suffix, hs->transcript,
|
770
|
+
server_hello)) {
|
771
|
+
return ssl_hs_error;
|
772
|
+
}
|
773
|
+
|
774
|
+
// Update |server_hello|.
|
775
|
+
const size_t offset = ssl_ech_confirmation_signal_hello_offset(ssl);
|
776
|
+
Span<uint8_t> server_hello_out =
|
777
|
+
MakeSpan(server_hello).subspan(offset, ECH_CONFIRMATION_SIGNAL_LEN);
|
778
|
+
OPENSSL_memcpy(server_hello_out.data(), random_suffix.data(),
|
779
|
+
ECH_CONFIRMATION_SIGNAL_LEN);
|
780
|
+
}
|
781
|
+
|
782
|
+
if (!ssl->method->add_message(ssl, std::move(server_hello))) {
|
783
|
+
return ssl_hs_error;
|
784
|
+
}
|
785
|
+
|
786
|
+
hs->ecdh_public_key.Reset(); // No longer needed.
|
696
787
|
if (!ssl->s3->used_hello_retry_request &&
|
697
788
|
!ssl->method->add_change_cipher_spec(ssl)) {
|
698
789
|
return ssl_hs_error;
|
@@ -719,7 +810,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
|
|
719
810
|
hs->cert_request = !!(hs->config->verify_mode & SSL_VERIFY_PEER);
|
720
811
|
// Only request a certificate if Channel ID isn't negotiated.
|
721
812
|
if ((hs->config->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) &&
|
722
|
-
|
813
|
+
hs->channel_id_negotiated) {
|
723
814
|
hs->cert_request = false;
|
724
815
|
}
|
725
816
|
}
|
@@ -796,6 +887,11 @@ static enum ssl_hs_wait_t do_send_server_certificate_verify(SSL_HANDSHAKE *hs) {
|
|
796
887
|
|
797
888
|
static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
|
798
889
|
SSL *const ssl = hs->ssl;
|
890
|
+
if (hs->hints_requested) {
|
891
|
+
return ssl_hs_hints_ready;
|
892
|
+
}
|
893
|
+
|
894
|
+
hs->can_release_private_key = true;
|
799
895
|
if (!tls13_add_finished(hs) ||
|
800
896
|
// Update the secret to the master secret and derive traffic keys.
|
801
897
|
!tls13_advance_key_schedule(
|
@@ -873,9 +969,8 @@ static enum ssl_hs_wait_t do_read_second_client_flight(SSL_HANDSHAKE *hs) {
|
|
873
969
|
hs->in_early_data = true;
|
874
970
|
}
|
875
971
|
|
876
|
-
// QUIC doesn't use an EndOfEarlyData message (
|
877
|
-
//
|
878
|
-
// return.
|
972
|
+
// QUIC doesn't use an EndOfEarlyData message (RFC 9001, section 8.3), so we
|
973
|
+
// switch to client_handshake_secret before the early return.
|
879
974
|
if (ssl->quic_method != nullptr) {
|
880
975
|
if (!tls13_set_traffic_key(ssl, ssl_encryption_handshake, evp_aead_open,
|
881
976
|
hs->new_session.get(),
|
@@ -1051,7 +1146,7 @@ static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs) {
|
|
1051
1146
|
|
1052
1147
|
static enum ssl_hs_wait_t do_read_channel_id(SSL_HANDSHAKE *hs) {
|
1053
1148
|
SSL *const ssl = hs->ssl;
|
1054
|
-
if (!
|
1149
|
+
if (!hs->channel_id_negotiated) {
|
1055
1150
|
hs->tls13_state = state13_read_client_finished;
|
1056
1151
|
return ssl_hs_ok;
|
1057
1152
|
}
|