grpc 1.4.5 → 1.6.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +1235 -1100
- data/etc/roots.pem +0 -412
- data/include/grpc/byte_buffer.h +10 -25
- data/include/grpc/byte_buffer_reader.h +10 -25
- data/include/grpc/census.h +10 -25
- data/include/grpc/compression.h +10 -25
- data/include/grpc/grpc.h +15 -26
- data/include/grpc/grpc_cronet.h +10 -25
- data/include/grpc/grpc_posix.h +10 -25
- data/include/grpc/grpc_security.h +10 -25
- data/include/grpc/grpc_security_constants.h +10 -25
- data/include/grpc/impl/codegen/atm.h +11 -25
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
- data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
- data/include/grpc/impl/codegen/atm_windows.h +10 -25
- data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
- data/include/grpc/impl/codegen/compression_types.h +12 -27
- data/include/grpc/impl/codegen/connectivity_state.h +10 -25
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
- data/include/grpc/impl/codegen/gpr_slice.h +10 -25
- data/include/grpc/impl/codegen/gpr_types.h +10 -25
- data/include/grpc/impl/codegen/grpc_types.h +42 -43
- data/include/grpc/impl/codegen/port_platform.h +10 -25
- data/include/grpc/impl/codegen/propagation_bits.h +10 -25
- data/include/grpc/impl/codegen/slice.h +13 -28
- data/include/grpc/impl/codegen/status.h +10 -25
- data/include/grpc/impl/codegen/sync.h +10 -25
- data/include/grpc/impl/codegen/sync_generic.h +10 -25
- data/include/grpc/impl/codegen/sync_posix.h +10 -25
- data/include/grpc/impl/codegen/sync_windows.h +10 -25
- data/include/grpc/load_reporting.h +10 -25
- data/include/grpc/slice.h +10 -25
- data/include/grpc/slice_buffer.h +10 -25
- data/include/grpc/status.h +10 -25
- data/include/grpc/support/alloc.h +10 -25
- data/include/grpc/support/atm.h +10 -25
- data/include/grpc/support/atm_gcc_atomic.h +10 -25
- data/include/grpc/support/atm_gcc_sync.h +10 -25
- data/include/grpc/support/atm_windows.h +10 -25
- data/include/grpc/support/avl.h +46 -49
- data/include/grpc/support/cmdline.h +10 -25
- data/include/grpc/support/cpu.h +10 -25
- data/include/grpc/support/histogram.h +10 -25
- data/include/grpc/support/host_port.h +10 -25
- data/include/grpc/support/log.h +10 -25
- data/include/grpc/support/log_windows.h +10 -25
- data/include/grpc/support/port_platform.h +10 -25
- data/include/grpc/support/string_util.h +10 -25
- data/include/grpc/support/subprocess.h +10 -25
- data/include/grpc/support/sync.h +10 -25
- data/include/grpc/support/sync_generic.h +10 -25
- data/include/grpc/support/sync_posix.h +10 -25
- data/include/grpc/support/sync_windows.h +10 -25
- data/include/grpc/support/thd.h +10 -25
- data/include/grpc/support/time.h +10 -25
- data/include/grpc/support/tls.h +10 -25
- data/include/grpc/support/tls_gcc.h +10 -25
- data/include/grpc/support/tls_msvc.h +10 -25
- data/include/grpc/support/tls_pthread.h +10 -25
- data/include/grpc/support/useful.h +10 -25
- data/include/grpc/support/workaround_list.h +11 -26
- data/src/boringssl/err_data.c +277 -259
- data/src/core/ext/census/aggregation.h +10 -25
- data/src/core/ext/census/base_resources.c +10 -25
- data/src/core/ext/census/base_resources.h +10 -25
- data/src/core/ext/census/census_interface.h +10 -25
- data/src/core/ext/census/census_rpc_stats.h +10 -25
- data/src/core/ext/census/context.c +10 -25
- data/src/core/ext/census/gen/census.pb.c +10 -25
- data/src/core/ext/census/gen/census.pb.h +10 -25
- data/src/core/ext/census/gen/trace_context.pb.c +10 -25
- data/src/core/ext/census/gen/trace_context.pb.h +10 -25
- data/src/core/ext/census/grpc_context.c +10 -25
- data/src/core/ext/census/grpc_filter.c +11 -26
- data/src/core/ext/census/grpc_filter.h +10 -25
- data/src/core/ext/census/grpc_plugin.c +10 -25
- data/src/core/ext/census/initialize.c +10 -25
- data/src/core/ext/census/intrusive_hash_map.c +10 -25
- data/src/core/ext/census/intrusive_hash_map.h +10 -25
- data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
- data/src/core/ext/census/mlog.c +10 -25
- data/src/core/ext/census/mlog.h +10 -25
- data/src/core/ext/census/operation.c +10 -25
- data/src/core/ext/census/placeholders.c +10 -25
- data/src/core/ext/census/resource.c +10 -25
- data/src/core/ext/census/resource.h +10 -25
- data/src/core/ext/census/rpc_metric_id.h +10 -25
- data/src/core/ext/census/trace_context.c +10 -25
- data/src/core/ext/census/trace_context.h +10 -25
- data/src/core/ext/census/trace_label.h +10 -25
- data/src/core/ext/census/trace_propagation.h +10 -25
- data/src/core/ext/census/trace_status.h +10 -25
- data/src/core/ext/census/trace_string.h +10 -25
- data/src/core/ext/census/tracing.c +10 -26
- data/src/core/ext/census/tracing.h +10 -25
- data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
- data/src/core/ext/filters/client_channel/client_channel.c +617 -520
- data/src/core/ext/filters/client_channel/client_channel.h +15 -28
- data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
- data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
- data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
- data/src/core/ext/filters/client_channel/connector.c +10 -25
- data/src/core/ext/filters/client_channel/connector.h +10 -25
- data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
- data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
- data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
- data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
- data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
- data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
- data/src/core/ext/filters/client_channel/parse_address.c +10 -25
- data/src/core/ext/filters/client_channel/parse_address.h +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
- data/src/core/ext/filters/client_channel/resolver.c +33 -38
- data/src/core/ext/filters/client_channel/resolver.h +19 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
- data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
- data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
- data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
- data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
- data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
- data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
- data/src/core/ext/filters/client_channel/subchannel.c +33 -55
- data/src/core/ext/filters/client_channel/subchannel.h +16 -26
- data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
- data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
- data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
- data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
- data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
- data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
- data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
- data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
- data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
- data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
- data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
- data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
- data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
- data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
- data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
- data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
- data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
- data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
- data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
- data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
- data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
- data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
- data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
- data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
- data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
- data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
- data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
- data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
- data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
- data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
- data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
- data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
- data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
- data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
- data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
- data/src/core/lib/channel/channel_args.c +52 -27
- data/src/core/lib/channel/channel_args.h +18 -27
- data/src/core/lib/channel/channel_stack.c +11 -26
- data/src/core/lib/channel/channel_stack.h +12 -27
- data/src/core/lib/channel/channel_stack_builder.c +11 -26
- data/src/core/lib/channel/channel_stack_builder.h +10 -25
- data/src/core/lib/channel/connected_channel.c +10 -25
- data/src/core/lib/channel/connected_channel.h +10 -25
- data/src/core/lib/channel/context.h +10 -25
- data/src/core/lib/channel/handshaker.c +14 -29
- data/src/core/lib/channel/handshaker.h +10 -25
- data/src/core/lib/channel/handshaker_factory.c +10 -25
- data/src/core/lib/channel/handshaker_factory.h +10 -25
- data/src/core/lib/channel/handshaker_registry.c +10 -25
- data/src/core/lib/channel/handshaker_registry.h +10 -25
- data/src/core/lib/compression/algorithm_metadata.h +10 -25
- data/src/core/lib/compression/compression.c +10 -25
- data/src/core/lib/compression/message_compress.c +10 -25
- data/src/core/lib/compression/message_compress.h +10 -25
- data/src/core/lib/compression/stream_compression.c +191 -0
- data/src/core/lib/compression/stream_compression.h +90 -0
- data/src/core/lib/debug/trace.c +28 -29
- data/src/core/lib/debug/trace.h +16 -30
- data/src/core/lib/http/format_request.c +10 -25
- data/src/core/lib/http/format_request.h +10 -25
- data/src/core/lib/http/httpcli.c +19 -35
- data/src/core/lib/http/httpcli.h +10 -25
- data/src/core/lib/http/httpcli_security_connector.c +17 -30
- data/src/core/lib/http/parser.c +11 -26
- data/src/core/lib/http/parser.h +10 -25
- data/src/core/lib/iomgr/closure.c +62 -25
- data/src/core/lib/iomgr/closure.h +81 -26
- data/src/core/lib/iomgr/combiner.c +103 -200
- data/src/core/lib/iomgr/combiner.h +14 -32
- data/src/core/lib/iomgr/endpoint.c +10 -29
- data/src/core/lib/iomgr/endpoint.h +10 -29
- data/src/core/lib/iomgr/endpoint_pair.h +10 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
- data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
- data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
- data/src/core/lib/iomgr/error.c +45 -46
- data/src/core/lib/iomgr/error.h +21 -34
- data/src/core/lib/iomgr/error_internal.h +10 -25
- data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
- data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
- data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
- data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
- data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
- data/src/core/lib/iomgr/ev_posix.c +25 -56
- data/src/core/lib/iomgr/ev_posix.h +15 -44
- data/src/core/lib/iomgr/ev_windows.c +11 -26
- data/src/core/lib/iomgr/exec_ctx.c +36 -45
- data/src/core/lib/iomgr/exec_ctx.h +10 -25
- data/src/core/lib/iomgr/executor.c +152 -127
- data/src/core/lib/iomgr/executor.h +18 -26
- data/src/core/lib/iomgr/gethostname.h +26 -0
- data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
- data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
- data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
- data/src/core/lib/iomgr/iocp_windows.c +10 -25
- data/src/core/lib/iomgr/iocp_windows.h +10 -25
- data/src/core/lib/iomgr/iomgr.c +17 -28
- data/src/core/lib/iomgr/iomgr.h +12 -27
- data/src/core/lib/iomgr/iomgr_internal.h +10 -25
- data/src/core/lib/iomgr/iomgr_posix.c +11 -26
- data/src/core/lib/iomgr/iomgr_posix.h +10 -25
- data/src/core/lib/iomgr/iomgr_uv.c +19 -26
- data/src/core/lib/iomgr/iomgr_uv.h +37 -0
- data/src/core/lib/iomgr/iomgr_windows.c +10 -25
- data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
- data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
- data/src/core/lib/iomgr/load_file.c +10 -25
- data/src/core/lib/iomgr/load_file.h +10 -25
- data/src/core/lib/iomgr/lockfree_event.c +22 -35
- data/src/core/lib/iomgr/lockfree_event.h +13 -27
- data/src/core/lib/iomgr/nameser.h +104 -0
- data/src/core/lib/iomgr/network_status_tracker.c +10 -25
- data/src/core/lib/iomgr/network_status_tracker.h +10 -25
- data/src/core/lib/iomgr/polling_entity.c +10 -25
- data/src/core/lib/iomgr/polling_entity.h +14 -34
- data/src/core/lib/iomgr/pollset.h +14 -25
- data/src/core/lib/iomgr/pollset_set.h +10 -25
- data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
- data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
- data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
- data/src/core/lib/iomgr/pollset_uv.c +25 -26
- data/src/core/lib/iomgr/pollset_uv.h +10 -25
- data/src/core/lib/iomgr/pollset_windows.c +17 -27
- data/src/core/lib/iomgr/pollset_windows.h +10 -25
- data/src/core/lib/iomgr/port.h +24 -25
- data/src/core/lib/iomgr/resolve_address.h +10 -25
- data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
- data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
- data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
- data/src/core/lib/iomgr/resource_quota.c +52 -67
- data/src/core/lib/iomgr/resource_quota.h +10 -25
- data/src/core/lib/iomgr/sockaddr.h +10 -25
- data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
- data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
- data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
- data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
- data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
- data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
- data/src/core/lib/iomgr/socket_mutator.c +14 -31
- data/src/core/lib/iomgr/socket_mutator.h +10 -25
- data/src/core/lib/iomgr/socket_utils.h +10 -25
- data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
- data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
- data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
- data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
- data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
- data/src/core/lib/iomgr/socket_windows.c +12 -27
- data/src/core/lib/iomgr/socket_windows.h +10 -25
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
- data/src/core/lib/iomgr/tcp_client.h +10 -25
- data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
- data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
- data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
- data/src/core/lib/iomgr/tcp_posix.c +36 -55
- data/src/core/lib/iomgr/tcp_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_server.h +10 -25
- data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
- data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
- data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
- data/src/core/lib/iomgr/tcp_uv.c +41 -45
- data/src/core/lib/iomgr/tcp_uv.h +10 -25
- data/src/core/lib/iomgr/tcp_windows.c +39 -53
- data/src/core/lib/iomgr/tcp_windows.h +10 -25
- data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
- data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
- data/src/core/lib/iomgr/timer.h +18 -27
- data/src/core/lib/iomgr/timer_generic.c +91 -87
- data/src/core/lib/iomgr/timer_generic.h +10 -25
- data/src/core/lib/iomgr/timer_heap.c +10 -25
- data/src/core/lib/iomgr/timer_heap.h +10 -25
- data/src/core/lib/iomgr/timer_manager.c +178 -100
- data/src/core/lib/iomgr/timer_manager.h +10 -25
- data/src/core/lib/iomgr/timer_uv.c +23 -33
- data/src/core/lib/iomgr/timer_uv.h +10 -25
- data/src/core/lib/iomgr/udp_server.c +17 -32
- data/src/core/lib/iomgr/udp_server.h +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
- data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
- data/src/core/lib/json/json.c +10 -25
- data/src/core/lib/json/json.h +10 -25
- data/src/core/lib/json/json_common.h +10 -25
- data/src/core/lib/json/json_reader.c +11 -25
- data/src/core/lib/json/json_reader.h +10 -25
- data/src/core/lib/json/json_string.c +10 -25
- data/src/core/lib/json/json_writer.c +10 -25
- data/src/core/lib/json/json_writer.h +10 -25
- data/src/core/lib/profiling/basic_timers.c +10 -25
- data/src/core/lib/profiling/stap_timers.c +10 -25
- data/src/core/lib/profiling/timers.h +10 -25
- data/src/core/lib/security/context/security_context.c +32 -40
- data/src/core/lib/security/context/security_context.h +15 -26
- data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
- data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
- data/src/core/lib/security/credentials/credentials.c +29 -49
- data/src/core/lib/security/credentials/credentials.h +48 -61
- data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
- data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
- data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
- data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
- data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
- data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
- data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
- data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
- data/src/core/lib/security/transport/auth_filters.h +10 -25
- data/src/core/lib/security/transport/client_auth_filter.c +217 -112
- data/src/core/lib/security/transport/lb_targets_info.c +16 -32
- data/src/core/lib/security/transport/lb_targets_info.h +10 -25
- data/src/core/lib/security/transport/secure_endpoint.c +29 -43
- data/src/core/lib/security/transport/secure_endpoint.h +10 -25
- data/src/core/lib/security/transport/security_connector.c +80 -61
- data/src/core/lib/security/transport/security_connector.h +35 -35
- data/src/core/lib/security/transport/security_handshaker.c +18 -33
- data/src/core/lib/security/transport/security_handshaker.h +10 -25
- data/src/core/lib/security/transport/server_auth_filter.c +62 -116
- data/src/core/lib/security/transport/tsi_error.c +10 -25
- data/src/core/lib/security/transport/tsi_error.h +10 -25
- data/src/core/lib/security/util/json_util.c +10 -25
- data/src/core/lib/security/util/json_util.h +10 -25
- data/src/core/lib/slice/b64.c +10 -25
- data/src/core/lib/slice/b64.h +10 -25
- data/src/core/lib/slice/percent_encoding.c +10 -25
- data/src/core/lib/slice/percent_encoding.h +10 -25
- data/src/core/lib/slice/slice.c +10 -25
- data/src/core/lib/slice/slice_buffer.c +10 -25
- data/src/core/lib/slice/slice_hash_table.c +48 -26
- data/src/core/lib/slice/slice_hash_table.h +26 -28
- data/src/core/lib/slice/slice_intern.c +10 -25
- data/src/core/lib/slice/slice_internal.h +10 -25
- data/src/core/lib/slice/slice_string_helpers.c +10 -25
- data/src/core/lib/slice/slice_string_helpers.h +10 -25
- data/src/core/lib/support/alloc.c +10 -25
- data/src/core/lib/support/arena.c +12 -27
- data/src/core/lib/support/arena.h +10 -25
- data/src/core/lib/support/atm.c +17 -32
- data/src/core/lib/support/atomic.h +10 -25
- data/src/core/lib/support/atomic_with_atm.h +10 -25
- data/src/core/lib/support/atomic_with_std.h +10 -25
- data/src/core/lib/support/avl.c +101 -101
- data/src/core/lib/support/backoff.c +10 -25
- data/src/core/lib/support/backoff.h +10 -25
- data/src/core/lib/support/block_annotate.h +10 -25
- data/src/core/lib/support/cmdline.c +10 -25
- data/src/core/lib/support/cpu_iphone.c +10 -25
- data/src/core/lib/support/cpu_linux.c +10 -25
- data/src/core/lib/support/cpu_posix.c +10 -25
- data/src/core/lib/support/cpu_windows.c +10 -25
- data/src/core/lib/support/env.h +16 -25
- data/src/core/lib/support/env_linux.c +30 -37
- data/src/core/lib/support/env_posix.c +15 -25
- data/src/core/lib/support/env_windows.c +15 -25
- data/src/core/lib/support/histogram.c +10 -25
- data/src/core/lib/support/host_port.c +10 -25
- data/src/core/lib/support/log.c +20 -29
- data/src/core/lib/support/log_android.c +10 -25
- data/src/core/lib/support/log_linux.c +13 -26
- data/src/core/lib/support/log_posix.c +10 -25
- data/src/core/lib/support/log_windows.c +10 -25
- data/src/core/lib/support/memory.h +10 -25
- data/src/core/lib/support/mpscq.c +11 -49
- data/src/core/lib/support/mpscq.h +11 -50
- data/src/core/lib/support/murmur_hash.c +12 -25
- data/src/core/lib/support/murmur_hash.h +10 -25
- data/src/core/lib/support/spinlock.h +10 -25
- data/src/core/lib/support/stack_lockfree.c +10 -25
- data/src/core/lib/support/stack_lockfree.h +10 -25
- data/src/core/lib/support/string.c +10 -25
- data/src/core/lib/support/string.h +10 -25
- data/src/core/lib/support/string_posix.c +10 -25
- data/src/core/lib/support/string_util_windows.c +10 -25
- data/src/core/lib/support/string_windows.c +10 -25
- data/src/core/lib/support/string_windows.h +10 -25
- data/src/core/lib/support/subprocess_posix.c +10 -25
- data/src/core/lib/support/subprocess_windows.c +10 -25
- data/src/core/lib/support/sync.c +10 -25
- data/src/core/lib/support/sync_posix.c +10 -25
- data/src/core/lib/support/sync_windows.c +10 -25
- data/src/core/lib/support/thd.c +10 -25
- data/src/core/lib/support/thd_internal.h +10 -25
- data/src/core/lib/support/thd_posix.c +10 -25
- data/src/core/lib/support/thd_windows.c +10 -25
- data/src/core/lib/support/time.c +10 -25
- data/src/core/lib/support/time_posix.c +10 -25
- data/src/core/lib/support/time_precise.c +18 -33
- data/src/core/lib/support/time_precise.h +10 -25
- data/src/core/lib/support/time_windows.c +10 -25
- data/src/core/lib/support/tls_pthread.c +10 -25
- data/src/core/lib/support/tmpfile.h +10 -25
- data/src/core/lib/support/tmpfile_msys.c +10 -25
- data/src/core/lib/support/tmpfile_posix.c +10 -25
- data/src/core/lib/support/tmpfile_windows.c +10 -25
- data/src/core/lib/support/wrap_memcpy.c +10 -25
- data/src/core/lib/surface/alarm.c +78 -35
- data/src/core/lib/surface/alarm_internal.h +40 -0
- data/src/core/lib/surface/api_trace.c +11 -26
- data/src/core/lib/surface/api_trace.h +10 -25
- data/src/core/lib/surface/byte_buffer.c +10 -25
- data/src/core/lib/surface/byte_buffer_reader.c +10 -25
- data/src/core/lib/surface/call.c +64 -84
- data/src/core/lib/surface/call.h +11 -26
- data/src/core/lib/surface/call_details.c +10 -25
- data/src/core/lib/surface/call_log_batch.c +10 -25
- data/src/core/lib/surface/call_test_only.h +10 -25
- data/src/core/lib/surface/channel.c +11 -26
- data/src/core/lib/surface/channel.h +11 -26
- data/src/core/lib/surface/channel_init.c +10 -25
- data/src/core/lib/surface/channel_init.h +10 -25
- data/src/core/lib/surface/channel_ping.c +12 -27
- data/src/core/lib/surface/channel_stack_type.c +10 -25
- data/src/core/lib/surface/channel_stack_type.h +10 -25
- data/src/core/lib/surface/completion_queue.c +442 -331
- data/src/core/lib/surface/completion_queue.h +16 -33
- data/src/core/lib/surface/completion_queue_factory.c +10 -25
- data/src/core/lib/surface/completion_queue_factory.h +10 -25
- data/src/core/lib/surface/event_string.c +10 -25
- data/src/core/lib/surface/event_string.h +10 -25
- data/src/core/lib/surface/init.c +38 -47
- data/src/core/lib/surface/init.h +10 -25
- data/src/core/lib/surface/init_secure.c +20 -27
- data/src/core/lib/surface/lame_client.cc +14 -29
- data/src/core/lib/surface/lame_client.h +10 -25
- data/src/core/lib/surface/metadata_array.c +10 -25
- data/src/core/lib/surface/server.c +128 -81
- data/src/core/lib/surface/server.h +10 -25
- data/src/core/lib/surface/validate_metadata.c +10 -25
- data/src/core/lib/surface/validate_metadata.h +10 -25
- data/src/core/lib/surface/version.c +11 -26
- data/src/core/lib/transport/bdp_estimator.c +19 -29
- data/src/core/lib/transport/bdp_estimator.h +16 -29
- data/src/core/lib/transport/byte_stream.c +127 -36
- data/src/core/lib/transport/byte_stream.h +88 -46
- data/src/core/lib/transport/connectivity_state.c +17 -31
- data/src/core/lib/transport/connectivity_state.h +10 -25
- data/src/core/lib/transport/error_utils.c +10 -25
- data/src/core/lib/transport/error_utils.h +10 -25
- data/src/core/lib/transport/http2_errors.h +10 -25
- data/src/core/lib/transport/metadata.c +87 -85
- data/src/core/lib/transport/metadata.h +15 -28
- data/src/core/lib/transport/metadata_batch.c +10 -25
- data/src/core/lib/transport/metadata_batch.h +10 -25
- data/src/core/lib/transport/pid_controller.c +10 -25
- data/src/core/lib/transport/pid_controller.h +10 -25
- data/src/core/lib/transport/service_config.c +11 -26
- data/src/core/lib/transport/service_config.h +10 -25
- data/src/core/lib/transport/static_metadata.c +12 -26
- data/src/core/lib/transport/static_metadata.h +10 -25
- data/src/core/lib/transport/status_conversion.c +10 -25
- data/src/core/lib/transport/status_conversion.h +10 -25
- data/src/core/lib/transport/timeout_encoding.c +10 -25
- data/src/core/lib/transport/timeout_encoding.h +10 -25
- data/src/core/lib/transport/transport.c +60 -53
- data/src/core/lib/transport/transport.h +36 -34
- data/src/core/lib/transport/transport_impl.h +10 -25
- data/src/core/lib/transport/transport_op_string.c +10 -28
- data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
- data/src/core/tsi/fake_transport_security.c +199 -94
- data/src/core/tsi/fake_transport_security.h +11 -26
- data/src/core/tsi/gts_transport_security.c +40 -0
- data/src/core/tsi/gts_transport_security.h +37 -0
- data/src/core/tsi/ssl_transport_security.c +13 -32
- data/src/core/tsi/ssl_transport_security.h +10 -25
- data/src/core/tsi/ssl_types.h +10 -25
- data/src/core/tsi/transport_security.c +48 -78
- data/src/core/tsi/transport_security.h +18 -27
- data/src/core/tsi/transport_security_adapter.c +17 -29
- data/src/core/tsi/transport_security_adapter.h +10 -25
- data/src/core/tsi/transport_security_grpc.c +64 -0
- data/src/core/tsi/transport_security_grpc.h +80 -0
- data/src/core/tsi/transport_security_interface.h +21 -27
- data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
- data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
- data/src/ruby/bin/math_client.rb +10 -25
- data/src/ruby/bin/math_server.rb +10 -25
- data/src/ruby/bin/math_services_pb.rb +10 -25
- data/src/ruby/bin/noproto_client.rb +10 -25
- data/src/ruby/bin/noproto_server.rb +10 -25
- data/src/ruby/ext/grpc/extconf.rb +10 -25
- data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
- data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
- data/src/ruby/ext/grpc/rb_call.c +44 -25
- data/src/ruby/ext/grpc/rb_call.h +10 -25
- data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
- data/src/ruby/ext/grpc/rb_channel.c +10 -25
- data/src/ruby/ext/grpc/rb_channel.h +10 -25
- data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
- data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
- data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
- data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
- data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
- data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
- data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
- data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
- data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
- data/src/ruby/ext/grpc/rb_grpc.c +10 -25
- data/src/ruby/ext/grpc/rb_grpc.h +10 -25
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
- data/src/ruby/ext/grpc/rb_loader.c +10 -25
- data/src/ruby/ext/grpc/rb_loader.h +10 -25
- data/src/ruby/ext/grpc/rb_server.c +10 -25
- data/src/ruby/ext/grpc/rb_server.h +10 -25
- data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
- data/src/ruby/lib/grpc.rb +10 -25
- data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
- data/src/ruby/lib/grpc/errors.rb +16 -30
- data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
- data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
- data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
- data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
- data/src/ruby/lib/grpc/generic/service.rb +10 -25
- data/src/ruby/lib/grpc/grpc.rb +10 -25
- data/src/ruby/lib/grpc/logconfig.rb +10 -25
- data/src/ruby/lib/grpc/notifier.rb +10 -25
- data/src/ruby/lib/grpc/version.rb +11 -26
- data/src/ruby/pb/generate_proto_ruby.sh +10 -25
- data/src/ruby/pb/grpc/health/checker.rb +10 -25
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
- data/src/ruby/pb/test/client.rb +10 -25
- data/src/ruby/pb/test/server.rb +10 -25
- data/src/ruby/spec/call_credentials_spec.rb +10 -25
- data/src/ruby/spec/call_spec.rb +43 -25
- data/src/ruby/spec/channel_connection_spec.rb +10 -25
- data/src/ruby/spec/channel_credentials_spec.rb +11 -26
- data/src/ruby/spec/channel_spec.rb +10 -25
- data/src/ruby/spec/client_auth_spec.rb +10 -25
- data/src/ruby/spec/client_server_spec.rb +66 -25
- data/src/ruby/spec/compression_options_spec.rb +10 -25
- data/src/ruby/spec/error_sanity_spec.rb +10 -25
- data/src/ruby/spec/generic/active_call_spec.rb +10 -25
- data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
- data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
- data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
- data/src/ruby/spec/generic/service_spec.rb +10 -25
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
- data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
- data/src/ruby/spec/server_credentials_spec.rb +10 -25
- data/src/ruby/spec/server_spec.rb +10 -25
- data/src/ruby/spec/spec_helper.rb +10 -25
- data/src/ruby/spec/time_consts_spec.rb +10 -25
- data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
- data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
- data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
- data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
- data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
- data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
- data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
- data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
- data/third_party/boringssl/crypto/base64/base64.c +7 -5
- data/third_party/boringssl/crypto/bio/bio.c +24 -10
- data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
- data/third_party/boringssl/crypto/bio/connect.c +7 -18
- data/third_party/boringssl/crypto/bio/fd.c +3 -6
- data/third_party/boringssl/crypto/bio/file.c +6 -6
- data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
- data/third_party/boringssl/crypto/bio/pair.c +30 -344
- data/third_party/boringssl/crypto/bio/socket.c +6 -7
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
- data/third_party/boringssl/crypto/bn/add.c +1 -1
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
- data/third_party/boringssl/crypto/bn/bn.c +6 -20
- data/third_party/boringssl/crypto/bn/cmp.c +14 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -2
- data/third_party/boringssl/crypto/bn/ctx.c +3 -1
- data/third_party/boringssl/crypto/bn/div.c +108 -51
- data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
- data/third_party/boringssl/crypto/bn/gcd.c +29 -22
- data/third_party/boringssl/crypto/bn/generic.c +71 -67
- data/third_party/boringssl/crypto/bn/internal.h +19 -6
- data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
- data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
- data/third_party/boringssl/crypto/bn/mul.c +11 -9
- data/third_party/boringssl/crypto/bn/random.c +6 -3
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
- data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
- data/third_party/boringssl/crypto/bn/shift.c +9 -1
- data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
- data/third_party/boringssl/crypto/buf/buf.c +6 -4
- data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
- data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
- data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
- data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
- data/third_party/boringssl/crypto/cipher/aead.c +3 -3
- data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
- data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
- data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
- data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
- data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
- data/third_party/boringssl/crypto/conf/conf.c +6 -3
- data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
- data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
- data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
- data/third_party/boringssl/crypto/des/des.c +1 -1
- data/third_party/boringssl/crypto/des/internal.h +58 -46
- data/third_party/boringssl/crypto/dh/dh.c +4 -8
- data/third_party/boringssl/crypto/digest/digest.c +5 -2
- data/third_party/boringssl/crypto/digest/digests.c +70 -33
- data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
- data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
- data/third_party/boringssl/crypto/ec/ec.c +1 -1
- data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
- data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
- data/third_party/boringssl/crypto/ec/oct.c +2 -14
- data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
- data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
- data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
- data/third_party/boringssl/crypto/ec/simple.c +2 -1
- data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
- data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
- data/third_party/boringssl/crypto/engine/engine.c +3 -1
- data/third_party/boringssl/crypto/err/err.c +5 -5
- data/third_party/boringssl/crypto/evp/evp.c +1 -1
- data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
- data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
- data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
- data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
- data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
- data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
- data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
- data/third_party/boringssl/crypto/internal.h +81 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
- data/third_party/boringssl/crypto/md4/md4.c +20 -18
- data/third_party/boringssl/crypto/md5/md5.c +31 -21
- data/third_party/boringssl/crypto/mem.c +4 -10
- data/third_party/boringssl/crypto/modes/cbc.c +2 -6
- data/third_party/boringssl/crypto/modes/cfb.c +2 -2
- data/third_party/boringssl/crypto/modes/ctr.c +1 -1
- data/third_party/boringssl/crypto/modes/gcm.c +117 -334
- data/third_party/boringssl/crypto/modes/internal.h +107 -84
- data/third_party/boringssl/crypto/modes/ofb.c +3 -3
- data/third_party/boringssl/crypto/modes/polyval.c +94 -0
- data/third_party/boringssl/crypto/obj/obj.c +13 -8
- data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
- data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
- data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
- data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
- data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
- data/third_party/boringssl/crypto/pool/pool.c +200 -0
- data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
- data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
- data/third_party/boringssl/crypto/rand/rand.c +7 -7
- data/third_party/boringssl/crypto/rand/urandom.c +136 -22
- data/third_party/boringssl/crypto/rand/windows.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
- data/third_party/boringssl/crypto/rsa/padding.c +11 -11
- data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
- data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
- data/third_party/boringssl/crypto/sha/sha1.c +60 -42
- data/third_party/boringssl/crypto/sha/sha256.c +4 -2
- data/third_party/boringssl/crypto/sha/sha512.c +9 -7
- data/third_party/boringssl/crypto/stack/stack.c +10 -7
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +2 -2
- data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
- data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
- data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
- data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
- data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
- data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
- data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
- data/third_party/boringssl/crypto/x509/x509name.c +4 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
- data/third_party/boringssl/crypto/x509/x_name.c +23 -13
- data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
- data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
- data/third_party/boringssl/include/openssl/aead.h +9 -20
- data/third_party/boringssl/include/openssl/aes.h +21 -9
- data/third_party/boringssl/include/openssl/asn1.h +9 -1
- data/third_party/boringssl/include/openssl/base.h +33 -6
- data/third_party/boringssl/include/openssl/bio.h +10 -103
- data/third_party/boringssl/include/openssl/bn.h +58 -42
- data/third_party/boringssl/include/openssl/bytestring.h +17 -0
- data/third_party/boringssl/include/openssl/cipher.h +4 -3
- data/third_party/boringssl/include/openssl/conf.h +4 -1
- data/third_party/boringssl/include/openssl/curve25519.h +13 -0
- data/third_party/boringssl/include/openssl/digest.h +5 -3
- data/third_party/boringssl/include/openssl/dsa.h +5 -5
- data/third_party/boringssl/include/openssl/ec.h +2 -2
- data/third_party/boringssl/include/openssl/ecdh.h +3 -4
- data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
- data/third_party/boringssl/include/openssl/err.h +5 -5
- data/third_party/boringssl/include/openssl/evp.h +11 -7
- data/third_party/boringssl/include/openssl/lhash.h +2 -3
- data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
- data/third_party/boringssl/include/openssl/nid.h +2949 -2916
- data/third_party/boringssl/include/openssl/obj.h +1 -1
- data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
- data/third_party/boringssl/include/openssl/pool.h +87 -0
- data/third_party/boringssl/include/openssl/rand.h +1 -1
- data/third_party/boringssl/include/openssl/rsa.h +4 -2
- data/third_party/boringssl/include/openssl/sha.h +0 -4
- data/third_party/boringssl/include/openssl/ssl.h +327 -662
- data/third_party/boringssl/include/openssl/ssl3.h +1 -21
- data/third_party/boringssl/include/openssl/stack.h +1 -0
- data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
- data/third_party/boringssl/include/openssl/tls1.h +23 -52
- data/third_party/boringssl/include/openssl/type_check.h +4 -0
- data/third_party/boringssl/include/openssl/x509.h +10 -59
- data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
- data/third_party/boringssl/include/openssl/x509v3.h +4 -4
- data/third_party/boringssl/ssl/bio_ssl.c +175 -0
- data/third_party/boringssl/ssl/custom_extensions.c +24 -21
- data/third_party/boringssl/ssl/d1_both.c +259 -289
- data/third_party/boringssl/ssl/d1_lib.c +8 -20
- data/third_party/boringssl/ssl/d1_pkt.c +6 -15
- data/third_party/boringssl/ssl/dtls_method.c +22 -8
- data/third_party/boringssl/ssl/dtls_record.c +27 -2
- data/third_party/boringssl/ssl/handshake_client.c +460 -579
- data/third_party/boringssl/ssl/handshake_server.c +662 -644
- data/third_party/boringssl/ssl/internal.h +1009 -375
- data/third_party/boringssl/ssl/s3_both.c +312 -162
- data/third_party/boringssl/ssl/s3_lib.c +12 -128
- data/third_party/boringssl/ssl/s3_pkt.c +22 -30
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
- data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
- data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
- data/third_party/boringssl/ssl/ssl_cert.c +417 -219
- data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
- data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
- data/third_party/boringssl/ssl/ssl_file.c +0 -11
- data/third_party/boringssl/ssl/ssl_lib.c +325 -652
- data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
- data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
- data/third_party/boringssl/ssl/ssl_session.c +206 -95
- data/third_party/boringssl/ssl/ssl_stat.c +18 -84
- data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
- data/third_party/boringssl/ssl/ssl_x509.c +815 -0
- data/third_party/boringssl/ssl/t1_enc.c +188 -174
- data/third_party/boringssl/ssl/t1_lib.c +1064 -764
- data/third_party/boringssl/ssl/tls13_both.c +290 -96
- data/third_party/boringssl/ssl/tls13_client.c +344 -314
- data/third_party/boringssl/ssl/tls13_enc.c +239 -200
- data/third_party/boringssl/ssl/tls13_server.c +374 -366
- data/third_party/boringssl/ssl/tls_method.c +40 -5
- data/third_party/boringssl/ssl/tls_record.c +166 -71
- metadata +39 -25
- data/src/core/lib/iomgr/workqueue.h +0 -87
- data/src/core/lib/iomgr/workqueue_uv.c +0 -65
- data/src/core/lib/iomgr/workqueue_uv.h +0 -37
- data/src/core/lib/iomgr/workqueue_windows.c +0 -63
- data/src/core/lib/iomgr/workqueue_windows.h +0 -37
- data/third_party/boringssl/crypto/bio/buffer.c +0 -496
- data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
- data/third_party/boringssl/crypto/newhope/internal.h +0 -71
- data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
- data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
- data/third_party/boringssl/crypto/newhope/poly.c +0 -183
- data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
- data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
- data/third_party/boringssl/include/openssl/newhope.h +0 -158
- data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -230,7 +230,7 @@ X509_NAME *dpname;
|
|
230
230
|
/* All existing reasons */
|
231
231
|
#define CRLDP_ALL_REASONS 0x807f
|
232
232
|
|
233
|
-
#define CRL_REASON_NONE -1
|
233
|
+
#define CRL_REASON_NONE (-1)
|
234
234
|
#define CRL_REASON_UNSPECIFIED 0
|
235
235
|
#define CRL_REASON_KEY_COMPROMISE 1
|
236
236
|
#define CRL_REASON_CA_COMPROMISE 2
|
@@ -376,8 +376,8 @@ struct ISSUING_DIST_POINT_st
|
|
376
376
|
/* onlysomereasons present */
|
377
377
|
#define IDP_REASONS 0x40
|
378
378
|
|
379
|
-
#define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
|
380
|
-
",name:", val->name, ",value:", val->value);
|
379
|
+
#define X509V3_conf_err(val) ERR_add_error_data(6, "section:", (val)->section, \
|
380
|
+
",name:", (val)->name, ",value:", (val)->value);
|
381
381
|
|
382
382
|
#define X509V3_set_ctx_test(ctx) \
|
383
383
|
X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
|
@@ -389,7 +389,7 @@ struct ISSUING_DIST_POINT_st
|
|
389
389
|
(X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
|
390
390
|
(X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
|
391
391
|
NULL, NULL, \
|
392
|
-
(void *)table}
|
392
|
+
(void *)(table)}
|
393
393
|
|
394
394
|
#define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
|
395
395
|
0,0,0,0, \
|
@@ -0,0 +1,175 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
|
3
|
+
*
|
4
|
+
* Licensed under the OpenSSL license (the "License"). You may not use
|
5
|
+
* this file except in compliance with the License. You can obtain a copy
|
6
|
+
* in the file LICENSE in the source distribution or at
|
7
|
+
* https://www.openssl.org/source/license.html
|
8
|
+
*/
|
9
|
+
|
10
|
+
#include <openssl/ssl.h>
|
11
|
+
|
12
|
+
#include <openssl/bio.h>
|
13
|
+
|
14
|
+
|
15
|
+
static int ssl_read(BIO *bio, char *out, int outl) {
|
16
|
+
SSL *ssl = bio->ptr;
|
17
|
+
if (ssl == NULL) {
|
18
|
+
return 0;
|
19
|
+
}
|
20
|
+
|
21
|
+
BIO_clear_retry_flags(bio);
|
22
|
+
|
23
|
+
const int ret = SSL_read(ssl, out, outl);
|
24
|
+
|
25
|
+
switch (SSL_get_error(ssl, ret)) {
|
26
|
+
case SSL_ERROR_WANT_READ:
|
27
|
+
BIO_set_retry_read(bio);
|
28
|
+
break;
|
29
|
+
|
30
|
+
case SSL_ERROR_WANT_WRITE:
|
31
|
+
BIO_set_retry_write(bio);
|
32
|
+
break;
|
33
|
+
|
34
|
+
case SSL_ERROR_WANT_ACCEPT:
|
35
|
+
BIO_set_retry_special(bio);
|
36
|
+
bio->retry_reason = BIO_RR_ACCEPT;
|
37
|
+
break;
|
38
|
+
|
39
|
+
case SSL_ERROR_WANT_CONNECT:
|
40
|
+
BIO_set_retry_special(bio);
|
41
|
+
bio->retry_reason = BIO_RR_CONNECT;
|
42
|
+
break;
|
43
|
+
|
44
|
+
case SSL_ERROR_NONE:
|
45
|
+
case SSL_ERROR_SYSCALL:
|
46
|
+
case SSL_ERROR_SSL:
|
47
|
+
case SSL_ERROR_ZERO_RETURN:
|
48
|
+
default:
|
49
|
+
break;
|
50
|
+
}
|
51
|
+
|
52
|
+
return ret;
|
53
|
+
}
|
54
|
+
|
55
|
+
static int ssl_write(BIO *bio, const char *out, int outl) {
|
56
|
+
SSL *ssl = bio->ptr;
|
57
|
+
if (ssl == NULL) {
|
58
|
+
return 0;
|
59
|
+
}
|
60
|
+
|
61
|
+
BIO_clear_retry_flags(bio);
|
62
|
+
|
63
|
+
const int ret = SSL_write(ssl, out, outl);
|
64
|
+
|
65
|
+
switch (SSL_get_error(ssl, ret)) {
|
66
|
+
case SSL_ERROR_WANT_WRITE:
|
67
|
+
BIO_set_retry_write(bio);
|
68
|
+
break;
|
69
|
+
|
70
|
+
case SSL_ERROR_WANT_READ:
|
71
|
+
BIO_set_retry_read(bio);
|
72
|
+
break;
|
73
|
+
|
74
|
+
case SSL_ERROR_WANT_CONNECT:
|
75
|
+
BIO_set_retry_special(bio);
|
76
|
+
bio->retry_reason = BIO_RR_CONNECT;
|
77
|
+
break;
|
78
|
+
|
79
|
+
case SSL_ERROR_NONE:
|
80
|
+
case SSL_ERROR_SYSCALL:
|
81
|
+
case SSL_ERROR_SSL:
|
82
|
+
default:
|
83
|
+
break;
|
84
|
+
}
|
85
|
+
|
86
|
+
return ret;
|
87
|
+
}
|
88
|
+
|
89
|
+
static long ssl_ctrl(BIO *bio, int cmd, long num, void *ptr) {
|
90
|
+
SSL *ssl = bio->ptr;
|
91
|
+
if (ssl == NULL && cmd != BIO_C_SET_SSL) {
|
92
|
+
return 0;
|
93
|
+
}
|
94
|
+
|
95
|
+
switch (cmd) {
|
96
|
+
case BIO_C_SET_SSL:
|
97
|
+
bio->shutdown = num;
|
98
|
+
bio->ptr = ptr;
|
99
|
+
bio->init = 1;
|
100
|
+
return 1;
|
101
|
+
|
102
|
+
case BIO_CTRL_GET_CLOSE:
|
103
|
+
return bio->shutdown;
|
104
|
+
|
105
|
+
case BIO_CTRL_SET_CLOSE:
|
106
|
+
bio->shutdown = num;
|
107
|
+
return 1;
|
108
|
+
|
109
|
+
case BIO_CTRL_WPENDING:
|
110
|
+
return BIO_ctrl(SSL_get_wbio(ssl), cmd, num, ptr);
|
111
|
+
|
112
|
+
case BIO_CTRL_PENDING:
|
113
|
+
return SSL_pending(ssl);
|
114
|
+
|
115
|
+
case BIO_CTRL_FLUSH: {
|
116
|
+
BIO_clear_retry_flags(bio);
|
117
|
+
long ret = BIO_ctrl(SSL_get_wbio(ssl), cmd, num, ptr);
|
118
|
+
BIO_copy_next_retry(bio);
|
119
|
+
return ret;
|
120
|
+
}
|
121
|
+
|
122
|
+
case BIO_CTRL_PUSH:
|
123
|
+
case BIO_CTRL_POP:
|
124
|
+
case BIO_CTRL_DUP:
|
125
|
+
return -1;
|
126
|
+
|
127
|
+
default:
|
128
|
+
return BIO_ctrl(SSL_get_rbio(ssl), cmd, num, ptr);
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
static int ssl_new(BIO *bio) {
|
133
|
+
return 1;
|
134
|
+
}
|
135
|
+
|
136
|
+
static int ssl_free(BIO *bio) {
|
137
|
+
SSL *ssl = bio->ptr;
|
138
|
+
|
139
|
+
if (ssl == NULL) {
|
140
|
+
return 1;
|
141
|
+
}
|
142
|
+
|
143
|
+
SSL_shutdown(ssl);
|
144
|
+
if (bio->shutdown) {
|
145
|
+
SSL_free(ssl);
|
146
|
+
}
|
147
|
+
|
148
|
+
return 1;
|
149
|
+
}
|
150
|
+
|
151
|
+
static long ssl_callback_ctrl(BIO *bio, int cmd, bio_info_cb fp) {
|
152
|
+
SSL *ssl = bio->ptr;
|
153
|
+
if (ssl == NULL) {
|
154
|
+
return 0;
|
155
|
+
}
|
156
|
+
|
157
|
+
switch (cmd) {
|
158
|
+
case BIO_CTRL_SET_CALLBACK:
|
159
|
+
return -1;
|
160
|
+
|
161
|
+
default:
|
162
|
+
return BIO_callback_ctrl(SSL_get_rbio(ssl), cmd, fp);
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
static const BIO_METHOD ssl_method = {
|
167
|
+
BIO_TYPE_SSL, "SSL", ssl_write, ssl_read, NULL,
|
168
|
+
NULL, ssl_ctrl, ssl_new, ssl_free, ssl_callback_ctrl,
|
169
|
+
};
|
170
|
+
|
171
|
+
const BIO_METHOD *BIO_f_ssl(void) { return &ssl_method; }
|
172
|
+
|
173
|
+
long BIO_set_ssl(BIO *bio, SSL *ssl, int take_owership) {
|
174
|
+
return BIO_ctrl(bio, BIO_C_SET_SSL, take_owership, ssl);
|
175
|
+
}
|
@@ -58,7 +58,8 @@ static int default_add_callback(SSL *ssl, unsigned extension_value,
|
|
58
58
|
return 1;
|
59
59
|
}
|
60
60
|
|
61
|
-
static int custom_ext_add_hello(
|
61
|
+
static int custom_ext_add_hello(SSL_HANDSHAKE *hs, CBB *extensions) {
|
62
|
+
SSL *const ssl = hs->ssl;
|
62
63
|
STACK_OF(SSL_CUSTOM_EXTENSION) *stack = ssl->ctx->client_custom_extensions;
|
63
64
|
if (ssl->server) {
|
64
65
|
stack = ssl->ctx->server_custom_extensions;
|
@@ -72,7 +73,7 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
|
|
72
73
|
const SSL_CUSTOM_EXTENSION *ext = sk_SSL_CUSTOM_EXTENSION_value(stack, i);
|
73
74
|
|
74
75
|
if (ssl->server &&
|
75
|
-
!(
|
76
|
+
!(hs->custom_extensions.received & (1u << i))) {
|
76
77
|
/* Servers cannot echo extensions that the client didn't send. */
|
77
78
|
continue;
|
78
79
|
}
|
@@ -90,7 +91,7 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
|
|
90
91
|
!CBB_add_bytes(&contents_cbb, contents, contents_len) ||
|
91
92
|
!CBB_flush(extensions)) {
|
92
93
|
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
93
|
-
ERR_add_error_dataf("extension
|
94
|
+
ERR_add_error_dataf("extension %u", (unsigned) ext->value);
|
94
95
|
if (ext->free_callback && 0 < contents_len) {
|
95
96
|
ext->free_callback(ssl, ext->value, contents, ext->add_arg);
|
96
97
|
}
|
@@ -102,8 +103,8 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
|
|
102
103
|
}
|
103
104
|
|
104
105
|
if (!ssl->server) {
|
105
|
-
assert((
|
106
|
-
|
106
|
+
assert((hs->custom_extensions.sent & (1u << i)) == 0);
|
107
|
+
hs->custom_extensions.sent |= (1u << i);
|
107
108
|
}
|
108
109
|
break;
|
109
110
|
|
@@ -113,7 +114,7 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
|
|
113
114
|
default:
|
114
115
|
ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
|
115
116
|
OPENSSL_PUT_ERROR(SSL, SSL_R_CUSTOM_EXTENSION_ERROR);
|
116
|
-
ERR_add_error_dataf("extension
|
117
|
+
ERR_add_error_dataf("extension %u", (unsigned) ext->value);
|
117
118
|
return 0;
|
118
119
|
}
|
119
120
|
}
|
@@ -121,12 +122,13 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
|
|
121
122
|
return 1;
|
122
123
|
}
|
123
124
|
|
124
|
-
int custom_ext_add_clienthello(
|
125
|
-
return custom_ext_add_hello(
|
125
|
+
int custom_ext_add_clienthello(SSL_HANDSHAKE *hs, CBB *extensions) {
|
126
|
+
return custom_ext_add_hello(hs, extensions);
|
126
127
|
}
|
127
128
|
|
128
|
-
int custom_ext_parse_serverhello(
|
129
|
-
const CBS *extension) {
|
129
|
+
int custom_ext_parse_serverhello(SSL_HANDSHAKE *hs, int *out_alert,
|
130
|
+
uint16_t value, const CBS *extension) {
|
131
|
+
SSL *const ssl = hs->ssl;
|
130
132
|
unsigned index;
|
131
133
|
const SSL_CUSTOM_EXTENSION *ext =
|
132
134
|
custom_ext_find(ssl->ctx->client_custom_extensions, &index, value);
|
@@ -134,9 +136,9 @@ int custom_ext_parse_serverhello(SSL *ssl, int *out_alert, uint16_t value,
|
|
134
136
|
if (/* Unknown extensions are not allowed in a ServerHello. */
|
135
137
|
ext == NULL ||
|
136
138
|
/* Also, if we didn't send the extension, that's also unacceptable. */
|
137
|
-
!(
|
139
|
+
!(hs->custom_extensions.sent & (1u << index))) {
|
138
140
|
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
|
139
|
-
ERR_add_error_dataf("extension
|
141
|
+
ERR_add_error_dataf("extension %u", (unsigned)value);
|
140
142
|
*out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
|
141
143
|
return 0;
|
142
144
|
}
|
@@ -145,15 +147,16 @@ int custom_ext_parse_serverhello(SSL *ssl, int *out_alert, uint16_t value,
|
|
145
147
|
!ext->parse_callback(ssl, value, CBS_data(extension), CBS_len(extension),
|
146
148
|
out_alert, ext->parse_arg)) {
|
147
149
|
OPENSSL_PUT_ERROR(SSL, SSL_R_CUSTOM_EXTENSION_ERROR);
|
148
|
-
ERR_add_error_dataf("extension
|
150
|
+
ERR_add_error_dataf("extension %u", (unsigned)ext->value);
|
149
151
|
return 0;
|
150
152
|
}
|
151
153
|
|
152
154
|
return 1;
|
153
155
|
}
|
154
156
|
|
155
|
-
int custom_ext_parse_clienthello(
|
156
|
-
const CBS *extension) {
|
157
|
+
int custom_ext_parse_clienthello(SSL_HANDSHAKE *hs, int *out_alert,
|
158
|
+
uint16_t value, const CBS *extension) {
|
159
|
+
SSL *const ssl = hs->ssl;
|
157
160
|
unsigned index;
|
158
161
|
const SSL_CUSTOM_EXTENSION *ext =
|
159
162
|
custom_ext_find(ssl->ctx->server_custom_extensions, &index, value);
|
@@ -162,29 +165,29 @@ int custom_ext_parse_clienthello(SSL *ssl, int *out_alert, uint16_t value,
|
|
162
165
|
return 1;
|
163
166
|
}
|
164
167
|
|
165
|
-
assert((
|
166
|
-
|
168
|
+
assert((hs->custom_extensions.received & (1u << index)) == 0);
|
169
|
+
hs->custom_extensions.received |= (1u << index);
|
167
170
|
|
168
171
|
if (ext->parse_callback &&
|
169
172
|
!ext->parse_callback(ssl, value, CBS_data(extension), CBS_len(extension),
|
170
173
|
out_alert, ext->parse_arg)) {
|
171
174
|
OPENSSL_PUT_ERROR(SSL, SSL_R_CUSTOM_EXTENSION_ERROR);
|
172
|
-
ERR_add_error_dataf("extension
|
175
|
+
ERR_add_error_dataf("extension %u", (unsigned)ext->value);
|
173
176
|
return 0;
|
174
177
|
}
|
175
178
|
|
176
179
|
return 1;
|
177
180
|
}
|
178
181
|
|
179
|
-
int custom_ext_add_serverhello(
|
180
|
-
return custom_ext_add_hello(
|
182
|
+
int custom_ext_add_serverhello(SSL_HANDSHAKE *hs, CBB *extensions) {
|
183
|
+
return custom_ext_add_hello(hs, extensions);
|
181
184
|
}
|
182
185
|
|
183
186
|
/* MAX_NUM_CUSTOM_EXTENSIONS is the maximum number of custom extensions that
|
184
187
|
* can be set on an |SSL_CTX|. It's determined by the size of the bitset used
|
185
188
|
* to track when an extension has been sent. */
|
186
189
|
#define MAX_NUM_CUSTOM_EXTENSIONS \
|
187
|
-
(sizeof(((
|
190
|
+
(sizeof(((SSL_HANDSHAKE *)NULL)->custom_extensions.sent) * 8)
|
188
191
|
|
189
192
|
static int custom_ext_append(STACK_OF(SSL_CUSTOM_EXTENSION) **stack,
|
190
193
|
unsigned extension_value,
|
@@ -122,8 +122,10 @@
|
|
122
122
|
#include <openssl/evp.h>
|
123
123
|
#include <openssl/mem.h>
|
124
124
|
#include <openssl/rand.h>
|
125
|
+
#include <openssl/type_check.h>
|
125
126
|
#include <openssl/x509.h>
|
126
127
|
|
128
|
+
#include "../crypto/internal.h"
|
127
129
|
#include "internal.h"
|
128
130
|
|
129
131
|
|
@@ -157,7 +159,7 @@ static hm_fragment *dtls1_hm_fragment_new(const struct hm_header_st *msg_hdr) {
|
|
157
159
|
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
158
160
|
return NULL;
|
159
161
|
}
|
160
|
-
|
162
|
+
OPENSSL_memset(frag, 0, sizeof(hm_fragment));
|
161
163
|
frag->type = msg_hdr->type;
|
162
164
|
frag->seq = msg_hdr->seq;
|
163
165
|
frag->msg_len = msg_hdr->msg_len;
|
@@ -195,7 +197,7 @@ static hm_fragment *dtls1_hm_fragment_new(const struct hm_header_st *msg_hdr) {
|
|
195
197
|
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
196
198
|
goto err;
|
197
199
|
}
|
198
|
-
|
200
|
+
OPENSSL_memset(frag->reassembly, 0, bitmask_len);
|
199
201
|
}
|
200
202
|
|
201
203
|
return frag;
|
@@ -310,9 +312,9 @@ start:
|
|
310
312
|
}
|
311
313
|
|
312
314
|
/* Cross-epoch records are discarded, but we may receive out-of-order
|
313
|
-
* application data between ChangeCipherSpec and Finished or a
|
314
|
-
* before the appropriate point in the handshake. Those must
|
315
|
-
* discarded.
|
315
|
+
* application data between ChangeCipherSpec and Finished or a
|
316
|
+
* ChangeCipherSpec before the appropriate point in the handshake. Those must
|
317
|
+
* be silently discarded.
|
316
318
|
*
|
317
319
|
* However, only allow the out-of-order records in the correct epoch.
|
318
320
|
* Application data must come in the encrypted epoch, and ChangeCipherSpec in
|
@@ -383,8 +385,8 @@ start:
|
|
383
385
|
assert(msg_len > 0);
|
384
386
|
|
385
387
|
/* Copy the body into the fragment. */
|
386
|
-
|
387
|
-
|
388
|
+
OPENSSL_memcpy(frag->data + DTLS1_HM_HEADER_LENGTH + frag_off,
|
389
|
+
CBS_data(&body), CBS_len(&body));
|
388
390
|
dtls1_hm_fragment_mark(frag, frag_off, frag_off + frag_len);
|
389
391
|
}
|
390
392
|
|
@@ -393,17 +395,11 @@ start:
|
|
393
395
|
return 1;
|
394
396
|
}
|
395
397
|
|
396
|
-
int dtls1_get_message(SSL *ssl
|
397
|
-
enum ssl_hash_message_t hash_message) {
|
398
|
+
int dtls1_get_message(SSL *ssl) {
|
398
399
|
if (ssl->s3->tmp.reuse_message) {
|
399
|
-
/*
|
400
|
-
* ssl_dont_hash_message would have to have been applied to the previous
|
401
|
-
* call. */
|
402
|
-
assert(hash_message == ssl_hash_message);
|
400
|
+
/* There must be a current message. */
|
403
401
|
assert(ssl->init_msg != NULL);
|
404
|
-
|
405
402
|
ssl->s3->tmp.reuse_message = 0;
|
406
|
-
hash_message = ssl_dont_hash_message;
|
407
403
|
} else {
|
408
404
|
dtls1_release_current_message(ssl, 0 /* don't free buffer */);
|
409
405
|
}
|
@@ -428,27 +424,17 @@ int dtls1_get_message(SSL *ssl, int msg_type,
|
|
428
424
|
ssl->init_msg = frag->data + DTLS1_HM_HEADER_LENGTH;
|
429
425
|
ssl->init_num = frag->msg_len;
|
430
426
|
|
431
|
-
if (msg_type >= 0 && ssl->s3->tmp.message_type != msg_type) {
|
432
|
-
ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
|
433
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
|
434
|
-
return -1;
|
435
|
-
}
|
436
|
-
if (hash_message == ssl_hash_message && !dtls1_hash_current_message(ssl)) {
|
437
|
-
return -1;
|
438
|
-
}
|
439
|
-
|
440
427
|
ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_HANDSHAKE, frag->data,
|
441
428
|
ssl->init_num + DTLS1_HM_HEADER_LENGTH);
|
442
429
|
return 1;
|
443
430
|
}
|
444
431
|
|
445
|
-
|
432
|
+
void dtls1_get_current_message(const SSL *ssl, CBS *out) {
|
446
433
|
assert(dtls1_is_current_message_complete(ssl));
|
447
434
|
|
448
435
|
hm_fragment *frag = ssl->d1->incoming_messages[ssl->d1->handshake_read_seq %
|
449
436
|
SSL_MAX_HANDSHAKE_FLIGHT];
|
450
|
-
|
451
|
-
DTLS1_HM_HEADER_LENGTH + frag->msg_len);
|
437
|
+
CBS_init(out, frag->data, DTLS1_HM_HEADER_LENGTH + frag->msg_len);
|
452
438
|
}
|
453
439
|
|
454
440
|
void dtls1_release_current_message(SSL *ssl, int free_buffer) {
|
@@ -490,7 +476,7 @@ int dtls_has_incoming_messages(const SSL *ssl) {
|
|
490
476
|
|
491
477
|
int dtls1_parse_fragment(CBS *cbs, struct hm_header_st *out_hdr,
|
492
478
|
CBS *out_body) {
|
493
|
-
|
479
|
+
OPENSSL_memset(out_hdr, 0x00, sizeof(struct hm_header_st));
|
494
480
|
|
495
481
|
if (!CBS_get_u8(cbs, &out_hdr->type) ||
|
496
482
|
!CBS_get_u24(cbs, &out_hdr->msg_len) ||
|
@@ -507,279 +493,138 @@ int dtls1_parse_fragment(CBS *cbs, struct hm_header_st *out_hdr,
|
|
507
493
|
|
508
494
|
/* Sending handshake messages. */
|
509
495
|
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
long mtu = BIO_ctrl(ssl->wbio, BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
|
515
|
-
if (mtu >= 0 && mtu <= (1 << 30) && (unsigned)mtu >= dtls1_min_mtu()) {
|
516
|
-
ssl->d1->mtu = (unsigned)mtu;
|
517
|
-
} else {
|
518
|
-
ssl->d1->mtu = kDefaultMTU;
|
519
|
-
BIO_ctrl(ssl->wbio, BIO_CTRL_DGRAM_SET_MTU, ssl->d1->mtu, NULL);
|
520
|
-
}
|
496
|
+
void dtls_clear_outgoing_messages(SSL *ssl) {
|
497
|
+
for (size_t i = 0; i < ssl->d1->outgoing_messages_len; i++) {
|
498
|
+
OPENSSL_free(ssl->d1->outgoing_messages[i].data);
|
499
|
+
ssl->d1->outgoing_messages[i].data = NULL;
|
521
500
|
}
|
522
|
-
|
523
|
-
|
524
|
-
|
501
|
+
ssl->d1->outgoing_messages_len = 0;
|
502
|
+
ssl->d1->outgoing_written = 0;
|
503
|
+
ssl->d1->outgoing_offset = 0;
|
525
504
|
}
|
526
505
|
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
return 0;
|
536
|
-
}
|
537
|
-
ret -= overhead;
|
538
|
-
|
539
|
-
size_t pending = BIO_wpending(ssl->wbio);
|
540
|
-
if (ret <= pending) {
|
506
|
+
int dtls1_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type) {
|
507
|
+
/* Pick a modest size hint to save most of the |realloc| calls. */
|
508
|
+
if (!CBB_init(cbb, 64) ||
|
509
|
+
!CBB_add_u8(cbb, type) ||
|
510
|
+
!CBB_add_u24(cbb, 0 /* length (filled in later) */) ||
|
511
|
+
!CBB_add_u16(cbb, ssl->d1->handshake_write_seq) ||
|
512
|
+
!CBB_add_u24(cbb, 0 /* offset */) ||
|
513
|
+
!CBB_add_u24_length_prefixed(cbb, body)) {
|
541
514
|
return 0;
|
542
515
|
}
|
543
|
-
ret -= pending;
|
544
516
|
|
545
|
-
return ret;
|
546
|
-
}
|
547
|
-
|
548
|
-
static int dtls1_write_change_cipher_spec(SSL *ssl,
|
549
|
-
enum dtls1_use_epoch_t use_epoch) {
|
550
|
-
dtls1_update_mtu(ssl);
|
551
|
-
|
552
|
-
/* During the handshake, wbio is buffered to pack messages together. Flush the
|
553
|
-
* buffer if the ChangeCipherSpec would not fit in a packet. */
|
554
|
-
if (dtls1_max_record_size(ssl) == 0) {
|
555
|
-
int ret = BIO_flush(ssl->wbio);
|
556
|
-
if (ret <= 0) {
|
557
|
-
ssl->rwstate = SSL_WRITING;
|
558
|
-
return ret;
|
559
|
-
}
|
560
|
-
}
|
561
|
-
|
562
|
-
static const uint8_t kChangeCipherSpec[1] = {SSL3_MT_CCS};
|
563
|
-
int ret =
|
564
|
-
dtls1_write_record(ssl, SSL3_RT_CHANGE_CIPHER_SPEC, kChangeCipherSpec,
|
565
|
-
sizeof(kChangeCipherSpec), use_epoch);
|
566
|
-
if (ret <= 0) {
|
567
|
-
return ret;
|
568
|
-
}
|
569
|
-
|
570
|
-
ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_CHANGE_CIPHER_SPEC,
|
571
|
-
kChangeCipherSpec, sizeof(kChangeCipherSpec));
|
572
517
|
return 1;
|
573
518
|
}
|
574
519
|
|
575
|
-
|
576
|
-
*
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
* handshake header. */
|
581
|
-
static int dtls1_do_handshake_write(SSL *ssl, size_t *out_offset,
|
582
|
-
const uint8_t *in, size_t offset,
|
583
|
-
size_t len,
|
584
|
-
enum dtls1_use_epoch_t use_epoch) {
|
585
|
-
dtls1_update_mtu(ssl);
|
586
|
-
|
587
|
-
int ret = -1;
|
588
|
-
CBB cbb;
|
589
|
-
CBB_zero(&cbb);
|
590
|
-
/* Allocate a temporary buffer to hold the message fragments to avoid
|
591
|
-
* clobbering the message. */
|
592
|
-
uint8_t *buf = OPENSSL_malloc(ssl->d1->mtu);
|
593
|
-
if (buf == NULL) {
|
594
|
-
goto err;
|
595
|
-
}
|
596
|
-
|
597
|
-
/* Although it may be sent as multiple fragments, a DTLS message must be sent
|
598
|
-
* serialized as a single fragment for purposes of |ssl_do_msg_callback| and
|
599
|
-
* the handshake hash. */
|
600
|
-
CBS cbs, body;
|
601
|
-
struct hm_header_st hdr;
|
602
|
-
CBS_init(&cbs, in, len);
|
603
|
-
if (!dtls1_parse_fragment(&cbs, &hdr, &body) ||
|
604
|
-
hdr.frag_off != 0 ||
|
605
|
-
hdr.frag_len != CBS_len(&body) ||
|
606
|
-
hdr.msg_len != CBS_len(&body) ||
|
607
|
-
!CBS_skip(&body, offset) ||
|
608
|
-
CBS_len(&cbs) != 0) {
|
609
|
-
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
610
|
-
goto err;
|
611
|
-
}
|
612
|
-
|
613
|
-
do {
|
614
|
-
/* During the handshake, wbio is buffered to pack messages together. Flush
|
615
|
-
* the buffer if there isn't enough room to make progress. */
|
616
|
-
if (dtls1_max_record_size(ssl) < DTLS1_HM_HEADER_LENGTH + 1) {
|
617
|
-
int flush_ret = BIO_flush(ssl->wbio);
|
618
|
-
if (flush_ret <= 0) {
|
619
|
-
ssl->rwstate = SSL_WRITING;
|
620
|
-
ret = flush_ret;
|
621
|
-
goto err;
|
622
|
-
}
|
623
|
-
assert(BIO_wpending(ssl->wbio) == 0);
|
624
|
-
}
|
625
|
-
|
626
|
-
size_t todo = dtls1_max_record_size(ssl);
|
627
|
-
if (todo < DTLS1_HM_HEADER_LENGTH + 1) {
|
628
|
-
/* To make forward progress, the MTU must, at minimum, fit the handshake
|
629
|
-
* header and one byte of handshake body. */
|
630
|
-
OPENSSL_PUT_ERROR(SSL, SSL_R_MTU_TOO_SMALL);
|
631
|
-
goto err;
|
632
|
-
}
|
633
|
-
todo -= DTLS1_HM_HEADER_LENGTH;
|
634
|
-
|
635
|
-
if (todo > CBS_len(&body)) {
|
636
|
-
todo = CBS_len(&body);
|
637
|
-
}
|
638
|
-
if (todo >= (1u << 24)) {
|
639
|
-
todo = (1u << 24) - 1;
|
640
|
-
}
|
641
|
-
|
642
|
-
size_t buf_len;
|
643
|
-
if (!CBB_init_fixed(&cbb, buf, ssl->d1->mtu) ||
|
644
|
-
!CBB_add_u8(&cbb, hdr.type) ||
|
645
|
-
!CBB_add_u24(&cbb, hdr.msg_len) ||
|
646
|
-
!CBB_add_u16(&cbb, hdr.seq) ||
|
647
|
-
!CBB_add_u24(&cbb, offset) ||
|
648
|
-
!CBB_add_u24(&cbb, todo) ||
|
649
|
-
!CBB_add_bytes(&cbb, CBS_data(&body), todo) ||
|
650
|
-
!CBB_finish(&cbb, NULL, &buf_len)) {
|
651
|
-
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
652
|
-
goto err;
|
653
|
-
}
|
654
|
-
|
655
|
-
int write_ret =
|
656
|
-
dtls1_write_record(ssl, SSL3_RT_HANDSHAKE, buf, buf_len, use_epoch);
|
657
|
-
if (write_ret <= 0) {
|
658
|
-
ret = write_ret;
|
659
|
-
goto err;
|
660
|
-
}
|
661
|
-
|
662
|
-
if (!CBS_skip(&body, todo)) {
|
663
|
-
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
664
|
-
goto err;
|
665
|
-
}
|
666
|
-
offset += todo;
|
667
|
-
} while (CBS_len(&body) != 0);
|
668
|
-
|
669
|
-
ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HANDSHAKE, in, len);
|
670
|
-
|
671
|
-
ret = 1;
|
672
|
-
|
673
|
-
err:
|
674
|
-
*out_offset = offset;
|
675
|
-
CBB_cleanup(&cbb);
|
676
|
-
OPENSSL_free(buf);
|
677
|
-
return ret;
|
678
|
-
}
|
679
|
-
|
680
|
-
void dtls_clear_outgoing_messages(SSL *ssl) {
|
681
|
-
for (size_t i = 0; i < ssl->d1->outgoing_messages_len; i++) {
|
682
|
-
OPENSSL_free(ssl->d1->outgoing_messages[i].data);
|
683
|
-
ssl->d1->outgoing_messages[i].data = NULL;
|
684
|
-
}
|
685
|
-
ssl->d1->outgoing_messages_len = 0;
|
686
|
-
}
|
687
|
-
|
688
|
-
/* dtls1_add_change_cipher_spec adds a ChangeCipherSpec to the current
|
689
|
-
* handshake flight. */
|
690
|
-
static int dtls1_add_change_cipher_spec(SSL *ssl) {
|
691
|
-
if (ssl->d1->outgoing_messages_len >= SSL_MAX_HANDSHAKE_FLIGHT) {
|
520
|
+
int dtls1_finish_message(SSL *ssl, CBB *cbb, uint8_t **out_msg,
|
521
|
+
size_t *out_len) {
|
522
|
+
*out_msg = NULL;
|
523
|
+
if (!CBB_finish(cbb, out_msg, out_len) ||
|
524
|
+
*out_len < DTLS1_HM_HEADER_LENGTH) {
|
692
525
|
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
526
|
+
OPENSSL_free(*out_msg);
|
693
527
|
return 0;
|
694
528
|
}
|
695
529
|
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
msg->len = 0;
|
700
|
-
msg->epoch = ssl->d1->w_epoch;
|
701
|
-
msg->is_ccs = 1;
|
702
|
-
|
703
|
-
ssl->d1->outgoing_messages_len++;
|
530
|
+
/* Fix up the header. Copy the fragment length into the total message
|
531
|
+
* length. */
|
532
|
+
OPENSSL_memcpy(*out_msg + 1, *out_msg + DTLS1_HM_HEADER_LENGTH - 3, 3);
|
704
533
|
return 1;
|
705
534
|
}
|
706
535
|
|
707
|
-
|
536
|
+
/* add_outgoing adds a new handshake message or ChangeCipherSpec to the current
|
537
|
+
* outgoing flight. It returns one on success and zero on error. In both cases,
|
538
|
+
* it takes ownership of |data| and releases it with |OPENSSL_free| when
|
539
|
+
* done. */
|
540
|
+
static int add_outgoing(SSL *ssl, int is_ccs, uint8_t *data, size_t len) {
|
541
|
+
OPENSSL_COMPILE_ASSERT(SSL_MAX_HANDSHAKE_FLIGHT <
|
542
|
+
(1 << 8 * sizeof(ssl->d1->outgoing_messages_len)),
|
543
|
+
outgoing_messages_len_is_too_small);
|
708
544
|
if (ssl->d1->outgoing_messages_len >= SSL_MAX_HANDSHAKE_FLIGHT) {
|
545
|
+
assert(0);
|
709
546
|
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
710
547
|
OPENSSL_free(data);
|
711
548
|
return 0;
|
712
549
|
}
|
713
550
|
|
551
|
+
if (!is_ccs) {
|
552
|
+
/* TODO(svaldez): Move this up a layer to fix abstraction for SSL_TRANSCRIPT
|
553
|
+
* on hs. */
|
554
|
+
if (ssl->s3->hs != NULL &&
|
555
|
+
!SSL_TRANSCRIPT_update(&ssl->s3->hs->transcript, data, len)) {
|
556
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
557
|
+
OPENSSL_free(data);
|
558
|
+
return 0;
|
559
|
+
}
|
560
|
+
ssl->d1->handshake_write_seq++;
|
561
|
+
}
|
562
|
+
|
714
563
|
DTLS_OUTGOING_MESSAGE *msg =
|
715
564
|
&ssl->d1->outgoing_messages[ssl->d1->outgoing_messages_len];
|
716
565
|
msg->data = data;
|
717
566
|
msg->len = len;
|
718
567
|
msg->epoch = ssl->d1->w_epoch;
|
719
|
-
msg->is_ccs =
|
568
|
+
msg->is_ccs = is_ccs;
|
720
569
|
|
721
570
|
ssl->d1->outgoing_messages_len++;
|
722
571
|
return 1;
|
723
572
|
}
|
724
573
|
|
725
|
-
int
|
726
|
-
|
727
|
-
if (!CBB_init(cbb, 64) ||
|
728
|
-
!CBB_add_u8(cbb, type) ||
|
729
|
-
!CBB_add_u24(cbb, 0 /* length (filled in later) */) ||
|
730
|
-
!CBB_add_u16(cbb, ssl->d1->handshake_write_seq) ||
|
731
|
-
!CBB_add_u24(cbb, 0 /* offset */) ||
|
732
|
-
!CBB_add_u24_length_prefixed(cbb, body)) {
|
733
|
-
return 0;
|
734
|
-
}
|
735
|
-
|
736
|
-
return 1;
|
574
|
+
int dtls1_add_message(SSL *ssl, uint8_t *data, size_t len) {
|
575
|
+
return add_outgoing(ssl, 0 /* handshake */, data, len);
|
737
576
|
}
|
738
577
|
|
739
|
-
int
|
740
|
-
|
741
|
-
size_t len;
|
742
|
-
if (!CBB_finish(cbb, &msg, &len) ||
|
743
|
-
len > 0xffffffffu ||
|
744
|
-
len < DTLS1_HM_HEADER_LENGTH) {
|
745
|
-
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
746
|
-
OPENSSL_free(msg);
|
747
|
-
return 0;
|
748
|
-
}
|
749
|
-
|
750
|
-
/* Fix up the header. Copy the fragment length into the total message
|
751
|
-
* length. */
|
752
|
-
memcpy(msg + 1, msg + DTLS1_HM_HEADER_LENGTH - 3, 3);
|
753
|
-
|
754
|
-
ssl3_update_handshake_hash(ssl, msg, len);
|
755
|
-
|
756
|
-
ssl->d1->handshake_write_seq++;
|
757
|
-
ssl->init_off = 0;
|
758
|
-
return dtls1_add_message(ssl, msg, len);
|
578
|
+
int dtls1_add_change_cipher_spec(SSL *ssl) {
|
579
|
+
return add_outgoing(ssl, 1 /* ChangeCipherSpec */, NULL, 0);
|
759
580
|
}
|
760
581
|
|
761
|
-
int
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
582
|
+
int dtls1_add_alert(SSL *ssl, uint8_t level, uint8_t desc) {
|
583
|
+
/* The |add_alert| path is only used for warning alerts for now, which DTLS
|
584
|
+
* never sends. This will be implemented later once closure alerts are
|
585
|
+
* converted. */
|
586
|
+
assert(0);
|
587
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
588
|
+
return 0;
|
589
|
+
}
|
766
590
|
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
591
|
+
/* dtls1_update_mtu updates the current MTU from the BIO, ensuring it is above
|
592
|
+
* the minimum. */
|
593
|
+
static void dtls1_update_mtu(SSL *ssl) {
|
594
|
+
/* TODO(davidben): No consumer implements |BIO_CTRL_DGRAM_SET_MTU| and the
|
595
|
+
* only |BIO_CTRL_DGRAM_QUERY_MTU| implementation could use
|
596
|
+
* |SSL_set_mtu|. Does this need to be so complex? */
|
597
|
+
if (ssl->d1->mtu < dtls1_min_mtu() &&
|
598
|
+
!(SSL_get_options(ssl) & SSL_OP_NO_QUERY_MTU)) {
|
599
|
+
long mtu = BIO_ctrl(ssl->wbio, BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
|
600
|
+
if (mtu >= 0 && mtu <= (1 << 30) && (unsigned)mtu >= dtls1_min_mtu()) {
|
601
|
+
ssl->d1->mtu = (unsigned)mtu;
|
602
|
+
} else {
|
603
|
+
ssl->d1->mtu = kDefaultMTU;
|
604
|
+
BIO_ctrl(ssl->wbio, BIO_CTRL_DGRAM_SET_MTU, ssl->d1->mtu, NULL);
|
605
|
+
}
|
772
606
|
}
|
773
607
|
|
774
|
-
|
775
|
-
|
776
|
-
dtls1_use_current_epoch);
|
777
|
-
ssl->init_off = offset;
|
778
|
-
return ret;
|
608
|
+
/* The MTU should be above the minimum now. */
|
609
|
+
assert(ssl->d1->mtu >= dtls1_min_mtu());
|
779
610
|
}
|
780
611
|
|
781
|
-
|
782
|
-
|
612
|
+
enum seal_result_t {
|
613
|
+
seal_error,
|
614
|
+
seal_no_progress,
|
615
|
+
seal_partial,
|
616
|
+
seal_success,
|
617
|
+
};
|
618
|
+
|
619
|
+
/* seal_next_message seals |msg|, which must be the next message, to |out|. If
|
620
|
+
* progress was made, it returns |seal_partial| or |seal_success| and sets
|
621
|
+
* |*out_len| to the number of bytes written. */
|
622
|
+
static enum seal_result_t seal_next_message(SSL *ssl, uint8_t *out,
|
623
|
+
size_t *out_len, size_t max_out,
|
624
|
+
const DTLS_OUTGOING_MESSAGE *msg) {
|
625
|
+
assert(ssl->d1->outgoing_written < ssl->d1->outgoing_messages_len);
|
626
|
+
assert(msg == &ssl->d1->outgoing_messages[ssl->d1->outgoing_written]);
|
627
|
+
|
783
628
|
/* DTLS renegotiation is unsupported, so only epochs 0 (NULL cipher) and 1
|
784
629
|
* (negotiated cipher) exist. */
|
785
630
|
assert(ssl->d1->w_epoch == 0 || ssl->d1->w_epoch == 1);
|
@@ -788,56 +633,181 @@ static int dtls1_retransmit_message(SSL *ssl,
|
|
788
633
|
if (ssl->d1->w_epoch == 1 && msg->epoch == 0) {
|
789
634
|
use_epoch = dtls1_use_previous_epoch;
|
790
635
|
}
|
636
|
+
size_t overhead = dtls_max_seal_overhead(ssl, use_epoch);
|
637
|
+
size_t prefix = dtls_seal_prefix_len(ssl, use_epoch);
|
791
638
|
|
792
|
-
/* TODO(davidben): This cannot handle non-blocking writes. */
|
793
|
-
int ret;
|
794
639
|
if (msg->is_ccs) {
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
640
|
+
/* Check there is room for the ChangeCipherSpec. */
|
641
|
+
static const uint8_t kChangeCipherSpec[1] = {SSL3_MT_CCS};
|
642
|
+
if (max_out < sizeof(kChangeCipherSpec) + overhead) {
|
643
|
+
return seal_no_progress;
|
644
|
+
}
|
645
|
+
|
646
|
+
if (!dtls_seal_record(ssl, out, out_len, max_out,
|
647
|
+
SSL3_RT_CHANGE_CIPHER_SPEC, kChangeCipherSpec,
|
648
|
+
sizeof(kChangeCipherSpec), use_epoch)) {
|
649
|
+
return seal_error;
|
650
|
+
}
|
651
|
+
|
652
|
+
ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_CHANGE_CIPHER_SPEC,
|
653
|
+
kChangeCipherSpec, sizeof(kChangeCipherSpec));
|
654
|
+
return seal_success;
|
800
655
|
}
|
801
656
|
|
802
|
-
|
657
|
+
/* DTLS messages are serialized as a single fragment in |msg|. */
|
658
|
+
CBS cbs, body;
|
659
|
+
struct hm_header_st hdr;
|
660
|
+
CBS_init(&cbs, msg->data, msg->len);
|
661
|
+
if (!dtls1_parse_fragment(&cbs, &hdr, &body) ||
|
662
|
+
hdr.frag_off != 0 ||
|
663
|
+
hdr.frag_len != CBS_len(&body) ||
|
664
|
+
hdr.msg_len != CBS_len(&body) ||
|
665
|
+
!CBS_skip(&body, ssl->d1->outgoing_offset) ||
|
666
|
+
CBS_len(&cbs) != 0) {
|
667
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
668
|
+
return seal_error;
|
669
|
+
}
|
670
|
+
|
671
|
+
/* Determine how much progress can be made. */
|
672
|
+
if (max_out < DTLS1_HM_HEADER_LENGTH + 1 + overhead || max_out < prefix) {
|
673
|
+
return seal_no_progress;
|
674
|
+
}
|
675
|
+
size_t todo = CBS_len(&body);
|
676
|
+
if (todo > max_out - DTLS1_HM_HEADER_LENGTH - overhead) {
|
677
|
+
todo = max_out - DTLS1_HM_HEADER_LENGTH - overhead;
|
678
|
+
}
|
679
|
+
|
680
|
+
/* Assemble a fragment, to be sealed in-place. */
|
681
|
+
CBB cbb;
|
682
|
+
uint8_t *frag = out + prefix;
|
683
|
+
size_t max_frag = max_out - prefix, frag_len;
|
684
|
+
if (!CBB_init_fixed(&cbb, frag, max_frag) ||
|
685
|
+
!CBB_add_u8(&cbb, hdr.type) ||
|
686
|
+
!CBB_add_u24(&cbb, hdr.msg_len) ||
|
687
|
+
!CBB_add_u16(&cbb, hdr.seq) ||
|
688
|
+
!CBB_add_u24(&cbb, ssl->d1->outgoing_offset) ||
|
689
|
+
!CBB_add_u24(&cbb, todo) ||
|
690
|
+
!CBB_add_bytes(&cbb, CBS_data(&body), todo) ||
|
691
|
+
!CBB_finish(&cbb, NULL, &frag_len)) {
|
692
|
+
CBB_cleanup(&cbb);
|
693
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
694
|
+
return seal_error;
|
695
|
+
}
|
696
|
+
|
697
|
+
ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HANDSHAKE, frag, frag_len);
|
698
|
+
|
699
|
+
if (!dtls_seal_record(ssl, out, out_len, max_out, SSL3_RT_HANDSHAKE,
|
700
|
+
out + prefix, frag_len, use_epoch)) {
|
701
|
+
return seal_error;
|
702
|
+
}
|
703
|
+
|
704
|
+
if (todo == CBS_len(&body)) {
|
705
|
+
/* The next message is complete. */
|
706
|
+
ssl->d1->outgoing_offset = 0;
|
707
|
+
return seal_success;
|
708
|
+
}
|
709
|
+
|
710
|
+
ssl->d1->outgoing_offset += todo;
|
711
|
+
return seal_partial;
|
803
712
|
}
|
804
713
|
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
714
|
+
/* seal_next_packet writes as much of the next flight as possible to |out| and
|
715
|
+
* advances |ssl->d1->outgoing_written| and |ssl->d1->outgoing_offset| as
|
716
|
+
* appropriate. */
|
717
|
+
static int seal_next_packet(SSL *ssl, uint8_t *out, size_t *out_len,
|
718
|
+
size_t max_out) {
|
719
|
+
int made_progress = 0;
|
720
|
+
size_t total = 0;
|
721
|
+
assert(ssl->d1->outgoing_written < ssl->d1->outgoing_messages_len);
|
722
|
+
for (; ssl->d1->outgoing_written < ssl->d1->outgoing_messages_len;
|
723
|
+
ssl->d1->outgoing_written++) {
|
724
|
+
const DTLS_OUTGOING_MESSAGE *msg =
|
725
|
+
&ssl->d1->outgoing_messages[ssl->d1->outgoing_written];
|
726
|
+
size_t len;
|
727
|
+
enum seal_result_t ret = seal_next_message(ssl, out, &len, max_out, msg);
|
728
|
+
switch (ret) {
|
729
|
+
case seal_error:
|
730
|
+
return 0;
|
731
|
+
|
732
|
+
case seal_no_progress:
|
733
|
+
goto packet_full;
|
734
|
+
|
735
|
+
case seal_partial:
|
736
|
+
case seal_success:
|
737
|
+
out += len;
|
738
|
+
max_out -= len;
|
739
|
+
total += len;
|
740
|
+
made_progress = 1;
|
741
|
+
|
742
|
+
if (ret == seal_partial) {
|
743
|
+
goto packet_full;
|
744
|
+
}
|
745
|
+
break;
|
746
|
+
}
|
811
747
|
}
|
812
|
-
|
748
|
+
|
749
|
+
packet_full:
|
750
|
+
/* The MTU was too small to make any progress. */
|
751
|
+
if (!made_progress) {
|
752
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_MTU_TOO_SMALL);
|
753
|
+
return 0;
|
754
|
+
}
|
755
|
+
|
756
|
+
*out_len = total;
|
757
|
+
return 1;
|
758
|
+
}
|
759
|
+
|
760
|
+
int dtls1_flush_flight(SSL *ssl) {
|
761
|
+
dtls1_update_mtu(ssl);
|
813
762
|
|
814
763
|
int ret = -1;
|
815
|
-
|
816
|
-
|
764
|
+
uint8_t *packet = OPENSSL_malloc(ssl->d1->mtu);
|
765
|
+
if (packet == NULL) {
|
766
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
|
767
|
+
goto err;
|
768
|
+
}
|
769
|
+
|
770
|
+
while (ssl->d1->outgoing_written < ssl->d1->outgoing_messages_len) {
|
771
|
+
uint8_t old_written = ssl->d1->outgoing_written;
|
772
|
+
uint32_t old_offset = ssl->d1->outgoing_offset;
|
773
|
+
|
774
|
+
size_t packet_len;
|
775
|
+
if (!seal_next_packet(ssl, packet, &packet_len, ssl->d1->mtu)) {
|
776
|
+
goto err;
|
777
|
+
}
|
778
|
+
|
779
|
+
int bio_ret = BIO_write(ssl->wbio, packet, packet_len);
|
780
|
+
if (bio_ret <= 0) {
|
781
|
+
/* Retry this packet the next time around. */
|
782
|
+
ssl->d1->outgoing_written = old_written;
|
783
|
+
ssl->d1->outgoing_offset = old_offset;
|
784
|
+
ssl->rwstate = SSL_WRITING;
|
785
|
+
ret = bio_ret;
|
817
786
|
goto err;
|
818
787
|
}
|
819
788
|
}
|
820
789
|
|
821
|
-
|
822
|
-
if (ret <= 0) {
|
790
|
+
if (BIO_flush(ssl->wbio) <= 0) {
|
823
791
|
ssl->rwstate = SSL_WRITING;
|
824
792
|
goto err;
|
825
793
|
}
|
826
794
|
|
795
|
+
ret = 1;
|
796
|
+
|
827
797
|
err:
|
828
|
-
|
829
|
-
ssl_free_wbio_buffer(ssl);
|
830
|
-
}
|
798
|
+
OPENSSL_free(packet);
|
831
799
|
return ret;
|
832
800
|
}
|
833
801
|
|
834
|
-
int
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
802
|
+
int dtls1_retransmit_outgoing_messages(SSL *ssl) {
|
803
|
+
/* Rewind to the start of the flight and write it again.
|
804
|
+
*
|
805
|
+
* TODO(davidben): This does not allow retransmits to be resumed on
|
806
|
+
* non-blocking write. */
|
807
|
+
ssl->d1->outgoing_written = 0;
|
808
|
+
ssl->d1->outgoing_offset = 0;
|
809
|
+
|
810
|
+
return dtls1_flush_flight(ssl);
|
841
811
|
}
|
842
812
|
|
843
813
|
unsigned int dtls1_min_mtu(void) {
|