grpc 1.0.1 → 1.1.2
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 +3696 -867
- data/etc/roots.pem +39 -111
- data/include/grpc/byte_buffer.h +64 -1
- data/include/grpc/census.h +40 -96
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +42 -7
- data/include/grpc/grpc_posix.h +8 -5
- data/include/grpc/impl/codegen/atm.h +3 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
- data/include/grpc/impl/codegen/compression_types.h +1 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
- data/include/grpc/impl/codegen/gpr_slice.h +84 -0
- data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
- data/include/grpc/impl/codegen/grpc_types.h +91 -9
- data/include/grpc/impl/codegen/port_platform.h +25 -92
- data/include/grpc/impl/codegen/slice.h +54 -97
- data/include/grpc/impl/codegen/sync.h +0 -253
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice.h +132 -0
- data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
- data/include/grpc/support/alloc.h +40 -1
- data/include/grpc/support/log.h +80 -1
- data/include/grpc/support/log_windows.h +2 -0
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +252 -0
- data/include/grpc/support/time.h +67 -1
- data/src/boringssl/err_data.c +639 -627
- data/src/core/ext/census/base_resources.c +71 -0
- data/src/core/ext/census/base_resources.h +39 -0
- data/src/core/ext/census/gen/census.pb.c +26 -29
- data/src/core/ext/census/gen/census.pb.h +68 -67
- data/src/core/ext/census/gen/trace_context.pb.c +81 -0
- data/src/core/ext/census/gen/trace_context.pb.h +99 -0
- data/src/core/ext/census/grpc_filter.c +22 -16
- data/src/core/ext/census/grpc_plugin.c +2 -1
- data/src/core/ext/census/initialize.c +16 -4
- data/src/core/ext/census/mlog.h +1 -1
- data/src/core/ext/census/placeholders.c +0 -45
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +68 -0
- data/src/core/ext/census/tracing.c +8 -2
- data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
- data/src/core/ext/client_channel/client_channel.c +1218 -0
- data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
- data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
- data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
- data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
- data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
- data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
- data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
- data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
- data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
- data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
- data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
- data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
- data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
- data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
- data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
- data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
- data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
- data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
- data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
- data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
- data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
- data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
- data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
- data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
- data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
- data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
- data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
- data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
- data/src/core/ext/load_reporting/load_reporting.c +7 -56
- data/src/core/ext/load_reporting/load_reporting.h +41 -28
- data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
- data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
- data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
- data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
- data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
- data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
- data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
- data/src/core/lib/channel/channel_args.c +70 -13
- data/src/core/lib/channel/channel_args.h +28 -2
- data/src/core/lib/channel/channel_stack.c +77 -28
- data/src/core/lib/channel/channel_stack.h +61 -23
- data/src/core/lib/channel/channel_stack_builder.c +33 -25
- data/src/core/lib/channel/channel_stack_builder.h +17 -8
- data/src/core/lib/channel/compress_filter.c +52 -36
- data/src/core/lib/channel/connected_channel.c +20 -12
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +13 -1
- data/src/core/lib/channel/deadline_filter.c +344 -0
- data/src/core/lib/channel/deadline_filter.h +99 -0
- data/src/core/lib/channel/handshaker.c +240 -0
- data/src/core/lib/channel/handshaker.h +164 -0
- data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
- data/src/core/lib/channel/http_client_filter.c +248 -46
- data/src/core/lib/channel/http_client_filter.h +3 -0
- data/src/core/lib/channel/http_server_filter.c +136 -24
- data/src/core/lib/channel/message_size_filter.c +261 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/message_compress.c +43 -37
- data/src/core/lib/compression/message_compress.h +7 -5
- data/src/core/lib/http/format_request.c +26 -11
- data/src/core/lib/http/format_request.h +7 -5
- data/src/core/lib/http/httpcli.c +45 -27
- data/src/core/lib/http/httpcli.h +4 -4
- data/src/core/lib/http/httpcli_security_connector.c +56 -46
- data/src/core/lib/http/parser.c +17 -14
- data/src/core/lib/http/parser.h +4 -2
- data/src/core/lib/iomgr/closure.c +49 -7
- data/src/core/lib/iomgr/closure.h +56 -14
- data/src/core/lib/iomgr/combiner.c +422 -0
- data/src/core/lib/iomgr/combiner.h +64 -0
- data/src/core/lib/iomgr/endpoint.c +8 -2
- data/src/core/lib/iomgr/endpoint.h +17 -7
- data/src/core/lib/iomgr/endpoint_pair.h +3 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
- data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
- data/src/core/lib/iomgr/error.c +72 -6
- data/src/core/lib/iomgr/error.h +30 -3
- data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
- data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
- data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
- data/src/core/lib/iomgr/ev_posix.c +26 -5
- data/src/core/lib/iomgr/ev_posix.h +12 -1
- data/src/core/lib/iomgr/exec_ctx.c +27 -94
- data/src/core/lib/iomgr/exec_ctx.h +19 -22
- data/src/core/lib/iomgr/executor.c +29 -8
- data/src/core/lib/iomgr/executor.h +2 -4
- data/src/core/lib/iomgr/iocp_windows.c +3 -4
- data/src/core/lib/iomgr/iomgr.c +14 -10
- data/src/core/lib/iomgr/iomgr.h +6 -2
- data/src/core/lib/iomgr/iomgr_posix.c +2 -2
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +2 -2
- data/src/core/lib/iomgr/load_file.c +3 -3
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/network_status_tracker.c +1 -1
- data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
- data/src/core/lib/iomgr/pollset_uv.c +142 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +5 -6
- data/src/core/lib/iomgr/port.h +129 -0
- data/src/core/lib/iomgr/resolve_address.h +2 -1
- data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
- data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
- data/src/core/lib/iomgr/resource_quota.c +832 -0
- data/src/core/lib/iomgr/resource_quota.h +159 -0
- data/src/core/lib/iomgr/sockaddr.h +10 -2
- data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
- data/src/core/lib/iomgr/socket_mutator.c +98 -0
- data/src/core/lib/iomgr/socket_mutator.h +80 -0
- data/src/core/lib/iomgr/socket_utils.h +42 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
- data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
- data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
- data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
- data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
- data/src/core/lib/iomgr/socket_windows.c +14 -6
- data/src/core/lib/iomgr/socket_windows.h +1 -0
- data/src/core/lib/iomgr/tcp_client.h +8 -2
- data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
- data/src/core/lib/iomgr/tcp_posix.c +135 -56
- data/src/core/lib/iomgr/tcp_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server.h +14 -6
- data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
- data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
- data/src/core/lib/iomgr/tcp_uv.c +367 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +65 -48
- data/src/core/lib/iomgr/tcp_windows.h +3 -1
- data/src/core/lib/iomgr/timer.h +21 -21
- data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +6 -0
- data/src/core/lib/iomgr/timer_uv.c +99 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +116 -98
- data/src/core/lib/iomgr/udp_server.h +5 -3
- data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
- data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
- data/src/core/lib/iomgr/workqueue.h +12 -20
- data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
- data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
- data/src/core/lib/iomgr/workqueue_windows.c +9 -8
- data/src/core/lib/json/json.c +3 -3
- data/src/core/lib/json/json.h +11 -11
- data/src/core/lib/json/json_reader.c +9 -5
- data/src/core/lib/profiling/basic_timers.c +10 -1
- data/src/core/lib/profiling/timers.h +2 -0
- data/src/core/lib/security/context/security_context.c +13 -3
- data/src/core/lib/security/context/security_context.h +20 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.c +48 -19
- data/src/core/lib/security/credentials/credentials.h +36 -19
- data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
- data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
- data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
- data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
- data/src/core/lib/security/transport/client_auth_filter.c +33 -27
- data/src/core/lib/security/transport/secure_endpoint.c +93 -68
- data/src/core/lib/security/transport/secure_endpoint.h +2 -2
- data/src/core/lib/security/transport/security_connector.c +133 -168
- data/src/core/lib/security/transport/security_connector.h +31 -46
- data/src/core/lib/security/transport/security_handshaker.c +501 -0
- data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
- data/src/core/lib/security/transport/server_auth_filter.c +50 -38
- data/src/core/lib/security/util/b64.c +11 -8
- data/src/core/lib/security/util/b64.h +5 -4
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/{support → slice}/slice.c +81 -50
- data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.c +90 -0
- data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
- data/src/core/lib/support/backoff.c +24 -13
- data/src/core/lib/support/backoff.h +5 -2
- data/src/core/lib/support/env.h +0 -2
- data/src/core/lib/support/log.c +5 -4
- data/src/core/lib/support/log_linux.c +0 -1
- data/src/core/lib/support/log_posix.c +1 -1
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/string.c +58 -49
- data/src/core/lib/support/string.h +11 -8
- data/src/core/lib/support/subprocess_posix.c +5 -2
- data/src/core/lib/support/thd.c +1 -1
- data/src/core/lib/support/time.c +43 -79
- data/src/core/lib/support/time_posix.c +1 -1
- data/src/core/lib/support/tmpfile.h +0 -2
- data/src/core/lib/surface/alarm.c +4 -1
- data/src/core/lib/surface/byte_buffer.c +17 -11
- data/src/core/lib/surface/byte_buffer_reader.c +23 -15
- data/src/core/lib/surface/call.c +294 -276
- data/src/core/lib/surface/call.h +24 -9
- data/src/core/lib/surface/call_log_batch.c +5 -3
- data/src/core/lib/surface/channel.c +127 -111
- data/src/core/lib/surface/channel.h +14 -5
- data/src/core/lib/surface/channel_init.c +1 -1
- data/src/core/lib/surface/channel_init.h +10 -1
- data/src/core/lib/surface/channel_ping.c +7 -6
- data/src/core/lib/surface/completion_queue.c +154 -18
- data/src/core/lib/surface/completion_queue.h +5 -0
- data/src/core/lib/surface/init.c +40 -6
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.c +5 -2
- data/src/core/lib/surface/lame_client.c +28 -18
- data/src/core/lib/surface/server.c +134 -87
- data/src/core/lib/surface/server.h +8 -0
- data/src/core/lib/surface/validate_metadata.c +1 -1
- data/src/core/lib/surface/version.c +3 -1
- data/src/core/lib/transport/byte_stream.c +7 -4
- data/src/core/lib/transport/byte_stream.h +6 -10
- data/src/core/lib/transport/connectivity_state.c +21 -12
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/mdstr_hash_table.c +118 -0
- data/src/core/lib/transport/mdstr_hash_table.h +77 -0
- data/src/core/lib/transport/metadata.c +83 -60
- data/src/core/lib/transport/metadata.h +41 -23
- data/src/core/lib/transport/metadata_batch.c +17 -11
- data/src/core/lib/transport/metadata_batch.h +20 -6
- data/src/core/lib/transport/pid_controller.c +57 -0
- data/src/core/lib/transport/pid_controller.h +64 -0
- data/src/core/lib/transport/service_config.c +251 -0
- data/src/core/lib/transport/service_config.h +71 -0
- data/src/core/lib/transport/static_metadata.c +18 -16
- data/src/core/lib/transport/static_metadata.h +113 -107
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
- data/src/core/lib/transport/transport.c +84 -23
- data/src/core/lib/transport/transport.h +53 -8
- data/src/core/lib/transport/transport_impl.h +3 -0
- data/src/core/lib/transport/transport_op_string.c +92 -20
- data/src/core/lib/tsi/ssl_transport_security.c +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
- data/src/ruby/ext/grpc/extconf.rb +0 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
- data/src/ruby/ext/grpc/rb_call.c +15 -5
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
- data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
- data/src/ruby/ext/grpc/rb_grpc.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
- data/src/ruby/ext/grpc/rb_server.c +18 -12
- data/src/ruby/lib/grpc/errors.rb +154 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
- data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
- data/src/ruby/lib/grpc/generic/service.rb +3 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
- data/src/ruby/pb/test/client.rb +307 -7
- data/src/ruby/pb/test/server.rb +26 -1
- data/src/ruby/spec/compression_options_spec.rb +164 -0
- data/src/ruby/spec/error_sanity_spec.rb +64 -0
- data/src/ruby/spec/generic/active_call_spec.rb +290 -12
- data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
- data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
- data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
- data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
- data/src/ruby/spec/spec_helper.rb +2 -0
- data/third_party/boringssl/crypto/aes/aes.c +12 -12
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
- data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
- data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
- data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
- data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
- data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl/crypto/base64/base64.c +249 -285
- data/third_party/boringssl/crypto/bio/bio.c +13 -23
- data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
- data/third_party/boringssl/crypto/bio/connect.c +12 -3
- data/third_party/boringssl/crypto/bio/fd.c +22 -15
- data/third_party/boringssl/crypto/bio/file.c +2 -38
- data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
- data/third_party/boringssl/crypto/bio/internal.h +3 -0
- data/third_party/boringssl/crypto/bio/pair.c +1 -1
- data/third_party/boringssl/crypto/bio/socket.c +10 -2
- data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
- data/third_party/boringssl/crypto/bn/bn.c +38 -0
- data/third_party/boringssl/crypto/bn/cmp.c +25 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -76
- data/third_party/boringssl/crypto/bn/div.c +136 -70
- data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
- data/third_party/boringssl/crypto/bn/gcd.c +213 -296
- data/third_party/boringssl/crypto/bn/generic.c +0 -80
- data/third_party/boringssl/crypto/bn/internal.h +15 -3
- data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +2 -1
- data/third_party/boringssl/crypto/bn/prime.c +24 -8
- data/third_party/boringssl/crypto/bn/random.c +47 -33
- data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
- data/third_party/boringssl/crypto/buf/buf.c +25 -21
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
- data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
- data/third_party/boringssl/crypto/cipher/aead.c +11 -22
- data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
- data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
- data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
- data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
- data/third_party/boringssl/crypto/cipher/internal.h +8 -10
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
- data/third_party/boringssl/crypto/conf/conf.c +2 -1
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
- data/third_party/boringssl/crypto/cpu-arm.c +0 -161
- data/third_party/boringssl/crypto/cpu-intel.c +5 -3
- data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
- data/third_party/boringssl/crypto/crypto.c +29 -7
- data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
- data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
- data/third_party/boringssl/crypto/dh/check.c +22 -6
- data/third_party/boringssl/crypto/dh/dh.c +45 -21
- data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
- data/third_party/boringssl/crypto/dh/params.c +30 -78
- data/third_party/boringssl/crypto/digest/digest.c +3 -3
- data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
- data/third_party/boringssl/crypto/ec/ec.c +84 -140
- data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
- data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
- data/third_party/boringssl/crypto/ec/internal.h +12 -36
- data/third_party/boringssl/crypto/ec/oct.c +11 -11
- data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
- data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
- data/third_party/boringssl/crypto/ec/simple.c +81 -201
- data/third_party/boringssl/crypto/ec/util-64.c +0 -74
- data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
- data/third_party/boringssl/crypto/engine/engine.c +1 -1
- data/third_party/boringssl/crypto/err/err.c +3 -3
- data/third_party/boringssl/crypto/evp/evp.c +14 -59
- data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
- data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
- data/third_party/boringssl/crypto/evp/internal.h +4 -46
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
- data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
- data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/ex_data.c +4 -6
- data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
- data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
- data/third_party/boringssl/crypto/internal.h +57 -77
- data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
- data/third_party/boringssl/crypto/md4/md4.c +9 -0
- data/third_party/boringssl/crypto/mem.c +19 -19
- data/third_party/boringssl/crypto/modes/cfb.c +5 -6
- data/third_party/boringssl/crypto/modes/ctr.c +10 -18
- data/third_party/boringssl/crypto/modes/gcm.c +100 -66
- data/third_party/boringssl/crypto/modes/internal.h +15 -27
- data/third_party/boringssl/crypto/modes/ofb.c +9 -22
- data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
- data/third_party/boringssl/crypto/newhope/internal.h +71 -0
- data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
- data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
- data/third_party/boringssl/crypto/newhope/poly.c +183 -0
- data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
- data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
- data/third_party/boringssl/crypto/obj/obj.c +111 -135
- data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
- data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
- data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
- data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/rand.c +4 -1
- data/third_party/boringssl/crypto/rand/urandom.c +5 -7
- data/third_party/boringssl/crypto/rand/windows.c +5 -8
- data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
- data/third_party/boringssl/crypto/rsa/internal.h +5 -13
- data/third_party/boringssl/crypto/rsa/padding.c +64 -63
- data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
- data/third_party/boringssl/crypto/sha/sha256.c +2 -2
- data/third_party/boringssl/crypto/sha/sha512.c +7 -7
- data/third_party/boringssl/crypto/stack/stack.c +13 -22
- data/third_party/boringssl/crypto/thread.c +21 -12
- data/third_party/boringssl/crypto/thread_none.c +6 -2
- data/third_party/boringssl/crypto/thread_pthread.c +16 -7
- data/third_party/boringssl/crypto/thread_win.c +38 -85
- data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
- data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
- data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
- data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
- data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
- data/third_party/boringssl/crypto/x509/x509.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
- data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
- data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
- data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
- data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
- data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl/crypto/x509/x_name.c +14 -17
- data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
- data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
- data/third_party/boringssl/include/openssl/aead.h +72 -73
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
- data/third_party/boringssl/include/openssl/asn1.h +103 -235
- data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
- data/third_party/boringssl/include/openssl/asn1t.h +1 -11
- data/third_party/boringssl/include/openssl/base.h +145 -3
- data/third_party/boringssl/include/openssl/base64.h +20 -17
- data/third_party/boringssl/include/openssl/bio.h +59 -34
- data/third_party/boringssl/include/openssl/bn.h +118 -51
- data/third_party/boringssl/include/openssl/buf.h +15 -0
- data/third_party/boringssl/include/openssl/bytestring.h +52 -4
- data/third_party/boringssl/include/openssl/chacha.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +18 -1
- data/third_party/boringssl/include/openssl/cmac.h +11 -0
- data/third_party/boringssl/include/openssl/conf.h +13 -2
- data/third_party/boringssl/include/openssl/cpu.h +20 -23
- data/third_party/boringssl/include/openssl/crypto.h +22 -1
- data/third_party/boringssl/include/openssl/curve25519.h +96 -4
- data/third_party/boringssl/include/openssl/dh.h +71 -16
- data/third_party/boringssl/include/openssl/digest.h +38 -11
- data/third_party/boringssl/include/openssl/dsa.h +40 -4
- data/third_party/boringssl/include/openssl/ec.h +44 -18
- data/third_party/boringssl/include/openssl/ec_key.h +27 -6
- data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
- data/third_party/boringssl/include/openssl/engine.h +11 -0
- data/third_party/boringssl/include/openssl/evp.h +52 -88
- data/third_party/boringssl/include/openssl/hkdf.h +24 -4
- data/third_party/boringssl/include/openssl/hmac.h +20 -6
- data/third_party/boringssl/include/openssl/md4.h +4 -0
- data/third_party/boringssl/include/openssl/mem.h +19 -0
- data/third_party/boringssl/include/openssl/newhope.h +158 -0
- data/third_party/boringssl/include/openssl/nid.h +4166 -0
- data/third_party/boringssl/include/openssl/obj.h +31 -3
- data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
- data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
- data/third_party/boringssl/include/openssl/pem.h +5 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
- data/third_party/boringssl/include/openssl/rand.h +6 -0
- data/third_party/boringssl/include/openssl/rc4.h +6 -0
- data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
- data/third_party/boringssl/include/openssl/rsa.h +127 -65
- data/third_party/boringssl/include/openssl/sha.h +14 -10
- data/third_party/boringssl/include/openssl/ssl.h +561 -275
- data/third_party/boringssl/include/openssl/ssl3.h +18 -25
- data/third_party/boringssl/include/openssl/stack.h +2 -4
- data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
- data/third_party/boringssl/include/openssl/thread.h +31 -13
- data/third_party/boringssl/include/openssl/time_support.h +1 -0
- data/third_party/boringssl/include/openssl/tls1.h +37 -33
- data/third_party/boringssl/include/openssl/x509.h +69 -26
- data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
- data/third_party/boringssl/include/openssl/x509v3.h +23 -2
- data/third_party/boringssl/ssl/custom_extensions.c +3 -5
- data/third_party/boringssl/ssl/d1_both.c +463 -499
- data/third_party/boringssl/ssl/d1_lib.c +38 -109
- data/third_party/boringssl/ssl/d1_pkt.c +173 -334
- data/third_party/boringssl/ssl/d1_srtp.c +20 -18
- data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
- data/third_party/boringssl/ssl/dtls_record.c +27 -26
- data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +712 -439
- data/third_party/boringssl/ssl/s3_both.c +445 -257
- data/third_party/boringssl/ssl/s3_enc.c +53 -36
- data/third_party/boringssl/ssl/s3_lib.c +23 -268
- data/third_party/boringssl/ssl/s3_pkt.c +168 -364
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
- data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
- data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
- data/third_party/boringssl/ssl/ssl_cert.c +324 -49
- data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
- data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
- data/third_party/boringssl/ssl/ssl_file.c +21 -68
- data/third_party/boringssl/ssl/ssl_lib.c +881 -510
- data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
- data/third_party/boringssl/ssl/ssl_session.c +324 -103
- data/third_party/boringssl/ssl/ssl_stat.c +6 -88
- data/third_party/boringssl/ssl/t1_enc.c +23 -39
- data/third_party/boringssl/ssl/t1_lib.c +1120 -622
- data/third_party/boringssl/ssl/tls13_both.c +440 -0
- data/third_party/boringssl/ssl/tls13_client.c +682 -0
- data/third_party/boringssl/ssl/tls13_enc.c +391 -0
- data/third_party/boringssl/ssl/tls13_server.c +672 -0
- data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
- data/third_party/boringssl/ssl/tls_record.c +159 -77
- data/third_party/nanopb/pb.h +60 -28
- data/third_party/nanopb/pb_decode.c +120 -92
- data/third_party/nanopb/pb_decode.h +3 -3
- data/third_party/nanopb/pb_encode.c +73 -67
- data/third_party/nanopb/pb_encode.h +4 -4
- metadata +155 -89
- data/include/grpc/impl/codegen/byte_buffer.h +0 -122
- data/include/grpc/impl/codegen/log.h +0 -118
- data/include/grpc/impl/codegen/time.h +0 -130
- data/src/core/ext/client_config/client_channel.c +0 -593
- data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
- data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
- data/src/core/lib/iomgr/workqueue_posix.c +0 -151
- data/src/core/lib/security/transport/handshake.c +0 -368
- data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
- data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
- data/third_party/boringssl/crypto/directory.h +0 -66
- data/third_party/boringssl/crypto/directory_posix.c +0 -108
- data/third_party/boringssl/crypto/directory_win.c +0 -144
- data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
- data/third_party/boringssl/include/openssl/pqueue.h +0 -146
- data/third_party/boringssl/ssl/d1_clnt.c +0 -561
- data/third_party/boringssl/ssl/d1_srvr.c +0 -476
- data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
- data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
- data/third_party/boringssl/ssl/test/async_bio.h +0 -45
- data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
- data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -97,8 +97,6 @@ static int aead_ssl3_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len,
|
|
97
97
|
size_t mac_key_len = EVP_MD_size(md);
|
98
98
|
size_t enc_key_len = EVP_CIPHER_key_length(cipher);
|
99
99
|
assert(mac_key_len + enc_key_len + EVP_CIPHER_iv_length(cipher) == key_len);
|
100
|
-
/* Although EVP_rc4() is a variable-length cipher, the default key size is
|
101
|
-
* correct for SSL3. */
|
102
100
|
|
103
101
|
AEAD_SSL3_CTX *ssl3_ctx = OPENSSL_malloc(sizeof(AEAD_SSL3_CTX));
|
104
102
|
if (ssl3_ctx == NULL) {
|
@@ -263,10 +261,10 @@ static int aead_ssl3_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
263
261
|
total += len;
|
264
262
|
assert(total == in_len);
|
265
263
|
|
266
|
-
/* Remove CBC padding and MAC. This would normally be timing-sensitive, but
|
267
|
-
* ciphers are already broken. Support will be removed eventually.
|
264
|
+
/* Remove CBC padding and MAC. This would normally be timing-sensitive, but
|
265
|
+
* SSLv3 CBC ciphers are already broken. Support will be removed eventually.
|
268
266
|
* https://www.openssl.org/~bodo/ssl-poodle.pdf */
|
269
|
-
|
267
|
+
size_t data_len;
|
270
268
|
if (EVP_CIPHER_CTX_mode(&ssl3_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE) {
|
271
269
|
unsigned padding_length = out[total - 1];
|
272
270
|
if (total < padding_length + 1 + mac_len) {
|
@@ -297,16 +295,6 @@ static int aead_ssl3_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
297
295
|
return 1;
|
298
296
|
}
|
299
297
|
|
300
|
-
static int aead_ssl3_get_rc4_state(const EVP_AEAD_CTX *ctx, const RC4_KEY **out_key) {
|
301
|
-
AEAD_SSL3_CTX *ssl3_ctx = (AEAD_SSL3_CTX *)ctx->aead_state;
|
302
|
-
if (EVP_CIPHER_CTX_cipher(&ssl3_ctx->cipher_ctx) != EVP_rc4()) {
|
303
|
-
return 0;
|
304
|
-
}
|
305
|
-
|
306
|
-
*out_key = (RC4_KEY*) ssl3_ctx->cipher_ctx.cipher_data;
|
307
|
-
return 1;
|
308
|
-
}
|
309
|
-
|
310
298
|
static int aead_ssl3_get_iv(const EVP_AEAD_CTX *ctx, const uint8_t **out_iv,
|
311
299
|
size_t *out_iv_len) {
|
312
300
|
AEAD_SSL3_CTX *ssl3_ctx = (AEAD_SSL3_CTX *)ctx->aead_state;
|
@@ -320,18 +308,6 @@ static int aead_ssl3_get_iv(const EVP_AEAD_CTX *ctx, const uint8_t **out_iv,
|
|
320
308
|
return 1;
|
321
309
|
}
|
322
310
|
|
323
|
-
static int aead_rc4_md5_ssl3_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
324
|
-
size_t key_len, size_t tag_len,
|
325
|
-
enum evp_aead_direction_t dir) {
|
326
|
-
return aead_ssl3_init(ctx, key, key_len, tag_len, dir, EVP_rc4(), EVP_md5());
|
327
|
-
}
|
328
|
-
|
329
|
-
static int aead_rc4_sha1_ssl3_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
330
|
-
size_t key_len, size_t tag_len,
|
331
|
-
enum evp_aead_direction_t dir) {
|
332
|
-
return aead_ssl3_init(ctx, key, key_len, tag_len, dir, EVP_rc4(), EVP_sha1());
|
333
|
-
}
|
334
|
-
|
335
311
|
static int aead_aes_128_cbc_sha1_ssl3_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
336
312
|
size_t key_len, size_t tag_len,
|
337
313
|
enum evp_aead_direction_t dir) {
|
@@ -360,34 +336,6 @@ static int aead_null_sha1_ssl3_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
|
360
336
|
EVP_sha1());
|
361
337
|
}
|
362
338
|
|
363
|
-
static const EVP_AEAD aead_rc4_md5_ssl3 = {
|
364
|
-
MD5_DIGEST_LENGTH + 16, /* key len (MD5 + RC4) */
|
365
|
-
0, /* nonce len */
|
366
|
-
MD5_DIGEST_LENGTH, /* overhead */
|
367
|
-
MD5_DIGEST_LENGTH, /* max tag length */
|
368
|
-
NULL, /* init */
|
369
|
-
aead_rc4_md5_ssl3_init,
|
370
|
-
aead_ssl3_cleanup,
|
371
|
-
aead_ssl3_seal,
|
372
|
-
aead_ssl3_open,
|
373
|
-
aead_ssl3_get_rc4_state,
|
374
|
-
NULL, /* get_iv */
|
375
|
-
};
|
376
|
-
|
377
|
-
static const EVP_AEAD aead_rc4_sha1_ssl3 = {
|
378
|
-
SHA_DIGEST_LENGTH + 16, /* key len (SHA1 + RC4) */
|
379
|
-
0, /* nonce len */
|
380
|
-
SHA_DIGEST_LENGTH, /* overhead */
|
381
|
-
SHA_DIGEST_LENGTH, /* max tag length */
|
382
|
-
NULL, /* init */
|
383
|
-
aead_rc4_sha1_ssl3_init,
|
384
|
-
aead_ssl3_cleanup,
|
385
|
-
aead_ssl3_seal,
|
386
|
-
aead_ssl3_open,
|
387
|
-
aead_ssl3_get_rc4_state,
|
388
|
-
NULL, /* get_iv */
|
389
|
-
};
|
390
|
-
|
391
339
|
static const EVP_AEAD aead_aes_128_cbc_sha1_ssl3 = {
|
392
340
|
SHA_DIGEST_LENGTH + 16 + 16, /* key len (SHA1 + AES128 + IV) */
|
393
341
|
0, /* nonce len */
|
@@ -398,7 +346,6 @@ static const EVP_AEAD aead_aes_128_cbc_sha1_ssl3 = {
|
|
398
346
|
aead_ssl3_cleanup,
|
399
347
|
aead_ssl3_seal,
|
400
348
|
aead_ssl3_open,
|
401
|
-
NULL, /* get_rc4_state */
|
402
349
|
aead_ssl3_get_iv,
|
403
350
|
};
|
404
351
|
|
@@ -412,7 +359,6 @@ static const EVP_AEAD aead_aes_256_cbc_sha1_ssl3 = {
|
|
412
359
|
aead_ssl3_cleanup,
|
413
360
|
aead_ssl3_seal,
|
414
361
|
aead_ssl3_open,
|
415
|
-
NULL, /* get_rc4_state */
|
416
362
|
aead_ssl3_get_iv,
|
417
363
|
};
|
418
364
|
|
@@ -426,7 +372,6 @@ static const EVP_AEAD aead_des_ede3_cbc_sha1_ssl3 = {
|
|
426
372
|
aead_ssl3_cleanup,
|
427
373
|
aead_ssl3_seal,
|
428
374
|
aead_ssl3_open,
|
429
|
-
NULL, /* get_rc4_state */
|
430
375
|
aead_ssl3_get_iv,
|
431
376
|
};
|
432
377
|
|
@@ -440,14 +385,9 @@ static const EVP_AEAD aead_null_sha1_ssl3 = {
|
|
440
385
|
aead_ssl3_cleanup,
|
441
386
|
aead_ssl3_seal,
|
442
387
|
aead_ssl3_open,
|
443
|
-
NULL, /* get_rc4_state */
|
444
388
|
NULL, /* get_iv */
|
445
389
|
};
|
446
390
|
|
447
|
-
const EVP_AEAD *EVP_aead_rc4_md5_ssl3(void) { return &aead_rc4_md5_ssl3; }
|
448
|
-
|
449
|
-
const EVP_AEAD *EVP_aead_rc4_sha1_ssl3(void) { return &aead_rc4_sha1_ssl3; }
|
450
|
-
|
451
391
|
const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_ssl3(void) {
|
452
392
|
return &aead_aes_128_cbc_sha1_ssl3;
|
453
393
|
}
|
@@ -25,7 +25,7 @@
|
|
25
25
|
#include <openssl/sha.h>
|
26
26
|
#include <openssl/type_check.h>
|
27
27
|
|
28
|
-
#include "../
|
28
|
+
#include "../internal.h"
|
29
29
|
#include "internal.h"
|
30
30
|
|
31
31
|
|
@@ -71,8 +71,6 @@ static int aead_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len,
|
|
71
71
|
size_t enc_key_len = EVP_CIPHER_key_length(cipher);
|
72
72
|
assert(mac_key_len + enc_key_len +
|
73
73
|
(implicit_iv ? EVP_CIPHER_iv_length(cipher) : 0) == key_len);
|
74
|
-
/* Although EVP_rc4() is a variable-length cipher, the default key size is
|
75
|
-
* correct for TLS. */
|
76
74
|
|
77
75
|
AEAD_TLS_CTX *tls_ctx = OPENSSL_malloc(sizeof(AEAD_TLS_CTX));
|
78
76
|
if (tls_ctx == NULL) {
|
@@ -264,20 +262,18 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
264
262
|
|
265
263
|
/* Remove CBC padding. Code from here on is timing-sensitive with respect to
|
266
264
|
* |padding_ok| and |data_plus_mac_len| for CBC ciphers. */
|
267
|
-
|
268
|
-
unsigned data_plus_mac_len, data_len;
|
265
|
+
unsigned padding_ok, data_plus_mac_len, data_len;
|
269
266
|
if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE) {
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
if (padding_ok == 0) {
|
267
|
+
if (!EVP_tls_cbc_remove_padding(
|
268
|
+
&padding_ok, &data_plus_mac_len, out, total,
|
269
|
+
EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx),
|
270
|
+
(unsigned)HMAC_size(&tls_ctx->hmac_ctx))) {
|
271
|
+
/* Publicly invalid. This can be rejected in non-constant time. */
|
276
272
|
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
|
277
273
|
return 0;
|
278
274
|
}
|
279
275
|
} else {
|
280
|
-
padding_ok =
|
276
|
+
padding_ok = ~0u;
|
281
277
|
data_plus_mac_len = total;
|
282
278
|
/* |data_plus_mac_len| = |total| = |in_len| at this point. |in_len| has
|
283
279
|
* already been checked against the MAC size at the top of the function. */
|
@@ -285,9 +281,9 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
285
281
|
}
|
286
282
|
data_len = data_plus_mac_len - HMAC_size(&tls_ctx->hmac_ctx);
|
287
283
|
|
288
|
-
/* At this point,
|
289
|
-
*
|
290
|
-
*
|
284
|
+
/* At this point, if the padding is valid, the first |data_plus_mac_len| bytes
|
285
|
+
* after |out| are the plaintext and MAC. Otherwise, |data_plus_mac_len| is
|
286
|
+
* still large enough to extract a MAC, but it will be irrelevant. */
|
291
287
|
|
292
288
|
/* To allow for CBC mode which changes cipher length, |ad| doesn't include the
|
293
289
|
* length for legacy ciphers. */
|
@@ -338,7 +334,7 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
338
334
|
* EVP_tls_cbc_remove_padding. */
|
339
335
|
unsigned good = constant_time_eq_int(CRYPTO_memcmp(record_mac, mac, mac_len),
|
340
336
|
0);
|
341
|
-
good &=
|
337
|
+
good &= padding_ok;
|
342
338
|
if (!good) {
|
343
339
|
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
|
344
340
|
return 0;
|
@@ -350,20 +346,6 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
350
346
|
return 1;
|
351
347
|
}
|
352
348
|
|
353
|
-
static int aead_rc4_md5_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
354
|
-
size_t key_len, size_t tag_len,
|
355
|
-
enum evp_aead_direction_t dir) {
|
356
|
-
return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_rc4(), EVP_md5(),
|
357
|
-
0);
|
358
|
-
}
|
359
|
-
|
360
|
-
static int aead_rc4_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
361
|
-
size_t key_len, size_t tag_len,
|
362
|
-
enum evp_aead_direction_t dir) {
|
363
|
-
return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_rc4(), EVP_sha1(),
|
364
|
-
0);
|
365
|
-
}
|
366
|
-
|
367
349
|
static int aead_aes_128_cbc_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
368
350
|
size_t key_len, size_t tag_len,
|
369
351
|
enum evp_aead_direction_t dir) {
|
@@ -431,17 +413,6 @@ static int aead_des_ede3_cbc_sha1_tls_implicit_iv_init(
|
|
431
413
|
EVP_sha1(), 1);
|
432
414
|
}
|
433
415
|
|
434
|
-
static int aead_rc4_tls_get_rc4_state(const EVP_AEAD_CTX *ctx,
|
435
|
-
const RC4_KEY **out_key) {
|
436
|
-
const AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX*) ctx->aead_state;
|
437
|
-
if (EVP_CIPHER_CTX_cipher(&tls_ctx->cipher_ctx) != EVP_rc4()) {
|
438
|
-
return 0;
|
439
|
-
}
|
440
|
-
|
441
|
-
*out_key = (const RC4_KEY*) tls_ctx->cipher_ctx.cipher_data;
|
442
|
-
return 1;
|
443
|
-
}
|
444
|
-
|
445
416
|
static int aead_tls_get_iv(const EVP_AEAD_CTX *ctx, const uint8_t **out_iv,
|
446
417
|
size_t *out_iv_len) {
|
447
418
|
const AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX*) ctx->aead_state;
|
@@ -462,34 +433,6 @@ static int aead_null_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
|
462
433
|
EVP_sha1(), 1 /* implicit iv */);
|
463
434
|
}
|
464
435
|
|
465
|
-
static const EVP_AEAD aead_rc4_md5_tls = {
|
466
|
-
MD5_DIGEST_LENGTH + 16, /* key len (MD5 + RC4) */
|
467
|
-
0, /* nonce len */
|
468
|
-
MD5_DIGEST_LENGTH, /* overhead */
|
469
|
-
MD5_DIGEST_LENGTH, /* max tag length */
|
470
|
-
NULL, /* init */
|
471
|
-
aead_rc4_md5_tls_init,
|
472
|
-
aead_tls_cleanup,
|
473
|
-
aead_tls_seal,
|
474
|
-
aead_tls_open,
|
475
|
-
aead_rc4_tls_get_rc4_state, /* get_rc4_state */
|
476
|
-
NULL, /* get_iv */
|
477
|
-
};
|
478
|
-
|
479
|
-
static const EVP_AEAD aead_rc4_sha1_tls = {
|
480
|
-
SHA_DIGEST_LENGTH + 16, /* key len (SHA1 + RC4) */
|
481
|
-
0, /* nonce len */
|
482
|
-
SHA_DIGEST_LENGTH, /* overhead */
|
483
|
-
SHA_DIGEST_LENGTH, /* max tag length */
|
484
|
-
NULL, /* init */
|
485
|
-
aead_rc4_sha1_tls_init,
|
486
|
-
aead_tls_cleanup,
|
487
|
-
aead_tls_seal,
|
488
|
-
aead_tls_open,
|
489
|
-
aead_rc4_tls_get_rc4_state, /* get_rc4_state */
|
490
|
-
NULL, /* get_iv */
|
491
|
-
};
|
492
|
-
|
493
436
|
static const EVP_AEAD aead_aes_128_cbc_sha1_tls = {
|
494
437
|
SHA_DIGEST_LENGTH + 16, /* key len (SHA1 + AES128) */
|
495
438
|
16, /* nonce len (IV) */
|
@@ -500,7 +443,6 @@ static const EVP_AEAD aead_aes_128_cbc_sha1_tls = {
|
|
500
443
|
aead_tls_cleanup,
|
501
444
|
aead_tls_seal,
|
502
445
|
aead_tls_open,
|
503
|
-
NULL, /* get_rc4_state */
|
504
446
|
NULL, /* get_iv */
|
505
447
|
};
|
506
448
|
|
@@ -514,7 +456,6 @@ static const EVP_AEAD aead_aes_128_cbc_sha1_tls_implicit_iv = {
|
|
514
456
|
aead_tls_cleanup,
|
515
457
|
aead_tls_seal,
|
516
458
|
aead_tls_open,
|
517
|
-
NULL, /* get_rc4_state */
|
518
459
|
aead_tls_get_iv, /* get_iv */
|
519
460
|
};
|
520
461
|
|
@@ -528,7 +469,6 @@ static const EVP_AEAD aead_aes_128_cbc_sha256_tls = {
|
|
528
469
|
aead_tls_cleanup,
|
529
470
|
aead_tls_seal,
|
530
471
|
aead_tls_open,
|
531
|
-
NULL, /* get_rc4_state */
|
532
472
|
NULL, /* get_iv */
|
533
473
|
};
|
534
474
|
|
@@ -542,7 +482,6 @@ static const EVP_AEAD aead_aes_256_cbc_sha1_tls = {
|
|
542
482
|
aead_tls_cleanup,
|
543
483
|
aead_tls_seal,
|
544
484
|
aead_tls_open,
|
545
|
-
NULL, /* get_rc4_state */
|
546
485
|
NULL, /* get_iv */
|
547
486
|
};
|
548
487
|
|
@@ -556,7 +495,6 @@ static const EVP_AEAD aead_aes_256_cbc_sha1_tls_implicit_iv = {
|
|
556
495
|
aead_tls_cleanup,
|
557
496
|
aead_tls_seal,
|
558
497
|
aead_tls_open,
|
559
|
-
NULL, /* get_rc4_state */
|
560
498
|
aead_tls_get_iv, /* get_iv */
|
561
499
|
};
|
562
500
|
|
@@ -570,7 +508,6 @@ static const EVP_AEAD aead_aes_256_cbc_sha256_tls = {
|
|
570
508
|
aead_tls_cleanup,
|
571
509
|
aead_tls_seal,
|
572
510
|
aead_tls_open,
|
573
|
-
NULL, /* get_rc4_state */
|
574
511
|
NULL, /* get_iv */
|
575
512
|
};
|
576
513
|
|
@@ -584,7 +521,6 @@ static const EVP_AEAD aead_aes_256_cbc_sha384_tls = {
|
|
584
521
|
aead_tls_cleanup,
|
585
522
|
aead_tls_seal,
|
586
523
|
aead_tls_open,
|
587
|
-
NULL, /* get_rc4_state */
|
588
524
|
NULL, /* get_iv */
|
589
525
|
};
|
590
526
|
|
@@ -598,7 +534,6 @@ static const EVP_AEAD aead_des_ede3_cbc_sha1_tls = {
|
|
598
534
|
aead_tls_cleanup,
|
599
535
|
aead_tls_seal,
|
600
536
|
aead_tls_open,
|
601
|
-
NULL, /* get_rc4_state */
|
602
537
|
NULL, /* get_iv */
|
603
538
|
};
|
604
539
|
|
@@ -612,7 +547,6 @@ static const EVP_AEAD aead_des_ede3_cbc_sha1_tls_implicit_iv = {
|
|
612
547
|
aead_tls_cleanup,
|
613
548
|
aead_tls_seal,
|
614
549
|
aead_tls_open,
|
615
|
-
NULL, /* get_rc4_state */
|
616
550
|
aead_tls_get_iv, /* get_iv */
|
617
551
|
};
|
618
552
|
|
@@ -626,14 +560,9 @@ static const EVP_AEAD aead_null_sha1_tls = {
|
|
626
560
|
aead_tls_cleanup,
|
627
561
|
aead_tls_seal,
|
628
562
|
aead_tls_open,
|
629
|
-
NULL, /* get_rc4_state */
|
630
563
|
NULL, /* get_iv */
|
631
564
|
};
|
632
565
|
|
633
|
-
const EVP_AEAD *EVP_aead_rc4_md5_tls(void) { return &aead_rc4_md5_tls; }
|
634
|
-
|
635
|
-
const EVP_AEAD *EVP_aead_rc4_sha1_tls(void) { return &aead_rc4_sha1_tls; }
|
636
|
-
|
637
566
|
const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls(void) {
|
638
567
|
return &aead_aes_128_cbc_sha1_tls;
|
639
568
|
}
|
@@ -95,8 +95,6 @@ struct evp_aead_st {
|
|
95
95
|
const uint8_t *in, size_t in_len, const uint8_t *ad,
|
96
96
|
size_t ad_len);
|
97
97
|
|
98
|
-
int (*get_rc4_state)(const EVP_AEAD_CTX *ctx, const RC4_KEY **out_key);
|
99
|
-
|
100
98
|
int (*get_iv)(const EVP_AEAD_CTX *ctx, const uint8_t **out_iv,
|
101
99
|
size_t *out_len);
|
102
100
|
};
|
@@ -104,15 +102,15 @@ struct evp_aead_st {
|
|
104
102
|
|
105
103
|
/* EVP_tls_cbc_get_padding determines the padding from the decrypted, TLS, CBC
|
106
104
|
* record in |in|. This decrypted record should not include any "decrypted"
|
107
|
-
* explicit IV.
|
108
|
-
* |
|
105
|
+
* explicit IV. If the record is publicly invalid, it returns zero. Otherwise,
|
106
|
+
* it returns one and sets |*out_padding_ok| to all ones (0xfff..f) if the
|
107
|
+
* padding is valid and zero otherwise. It then sets |*out_len| to the length
|
108
|
+
* with the padding removed or |in_len| if invalid.
|
109
109
|
*
|
110
|
-
*
|
111
|
-
*
|
112
|
-
*
|
113
|
-
*
|
114
|
-
* -1: otherwise. */
|
115
|
-
int EVP_tls_cbc_remove_padding(unsigned *out_len,
|
110
|
+
* If the function returns one, it runs in time independent of the contents of
|
111
|
+
* |in|. It is also guaranteed that |*out_len| >= |mac_size|, satisfying
|
112
|
+
* |EVP_tls_cbc_copy_mac|'s precondition. */
|
113
|
+
int EVP_tls_cbc_remove_padding(unsigned *out_padding_ok, unsigned *out_len,
|
116
114
|
const uint8_t *in, unsigned in_len,
|
117
115
|
unsigned block_size, unsigned mac_size);
|
118
116
|
|
@@ -54,10 +54,11 @@
|
|
54
54
|
#include <string.h>
|
55
55
|
|
56
56
|
#include <openssl/digest.h>
|
57
|
-
#include <openssl/
|
57
|
+
#include <openssl/nid.h>
|
58
58
|
#include <openssl/sha.h>
|
59
59
|
|
60
60
|
#include "../internal.h"
|
61
|
+
#include "internal.h"
|
61
62
|
|
62
63
|
|
63
64
|
/* TODO(davidben): unsigned should be size_t. The various constant_time
|
@@ -72,7 +73,7 @@
|
|
72
73
|
* supported by TLS.) */
|
73
74
|
#define MAX_HASH_BLOCK_SIZE 128
|
74
75
|
|
75
|
-
int EVP_tls_cbc_remove_padding(unsigned *out_len,
|
76
|
+
int EVP_tls_cbc_remove_padding(unsigned *out_padding_ok, unsigned *out_len,
|
76
77
|
const uint8_t *in, unsigned in_len,
|
77
78
|
unsigned block_size, unsigned mac_size) {
|
78
79
|
unsigned padding_length, good, to_check, i;
|
@@ -118,26 +119,16 @@ int EVP_tls_cbc_remove_padding(unsigned *out_len,
|
|
118
119
|
* bad padding would give POODLE's padding oracle. */
|
119
120
|
padding_length = good & (padding_length + 1);
|
120
121
|
*out_len = in_len - padding_length;
|
121
|
-
|
122
|
-
return
|
122
|
+
*out_padding_ok = good;
|
123
|
+
return 1;
|
123
124
|
}
|
124
125
|
|
125
|
-
/* If CBC_MAC_ROTATE_IN_PLACE is defined then EVP_tls_cbc_copy_mac is performed
|
126
|
-
* with variable accesses in a 64-byte-aligned buffer. Assuming that this fits
|
127
|
-
* into a single or pair of cache-lines, then the variable memory accesses don't
|
128
|
-
* actually affect the timing. CPUs with smaller cache-lines [if any] are not
|
129
|
-
* multi-core and are not considered vulnerable to cache-timing attacks. */
|
130
|
-
#define CBC_MAC_ROTATE_IN_PLACE
|
131
|
-
|
132
126
|
void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
|
133
127
|
const uint8_t *in, unsigned in_len,
|
134
128
|
unsigned orig_len) {
|
135
|
-
|
136
|
-
uint8_t
|
137
|
-
uint8_t *
|
138
|
-
#else
|
139
|
-
uint8_t rotated_mac[EVP_MAX_MD_SIZE];
|
140
|
-
#endif
|
129
|
+
uint8_t rotated_mac1[EVP_MAX_MD_SIZE], rotated_mac2[EVP_MAX_MD_SIZE];
|
130
|
+
uint8_t *rotated_mac = rotated_mac1;
|
131
|
+
uint8_t *rotated_mac_tmp = rotated_mac2;
|
141
132
|
|
142
133
|
/* mac_end is the index of |in| just after the end of the MAC. */
|
143
134
|
unsigned mac_end = in_len;
|
@@ -152,10 +143,6 @@ void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
|
|
152
143
|
assert(in_len >= md_size);
|
153
144
|
assert(md_size <= EVP_MAX_MD_SIZE);
|
154
145
|
|
155
|
-
#if defined(CBC_MAC_ROTATE_IN_PLACE)
|
156
|
-
rotated_mac = rotated_mac_buf + ((0 - (size_t)rotated_mac_buf) & 63);
|
157
|
-
#endif
|
158
|
-
|
159
146
|
/* This information is public so it's safe to branch based on it. */
|
160
147
|
if (orig_len > md_size + 255 + 1) {
|
161
148
|
scan_start = orig_len - (md_size + 255 + 1);
|
@@ -176,6 +163,45 @@ void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
|
|
176
163
|
* + md_size = 256 + 48 (since SHA-384 is the largest hash) = 304. */
|
177
164
|
assert(rotate_offset <= 304);
|
178
165
|
|
166
|
+
/* Below is an SMT-LIB2 verification that the Barrett reductions below are
|
167
|
+
* correct within this range:
|
168
|
+
*
|
169
|
+
* (define-fun barrett (
|
170
|
+
* (x (_ BitVec 32))
|
171
|
+
* (mul (_ BitVec 32))
|
172
|
+
* (shift (_ BitVec 32))
|
173
|
+
* (divisor (_ BitVec 32)) ) (_ BitVec 32)
|
174
|
+
* (let ((q (bvsub x (bvmul divisor (bvlshr (bvmul x mul) shift))) ))
|
175
|
+
* (ite (bvuge q divisor)
|
176
|
+
* (bvsub q divisor)
|
177
|
+
* q)))
|
178
|
+
*
|
179
|
+
* (declare-fun x () (_ BitVec 32))
|
180
|
+
*
|
181
|
+
* (assert (or
|
182
|
+
* (let (
|
183
|
+
* (divisor (_ bv20 32))
|
184
|
+
* (mul (_ bv25 32))
|
185
|
+
* (shift (_ bv9 32))
|
186
|
+
* (limit (_ bv853 32)))
|
187
|
+
*
|
188
|
+
* (and (bvule x limit) (not (= (bvurem x divisor)
|
189
|
+
* (barrett x mul shift divisor)))))
|
190
|
+
*
|
191
|
+
* (let (
|
192
|
+
* (divisor (_ bv48 32))
|
193
|
+
* (mul (_ bv10 32))
|
194
|
+
* (shift (_ bv9 32))
|
195
|
+
* (limit (_ bv768 32)))
|
196
|
+
*
|
197
|
+
* (and (bvule x limit) (not (= (bvurem x divisor)
|
198
|
+
* (barrett x mul shift divisor)))))
|
199
|
+
* ))
|
200
|
+
*
|
201
|
+
* (check-sat)
|
202
|
+
* (get-model)
|
203
|
+
*/
|
204
|
+
|
179
205
|
if (md_size == 16) {
|
180
206
|
rotate_offset &= 15;
|
181
207
|
} else if (md_size == 20) {
|
@@ -210,27 +236,30 @@ void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
|
|
210
236
|
j &= constant_time_lt(j, md_size);
|
211
237
|
}
|
212
238
|
|
213
|
-
/* Now rotate the MAC
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
/*
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
for (i = 0; i < md_size; i++) {
|
227
|
-
for (j = 0; j < md_size; j++) {
|
228
|
-
out[j] |= rotated_mac[i] & constant_time_eq_8(j, rotate_offset);
|
239
|
+
/* Now rotate the MAC. We rotate in log(md_size) steps, one for each bit
|
240
|
+
* position. */
|
241
|
+
for (unsigned offset = 1; offset < md_size;
|
242
|
+
offset <<= 1, rotate_offset >>= 1) {
|
243
|
+
/* Rotate by |offset| iff the corresponding bit is set in
|
244
|
+
* |rotate_offset|, placing the result in |rotated_mac_tmp|. */
|
245
|
+
const uint8_t skip_rotate = (rotate_offset & 1) - 1;
|
246
|
+
for (i = 0, j = offset; i < md_size; i++, j++) {
|
247
|
+
if (j >= md_size) {
|
248
|
+
j -= md_size;
|
249
|
+
}
|
250
|
+
rotated_mac_tmp[i] =
|
251
|
+
constant_time_select_8(skip_rotate, rotated_mac[i], rotated_mac[j]);
|
229
252
|
}
|
230
|
-
|
231
|
-
|
253
|
+
|
254
|
+
/* Swap pointers so |rotated_mac| contains the (possibly) rotated value.
|
255
|
+
* Note the number of iterations and thus the identity of these pointers is
|
256
|
+
* public information. */
|
257
|
+
uint8_t *tmp = rotated_mac;
|
258
|
+
rotated_mac = rotated_mac_tmp;
|
259
|
+
rotated_mac_tmp = tmp;
|
232
260
|
}
|
233
|
-
|
261
|
+
|
262
|
+
memcpy(out, rotated_mac, md_size);
|
234
263
|
}
|
235
264
|
|
236
265
|
/* u32toBE serialises an unsigned, 32-bit number (n) as four bytes at (p) in
|