grpc 1.4.5 → 1.6.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 +1235 -1100
- data/etc/roots.pem +0 -412
- data/include/grpc/byte_buffer.h +10 -25
- data/include/grpc/byte_buffer_reader.h +10 -25
- data/include/grpc/census.h +10 -25
- data/include/grpc/compression.h +10 -25
- data/include/grpc/grpc.h +15 -26
- data/include/grpc/grpc_cronet.h +10 -25
- data/include/grpc/grpc_posix.h +10 -25
- data/include/grpc/grpc_security.h +10 -25
- data/include/grpc/grpc_security_constants.h +10 -25
- data/include/grpc/impl/codegen/atm.h +11 -25
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
- data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
- data/include/grpc/impl/codegen/atm_windows.h +10 -25
- data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
- data/include/grpc/impl/codegen/compression_types.h +12 -27
- data/include/grpc/impl/codegen/connectivity_state.h +10 -25
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
- data/include/grpc/impl/codegen/gpr_slice.h +10 -25
- data/include/grpc/impl/codegen/gpr_types.h +10 -25
- data/include/grpc/impl/codegen/grpc_types.h +42 -43
- data/include/grpc/impl/codegen/port_platform.h +10 -25
- data/include/grpc/impl/codegen/propagation_bits.h +10 -25
- data/include/grpc/impl/codegen/slice.h +13 -28
- data/include/grpc/impl/codegen/status.h +10 -25
- data/include/grpc/impl/codegen/sync.h +10 -25
- data/include/grpc/impl/codegen/sync_generic.h +10 -25
- data/include/grpc/impl/codegen/sync_posix.h +10 -25
- data/include/grpc/impl/codegen/sync_windows.h +10 -25
- data/include/grpc/load_reporting.h +10 -25
- data/include/grpc/slice.h +10 -25
- data/include/grpc/slice_buffer.h +10 -25
- data/include/grpc/status.h +10 -25
- data/include/grpc/support/alloc.h +10 -25
- data/include/grpc/support/atm.h +10 -25
- data/include/grpc/support/atm_gcc_atomic.h +10 -25
- data/include/grpc/support/atm_gcc_sync.h +10 -25
- data/include/grpc/support/atm_windows.h +10 -25
- data/include/grpc/support/avl.h +46 -49
- data/include/grpc/support/cmdline.h +10 -25
- data/include/grpc/support/cpu.h +10 -25
- data/include/grpc/support/histogram.h +10 -25
- data/include/grpc/support/host_port.h +10 -25
- data/include/grpc/support/log.h +10 -25
- data/include/grpc/support/log_windows.h +10 -25
- data/include/grpc/support/port_platform.h +10 -25
- data/include/grpc/support/string_util.h +10 -25
- data/include/grpc/support/subprocess.h +10 -25
- data/include/grpc/support/sync.h +10 -25
- data/include/grpc/support/sync_generic.h +10 -25
- data/include/grpc/support/sync_posix.h +10 -25
- data/include/grpc/support/sync_windows.h +10 -25
- data/include/grpc/support/thd.h +10 -25
- data/include/grpc/support/time.h +10 -25
- data/include/grpc/support/tls.h +10 -25
- data/include/grpc/support/tls_gcc.h +10 -25
- data/include/grpc/support/tls_msvc.h +10 -25
- data/include/grpc/support/tls_pthread.h +10 -25
- data/include/grpc/support/useful.h +10 -25
- data/include/grpc/support/workaround_list.h +11 -26
- data/src/boringssl/err_data.c +277 -259
- data/src/core/ext/census/aggregation.h +10 -25
- data/src/core/ext/census/base_resources.c +10 -25
- data/src/core/ext/census/base_resources.h +10 -25
- data/src/core/ext/census/census_interface.h +10 -25
- data/src/core/ext/census/census_rpc_stats.h +10 -25
- data/src/core/ext/census/context.c +10 -25
- data/src/core/ext/census/gen/census.pb.c +10 -25
- data/src/core/ext/census/gen/census.pb.h +10 -25
- data/src/core/ext/census/gen/trace_context.pb.c +10 -25
- data/src/core/ext/census/gen/trace_context.pb.h +10 -25
- data/src/core/ext/census/grpc_context.c +10 -25
- data/src/core/ext/census/grpc_filter.c +11 -26
- data/src/core/ext/census/grpc_filter.h +10 -25
- data/src/core/ext/census/grpc_plugin.c +10 -25
- data/src/core/ext/census/initialize.c +10 -25
- data/src/core/ext/census/intrusive_hash_map.c +10 -25
- data/src/core/ext/census/intrusive_hash_map.h +10 -25
- data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
- data/src/core/ext/census/mlog.c +10 -25
- data/src/core/ext/census/mlog.h +10 -25
- data/src/core/ext/census/operation.c +10 -25
- data/src/core/ext/census/placeholders.c +10 -25
- data/src/core/ext/census/resource.c +10 -25
- data/src/core/ext/census/resource.h +10 -25
- data/src/core/ext/census/rpc_metric_id.h +10 -25
- data/src/core/ext/census/trace_context.c +10 -25
- data/src/core/ext/census/trace_context.h +10 -25
- data/src/core/ext/census/trace_label.h +10 -25
- data/src/core/ext/census/trace_propagation.h +10 -25
- data/src/core/ext/census/trace_status.h +10 -25
- data/src/core/ext/census/trace_string.h +10 -25
- data/src/core/ext/census/tracing.c +10 -26
- data/src/core/ext/census/tracing.h +10 -25
- data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
- data/src/core/ext/filters/client_channel/client_channel.c +617 -520
- data/src/core/ext/filters/client_channel/client_channel.h +15 -28
- data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
- data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
- data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
- data/src/core/ext/filters/client_channel/connector.c +10 -25
- data/src/core/ext/filters/client_channel/connector.h +10 -25
- data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
- data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
- data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
- data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
- data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
- data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
- data/src/core/ext/filters/client_channel/parse_address.c +10 -25
- data/src/core/ext/filters/client_channel/parse_address.h +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
- data/src/core/ext/filters/client_channel/resolver.c +33 -38
- data/src/core/ext/filters/client_channel/resolver.h +19 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
- data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
- data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
- data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
- data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
- data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
- data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
- data/src/core/ext/filters/client_channel/subchannel.c +33 -55
- data/src/core/ext/filters/client_channel/subchannel.h +16 -26
- data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
- data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
- data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
- data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
- data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
- data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
- data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
- data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
- data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
- data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
- data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
- data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
- data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
- data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
- data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
- data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
- data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
- data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
- data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
- data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
- data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
- data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
- data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
- data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
- data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
- data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
- data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
- data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
- data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
- data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
- data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
- data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
- data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
- data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
- data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
- data/src/core/lib/channel/channel_args.c +52 -27
- data/src/core/lib/channel/channel_args.h +18 -27
- data/src/core/lib/channel/channel_stack.c +11 -26
- data/src/core/lib/channel/channel_stack.h +12 -27
- data/src/core/lib/channel/channel_stack_builder.c +11 -26
- data/src/core/lib/channel/channel_stack_builder.h +10 -25
- data/src/core/lib/channel/connected_channel.c +10 -25
- data/src/core/lib/channel/connected_channel.h +10 -25
- data/src/core/lib/channel/context.h +10 -25
- data/src/core/lib/channel/handshaker.c +14 -29
- data/src/core/lib/channel/handshaker.h +10 -25
- data/src/core/lib/channel/handshaker_factory.c +10 -25
- data/src/core/lib/channel/handshaker_factory.h +10 -25
- data/src/core/lib/channel/handshaker_registry.c +10 -25
- data/src/core/lib/channel/handshaker_registry.h +10 -25
- data/src/core/lib/compression/algorithm_metadata.h +10 -25
- data/src/core/lib/compression/compression.c +10 -25
- data/src/core/lib/compression/message_compress.c +10 -25
- data/src/core/lib/compression/message_compress.h +10 -25
- data/src/core/lib/compression/stream_compression.c +191 -0
- data/src/core/lib/compression/stream_compression.h +90 -0
- data/src/core/lib/debug/trace.c +28 -29
- data/src/core/lib/debug/trace.h +16 -30
- data/src/core/lib/http/format_request.c +10 -25
- data/src/core/lib/http/format_request.h +10 -25
- data/src/core/lib/http/httpcli.c +19 -35
- data/src/core/lib/http/httpcli.h +10 -25
- data/src/core/lib/http/httpcli_security_connector.c +17 -30
- data/src/core/lib/http/parser.c +11 -26
- data/src/core/lib/http/parser.h +10 -25
- data/src/core/lib/iomgr/closure.c +62 -25
- data/src/core/lib/iomgr/closure.h +81 -26
- data/src/core/lib/iomgr/combiner.c +103 -200
- data/src/core/lib/iomgr/combiner.h +14 -32
- data/src/core/lib/iomgr/endpoint.c +10 -29
- data/src/core/lib/iomgr/endpoint.h +10 -29
- data/src/core/lib/iomgr/endpoint_pair.h +10 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
- data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
- data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
- data/src/core/lib/iomgr/error.c +45 -46
- data/src/core/lib/iomgr/error.h +21 -34
- data/src/core/lib/iomgr/error_internal.h +10 -25
- data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
- data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
- data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
- data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
- data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
- data/src/core/lib/iomgr/ev_posix.c +25 -56
- data/src/core/lib/iomgr/ev_posix.h +15 -44
- data/src/core/lib/iomgr/ev_windows.c +11 -26
- data/src/core/lib/iomgr/exec_ctx.c +36 -45
- data/src/core/lib/iomgr/exec_ctx.h +10 -25
- data/src/core/lib/iomgr/executor.c +152 -127
- data/src/core/lib/iomgr/executor.h +18 -26
- data/src/core/lib/iomgr/gethostname.h +26 -0
- data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
- data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
- data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
- data/src/core/lib/iomgr/iocp_windows.c +10 -25
- data/src/core/lib/iomgr/iocp_windows.h +10 -25
- data/src/core/lib/iomgr/iomgr.c +17 -28
- data/src/core/lib/iomgr/iomgr.h +12 -27
- data/src/core/lib/iomgr/iomgr_internal.h +10 -25
- data/src/core/lib/iomgr/iomgr_posix.c +11 -26
- data/src/core/lib/iomgr/iomgr_posix.h +10 -25
- data/src/core/lib/iomgr/iomgr_uv.c +19 -26
- data/src/core/lib/iomgr/iomgr_uv.h +37 -0
- data/src/core/lib/iomgr/iomgr_windows.c +10 -25
- data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
- data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
- data/src/core/lib/iomgr/load_file.c +10 -25
- data/src/core/lib/iomgr/load_file.h +10 -25
- data/src/core/lib/iomgr/lockfree_event.c +22 -35
- data/src/core/lib/iomgr/lockfree_event.h +13 -27
- data/src/core/lib/iomgr/nameser.h +104 -0
- data/src/core/lib/iomgr/network_status_tracker.c +10 -25
- data/src/core/lib/iomgr/network_status_tracker.h +10 -25
- data/src/core/lib/iomgr/polling_entity.c +10 -25
- data/src/core/lib/iomgr/polling_entity.h +14 -34
- data/src/core/lib/iomgr/pollset.h +14 -25
- data/src/core/lib/iomgr/pollset_set.h +10 -25
- data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
- data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
- data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
- data/src/core/lib/iomgr/pollset_uv.c +25 -26
- data/src/core/lib/iomgr/pollset_uv.h +10 -25
- data/src/core/lib/iomgr/pollset_windows.c +17 -27
- data/src/core/lib/iomgr/pollset_windows.h +10 -25
- data/src/core/lib/iomgr/port.h +24 -25
- data/src/core/lib/iomgr/resolve_address.h +10 -25
- data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
- data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
- data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
- data/src/core/lib/iomgr/resource_quota.c +52 -67
- data/src/core/lib/iomgr/resource_quota.h +10 -25
- data/src/core/lib/iomgr/sockaddr.h +10 -25
- data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
- data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
- data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
- data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
- data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
- data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
- data/src/core/lib/iomgr/socket_mutator.c +14 -31
- data/src/core/lib/iomgr/socket_mutator.h +10 -25
- data/src/core/lib/iomgr/socket_utils.h +10 -25
- data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
- data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
- data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
- data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
- data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
- data/src/core/lib/iomgr/socket_windows.c +12 -27
- data/src/core/lib/iomgr/socket_windows.h +10 -25
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
- data/src/core/lib/iomgr/tcp_client.h +10 -25
- data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
- data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
- data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
- data/src/core/lib/iomgr/tcp_posix.c +36 -55
- data/src/core/lib/iomgr/tcp_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_server.h +10 -25
- data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
- data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
- data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
- data/src/core/lib/iomgr/tcp_uv.c +41 -45
- data/src/core/lib/iomgr/tcp_uv.h +10 -25
- data/src/core/lib/iomgr/tcp_windows.c +39 -53
- data/src/core/lib/iomgr/tcp_windows.h +10 -25
- data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
- data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
- data/src/core/lib/iomgr/timer.h +18 -27
- data/src/core/lib/iomgr/timer_generic.c +91 -87
- data/src/core/lib/iomgr/timer_generic.h +10 -25
- data/src/core/lib/iomgr/timer_heap.c +10 -25
- data/src/core/lib/iomgr/timer_heap.h +10 -25
- data/src/core/lib/iomgr/timer_manager.c +178 -100
- data/src/core/lib/iomgr/timer_manager.h +10 -25
- data/src/core/lib/iomgr/timer_uv.c +23 -33
- data/src/core/lib/iomgr/timer_uv.h +10 -25
- data/src/core/lib/iomgr/udp_server.c +17 -32
- data/src/core/lib/iomgr/udp_server.h +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
- data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
- data/src/core/lib/json/json.c +10 -25
- data/src/core/lib/json/json.h +10 -25
- data/src/core/lib/json/json_common.h +10 -25
- data/src/core/lib/json/json_reader.c +11 -25
- data/src/core/lib/json/json_reader.h +10 -25
- data/src/core/lib/json/json_string.c +10 -25
- data/src/core/lib/json/json_writer.c +10 -25
- data/src/core/lib/json/json_writer.h +10 -25
- data/src/core/lib/profiling/basic_timers.c +10 -25
- data/src/core/lib/profiling/stap_timers.c +10 -25
- data/src/core/lib/profiling/timers.h +10 -25
- data/src/core/lib/security/context/security_context.c +32 -40
- data/src/core/lib/security/context/security_context.h +15 -26
- data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
- data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
- data/src/core/lib/security/credentials/credentials.c +29 -49
- data/src/core/lib/security/credentials/credentials.h +48 -61
- data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
- data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
- data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
- data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
- data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
- data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
- data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
- data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
- data/src/core/lib/security/transport/auth_filters.h +10 -25
- data/src/core/lib/security/transport/client_auth_filter.c +217 -112
- data/src/core/lib/security/transport/lb_targets_info.c +16 -32
- data/src/core/lib/security/transport/lb_targets_info.h +10 -25
- data/src/core/lib/security/transport/secure_endpoint.c +29 -43
- data/src/core/lib/security/transport/secure_endpoint.h +10 -25
- data/src/core/lib/security/transport/security_connector.c +80 -61
- data/src/core/lib/security/transport/security_connector.h +35 -35
- data/src/core/lib/security/transport/security_handshaker.c +18 -33
- data/src/core/lib/security/transport/security_handshaker.h +10 -25
- data/src/core/lib/security/transport/server_auth_filter.c +62 -116
- data/src/core/lib/security/transport/tsi_error.c +10 -25
- data/src/core/lib/security/transport/tsi_error.h +10 -25
- data/src/core/lib/security/util/json_util.c +10 -25
- data/src/core/lib/security/util/json_util.h +10 -25
- data/src/core/lib/slice/b64.c +10 -25
- data/src/core/lib/slice/b64.h +10 -25
- data/src/core/lib/slice/percent_encoding.c +10 -25
- data/src/core/lib/slice/percent_encoding.h +10 -25
- data/src/core/lib/slice/slice.c +10 -25
- data/src/core/lib/slice/slice_buffer.c +10 -25
- data/src/core/lib/slice/slice_hash_table.c +48 -26
- data/src/core/lib/slice/slice_hash_table.h +26 -28
- data/src/core/lib/slice/slice_intern.c +10 -25
- data/src/core/lib/slice/slice_internal.h +10 -25
- data/src/core/lib/slice/slice_string_helpers.c +10 -25
- data/src/core/lib/slice/slice_string_helpers.h +10 -25
- data/src/core/lib/support/alloc.c +10 -25
- data/src/core/lib/support/arena.c +12 -27
- data/src/core/lib/support/arena.h +10 -25
- data/src/core/lib/support/atm.c +17 -32
- data/src/core/lib/support/atomic.h +10 -25
- data/src/core/lib/support/atomic_with_atm.h +10 -25
- data/src/core/lib/support/atomic_with_std.h +10 -25
- data/src/core/lib/support/avl.c +101 -101
- data/src/core/lib/support/backoff.c +10 -25
- data/src/core/lib/support/backoff.h +10 -25
- data/src/core/lib/support/block_annotate.h +10 -25
- data/src/core/lib/support/cmdline.c +10 -25
- data/src/core/lib/support/cpu_iphone.c +10 -25
- data/src/core/lib/support/cpu_linux.c +10 -25
- data/src/core/lib/support/cpu_posix.c +10 -25
- data/src/core/lib/support/cpu_windows.c +10 -25
- data/src/core/lib/support/env.h +16 -25
- data/src/core/lib/support/env_linux.c +30 -37
- data/src/core/lib/support/env_posix.c +15 -25
- data/src/core/lib/support/env_windows.c +15 -25
- data/src/core/lib/support/histogram.c +10 -25
- data/src/core/lib/support/host_port.c +10 -25
- data/src/core/lib/support/log.c +20 -29
- data/src/core/lib/support/log_android.c +10 -25
- data/src/core/lib/support/log_linux.c +13 -26
- data/src/core/lib/support/log_posix.c +10 -25
- data/src/core/lib/support/log_windows.c +10 -25
- data/src/core/lib/support/memory.h +10 -25
- data/src/core/lib/support/mpscq.c +11 -49
- data/src/core/lib/support/mpscq.h +11 -50
- data/src/core/lib/support/murmur_hash.c +12 -25
- data/src/core/lib/support/murmur_hash.h +10 -25
- data/src/core/lib/support/spinlock.h +10 -25
- data/src/core/lib/support/stack_lockfree.c +10 -25
- data/src/core/lib/support/stack_lockfree.h +10 -25
- data/src/core/lib/support/string.c +10 -25
- data/src/core/lib/support/string.h +10 -25
- data/src/core/lib/support/string_posix.c +10 -25
- data/src/core/lib/support/string_util_windows.c +10 -25
- data/src/core/lib/support/string_windows.c +10 -25
- data/src/core/lib/support/string_windows.h +10 -25
- data/src/core/lib/support/subprocess_posix.c +10 -25
- data/src/core/lib/support/subprocess_windows.c +10 -25
- data/src/core/lib/support/sync.c +10 -25
- data/src/core/lib/support/sync_posix.c +10 -25
- data/src/core/lib/support/sync_windows.c +10 -25
- data/src/core/lib/support/thd.c +10 -25
- data/src/core/lib/support/thd_internal.h +10 -25
- data/src/core/lib/support/thd_posix.c +10 -25
- data/src/core/lib/support/thd_windows.c +10 -25
- data/src/core/lib/support/time.c +10 -25
- data/src/core/lib/support/time_posix.c +10 -25
- data/src/core/lib/support/time_precise.c +18 -33
- data/src/core/lib/support/time_precise.h +10 -25
- data/src/core/lib/support/time_windows.c +10 -25
- data/src/core/lib/support/tls_pthread.c +10 -25
- data/src/core/lib/support/tmpfile.h +10 -25
- data/src/core/lib/support/tmpfile_msys.c +10 -25
- data/src/core/lib/support/tmpfile_posix.c +10 -25
- data/src/core/lib/support/tmpfile_windows.c +10 -25
- data/src/core/lib/support/wrap_memcpy.c +10 -25
- data/src/core/lib/surface/alarm.c +78 -35
- data/src/core/lib/surface/alarm_internal.h +40 -0
- data/src/core/lib/surface/api_trace.c +11 -26
- data/src/core/lib/surface/api_trace.h +10 -25
- data/src/core/lib/surface/byte_buffer.c +10 -25
- data/src/core/lib/surface/byte_buffer_reader.c +10 -25
- data/src/core/lib/surface/call.c +64 -84
- data/src/core/lib/surface/call.h +11 -26
- data/src/core/lib/surface/call_details.c +10 -25
- data/src/core/lib/surface/call_log_batch.c +10 -25
- data/src/core/lib/surface/call_test_only.h +10 -25
- data/src/core/lib/surface/channel.c +11 -26
- data/src/core/lib/surface/channel.h +11 -26
- data/src/core/lib/surface/channel_init.c +10 -25
- data/src/core/lib/surface/channel_init.h +10 -25
- data/src/core/lib/surface/channel_ping.c +12 -27
- data/src/core/lib/surface/channel_stack_type.c +10 -25
- data/src/core/lib/surface/channel_stack_type.h +10 -25
- data/src/core/lib/surface/completion_queue.c +442 -331
- data/src/core/lib/surface/completion_queue.h +16 -33
- data/src/core/lib/surface/completion_queue_factory.c +10 -25
- data/src/core/lib/surface/completion_queue_factory.h +10 -25
- data/src/core/lib/surface/event_string.c +10 -25
- data/src/core/lib/surface/event_string.h +10 -25
- data/src/core/lib/surface/init.c +38 -47
- data/src/core/lib/surface/init.h +10 -25
- data/src/core/lib/surface/init_secure.c +20 -27
- data/src/core/lib/surface/lame_client.cc +14 -29
- data/src/core/lib/surface/lame_client.h +10 -25
- data/src/core/lib/surface/metadata_array.c +10 -25
- data/src/core/lib/surface/server.c +128 -81
- data/src/core/lib/surface/server.h +10 -25
- data/src/core/lib/surface/validate_metadata.c +10 -25
- data/src/core/lib/surface/validate_metadata.h +10 -25
- data/src/core/lib/surface/version.c +11 -26
- data/src/core/lib/transport/bdp_estimator.c +19 -29
- data/src/core/lib/transport/bdp_estimator.h +16 -29
- data/src/core/lib/transport/byte_stream.c +127 -36
- data/src/core/lib/transport/byte_stream.h +88 -46
- data/src/core/lib/transport/connectivity_state.c +17 -31
- data/src/core/lib/transport/connectivity_state.h +10 -25
- data/src/core/lib/transport/error_utils.c +10 -25
- data/src/core/lib/transport/error_utils.h +10 -25
- data/src/core/lib/transport/http2_errors.h +10 -25
- data/src/core/lib/transport/metadata.c +87 -85
- data/src/core/lib/transport/metadata.h +15 -28
- data/src/core/lib/transport/metadata_batch.c +10 -25
- data/src/core/lib/transport/metadata_batch.h +10 -25
- data/src/core/lib/transport/pid_controller.c +10 -25
- data/src/core/lib/transport/pid_controller.h +10 -25
- data/src/core/lib/transport/service_config.c +11 -26
- data/src/core/lib/transport/service_config.h +10 -25
- data/src/core/lib/transport/static_metadata.c +12 -26
- data/src/core/lib/transport/static_metadata.h +10 -25
- data/src/core/lib/transport/status_conversion.c +10 -25
- data/src/core/lib/transport/status_conversion.h +10 -25
- data/src/core/lib/transport/timeout_encoding.c +10 -25
- data/src/core/lib/transport/timeout_encoding.h +10 -25
- data/src/core/lib/transport/transport.c +60 -53
- data/src/core/lib/transport/transport.h +36 -34
- data/src/core/lib/transport/transport_impl.h +10 -25
- data/src/core/lib/transport/transport_op_string.c +10 -28
- data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
- data/src/core/tsi/fake_transport_security.c +199 -94
- data/src/core/tsi/fake_transport_security.h +11 -26
- data/src/core/tsi/gts_transport_security.c +40 -0
- data/src/core/tsi/gts_transport_security.h +37 -0
- data/src/core/tsi/ssl_transport_security.c +13 -32
- data/src/core/tsi/ssl_transport_security.h +10 -25
- data/src/core/tsi/ssl_types.h +10 -25
- data/src/core/tsi/transport_security.c +48 -78
- data/src/core/tsi/transport_security.h +18 -27
- data/src/core/tsi/transport_security_adapter.c +17 -29
- data/src/core/tsi/transport_security_adapter.h +10 -25
- data/src/core/tsi/transport_security_grpc.c +64 -0
- data/src/core/tsi/transport_security_grpc.h +80 -0
- data/src/core/tsi/transport_security_interface.h +21 -27
- data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
- data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
- data/src/ruby/bin/math_client.rb +10 -25
- data/src/ruby/bin/math_server.rb +10 -25
- data/src/ruby/bin/math_services_pb.rb +10 -25
- data/src/ruby/bin/noproto_client.rb +10 -25
- data/src/ruby/bin/noproto_server.rb +10 -25
- data/src/ruby/ext/grpc/extconf.rb +10 -25
- data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
- data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
- data/src/ruby/ext/grpc/rb_call.c +44 -25
- data/src/ruby/ext/grpc/rb_call.h +10 -25
- data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
- data/src/ruby/ext/grpc/rb_channel.c +10 -25
- data/src/ruby/ext/grpc/rb_channel.h +10 -25
- data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
- data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
- data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
- data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
- data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
- data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
- data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
- data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
- data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
- data/src/ruby/ext/grpc/rb_grpc.c +10 -25
- data/src/ruby/ext/grpc/rb_grpc.h +10 -25
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
- data/src/ruby/ext/grpc/rb_loader.c +10 -25
- data/src/ruby/ext/grpc/rb_loader.h +10 -25
- data/src/ruby/ext/grpc/rb_server.c +10 -25
- data/src/ruby/ext/grpc/rb_server.h +10 -25
- data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
- data/src/ruby/lib/grpc.rb +10 -25
- data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
- data/src/ruby/lib/grpc/errors.rb +16 -30
- data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
- data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
- data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
- data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
- data/src/ruby/lib/grpc/generic/service.rb +10 -25
- data/src/ruby/lib/grpc/grpc.rb +10 -25
- data/src/ruby/lib/grpc/logconfig.rb +10 -25
- data/src/ruby/lib/grpc/notifier.rb +10 -25
- data/src/ruby/lib/grpc/version.rb +11 -26
- data/src/ruby/pb/generate_proto_ruby.sh +10 -25
- data/src/ruby/pb/grpc/health/checker.rb +10 -25
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
- data/src/ruby/pb/test/client.rb +10 -25
- data/src/ruby/pb/test/server.rb +10 -25
- data/src/ruby/spec/call_credentials_spec.rb +10 -25
- data/src/ruby/spec/call_spec.rb +43 -25
- data/src/ruby/spec/channel_connection_spec.rb +10 -25
- data/src/ruby/spec/channel_credentials_spec.rb +11 -26
- data/src/ruby/spec/channel_spec.rb +10 -25
- data/src/ruby/spec/client_auth_spec.rb +10 -25
- data/src/ruby/spec/client_server_spec.rb +66 -25
- data/src/ruby/spec/compression_options_spec.rb +10 -25
- data/src/ruby/spec/error_sanity_spec.rb +10 -25
- data/src/ruby/spec/generic/active_call_spec.rb +10 -25
- data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
- data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
- data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
- data/src/ruby/spec/generic/service_spec.rb +10 -25
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
- data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
- data/src/ruby/spec/server_credentials_spec.rb +10 -25
- data/src/ruby/spec/server_spec.rb +10 -25
- data/src/ruby/spec/spec_helper.rb +10 -25
- data/src/ruby/spec/time_consts_spec.rb +10 -25
- data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
- data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
- data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
- data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
- data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
- data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
- data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
- data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
- data/third_party/boringssl/crypto/base64/base64.c +7 -5
- data/third_party/boringssl/crypto/bio/bio.c +24 -10
- data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
- data/third_party/boringssl/crypto/bio/connect.c +7 -18
- data/third_party/boringssl/crypto/bio/fd.c +3 -6
- data/third_party/boringssl/crypto/bio/file.c +6 -6
- data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
- data/third_party/boringssl/crypto/bio/pair.c +30 -344
- data/third_party/boringssl/crypto/bio/socket.c +6 -7
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
- data/third_party/boringssl/crypto/bn/add.c +1 -1
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
- data/third_party/boringssl/crypto/bn/bn.c +6 -20
- data/third_party/boringssl/crypto/bn/cmp.c +14 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -2
- data/third_party/boringssl/crypto/bn/ctx.c +3 -1
- data/third_party/boringssl/crypto/bn/div.c +108 -51
- data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
- data/third_party/boringssl/crypto/bn/gcd.c +29 -22
- data/third_party/boringssl/crypto/bn/generic.c +71 -67
- data/third_party/boringssl/crypto/bn/internal.h +19 -6
- data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
- data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
- data/third_party/boringssl/crypto/bn/mul.c +11 -9
- data/third_party/boringssl/crypto/bn/random.c +6 -3
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
- data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
- data/third_party/boringssl/crypto/bn/shift.c +9 -1
- data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
- data/third_party/boringssl/crypto/buf/buf.c +6 -4
- data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
- data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
- data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
- data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
- data/third_party/boringssl/crypto/cipher/aead.c +3 -3
- data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
- data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
- data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
- data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
- data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
- data/third_party/boringssl/crypto/conf/conf.c +6 -3
- data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
- data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
- data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
- data/third_party/boringssl/crypto/des/des.c +1 -1
- data/third_party/boringssl/crypto/des/internal.h +58 -46
- data/third_party/boringssl/crypto/dh/dh.c +4 -8
- data/third_party/boringssl/crypto/digest/digest.c +5 -2
- data/third_party/boringssl/crypto/digest/digests.c +70 -33
- data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
- data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
- data/third_party/boringssl/crypto/ec/ec.c +1 -1
- data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
- data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
- data/third_party/boringssl/crypto/ec/oct.c +2 -14
- data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
- data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
- data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
- data/third_party/boringssl/crypto/ec/simple.c +2 -1
- data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
- data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
- data/third_party/boringssl/crypto/engine/engine.c +3 -1
- data/third_party/boringssl/crypto/err/err.c +5 -5
- data/third_party/boringssl/crypto/evp/evp.c +1 -1
- data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
- data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
- data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
- data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
- data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
- data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
- data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
- data/third_party/boringssl/crypto/internal.h +81 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
- data/third_party/boringssl/crypto/md4/md4.c +20 -18
- data/third_party/boringssl/crypto/md5/md5.c +31 -21
- data/third_party/boringssl/crypto/mem.c +4 -10
- data/third_party/boringssl/crypto/modes/cbc.c +2 -6
- data/third_party/boringssl/crypto/modes/cfb.c +2 -2
- data/third_party/boringssl/crypto/modes/ctr.c +1 -1
- data/third_party/boringssl/crypto/modes/gcm.c +117 -334
- data/third_party/boringssl/crypto/modes/internal.h +107 -84
- data/third_party/boringssl/crypto/modes/ofb.c +3 -3
- data/third_party/boringssl/crypto/modes/polyval.c +94 -0
- data/third_party/boringssl/crypto/obj/obj.c +13 -8
- data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
- data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
- data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
- data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
- data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
- data/third_party/boringssl/crypto/pool/pool.c +200 -0
- data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
- data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
- data/third_party/boringssl/crypto/rand/rand.c +7 -7
- data/third_party/boringssl/crypto/rand/urandom.c +136 -22
- data/third_party/boringssl/crypto/rand/windows.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
- data/third_party/boringssl/crypto/rsa/padding.c +11 -11
- data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
- data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
- data/third_party/boringssl/crypto/sha/sha1.c +60 -42
- data/third_party/boringssl/crypto/sha/sha256.c +4 -2
- data/third_party/boringssl/crypto/sha/sha512.c +9 -7
- data/third_party/boringssl/crypto/stack/stack.c +10 -7
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +2 -2
- data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
- data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
- data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
- data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
- data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
- data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
- data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
- data/third_party/boringssl/crypto/x509/x509name.c +4 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
- data/third_party/boringssl/crypto/x509/x_name.c +23 -13
- data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
- data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
- data/third_party/boringssl/include/openssl/aead.h +9 -20
- data/third_party/boringssl/include/openssl/aes.h +21 -9
- data/third_party/boringssl/include/openssl/asn1.h +9 -1
- data/third_party/boringssl/include/openssl/base.h +33 -6
- data/third_party/boringssl/include/openssl/bio.h +10 -103
- data/third_party/boringssl/include/openssl/bn.h +58 -42
- data/third_party/boringssl/include/openssl/bytestring.h +17 -0
- data/third_party/boringssl/include/openssl/cipher.h +4 -3
- data/third_party/boringssl/include/openssl/conf.h +4 -1
- data/third_party/boringssl/include/openssl/curve25519.h +13 -0
- data/third_party/boringssl/include/openssl/digest.h +5 -3
- data/third_party/boringssl/include/openssl/dsa.h +5 -5
- data/third_party/boringssl/include/openssl/ec.h +2 -2
- data/third_party/boringssl/include/openssl/ecdh.h +3 -4
- data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
- data/third_party/boringssl/include/openssl/err.h +5 -5
- data/third_party/boringssl/include/openssl/evp.h +11 -7
- data/third_party/boringssl/include/openssl/lhash.h +2 -3
- data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
- data/third_party/boringssl/include/openssl/nid.h +2949 -2916
- data/third_party/boringssl/include/openssl/obj.h +1 -1
- data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
- data/third_party/boringssl/include/openssl/pool.h +87 -0
- data/third_party/boringssl/include/openssl/rand.h +1 -1
- data/third_party/boringssl/include/openssl/rsa.h +4 -2
- data/third_party/boringssl/include/openssl/sha.h +0 -4
- data/third_party/boringssl/include/openssl/ssl.h +327 -662
- data/third_party/boringssl/include/openssl/ssl3.h +1 -21
- data/third_party/boringssl/include/openssl/stack.h +1 -0
- data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
- data/third_party/boringssl/include/openssl/tls1.h +23 -52
- data/third_party/boringssl/include/openssl/type_check.h +4 -0
- data/third_party/boringssl/include/openssl/x509.h +10 -59
- data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
- data/third_party/boringssl/include/openssl/x509v3.h +4 -4
- data/third_party/boringssl/ssl/bio_ssl.c +175 -0
- data/third_party/boringssl/ssl/custom_extensions.c +24 -21
- data/third_party/boringssl/ssl/d1_both.c +259 -289
- data/third_party/boringssl/ssl/d1_lib.c +8 -20
- data/third_party/boringssl/ssl/d1_pkt.c +6 -15
- data/third_party/boringssl/ssl/dtls_method.c +22 -8
- data/third_party/boringssl/ssl/dtls_record.c +27 -2
- data/third_party/boringssl/ssl/handshake_client.c +460 -579
- data/third_party/boringssl/ssl/handshake_server.c +662 -644
- data/third_party/boringssl/ssl/internal.h +1009 -375
- data/third_party/boringssl/ssl/s3_both.c +312 -162
- data/third_party/boringssl/ssl/s3_lib.c +12 -128
- data/third_party/boringssl/ssl/s3_pkt.c +22 -30
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
- data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
- data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
- data/third_party/boringssl/ssl/ssl_cert.c +417 -219
- data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
- data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
- data/third_party/boringssl/ssl/ssl_file.c +0 -11
- data/third_party/boringssl/ssl/ssl_lib.c +325 -652
- data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
- data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
- data/third_party/boringssl/ssl/ssl_session.c +206 -95
- data/third_party/boringssl/ssl/ssl_stat.c +18 -84
- data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
- data/third_party/boringssl/ssl/ssl_x509.c +815 -0
- data/third_party/boringssl/ssl/t1_enc.c +188 -174
- data/third_party/boringssl/ssl/t1_lib.c +1064 -764
- data/third_party/boringssl/ssl/tls13_both.c +290 -96
- data/third_party/boringssl/ssl/tls13_client.c +344 -314
- data/third_party/boringssl/ssl/tls13_enc.c +239 -200
- data/third_party/boringssl/ssl/tls13_server.c +374 -366
- data/third_party/boringssl/ssl/tls_method.c +40 -5
- data/third_party/boringssl/ssl/tls_record.c +166 -71
- metadata +39 -25
- data/src/core/lib/iomgr/workqueue.h +0 -87
- data/src/core/lib/iomgr/workqueue_uv.c +0 -65
- data/src/core/lib/iomgr/workqueue_uv.h +0 -37
- data/src/core/lib/iomgr/workqueue_windows.c +0 -63
- data/src/core/lib/iomgr/workqueue_windows.h +0 -37
- data/third_party/boringssl/crypto/bio/buffer.c +0 -496
- data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
- data/third_party/boringssl/crypto/newhope/internal.h +0 -71
- data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
- data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
- data/third_party/boringssl/crypto/newhope/poly.c +0 -183
- data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
- data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
- data/third_party/boringssl/include/openssl/newhope.h +0 -158
- data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -17,6 +17,7 @@
|
|
17
17
|
#include <assert.h>
|
18
18
|
#include <string.h>
|
19
19
|
|
20
|
+
#include <openssl/aead.h>
|
20
21
|
#include <openssl/bytestring.h>
|
21
22
|
#include <openssl/digest.h>
|
22
23
|
#include <openssl/err.h>
|
@@ -24,72 +25,52 @@
|
|
24
25
|
#include <openssl/rand.h>
|
25
26
|
#include <openssl/stack.h>
|
26
27
|
|
28
|
+
#include "../crypto/internal.h"
|
27
29
|
#include "internal.h"
|
28
30
|
|
29
31
|
|
32
|
+
/* kMaxEarlyDataAccepted is the advertised number of plaintext bytes of early
|
33
|
+
* data that will be accepted. This value should be slightly below
|
34
|
+
* kMaxEarlyDataSkipped in tls_record.c, which is measured in ciphertext. */
|
35
|
+
static const size_t kMaxEarlyDataAccepted = 14336;
|
36
|
+
|
30
37
|
enum server_hs_state_t {
|
31
|
-
|
32
|
-
state_select_parameters,
|
38
|
+
state_select_parameters = 0,
|
33
39
|
state_send_hello_retry_request,
|
34
|
-
state_flush_hello_retry_request,
|
35
40
|
state_process_second_client_hello,
|
36
41
|
state_send_server_hello,
|
37
|
-
state_send_encrypted_extensions,
|
38
|
-
state_send_certificate_request,
|
39
|
-
state_send_server_certificate,
|
40
42
|
state_send_server_certificate_verify,
|
41
43
|
state_complete_server_certificate_verify,
|
42
44
|
state_send_server_finished,
|
43
|
-
state_flush,
|
44
45
|
state_process_client_certificate,
|
45
46
|
state_process_client_certificate_verify,
|
47
|
+
state_process_channel_id,
|
46
48
|
state_process_client_finished,
|
47
49
|
state_send_new_session_ticket,
|
48
|
-
state_flush_new_session_ticket,
|
49
50
|
state_done,
|
50
51
|
};
|
51
52
|
|
52
53
|
static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0};
|
53
54
|
|
54
|
-
static int
|
55
|
-
|
56
|
-
|
57
|
-
if (ssl->s3->tmp.new_cipher->algorithm_auth != SSL_aPSK) {
|
58
|
-
return tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len);
|
59
|
-
}
|
60
|
-
|
61
|
-
uint8_t resumption_psk[EVP_MAX_MD_SIZE];
|
62
|
-
if (!tls13_resumption_psk(ssl, resumption_psk, hs->hash_len,
|
63
|
-
ssl->s3->new_session) ||
|
64
|
-
!tls13_advance_key_schedule(ssl, resumption_psk, hs->hash_len)) {
|
65
|
-
return 0;
|
66
|
-
}
|
67
|
-
|
68
|
-
return 1;
|
69
|
-
}
|
70
|
-
|
71
|
-
static int resolve_ecdhe_secret(SSL *ssl, int *out_need_retry,
|
72
|
-
struct ssl_early_callback_ctx *early_ctx) {
|
55
|
+
static int resolve_ecdhe_secret(SSL_HANDSHAKE *hs, int *out_need_retry,
|
56
|
+
SSL_CLIENT_HELLO *client_hello) {
|
57
|
+
SSL *const ssl = hs->ssl;
|
73
58
|
*out_need_retry = 0;
|
74
|
-
SSL_HANDSHAKE *hs = ssl->s3->hs;
|
75
|
-
|
76
|
-
if (ssl->s3->tmp.new_cipher->algorithm_mkey != SSL_kECDHE) {
|
77
|
-
return tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len);
|
78
|
-
}
|
79
59
|
|
60
|
+
/* We only support connections that include an ECDHE key exchange. */
|
80
61
|
CBS key_share;
|
81
|
-
if (!
|
82
|
-
|
62
|
+
if (!ssl_client_hello_get_extension(client_hello, &key_share,
|
63
|
+
TLSEXT_TYPE_key_share)) {
|
83
64
|
OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
|
84
65
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
|
85
|
-
return
|
66
|
+
return 0;
|
86
67
|
}
|
87
68
|
|
88
69
|
int found_key_share;
|
89
70
|
uint8_t *dhe_secret;
|
90
71
|
size_t dhe_secret_len;
|
91
72
|
uint8_t alert = SSL_AD_DECODE_ERROR;
|
92
|
-
if (!ssl_ext_key_share_parse_clienthello(
|
73
|
+
if (!ssl_ext_key_share_parse_clienthello(hs, &found_key_share, &dhe_secret,
|
93
74
|
&dhe_secret_len, &alert,
|
94
75
|
&key_share)) {
|
95
76
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
|
@@ -101,71 +82,157 @@ static int resolve_ecdhe_secret(SSL *ssl, int *out_need_retry,
|
|
101
82
|
return 0;
|
102
83
|
}
|
103
84
|
|
104
|
-
int ok = tls13_advance_key_schedule(
|
85
|
+
int ok = tls13_advance_key_schedule(hs, dhe_secret, dhe_secret_len);
|
105
86
|
OPENSSL_free(dhe_secret);
|
106
87
|
return ok;
|
107
88
|
}
|
108
89
|
|
109
|
-
static
|
110
|
-
|
90
|
+
static const SSL_CIPHER *choose_tls13_cipher(
|
91
|
+
const SSL *ssl, const SSL_CLIENT_HELLO *client_hello) {
|
92
|
+
if (client_hello->cipher_suites_len % 2 != 0) {
|
93
|
+
return NULL;
|
94
|
+
}
|
95
|
+
|
96
|
+
CBS cipher_suites;
|
97
|
+
CBS_init(&cipher_suites, client_hello->cipher_suites,
|
98
|
+
client_hello->cipher_suites_len);
|
99
|
+
|
100
|
+
const int aes_is_fine = EVP_has_aes_hardware();
|
101
|
+
const uint16_t version = ssl3_protocol_version(ssl);
|
102
|
+
|
103
|
+
const SSL_CIPHER *best = NULL;
|
104
|
+
while (CBS_len(&cipher_suites) > 0) {
|
105
|
+
uint16_t cipher_suite;
|
106
|
+
if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
|
107
|
+
return NULL;
|
108
|
+
}
|
109
|
+
|
110
|
+
/* Limit to TLS 1.3 ciphers we know about. */
|
111
|
+
const SSL_CIPHER *candidate = SSL_get_cipher_by_value(cipher_suite);
|
112
|
+
if (candidate == NULL ||
|
113
|
+
SSL_CIPHER_get_min_version(candidate) > version ||
|
114
|
+
SSL_CIPHER_get_max_version(candidate) < version) {
|
115
|
+
continue;
|
116
|
+
}
|
117
|
+
|
118
|
+
/* TLS 1.3 removes legacy ciphers, so honor the client order, but prefer
|
119
|
+
* ChaCha20 if we do not have AES hardware. */
|
120
|
+
if (aes_is_fine) {
|
121
|
+
return candidate;
|
122
|
+
}
|
123
|
+
|
124
|
+
if (candidate->algorithm_enc == SSL_CHACHA20POLY1305) {
|
125
|
+
return candidate;
|
126
|
+
}
|
127
|
+
|
128
|
+
if (best == NULL) {
|
129
|
+
best = candidate;
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
return best;
|
134
|
+
}
|
135
|
+
|
136
|
+
static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
|
137
|
+
SSL *const ssl = hs->ssl;
|
138
|
+
/* The short record header extension is incompatible with early data. */
|
139
|
+
if (ssl->s3->skip_early_data && ssl->s3->short_header) {
|
140
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
|
111
141
|
return ssl_hs_error;
|
112
142
|
}
|
113
143
|
|
114
|
-
|
115
|
-
if (!
|
116
|
-
|
144
|
+
SSL_CLIENT_HELLO client_hello;
|
145
|
+
if (!ssl_client_hello_init(ssl, &client_hello, ssl->init_msg,
|
146
|
+
ssl->init_num)) {
|
117
147
|
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
|
118
148
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
119
149
|
return ssl_hs_error;
|
120
150
|
}
|
121
151
|
|
122
|
-
|
152
|
+
/* Negotiate the cipher suite. */
|
153
|
+
hs->new_cipher = choose_tls13_cipher(ssl, &client_hello);
|
154
|
+
if (hs->new_cipher == NULL) {
|
155
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
|
156
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
|
157
|
+
return ssl_hs_error;
|
158
|
+
}
|
123
159
|
|
124
|
-
/*
|
125
|
-
|
126
|
-
|
127
|
-
|
160
|
+
/* The PRF hash is now known. Set up the key schedule and hash the
|
161
|
+
* ClientHello. */
|
162
|
+
if (!tls13_init_key_schedule(hs) ||
|
163
|
+
!ssl_hash_current_message(hs)) {
|
164
|
+
return ssl_hs_error;
|
128
165
|
}
|
129
|
-
memcpy(ssl->s3->client_random, client_hello.random, client_hello.random_len);
|
130
166
|
|
167
|
+
|
168
|
+
/* Decode the ticket if we agree on a PSK key exchange mode. */
|
131
169
|
uint8_t alert = SSL_AD_DECODE_ERROR;
|
132
170
|
SSL_SESSION *session = NULL;
|
133
|
-
CBS pre_shared_key;
|
134
|
-
if (
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
171
|
+
CBS pre_shared_key, binders;
|
172
|
+
if (hs->accept_psk_mode &&
|
173
|
+
ssl_client_hello_get_extension(&client_hello, &pre_shared_key,
|
174
|
+
TLSEXT_TYPE_pre_shared_key)) {
|
175
|
+
/* Verify that the pre_shared_key extension is the last extension in
|
176
|
+
* ClientHello. */
|
177
|
+
if (CBS_data(&pre_shared_key) + CBS_len(&pre_shared_key) !=
|
178
|
+
client_hello.extensions + client_hello.extensions_len) {
|
179
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_PRE_SHARED_KEY_MUST_BE_LAST);
|
180
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
181
|
+
return ssl_hs_error;
|
182
|
+
}
|
183
|
+
|
184
|
+
if (!ssl_ext_pre_shared_key_parse_clienthello(hs, &session, &binders,
|
185
|
+
&alert, &pre_shared_key)) {
|
186
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
|
187
|
+
return ssl_hs_error;
|
188
|
+
}
|
140
189
|
}
|
141
190
|
|
142
|
-
uint16_t resumption_cipher;
|
143
191
|
if (session != NULL &&
|
144
|
-
|
145
|
-
((session->ticket_flags & SSL_TICKET_ALLOW_DHE_RESUMPTION) == 0 ||
|
146
|
-
/* Only resume if the session's version matches. */
|
147
|
-
session->ssl_version != ssl->version ||
|
148
|
-
!ssl_cipher_get_ecdhe_psk_cipher(session->cipher, &resumption_cipher) ||
|
149
|
-
!ssl_client_cipher_list_contains_cipher(&client_hello,
|
150
|
-
resumption_cipher))) {
|
192
|
+
!ssl_session_is_resumable(hs, session)) {
|
151
193
|
SSL_SESSION_free(session);
|
152
194
|
session = NULL;
|
153
195
|
}
|
154
196
|
|
197
|
+
/* Set up the new session, either using the original one as a template or
|
198
|
+
* creating a fresh one. */
|
155
199
|
if (session == NULL) {
|
156
|
-
if (!ssl_get_new_session(
|
200
|
+
if (!ssl_get_new_session(hs, 1 /* server */)) {
|
157
201
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
158
202
|
return ssl_hs_error;
|
159
203
|
}
|
204
|
+
|
205
|
+
hs->new_session->cipher = hs->new_cipher;
|
206
|
+
|
207
|
+
/* On new sessions, stash the SNI value in the session. */
|
208
|
+
if (hs->hostname != NULL) {
|
209
|
+
OPENSSL_free(hs->new_session->tlsext_hostname);
|
210
|
+
hs->new_session->tlsext_hostname = BUF_strdup(hs->hostname);
|
211
|
+
if (hs->new_session->tlsext_hostname == NULL) {
|
212
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
213
|
+
return ssl_hs_error;
|
214
|
+
}
|
215
|
+
}
|
160
216
|
} else {
|
217
|
+
/* Check the PSK binder. */
|
218
|
+
if (!tls13_verify_psk_binder(hs, session, &binders)) {
|
219
|
+
SSL_SESSION_free(session);
|
220
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
|
221
|
+
return ssl_hs_error;
|
222
|
+
}
|
223
|
+
|
161
224
|
/* Only authentication information carries over in TLS 1.3. */
|
162
|
-
|
163
|
-
if (
|
225
|
+
hs->new_session = SSL_SESSION_dup(session, SSL_SESSION_DUP_AUTH_ONLY);
|
226
|
+
if (hs->new_session == NULL) {
|
164
227
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
165
228
|
return ssl_hs_error;
|
166
229
|
}
|
167
230
|
ssl->s3->session_reused = 1;
|
168
231
|
SSL_SESSION_free(session);
|
232
|
+
|
233
|
+
/* Resumption incorporates fresh key material, so refresh the timeout. */
|
234
|
+
ssl_session_renew_timeout(ssl, hs->new_session,
|
235
|
+
ssl->initial_ctx->session_psk_dhe_timeout);
|
169
236
|
}
|
170
237
|
|
171
238
|
if (ssl->ctx->dos_protection_cb != NULL &&
|
@@ -176,151 +243,88 @@ static enum ssl_hs_wait_t do_process_client_hello(SSL *ssl, SSL_HANDSHAKE *hs) {
|
|
176
243
|
return ssl_hs_error;
|
177
244
|
}
|
178
245
|
|
179
|
-
/*
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
ssl3_send_alert(ssl, SSL3_AL_FATAL,
|
184
|
-
return ssl_hs_error;
|
185
|
-
}
|
186
|
-
|
187
|
-
/* TLS extensions. */
|
188
|
-
if (!ssl_parse_clienthello_tlsext(ssl, &client_hello)) {
|
189
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
|
190
|
-
return ssl_hs_error;
|
191
|
-
}
|
192
|
-
|
193
|
-
hs->state = state_select_parameters;
|
194
|
-
return ssl_hs_ok;
|
195
|
-
}
|
196
|
-
|
197
|
-
static enum ssl_hs_wait_t do_select_parameters(SSL *ssl, SSL_HANDSHAKE *hs) {
|
198
|
-
if (!ssl->s3->session_reused) {
|
199
|
-
/* Call |cert_cb| to update server certificates if required. */
|
200
|
-
if (ssl->cert->cert_cb != NULL) {
|
201
|
-
int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg);
|
202
|
-
if (rv == 0) {
|
203
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR);
|
204
|
-
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
205
|
-
return ssl_hs_error;
|
206
|
-
}
|
207
|
-
if (rv < 0) {
|
208
|
-
hs->state = state_select_parameters;
|
209
|
-
return ssl_hs_x509_lookup;
|
210
|
-
}
|
211
|
-
}
|
212
|
-
}
|
213
|
-
|
214
|
-
struct ssl_early_callback_ctx client_hello;
|
215
|
-
if (!ssl_early_callback_init(ssl, &client_hello, ssl->init_msg,
|
216
|
-
ssl->init_num)) {
|
217
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
|
218
|
-
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
246
|
+
/* HTTP/2 negotiation depends on the cipher suite, so ALPN negotiation was
|
247
|
+
* deferred. Complete it now. */
|
248
|
+
alert = SSL_AD_DECODE_ERROR;
|
249
|
+
if (!ssl_negotiate_alpn(hs, &alert, &client_hello)) {
|
250
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
|
219
251
|
return ssl_hs_error;
|
220
252
|
}
|
221
253
|
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
ssl3_send_alert(ssl, SSL3_AL_FATAL,
|
228
|
-
return ssl_hs_error;
|
229
|
-
}
|
230
|
-
|
231
|
-
ssl->s3->new_session->cipher = cipher;
|
232
|
-
ssl->s3->tmp.new_cipher = cipher;
|
233
|
-
} else {
|
234
|
-
uint16_t resumption_cipher;
|
235
|
-
if (!ssl_cipher_get_ecdhe_psk_cipher(ssl->s3->new_session->cipher,
|
236
|
-
&resumption_cipher)) {
|
237
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
|
238
|
-
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
|
254
|
+
/* Store the initial negotiated ALPN in the session. */
|
255
|
+
if (ssl->s3->alpn_selected != NULL) {
|
256
|
+
hs->new_session->early_alpn =
|
257
|
+
BUF_memdup(ssl->s3->alpn_selected, ssl->s3->alpn_selected_len);
|
258
|
+
if (hs->new_session->early_alpn == NULL) {
|
259
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
239
260
|
return ssl_hs_error;
|
240
261
|
}
|
241
|
-
|
262
|
+
hs->new_session->early_alpn_len = ssl->s3->alpn_selected_len;
|
242
263
|
}
|
243
264
|
|
244
|
-
|
245
|
-
|
246
|
-
/* The PRF hash is now known. Set up the key schedule and hash the
|
247
|
-
* ClientHello. */
|
248
|
-
size_t resumption_ctx_len =
|
249
|
-
EVP_MD_size(ssl_get_handshake_digest(ssl_get_algorithm_prf(ssl)));
|
265
|
+
/* Incorporate the PSK into the running secret. */
|
250
266
|
if (ssl->s3->session_reused) {
|
251
|
-
|
252
|
-
|
253
|
-
ssl->s3->new_session) ||
|
254
|
-
!tls13_init_key_schedule(ssl, resumption_ctx, resumption_ctx_len)) {
|
267
|
+
if (!tls13_advance_key_schedule(hs, hs->new_session->master_key,
|
268
|
+
hs->new_session->master_key_length)) {
|
255
269
|
return ssl_hs_error;
|
256
270
|
}
|
257
|
-
} else {
|
258
|
-
if (!tls13_init_key_schedule(ssl, kZeroes, resumption_ctx_len)) {
|
259
|
-
return ssl_hs_error;
|
260
|
-
}
|
261
|
-
}
|
262
|
-
|
263
|
-
/* Resolve PSK and incorporate it into the secret. */
|
264
|
-
if (!resolve_psk_secret(ssl)) {
|
271
|
+
} else if (!tls13_advance_key_schedule(hs, kZeroes, hs->hash_len)) {
|
265
272
|
return ssl_hs_error;
|
266
273
|
}
|
267
274
|
|
275
|
+
ssl->method->received_flight(ssl);
|
276
|
+
|
268
277
|
/* Resolve ECDHE and incorporate it into the secret. */
|
269
278
|
int need_retry;
|
270
|
-
if (!resolve_ecdhe_secret(
|
279
|
+
if (!resolve_ecdhe_secret(hs, &need_retry, &client_hello)) {
|
271
280
|
if (need_retry) {
|
272
|
-
hs->
|
281
|
+
hs->tls13_state = state_send_hello_retry_request;
|
273
282
|
return ssl_hs_ok;
|
274
283
|
}
|
275
284
|
return ssl_hs_error;
|
276
285
|
}
|
277
286
|
|
278
|
-
hs->
|
287
|
+
hs->tls13_state = state_send_server_hello;
|
279
288
|
return ssl_hs_ok;
|
280
289
|
}
|
281
290
|
|
282
|
-
static enum ssl_hs_wait_t do_send_hello_retry_request(
|
283
|
-
|
291
|
+
static enum ssl_hs_wait_t do_send_hello_retry_request(SSL_HANDSHAKE *hs) {
|
292
|
+
SSL *const ssl = hs->ssl;
|
284
293
|
CBB cbb, body, extensions;
|
285
294
|
uint16_t group_id;
|
286
295
|
if (!ssl->method->init_message(ssl, &cbb, &body,
|
287
296
|
SSL3_MT_HELLO_RETRY_REQUEST) ||
|
288
297
|
!CBB_add_u16(&body, ssl->version) ||
|
289
|
-
!
|
290
|
-
!tls1_get_shared_group(ssl, &group_id) ||
|
291
|
-
!CBB_add_u16(&body, group_id) ||
|
298
|
+
!tls1_get_shared_group(hs, &group_id) ||
|
292
299
|
!CBB_add_u16_length_prefixed(&body, &extensions) ||
|
293
|
-
!
|
300
|
+
!CBB_add_u16(&extensions, TLSEXT_TYPE_key_share) ||
|
301
|
+
!CBB_add_u16(&extensions, 2 /* length */) ||
|
302
|
+
!CBB_add_u16(&extensions, group_id) ||
|
303
|
+
!ssl_add_message_cbb(ssl, &cbb)) {
|
294
304
|
CBB_cleanup(&cbb);
|
295
305
|
return ssl_hs_error;
|
296
306
|
}
|
297
307
|
|
298
|
-
hs->
|
299
|
-
return ssl_hs_write_message;
|
300
|
-
}
|
301
|
-
|
302
|
-
static enum ssl_hs_wait_t do_flush_hello_retry_request(SSL *ssl,
|
303
|
-
SSL_HANDSHAKE *hs) {
|
304
|
-
hs->state = state_process_second_client_hello;
|
308
|
+
hs->tls13_state = state_process_second_client_hello;
|
305
309
|
return ssl_hs_flush_and_read_message;
|
306
310
|
}
|
307
311
|
|
308
|
-
static enum ssl_hs_wait_t do_process_second_client_hello(
|
309
|
-
|
310
|
-
if (!
|
312
|
+
static enum ssl_hs_wait_t do_process_second_client_hello(SSL_HANDSHAKE *hs) {
|
313
|
+
SSL *const ssl = hs->ssl;
|
314
|
+
if (!ssl_check_message_type(ssl, SSL3_MT_CLIENT_HELLO)) {
|
311
315
|
return ssl_hs_error;
|
312
316
|
}
|
313
317
|
|
314
|
-
|
315
|
-
if (!
|
316
|
-
|
318
|
+
SSL_CLIENT_HELLO client_hello;
|
319
|
+
if (!ssl_client_hello_init(ssl, &client_hello, ssl->init_msg,
|
320
|
+
ssl->init_num)) {
|
317
321
|
OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
|
318
322
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
|
319
323
|
return ssl_hs_error;
|
320
324
|
}
|
321
325
|
|
322
326
|
int need_retry;
|
323
|
-
if (!resolve_ecdhe_secret(
|
327
|
+
if (!resolve_ecdhe_secret(hs, &need_retry, &client_hello)) {
|
324
328
|
if (need_retry) {
|
325
329
|
/* Only send one HelloRetryRequest. */
|
326
330
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
|
@@ -329,131 +333,126 @@ static enum ssl_hs_wait_t do_process_second_client_hello(SSL *ssl,
|
|
329
333
|
return ssl_hs_error;
|
330
334
|
}
|
331
335
|
|
332
|
-
if (!
|
336
|
+
if (!ssl_hash_current_message(hs)) {
|
333
337
|
return ssl_hs_error;
|
334
338
|
}
|
335
339
|
|
336
340
|
ssl->method->received_flight(ssl);
|
337
|
-
hs->
|
341
|
+
hs->tls13_state = state_send_server_hello;
|
338
342
|
return ssl_hs_ok;
|
339
343
|
}
|
340
344
|
|
341
|
-
static enum ssl_hs_wait_t do_send_server_hello(
|
345
|
+
static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
|
346
|
+
SSL *const ssl = hs->ssl;
|
347
|
+
|
348
|
+
/* Send a ServerHello. */
|
342
349
|
CBB cbb, body, extensions;
|
343
350
|
if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_SERVER_HELLO) ||
|
344
351
|
!CBB_add_u16(&body, ssl->version) ||
|
345
352
|
!RAND_bytes(ssl->s3->server_random, sizeof(ssl->s3->server_random)) ||
|
346
353
|
!CBB_add_bytes(&body, ssl->s3->server_random, SSL3_RANDOM_SIZE) ||
|
347
|
-
!CBB_add_u16(&body, ssl_cipher_get_value(
|
354
|
+
!CBB_add_u16(&body, ssl_cipher_get_value(hs->new_cipher)) ||
|
348
355
|
!CBB_add_u16_length_prefixed(&body, &extensions) ||
|
349
|
-
!ssl_ext_pre_shared_key_add_serverhello(
|
350
|
-
!ssl_ext_key_share_add_serverhello(
|
351
|
-
|
352
|
-
CBB_cleanup(&cbb);
|
353
|
-
return ssl_hs_error;
|
354
|
-
}
|
355
|
-
|
356
|
-
hs->state = state_send_encrypted_extensions;
|
357
|
-
return ssl_hs_write_message;
|
358
|
-
}
|
359
|
-
|
360
|
-
static enum ssl_hs_wait_t do_send_encrypted_extensions(SSL *ssl,
|
361
|
-
SSL_HANDSHAKE *hs) {
|
362
|
-
if (!tls13_set_handshake_traffic(ssl)) {
|
363
|
-
return ssl_hs_error;
|
356
|
+
!ssl_ext_pre_shared_key_add_serverhello(hs, &extensions) ||
|
357
|
+
!ssl_ext_key_share_add_serverhello(hs, &extensions)) {
|
358
|
+
goto err;
|
364
359
|
}
|
365
360
|
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
CBB_cleanup(&cbb);
|
372
|
-
return ssl_hs_error;
|
361
|
+
if (ssl->s3->short_header) {
|
362
|
+
if (!CBB_add_u16(&extensions, TLSEXT_TYPE_short_header) ||
|
363
|
+
!CBB_add_u16(&extensions, 0 /* empty extension */)) {
|
364
|
+
goto err;
|
365
|
+
}
|
373
366
|
}
|
374
367
|
|
375
|
-
|
376
|
-
|
377
|
-
}
|
378
|
-
|
379
|
-
static enum ssl_hs_wait_t do_send_certificate_request(SSL *ssl,
|
380
|
-
SSL_HANDSHAKE *hs) {
|
381
|
-
/* Determine whether to request a client certificate. */
|
382
|
-
ssl->s3->tmp.cert_request = !!(ssl->verify_mode & SSL_VERIFY_PEER);
|
383
|
-
/* CertificateRequest may only be sent in certificate-based ciphers. */
|
384
|
-
if (!ssl_cipher_uses_certificate_auth(ssl->s3->tmp.new_cipher)) {
|
385
|
-
ssl->s3->tmp.cert_request = 0;
|
368
|
+
if (!ssl_add_message_cbb(ssl, &cbb)) {
|
369
|
+
goto err;
|
386
370
|
}
|
387
371
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
372
|
+
/* Derive and enable the handshake traffic secrets. */
|
373
|
+
if (!tls13_derive_handshake_secrets(hs) ||
|
374
|
+
!tls13_set_traffic_key(ssl, evp_aead_open, hs->client_handshake_secret,
|
375
|
+
hs->hash_len) ||
|
376
|
+
!tls13_set_traffic_key(ssl, evp_aead_seal, hs->server_handshake_secret,
|
377
|
+
hs->hash_len)) {
|
378
|
+
goto err;
|
392
379
|
}
|
393
380
|
|
394
|
-
|
381
|
+
/* Send EncryptedExtensions. */
|
395
382
|
if (!ssl->method->init_message(ssl, &cbb, &body,
|
396
|
-
|
397
|
-
!
|
383
|
+
SSL3_MT_ENCRYPTED_EXTENSIONS) ||
|
384
|
+
!ssl_add_serverhello_tlsext(hs, &body) ||
|
385
|
+
!ssl_add_message_cbb(ssl, &cbb)) {
|
398
386
|
goto err;
|
399
387
|
}
|
400
388
|
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
389
|
+
/* Determine whether to request a client certificate. */
|
390
|
+
hs->cert_request = !!(ssl->verify_mode & SSL_VERIFY_PEER);
|
391
|
+
/* CertificateRequest may only be sent in non-resumption handshakes. */
|
392
|
+
if (ssl->s3->session_reused) {
|
393
|
+
hs->cert_request = 0;
|
405
394
|
}
|
406
395
|
|
407
|
-
|
408
|
-
|
396
|
+
/* Send a CertificateRequest, if necessary. */
|
397
|
+
if (hs->cert_request) {
|
398
|
+
CBB sigalgs_cbb;
|
399
|
+
if (!ssl->method->init_message(ssl, &cbb, &body,
|
400
|
+
SSL3_MT_CERTIFICATE_REQUEST) ||
|
401
|
+
!CBB_add_u8(&body, 0 /* no certificate_request_context. */)) {
|
409
402
|
goto err;
|
410
403
|
}
|
411
|
-
}
|
412
404
|
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
405
|
+
const uint16_t *sigalgs;
|
406
|
+
size_t num_sigalgs = tls12_get_verify_sigalgs(ssl, &sigalgs);
|
407
|
+
if (!CBB_add_u16_length_prefixed(&body, &sigalgs_cbb)) {
|
408
|
+
goto err;
|
409
|
+
}
|
410
|
+
|
411
|
+
for (size_t i = 0; i < num_sigalgs; i++) {
|
412
|
+
if (!CBB_add_u16(&sigalgs_cbb, sigalgs[i])) {
|
413
|
+
goto err;
|
414
|
+
}
|
415
|
+
}
|
416
|
+
|
417
|
+
if (!ssl_add_client_CA_list(ssl, &body) ||
|
418
|
+
!CBB_add_u16(&body, 0 /* empty certificate_extensions. */) ||
|
419
|
+
!ssl_add_message_cbb(ssl, &cbb)) {
|
420
|
+
goto err;
|
421
|
+
}
|
417
422
|
}
|
418
423
|
|
419
|
-
|
420
|
-
|
424
|
+
/* Send the server Certificate message, if necessary. */
|
425
|
+
if (!ssl->s3->session_reused) {
|
426
|
+
if (!ssl_has_certificate(ssl)) {
|
427
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET);
|
428
|
+
goto err;
|
429
|
+
}
|
421
430
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
}
|
431
|
+
if (!tls13_add_certificate(hs)) {
|
432
|
+
goto err;
|
433
|
+
}
|
426
434
|
|
427
|
-
|
428
|
-
SSL_HANDSHAKE *hs) {
|
429
|
-
if (!ssl_cipher_uses_certificate_auth(ssl->s3->tmp.new_cipher)) {
|
430
|
-
hs->state = state_send_server_finished;
|
435
|
+
hs->tls13_state = state_send_server_certificate_verify;
|
431
436
|
return ssl_hs_ok;
|
432
437
|
}
|
433
438
|
|
434
|
-
|
435
|
-
|
436
|
-
return ssl_hs_error;
|
437
|
-
}
|
438
|
-
|
439
|
-
if (!tls13_prepare_certificate(ssl)) {
|
440
|
-
return ssl_hs_error;
|
441
|
-
}
|
439
|
+
hs->tls13_state = state_send_server_finished;
|
440
|
+
return ssl_hs_ok;
|
442
441
|
|
443
|
-
|
444
|
-
|
442
|
+
err:
|
443
|
+
CBB_cleanup(&cbb);
|
444
|
+
return ssl_hs_error;
|
445
445
|
}
|
446
446
|
|
447
|
-
static enum ssl_hs_wait_t do_send_server_certificate_verify(
|
448
|
-
SSL_HANDSHAKE *hs,
|
447
|
+
static enum ssl_hs_wait_t do_send_server_certificate_verify(SSL_HANDSHAKE *hs,
|
449
448
|
int is_first_run) {
|
450
|
-
switch (
|
449
|
+
switch (tls13_add_certificate_verify(hs, is_first_run)) {
|
451
450
|
case ssl_private_key_success:
|
452
|
-
hs->
|
453
|
-
return
|
451
|
+
hs->tls13_state = state_send_server_finished;
|
452
|
+
return ssl_hs_ok;
|
454
453
|
|
455
454
|
case ssl_private_key_retry:
|
456
|
-
hs->
|
455
|
+
hs->tls13_state = state_complete_server_certificate_verify;
|
457
456
|
return ssl_hs_private_key_operation;
|
458
457
|
|
459
458
|
case ssl_private_key_failure:
|
@@ -464,199 +463,208 @@ static enum ssl_hs_wait_t do_send_server_certificate_verify(SSL *ssl,
|
|
464
463
|
return ssl_hs_error;
|
465
464
|
}
|
466
465
|
|
467
|
-
static enum ssl_hs_wait_t do_send_server_finished(
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
static enum ssl_hs_wait_t do_flush(SSL *ssl, SSL_HANDSHAKE *hs) {
|
477
|
-
/* Update the secret to the master secret and derive traffic keys. */
|
478
|
-
if (!tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len) ||
|
479
|
-
!tls13_derive_traffic_secret_0(ssl) ||
|
480
|
-
!tls13_set_traffic_key(ssl, type_data, evp_aead_seal,
|
481
|
-
hs->traffic_secret_0, hs->hash_len)) {
|
466
|
+
static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
|
467
|
+
SSL *const ssl = hs->ssl;
|
468
|
+
if (!tls13_add_finished(hs) ||
|
469
|
+
/* Update the secret to the master secret and derive traffic keys. */
|
470
|
+
!tls13_advance_key_schedule(hs, kZeroes, hs->hash_len) ||
|
471
|
+
!tls13_derive_application_secrets(hs) ||
|
472
|
+
!tls13_set_traffic_key(ssl, evp_aead_seal, hs->server_traffic_secret_0,
|
473
|
+
hs->hash_len)) {
|
482
474
|
return ssl_hs_error;
|
483
475
|
}
|
484
476
|
|
485
|
-
hs->
|
477
|
+
hs->tls13_state = state_process_client_certificate;
|
486
478
|
return ssl_hs_flush_and_read_message;
|
487
479
|
}
|
488
480
|
|
489
|
-
static enum ssl_hs_wait_t do_process_client_certificate(
|
490
|
-
|
491
|
-
if (!
|
481
|
+
static enum ssl_hs_wait_t do_process_client_certificate(SSL_HANDSHAKE *hs) {
|
482
|
+
SSL *const ssl = hs->ssl;
|
483
|
+
if (!hs->cert_request) {
|
492
484
|
/* OpenSSL returns X509_V_OK when no certificates are requested. This is
|
493
485
|
* classed by them as a bug, but it's assumed by at least NGINX. */
|
494
|
-
|
486
|
+
hs->new_session->verify_result = X509_V_OK;
|
495
487
|
|
496
488
|
/* Skip this state. */
|
497
|
-
hs->
|
489
|
+
hs->tls13_state = state_process_channel_id;
|
498
490
|
return ssl_hs_ok;
|
499
491
|
}
|
500
492
|
|
501
493
|
const int allow_anonymous =
|
502
494
|
(ssl->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) == 0;
|
503
495
|
|
504
|
-
if (!
|
505
|
-
!tls13_process_certificate(
|
506
|
-
!
|
496
|
+
if (!ssl_check_message_type(ssl, SSL3_MT_CERTIFICATE) ||
|
497
|
+
!tls13_process_certificate(hs, allow_anonymous) ||
|
498
|
+
!ssl_hash_current_message(hs)) {
|
507
499
|
return ssl_hs_error;
|
508
500
|
}
|
509
501
|
|
510
|
-
|
511
|
-
* leaf while the client's does. */
|
512
|
-
if (sk_X509_num(ssl->s3->new_session->cert_chain) > 0) {
|
513
|
-
X509_free(sk_X509_shift(ssl->s3->new_session->cert_chain));
|
514
|
-
}
|
515
|
-
|
516
|
-
hs->state = state_process_client_certificate_verify;
|
502
|
+
hs->tls13_state = state_process_client_certificate_verify;
|
517
503
|
return ssl_hs_read_message;
|
518
504
|
}
|
519
505
|
|
520
506
|
static enum ssl_hs_wait_t do_process_client_certificate_verify(
|
521
|
-
|
522
|
-
|
507
|
+
SSL_HANDSHAKE *hs) {
|
508
|
+
SSL *const ssl = hs->ssl;
|
509
|
+
if (sk_CRYPTO_BUFFER_num(hs->new_session->certs) == 0) {
|
523
510
|
/* Skip this state. */
|
524
|
-
hs->
|
511
|
+
hs->tls13_state = state_process_channel_id;
|
525
512
|
return ssl_hs_ok;
|
526
513
|
}
|
527
514
|
|
528
|
-
if (!
|
529
|
-
!tls13_process_certificate_verify(
|
530
|
-
!
|
531
|
-
return
|
515
|
+
if (!ssl_check_message_type(ssl, SSL3_MT_CERTIFICATE_VERIFY) ||
|
516
|
+
!tls13_process_certificate_verify(hs) ||
|
517
|
+
!ssl_hash_current_message(hs)) {
|
518
|
+
return ssl_hs_error;
|
519
|
+
}
|
520
|
+
|
521
|
+
hs->tls13_state = state_process_channel_id;
|
522
|
+
return ssl_hs_read_message;
|
523
|
+
}
|
524
|
+
|
525
|
+
static enum ssl_hs_wait_t do_process_channel_id(SSL_HANDSHAKE *hs) {
|
526
|
+
if (!hs->ssl->s3->tlsext_channel_id_valid) {
|
527
|
+
hs->tls13_state = state_process_client_finished;
|
528
|
+
return ssl_hs_ok;
|
529
|
+
}
|
530
|
+
|
531
|
+
if (!ssl_check_message_type(hs->ssl, SSL3_MT_CHANNEL_ID) ||
|
532
|
+
!tls1_verify_channel_id(hs) ||
|
533
|
+
!ssl_hash_current_message(hs)) {
|
534
|
+
return ssl_hs_error;
|
532
535
|
}
|
533
536
|
|
534
|
-
hs->
|
537
|
+
hs->tls13_state = state_process_client_finished;
|
535
538
|
return ssl_hs_read_message;
|
536
539
|
}
|
537
540
|
|
538
|
-
static enum ssl_hs_wait_t do_process_client_finished(
|
539
|
-
|
540
|
-
if (!
|
541
|
-
!tls13_process_finished(
|
542
|
-
!
|
541
|
+
static enum ssl_hs_wait_t do_process_client_finished(SSL_HANDSHAKE *hs) {
|
542
|
+
SSL *const ssl = hs->ssl;
|
543
|
+
if (!ssl_check_message_type(ssl, SSL3_MT_FINISHED) ||
|
544
|
+
!tls13_process_finished(hs) ||
|
545
|
+
!ssl_hash_current_message(hs) ||
|
543
546
|
/* evp_aead_seal keys have already been switched. */
|
544
|
-
!tls13_set_traffic_key(ssl,
|
545
|
-
hs->
|
546
|
-
!
|
547
|
+
!tls13_set_traffic_key(ssl, evp_aead_open, hs->client_traffic_secret_0,
|
548
|
+
hs->hash_len) ||
|
549
|
+
!tls13_derive_resumption_secret(hs)) {
|
547
550
|
return ssl_hs_error;
|
548
551
|
}
|
549
552
|
|
550
553
|
ssl->method->received_flight(ssl);
|
551
|
-
|
554
|
+
|
555
|
+
/* Rebase the session timestamp so that it is measured from ticket
|
556
|
+
* issuance. */
|
557
|
+
ssl_session_rebase_time(ssl, hs->new_session);
|
558
|
+
hs->tls13_state = state_send_new_session_ticket;
|
552
559
|
return ssl_hs_ok;
|
553
560
|
}
|
554
561
|
|
555
|
-
static enum ssl_hs_wait_t do_send_new_session_ticket(
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
session->ticket_flags = SSL_TICKET_ALLOW_DHE_RESUMPTION;
|
560
|
-
if (!RAND_bytes((uint8_t *)&session->ticket_age_add,
|
561
|
-
sizeof(session->ticket_age_add))) {
|
562
|
-
return 0;
|
563
|
-
}
|
564
|
-
session->ticket_age_add_valid = 1;
|
562
|
+
static enum ssl_hs_wait_t do_send_new_session_ticket(SSL_HANDSHAKE *hs) {
|
563
|
+
/* TLS 1.3 recommends single-use tickets, so issue multiple tickets in case the
|
564
|
+
* client makes several connections before getting a renewal. */
|
565
|
+
static const int kNumTickets = 2;
|
565
566
|
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
!CBB_add_u16(&body, 0 /* no ticket extensions */) ||
|
573
|
-
!CBB_add_u16_length_prefixed(&body, &ticket) ||
|
574
|
-
!ssl_encrypt_ticket(ssl, &ticket, session) ||
|
575
|
-
!ssl->method->finish_message(ssl, &cbb)) {
|
576
|
-
CBB_cleanup(&cbb);
|
577
|
-
return ssl_hs_error;
|
567
|
+
SSL *const ssl = hs->ssl;
|
568
|
+
/* If the client doesn't accept resumption with PSK_DHE_KE, don't send a
|
569
|
+
* session ticket. */
|
570
|
+
if (!hs->accept_psk_mode) {
|
571
|
+
hs->tls13_state = state_done;
|
572
|
+
return ssl_hs_ok;
|
578
573
|
}
|
579
574
|
|
580
|
-
hs->
|
575
|
+
SSL_SESSION *session = hs->new_session;
|
576
|
+
CBB cbb;
|
577
|
+
CBB_zero(&cbb);
|
581
578
|
|
582
|
-
|
583
|
-
|
584
|
-
|
579
|
+
for (int i = 0; i < kNumTickets; i++) {
|
580
|
+
if (!RAND_bytes((uint8_t *)&session->ticket_age_add, 4)) {
|
581
|
+
goto err;
|
582
|
+
}
|
585
583
|
|
586
|
-
|
587
|
-
|
588
|
-
|
584
|
+
CBB body, ticket, extensions;
|
585
|
+
if (!ssl->method->init_message(ssl, &cbb, &body,
|
586
|
+
SSL3_MT_NEW_SESSION_TICKET) ||
|
587
|
+
!CBB_add_u32(&body, session->timeout) ||
|
588
|
+
!CBB_add_u32(&body, session->ticket_age_add) ||
|
589
|
+
!CBB_add_u16_length_prefixed(&body, &ticket) ||
|
590
|
+
!ssl_encrypt_ticket(ssl, &ticket, session) ||
|
591
|
+
!CBB_add_u16_length_prefixed(&body, &extensions)) {
|
592
|
+
goto err;
|
593
|
+
}
|
589
594
|
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
595
|
+
if (ssl->ctx->enable_early_data) {
|
596
|
+
session->ticket_max_early_data = kMaxEarlyDataAccepted;
|
597
|
+
|
598
|
+
CBB early_data_info;
|
599
|
+
if (!CBB_add_u16(&extensions, TLSEXT_TYPE_ticket_early_data_info) ||
|
600
|
+
!CBB_add_u16_length_prefixed(&extensions, &early_data_info) ||
|
601
|
+
!CBB_add_u32(&early_data_info, session->ticket_max_early_data) ||
|
602
|
+
!CBB_flush(&extensions)) {
|
603
|
+
goto err;
|
604
|
+
}
|
605
|
+
}
|
606
|
+
|
607
|
+
/* Add a fake extension. See draft-davidben-tls-grease-01. */
|
608
|
+
if (!CBB_add_u16(&extensions,
|
609
|
+
ssl_get_grease_value(ssl, ssl_grease_ticket_extension)) ||
|
610
|
+
!CBB_add_u16(&extensions, 0 /* empty */)) {
|
611
|
+
goto err;
|
612
|
+
}
|
613
|
+
|
614
|
+
if (!ssl_add_message_cbb(ssl, &cbb)) {
|
615
|
+
goto err;
|
616
|
+
}
|
596
617
|
}
|
618
|
+
|
619
|
+
hs->session_tickets_sent++;
|
620
|
+
hs->tls13_state = state_done;
|
597
621
|
return ssl_hs_flush;
|
598
|
-
}
|
599
622
|
|
600
|
-
|
601
|
-
|
623
|
+
err:
|
624
|
+
CBB_cleanup(&cbb);
|
625
|
+
return ssl_hs_error;
|
626
|
+
}
|
602
627
|
|
603
|
-
|
628
|
+
enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs) {
|
629
|
+
while (hs->tls13_state != state_done) {
|
604
630
|
enum ssl_hs_wait_t ret = ssl_hs_error;
|
605
|
-
enum server_hs_state_t state = hs->
|
631
|
+
enum server_hs_state_t state = hs->tls13_state;
|
606
632
|
switch (state) {
|
607
|
-
case state_process_client_hello:
|
608
|
-
ret = do_process_client_hello(ssl, hs);
|
609
|
-
break;
|
610
633
|
case state_select_parameters:
|
611
|
-
ret = do_select_parameters(
|
634
|
+
ret = do_select_parameters(hs);
|
612
635
|
break;
|
613
636
|
case state_send_hello_retry_request:
|
614
|
-
ret = do_send_hello_retry_request(
|
615
|
-
break;
|
616
|
-
case state_flush_hello_retry_request:
|
617
|
-
ret = do_flush_hello_retry_request(ssl, hs);
|
637
|
+
ret = do_send_hello_retry_request(hs);
|
618
638
|
break;
|
619
639
|
case state_process_second_client_hello:
|
620
|
-
ret = do_process_second_client_hello(
|
640
|
+
ret = do_process_second_client_hello(hs);
|
621
641
|
break;
|
622
642
|
case state_send_server_hello:
|
623
|
-
ret = do_send_server_hello(
|
624
|
-
break;
|
625
|
-
case state_send_encrypted_extensions:
|
626
|
-
ret = do_send_encrypted_extensions(ssl, hs);
|
627
|
-
break;
|
628
|
-
case state_send_certificate_request:
|
629
|
-
ret = do_send_certificate_request(ssl, hs);
|
630
|
-
break;
|
631
|
-
case state_send_server_certificate:
|
632
|
-
ret = do_send_server_certificate(ssl, hs);
|
643
|
+
ret = do_send_server_hello(hs);
|
633
644
|
break;
|
634
645
|
case state_send_server_certificate_verify:
|
635
|
-
ret = do_send_server_certificate_verify(
|
646
|
+
ret = do_send_server_certificate_verify(hs, 1 /* first run */);
|
636
647
|
break;
|
637
648
|
case state_complete_server_certificate_verify:
|
638
|
-
ret = do_send_server_certificate_verify(
|
649
|
+
ret = do_send_server_certificate_verify(hs, 0 /* complete */);
|
639
650
|
break;
|
640
651
|
case state_send_server_finished:
|
641
|
-
ret = do_send_server_finished(
|
642
|
-
break;
|
643
|
-
case state_flush:
|
644
|
-
ret = do_flush(ssl, hs);
|
652
|
+
ret = do_send_server_finished(hs);
|
645
653
|
break;
|
646
654
|
case state_process_client_certificate:
|
647
|
-
ret = do_process_client_certificate(
|
655
|
+
ret = do_process_client_certificate(hs);
|
648
656
|
break;
|
649
657
|
case state_process_client_certificate_verify:
|
650
|
-
ret = do_process_client_certificate_verify(
|
658
|
+
ret = do_process_client_certificate_verify(hs);
|
659
|
+
break;
|
660
|
+
case state_process_channel_id:
|
661
|
+
ret = do_process_channel_id(hs);
|
651
662
|
break;
|
652
663
|
case state_process_client_finished:
|
653
|
-
ret = do_process_client_finished(
|
664
|
+
ret = do_process_client_finished(hs);
|
654
665
|
break;
|
655
666
|
case state_send_new_session_ticket:
|
656
|
-
ret = do_send_new_session_ticket(
|
657
|
-
break;
|
658
|
-
case state_flush_new_session_ticket:
|
659
|
-
ret = do_flush_new_session_ticket(ssl, hs);
|
667
|
+
ret = do_send_new_session_ticket(hs);
|
660
668
|
break;
|
661
669
|
case state_done:
|
662
670
|
ret = ssl_hs_ok;
|