grpc 0.13.1 → 0.14.1.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 +2098 -828
- data/include/grpc/byte_buffer.h +1 -1
- data/include/grpc/byte_buffer_reader.h +1 -20
- data/include/grpc/census.h +4 -4
- data/include/grpc/compression.h +6 -5
- data/include/grpc/grpc.h +31 -20
- data/include/grpc/grpc_security.h +17 -31
- data/include/grpc/grpc_security_constants.h +114 -0
- data/include/grpc/grpc_zookeeper.h +1 -1
- data/include/grpc/impl/codegen/alloc.h +1 -1
- data/include/grpc/impl/codegen/atm.h +1 -1
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
- data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
- data/include/grpc/impl/codegen/atm_win32.h +1 -1
- data/include/grpc/impl/codegen/byte_buffer.h +1 -1
- data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
- data/include/grpc/impl/codegen/grpc_types.h +20 -3
- data/include/grpc/impl/codegen/log.h +9 -2
- data/include/grpc/impl/codegen/port_platform.h +102 -17
- data/include/grpc/impl/codegen/propagation_bits.h +3 -3
- data/include/grpc/impl/codegen/slice.h +3 -3
- data/include/grpc/impl/codegen/slice_buffer.h +3 -3
- data/include/grpc/impl/codegen/status.h +1 -1
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/include/grpc/impl/codegen/sync_posix.h +1 -1
- data/include/grpc/impl/codegen/sync_win32.h +1 -1
- data/include/grpc/impl/codegen/time.h +3 -3
- data/include/grpc/status.h +1 -1
- data/include/grpc/support/alloc.h +1 -1
- data/include/grpc/support/atm.h +1 -1
- data/include/grpc/support/atm_gcc_atomic.h +4 -4
- data/include/grpc/support/atm_gcc_sync.h +1 -1
- data/include/grpc/support/atm_win32.h +1 -1
- data/include/grpc/support/avl.h +1 -1
- data/include/grpc/support/cmdline.h +1 -1
- data/include/grpc/support/cpu.h +1 -1
- data/include/grpc/support/histogram.h +1 -1
- data/include/grpc/support/host_port.h +1 -1
- data/include/grpc/support/log.h +1 -1
- data/include/grpc/support/log_win32.h +1 -1
- data/include/grpc/support/port_platform.h +1 -1
- data/include/grpc/support/slice.h +1 -1
- data/include/grpc/support/slice_buffer.h +1 -1
- data/include/grpc/support/string_util.h +3 -1
- data/include/grpc/support/subprocess.h +2 -2
- data/include/grpc/support/sync.h +1 -1
- data/include/grpc/support/sync_generic.h +1 -1
- data/include/grpc/support/sync_posix.h +1 -1
- data/include/grpc/support/sync_win32.h +1 -1
- data/include/grpc/support/thd.h +1 -1
- data/include/grpc/support/time.h +1 -1
- data/include/grpc/support/tls.h +1 -1
- data/include/grpc/support/tls_gcc.h +45 -1
- data/include/grpc/support/tls_msvc.h +3 -3
- data/include/grpc/support/tls_pthread.h +1 -1
- data/include/grpc/support/useful.h +1 -1
- data/src/boringssl/err_data.c +258 -252
- data/src/core/{census → ext/census}/aggregation.h +3 -3
- data/src/core/{statistics → ext/census}/census_interface.h +3 -3
- data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
- data/src/core/{census → ext/census}/context.c +2 -2
- data/src/core/{census → ext/census}/grpc_context.c +2 -2
- data/src/core/{census → ext/census}/grpc_filter.c +30 -16
- data/src/core/{census → ext/census}/grpc_filter.h +4 -4
- data/src/core/ext/census/grpc_plugin.c +82 -0
- data/src/core/{census → ext/census}/initialize.c +1 -1
- data/src/core/{census → ext/census}/mlog.c +2 -2
- data/src/core/{census → ext/census}/mlog.h +4 -4
- data/src/core/{census → ext/census}/operation.c +0 -0
- data/src/core/{census → ext/census}/placeholders.c +0 -0
- data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
- data/src/core/{census → ext/census}/tracing.c +0 -0
- data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
- data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
- data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
- data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
- data/src/core/ext/client_config/client_channel_factory.h +85 -0
- data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
- data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
- data/src/core/ext/client_config/client_config_plugin.c +95 -0
- data/src/core/{client_config → ext/client_config}/connector.c +2 -2
- data/src/core/{client_config → ext/client_config}/connector.h +7 -10
- data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
- data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
- data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
- data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
- data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
- data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
- data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
- data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
- data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
- data/src/core/ext/client_config/parse_address.c +137 -0
- data/src/core/ext/client_config/parse_address.h +56 -0
- data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
- data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
- data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
- data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
- data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
- data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
- data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
- data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
- data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
- data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
- data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
- data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
- data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
- data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
- data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
- data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
- data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
- data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
- data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
- data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
- data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
- data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
- data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
- data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
- data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
- data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
- data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
- data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
- data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
- data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
- data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
- data/src/core/{channel → lib/channel}/channel_args.c +3 -15
- data/src/core/{channel → lib/channel}/channel_args.h +11 -15
- data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
- data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
- data/src/core/lib/channel/channel_stack_builder.c +277 -0
- data/src/core/lib/channel/channel_stack_builder.h +161 -0
- data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
- data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
- data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
- data/src/core/lib/channel/connected_channel.h +42 -0
- data/src/core/{channel → lib/channel}/context.h +3 -3
- data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
- data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
- data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
- data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
- data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
- data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
- data/src/core/{compression → lib/compression}/message_compress.c +1 -1
- data/src/core/{compression → lib/compression}/message_compress.h +3 -3
- data/src/core/{debug → lib/debug}/trace.c +2 -2
- data/src/core/{debug → lib/debug}/trace.h +3 -3
- data/src/core/{httpcli → lib/http}/format_request.c +8 -8
- data/src/core/{httpcli → lib/http}/format_request.h +4 -4
- data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
- data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
- data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
- data/src/core/lib/http/parser.c +341 -0
- data/src/core/lib/http/parser.h +119 -0
- data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
- data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
- data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
- data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
- data/src/core/lib/iomgr/ev_posix.c +164 -0
- data/src/core/lib/iomgr/ev_posix.h +158 -0
- data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
- data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
- data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
- data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
- data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
- data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
- data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
- data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
- data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
- data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
- data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
- data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
- data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
- data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
- data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
- data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
- data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
- data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
- data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
- data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
- data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
- data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
- data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
- data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
- data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
- data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
- data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
- data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
- data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
- data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
- data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
- data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
- data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
- data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
- data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
- data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
- data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
- data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
- data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
- data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
- data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
- data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
- data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
- data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
- data/src/core/{json → lib/json}/json.c +1 -1
- data/src/core/{json → lib/json}/json.h +4 -4
- data/src/core/{json → lib/json}/json_common.h +3 -3
- data/src/core/{json → lib/json}/json_reader.c +16 -4
- data/src/core/{json → lib/json}/json_reader.h +4 -4
- data/src/core/{json → lib/json}/json_string.c +4 -4
- data/src/core/{json → lib/json}/json_writer.c +1 -1
- data/src/core/{json → lib/json}/json_writer.h +4 -4
- data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
- data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
- data/src/core/{profiling → lib/profiling}/timers.h +3 -3
- data/src/core/{security → lib/security}/auth_filters.h +4 -4
- data/src/core/{security → lib/security}/b64.c +2 -2
- data/src/core/{security → lib/security}/b64.h +4 -4
- data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
- data/src/core/{security → lib/security}/credentials.c +42 -26
- data/src/core/{security → lib/security}/credentials.h +11 -10
- data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
- data/src/core/{security → lib/security}/credentials_posix.c +3 -3
- data/src/core/{security → lib/security}/credentials_win32.c +3 -3
- data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
- data/src/core/{security → lib/security}/handshake.c +4 -4
- data/src/core/{security → lib/security}/handshake.h +6 -6
- data/src/core/{security → lib/security}/json_token.c +4 -4
- data/src/core/{security → lib/security}/json_token.h +4 -4
- data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
- data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
- data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
- data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
- data/src/core/{security → lib/security}/security_connector.c +53 -21
- data/src/core/{security → lib/security}/security_connector.h +8 -8
- data/src/core/{security → lib/security}/security_context.c +5 -5
- data/src/core/{security → lib/security}/security_context.h +5 -5
- data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
- data/src/core/{support → lib/support}/alloc.c +5 -3
- data/src/core/{support → lib/support}/avl.c +1 -1
- data/src/core/lib/support/backoff.c +76 -0
- data/src/core/lib/support/backoff.h +68 -0
- data/src/core/{support → lib/support}/block_annotate.h +3 -3
- data/src/core/{support → lib/support}/cmdline.c +1 -1
- data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
- data/src/core/{support → lib/support}/cpu_linux.c +2 -2
- data/src/core/{support → lib/support}/cpu_posix.c +2 -2
- data/src/core/{support → lib/support}/cpu_windows.c +0 -0
- data/src/core/{support → lib/support}/env.h +3 -3
- data/src/core/{support → lib/support}/env_linux.c +3 -3
- data/src/core/{support → lib/support}/env_posix.c +2 -2
- data/src/core/{support → lib/support}/env_win32.c +27 -21
- data/src/core/{support → lib/support}/histogram.c +1 -1
- data/src/core/{support → lib/support}/host_port.c +1 -1
- data/src/core/{support → lib/support}/load_file.c +4 -4
- data/src/core/{support → lib/support}/load_file.h +4 -4
- data/src/core/{support → lib/support}/log.c +33 -0
- data/src/core/{support → lib/support}/log_android.c +2 -2
- data/src/core/{support → lib/support}/log_linux.c +6 -5
- data/src/core/{support → lib/support}/log_posix.c +3 -3
- data/src/core/{support → lib/support}/log_win32.c +8 -22
- data/src/core/{support → lib/support}/murmur_hash.c +1 -1
- data/src/core/{support → lib/support}/murmur_hash.h +3 -3
- data/src/core/{support → lib/support}/slice.c +0 -0
- data/src/core/{support → lib/support}/slice_buffer.c +0 -0
- data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
- data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
- data/src/core/{support → lib/support}/string.c +1 -1
- data/src/core/{support → lib/support}/string.h +4 -4
- data/src/core/{support → lib/support}/string_posix.c +1 -1
- data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
- data/src/core/lib/support/string_win32.c +83 -0
- data/src/core/{support → lib/support}/string_win32.h +3 -3
- data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
- data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
- data/src/core/{support → lib/support}/sync.c +2 -2
- data/src/core/{support → lib/support}/sync_posix.c +3 -3
- data/src/core/{support → lib/support}/sync_win32.c +1 -1
- data/src/core/{support → lib/support}/thd.c +0 -0
- data/src/core/{support → lib/support}/thd_internal.h +3 -3
- data/src/core/{support → lib/support}/thd_posix.c +4 -3
- data/src/core/{support → lib/support}/thd_win32.c +1 -1
- data/src/core/{support → lib/support}/time.c +2 -2
- data/src/core/{support → lib/support}/time_posix.c +12 -6
- data/src/core/{support → lib/support}/time_precise.c +0 -0
- data/src/core/{support → lib/support}/time_precise.h +3 -3
- data/src/core/{support → lib/support}/time_win32.c +7 -7
- data/src/core/{support → lib/support}/tls_pthread.c +0 -0
- data/src/core/{support → lib/support}/tmpfile.h +4 -4
- data/src/core/lib/support/tmpfile_msys.c +73 -0
- data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
- data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
- data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
- data/src/core/{surface → lib/surface}/alarm.c +3 -3
- data/src/core/{surface → lib/surface}/api_trace.c +1 -1
- data/src/core/{surface → lib/surface}/api_trace.h +4 -4
- data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
- data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
- data/src/core/{surface → lib/surface}/call.c +145 -73
- data/src/core/{surface → lib/surface}/call.h +14 -7
- data/src/core/{surface → lib/surface}/call_details.c +1 -1
- data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
- data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
- data/src/core/{surface → lib/surface}/channel.c +33 -34
- data/src/core/{surface → lib/surface}/channel.h +9 -9
- data/src/core/lib/surface/channel_init.c +140 -0
- data/src/core/lib/surface/channel_init.h +87 -0
- data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
- data/src/core/lib/surface/channel_stack_type.c +54 -0
- data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
- data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
- data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
- data/src/core/{surface → lib/surface}/event_string.c +2 -2
- data/src/core/{surface → lib/surface}/event_string.h +3 -3
- data/src/core/lib/surface/init.c +217 -0
- data/src/core/{surface → lib/surface}/init.h +4 -3
- data/src/core/lib/surface/init_secure.c +89 -0
- data/src/core/{surface → lib/surface}/lame_client.c +31 -19
- data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
- data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
- data/src/core/{surface → lib/surface}/server.c +208 -183
- data/src/core/{surface → lib/surface}/server.h +6 -11
- data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
- data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
- data/src/core/{surface → lib/surface}/version.c +2 -2
- data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
- data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
- data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
- data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
- data/src/core/{transport → lib/transport}/metadata.c +71 -19
- data/src/core/{transport → lib/transport}/metadata.h +11 -4
- data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
- data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
- data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
- data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
- data/src/core/{transport → lib/transport}/transport.c +25 -5
- data/src/core/{transport → lib/transport}/transport.h +41 -16
- data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
- data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
- data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
- data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
- data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
- data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
- data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
- data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
- data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
- data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
- data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
- data/src/ruby/ext/grpc/extconf.rb +14 -20
- data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
- data/src/ruby/ext/grpc/rb_call.c +37 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
- data/src/ruby/ext/grpc/rb_channel.c +2 -3
- data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
- data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
- data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
- data/src/ruby/ext/grpc/rb_server.c +2 -3
- data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
- data/src/ruby/ext/grpc/rb_signal.c +70 -0
- data/src/ruby/ext/grpc/rb_signal.h +39 -0
- data/src/ruby/lib/grpc.rb +21 -13
- data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
- data/src/ruby/lib/grpc/errors.rb +2 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
- data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
- data/src/ruby/lib/grpc/generic/service.rb +5 -15
- data/src/ruby/lib/grpc/grpc.rb +3 -3
- data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
- data/src/ruby/lib/grpc/version.rb +2 -2
- data/src/ruby/pb/generate_proto_ruby.sh +9 -2
- data/src/ruby/pb/grpc/health/checker.rb +1 -1
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
- data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
- data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
- data/src/ruby/pb/test/client.rb +12 -23
- data/src/ruby/pb/test/server.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
- data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
- data/src/ruby/spec/generic/service_spec.rb +0 -69
- data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
- data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
- data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
- data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
- data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
- data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
- data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
- data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
- data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
- data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
- data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
- data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
- data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
- data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
- data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
- data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
- data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
- data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
- data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
- data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
- data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
- data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
- data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
- data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
- data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
- data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
- data/third_party/boringssl/crypto/bio/buffer.c +3 -3
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
- data/third_party/boringssl/crypto/bn/bn.c +1 -1
- data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
- data/third_party/boringssl/crypto/bn/convert.c +9 -4
- data/third_party/boringssl/crypto/bn/div.c +0 -20
- data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
- data/third_party/boringssl/crypto/bn/generic.c +6 -242
- data/third_party/boringssl/crypto/bn/internal.h +9 -70
- data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
- data/third_party/boringssl/crypto/bn/mul.c +6 -26
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
- data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
- data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
- data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
- data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
- data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
- data/third_party/boringssl/crypto/conf/conf.c +9 -0
- data/third_party/boringssl/crypto/cpu-intel.c +1 -1
- data/third_party/boringssl/crypto/crypto.c +2 -0
- data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
- data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
- data/third_party/boringssl/crypto/dh/check.c +32 -10
- data/third_party/boringssl/crypto/dh/dh.c +1 -1
- data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
- data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
- data/third_party/boringssl/crypto/ec/ec.c +45 -31
- data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
- data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
- data/third_party/boringssl/crypto/ec/internal.h +1 -19
- data/third_party/boringssl/crypto/ec/oct.c +12 -0
- data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
- data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
- data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
- data/third_party/boringssl/crypto/ec/simple.c +0 -76
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
- data/third_party/boringssl/crypto/evp/evp.c +4 -3
- data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
- data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
- data/third_party/boringssl/crypto/evp/internal.h +28 -27
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
- data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
- data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
- data/third_party/boringssl/crypto/internal.h +16 -1
- data/third_party/boringssl/crypto/mem.c +2 -2
- data/third_party/boringssl/crypto/modes/ctr.c +2 -1
- data/third_party/boringssl/crypto/modes/gcm.c +5 -3
- data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
- data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
- data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
- data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
- data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
- data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
- data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
- data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
- data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
- data/third_party/boringssl/crypto/rand/rand.c +2 -0
- data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
- data/third_party/boringssl/crypto/rsa/internal.h +1 -9
- data/third_party/boringssl/crypto/rsa/padding.c +73 -77
- data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
- data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
- data/third_party/boringssl/crypto/thread_win.c +15 -13
- data/third_party/boringssl/crypto/time_support.c +0 -6
- data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
- data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
- data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
- data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
- data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
- data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
- data/third_party/boringssl/crypto/x509/by_file.c +186 -206
- data/third_party/boringssl/crypto/x509/charmap.h +11 -11
- data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
- data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
- data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
- data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
- data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
- data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
- data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
- data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
- data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
- data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
- data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
- data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
- data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
- data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
- data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
- data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
- data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
- data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
- data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
- data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
- data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
- data/third_party/boringssl/crypto/x509/x509name.c +280 -275
- data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
- data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
- data/third_party/boringssl/crypto/x509/x509type.c +58 -60
- data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
- data/third_party/boringssl/crypto/x509/x_all.c +282 -328
- data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
- data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
- data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
- data/third_party/boringssl/crypto/x509/x_info.c +30 -27
- data/third_party/boringssl/crypto/x509/x_name.c +387 -388
- data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
- data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
- data/third_party/boringssl/crypto/x509/x_req.c +30 -33
- data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
- data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
- data/third_party/boringssl/crypto/x509/x_val.c +2 -2
- data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
- data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
- data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
- data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
- data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
- data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
- data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
- data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
- data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
- data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
- data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
- data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
- data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
- data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
- data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
- data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
- data/third_party/boringssl/include/openssl/asn1.h +40 -38
- data/third_party/boringssl/include/openssl/base.h +10 -1
- data/third_party/boringssl/include/openssl/bio.h +10 -11
- data/third_party/boringssl/include/openssl/bn.h +12 -9
- data/third_party/boringssl/include/openssl/buf.h +1 -1
- data/third_party/boringssl/include/openssl/bytestring.h +29 -0
- data/third_party/boringssl/include/openssl/conf.h +25 -0
- data/third_party/boringssl/include/openssl/crypto.h +6 -1
- data/third_party/boringssl/include/openssl/curve25519.h +6 -3
- data/third_party/boringssl/include/openssl/dh.h +7 -3
- data/third_party/boringssl/include/openssl/dsa.h +108 -51
- data/third_party/boringssl/include/openssl/ec.h +46 -21
- data/third_party/boringssl/include/openssl/ec_key.h +78 -42
- data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -2
- data/third_party/boringssl/include/openssl/evp.h +120 -37
- data/third_party/boringssl/include/openssl/mem.h +4 -13
- data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
- data/third_party/boringssl/include/openssl/pem.h +0 -9
- data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
- data/third_party/boringssl/include/openssl/rand.h +3 -0
- data/third_party/boringssl/include/openssl/rsa.h +42 -42
- data/third_party/boringssl/include/openssl/ssl.h +115 -41
- data/third_party/boringssl/include/openssl/stack.h +0 -3
- data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
- data/third_party/boringssl/include/openssl/tls1.h +1 -1
- data/third_party/boringssl/include/openssl/x509.h +0 -2
- data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
- data/third_party/boringssl/ssl/d1_both.c +102 -101
- data/third_party/boringssl/ssl/d1_clnt.c +145 -150
- data/third_party/boringssl/ssl/d1_lib.c +63 -62
- data/third_party/boringssl/ssl/d1_pkt.c +73 -71
- data/third_party/boringssl/ssl/d1_srvr.c +116 -125
- data/third_party/boringssl/ssl/dtls_record.c +3 -3
- data/third_party/boringssl/ssl/internal.h +210 -208
- data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
- data/third_party/boringssl/ssl/s3_both.c +116 -130
- data/third_party/boringssl/ssl/s3_clnt.c +589 -740
- data/third_party/boringssl/ssl/s3_enc.c +52 -151
- data/third_party/boringssl/ssl/s3_lib.c +70 -76
- data/third_party/boringssl/ssl/s3_pkt.c +105 -144
- data/third_party/boringssl/ssl/s3_srvr.c +542 -806
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
- data/third_party/boringssl/ssl/ssl_cert.c +2 -2
- data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
- data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
- data/third_party/boringssl/ssl/ssl_lib.c +260 -221
- data/third_party/boringssl/ssl/ssl_session.c +17 -17
- data/third_party/boringssl/ssl/t1_enc.c +128 -273
- data/third_party/boringssl/ssl/t1_lib.c +134 -258
- data/third_party/boringssl/ssl/test/test_config.h +2 -0
- data/third_party/boringssl/ssl/tls_record.c +52 -15
- metadata +385 -359
- data/src/core/channel/client_uchannel.c +0 -243
- data/src/core/channel/client_uchannel.h +0 -60
- data/src/core/channel/connected_channel.h +0 -51
- data/src/core/client_config/lb_policies/pick_first.h +0 -43
- data/src/core/client_config/resolvers/dns_resolver.h +0 -42
- data/src/core/client_config/subchannel_factory.h +0 -66
- data/src/core/httpcli/parser.c +0 -211
- data/src/core/iomgr/fd_posix.c +0 -451
- data/src/core/iomgr/fd_posix.h +0 -192
- data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
- data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
- data/src/core/iomgr/pollset_posix.c +0 -633
- data/src/core/iomgr/pollset_posix.h +0 -153
- data/src/core/iomgr/pollset_set_posix.c +0 -202
- data/src/core/iomgr/pollset_set_posix.h +0 -45
- data/src/core/surface/init.c +0 -174
- data/src/core/surface/init_secure.c +0 -42
- data/src/core/surface/server_create.c +0 -48
- data/src/core/transport/chttp2/huffsyms.c +0 -297
- data/src/ruby/bin/grpc_ruby_interop_client +0 -33
- data/src/ruby/bin/grpc_ruby_interop_server +0 -33
- data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -56,7 +56,7 @@ SSL_AEAD_CTX *SSL_AEAD_CTX_new(enum evp_aead_direction_t direction,
|
|
56
56
|
enc_key_len += fixed_iv_len;
|
57
57
|
}
|
58
58
|
|
59
|
-
SSL_AEAD_CTX *aead_ctx =
|
59
|
+
SSL_AEAD_CTX *aead_ctx = OPENSSL_malloc(sizeof(SSL_AEAD_CTX));
|
60
60
|
if (aead_ctx == NULL) {
|
61
61
|
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
62
62
|
return NULL;
|
@@ -139,7 +139,7 @@ int SSL_get_ex_data_X509_STORE_CTX_idx(void) {
|
|
139
139
|
}
|
140
140
|
|
141
141
|
CERT *ssl_cert_new(void) {
|
142
|
-
CERT *ret =
|
142
|
+
CERT *ret = OPENSSL_malloc(sizeof(CERT));
|
143
143
|
if (ret == NULL) {
|
144
144
|
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
145
145
|
return NULL;
|
@@ -150,7 +150,7 @@ CERT *ssl_cert_new(void) {
|
|
150
150
|
}
|
151
151
|
|
152
152
|
CERT *ssl_cert_dup(CERT *cert) {
|
153
|
-
CERT *ret =
|
153
|
+
CERT *ret = OPENSSL_malloc(sizeof(CERT));
|
154
154
|
if (ret == NULL) {
|
155
155
|
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
156
156
|
return NULL;
|
@@ -1392,7 +1392,7 @@ ssl_create_cipher_list(const SSL_PROTOCOL_METHOD *ssl_method,
|
|
1392
1392
|
/* Now we have to collect the available ciphers from the compiled in ciphers.
|
1393
1393
|
* We cannot get more than the number compiled in, so it is used for
|
1394
1394
|
* allocation. */
|
1395
|
-
co_list =
|
1395
|
+
co_list = OPENSSL_malloc(sizeof(CIPHER_ORDER) * kCiphersLen);
|
1396
1396
|
if (co_list == NULL) {
|
1397
1397
|
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
1398
1398
|
return NULL;
|
@@ -1616,6 +1616,10 @@ int SSL_CIPHER_is_ECDSA(const SSL_CIPHER *cipher) {
|
|
1616
1616
|
return (cipher->algorithm_auth & SSL_aECDSA) != 0;
|
1617
1617
|
}
|
1618
1618
|
|
1619
|
+
int SSL_CIPHER_is_ECDHE(const SSL_CIPHER *cipher) {
|
1620
|
+
return (cipher->algorithm_mkey & SSL_kECDHE) != 0;
|
1621
|
+
}
|
1622
|
+
|
1619
1623
|
uint16_t SSL_CIPHER_get_min_version(const SSL_CIPHER *cipher) {
|
1620
1624
|
if (cipher->algorithm_prf != SSL_HANDSHAKE_MAC_DEFAULT) {
|
1621
1625
|
/* Cipher suites before TLS 1.2 use the default PRF, while all those added
|
@@ -1800,7 +1804,6 @@ const char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf,
|
|
1800
1804
|
int len) {
|
1801
1805
|
const char *kx, *au, *enc, *mac;
|
1802
1806
|
uint32_t alg_mkey, alg_auth, alg_enc, alg_mac;
|
1803
|
-
static const char *format = "%-23s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s\n";
|
1804
1807
|
|
1805
1808
|
alg_mkey = cipher->algorithm_mkey;
|
1806
1809
|
alg_auth = cipher->algorithm_auth;
|
@@ -1924,7 +1927,8 @@ const char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf,
|
|
1924
1927
|
return "Buffer too small";
|
1925
1928
|
}
|
1926
1929
|
|
1927
|
-
BIO_snprintf(buf, len,
|
1930
|
+
BIO_snprintf(buf, len, "%-23s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s\n",
|
1931
|
+
cipher->name, kx, au, enc, mac);
|
1928
1932
|
return buf;
|
1929
1933
|
}
|
1930
1934
|
|
@@ -0,0 +1,374 @@
|
|
1
|
+
/* Copyright (c) 2015, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include <openssl/ssl.h>
|
16
|
+
|
17
|
+
#include <assert.h>
|
18
|
+
#include <string.h>
|
19
|
+
|
20
|
+
#include <openssl/bn.h>
|
21
|
+
#include <openssl/bytestring.h>
|
22
|
+
#include <openssl/curve25519.h>
|
23
|
+
#include <openssl/ec.h>
|
24
|
+
#include <openssl/err.h>
|
25
|
+
#include <openssl/mem.h>
|
26
|
+
#include <openssl/obj.h>
|
27
|
+
|
28
|
+
#include "internal.h"
|
29
|
+
|
30
|
+
|
31
|
+
/* |EC_POINT| implementation. */
|
32
|
+
|
33
|
+
static void ssl_ec_point_cleanup(SSL_ECDH_CTX *ctx) {
|
34
|
+
BIGNUM *private_key = (BIGNUM *)ctx->data;
|
35
|
+
BN_clear_free(private_key);
|
36
|
+
}
|
37
|
+
|
38
|
+
static int ssl_ec_point_generate_keypair(SSL_ECDH_CTX *ctx, CBB *out) {
|
39
|
+
assert(ctx->data == NULL);
|
40
|
+
BIGNUM *private_key = BN_new();
|
41
|
+
if (private_key == NULL) {
|
42
|
+
return 0;
|
43
|
+
}
|
44
|
+
ctx->data = private_key;
|
45
|
+
|
46
|
+
/* Set up a shared |BN_CTX| for all operations. */
|
47
|
+
BN_CTX *bn_ctx = BN_CTX_new();
|
48
|
+
if (bn_ctx == NULL) {
|
49
|
+
return 0;
|
50
|
+
}
|
51
|
+
BN_CTX_start(bn_ctx);
|
52
|
+
|
53
|
+
int ret = 0;
|
54
|
+
EC_POINT *public_key = NULL;
|
55
|
+
EC_GROUP *group = EC_GROUP_new_by_curve_name(ctx->method->nid);
|
56
|
+
if (group == NULL) {
|
57
|
+
goto err;
|
58
|
+
}
|
59
|
+
|
60
|
+
/* Generate a private key. */
|
61
|
+
const BIGNUM *order = EC_GROUP_get0_order(group);
|
62
|
+
do {
|
63
|
+
if (!BN_rand_range(private_key, order)) {
|
64
|
+
goto err;
|
65
|
+
}
|
66
|
+
} while (BN_is_zero(private_key));
|
67
|
+
|
68
|
+
/* Compute the corresponding public key and serialize it. */
|
69
|
+
public_key = EC_POINT_new(group);
|
70
|
+
if (public_key == NULL ||
|
71
|
+
!EC_POINT_mul(group, public_key, private_key, NULL, NULL, bn_ctx) ||
|
72
|
+
!EC_POINT_point2cbb(out, group, public_key, POINT_CONVERSION_UNCOMPRESSED,
|
73
|
+
bn_ctx)) {
|
74
|
+
goto err;
|
75
|
+
}
|
76
|
+
|
77
|
+
ret = 1;
|
78
|
+
|
79
|
+
err:
|
80
|
+
EC_GROUP_free(group);
|
81
|
+
EC_POINT_free(public_key);
|
82
|
+
BN_CTX_end(bn_ctx);
|
83
|
+
BN_CTX_free(bn_ctx);
|
84
|
+
return ret;
|
85
|
+
}
|
86
|
+
|
87
|
+
int ssl_ec_point_compute_secret(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
|
88
|
+
size_t *out_secret_len, uint8_t *out_alert,
|
89
|
+
const uint8_t *peer_key, size_t peer_key_len) {
|
90
|
+
BIGNUM *private_key = (BIGNUM *)ctx->data;
|
91
|
+
assert(private_key != NULL);
|
92
|
+
*out_alert = SSL_AD_INTERNAL_ERROR;
|
93
|
+
|
94
|
+
/* Set up a shared |BN_CTX| for all operations. */
|
95
|
+
BN_CTX *bn_ctx = BN_CTX_new();
|
96
|
+
if (bn_ctx == NULL) {
|
97
|
+
return 0;
|
98
|
+
}
|
99
|
+
BN_CTX_start(bn_ctx);
|
100
|
+
|
101
|
+
int ret = 0;
|
102
|
+
EC_GROUP *group = EC_GROUP_new_by_curve_name(ctx->method->nid);
|
103
|
+
EC_POINT *peer_point = NULL, *result = NULL;
|
104
|
+
uint8_t *secret = NULL;
|
105
|
+
if (group == NULL) {
|
106
|
+
goto err;
|
107
|
+
}
|
108
|
+
|
109
|
+
/* Compute the x-coordinate of |peer_key| * |private_key|. */
|
110
|
+
peer_point = EC_POINT_new(group);
|
111
|
+
result = EC_POINT_new(group);
|
112
|
+
if (peer_point == NULL || result == NULL) {
|
113
|
+
goto err;
|
114
|
+
}
|
115
|
+
BIGNUM *x = BN_CTX_get(bn_ctx);
|
116
|
+
if (x == NULL) {
|
117
|
+
goto err;
|
118
|
+
}
|
119
|
+
if (!EC_POINT_oct2point(group, peer_point, peer_key, peer_key_len, bn_ctx)) {
|
120
|
+
*out_alert = SSL_AD_DECODE_ERROR;
|
121
|
+
goto err;
|
122
|
+
}
|
123
|
+
if (!EC_POINT_mul(group, result, NULL, peer_point, private_key, bn_ctx) ||
|
124
|
+
!EC_POINT_get_affine_coordinates_GFp(group, result, x, NULL, bn_ctx)) {
|
125
|
+
goto err;
|
126
|
+
}
|
127
|
+
|
128
|
+
/* Encode the x-coordinate left-padded with zeros. */
|
129
|
+
size_t secret_len = (EC_GROUP_get_degree(group) + 7) / 8;
|
130
|
+
secret = OPENSSL_malloc(secret_len);
|
131
|
+
if (secret == NULL || !BN_bn2bin_padded(secret, secret_len, x)) {
|
132
|
+
goto err;
|
133
|
+
}
|
134
|
+
|
135
|
+
*out_secret = secret;
|
136
|
+
*out_secret_len = secret_len;
|
137
|
+
secret = NULL;
|
138
|
+
ret = 1;
|
139
|
+
|
140
|
+
err:
|
141
|
+
EC_GROUP_free(group);
|
142
|
+
EC_POINT_free(peer_point);
|
143
|
+
EC_POINT_free(result);
|
144
|
+
BN_CTX_end(bn_ctx);
|
145
|
+
BN_CTX_free(bn_ctx);
|
146
|
+
OPENSSL_free(secret);
|
147
|
+
return ret;
|
148
|
+
}
|
149
|
+
|
150
|
+
|
151
|
+
/* X25119 implementation. */
|
152
|
+
|
153
|
+
static void ssl_x25519_cleanup(SSL_ECDH_CTX *ctx) {
|
154
|
+
if (ctx->data == NULL) {
|
155
|
+
return;
|
156
|
+
}
|
157
|
+
OPENSSL_cleanse(ctx->data, 32);
|
158
|
+
OPENSSL_free(ctx->data);
|
159
|
+
}
|
160
|
+
|
161
|
+
static int ssl_x25519_generate_keypair(SSL_ECDH_CTX *ctx, CBB *out) {
|
162
|
+
assert(ctx->data == NULL);
|
163
|
+
|
164
|
+
ctx->data = OPENSSL_malloc(32);
|
165
|
+
if (ctx->data == NULL) {
|
166
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
167
|
+
return 0;
|
168
|
+
}
|
169
|
+
uint8_t public_key[32];
|
170
|
+
X25519_keypair(public_key, (uint8_t *)ctx->data);
|
171
|
+
return CBB_add_bytes(out, public_key, sizeof(public_key));
|
172
|
+
}
|
173
|
+
|
174
|
+
static int ssl_x25519_compute_secret(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
|
175
|
+
size_t *out_secret_len, uint8_t *out_alert,
|
176
|
+
const uint8_t *peer_key,
|
177
|
+
size_t peer_key_len) {
|
178
|
+
assert(ctx->data != NULL);
|
179
|
+
*out_alert = SSL_AD_INTERNAL_ERROR;
|
180
|
+
|
181
|
+
uint8_t *secret = OPENSSL_malloc(32);
|
182
|
+
if (secret == NULL) {
|
183
|
+
return 0;
|
184
|
+
}
|
185
|
+
|
186
|
+
if (peer_key_len != 32 ||
|
187
|
+
!X25519(secret, (uint8_t *)ctx->data, peer_key)) {
|
188
|
+
OPENSSL_free(secret);
|
189
|
+
*out_alert = SSL_AD_DECODE_ERROR;
|
190
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ECPOINT);
|
191
|
+
return 0;
|
192
|
+
}
|
193
|
+
|
194
|
+
*out_secret = secret;
|
195
|
+
*out_secret_len = 32;
|
196
|
+
return 1;
|
197
|
+
}
|
198
|
+
|
199
|
+
|
200
|
+
/* Legacy DHE-based implementation. */
|
201
|
+
|
202
|
+
static void ssl_dhe_cleanup(SSL_ECDH_CTX *ctx) {
|
203
|
+
DH_free((DH *)ctx->data);
|
204
|
+
}
|
205
|
+
|
206
|
+
static int ssl_dhe_generate_keypair(SSL_ECDH_CTX *ctx, CBB *out) {
|
207
|
+
DH *dh = (DH *)ctx->data;
|
208
|
+
/* The group must have been initialized already, but not the key. */
|
209
|
+
assert(dh != NULL);
|
210
|
+
assert(dh->priv_key == NULL);
|
211
|
+
|
212
|
+
/* Due to a bug in yaSSL, the public key must be zero padded to the size of
|
213
|
+
* the prime. */
|
214
|
+
return DH_generate_key(dh) &&
|
215
|
+
BN_bn2cbb_padded(out, BN_num_bytes(dh->p), dh->pub_key);
|
216
|
+
}
|
217
|
+
|
218
|
+
static int ssl_dhe_compute_secret(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
|
219
|
+
size_t *out_secret_len, uint8_t *out_alert,
|
220
|
+
const uint8_t *peer_key,
|
221
|
+
size_t peer_key_len) {
|
222
|
+
DH *dh = (DH *)ctx->data;
|
223
|
+
assert(dh != NULL);
|
224
|
+
assert(dh->priv_key != NULL);
|
225
|
+
*out_alert = SSL_AD_INTERNAL_ERROR;
|
226
|
+
|
227
|
+
int secret_len = 0;
|
228
|
+
uint8_t *secret = NULL;
|
229
|
+
BIGNUM *peer_point = BN_bin2bn(peer_key, peer_key_len, NULL);
|
230
|
+
if (peer_point == NULL) {
|
231
|
+
goto err;
|
232
|
+
}
|
233
|
+
|
234
|
+
secret = OPENSSL_malloc(DH_size(dh));
|
235
|
+
if (secret == NULL) {
|
236
|
+
goto err;
|
237
|
+
}
|
238
|
+
secret_len = DH_compute_key(secret, peer_point, dh);
|
239
|
+
if (secret_len <= 0) {
|
240
|
+
goto err;
|
241
|
+
}
|
242
|
+
|
243
|
+
*out_secret = secret;
|
244
|
+
*out_secret_len = (size_t)secret_len;
|
245
|
+
BN_free(peer_point);
|
246
|
+
return 1;
|
247
|
+
|
248
|
+
err:
|
249
|
+
if (secret_len > 0) {
|
250
|
+
OPENSSL_cleanse(secret, (size_t)secret_len);
|
251
|
+
}
|
252
|
+
OPENSSL_free(secret);
|
253
|
+
BN_free(peer_point);
|
254
|
+
return 0;
|
255
|
+
}
|
256
|
+
|
257
|
+
static const SSL_ECDH_METHOD kDHEMethod = {
|
258
|
+
NID_undef, 0, "",
|
259
|
+
ssl_dhe_cleanup,
|
260
|
+
ssl_dhe_generate_keypair,
|
261
|
+
ssl_dhe_compute_secret,
|
262
|
+
};
|
263
|
+
|
264
|
+
|
265
|
+
static const SSL_ECDH_METHOD kMethods[] = {
|
266
|
+
{
|
267
|
+
NID_X9_62_prime256v1,
|
268
|
+
SSL_CURVE_SECP256R1,
|
269
|
+
"P-256",
|
270
|
+
ssl_ec_point_cleanup,
|
271
|
+
ssl_ec_point_generate_keypair,
|
272
|
+
ssl_ec_point_compute_secret,
|
273
|
+
},
|
274
|
+
{
|
275
|
+
NID_secp384r1,
|
276
|
+
SSL_CURVE_SECP384R1,
|
277
|
+
"P-384",
|
278
|
+
ssl_ec_point_cleanup,
|
279
|
+
ssl_ec_point_generate_keypair,
|
280
|
+
ssl_ec_point_compute_secret,
|
281
|
+
},
|
282
|
+
{
|
283
|
+
NID_secp521r1,
|
284
|
+
SSL_CURVE_SECP521R1,
|
285
|
+
"P-521",
|
286
|
+
ssl_ec_point_cleanup,
|
287
|
+
ssl_ec_point_generate_keypair,
|
288
|
+
ssl_ec_point_compute_secret,
|
289
|
+
},
|
290
|
+
{
|
291
|
+
NID_x25519,
|
292
|
+
SSL_CURVE_X25519,
|
293
|
+
"X25519",
|
294
|
+
ssl_x25519_cleanup,
|
295
|
+
ssl_x25519_generate_keypair,
|
296
|
+
ssl_x25519_compute_secret,
|
297
|
+
},
|
298
|
+
};
|
299
|
+
|
300
|
+
static const SSL_ECDH_METHOD *method_from_curve_id(uint16_t curve_id) {
|
301
|
+
size_t i;
|
302
|
+
for (i = 0; i < sizeof(kMethods) / sizeof(kMethods[0]); i++) {
|
303
|
+
if (kMethods[i].curve_id == curve_id) {
|
304
|
+
return &kMethods[i];
|
305
|
+
}
|
306
|
+
}
|
307
|
+
return NULL;
|
308
|
+
}
|
309
|
+
|
310
|
+
static const SSL_ECDH_METHOD *method_from_nid(int nid) {
|
311
|
+
size_t i;
|
312
|
+
for (i = 0; i < sizeof(kMethods) / sizeof(kMethods[0]); i++) {
|
313
|
+
if (kMethods[i].nid == nid) {
|
314
|
+
return &kMethods[i];
|
315
|
+
}
|
316
|
+
}
|
317
|
+
return NULL;
|
318
|
+
}
|
319
|
+
|
320
|
+
const char* SSL_get_curve_name(uint16_t curve_id) {
|
321
|
+
const SSL_ECDH_METHOD *method = method_from_curve_id(curve_id);
|
322
|
+
if (method == NULL) {
|
323
|
+
return NULL;
|
324
|
+
}
|
325
|
+
return method->name;
|
326
|
+
}
|
327
|
+
|
328
|
+
int ssl_nid_to_curve_id(uint16_t *out_curve_id, int nid) {
|
329
|
+
const SSL_ECDH_METHOD *method = method_from_nid(nid);
|
330
|
+
if (method == NULL) {
|
331
|
+
return 0;
|
332
|
+
}
|
333
|
+
*out_curve_id = method->curve_id;
|
334
|
+
return 1;
|
335
|
+
}
|
336
|
+
|
337
|
+
int SSL_ECDH_CTX_init(SSL_ECDH_CTX *ctx, uint16_t curve_id) {
|
338
|
+
SSL_ECDH_CTX_cleanup(ctx);
|
339
|
+
|
340
|
+
const SSL_ECDH_METHOD *method = method_from_curve_id(curve_id);
|
341
|
+
if (method == NULL) {
|
342
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE);
|
343
|
+
return 0;
|
344
|
+
}
|
345
|
+
ctx->method = method;
|
346
|
+
return 1;
|
347
|
+
}
|
348
|
+
|
349
|
+
void SSL_ECDH_CTX_init_for_dhe(SSL_ECDH_CTX *ctx, DH *params) {
|
350
|
+
SSL_ECDH_CTX_cleanup(ctx);
|
351
|
+
|
352
|
+
ctx->method = &kDHEMethod;
|
353
|
+
ctx->data = params;
|
354
|
+
}
|
355
|
+
|
356
|
+
void SSL_ECDH_CTX_cleanup(SSL_ECDH_CTX *ctx) {
|
357
|
+
if (ctx->method == NULL) {
|
358
|
+
return;
|
359
|
+
}
|
360
|
+
ctx->method->cleanup(ctx);
|
361
|
+
ctx->method = NULL;
|
362
|
+
ctx->data = NULL;
|
363
|
+
}
|
364
|
+
|
365
|
+
int SSL_ECDH_CTX_generate_keypair(SSL_ECDH_CTX *ctx, CBB *out_public_key) {
|
366
|
+
return ctx->method->generate_keypair(ctx, out_public_key);
|
367
|
+
}
|
368
|
+
|
369
|
+
int SSL_ECDH_CTX_compute_secret(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
|
370
|
+
size_t *out_secret_len, uint8_t *out_alert,
|
371
|
+
const uint8_t *peer_key, size_t peer_key_len) {
|
372
|
+
return ctx->method->compute_secret(ctx, out_secret, out_secret_len, out_alert,
|
373
|
+
peer_key, peer_key_len);
|
374
|
+
}
|
@@ -181,12 +181,21 @@ int SSL_library_init(void) {
|
|
181
181
|
return 1;
|
182
182
|
}
|
183
183
|
|
184
|
-
static uint32_t ssl_session_hash(const SSL_SESSION *
|
184
|
+
static uint32_t ssl_session_hash(const SSL_SESSION *sess) {
|
185
|
+
const uint8_t *session_id = sess->session_id;
|
186
|
+
|
187
|
+
uint8_t tmp_storage[sizeof(uint32_t)];
|
188
|
+
if (sess->session_id_length < sizeof(tmp_storage)) {
|
189
|
+
memset(tmp_storage, 0, sizeof(tmp_storage));
|
190
|
+
memcpy(tmp_storage, sess->session_id, sess->session_id_length);
|
191
|
+
session_id = tmp_storage;
|
192
|
+
}
|
193
|
+
|
185
194
|
uint32_t hash =
|
186
|
-
((uint32_t)
|
187
|
-
((uint32_t)
|
188
|
-
((uint32_t)
|
189
|
-
((uint32_t)
|
195
|
+
((uint32_t)session_id[0]) |
|
196
|
+
((uint32_t)session_id[1] << 8) |
|
197
|
+
((uint32_t)session_id[2] << 16) |
|
198
|
+
((uint32_t)session_id[3] << 24);
|
190
199
|
|
191
200
|
return hash;
|
192
201
|
}
|
@@ -221,7 +230,7 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *method) {
|
|
221
230
|
goto err;
|
222
231
|
}
|
223
232
|
|
224
|
-
ret =
|
233
|
+
ret = OPENSSL_malloc(sizeof(SSL_CTX));
|
225
234
|
if (ret == NULL) {
|
226
235
|
goto err;
|
227
236
|
}
|
@@ -344,8 +353,6 @@ void SSL_CTX_free(SSL_CTX *ctx) {
|
|
344
353
|
}
|
345
354
|
|
346
355
|
SSL *SSL_new(SSL_CTX *ctx) {
|
347
|
-
SSL *s;
|
348
|
-
|
349
356
|
if (ctx == NULL) {
|
350
357
|
OPENSSL_PUT_ERROR(SSL, SSL_R_NULL_SSL_CTX);
|
351
358
|
return NULL;
|
@@ -355,100 +362,99 @@ SSL *SSL_new(SSL_CTX *ctx) {
|
|
355
362
|
return NULL;
|
356
363
|
}
|
357
364
|
|
358
|
-
|
359
|
-
if (
|
365
|
+
SSL *ssl = OPENSSL_malloc(sizeof(SSL));
|
366
|
+
if (ssl == NULL) {
|
360
367
|
goto err;
|
361
368
|
}
|
362
|
-
memset(
|
369
|
+
memset(ssl, 0, sizeof(SSL));
|
363
370
|
|
364
|
-
|
365
|
-
|
371
|
+
ssl->min_version = ctx->min_version;
|
372
|
+
ssl->max_version = ctx->max_version;
|
366
373
|
|
367
|
-
|
368
|
-
|
369
|
-
|
374
|
+
ssl->options = ctx->options;
|
375
|
+
ssl->mode = ctx->mode;
|
376
|
+
ssl->max_cert_list = ctx->max_cert_list;
|
370
377
|
|
371
|
-
|
372
|
-
if (
|
378
|
+
ssl->cert = ssl_cert_dup(ctx->cert);
|
379
|
+
if (ssl->cert == NULL) {
|
373
380
|
goto err;
|
374
381
|
}
|
375
382
|
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
assert(
|
381
|
-
memcpy(&
|
382
|
-
|
383
|
+
ssl->msg_callback = ctx->msg_callback;
|
384
|
+
ssl->msg_callback_arg = ctx->msg_callback_arg;
|
385
|
+
ssl->verify_mode = ctx->verify_mode;
|
386
|
+
ssl->sid_ctx_length = ctx->sid_ctx_length;
|
387
|
+
assert(ssl->sid_ctx_length <= sizeof ssl->sid_ctx);
|
388
|
+
memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
|
389
|
+
ssl->verify_callback = ctx->default_verify_callback;
|
383
390
|
|
384
|
-
|
385
|
-
if (!
|
391
|
+
ssl->param = X509_VERIFY_PARAM_new();
|
392
|
+
if (!ssl->param) {
|
386
393
|
goto err;
|
387
394
|
}
|
388
|
-
X509_VERIFY_PARAM_inherit(
|
389
|
-
|
390
|
-
|
395
|
+
X509_VERIFY_PARAM_inherit(ssl->param, ctx->param);
|
396
|
+
ssl->quiet_shutdown = ctx->quiet_shutdown;
|
397
|
+
ssl->max_send_fragment = ctx->max_send_fragment;
|
391
398
|
|
392
399
|
CRYPTO_refcount_inc(&ctx->references);
|
393
|
-
|
400
|
+
ssl->ctx = ctx;
|
394
401
|
CRYPTO_refcount_inc(&ctx->references);
|
395
|
-
|
402
|
+
ssl->initial_ctx = ctx;
|
396
403
|
|
397
404
|
if (ctx->tlsext_ellipticcurvelist) {
|
398
|
-
|
405
|
+
ssl->tlsext_ellipticcurvelist =
|
399
406
|
BUF_memdup(ctx->tlsext_ellipticcurvelist,
|
400
407
|
ctx->tlsext_ellipticcurvelist_length * 2);
|
401
|
-
if (!
|
408
|
+
if (!ssl->tlsext_ellipticcurvelist) {
|
402
409
|
goto err;
|
403
410
|
}
|
404
|
-
|
411
|
+
ssl->tlsext_ellipticcurvelist_length = ctx->tlsext_ellipticcurvelist_length;
|
405
412
|
}
|
406
413
|
|
407
|
-
if (
|
408
|
-
|
409
|
-
|
410
|
-
if (
|
414
|
+
if (ssl->ctx->alpn_client_proto_list) {
|
415
|
+
ssl->alpn_client_proto_list = BUF_memdup(
|
416
|
+
ssl->ctx->alpn_client_proto_list, ssl->ctx->alpn_client_proto_list_len);
|
417
|
+
if (ssl->alpn_client_proto_list == NULL) {
|
411
418
|
goto err;
|
412
419
|
}
|
413
|
-
|
420
|
+
ssl->alpn_client_proto_list_len = ssl->ctx->alpn_client_proto_list_len;
|
414
421
|
}
|
415
422
|
|
416
|
-
|
417
|
-
|
423
|
+
ssl->verify_result = X509_V_OK;
|
424
|
+
ssl->method = ctx->method;
|
418
425
|
|
419
|
-
if (!
|
426
|
+
if (!ssl->method->ssl_new(ssl)) {
|
420
427
|
goto err;
|
421
428
|
}
|
422
|
-
s->enc_method = ssl3_get_enc_method(s->version);
|
423
|
-
assert(s->enc_method != NULL);
|
424
429
|
|
425
|
-
|
430
|
+
ssl->rwstate = SSL_NOTHING;
|
426
431
|
|
427
|
-
CRYPTO_new_ex_data(&
|
432
|
+
CRYPTO_new_ex_data(&ssl->ex_data);
|
428
433
|
|
429
|
-
|
434
|
+
ssl->psk_identity_hint = NULL;
|
430
435
|
if (ctx->psk_identity_hint) {
|
431
|
-
|
432
|
-
if (
|
436
|
+
ssl->psk_identity_hint = BUF_strdup(ctx->psk_identity_hint);
|
437
|
+
if (ssl->psk_identity_hint == NULL) {
|
433
438
|
goto err;
|
434
439
|
}
|
435
440
|
}
|
436
|
-
|
437
|
-
|
441
|
+
ssl->psk_client_callback = ctx->psk_client_callback;
|
442
|
+
ssl->psk_server_callback = ctx->psk_server_callback;
|
438
443
|
|
439
|
-
|
444
|
+
ssl->tlsext_channel_id_enabled = ctx->tlsext_channel_id_enabled;
|
440
445
|
if (ctx->tlsext_channel_id_private) {
|
441
|
-
|
446
|
+
ssl->tlsext_channel_id_private =
|
442
447
|
EVP_PKEY_up_ref(ctx->tlsext_channel_id_private);
|
443
448
|
}
|
444
449
|
|
445
|
-
|
446
|
-
|
450
|
+
ssl->signed_cert_timestamps_enabled =
|
451
|
+
ssl->ctx->signed_cert_timestamps_enabled;
|
452
|
+
ssl->ocsp_stapling_enabled = ssl->ctx->ocsp_stapling_enabled;
|
447
453
|
|
448
|
-
return
|
454
|
+
return ssl;
|
449
455
|
|
450
456
|
err:
|
451
|
-
SSL_free(
|
457
|
+
SSL_free(ssl);
|
452
458
|
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
453
459
|
|
454
460
|
return NULL;
|
@@ -487,8 +493,6 @@ void SSL_free(SSL *ssl) {
|
|
487
493
|
ssl_clear_bad_session(ssl);
|
488
494
|
SSL_SESSION_free(ssl->session);
|
489
495
|
|
490
|
-
ssl_clear_cipher_ctx(ssl);
|
491
|
-
|
492
496
|
ssl_cert_free(ssl->cert);
|
493
497
|
|
494
498
|
OPENSSL_free(ssl->tlsext_hostname);
|
@@ -498,7 +502,6 @@ void SSL_free(SSL *ssl) {
|
|
498
502
|
EVP_PKEY_free(ssl->tlsext_channel_id_private);
|
499
503
|
OPENSSL_free(ssl->psk_identity_hint);
|
500
504
|
sk_X509_NAME_pop_free(ssl->client_CA, X509_NAME_free);
|
501
|
-
OPENSSL_free(ssl->next_proto_negotiated);
|
502
505
|
sk_SRTP_PROTECTION_PROFILE_free(ssl->srtp_profiles);
|
503
506
|
|
504
507
|
if (ssl->method != NULL) {
|
@@ -514,8 +517,6 @@ void SSL_set_connect_state(SSL *ssl) {
|
|
514
517
|
ssl->shutdown = 0;
|
515
518
|
ssl->state = SSL_ST_CONNECT;
|
516
519
|
ssl->handshake_func = ssl->method->ssl_connect;
|
517
|
-
/* clear the current cipher */
|
518
|
-
ssl_clear_cipher_ctx(ssl);
|
519
520
|
}
|
520
521
|
|
521
522
|
void SSL_set_accept_state(SSL *ssl) {
|
@@ -523,8 +524,6 @@ void SSL_set_accept_state(SSL *ssl) {
|
|
523
524
|
ssl->shutdown = 0;
|
524
525
|
ssl->state = SSL_ST_ACCEPT;
|
525
526
|
ssl->handshake_func = ssl->method->ssl_accept;
|
526
|
-
/* clear the current cipher */
|
527
|
-
ssl_clear_cipher_ctx(ssl);
|
528
527
|
}
|
529
528
|
|
530
529
|
void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio) {
|
@@ -740,8 +739,8 @@ int SSL_get_error(const SSL *ssl, int ret_code) {
|
|
740
739
|
/* This one doesn't make too much sense ... We never try to write to the
|
741
740
|
* rbio, and an application program where rbio and wbio are separate
|
742
741
|
* couldn't even know what it should wait for. However if we ever set
|
743
|
-
*
|
744
|
-
* SSL_want_write(
|
742
|
+
* ssl->rwstate incorrectly (so that we have SSL_want_read(ssl) instead of
|
743
|
+
* SSL_want_write(ssl)) and rbio and wbio *are* the same, this test works
|
745
744
|
* around that bug; so it might be safer to keep it. */
|
746
745
|
return SSL_ERROR_WANT_WRITE;
|
747
746
|
}
|
@@ -1109,11 +1108,11 @@ void SSL_set_verify_depth(SSL *ssl, int depth) {
|
|
1109
1108
|
|
1110
1109
|
int SSL_CTX_get_read_ahead(const SSL_CTX *ctx) { return 0; }
|
1111
1110
|
|
1112
|
-
int SSL_get_read_ahead(const SSL *
|
1111
|
+
int SSL_get_read_ahead(const SSL *ssl) { return 0; }
|
1113
1112
|
|
1114
1113
|
void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes) { }
|
1115
1114
|
|
1116
|
-
void SSL_set_read_ahead(SSL *
|
1115
|
+
void SSL_set_read_ahead(SSL *ssl, int yes) { }
|
1117
1116
|
|
1118
1117
|
int SSL_pending(const SSL *ssl) {
|
1119
1118
|
if (ssl->s3->rrec.type != SSL3_RT_APPLICATION_DATA) {
|
@@ -1188,7 +1187,7 @@ void SSL_set_max_cert_list(SSL *ssl, size_t max_cert_list) {
|
|
1188
1187
|
ssl->max_cert_list = (uint32_t)max_cert_list;
|
1189
1188
|
}
|
1190
1189
|
|
1191
|
-
|
1190
|
+
int SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, size_t max_send_fragment) {
|
1192
1191
|
if (max_send_fragment < 512) {
|
1193
1192
|
max_send_fragment = 512;
|
1194
1193
|
}
|
@@ -1196,9 +1195,11 @@ void SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, size_t max_send_fragment) {
|
|
1196
1195
|
max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
|
1197
1196
|
}
|
1198
1197
|
ctx->max_send_fragment = (uint16_t)max_send_fragment;
|
1198
|
+
|
1199
|
+
return 1;
|
1199
1200
|
}
|
1200
1201
|
|
1201
|
-
|
1202
|
+
int SSL_set_max_send_fragment(SSL *ssl, size_t max_send_fragment) {
|
1202
1203
|
if (max_send_fragment < 512) {
|
1203
1204
|
max_send_fragment = 512;
|
1204
1205
|
}
|
@@ -1206,6 +1207,8 @@ void SSL_set_max_send_fragment(SSL *ssl, size_t max_send_fragment) {
|
|
1206
1207
|
max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
|
1207
1208
|
}
|
1208
1209
|
ssl->max_send_fragment = (uint16_t)max_send_fragment;
|
1210
|
+
|
1211
|
+
return 1;
|
1209
1212
|
}
|
1210
1213
|
|
1211
1214
|
int SSL_set_mtu(SSL *ssl, unsigned mtu) {
|
@@ -1274,17 +1277,17 @@ STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl) {
|
|
1274
1277
|
|
1275
1278
|
/* return a STACK of the ciphers available for the SSL and in order of
|
1276
1279
|
* algorithm id */
|
1277
|
-
STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *
|
1278
|
-
if (
|
1280
|
+
STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *ssl) {
|
1281
|
+
if (ssl == NULL) {
|
1279
1282
|
return NULL;
|
1280
1283
|
}
|
1281
1284
|
|
1282
|
-
if (
|
1283
|
-
return
|
1285
|
+
if (ssl->cipher_list_by_id != NULL) {
|
1286
|
+
return ssl->cipher_list_by_id;
|
1284
1287
|
}
|
1285
1288
|
|
1286
|
-
if (
|
1287
|
-
return
|
1289
|
+
if (ssl->ctx != NULL && ssl->ctx->cipher_list_by_id != NULL) {
|
1290
|
+
return ssl->ctx->cipher_list_by_id;
|
1288
1291
|
}
|
1289
1292
|
|
1290
1293
|
return NULL;
|
@@ -1375,13 +1378,13 @@ int SSL_set_cipher_list(SSL *ssl, const char *str) {
|
|
1375
1378
|
return 1;
|
1376
1379
|
}
|
1377
1380
|
|
1378
|
-
STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *
|
1381
|
+
STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *ssl, const CBS *cbs) {
|
1379
1382
|
CBS cipher_suites = *cbs;
|
1380
1383
|
const SSL_CIPHER *c;
|
1381
1384
|
STACK_OF(SSL_CIPHER) *sk;
|
1382
1385
|
|
1383
|
-
if (
|
1384
|
-
|
1386
|
+
if (ssl->s3) {
|
1387
|
+
ssl->s3->send_connection_binding = 0;
|
1385
1388
|
}
|
1386
1389
|
|
1387
1390
|
if (CBS_len(&cipher_suites) % 2 != 0) {
|
@@ -1404,24 +1407,24 @@ STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, const CBS *cbs) {
|
|
1404
1407
|
}
|
1405
1408
|
|
1406
1409
|
/* Check for SCSV. */
|
1407
|
-
if (
|
1410
|
+
if (ssl->s3 && cipher_suite == (SSL3_CK_SCSV & 0xffff)) {
|
1408
1411
|
/* SCSV is fatal if renegotiating. */
|
1409
|
-
if (
|
1412
|
+
if (ssl->s3->initial_handshake_complete) {
|
1410
1413
|
OPENSSL_PUT_ERROR(SSL, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
|
1411
|
-
ssl3_send_alert(
|
1414
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
|
1412
1415
|
goto err;
|
1413
1416
|
}
|
1414
|
-
|
1417
|
+
ssl->s3->send_connection_binding = 1;
|
1415
1418
|
continue;
|
1416
1419
|
}
|
1417
1420
|
|
1418
1421
|
/* Check for FALLBACK_SCSV. */
|
1419
|
-
if (
|
1420
|
-
uint16_t max_version = ssl3_get_max_server_version(
|
1421
|
-
if (SSL_IS_DTLS(
|
1422
|
-
: (uint16_t)
|
1422
|
+
if (ssl->s3 && cipher_suite == (SSL3_CK_FALLBACK_SCSV & 0xffff)) {
|
1423
|
+
uint16_t max_version = ssl3_get_max_server_version(ssl);
|
1424
|
+
if (SSL_IS_DTLS(ssl) ? (uint16_t)ssl->version > max_version
|
1425
|
+
: (uint16_t)ssl->version < max_version) {
|
1423
1426
|
OPENSSL_PUT_ERROR(SSL, SSL_R_INAPPROPRIATE_FALLBACK);
|
1424
|
-
ssl3_send_alert(
|
1427
|
+
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL3_AD_INAPPROPRIATE_FALLBACK);
|
1425
1428
|
goto err;
|
1426
1429
|
}
|
1427
1430
|
continue;
|
@@ -1575,11 +1578,11 @@ found:
|
|
1575
1578
|
|
1576
1579
|
void SSL_get0_next_proto_negotiated(const SSL *ssl, const uint8_t **out_data,
|
1577
1580
|
unsigned *out_len) {
|
1578
|
-
*out_data = ssl->next_proto_negotiated;
|
1581
|
+
*out_data = ssl->s3->next_proto_negotiated;
|
1579
1582
|
if (*out_data == NULL) {
|
1580
1583
|
*out_len = 0;
|
1581
1584
|
} else {
|
1582
|
-
*out_len = ssl->next_proto_negotiated_len;
|
1585
|
+
*out_len = ssl->s3->next_proto_negotiated_len;
|
1583
1586
|
}
|
1584
1587
|
}
|
1585
1588
|
|
@@ -1644,18 +1647,6 @@ void SSL_get0_alpn_selected(const SSL *ssl, const uint8_t **out_data,
|
|
1644
1647
|
}
|
1645
1648
|
}
|
1646
1649
|
|
1647
|
-
int SSL_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
|
1648
|
-
const char *label, size_t label_len,
|
1649
|
-
const uint8_t *context, size_t context_len,
|
1650
|
-
int use_context) {
|
1651
|
-
if (ssl->version < TLS1_VERSION) {
|
1652
|
-
return 0;
|
1653
|
-
}
|
1654
|
-
|
1655
|
-
return ssl->enc_method->export_keying_material(
|
1656
|
-
ssl, out, out_len, label, label_len, context, context_len, use_context);
|
1657
|
-
}
|
1658
|
-
|
1659
1650
|
void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
|
1660
1651
|
int (*cb)(X509_STORE_CTX *store_ctx,
|
1661
1652
|
void *arg),
|
@@ -1683,9 +1674,9 @@ void SSL_set_cert_cb(SSL *ssl, int (*cb)(SSL *ssl, void *arg), void *arg) {
|
|
1683
1674
|
ssl_cert_set_cert_cb(ssl->cert, cb, arg);
|
1684
1675
|
}
|
1685
1676
|
|
1686
|
-
void ssl_get_compatible_server_ciphers(SSL *
|
1677
|
+
void ssl_get_compatible_server_ciphers(SSL *ssl, uint32_t *out_mask_k,
|
1687
1678
|
uint32_t *out_mask_a) {
|
1688
|
-
CERT *c =
|
1679
|
+
CERT *c = ssl->cert;
|
1689
1680
|
int have_rsa_cert = 0, dh_tmp;
|
1690
1681
|
uint32_t mask_k, mask_a;
|
1691
1682
|
int have_ecc_cert = 0, ecdsa_ok;
|
@@ -1693,10 +1684,10 @@ void ssl_get_compatible_server_ciphers(SSL *s, uint32_t *out_mask_k,
|
|
1693
1684
|
|
1694
1685
|
dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL);
|
1695
1686
|
|
1696
|
-
if (
|
1697
|
-
if (ssl_private_key_type(
|
1687
|
+
if (ssl->cert->x509 != NULL && ssl_has_private_key(ssl)) {
|
1688
|
+
if (ssl_private_key_type(ssl) == EVP_PKEY_RSA) {
|
1698
1689
|
have_rsa_cert = 1;
|
1699
|
-
} else if (ssl_private_key_type(
|
1690
|
+
} else if (ssl_private_key_type(ssl) == EVP_PKEY_EC) {
|
1700
1691
|
have_ecc_cert = 1;
|
1701
1692
|
}
|
1702
1693
|
}
|
@@ -1721,7 +1712,7 @@ void ssl_get_compatible_server_ciphers(SSL *s, uint32_t *out_mask_k,
|
|
1721
1712
|
ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE)
|
1722
1713
|
? (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE)
|
1723
1714
|
: 1;
|
1724
|
-
if (!tls1_check_ec_cert(
|
1715
|
+
if (!tls1_check_ec_cert(ssl, x)) {
|
1725
1716
|
ecdsa_ok = 0;
|
1726
1717
|
}
|
1727
1718
|
if (ecdsa_ok) {
|
@@ -1731,12 +1722,13 @@ void ssl_get_compatible_server_ciphers(SSL *s, uint32_t *out_mask_k,
|
|
1731
1722
|
|
1732
1723
|
/* If we are considering an ECC cipher suite that uses an ephemeral EC
|
1733
1724
|
* key, check for a shared curve. */
|
1734
|
-
|
1725
|
+
uint16_t unused;
|
1726
|
+
if (tls1_get_shared_curve(ssl, &unused)) {
|
1735
1727
|
mask_k |= SSL_kECDHE;
|
1736
1728
|
}
|
1737
1729
|
|
1738
1730
|
/* PSK requires a server callback. */
|
1739
|
-
if (
|
1731
|
+
if (ssl->psk_server_callback != NULL) {
|
1740
1732
|
mask_k |= SSL_kPSK;
|
1741
1733
|
mask_a |= SSL_aPSK;
|
1742
1734
|
}
|
@@ -1822,28 +1814,17 @@ const char *SSL_SESSION_get_version(const SSL_SESSION *session) {
|
|
1822
1814
|
return ssl_get_version(session->ssl_version);
|
1823
1815
|
}
|
1824
1816
|
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
1829
|
-
void ssl_clear_cipher_ctx(SSL *s) {
|
1830
|
-
SSL_AEAD_CTX_free(s->aead_read_ctx);
|
1831
|
-
s->aead_read_ctx = NULL;
|
1832
|
-
SSL_AEAD_CTX_free(s->aead_write_ctx);
|
1833
|
-
s->aead_write_ctx = NULL;
|
1834
|
-
}
|
1835
|
-
|
1836
|
-
X509 *SSL_get_certificate(const SSL *s) {
|
1837
|
-
if (s->cert != NULL) {
|
1838
|
-
return s->cert->x509;
|
1817
|
+
X509 *SSL_get_certificate(const SSL *ssl) {
|
1818
|
+
if (ssl->cert != NULL) {
|
1819
|
+
return ssl->cert->x509;
|
1839
1820
|
}
|
1840
1821
|
|
1841
1822
|
return NULL;
|
1842
1823
|
}
|
1843
1824
|
|
1844
|
-
EVP_PKEY *SSL_get_privatekey(const SSL *
|
1845
|
-
if (
|
1846
|
-
return
|
1825
|
+
EVP_PKEY *SSL_get_privatekey(const SSL *ssl) {
|
1826
|
+
if (ssl->cert != NULL) {
|
1827
|
+
return ssl->cert->privatekey;
|
1847
1828
|
}
|
1848
1829
|
|
1849
1830
|
return NULL;
|
@@ -1866,29 +1847,29 @@ EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx) {
|
|
1866
1847
|
}
|
1867
1848
|
|
1868
1849
|
const SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl) {
|
1869
|
-
if (ssl->aead_write_ctx == NULL) {
|
1850
|
+
if (ssl->s3->aead_write_ctx == NULL) {
|
1870
1851
|
return NULL;
|
1871
1852
|
}
|
1872
|
-
return ssl->aead_write_ctx->cipher;
|
1853
|
+
return ssl->s3->aead_write_ctx->cipher;
|
1873
1854
|
}
|
1874
1855
|
|
1875
|
-
const COMP_METHOD *SSL_get_current_compression(SSL *
|
1856
|
+
const COMP_METHOD *SSL_get_current_compression(SSL *ssl) { return NULL; }
|
1876
1857
|
|
1877
|
-
const COMP_METHOD *SSL_get_current_expansion(SSL *
|
1858
|
+
const COMP_METHOD *SSL_get_current_expansion(SSL *ssl) { return NULL; }
|
1878
1859
|
|
1879
|
-
int ssl_init_wbio_buffer(SSL *
|
1860
|
+
int ssl_init_wbio_buffer(SSL *ssl, int push) {
|
1880
1861
|
BIO *bbio;
|
1881
1862
|
|
1882
|
-
if (
|
1863
|
+
if (ssl->bbio == NULL) {
|
1883
1864
|
bbio = BIO_new(BIO_f_buffer());
|
1884
1865
|
if (bbio == NULL) {
|
1885
1866
|
return 0;
|
1886
1867
|
}
|
1887
|
-
|
1868
|
+
ssl->bbio = bbio;
|
1888
1869
|
} else {
|
1889
|
-
bbio =
|
1890
|
-
if (
|
1891
|
-
|
1870
|
+
bbio = ssl->bbio;
|
1871
|
+
if (ssl->bbio == ssl->wbio) {
|
1872
|
+
ssl->wbio = BIO_pop(ssl->wbio);
|
1892
1873
|
}
|
1893
1874
|
}
|
1894
1875
|
|
@@ -1899,30 +1880,30 @@ int ssl_init_wbio_buffer(SSL *s, int push) {
|
|
1899
1880
|
}
|
1900
1881
|
|
1901
1882
|
if (push) {
|
1902
|
-
if (
|
1903
|
-
|
1883
|
+
if (ssl->wbio != bbio) {
|
1884
|
+
ssl->wbio = BIO_push(bbio, ssl->wbio);
|
1904
1885
|
}
|
1905
1886
|
} else {
|
1906
|
-
if (
|
1907
|
-
|
1887
|
+
if (ssl->wbio == bbio) {
|
1888
|
+
ssl->wbio = BIO_pop(bbio);
|
1908
1889
|
}
|
1909
1890
|
}
|
1910
1891
|
|
1911
1892
|
return 1;
|
1912
1893
|
}
|
1913
1894
|
|
1914
|
-
void ssl_free_wbio_buffer(SSL *
|
1915
|
-
if (
|
1895
|
+
void ssl_free_wbio_buffer(SSL *ssl) {
|
1896
|
+
if (ssl->bbio == NULL) {
|
1916
1897
|
return;
|
1917
1898
|
}
|
1918
1899
|
|
1919
|
-
if (
|
1900
|
+
if (ssl->bbio == ssl->wbio) {
|
1920
1901
|
/* remove buffering */
|
1921
|
-
|
1902
|
+
ssl->wbio = BIO_pop(ssl->wbio);
|
1922
1903
|
}
|
1923
1904
|
|
1924
|
-
BIO_free(
|
1925
|
-
|
1905
|
+
BIO_free(ssl->bbio);
|
1906
|
+
ssl->bbio = NULL;
|
1926
1907
|
}
|
1927
1908
|
|
1928
1909
|
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) {
|
@@ -2280,8 +2261,8 @@ int SSL_in_false_start(const SSL *ssl) {
|
|
2280
2261
|
return ssl->s3->tmp.in_false_start;
|
2281
2262
|
}
|
2282
2263
|
|
2283
|
-
int SSL_cutthrough_complete(const SSL *
|
2284
|
-
return SSL_in_false_start(
|
2264
|
+
int SSL_cutthrough_complete(const SSL *ssl) {
|
2265
|
+
return SSL_in_false_start(ssl);
|
2285
2266
|
}
|
2286
2267
|
|
2287
2268
|
void SSL_get_structure_sizes(size_t *ssl_size, size_t *ssl_ctx_size,
|
@@ -2291,13 +2272,13 @@ void SSL_get_structure_sizes(size_t *ssl_size, size_t *ssl_ctx_size,
|
|
2291
2272
|
*ssl_session_size = sizeof(SSL_SESSION);
|
2292
2273
|
}
|
2293
2274
|
|
2294
|
-
int ssl3_can_false_start(const SSL *
|
2295
|
-
const SSL_CIPHER *const cipher = SSL_get_current_cipher(
|
2275
|
+
int ssl3_can_false_start(const SSL *ssl) {
|
2276
|
+
const SSL_CIPHER *const cipher = SSL_get_current_cipher(ssl);
|
2296
2277
|
|
2297
2278
|
/* False Start only for TLS 1.2 with an ECDHE+AEAD cipher and ALPN or NPN. */
|
2298
|
-
return !SSL_IS_DTLS(
|
2299
|
-
SSL_version(
|
2300
|
-
(
|
2279
|
+
return !SSL_IS_DTLS(ssl) &&
|
2280
|
+
SSL_version(ssl) >= TLS1_2_VERSION &&
|
2281
|
+
(ssl->s3->alpn_selected || ssl->s3->next_proto_neg_seen) &&
|
2301
2282
|
cipher != NULL &&
|
2302
2283
|
cipher->algorithm_mkey == SSL_kECDHE &&
|
2303
2284
|
cipher->algorithm_mac == SSL_AEAD;
|
@@ -2309,99 +2290,100 @@ const SSL3_ENC_METHOD *ssl3_get_enc_method(uint16_t version) {
|
|
2309
2290
|
return &SSLv3_enc_data;
|
2310
2291
|
|
2311
2292
|
case TLS1_VERSION:
|
2312
|
-
return &TLSv1_enc_data;
|
2313
|
-
|
2314
|
-
case DTLS1_VERSION:
|
2315
2293
|
case TLS1_1_VERSION:
|
2316
|
-
return &TLSv1_1_enc_data;
|
2317
|
-
|
2318
|
-
case DTLS1_2_VERSION:
|
2319
2294
|
case TLS1_2_VERSION:
|
2320
|
-
|
2295
|
+
case DTLS1_VERSION:
|
2296
|
+
case DTLS1_2_VERSION:
|
2297
|
+
return &TLSv1_enc_data;
|
2321
2298
|
|
2322
2299
|
default:
|
2323
2300
|
return NULL;
|
2324
2301
|
}
|
2325
2302
|
}
|
2326
2303
|
|
2327
|
-
uint16_t ssl3_get_max_server_version(const SSL *
|
2304
|
+
uint16_t ssl3_get_max_server_version(const SSL *ssl) {
|
2328
2305
|
uint16_t max_version;
|
2329
2306
|
|
2330
|
-
if (SSL_IS_DTLS(
|
2331
|
-
max_version = (
|
2332
|
-
if (!(
|
2307
|
+
if (SSL_IS_DTLS(ssl)) {
|
2308
|
+
max_version = (ssl->max_version != 0) ? ssl->max_version : DTLS1_2_VERSION;
|
2309
|
+
if (!(ssl->options & SSL_OP_NO_DTLSv1_2) &&
|
2310
|
+
DTLS1_2_VERSION >= max_version) {
|
2333
2311
|
return DTLS1_2_VERSION;
|
2334
2312
|
}
|
2335
|
-
if (!(
|
2313
|
+
if (!(ssl->options & SSL_OP_NO_DTLSv1) && DTLS1_VERSION >= max_version) {
|
2336
2314
|
return DTLS1_VERSION;
|
2337
2315
|
}
|
2338
2316
|
return 0;
|
2339
2317
|
}
|
2340
2318
|
|
2341
|
-
max_version = (
|
2342
|
-
if (!(
|
2319
|
+
max_version = (ssl->max_version != 0) ? ssl->max_version : TLS1_2_VERSION;
|
2320
|
+
if (!(ssl->options & SSL_OP_NO_TLSv1_2) && TLS1_2_VERSION <= max_version) {
|
2343
2321
|
return TLS1_2_VERSION;
|
2344
2322
|
}
|
2345
|
-
if (!(
|
2323
|
+
if (!(ssl->options & SSL_OP_NO_TLSv1_1) && TLS1_1_VERSION <= max_version) {
|
2346
2324
|
return TLS1_1_VERSION;
|
2347
2325
|
}
|
2348
|
-
if (!(
|
2326
|
+
if (!(ssl->options & SSL_OP_NO_TLSv1) && TLS1_VERSION <= max_version) {
|
2349
2327
|
return TLS1_VERSION;
|
2350
2328
|
}
|
2351
|
-
if (!(
|
2329
|
+
if (!(ssl->options & SSL_OP_NO_SSLv3) && SSL3_VERSION <= max_version) {
|
2352
2330
|
return SSL3_VERSION;
|
2353
2331
|
}
|
2354
2332
|
return 0;
|
2355
2333
|
}
|
2356
2334
|
|
2357
|
-
uint16_t ssl3_get_mutual_version(SSL *
|
2335
|
+
uint16_t ssl3_get_mutual_version(SSL *ssl, uint16_t client_version) {
|
2358
2336
|
uint16_t version = 0;
|
2359
2337
|
|
2360
|
-
if (SSL_IS_DTLS(
|
2338
|
+
if (SSL_IS_DTLS(ssl)) {
|
2361
2339
|
/* Clamp client_version to max_version. */
|
2362
|
-
if (
|
2363
|
-
client_version =
|
2340
|
+
if (ssl->max_version != 0 && client_version < ssl->max_version) {
|
2341
|
+
client_version = ssl->max_version;
|
2364
2342
|
}
|
2365
2343
|
|
2366
|
-
if (client_version <= DTLS1_2_VERSION &&
|
2344
|
+
if (client_version <= DTLS1_2_VERSION &&
|
2345
|
+
!(ssl->options & SSL_OP_NO_DTLSv1_2)) {
|
2367
2346
|
version = DTLS1_2_VERSION;
|
2368
2347
|
} else if (client_version <= DTLS1_VERSION &&
|
2369
|
-
!(
|
2348
|
+
!(ssl->options & SSL_OP_NO_DTLSv1)) {
|
2370
2349
|
version = DTLS1_VERSION;
|
2371
2350
|
}
|
2372
2351
|
|
2373
2352
|
/* Check against min_version. */
|
2374
|
-
if (version != 0 &&
|
2353
|
+
if (version != 0 && ssl->min_version != 0 && version > ssl->min_version) {
|
2375
2354
|
return 0;
|
2376
2355
|
}
|
2377
2356
|
return version;
|
2378
2357
|
} else {
|
2379
2358
|
/* Clamp client_version to max_version. */
|
2380
|
-
if (
|
2381
|
-
client_version =
|
2359
|
+
if (ssl->max_version != 0 && client_version > ssl->max_version) {
|
2360
|
+
client_version = ssl->max_version;
|
2382
2361
|
}
|
2383
2362
|
|
2384
|
-
if (client_version >= TLS1_2_VERSION &&
|
2363
|
+
if (client_version >= TLS1_2_VERSION &&
|
2364
|
+
!(ssl->options & SSL_OP_NO_TLSv1_2)) {
|
2385
2365
|
version = TLS1_2_VERSION;
|
2386
2366
|
} else if (client_version >= TLS1_1_VERSION &&
|
2387
|
-
|
2367
|
+
!(ssl->options & SSL_OP_NO_TLSv1_1)) {
|
2388
2368
|
version = TLS1_1_VERSION;
|
2389
|
-
} else if (client_version >= TLS1_VERSION &&
|
2369
|
+
} else if (client_version >= TLS1_VERSION &&
|
2370
|
+
!(ssl->options & SSL_OP_NO_TLSv1)) {
|
2390
2371
|
version = TLS1_VERSION;
|
2391
|
-
} else if (client_version >= SSL3_VERSION &&
|
2372
|
+
} else if (client_version >= SSL3_VERSION &&
|
2373
|
+
!(ssl->options & SSL_OP_NO_SSLv3)) {
|
2392
2374
|
version = SSL3_VERSION;
|
2393
2375
|
}
|
2394
2376
|
|
2395
2377
|
/* Check against min_version. */
|
2396
|
-
if (version != 0 &&
|
2378
|
+
if (version != 0 && ssl->min_version != 0 && version < ssl->min_version) {
|
2397
2379
|
return 0;
|
2398
2380
|
}
|
2399
2381
|
return version;
|
2400
2382
|
}
|
2401
2383
|
}
|
2402
2384
|
|
2403
|
-
uint16_t ssl3_get_max_client_version(SSL *
|
2404
|
-
uint32_t options =
|
2385
|
+
uint16_t ssl3_get_max_client_version(SSL *ssl) {
|
2386
|
+
uint32_t options = ssl->options;
|
2405
2387
|
uint16_t version = 0;
|
2406
2388
|
|
2407
2389
|
/* OpenSSL's API for controlling versions entails blacklisting individual
|
@@ -2417,15 +2399,15 @@ uint16_t ssl3_get_max_client_version(SSL *s) {
|
|
2417
2399
|
*
|
2418
2400
|
* By this scheme, the maximum version is the lowest version V such that V is
|
2419
2401
|
* enabled and V+1 is disabled or unimplemented. */
|
2420
|
-
if (SSL_IS_DTLS(
|
2402
|
+
if (SSL_IS_DTLS(ssl)) {
|
2421
2403
|
if (!(options & SSL_OP_NO_DTLSv1_2)) {
|
2422
2404
|
version = DTLS1_2_VERSION;
|
2423
2405
|
}
|
2424
2406
|
if (!(options & SSL_OP_NO_DTLSv1) && (options & SSL_OP_NO_DTLSv1_2)) {
|
2425
2407
|
version = DTLS1_VERSION;
|
2426
2408
|
}
|
2427
|
-
if (
|
2428
|
-
version =
|
2409
|
+
if (ssl->max_version != 0 && version < ssl->max_version) {
|
2410
|
+
version = ssl->max_version;
|
2429
2411
|
}
|
2430
2412
|
} else {
|
2431
2413
|
if (!(options & SSL_OP_NO_TLSv1_2)) {
|
@@ -2440,53 +2422,53 @@ uint16_t ssl3_get_max_client_version(SSL *s) {
|
|
2440
2422
|
if (!(options & SSL_OP_NO_SSLv3) && (options & SSL_OP_NO_TLSv1)) {
|
2441
2423
|
version = SSL3_VERSION;
|
2442
2424
|
}
|
2443
|
-
if (
|
2444
|
-
version =
|
2425
|
+
if (ssl->max_version != 0 && version > ssl->max_version) {
|
2426
|
+
version = ssl->max_version;
|
2445
2427
|
}
|
2446
2428
|
}
|
2447
2429
|
|
2448
2430
|
return version;
|
2449
2431
|
}
|
2450
2432
|
|
2451
|
-
int ssl3_is_version_enabled(SSL *
|
2452
|
-
if (SSL_IS_DTLS(
|
2453
|
-
if (
|
2433
|
+
int ssl3_is_version_enabled(SSL *ssl, uint16_t version) {
|
2434
|
+
if (SSL_IS_DTLS(ssl)) {
|
2435
|
+
if (ssl->max_version != 0 && version < ssl->max_version) {
|
2454
2436
|
return 0;
|
2455
2437
|
}
|
2456
|
-
if (
|
2438
|
+
if (ssl->min_version != 0 && version > ssl->min_version) {
|
2457
2439
|
return 0;
|
2458
2440
|
}
|
2459
2441
|
|
2460
2442
|
switch (version) {
|
2461
2443
|
case DTLS1_VERSION:
|
2462
|
-
return !(
|
2444
|
+
return !(ssl->options & SSL_OP_NO_DTLSv1);
|
2463
2445
|
|
2464
2446
|
case DTLS1_2_VERSION:
|
2465
|
-
return !(
|
2447
|
+
return !(ssl->options & SSL_OP_NO_DTLSv1_2);
|
2466
2448
|
|
2467
2449
|
default:
|
2468
2450
|
return 0;
|
2469
2451
|
}
|
2470
2452
|
} else {
|
2471
|
-
if (
|
2453
|
+
if (ssl->max_version != 0 && version > ssl->max_version) {
|
2472
2454
|
return 0;
|
2473
2455
|
}
|
2474
|
-
if (
|
2456
|
+
if (ssl->min_version != 0 && version < ssl->min_version) {
|
2475
2457
|
return 0;
|
2476
2458
|
}
|
2477
2459
|
|
2478
2460
|
switch (version) {
|
2479
2461
|
case SSL3_VERSION:
|
2480
|
-
return !(
|
2462
|
+
return !(ssl->options & SSL_OP_NO_SSLv3);
|
2481
2463
|
|
2482
2464
|
case TLS1_VERSION:
|
2483
|
-
return !(
|
2465
|
+
return !(ssl->options & SSL_OP_NO_TLSv1);
|
2484
2466
|
|
2485
2467
|
case TLS1_1_VERSION:
|
2486
|
-
return !(
|
2468
|
+
return !(ssl->options & SSL_OP_NO_TLSv1_1);
|
2487
2469
|
|
2488
2470
|
case TLS1_2_VERSION:
|
2489
|
-
return !(
|
2471
|
+
return !(ssl->options & SSL_OP_NO_TLSv1_2);
|
2490
2472
|
|
2491
2473
|
default:
|
2492
2474
|
return 0;
|
@@ -2494,8 +2476,8 @@ int ssl3_is_version_enabled(SSL *s, uint16_t version) {
|
|
2494
2476
|
}
|
2495
2477
|
}
|
2496
2478
|
|
2497
|
-
uint16_t ssl3_version_from_wire(SSL *
|
2498
|
-
if (!SSL_IS_DTLS(
|
2479
|
+
uint16_t ssl3_version_from_wire(const SSL *ssl, uint16_t wire_version) {
|
2480
|
+
if (!SSL_IS_DTLS(ssl)) {
|
2499
2481
|
return wire_version;
|
2500
2482
|
}
|
2501
2483
|
|
@@ -2515,6 +2497,11 @@ uint16_t ssl3_version_from_wire(SSL *s, uint16_t wire_version) {
|
|
2515
2497
|
return version;
|
2516
2498
|
}
|
2517
2499
|
|
2500
|
+
uint16_t ssl3_protocol_version(const SSL *ssl) {
|
2501
|
+
assert(ssl->s3->have_version);
|
2502
|
+
return ssl3_version_from_wire(ssl, ssl->version);
|
2503
|
+
}
|
2504
|
+
|
2518
2505
|
int SSL_cache_hit(SSL *ssl) { return SSL_session_reused(ssl); }
|
2519
2506
|
|
2520
2507
|
int SSL_is_server(SSL *ssl) { return ssl->server; }
|
@@ -2540,23 +2527,24 @@ void SSL_set_reject_peer_renegotiations(SSL *ssl, int reject) {
|
|
2540
2527
|
|
2541
2528
|
int SSL_get_rc4_state(const SSL *ssl, const RC4_KEY **read_key,
|
2542
2529
|
const RC4_KEY **write_key) {
|
2543
|
-
if (ssl->aead_read_ctx == NULL || ssl->aead_write_ctx == NULL) {
|
2530
|
+
if (ssl->s3->aead_read_ctx == NULL || ssl->s3->aead_write_ctx == NULL) {
|
2544
2531
|
return 0;
|
2545
2532
|
}
|
2546
2533
|
|
2547
|
-
return EVP_AEAD_CTX_get_rc4_state(&ssl->aead_read_ctx->ctx, read_key) &&
|
2548
|
-
EVP_AEAD_CTX_get_rc4_state(&ssl->aead_write_ctx->ctx, write_key);
|
2534
|
+
return EVP_AEAD_CTX_get_rc4_state(&ssl->s3->aead_read_ctx->ctx, read_key) &&
|
2535
|
+
EVP_AEAD_CTX_get_rc4_state(&ssl->s3->aead_write_ctx->ctx, write_key);
|
2549
2536
|
}
|
2550
2537
|
|
2551
2538
|
int SSL_get_ivs(const SSL *ssl, const uint8_t **out_read_iv,
|
2552
2539
|
const uint8_t **out_write_iv, size_t *out_iv_len) {
|
2553
|
-
if (ssl->aead_read_ctx == NULL || ssl->aead_write_ctx == NULL) {
|
2540
|
+
if (ssl->s3->aead_read_ctx == NULL || ssl->s3->aead_write_ctx == NULL) {
|
2554
2541
|
return 0;
|
2555
2542
|
}
|
2556
2543
|
|
2557
2544
|
size_t write_iv_len;
|
2558
|
-
if (!EVP_AEAD_CTX_get_iv(&ssl->aead_read_ctx->ctx, out_read_iv,
|
2559
|
-
|
2545
|
+
if (!EVP_AEAD_CTX_get_iv(&ssl->s3->aead_read_ctx->ctx, out_read_iv,
|
2546
|
+
out_iv_len) ||
|
2547
|
+
!EVP_AEAD_CTX_get_iv(&ssl->s3->aead_write_ctx->ctx, out_write_iv,
|
2560
2548
|
&write_iv_len) ||
|
2561
2549
|
*out_iv_len != write_iv_len) {
|
2562
2550
|
return 0;
|
@@ -2565,10 +2553,69 @@ int SSL_get_ivs(const SSL *ssl, const uint8_t **out_read_iv,
|
|
2565
2553
|
return 1;
|
2566
2554
|
}
|
2567
2555
|
|
2556
|
+
static uint64_t be_to_u64(const uint8_t in[8]) {
|
2557
|
+
return (((uint64_t)in[0]) << 56) | (((uint64_t)in[1]) << 48) |
|
2558
|
+
(((uint64_t)in[2]) << 40) | (((uint64_t)in[3]) << 32) |
|
2559
|
+
(((uint64_t)in[4]) << 24) | (((uint64_t)in[5]) << 16) |
|
2560
|
+
(((uint64_t)in[6]) << 8) | ((uint64_t)in[7]);
|
2561
|
+
}
|
2562
|
+
|
2563
|
+
uint64_t SSL_get_read_sequence(const SSL *ssl) {
|
2564
|
+
/* TODO(davidben): Internally represent sequence numbers as uint64_t. */
|
2565
|
+
if (SSL_IS_DTLS(ssl)) {
|
2566
|
+
/* max_seq_num already includes the epoch. */
|
2567
|
+
assert(ssl->d1->r_epoch == (ssl->d1->bitmap.max_seq_num >> 48));
|
2568
|
+
return ssl->d1->bitmap.max_seq_num;
|
2569
|
+
}
|
2570
|
+
return be_to_u64(ssl->s3->read_sequence);
|
2571
|
+
}
|
2572
|
+
|
2573
|
+
uint64_t SSL_get_write_sequence(const SSL *ssl) {
|
2574
|
+
uint64_t ret = be_to_u64(ssl->s3->write_sequence);
|
2575
|
+
if (SSL_IS_DTLS(ssl)) {
|
2576
|
+
assert((ret >> 48) == 0);
|
2577
|
+
ret |= ((uint64_t)ssl->d1->w_epoch) << 48;
|
2578
|
+
}
|
2579
|
+
return ret;
|
2580
|
+
}
|
2581
|
+
|
2568
2582
|
uint8_t SSL_get_server_key_exchange_hash(const SSL *ssl) {
|
2569
2583
|
return ssl->s3->tmp.server_key_exchange_hash;
|
2570
2584
|
}
|
2571
2585
|
|
2586
|
+
size_t SSL_get_client_random(const SSL *ssl, uint8_t *out, size_t max_out) {
|
2587
|
+
if (max_out == 0) {
|
2588
|
+
return sizeof(ssl->s3->client_random);
|
2589
|
+
}
|
2590
|
+
if (max_out > sizeof(ssl->s3->client_random)) {
|
2591
|
+
max_out = sizeof(ssl->s3->client_random);
|
2592
|
+
}
|
2593
|
+
memcpy(out, ssl->s3->client_random, max_out);
|
2594
|
+
return max_out;
|
2595
|
+
}
|
2596
|
+
|
2597
|
+
size_t SSL_get_server_random(const SSL *ssl, uint8_t *out, size_t max_out) {
|
2598
|
+
if (max_out == 0) {
|
2599
|
+
return sizeof(ssl->s3->server_random);
|
2600
|
+
}
|
2601
|
+
if (max_out > sizeof(ssl->s3->server_random)) {
|
2602
|
+
max_out = sizeof(ssl->s3->server_random);
|
2603
|
+
}
|
2604
|
+
memcpy(out, ssl->s3->server_random, max_out);
|
2605
|
+
return max_out;
|
2606
|
+
}
|
2607
|
+
|
2608
|
+
const SSL_CIPHER *SSL_get_pending_cipher(const SSL *ssl) {
|
2609
|
+
if (!SSL_in_init(ssl)) {
|
2610
|
+
return NULL;
|
2611
|
+
}
|
2612
|
+
return ssl->s3->tmp.new_cipher;
|
2613
|
+
}
|
2614
|
+
|
2615
|
+
void SSL_CTX_set_retain_only_sha256_of_client_certs(SSL_CTX *ctx, int enabled) {
|
2616
|
+
ctx->retain_only_sha256_of_client_certs = !!enabled;
|
2617
|
+
}
|
2618
|
+
|
2572
2619
|
int SSL_clear(SSL *ssl) {
|
2573
2620
|
if (ssl->method == NULL) {
|
2574
2621
|
OPENSSL_PUT_ERROR(SSL, SSL_R_NO_METHOD_SPECIFIED);
|
@@ -2607,12 +2654,6 @@ int SSL_clear(SSL *ssl) {
|
|
2607
2654
|
BUF_MEM_free(ssl->init_buf);
|
2608
2655
|
ssl->init_buf = NULL;
|
2609
2656
|
|
2610
|
-
ssl_clear_cipher_ctx(ssl);
|
2611
|
-
|
2612
|
-
OPENSSL_free(ssl->next_proto_negotiated);
|
2613
|
-
ssl->next_proto_negotiated = NULL;
|
2614
|
-
ssl->next_proto_negotiated_len = 0;
|
2615
|
-
|
2616
2657
|
/* The ssl->d1->mtu is simultaneously configuration (preserved across
|
2617
2658
|
* clear) and connection-specific state (gets reset).
|
2618
2659
|
*
|
@@ -2626,8 +2667,6 @@ int SSL_clear(SSL *ssl) {
|
|
2626
2667
|
if (!ssl->method->ssl_new(ssl)) {
|
2627
2668
|
return 0;
|
2628
2669
|
}
|
2629
|
-
ssl->enc_method = ssl3_get_enc_method(ssl->version);
|
2630
|
-
assert(ssl->enc_method != NULL);
|
2631
2670
|
|
2632
2671
|
if (SSL_IS_DTLS(ssl) && (SSL_get_options(ssl) & SSL_OP_NO_QUERY_MTU)) {
|
2633
2672
|
ssl->d1->mtu = mtu;
|