grpc 1.37.1 → 1.38.0.pre1
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 +64 -58
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/channel_args.h +28 -0
- data/include/grpc/event_engine/event_engine.h +336 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/event_engine/slice_allocator.h +81 -0
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security_constants.h +14 -0
- data/include/grpc/impl/codegen/grpc_types.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +5 -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 +628 -3101
- 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 +26 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- 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/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/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 +36 -30
- 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 +84 -61
- 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.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
- 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_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_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 +17 -9
- 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 +13 -11
- 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 +43 -28
- 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 +2188 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +90 -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 +16 -15
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -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 +1 -1
- 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 +2 -2
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
- 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 +31 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
- 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 +101 -93
- data/src/core/ext/xds/xds_api.h +6 -6
- 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 +3 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -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/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/slice_allocator.cc +59 -0
- data/src/core/lib/event_engine/sockaddr.cc +38 -0
- 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 +180 -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_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -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/exec_ctx.cc +4 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- 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 +1 -1
- 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 +1 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- 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 +5 -5
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +3 -3
- data/src/core/lib/iomgr/resolve_address.h +6 -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/socket_utils_common_posix.cc +22 -20
- 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 +15 -17
- 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 +36 -34
- 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 +23 -21
- data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
- 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_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/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 +9 -9
- 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/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 +14 -4
- 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 +22 -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 +46 -45
- data/src/core/lib/surface/call.h +2 -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 +46 -47
- data/src/core/lib/surface/completion_queue.h +2 -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 +19 -8
- 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 +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/tsi/alts/crypt/gsec.h +4 -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/rb_grpc_imports.generated.h +1 -1
- 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 +477 -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 +1 -1
- 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/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/err/err.c +87 -80
- 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/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/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
- 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 +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
- 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/urandom.c +26 -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 +45 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
- 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 +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -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 +39 -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_vfy.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- 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_val.c +2 -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/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
- 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/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -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 +1 -38
- 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/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
- 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/ssl.h +185 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- 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 +74 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +68 -45
- 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
@@ -15,6 +15,7 @@
|
|
15
15
|
#include <openssl/ssl.h>
|
16
16
|
|
17
17
|
#include <openssl/bytestring.h>
|
18
|
+
#include <openssl/err.h>
|
18
19
|
|
19
20
|
#include "internal.h"
|
20
21
|
|
@@ -93,7 +94,7 @@ bool SSL_serialize_handoff(const SSL *ssl, CBB *out,
|
|
93
94
|
!serialize_features(&seq) ||
|
94
95
|
!CBB_flush(out) ||
|
95
96
|
!ssl->method->get_message(ssl, &msg) ||
|
96
|
-
!ssl_client_hello_init(ssl, out_hello, msg)) {
|
97
|
+
!ssl_client_hello_init(ssl, out_hello, msg.body)) {
|
97
98
|
return false;
|
98
99
|
}
|
99
100
|
|
@@ -708,3 +709,245 @@ bool SSL_apply_handback(SSL *ssl, Span<const uint8_t> handback) {
|
|
708
709
|
}
|
709
710
|
|
710
711
|
BSSL_NAMESPACE_END
|
712
|
+
|
713
|
+
using namespace bssl;
|
714
|
+
|
715
|
+
int SSL_serialize_capabilities(const SSL *ssl, CBB *out) {
|
716
|
+
CBB seq;
|
717
|
+
if (!CBB_add_asn1(out, &seq, CBS_ASN1_SEQUENCE) ||
|
718
|
+
!serialize_features(&seq) || //
|
719
|
+
!CBB_flush(out)) {
|
720
|
+
return 0;
|
721
|
+
}
|
722
|
+
|
723
|
+
return 1;
|
724
|
+
}
|
725
|
+
|
726
|
+
int SSL_request_handshake_hints(SSL *ssl, const uint8_t *client_hello,
|
727
|
+
size_t client_hello_len,
|
728
|
+
const uint8_t *capabilities,
|
729
|
+
size_t capabilities_len) {
|
730
|
+
if (SSL_is_dtls(ssl)) {
|
731
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
732
|
+
return 0;
|
733
|
+
}
|
734
|
+
|
735
|
+
CBS cbs, seq;
|
736
|
+
CBS_init(&cbs, capabilities, capabilities_len);
|
737
|
+
UniquePtr<SSL_HANDSHAKE_HINTS> hints = MakeUnique<SSL_HANDSHAKE_HINTS>();
|
738
|
+
if (hints == nullptr ||
|
739
|
+
!CBS_get_asn1(&cbs, &seq, CBS_ASN1_SEQUENCE) ||
|
740
|
+
!apply_remote_features(ssl, &seq)) {
|
741
|
+
return 0;
|
742
|
+
}
|
743
|
+
|
744
|
+
SSL3_STATE *const s3 = ssl->s3;
|
745
|
+
s3->v2_hello_done = true;
|
746
|
+
s3->has_message = true;
|
747
|
+
|
748
|
+
Array<uint8_t> client_hello_msg;
|
749
|
+
ScopedCBB client_hello_cbb;
|
750
|
+
CBB client_hello_body;
|
751
|
+
if (!ssl->method->init_message(ssl, client_hello_cbb.get(),
|
752
|
+
&client_hello_body, SSL3_MT_CLIENT_HELLO) ||
|
753
|
+
!CBB_add_bytes(&client_hello_body, client_hello, client_hello_len) ||
|
754
|
+
!ssl->method->finish_message(ssl, client_hello_cbb.get(),
|
755
|
+
&client_hello_msg)) {
|
756
|
+
return 0;
|
757
|
+
}
|
758
|
+
|
759
|
+
s3->hs_buf.reset(BUF_MEM_new());
|
760
|
+
if (!s3->hs_buf || !BUF_MEM_append(s3->hs_buf.get(), client_hello_msg.data(),
|
761
|
+
client_hello_msg.size())) {
|
762
|
+
return 0;
|
763
|
+
}
|
764
|
+
|
765
|
+
s3->hs->hints_requested = true;
|
766
|
+
s3->hs->hints = std::move(hints);
|
767
|
+
return 1;
|
768
|
+
}
|
769
|
+
|
770
|
+
// |SSL_HANDSHAKE_HINTS| is serialized as the following ASN.1 structure. We use
|
771
|
+
// implicit tagging to make it a little more compact.
|
772
|
+
//
|
773
|
+
// HandshakeHints ::= SEQUENCE {
|
774
|
+
// serverRandom [0] IMPLICIT OCTET STRING OPTIONAL,
|
775
|
+
// keyShareHint [1] IMPLICIT KeyShareHint OPTIONAL,
|
776
|
+
// signatureHint [2] IMPLICIT SignatureHint OPTIONAL,
|
777
|
+
// -- At most one of decryptedPSKHint or ignorePSKHint may be present. It
|
778
|
+
// -- corresponds to the first entry in pre_shared_keys. TLS 1.2 session
|
779
|
+
// -- tickets will use a separate hint, to ensure the caller does not mix
|
780
|
+
// -- them up.
|
781
|
+
// decryptedPSKHint [3] IMPLICIT OCTET STRING OPTIONAL,
|
782
|
+
// ignorePSKHint [4] IMPLICIT NULL OPTIONAL,
|
783
|
+
// }
|
784
|
+
//
|
785
|
+
// KeyShareHint ::= SEQUENCE {
|
786
|
+
// groupId INTEGER,
|
787
|
+
// publicKey OCTET STRING,
|
788
|
+
// secret OCTET STRING,
|
789
|
+
// }
|
790
|
+
//
|
791
|
+
// SignatureHint ::= SEQUENCE {
|
792
|
+
// algorithm INTEGER,
|
793
|
+
// input OCTET STRING,
|
794
|
+
// subjectPublicKeyInfo OCTET STRING,
|
795
|
+
// signature OCTET STRING,
|
796
|
+
// }
|
797
|
+
|
798
|
+
// HandshakeHints tags.
|
799
|
+
static const unsigned kServerRandomTag = CBS_ASN1_CONTEXT_SPECIFIC | 0;
|
800
|
+
static const unsigned kKeyShareHintTag =
|
801
|
+
CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 1;
|
802
|
+
static const unsigned kSignatureHintTag =
|
803
|
+
CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 2;
|
804
|
+
static const unsigned kDecryptedPSKTag = CBS_ASN1_CONTEXT_SPECIFIC | 3;
|
805
|
+
static const unsigned kIgnorePSKTag = CBS_ASN1_CONTEXT_SPECIFIC | 4;
|
806
|
+
|
807
|
+
int SSL_serialize_handshake_hints(const SSL *ssl, CBB *out) {
|
808
|
+
const SSL_HANDSHAKE *hs = ssl->s3->hs.get();
|
809
|
+
if (!ssl->server || !hs->hints_requested) {
|
810
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
811
|
+
return 0;
|
812
|
+
}
|
813
|
+
|
814
|
+
const SSL_HANDSHAKE_HINTS *hints = hs->hints.get();
|
815
|
+
CBB seq, server_random, key_share_hint, signature_hint, decrypted_psk,
|
816
|
+
ignore_psk;
|
817
|
+
if (!CBB_add_asn1(out, &seq, CBS_ASN1_SEQUENCE)) {
|
818
|
+
return 0;
|
819
|
+
}
|
820
|
+
|
821
|
+
if (!hints->server_random.empty()) {
|
822
|
+
if (!CBB_add_asn1(&seq, &server_random, kServerRandomTag) ||
|
823
|
+
!CBB_add_bytes(&server_random, hints->server_random.data(),
|
824
|
+
hints->server_random.size())) {
|
825
|
+
return 0;
|
826
|
+
}
|
827
|
+
}
|
828
|
+
|
829
|
+
if (hints->key_share_group_id != 0 && !hints->key_share_public_key.empty() &&
|
830
|
+
!hints->key_share_secret.empty()) {
|
831
|
+
if (!CBB_add_asn1(&seq, &key_share_hint, kKeyShareHintTag) ||
|
832
|
+
!CBB_add_asn1_uint64(&key_share_hint, hints->key_share_group_id) ||
|
833
|
+
!CBB_add_asn1_octet_string(&key_share_hint,
|
834
|
+
hints->key_share_public_key.data(),
|
835
|
+
hints->key_share_public_key.size()) ||
|
836
|
+
!CBB_add_asn1_octet_string(&key_share_hint,
|
837
|
+
hints->key_share_secret.data(),
|
838
|
+
hints->key_share_secret.size())) {
|
839
|
+
return 0;
|
840
|
+
}
|
841
|
+
}
|
842
|
+
|
843
|
+
if (hints->signature_algorithm != 0 && !hints->signature_input.empty() &&
|
844
|
+
!hints->signature.empty()) {
|
845
|
+
if (!CBB_add_asn1(&seq, &signature_hint, kSignatureHintTag) ||
|
846
|
+
!CBB_add_asn1_uint64(&signature_hint, hints->signature_algorithm) ||
|
847
|
+
!CBB_add_asn1_octet_string(&signature_hint,
|
848
|
+
hints->signature_input.data(),
|
849
|
+
hints->signature_input.size()) ||
|
850
|
+
!CBB_add_asn1_octet_string(&signature_hint,
|
851
|
+
hints->signature_spki.data(),
|
852
|
+
hints->signature_spki.size()) ||
|
853
|
+
!CBB_add_asn1_octet_string(&signature_hint, hints->signature.data(),
|
854
|
+
hints->signature.size())) {
|
855
|
+
return 0;
|
856
|
+
}
|
857
|
+
}
|
858
|
+
|
859
|
+
if (!hints->decrypted_psk.empty()) {
|
860
|
+
if (!CBB_add_asn1(&seq, &decrypted_psk, kDecryptedPSKTag) ||
|
861
|
+
!CBB_add_bytes(&decrypted_psk, hints->decrypted_psk.data(),
|
862
|
+
hints->decrypted_psk.size())) {
|
863
|
+
return 0;
|
864
|
+
}
|
865
|
+
}
|
866
|
+
|
867
|
+
if (hints->ignore_psk && //
|
868
|
+
!CBB_add_asn1(&seq, &ignore_psk, kIgnorePSKTag)) {
|
869
|
+
return 0;
|
870
|
+
}
|
871
|
+
|
872
|
+
return CBB_flush(out);
|
873
|
+
}
|
874
|
+
|
875
|
+
int SSL_set_handshake_hints(SSL *ssl, const uint8_t *hints, size_t hints_len) {
|
876
|
+
if (SSL_is_dtls(ssl)) {
|
877
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
878
|
+
return 0;
|
879
|
+
}
|
880
|
+
|
881
|
+
UniquePtr<SSL_HANDSHAKE_HINTS> hints_obj = MakeUnique<SSL_HANDSHAKE_HINTS>();
|
882
|
+
if (hints_obj == nullptr) {
|
883
|
+
return 0;
|
884
|
+
}
|
885
|
+
|
886
|
+
CBS cbs, seq, server_random, key_share, signature_hint, ticket, ignore_psk;
|
887
|
+
int has_server_random, has_key_share, has_signature_hint, has_ticket,
|
888
|
+
has_ignore_psk;
|
889
|
+
CBS_init(&cbs, hints, hints_len);
|
890
|
+
if (!CBS_get_asn1(&cbs, &seq, CBS_ASN1_SEQUENCE) ||
|
891
|
+
!CBS_get_optional_asn1(&seq, &server_random, &has_server_random,
|
892
|
+
kServerRandomTag) ||
|
893
|
+
!CBS_get_optional_asn1(&seq, &key_share, &has_key_share,
|
894
|
+
kKeyShareHintTag) ||
|
895
|
+
!CBS_get_optional_asn1(&seq, &signature_hint, &has_signature_hint,
|
896
|
+
kSignatureHintTag) ||
|
897
|
+
!CBS_get_optional_asn1(&seq, &ticket, &has_ticket, kDecryptedPSKTag) ||
|
898
|
+
!CBS_get_optional_asn1(&seq, &ignore_psk, &has_ignore_psk,
|
899
|
+
kIgnorePSKTag)) {
|
900
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_COULD_NOT_PARSE_HINTS);
|
901
|
+
return 0;
|
902
|
+
}
|
903
|
+
|
904
|
+
if (has_server_random && !hints_obj->server_random.CopyFrom(server_random)) {
|
905
|
+
return 0;
|
906
|
+
}
|
907
|
+
|
908
|
+
if (has_key_share) {
|
909
|
+
uint64_t group_id;
|
910
|
+
CBS public_key, secret;
|
911
|
+
if (!CBS_get_asn1_uint64(&key_share, &group_id) || //
|
912
|
+
group_id == 0 || group_id > 0xffff ||
|
913
|
+
!CBS_get_asn1(&key_share, &public_key, CBS_ASN1_OCTETSTRING) ||
|
914
|
+
!hints_obj->key_share_public_key.CopyFrom(public_key) ||
|
915
|
+
!CBS_get_asn1(&key_share, &secret, CBS_ASN1_OCTETSTRING) ||
|
916
|
+
!hints_obj->key_share_secret.CopyFrom(secret)) {
|
917
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_COULD_NOT_PARSE_HINTS);
|
918
|
+
return 0;
|
919
|
+
}
|
920
|
+
hints_obj->key_share_group_id = static_cast<uint16_t>(group_id);
|
921
|
+
}
|
922
|
+
|
923
|
+
if (has_signature_hint) {
|
924
|
+
uint64_t sig_alg;
|
925
|
+
CBS input, spki, signature;
|
926
|
+
if (!CBS_get_asn1_uint64(&signature_hint, &sig_alg) || //
|
927
|
+
sig_alg == 0 || sig_alg > 0xffff ||
|
928
|
+
!CBS_get_asn1(&signature_hint, &input, CBS_ASN1_OCTETSTRING) ||
|
929
|
+
!hints_obj->signature_input.CopyFrom(input) ||
|
930
|
+
!CBS_get_asn1(&signature_hint, &spki, CBS_ASN1_OCTETSTRING) ||
|
931
|
+
!hints_obj->signature_spki.CopyFrom(spki) ||
|
932
|
+
!CBS_get_asn1(&signature_hint, &signature, CBS_ASN1_OCTETSTRING) ||
|
933
|
+
!hints_obj->signature.CopyFrom(signature)) {
|
934
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_COULD_NOT_PARSE_HINTS);
|
935
|
+
return 0;
|
936
|
+
}
|
937
|
+
hints_obj->signature_algorithm = static_cast<uint16_t>(sig_alg);
|
938
|
+
}
|
939
|
+
|
940
|
+
if (has_ticket && !hints_obj->decrypted_psk.CopyFrom(ticket)) {
|
941
|
+
return 0;
|
942
|
+
}
|
943
|
+
|
944
|
+
if (has_ignore_psk) {
|
945
|
+
if (CBS_len(&ignore_psk) != 0) {
|
946
|
+
return 0;
|
947
|
+
}
|
948
|
+
hints_obj->ignore_psk = true;
|
949
|
+
}
|
950
|
+
|
951
|
+
ssl->s3->hs->hints = std::move(hints_obj);
|
952
|
+
return 1;
|
953
|
+
}
|
@@ -126,6 +126,7 @@ BSSL_NAMESPACE_BEGIN
|
|
126
126
|
|
127
127
|
SSL_HANDSHAKE::SSL_HANDSHAKE(SSL *ssl_arg)
|
128
128
|
: ssl(ssl_arg),
|
129
|
+
ech_accept(false),
|
129
130
|
ech_present(false),
|
130
131
|
ech_is_inner_present(false),
|
131
132
|
scts_requested(false),
|
@@ -148,6 +149,7 @@ SSL_HANDSHAKE::SSL_HANDSHAKE(SSL *ssl_arg)
|
|
148
149
|
pending_private_key_op(false),
|
149
150
|
grease_seeded(false),
|
150
151
|
handback(false),
|
152
|
+
hints_requested(false),
|
151
153
|
cert_compression_negotiated(false),
|
152
154
|
apply_jdk11_workaround(false) {
|
153
155
|
assert(ssl);
|
@@ -164,6 +166,28 @@ void SSL_HANDSHAKE::ResizeSecrets(size_t hash_len) {
|
|
164
166
|
hash_len_ = hash_len;
|
165
167
|
}
|
166
168
|
|
169
|
+
bool SSL_HANDSHAKE::GetClientHello(SSLMessage *out_msg,
|
170
|
+
SSL_CLIENT_HELLO *out_client_hello) {
|
171
|
+
if (!ech_client_hello_buf.empty()) {
|
172
|
+
// If the backing buffer is non-empty, the ClientHelloInner has been set.
|
173
|
+
out_msg->is_v2_hello = false;
|
174
|
+
out_msg->type = SSL3_MT_CLIENT_HELLO;
|
175
|
+
out_msg->raw = CBS(ech_client_hello_buf);
|
176
|
+
out_msg->body = MakeConstSpan(ech_client_hello_buf).subspan(4);
|
177
|
+
} else if (!ssl->method->get_message(ssl, out_msg)) {
|
178
|
+
// The message has already been read, so this cannot fail.
|
179
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
180
|
+
return false;
|
181
|
+
}
|
182
|
+
|
183
|
+
if (!ssl_client_hello_init(ssl, out_client_hello, out_msg->body)) {
|
184
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
|
185
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
186
|
+
return false;
|
187
|
+
}
|
188
|
+
return true;
|
189
|
+
}
|
190
|
+
|
167
191
|
UniquePtr<SSL_HANDSHAKE> ssl_handshake_new(SSL *ssl) {
|
168
192
|
UniquePtr<SSL_HANDSHAKE> hs = MakeUnique<SSL_HANDSHAKE>(ssl);
|
169
193
|
if (!hs || !hs->transcript.Init()) {
|
@@ -552,7 +576,11 @@ const SSL_SESSION *ssl_handshake_session(const SSL_HANDSHAKE *hs) {
|
|
552
576
|
int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return) {
|
553
577
|
SSL *const ssl = hs->ssl;
|
554
578
|
for (;;) {
|
555
|
-
// Resolve the operation the handshake was waiting on.
|
579
|
+
// Resolve the operation the handshake was waiting on. Each condition may
|
580
|
+
// halt the handshake by returning, or continue executing if the handshake
|
581
|
+
// may immediately proceed. Cases which halt the handshake can clear
|
582
|
+
// |hs->wait| to re-enter the state machine on the next iteration, or leave
|
583
|
+
// it set to keep the condition sticky.
|
556
584
|
switch (hs->wait) {
|
557
585
|
case ssl_hs_error:
|
558
586
|
ERR_restore_state(hs->error.get());
|
@@ -570,13 +598,13 @@ int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return) {
|
|
570
598
|
case ssl_hs_read_message:
|
571
599
|
case ssl_hs_read_change_cipher_spec: {
|
572
600
|
if (ssl->quic_method) {
|
601
|
+
// QUIC has no ChangeCipherSpec messages.
|
602
|
+
assert(hs->wait != ssl_hs_read_change_cipher_spec);
|
603
|
+
// The caller should call |SSL_provide_quic_data|. Clear |hs->wait| so
|
604
|
+
// the handshake can check if there is sufficient data next iteration.
|
605
|
+
ssl->s3->rwstate = SSL_ERROR_WANT_READ;
|
573
606
|
hs->wait = ssl_hs_ok;
|
574
|
-
|
575
|
-
if (hs->wait != ssl_hs_read_change_cipher_spec) {
|
576
|
-
ssl->s3->rwstate = SSL_ERROR_WANT_READ;
|
577
|
-
return -1;
|
578
|
-
}
|
579
|
-
break;
|
607
|
+
return -1;
|
580
608
|
}
|
581
609
|
|
582
610
|
uint8_t alert = SSL_AD_DECODE_ERROR;
|
@@ -646,31 +674,30 @@ int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return) {
|
|
646
674
|
return -1;
|
647
675
|
}
|
648
676
|
|
677
|
+
// The following cases are associated with callback APIs which expect to
|
678
|
+
// be called each time the state machine runs. Thus they set |hs->wait|
|
679
|
+
// to |ssl_hs_ok| so that, next time, we re-enter the state machine and
|
680
|
+
// call the callback again.
|
649
681
|
case ssl_hs_x509_lookup:
|
650
682
|
ssl->s3->rwstate = SSL_ERROR_WANT_X509_LOOKUP;
|
651
683
|
hs->wait = ssl_hs_ok;
|
652
684
|
return -1;
|
653
|
-
|
654
685
|
case ssl_hs_channel_id_lookup:
|
655
686
|
ssl->s3->rwstate = SSL_ERROR_WANT_CHANNEL_ID_LOOKUP;
|
656
687
|
hs->wait = ssl_hs_ok;
|
657
688
|
return -1;
|
658
|
-
|
659
689
|
case ssl_hs_private_key_operation:
|
660
690
|
ssl->s3->rwstate = SSL_ERROR_WANT_PRIVATE_KEY_OPERATION;
|
661
691
|
hs->wait = ssl_hs_ok;
|
662
692
|
return -1;
|
663
|
-
|
664
693
|
case ssl_hs_pending_session:
|
665
694
|
ssl->s3->rwstate = SSL_ERROR_PENDING_SESSION;
|
666
695
|
hs->wait = ssl_hs_ok;
|
667
696
|
return -1;
|
668
|
-
|
669
697
|
case ssl_hs_pending_ticket:
|
670
698
|
ssl->s3->rwstate = SSL_ERROR_PENDING_TICKET;
|
671
699
|
hs->wait = ssl_hs_ok;
|
672
700
|
return -1;
|
673
|
-
|
674
701
|
case ssl_hs_certificate_verify:
|
675
702
|
ssl->s3->rwstate = SSL_ERROR_WANT_CERTIFICATE_VERIFY;
|
676
703
|
hs->wait = ssl_hs_ok;
|
@@ -687,6 +714,10 @@ int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return) {
|
|
687
714
|
hs->wait = ssl_hs_ok;
|
688
715
|
return 1;
|
689
716
|
|
717
|
+
case ssl_hs_hints_ready:
|
718
|
+
ssl->s3->rwstate = SSL_ERROR_HANDSHAKE_HINTS_READY;
|
719
|
+
return -1;
|
720
|
+
|
690
721
|
case ssl_hs_ok:
|
691
722
|
break;
|
692
723
|
}
|
@@ -154,6 +154,8 @@
|
|
154
154
|
#include <openssl/bn.h>
|
155
155
|
#include <openssl/bytestring.h>
|
156
156
|
#include <openssl/cipher.h>
|
157
|
+
#include <openssl/curve25519.h>
|
158
|
+
#include <openssl/digest.h>
|
157
159
|
#include <openssl/ec.h>
|
158
160
|
#include <openssl/ecdsa.h>
|
159
161
|
#include <openssl/err.h>
|
@@ -167,6 +169,7 @@
|
|
167
169
|
|
168
170
|
#include "internal.h"
|
169
171
|
#include "../crypto/internal.h"
|
172
|
+
#include "../crypto/hpke/internal.h"
|
170
173
|
|
171
174
|
|
172
175
|
BSSL_NAMESPACE_BEGIN
|
@@ -563,7 +566,7 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
|
|
563
566
|
}
|
564
567
|
|
565
568
|
SSL_CLIENT_HELLO client_hello;
|
566
|
-
if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
|
569
|
+
if (!ssl_client_hello_init(ssl, &client_hello, msg.body)) {
|
567
570
|
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
568
571
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
569
572
|
return ssl_hs_error;
|
@@ -581,12 +584,137 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
|
|
581
584
|
return ssl_hs_handoff;
|
582
585
|
}
|
583
586
|
|
587
|
+
// If the ClientHello contains an encrypted_client_hello extension (and no
|
588
|
+
// ech_is_inner extension), act as a client-facing server and attempt to
|
589
|
+
// decrypt the ClientHelloInner.
|
590
|
+
CBS ech_body;
|
591
|
+
if (ssl_client_hello_get_extension(&client_hello, &ech_body,
|
592
|
+
TLSEXT_TYPE_encrypted_client_hello)) {
|
593
|
+
CBS unused;
|
594
|
+
if (ssl_client_hello_get_extension(&client_hello, &unused,
|
595
|
+
TLSEXT_TYPE_ech_is_inner)) {
|
596
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
|
597
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
598
|
+
return ssl_hs_error;
|
599
|
+
}
|
600
|
+
|
601
|
+
// Parse a ClientECH out of the extension body.
|
602
|
+
uint16_t kdf_id, aead_id;
|
603
|
+
CBS config_id, enc, payload;
|
604
|
+
if (!CBS_get_u16(&ech_body, &kdf_id) || //
|
605
|
+
!CBS_get_u16(&ech_body, &aead_id) ||
|
606
|
+
!CBS_get_u8_length_prefixed(&ech_body, &config_id) ||
|
607
|
+
!CBS_get_u16_length_prefixed(&ech_body, &enc) ||
|
608
|
+
!CBS_get_u16_length_prefixed(&ech_body, &payload) ||
|
609
|
+
CBS_len(&ech_body) != 0) {
|
610
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
611
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
612
|
+
return ssl_hs_error;
|
613
|
+
}
|
614
|
+
|
615
|
+
{
|
616
|
+
MutexReadLock lock(&ssl->ctx->lock);
|
617
|
+
hs->ech_server_config_list = UpRef(ssl->ctx->ech_server_config_list);
|
618
|
+
}
|
619
|
+
|
620
|
+
if (hs->ech_server_config_list) {
|
621
|
+
for (const ECHServerConfig &ech_config :
|
622
|
+
hs->ech_server_config_list->configs) {
|
623
|
+
// Skip this config if the client-provided config_id does not match or
|
624
|
+
// if the client indicated an unsupported HPKE ciphersuite.
|
625
|
+
if (config_id != ech_config.config_id_sha256() ||
|
626
|
+
!ech_config.SupportsCipherSuite(kdf_id, aead_id)) {
|
627
|
+
continue;
|
628
|
+
}
|
629
|
+
|
630
|
+
static const uint8_t kInfoLabel[] = "tls ech";
|
631
|
+
ScopedCBB info_cbb;
|
632
|
+
if (!CBB_init(info_cbb.get(),
|
633
|
+
sizeof(kInfoLabel) + ech_config.raw().size()) ||
|
634
|
+
!CBB_add_bytes(info_cbb.get(), kInfoLabel,
|
635
|
+
sizeof(kInfoLabel) /* includes trailing NUL */) ||
|
636
|
+
!CBB_add_bytes(info_cbb.get(), ech_config.raw().data(),
|
637
|
+
ech_config.raw().size())) {
|
638
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
639
|
+
return ssl_hs_error;
|
640
|
+
}
|
641
|
+
|
642
|
+
// Set up a fresh HPKE context for each decryption attempt.
|
643
|
+
hs->ech_hpke_ctx.Reset();
|
644
|
+
|
645
|
+
if (CBS_len(&enc) != X25519_PUBLIC_VALUE_LEN ||
|
646
|
+
!EVP_HPKE_CTX_setup_base_r_x25519(
|
647
|
+
hs->ech_hpke_ctx.get(), kdf_id, aead_id, CBS_data(&enc),
|
648
|
+
CBS_len(&enc), ech_config.public_key().data(),
|
649
|
+
ech_config.public_key().size(), ech_config.private_key().data(),
|
650
|
+
ech_config.private_key().size(), CBB_data(info_cbb.get()),
|
651
|
+
CBB_len(info_cbb.get()))) {
|
652
|
+
// Ignore the error and try another ECHConfig.
|
653
|
+
ERR_clear_error();
|
654
|
+
continue;
|
655
|
+
}
|
656
|
+
Array<uint8_t> encoded_client_hello_inner;
|
657
|
+
bool is_decrypt_error;
|
658
|
+
if (!ssl_client_hello_decrypt(hs->ech_hpke_ctx.get(),
|
659
|
+
&encoded_client_hello_inner,
|
660
|
+
&is_decrypt_error, &client_hello, kdf_id,
|
661
|
+
aead_id, config_id, enc, payload)) {
|
662
|
+
if (is_decrypt_error) {
|
663
|
+
// Ignore the error and try another ECHConfig.
|
664
|
+
ERR_clear_error();
|
665
|
+
continue;
|
666
|
+
}
|
667
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECRYPTION_FAILED);
|
668
|
+
return ssl_hs_error;
|
669
|
+
}
|
670
|
+
|
671
|
+
// Recover the ClientHelloInner from the EncodedClientHelloInner.
|
672
|
+
uint8_t alert = SSL_AD_DECODE_ERROR;
|
673
|
+
bssl::Array<uint8_t> client_hello_inner;
|
674
|
+
if (!ssl_decode_client_hello_inner(ssl, &alert, &client_hello_inner,
|
675
|
+
encoded_client_hello_inner,
|
676
|
+
&client_hello)) {
|
677
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
678
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
679
|
+
return ssl_hs_error;
|
680
|
+
}
|
681
|
+
hs->ech_client_hello_buf = std::move(client_hello_inner);
|
682
|
+
|
683
|
+
// Load the ClientHelloInner into |client_hello|.
|
684
|
+
if (!hs->GetClientHello(&msg, &client_hello)) {
|
685
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
686
|
+
return ssl_hs_error;
|
687
|
+
}
|
688
|
+
|
689
|
+
hs->ech_accept = true;
|
690
|
+
break;
|
691
|
+
}
|
692
|
+
}
|
693
|
+
|
694
|
+
// If we did not set |hs->ech_accept| to true, we will send the current
|
695
|
+
// ECHConfigs as retry_configs in the ServerHello's encrypted extensions.
|
696
|
+
// Proceed with the ClientHelloOuter.
|
697
|
+
}
|
698
|
+
|
584
699
|
uint8_t alert = SSL_AD_DECODE_ERROR;
|
585
700
|
if (!extract_sni(hs, &alert, &client_hello)) {
|
586
701
|
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
587
702
|
return ssl_hs_error;
|
588
703
|
}
|
589
704
|
|
705
|
+
hs->state = state12_read_client_hello_after_ech;
|
706
|
+
return ssl_hs_ok;
|
707
|
+
}
|
708
|
+
|
709
|
+
static enum ssl_hs_wait_t do_read_client_hello_after_ech(SSL_HANDSHAKE *hs) {
|
710
|
+
SSL *const ssl = hs->ssl;
|
711
|
+
|
712
|
+
SSLMessage msg_unused;
|
713
|
+
SSL_CLIENT_HELLO client_hello;
|
714
|
+
if (!hs->GetClientHello(&msg_unused, &client_hello)) {
|
715
|
+
return ssl_hs_error;
|
716
|
+
}
|
717
|
+
|
590
718
|
// Run the early callback.
|
591
719
|
if (ssl->ctx->select_certificate_cb != NULL) {
|
592
720
|
switch (ssl->ctx->select_certificate_cb(&client_hello)) {
|
@@ -614,6 +742,7 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
|
|
614
742
|
hs->apply_jdk11_workaround = true;
|
615
743
|
}
|
616
744
|
|
745
|
+
uint8_t alert = SSL_AD_DECODE_ERROR;
|
617
746
|
if (!negotiate_version(hs, &alert, &client_hello)) {
|
618
747
|
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
619
748
|
return ssl_hs_error;
|
@@ -657,11 +786,6 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
|
|
657
786
|
static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs) {
|
658
787
|
SSL *const ssl = hs->ssl;
|
659
788
|
|
660
|
-
SSLMessage msg;
|
661
|
-
if (!ssl->method->get_message(ssl, &msg)) {
|
662
|
-
return ssl_hs_read_message;
|
663
|
-
}
|
664
|
-
|
665
789
|
// Call |cert_cb| to update server certificates if required.
|
666
790
|
if (hs->config->cert->cert_cb != NULL) {
|
667
791
|
int rv = hs->config->cert->cert_cb(ssl, hs->config->cert->cert_cb_arg);
|
@@ -701,10 +825,22 @@ static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs) {
|
|
701
825
|
return ssl_hs_ok;
|
702
826
|
}
|
703
827
|
|
828
|
+
// It should not be possible to negotiate TLS 1.2 with ECH. The
|
829
|
+
// ClientHelloInner decoding function rejects ClientHellos which offer TLS 1.2
|
830
|
+
// or below.
|
831
|
+
assert(!hs->ech_accept);
|
832
|
+
|
833
|
+
// TODO(davidben): Also compute hints for TLS 1.2. When doing so, update the
|
834
|
+
// check in bssl_shim.cc to test this.
|
835
|
+
if (hs->hints_requested) {
|
836
|
+
return ssl_hs_hints_ready;
|
837
|
+
}
|
838
|
+
|
704
839
|
ssl->s3->early_data_reason = ssl_early_data_protocol_version;
|
705
840
|
|
841
|
+
SSLMessage msg_unused;
|
706
842
|
SSL_CLIENT_HELLO client_hello;
|
707
|
-
if (!
|
843
|
+
if (!hs->GetClientHello(&msg_unused, &client_hello)) {
|
708
844
|
return ssl_hs_error;
|
709
845
|
}
|
710
846
|
|
@@ -743,7 +879,7 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
|
|
743
879
|
}
|
744
880
|
|
745
881
|
SSL_CLIENT_HELLO client_hello;
|
746
|
-
if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
|
882
|
+
if (!ssl_client_hello_init(ssl, &client_hello, msg.body)) {
|
747
883
|
return ssl_hs_error;
|
748
884
|
}
|
749
885
|
|
@@ -1693,6 +1829,9 @@ enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs) {
|
|
1693
1829
|
case state12_read_client_hello:
|
1694
1830
|
ret = do_read_client_hello(hs);
|
1695
1831
|
break;
|
1832
|
+
case state12_read_client_hello_after_ech:
|
1833
|
+
ret = do_read_client_hello_after_ech(hs);
|
1834
|
+
break;
|
1696
1835
|
case state12_select_certificate:
|
1697
1836
|
ret = do_select_certificate(hs);
|
1698
1837
|
break;
|
@@ -1773,6 +1912,8 @@ const char *ssl_server_handshake_state(SSL_HANDSHAKE *hs) {
|
|
1773
1912
|
return "TLS server start_accept";
|
1774
1913
|
case state12_read_client_hello:
|
1775
1914
|
return "TLS server read_client_hello";
|
1915
|
+
case state12_read_client_hello_after_ech:
|
1916
|
+
return "TLS server read_client_hello_after_ech";
|
1776
1917
|
case state12_select_certificate:
|
1777
1918
|
return "TLS server select_certificate";
|
1778
1919
|
case state12_tls13:
|