grpc-flamingo 1.11.0 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +1150 -176
- data/etc/roots.pem +40 -196
- data/include/grpc/grpc.h +49 -8
- data/include/grpc/grpc_security.h +123 -2
- data/include/grpc/grpc_security_constants.h +6 -0
- data/include/grpc/impl/codegen/fork.h +4 -4
- data/include/grpc/impl/codegen/grpc_types.h +26 -5
- data/include/grpc/impl/codegen/log.h +112 -0
- data/include/grpc/impl/codegen/port_platform.h +55 -4
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/log.h +2 -80
- data/include/grpc/support/string_util.h +2 -0
- data/include/grpc/support/sync.h +0 -16
- data/src/boringssl/err_data.c +602 -588
- data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
- data/src/core/ext/filters/client_channel/client_channel.h +5 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
- data/src/core/ext/filters/client_channel/method_params.h +4 -0
- data/src/core/ext/filters/client_channel/resolver.h +10 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
- data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
- data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
- data/src/core/ext/filters/client_channel/subchannel.h +11 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
- data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
- data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
- data/src/core/lib/channel/channel_args.cc +28 -0
- data/src/core/lib/channel/channel_args.h +4 -0
- data/src/core/lib/channel/channel_stack.cc +22 -29
- data/src/core/lib/channel/channel_stack.h +2 -2
- data/src/core/lib/channel/channel_stack_builder.cc +0 -3
- data/src/core/lib/channel/channel_stack_builder.h +0 -2
- data/src/core/lib/channel/channel_trace.cc +28 -63
- data/src/core/lib/channel/channel_trace.h +13 -17
- data/src/core/lib/channel/channelz.cc +153 -0
- data/src/core/lib/channel/channelz.h +133 -0
- data/src/core/lib/channel/channelz_registry.cc +145 -0
- data/src/core/lib/channel/channelz_registry.h +120 -0
- data/src/core/lib/channel/connected_channel.cc +8 -1
- data/src/core/lib/channel/handshaker.cc +71 -0
- data/src/core/lib/channel/handshaker.h +4 -0
- data/src/core/lib/debug/stats.h +7 -0
- data/src/core/lib/debug/stats_data.cc +5 -0
- data/src/core/lib/debug/stats_data.h +120 -0
- data/src/core/lib/debug/trace.cc +2 -1
- data/src/core/lib/debug/trace.h +12 -1
- data/src/core/lib/gpr/alloc.h +28 -0
- data/src/core/lib/gpr/arena.cc +38 -45
- data/src/core/lib/gpr/log.cc +8 -2
- data/src/core/lib/gpr/log_android.cc +4 -0
- data/src/core/lib/gpr/log_linux.cc +4 -0
- data/src/core/lib/gpr/log_posix.cc +4 -0
- data/src/core/lib/gpr/log_windows.cc +5 -0
- data/src/core/lib/gpr/string.cc +28 -0
- data/src/core/lib/gpr/string.h +10 -0
- data/src/core/lib/gprpp/abstract.h +5 -2
- data/src/core/lib/gprpp/fork.cc +268 -0
- data/src/core/lib/gprpp/fork.h +88 -0
- data/src/core/lib/gprpp/inlined_vector.h +87 -37
- data/src/core/lib/gprpp/memory.h +12 -0
- data/src/core/lib/gprpp/mutex_lock.h +42 -0
- data/src/core/lib/gprpp/orphanable.h +10 -12
- data/src/core/lib/gprpp/ref_counted.h +10 -12
- data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
- data/src/core/lib/gprpp/thd.h +0 -3
- data/src/core/lib/gprpp/thd_posix.cc +5 -54
- data/src/core/lib/gprpp/thd_windows.cc +0 -7
- data/src/core/lib/http/httpcli_security_connector.cc +1 -3
- data/src/core/lib/iomgr/call_combiner.cc +13 -13
- data/src/core/lib/iomgr/call_combiner.h +84 -1
- data/src/core/lib/iomgr/closure.h +6 -5
- data/src/core/lib/iomgr/combiner.cc +30 -13
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +12 -0
- data/src/core/lib/iomgr/error.h +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
- data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
- data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
- data/src/core/lib/iomgr/ev_posix.cc +88 -24
- data/src/core/lib/iomgr/ev_posix.h +48 -12
- data/src/core/lib/iomgr/exec_ctx.cc +15 -9
- data/src/core/lib/iomgr/exec_ctx.h +48 -20
- data/src/core/lib/iomgr/executor.cc +274 -142
- data/src/core/lib/iomgr/executor.h +82 -16
- data/src/core/lib/iomgr/fork_posix.cc +42 -19
- data/src/core/lib/iomgr/iocp_windows.cc +9 -4
- data/src/core/lib/iomgr/iomgr.cc +2 -0
- data/src/core/lib/iomgr/iomgr.h +5 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +5 -1
- data/src/core/lib/iomgr/polling_entity.cc +11 -2
- data/src/core/lib/iomgr/pollset_custom.cc +2 -2
- data/src/core/lib/iomgr/port.h +51 -1
- data/src/core/lib/iomgr/resolve_address.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
- data/src/core/lib/iomgr/resource_quota.cc +89 -12
- data/src/core/lib/iomgr/resource_quota.h +16 -0
- data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +1 -1
- data/src/core/lib/iomgr/socket_utils.h +9 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
- data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
- data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
- data/src/core/lib/iomgr/socket_windows.cc +33 -0
- data/src/core/lib/iomgr/socket_windows.h +6 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
- data/src/core/lib/iomgr/tcp_custom.cc +11 -11
- data/src/core/lib/iomgr/tcp_posix.cc +49 -36
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
- data/src/core/lib/iomgr/tcp_uv.cc +3 -0
- data/src/core/lib/iomgr/tcp_windows.cc +18 -2
- data/src/core/lib/iomgr/tcp_windows.h +2 -0
- data/src/core/lib/iomgr/timer.h +4 -3
- data/src/core/lib/iomgr/timer_generic.cc +133 -51
- data/src/core/lib/iomgr/timer_manager.cc +12 -14
- data/src/core/lib/iomgr/timer_uv.cc +3 -0
- data/src/core/lib/iomgr/udp_server.cc +106 -52
- data/src/core/lib/iomgr/udp_server.h +8 -4
- data/src/core/lib/json/json.cc +12 -1
- data/src/core/lib/json/json.h +5 -0
- data/src/core/lib/profiling/basic_timers.cc +1 -0
- data/src/core/lib/security/context/security_context.cc +8 -8
- data/src/core/lib/security/context/security_context.h +6 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
- data/src/core/lib/security/credentials/credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
- data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
- data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
- data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
- data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
- data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
- data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
- data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
- data/src/core/lib/security/security_connector/security_connector.cc +79 -32
- data/src/core/lib/security/security_connector/security_connector.h +5 -3
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
- data/src/core/lib/security/transport/security_handshaker.cc +7 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
- data/src/core/lib/security/util/json_util.cc +4 -0
- data/src/core/lib/slice/slice.cc +6 -2
- data/src/core/lib/slice/slice_buffer.cc +27 -7
- data/src/core/lib/slice/slice_hash_table.h +4 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
- data/src/core/lib/surface/call.cc +119 -58
- data/src/core/lib/surface/call.h +7 -0
- data/src/core/lib/surface/channel.cc +50 -18
- data/src/core/lib/surface/channel.h +4 -0
- data/src/core/lib/surface/completion_queue.cc +153 -18
- data/src/core/lib/surface/completion_queue.h +20 -2
- data/src/core/lib/surface/completion_queue_factory.cc +13 -4
- data/src/core/lib/surface/init.cc +7 -8
- data/src/core/lib/surface/init.h +0 -1
- data/src/core/lib/surface/server.cc +16 -0
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/byte_stream.cc +1 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -7
- data/src/core/lib/transport/service_config.cc +2 -2
- data/src/core/lib/transport/service_config.h +3 -3
- data/src/core/lib/transport/transport.cc +22 -10
- data/src/core/lib/transport/transport.h +18 -18
- data/src/core/lib/transport/transport_op_string.cc +1 -8
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
- data/src/core/tsi/fake_transport_security.cc +1 -0
- data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
- data/src/core/tsi/local_transport_security.cc +209 -0
- data/src/core/tsi/local_transport_security.h +51 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +245 -116
- data/src/core/tsi/ssl_types.h +2 -0
- data/src/core/tsi/transport_security.cc +14 -0
- data/src/core/tsi/transport_security.h +2 -0
- data/src/core/tsi/transport_security_interface.h +11 -1
- data/src/ruby/bin/math_client.rb +17 -9
- data/src/ruby/ext/grpc/extconf.rb +1 -26
- data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
- data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +7 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
- data/src/ruby/spec/call_credentials_spec.rb +1 -1
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +1 -1
- data/src/ruby/spec/client_auth_spec.rb +1 -12
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/compression_options_spec.rb +1 -1
- data/src/ruby/spec/error_sanity_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
- data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/service_spec.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +1 -1
- data/src/ruby/spec/server_spec.rb +1 -1
- data/src/ruby/spec/spec_helper.rb +1 -0
- data/src/ruby/spec/support/services.rb +1 -1
- data/src/ruby/spec/time_consts_spec.rb +1 -1
- data/third_party/address_sorting/address_sorting.c +17 -11
- data/third_party/address_sorting/address_sorting_windows.c +43 -3
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
- data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
- data/third_party/boringssl/crypto/bio/fd.c +1 -0
- data/third_party/boringssl/crypto/bio/file.c +2 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
- data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
- data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
- data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
- data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
- data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
- data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
- data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
- data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
- data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
- data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
- data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
- data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
- data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
- data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
- data/third_party/boringssl/crypto/internal.h +65 -2
- data/third_party/boringssl/crypto/mem.c +0 -2
- data/third_party/boringssl/crypto/obj/obj.c +6 -73
- data/third_party/boringssl/crypto/thread_pthread.c +35 -5
- data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
- data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
- data/third_party/boringssl/crypto/x509/x_name.c +13 -0
- data/third_party/boringssl/include/openssl/aead.h +10 -0
- data/third_party/boringssl/include/openssl/asn1.h +2 -3
- data/third_party/boringssl/include/openssl/base.h +5 -14
- data/third_party/boringssl/include/openssl/bio.h +1 -1
- data/third_party/boringssl/include/openssl/bn.h +62 -18
- data/third_party/boringssl/include/openssl/bytestring.h +53 -28
- data/third_party/boringssl/include/openssl/crypto.h +4 -0
- data/third_party/boringssl/include/openssl/ec.h +10 -4
- data/third_party/boringssl/include/openssl/ec_key.h +7 -6
- data/third_party/boringssl/include/openssl/err.h +9 -9
- data/third_party/boringssl/include/openssl/evp.h +1 -1
- data/third_party/boringssl/include/openssl/rsa.h +35 -10
- data/third_party/boringssl/include/openssl/ssl.h +167 -19
- data/third_party/boringssl/include/openssl/ssl3.h +0 -1
- data/third_party/boringssl/include/openssl/stack.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +10 -2
- data/third_party/boringssl/include/openssl/x509.h +4 -0
- data/third_party/boringssl/include/openssl/x509v3.h +1 -0
- data/third_party/boringssl/ssl/d1_both.cc +16 -2
- data/third_party/boringssl/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl/ssl/handoff.cc +285 -0
- data/third_party/boringssl/ssl/handshake.cc +26 -12
- data/third_party/boringssl/ssl/handshake_client.cc +101 -95
- data/third_party/boringssl/ssl/handshake_server.cc +14 -2
- data/third_party/boringssl/ssl/internal.h +132 -79
- data/third_party/boringssl/ssl/s3_both.cc +2 -2
- data/third_party/boringssl/ssl/s3_lib.cc +3 -1
- data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
- data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
- data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
- data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
- data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
- data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
- data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
- data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
- data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
- data/third_party/boringssl/ssl/t1_enc.cc +73 -124
- data/third_party/boringssl/ssl/t1_lib.cc +367 -41
- data/third_party/boringssl/ssl/tls13_both.cc +8 -0
- data/third_party/boringssl/ssl/tls13_client.cc +98 -184
- data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
- data/third_party/boringssl/ssl/tls13_server.cc +91 -137
- data/third_party/boringssl/ssl/tls_method.cc +0 -17
- data/third_party/boringssl/ssl/tls_record.cc +1 -10
- data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
- data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
- data/third_party/boringssl/third_party/fiat/internal.h +32 -20
- data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
- metadata +86 -71
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
- data/src/core/lib/channel/channel_trace_registry.cc +0 -80
- data/src/core/lib/channel/channel_trace_registry.h +0 -43
- data/src/core/lib/gpr/fork.cc +0 -78
- data/src/core/tsi/transport_security_adapter.cc +0 -235
- data/src/core/tsi/transport_security_adapter.h +0 -41
- data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
- data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
- data/src/ruby/pb/test/client.rb +0 -764
- data/src/ruby/pb/test/server.rb +0 -252
- data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
- data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
- data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -223,7 +223,7 @@ static int ssl_write_client_cipher_list(SSL_HANDSHAKE *hs, CBB *out) {
|
|
223
223
|
|
224
224
|
// Add a fake cipher suite. See draft-davidben-tls-grease-01.
|
225
225
|
if (ssl->ctx->grease_enabled &&
|
226
|
-
!CBB_add_u16(&child, ssl_get_grease_value(
|
226
|
+
!CBB_add_u16(&child, ssl_get_grease_value(hs, ssl_grease_cipher))) {
|
227
227
|
return 0;
|
228
228
|
}
|
229
229
|
|
@@ -295,11 +295,6 @@ int ssl_write_client_hello(SSL_HANDSHAKE *hs) {
|
|
295
295
|
return 0;
|
296
296
|
}
|
297
297
|
|
298
|
-
// Renegotiations do not participate in session resumption.
|
299
|
-
int has_session_id = ssl->session != NULL &&
|
300
|
-
!ssl->s3->initial_handshake_complete &&
|
301
|
-
ssl->session->session_id_length > 0;
|
302
|
-
|
303
298
|
CBB child;
|
304
299
|
if (!CBB_add_u16(&body, hs->client_version) ||
|
305
300
|
!CBB_add_bytes(&body, ssl->s3->client_random, SSL3_RANDOM_SIZE) ||
|
@@ -307,19 +302,10 @@ int ssl_write_client_hello(SSL_HANDSHAKE *hs) {
|
|
307
302
|
return 0;
|
308
303
|
}
|
309
304
|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
}
|
315
|
-
} else {
|
316
|
-
// In TLS 1.3 experimental encodings, send a fake placeholder session ID
|
317
|
-
// when we do not otherwise have one to send.
|
318
|
-
if (hs->max_version >= TLS1_3_VERSION &&
|
319
|
-
ssl_is_resumption_variant(ssl->tls13_variant) &&
|
320
|
-
!CBB_add_bytes(&child, hs->session_id, hs->session_id_len)) {
|
321
|
-
return 0;
|
322
|
-
}
|
305
|
+
// Do not send a session ID on renegotiation.
|
306
|
+
if (!ssl->s3->initial_handshake_complete &&
|
307
|
+
!CBB_add_bytes(&child, hs->session_id, hs->session_id_len)) {
|
308
|
+
return 0;
|
323
309
|
}
|
324
310
|
|
325
311
|
if (SSL_is_dtls(ssl)) {
|
@@ -353,50 +339,21 @@ int ssl_write_client_hello(SSL_HANDSHAKE *hs) {
|
|
353
339
|
return ssl->method->add_message(ssl, std::move(msg));
|
354
340
|
}
|
355
341
|
|
356
|
-
static
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
|
363
|
-
return 0;
|
342
|
+
static bool parse_supported_versions(SSL_HANDSHAKE *hs, uint16_t *version,
|
343
|
+
const CBS *in) {
|
344
|
+
// If the outer version is not TLS 1.2, or there is no extensions block, use
|
345
|
+
// the outer version.
|
346
|
+
if (*version != TLS1_2_VERSION || CBS_len(in) == 0) {
|
347
|
+
return true;
|
364
348
|
}
|
365
349
|
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
return 0;
|
371
|
-
}
|
372
|
-
|
373
|
-
// The server version may also be in the supported_versions extension if
|
374
|
-
// applicable.
|
375
|
-
if (msg.type != SSL3_MT_SERVER_HELLO || *out != TLS1_2_VERSION) {
|
376
|
-
return 1;
|
377
|
-
}
|
378
|
-
|
379
|
-
uint8_t sid_length;
|
380
|
-
if (!CBS_skip(&server_hello, SSL3_RANDOM_SIZE) ||
|
381
|
-
!CBS_get_u8(&server_hello, &sid_length) ||
|
382
|
-
!CBS_skip(&server_hello, sid_length + 2 /* cipher_suite */ +
|
383
|
-
1 /* compression_method */)) {
|
384
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
385
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
386
|
-
return 0;
|
387
|
-
}
|
388
|
-
|
389
|
-
// The extensions block may not be present.
|
390
|
-
if (CBS_len(&server_hello) == 0) {
|
391
|
-
return 1;
|
392
|
-
}
|
393
|
-
|
394
|
-
CBS extensions;
|
395
|
-
if (!CBS_get_u16_length_prefixed(&server_hello, &extensions) ||
|
396
|
-
CBS_len(&server_hello) != 0) {
|
350
|
+
SSL *const ssl = hs->ssl;
|
351
|
+
CBS copy = *in, extensions;
|
352
|
+
if (!CBS_get_u16_length_prefixed(©, &extensions) ||
|
353
|
+
CBS_len(©) != 0) {
|
397
354
|
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
398
355
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
399
|
-
return
|
356
|
+
return false;
|
400
357
|
}
|
401
358
|
|
402
359
|
bool have_supported_versions;
|
@@ -411,17 +368,18 @@ static int parse_server_version(SSL_HANDSHAKE *hs, uint16_t *out,
|
|
411
368
|
OPENSSL_ARRAY_SIZE(ext_types),
|
412
369
|
1 /* ignore unknown */)) {
|
413
370
|
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
414
|
-
return
|
371
|
+
return false;
|
415
372
|
}
|
416
373
|
|
374
|
+
// Override the outer version with the extension, if present.
|
417
375
|
if (have_supported_versions &&
|
418
|
-
(!CBS_get_u16(&supported_versions,
|
376
|
+
(!CBS_get_u16(&supported_versions, version) ||
|
419
377
|
CBS_len(&supported_versions) != 0)) {
|
420
378
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
421
|
-
return
|
379
|
+
return false;
|
422
380
|
}
|
423
381
|
|
424
|
-
return
|
382
|
+
return true;
|
425
383
|
}
|
426
384
|
|
427
385
|
static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) {
|
@@ -472,7 +430,13 @@ static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) {
|
|
472
430
|
|
473
431
|
// Initialize a random session ID for the experimental TLS 1.3 variant
|
474
432
|
// requiring a session id.
|
475
|
-
if (
|
433
|
+
if (ssl->session != nullptr &&
|
434
|
+
!ssl->s3->initial_handshake_complete &&
|
435
|
+
ssl->session->session_id_length > 0) {
|
436
|
+
hs->session_id_len = ssl->session->session_id_length;
|
437
|
+
OPENSSL_memcpy(hs->session_id, ssl->session->session_id,
|
438
|
+
hs->session_id_len);
|
439
|
+
} else if (hs->max_version >= TLS1_3_VERSION) {
|
476
440
|
hs->session_id_len = sizeof(hs->session_id);
|
477
441
|
if (!RAND_bytes(hs->session_id, hs->session_id_len)) {
|
478
442
|
return ssl_hs_error;
|
@@ -501,8 +465,7 @@ static enum ssl_hs_wait_t do_enter_early_data(SSL_HANDSHAKE *hs) {
|
|
501
465
|
}
|
502
466
|
|
503
467
|
ssl->s3->aead_write_ctx->SetVersionIfNullCipher(ssl->session->ssl_version);
|
504
|
-
if (
|
505
|
-
!ssl->method->add_change_cipher_spec(ssl)) {
|
468
|
+
if (!ssl->method->add_change_cipher_spec(ssl)) {
|
506
469
|
return ssl_hs_error;
|
507
470
|
}
|
508
471
|
|
@@ -576,8 +539,26 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
576
539
|
return ssl_hs_read_server_hello;
|
577
540
|
}
|
578
541
|
|
579
|
-
|
580
|
-
|
542
|
+
if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
|
543
|
+
return ssl_hs_error;
|
544
|
+
}
|
545
|
+
|
546
|
+
CBS server_hello = msg.body, server_random, session_id;
|
547
|
+
uint16_t server_version, cipher_suite;
|
548
|
+
uint8_t compression_method;
|
549
|
+
if (!CBS_get_u16(&server_hello, &server_version) ||
|
550
|
+
!CBS_get_bytes(&server_hello, &server_random, SSL3_RANDOM_SIZE) ||
|
551
|
+
!CBS_get_u8_length_prefixed(&server_hello, &session_id) ||
|
552
|
+
CBS_len(&session_id) > SSL3_SESSION_ID_SIZE ||
|
553
|
+
!CBS_get_u16(&server_hello, &cipher_suite) ||
|
554
|
+
!CBS_get_u8(&server_hello, &compression_method)) {
|
555
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
556
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
557
|
+
return ssl_hs_error;
|
558
|
+
}
|
559
|
+
|
560
|
+
// Use the supported_versions extension if applicable.
|
561
|
+
if (!parse_supported_versions(hs, &server_version, &server_hello)) {
|
581
562
|
return ssl_hs_error;
|
582
563
|
}
|
583
564
|
|
@@ -618,30 +599,24 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
618
599
|
return ssl_hs_error;
|
619
600
|
}
|
620
601
|
|
621
|
-
if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
|
622
|
-
return ssl_hs_error;
|
623
|
-
}
|
624
|
-
|
625
|
-
CBS server_hello = msg.body, server_random, session_id;
|
626
|
-
uint16_t cipher_suite;
|
627
|
-
uint8_t compression_method;
|
628
|
-
if (!CBS_skip(&server_hello, 2 /* version */) ||
|
629
|
-
!CBS_get_bytes(&server_hello, &server_random, SSL3_RANDOM_SIZE) ||
|
630
|
-
!CBS_get_u8_length_prefixed(&server_hello, &session_id) ||
|
631
|
-
CBS_len(&session_id) > SSL3_SESSION_ID_SIZE ||
|
632
|
-
!CBS_get_u16(&server_hello, &cipher_suite) ||
|
633
|
-
!CBS_get_u8(&server_hello, &compression_method)) {
|
634
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
635
|
-
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
636
|
-
return ssl_hs_error;
|
637
|
-
}
|
638
|
-
|
639
602
|
// Copy over the server random.
|
640
603
|
OPENSSL_memcpy(ssl->s3->server_random, CBS_data(&server_random),
|
641
604
|
SSL3_RANDOM_SIZE);
|
642
605
|
|
643
|
-
//
|
644
|
-
//
|
606
|
+
// Measure, but do not enforce, the TLS 1.3 anti-downgrade feature, with a
|
607
|
+
// different value.
|
608
|
+
//
|
609
|
+
// For draft TLS 1.3 versions, it is not safe to deploy this feature. However,
|
610
|
+
// some TLS terminators are non-compliant and copy the origin server's value,
|
611
|
+
// so we wish to measure eventual compatibility impact.
|
612
|
+
if (!ssl->s3->initial_handshake_complete &&
|
613
|
+
hs->max_version >= TLS1_3_VERSION &&
|
614
|
+
OPENSSL_memcmp(ssl->s3->server_random + SSL3_RANDOM_SIZE -
|
615
|
+
sizeof(kDraftDowngradeRandom),
|
616
|
+
kDraftDowngradeRandom,
|
617
|
+
sizeof(kDraftDowngradeRandom)) == 0) {
|
618
|
+
ssl->s3->draft_downgrade = true;
|
619
|
+
}
|
645
620
|
|
646
621
|
if (!ssl->s3->initial_handshake_complete && ssl->session != NULL &&
|
647
622
|
ssl->session->session_id_length != 0 &&
|
@@ -649,6 +624,18 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
649
624
|
ssl->session->session_id_length)) {
|
650
625
|
ssl->s3->session_reused = true;
|
651
626
|
} else {
|
627
|
+
// The server may also have echoed back the TLS 1.3 compatibility mode
|
628
|
+
// session ID. As we know this is not a session the server knows about, any
|
629
|
+
// server resuming it is in error. Reject the first connection
|
630
|
+
// deterministicly, rather than installing an invalid session into the
|
631
|
+
// session cache. https://crbug.com/796910
|
632
|
+
if (hs->session_id_len != 0 &&
|
633
|
+
CBS_mem_equal(&session_id, hs->session_id, hs->session_id_len)) {
|
634
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_SERVER_ECHOED_INVALID_SESSION_ID);
|
635
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
636
|
+
return ssl_hs_error;
|
637
|
+
}
|
638
|
+
|
652
639
|
// The session wasn't resumed. Create a fresh SSL_SESSION to
|
653
640
|
// fill out.
|
654
641
|
ssl_set_session(ssl, NULL);
|
@@ -753,6 +740,13 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
|
|
753
740
|
return ssl_hs_error;
|
754
741
|
}
|
755
742
|
|
743
|
+
if (ssl->token_binding_negotiated &&
|
744
|
+
(!hs->extended_master_secret || !ssl->s3->send_connection_binding)) {
|
745
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI);
|
746
|
+
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
|
747
|
+
return ssl_hs_error;
|
748
|
+
}
|
749
|
+
|
756
750
|
ssl->method->next_message(ssl);
|
757
751
|
|
758
752
|
if (ssl->session != NULL) {
|
@@ -1520,13 +1514,25 @@ static enum ssl_hs_wait_t do_send_client_finished(SSL_HANDSHAKE *hs) {
|
|
1520
1514
|
static bool can_false_start(const SSL_HANDSHAKE *hs) {
|
1521
1515
|
SSL *const ssl = hs->ssl;
|
1522
1516
|
|
1523
|
-
// False Start only for TLS 1.2 with an ECDHE+AEAD cipher
|
1524
|
-
|
1525
|
-
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1517
|
+
// False Start only for TLS 1.2 with an ECDHE+AEAD cipher.
|
1518
|
+
if (SSL_is_dtls(ssl) ||
|
1519
|
+
SSL_version(ssl) != TLS1_2_VERSION ||
|
1520
|
+
hs->new_cipher->algorithm_mkey != SSL_kECDHE ||
|
1521
|
+
hs->new_cipher->algorithm_mac != SSL_AEAD) {
|
1522
|
+
return false;
|
1523
|
+
}
|
1524
|
+
|
1525
|
+
// Additionally require ALPN or NPN by default.
|
1526
|
+
//
|
1527
|
+
// TODO(davidben): Can this constraint be relaxed globally now that cipher
|
1528
|
+
// suite requirements have been relaxed?
|
1529
|
+
if (!ssl->ctx->false_start_allowed_without_alpn &&
|
1530
|
+
ssl->s3->alpn_selected.empty() &&
|
1531
|
+
ssl->s3->next_proto_negotiated.empty()) {
|
1532
|
+
return false;
|
1533
|
+
}
|
1534
|
+
|
1535
|
+
return true;
|
1530
1536
|
}
|
1531
1537
|
|
1532
1538
|
static enum ssl_hs_wait_t do_finish_flight(SSL_HANDSHAKE *hs) {
|
@@ -441,6 +441,10 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
|
|
441
441
|
return ssl_hs_error;
|
442
442
|
}
|
443
443
|
|
444
|
+
if (ssl->handoff) {
|
445
|
+
return ssl_hs_handoff;
|
446
|
+
}
|
447
|
+
|
444
448
|
SSL_CLIENT_HELLO client_hello;
|
445
449
|
if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
|
446
450
|
OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
|
@@ -707,8 +711,16 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
|
|
707
711
|
return ssl_hs_error;
|
708
712
|
}
|
709
713
|
|
710
|
-
//
|
711
|
-
//
|
714
|
+
// Implement the TLS 1.3 anti-downgrade feature, but with a different value.
|
715
|
+
//
|
716
|
+
// For draft TLS 1.3 versions, it is not safe to deploy this feature. However,
|
717
|
+
// some TLS terminators are non-compliant and copy the origin server's value,
|
718
|
+
// so we wish to measure eventual compatibility impact.
|
719
|
+
if (hs->max_version >= TLS1_3_VERSION) {
|
720
|
+
OPENSSL_memcpy(ssl->s3->server_random + SSL3_RANDOM_SIZE -
|
721
|
+
sizeof(kDraftDowngradeRandom),
|
722
|
+
kDraftDowngradeRandom, sizeof(kDraftDowngradeRandom));
|
723
|
+
}
|
712
724
|
|
713
725
|
const SSL_SESSION *session = hs->new_session.get();
|
714
726
|
if (ssl->session != NULL) {
|
@@ -342,7 +342,7 @@ class Array {
|
|
342
342
|
};
|
343
343
|
|
344
344
|
// CBBFinishArray behaves like |CBB_finish| but stores the result in an Array.
|
345
|
-
bool CBBFinishArray(CBB *cbb, Array<uint8_t> *out);
|
345
|
+
OPENSSL_EXPORT bool CBBFinishArray(CBB *cbb, Array<uint8_t> *out);
|
346
346
|
|
347
347
|
|
348
348
|
// Protocol versions.
|
@@ -392,32 +392,6 @@ bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
|
|
392
392
|
// call this function before the version is determined.
|
393
393
|
uint16_t ssl_protocol_version(const SSL *ssl);
|
394
394
|
|
395
|
-
// ssl_is_draft21 returns whether the version corresponds to a draft21 TLS 1.3
|
396
|
-
// variant.
|
397
|
-
bool ssl_is_draft21(uint16_t version);
|
398
|
-
|
399
|
-
// ssl_is_draft22 returns whether the version corresponds to a draft22 TLS 1.3
|
400
|
-
// variant.
|
401
|
-
bool ssl_is_draft22(uint16_t version);
|
402
|
-
|
403
|
-
// ssl_is_resumption_experiment returns whether the version corresponds to a
|
404
|
-
// TLS 1.3 resumption experiment.
|
405
|
-
bool ssl_is_resumption_experiment(uint16_t version);
|
406
|
-
|
407
|
-
// ssl_is_resumption_variant returns whether the version corresponds to a
|
408
|
-
// TLS 1.3 resumption experiment.
|
409
|
-
bool ssl_is_resumption_variant(enum tls13_variant_t variant);
|
410
|
-
|
411
|
-
// ssl_is_resumption_client_ccs_experiment returns whether the version
|
412
|
-
// corresponds to a TLS 1.3 resumption experiment that sends a client CCS.
|
413
|
-
bool ssl_is_resumption_client_ccs_experiment(uint16_t version);
|
414
|
-
|
415
|
-
// ssl_is_resumption_record_version_experiment returns whether the version
|
416
|
-
// corresponds to a TLS 1.3 resumption experiment that modifies the record
|
417
|
-
// version.
|
418
|
-
bool ssl_is_resumption_record_version_experiment(uint16_t version);
|
419
|
-
|
420
|
-
|
421
395
|
// Cipher suites.
|
422
396
|
|
423
397
|
} // namespace bssl
|
@@ -1009,6 +983,7 @@ struct SSLMessage {
|
|
1009
983
|
#define SSL_MAX_HANDSHAKE_FLIGHT 7
|
1010
984
|
|
1011
985
|
extern const uint8_t kHelloRetryRequest[SSL3_RANDOM_SIZE];
|
986
|
+
extern const uint8_t kDraftDowngradeRandom[8];
|
1012
987
|
|
1013
988
|
// ssl_max_handshake_message_len returns the maximum number of bytes permitted
|
1014
989
|
// in a handshake message for |ssl|.
|
@@ -1244,10 +1219,10 @@ int tls13_derive_resumption_secret(SSL_HANDSHAKE *hs);
|
|
1244
1219
|
|
1245
1220
|
// tls13_export_keying_material provides an exporter interface to use the
|
1246
1221
|
// |exporter_secret|.
|
1247
|
-
int tls13_export_keying_material(SSL *ssl, uint8_t
|
1248
|
-
const
|
1249
|
-
const
|
1250
|
-
|
1222
|
+
int tls13_export_keying_material(SSL *ssl, Span<uint8_t> out,
|
1223
|
+
Span<const uint8_t> secret,
|
1224
|
+
Span<const char> label,
|
1225
|
+
Span<const uint8_t> context);
|
1251
1226
|
|
1252
1227
|
// tls13_finished_mac calculates the MAC of the handshake transcript to verify
|
1253
1228
|
// the integrity of the Finished message, and stores the result in |out| and
|
@@ -1282,6 +1257,7 @@ enum ssl_hs_wait_t {
|
|
1282
1257
|
ssl_hs_read_message,
|
1283
1258
|
ssl_hs_flush,
|
1284
1259
|
ssl_hs_certificate_selection_pending,
|
1260
|
+
ssl_hs_handoff,
|
1285
1261
|
ssl_hs_x509_lookup,
|
1286
1262
|
ssl_hs_channel_id_lookup,
|
1287
1263
|
ssl_hs_private_key_operation,
|
@@ -1294,6 +1270,16 @@ enum ssl_hs_wait_t {
|
|
1294
1270
|
ssl_hs_certificate_verify,
|
1295
1271
|
};
|
1296
1272
|
|
1273
|
+
enum ssl_grease_index_t {
|
1274
|
+
ssl_grease_cipher = 0,
|
1275
|
+
ssl_grease_group,
|
1276
|
+
ssl_grease_extension1,
|
1277
|
+
ssl_grease_extension2,
|
1278
|
+
ssl_grease_version,
|
1279
|
+
ssl_grease_ticket_extension,
|
1280
|
+
ssl_grease_last_index = ssl_grease_ticket_extension,
|
1281
|
+
};
|
1282
|
+
|
1297
1283
|
struct SSL_HANDSHAKE {
|
1298
1284
|
explicit SSL_HANDSHAKE(SSL *ssl);
|
1299
1285
|
~SSL_HANDSHAKE();
|
@@ -1322,11 +1308,6 @@ struct SSL_HANDSHAKE {
|
|
1322
1308
|
// |SSL_OP_NO_*| and |SSL_CTX_set_max_proto_version| APIs.
|
1323
1309
|
uint16_t max_version = 0;
|
1324
1310
|
|
1325
|
-
// session_id is the session ID in the ClientHello, used for the experimental
|
1326
|
-
// TLS 1.3 variant.
|
1327
|
-
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH] = {0};
|
1328
|
-
uint8_t session_id_len = 0;
|
1329
|
-
|
1330
1311
|
size_t hash_len = 0;
|
1331
1312
|
uint8_t secret[EVP_MAX_MD_SIZE] = {0};
|
1332
1313
|
uint8_t early_traffic_secret[EVP_MAX_MD_SIZE] = {0};
|
@@ -1394,6 +1375,12 @@ struct SSL_HANDSHAKE {
|
|
1394
1375
|
// peer_key is the peer's ECDH key for a TLS 1.2 client.
|
1395
1376
|
Array<uint8_t> peer_key;
|
1396
1377
|
|
1378
|
+
// negotiated_token_binding_version is used by a server to store the
|
1379
|
+
// on-the-wire encoding of the Token Binding protocol version to advertise in
|
1380
|
+
// the ServerHello/EncryptedExtensions if the Token Binding extension is to be
|
1381
|
+
// sent.
|
1382
|
+
uint16_t negotiated_token_binding_version;
|
1383
|
+
|
1397
1384
|
// server_params, in a TLS 1.2 server, stores the ServerKeyExchange
|
1398
1385
|
// parameters. It has client and server randoms prepended for signing
|
1399
1386
|
// convenience.
|
@@ -1505,6 +1492,9 @@ struct SSL_HANDSHAKE {
|
|
1505
1492
|
// in progress.
|
1506
1493
|
bool pending_private_key_op:1;
|
1507
1494
|
|
1495
|
+
// grease_seeded is true if |grease_seed| has been initialized.
|
1496
|
+
bool grease_seeded:1;
|
1497
|
+
|
1508
1498
|
// client_version is the value sent or received in the ClientHello version.
|
1509
1499
|
uint16_t client_version = 0;
|
1510
1500
|
|
@@ -1515,6 +1505,20 @@ struct SSL_HANDSHAKE {
|
|
1515
1505
|
// early_data_written is the amount of early data that has been written by the
|
1516
1506
|
// record layer.
|
1517
1507
|
uint16_t early_data_written = 0;
|
1508
|
+
|
1509
|
+
// session_id is the session ID in the ClientHello, used for the experimental
|
1510
|
+
// TLS 1.3 variant.
|
1511
|
+
uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH] = {0};
|
1512
|
+
uint8_t session_id_len = 0;
|
1513
|
+
|
1514
|
+
// grease_seed is the entropy for GREASE values. It is valid if
|
1515
|
+
// |grease_seeded| is true.
|
1516
|
+
uint8_t grease_seed[ssl_grease_last_index + 1] = {0};
|
1517
|
+
|
1518
|
+
// dummy_pq_padding_len, in a server, is the length of the extension that
|
1519
|
+
// should be echoed in a ServerHello, or zero if no extension should be
|
1520
|
+
// echoed.
|
1521
|
+
uint16_t dummy_pq_padding_len = 0;
|
1518
1522
|
};
|
1519
1523
|
|
1520
1524
|
UniquePtr<SSL_HANDSHAKE> ssl_handshake_new(SSL *ssl);
|
@@ -1657,47 +1661,39 @@ int ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello,
|
|
1657
1661
|
|
1658
1662
|
// GREASE.
|
1659
1663
|
|
1660
|
-
|
1661
|
-
ssl_grease_cipher = 0,
|
1662
|
-
ssl_grease_group,
|
1663
|
-
ssl_grease_extension1,
|
1664
|
-
ssl_grease_extension2,
|
1665
|
-
ssl_grease_version,
|
1666
|
-
ssl_grease_ticket_extension,
|
1667
|
-
};
|
1668
|
-
|
1669
|
-
// ssl_get_grease_value returns a GREASE value for |ssl|. For a given
|
1664
|
+
// ssl_get_grease_value returns a GREASE value for |hs|. For a given
|
1670
1665
|
// connection, the values for each index will be deterministic. This allows the
|
1671
1666
|
// same ClientHello be sent twice for a HelloRetryRequest or the same group be
|
1672
1667
|
// advertised in both supported_groups and key_shares.
|
1673
|
-
uint16_t ssl_get_grease_value(
|
1668
|
+
uint16_t ssl_get_grease_value(SSL_HANDSHAKE *hs, enum ssl_grease_index_t index);
|
1674
1669
|
|
1675
1670
|
|
1676
1671
|
// Signature algorithms.
|
1677
1672
|
|
1678
1673
|
// tls1_parse_peer_sigalgs parses |sigalgs| as the list of peer signature
|
1679
|
-
// algorithms and saves them on |hs|. It returns
|
1674
|
+
// algorithms and saves them on |hs|. It returns true on success and false on
|
1680
1675
|
// error.
|
1681
|
-
|
1676
|
+
bool tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *sigalgs);
|
1682
1677
|
|
1683
1678
|
// tls1_get_legacy_signature_algorithm sets |*out| to the signature algorithm
|
1684
|
-
// that should be used with |pkey| in TLS 1.1 and earlier. It returns
|
1685
|
-
// success and
|
1686
|
-
|
1679
|
+
// that should be used with |pkey| in TLS 1.1 and earlier. It returns true on
|
1680
|
+
// success and false if |pkey| may not be used at those versions.
|
1681
|
+
bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey);
|
1687
1682
|
|
1688
1683
|
// tls1_choose_signature_algorithm sets |*out| to a signature algorithm for use
|
1689
1684
|
// with |hs|'s private key based on the peer's preferences and the algorithms
|
1690
|
-
// supported. It returns
|
1691
|
-
|
1685
|
+
// supported. It returns true on success and false on error.
|
1686
|
+
bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out);
|
1692
1687
|
|
1693
1688
|
// tls12_add_verify_sigalgs adds the signature algorithms acceptable for the
|
1694
|
-
// peer signature to |out|. It returns
|
1695
|
-
|
1689
|
+
// peer signature to |out|. It returns true on success and false on error.
|
1690
|
+
bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out);
|
1696
1691
|
|
1697
1692
|
// tls12_check_peer_sigalg checks if |sigalg| is acceptable for the peer
|
1698
|
-
// signature. It returns
|
1699
|
-
// to an alert to send.
|
1700
|
-
|
1693
|
+
// signature. It returns true on success and false on error, setting
|
1694
|
+
// |*out_alert| to an alert to send.
|
1695
|
+
bool tls12_check_peer_sigalg(const SSL *ssl, uint8_t *out_alert,
|
1696
|
+
uint16_t sigalg);
|
1701
1697
|
|
1702
1698
|
|
1703
1699
|
// Underdocumented functions.
|
@@ -2165,21 +2161,29 @@ struct SSLContext {
|
|
2165
2161
|
// If true, a client will request certificate timestamps.
|
2166
2162
|
bool signed_cert_timestamps_enabled:1;
|
2167
2163
|
|
2168
|
-
// tlsext_channel_id_enabled is
|
2169
|
-
//
|
2170
|
-
//
|
2164
|
+
// tlsext_channel_id_enabled is whether Channel ID is enabled. For a server,
|
2165
|
+
// means that we'll accept Channel IDs from clients. For a client, means that
|
2166
|
+
// we'll advertise support.
|
2171
2167
|
bool tlsext_channel_id_enabled:1;
|
2172
2168
|
|
2173
|
-
// grease_enabled is
|
2174
|
-
// otherwise.
|
2169
|
+
// grease_enabled is whether draft-davidben-tls-grease-01 is enabled.
|
2175
2170
|
bool grease_enabled:1;
|
2176
2171
|
|
2177
|
-
// allow_unknown_alpn_protos is
|
2172
|
+
// allow_unknown_alpn_protos is whether the client allows unsolicited ALPN
|
2178
2173
|
// protocols from the peer.
|
2179
2174
|
bool allow_unknown_alpn_protos:1;
|
2180
2175
|
|
2181
|
-
// ed25519_enabled is
|
2176
|
+
// ed25519_enabled is whether Ed25519 is advertised in the handshake.
|
2182
2177
|
bool ed25519_enabled:1;
|
2178
|
+
|
2179
|
+
// false_start_allowed_without_alpn is whether False Start (if
|
2180
|
+
// |SSL_MODE_ENABLE_FALSE_START| is enabled) is allowed without ALPN.
|
2181
|
+
bool false_start_allowed_without_alpn:1;
|
2182
|
+
|
2183
|
+
// handoff indicates that a server should stop after receiving the
|
2184
|
+
// ClientHello and pause the handshake in such a way that |SSL_get_error|
|
2185
|
+
// returns |SSL_HANDOFF|.
|
2186
|
+
bool handoff:1;
|
2183
2187
|
};
|
2184
2188
|
|
2185
2189
|
// An ssl_shutdown_t describes the shutdown state of one end of the connection,
|
@@ -2293,7 +2297,12 @@ struct SSL3_STATE {
|
|
2293
2297
|
// wpend_pending is true if we have a pending write outstanding.
|
2294
2298
|
bool wpend_pending:1;
|
2295
2299
|
|
2296
|
-
|
2300
|
+
// early_data_accepted is true if early data was accepted by the server.
|
2301
|
+
bool early_data_accepted:1;
|
2302
|
+
|
2303
|
+
// draft_downgrade is whether the TLS 1.3 anti-downgrade logic would have
|
2304
|
+
// fired, were it not a draft.
|
2305
|
+
bool draft_downgrade:1;
|
2297
2306
|
|
2298
2307
|
// hs_buf is the buffer of handshake data to process.
|
2299
2308
|
UniquePtr<BUF_MEM> hs_buf;
|
@@ -2307,6 +2316,11 @@ struct SSL3_STATE {
|
|
2307
2316
|
// been successfully written.
|
2308
2317
|
uint32_t pending_flight_offset = 0;
|
2309
2318
|
|
2319
|
+
// ticket_age_skew is the difference, in seconds, between the client-sent
|
2320
|
+
// ticket age and the server-computed value in TLS 1.3 server connections
|
2321
|
+
// which resumed a session.
|
2322
|
+
int32_t ticket_age_skew = 0;
|
2323
|
+
|
2310
2324
|
// aead_read_ctx is the current read cipher state.
|
2311
2325
|
UniquePtr<SSLAEADContext> aead_read_ctx;
|
2312
2326
|
|
@@ -2332,6 +2346,8 @@ struct SSL3_STATE {
|
|
2332
2346
|
uint8_t previous_server_finished_len = 0;
|
2333
2347
|
uint8_t previous_server_finished[12] = {0};
|
2334
2348
|
|
2349
|
+
uint8_t send_alert[2] = {0};
|
2350
|
+
|
2335
2351
|
// established_session is the session established by the connection. This
|
2336
2352
|
// session is only filled upon the completion of the handshake and is
|
2337
2353
|
// immutable.
|
@@ -2362,10 +2378,8 @@ struct SSL3_STATE {
|
|
2362
2378
|
// each are big-endian values.
|
2363
2379
|
uint8_t tlsext_channel_id[64] = {0};
|
2364
2380
|
|
2365
|
-
//
|
2366
|
-
|
2367
|
-
// which resumed a session.
|
2368
|
-
int32_t ticket_age_skew = 0;
|
2381
|
+
// Contains the QUIC transport params received by the peer.
|
2382
|
+
Array<uint8_t> peer_quic_transport_params;
|
2369
2383
|
};
|
2370
2384
|
|
2371
2385
|
// lengths of messages
|
@@ -2506,10 +2520,6 @@ struct SSLConnection {
|
|
2506
2520
|
// further constrainted by |SSL_OP_NO_*|.
|
2507
2521
|
uint16_t conf_min_version;
|
2508
2522
|
|
2509
|
-
// tls13_variant is the variant of TLS 1.3 we are using for this
|
2510
|
-
// configuration.
|
2511
|
-
enum tls13_variant_t tls13_variant;
|
2512
|
-
|
2513
2523
|
uint16_t max_send_fragment;
|
2514
2524
|
|
2515
2525
|
// There are 2 BIO's even though they are normally both the same. This is so
|
@@ -2538,14 +2548,18 @@ struct SSLConnection {
|
|
2538
2548
|
|
2539
2549
|
// session info
|
2540
2550
|
|
2541
|
-
//
|
2542
|
-
//
|
2551
|
+
// This is used to hold the local certificate used (i.e. the server
|
2552
|
+
// certificate for a server or the client certificate for a client).
|
2543
2553
|
CERT *cert;
|
2544
2554
|
|
2545
2555
|
// initial_timeout_duration_ms is the default DTLS timeout duration in
|
2546
2556
|
// milliseconds. It's used to initialize the timer any time it's restarted.
|
2547
2557
|
unsigned initial_timeout_duration_ms;
|
2548
2558
|
|
2559
|
+
// tls13_variant is the variant of TLS 1.3 we are using for this
|
2560
|
+
// configuration.
|
2561
|
+
enum tls13_variant_t tls13_variant;
|
2562
|
+
|
2549
2563
|
// session is the configured session to be offered by the client. This session
|
2550
2564
|
// is immutable.
|
2551
2565
|
SSL_SESSION *session;
|
@@ -2584,6 +2598,7 @@ struct SSLConnection {
|
|
2584
2598
|
uint32_t options; // protocol behaviour
|
2585
2599
|
uint32_t mode; // API behaviour
|
2586
2600
|
uint32_t max_cert_list;
|
2601
|
+
uint16_t dummy_pq_padding_len;
|
2587
2602
|
char *tlsext_hostname;
|
2588
2603
|
size_t supported_group_list_len;
|
2589
2604
|
uint16_t *supported_group_list; // our list
|
@@ -2608,6 +2623,18 @@ struct SSLConnection {
|
|
2608
2623
|
uint8_t *alpn_client_proto_list;
|
2609
2624
|
unsigned alpn_client_proto_list_len;
|
2610
2625
|
|
2626
|
+
// Contains a list of supported Token Binding key parameters.
|
2627
|
+
uint8_t *token_binding_params;
|
2628
|
+
size_t token_binding_params_len;
|
2629
|
+
|
2630
|
+
// The negotiated Token Binding key parameter. Only valid if
|
2631
|
+
// |token_binding_negotiated| is set.
|
2632
|
+
uint8_t negotiated_token_binding_param;
|
2633
|
+
|
2634
|
+
// Contains the QUIC transport params that this endpoint will send.
|
2635
|
+
uint8_t *quic_transport_params;
|
2636
|
+
size_t quic_transport_params_len;
|
2637
|
+
|
2611
2638
|
// renegotiate_mode controls how peer renegotiation attempts are handled.
|
2612
2639
|
enum ssl_renegotiate_mode_t renegotiate_mode;
|
2613
2640
|
|
@@ -2635,13 +2662,24 @@ struct SSLConnection {
|
|
2635
2662
|
// we'll advertise support.
|
2636
2663
|
bool tlsext_channel_id_enabled:1;
|
2637
2664
|
|
2665
|
+
// token_binding_negotiated is set if Token Binding was negotiated.
|
2666
|
+
bool token_binding_negotiated:1;
|
2667
|
+
|
2638
2668
|
// retain_only_sha256_of_client_certs is true if we should compute the SHA256
|
2639
2669
|
// hash of the peer's certificate and then discard it to save memory and
|
2640
2670
|
// session space. Only effective on the server side.
|
2641
2671
|
bool retain_only_sha256_of_client_certs:1;
|
2642
2672
|
|
2643
|
-
//
|
2644
|
-
|
2673
|
+
// handoff indicates that a server should stop after receiving the
|
2674
|
+
// ClientHello and pause the handshake in such a way that |SSL_get_error|
|
2675
|
+
// returns |SSL_HANDOFF|. This is copied in |SSL_new| from the |SSL_CTX|
|
2676
|
+
// element of the same name and may be cleared if the handoff is declined.
|
2677
|
+
bool handoff:1;
|
2678
|
+
|
2679
|
+
// did_dummy_pq_padding is only valid for a client. In that context, it is
|
2680
|
+
// true iff the client observed the server echoing a dummy PQ padding
|
2681
|
+
// extension.
|
2682
|
+
bool did_dummy_pq_padding:1;
|
2645
2683
|
};
|
2646
2684
|
|
2647
2685
|
// From draft-ietf-tls-tls13-18, used in determining PSK modes.
|
@@ -2683,6 +2721,11 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
|
|
2683
2721
|
const SSL_X509_METHOD *x509_method,
|
2684
2722
|
CRYPTO_BUFFER_POOL *pool);
|
2685
2723
|
|
2724
|
+
// ssl_session_serialize writes |in| to |cbb| as if it were serialising a
|
2725
|
+
// session for Session-ID resumption. It returns one on success and zero on
|
2726
|
+
// error.
|
2727
|
+
int ssl_session_serialize(const SSL_SESSION *in, CBB *cbb);
|
2728
|
+
|
2686
2729
|
// ssl_session_is_context_valid returns one if |session|'s session ID context
|
2687
2730
|
// matches the one set on |ssl| and zero otherwise.
|
2688
2731
|
int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session);
|
@@ -2826,6 +2869,16 @@ ssl_open_record_t dtls1_open_handshake(SSL *ssl, size_t *out_consumed,
|
|
2826
2869
|
void dtls1_next_message(SSL *ssl);
|
2827
2870
|
int dtls1_dispatch_alert(SSL *ssl);
|
2828
2871
|
|
2872
|
+
// tls1_configure_aead configures either the read or write direction AEAD (as
|
2873
|
+
// determined by |direction|) using the keys generated by the TLS KDF. The
|
2874
|
+
// |key_block_cache| argument is used to store the generated key block, if
|
2875
|
+
// empty. Otherwise it's assumed that the key block is already contained within
|
2876
|
+
// it. Returns one on success or zero on error.
|
2877
|
+
int tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
|
2878
|
+
Array<uint8_t> *key_block_cache,
|
2879
|
+
const SSL_CIPHER *cipher,
|
2880
|
+
Span<const uint8_t> iv_override);
|
2881
|
+
|
2829
2882
|
int tls1_change_cipher_state(SSL_HANDSHAKE *hs, evp_aead_direction_t direction);
|
2830
2883
|
int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out,
|
2831
2884
|
Span<const uint8_t> premaster);
|