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
@@ -21,80 +21,6 @@
|
|
21
21
|
|
22
22
|
#include "internal.h"
|
23
23
|
|
24
|
-
/* Convert an array of points into affine coordinates. (If the point at
|
25
|
-
* infinity is found (Z = 0), it remains unchanged.) This function is
|
26
|
-
* essentially an equivalent to EC_POINTs_make_affine(), but works with the
|
27
|
-
* internal representation of points as used by ecp_nistp###.c rather than
|
28
|
-
* with (BIGNUM-based) EC_POINT data structures. point_array is the
|
29
|
-
* input/output buffer ('num' points in projective form, i.e. three
|
30
|
-
* coordinates each), based on an internal representation of field elements
|
31
|
-
* of size 'felem_size'. tmp_felems needs to point to a temporary array of
|
32
|
-
* 'num'+1 field elements for storage of intermediate values. */
|
33
|
-
void ec_GFp_nistp_points_make_affine_internal(
|
34
|
-
size_t num, void *point_array, size_t felem_size, void *tmp_felems,
|
35
|
-
void (*felem_one)(void *out), int (*felem_is_zero)(const void *in),
|
36
|
-
void (*felem_assign)(void *out, const void *in),
|
37
|
-
void (*felem_square)(void *out, const void *in),
|
38
|
-
void (*felem_mul)(void *out, const void *in1, const void *in2),
|
39
|
-
void (*felem_inv)(void *out, const void *in),
|
40
|
-
void (*felem_contract)(void *out, const void *in)) {
|
41
|
-
int i = 0;
|
42
|
-
|
43
|
-
#define tmp_felem(I) (&((char *)tmp_felems)[(I)*felem_size])
|
44
|
-
#define X(I) (&((char *)point_array)[3 * (I)*felem_size])
|
45
|
-
#define Y(I) (&((char *)point_array)[(3 * (I) + 1) * felem_size])
|
46
|
-
#define Z(I) (&((char *)point_array)[(3 * (I) + 2) * felem_size])
|
47
|
-
|
48
|
-
if (!felem_is_zero(Z(0))) {
|
49
|
-
felem_assign(tmp_felem(0), Z(0));
|
50
|
-
} else {
|
51
|
-
felem_one(tmp_felem(0));
|
52
|
-
}
|
53
|
-
|
54
|
-
for (i = 1; i < (int)num; i++) {
|
55
|
-
if (!felem_is_zero(Z(i))) {
|
56
|
-
felem_mul(tmp_felem(i), tmp_felem(i - 1), Z(i));
|
57
|
-
} else {
|
58
|
-
felem_assign(tmp_felem(i), tmp_felem(i - 1));
|
59
|
-
}
|
60
|
-
}
|
61
|
-
/* Now each tmp_felem(i) is the product of Z(0) .. Z(i), skipping any
|
62
|
-
* zero-valued factors: if Z(i) = 0, we essentially pretend that Z(i) = 1. */
|
63
|
-
|
64
|
-
felem_inv(tmp_felem(num - 1), tmp_felem(num - 1));
|
65
|
-
for (i = num - 1; i >= 0; i--) {
|
66
|
-
if (i > 0) {
|
67
|
-
/* tmp_felem(i-1) is the product of Z(0) .. Z(i-1), tmp_felem(i)
|
68
|
-
* is the inverse of the product of Z(0) .. Z(i). */
|
69
|
-
/* 1/Z(i) */
|
70
|
-
felem_mul(tmp_felem(num), tmp_felem(i - 1), tmp_felem(i));
|
71
|
-
} else {
|
72
|
-
felem_assign(tmp_felem(num), tmp_felem(0)); /* 1/Z(0) */
|
73
|
-
}
|
74
|
-
|
75
|
-
if (!felem_is_zero(Z(i))) {
|
76
|
-
if (i > 0) {
|
77
|
-
/* For next iteration, replace tmp_felem(i-1) by its inverse. */
|
78
|
-
felem_mul(tmp_felem(i - 1), tmp_felem(i), Z(i));
|
79
|
-
}
|
80
|
-
|
81
|
-
/* Convert point (X, Y, Z) into affine form (X/(Z^2), Y/(Z^3), 1). */
|
82
|
-
felem_square(Z(i), tmp_felem(num)); /* 1/(Z^2) */
|
83
|
-
felem_mul(X(i), X(i), Z(i)); /* X/(Z^2) */
|
84
|
-
felem_mul(Z(i), Z(i), tmp_felem(num)); /* 1/(Z^3) */
|
85
|
-
felem_mul(Y(i), Y(i), Z(i)); /* Y/(Z^3) */
|
86
|
-
felem_contract(X(i), X(i));
|
87
|
-
felem_contract(Y(i), Y(i));
|
88
|
-
felem_one(Z(i));
|
89
|
-
} else {
|
90
|
-
if (i > 0) {
|
91
|
-
/* For next iteration, replace tmp_felem(i-1) by its inverse. */
|
92
|
-
felem_assign(tmp_felem(i - 1), tmp_felem(i));
|
93
|
-
}
|
94
|
-
}
|
95
|
-
}
|
96
|
-
}
|
97
|
-
|
98
24
|
/* This function looks at 5+1 scalar bits (5 current, 1 adjacent less
|
99
25
|
* significant bit), and recodes them into a signed digit for use in fast point
|
100
26
|
* multiplication: the use of signed rather than unsigned digits means that
|
@@ -66,6 +66,7 @@
|
|
66
66
|
|
67
67
|
#include <openssl/ecdh.h>
|
68
68
|
|
69
|
+
#include <limits.h>
|
69
70
|
#include <string.h>
|
70
71
|
|
71
72
|
#include <openssl/bn.h>
|
@@ -142,7 +143,12 @@ int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
|
|
142
143
|
memcpy(out, buf, outlen);
|
143
144
|
}
|
144
145
|
|
145
|
-
|
146
|
+
if (outlen > INT_MAX) {
|
147
|
+
OPENSSL_PUT_ERROR(ECDH, ERR_R_OVERFLOW);
|
148
|
+
goto err;
|
149
|
+
}
|
150
|
+
|
151
|
+
ret = (int)outlen;
|
146
152
|
|
147
153
|
err:
|
148
154
|
OPENSSL_free(buf);
|
@@ -79,10 +79,6 @@ int ECDSA_verify(int type, const uint8_t *digest, size_t digest_len,
|
|
79
79
|
int ret = 0;
|
80
80
|
uint8_t *der = NULL;
|
81
81
|
|
82
|
-
if (eckey->ecdsa_meth && eckey->ecdsa_meth->verify) {
|
83
|
-
return eckey->ecdsa_meth->verify(digest, digest_len, sig, sig_len, eckey);
|
84
|
-
}
|
85
|
-
|
86
82
|
/* Decode the ECDSA signature. */
|
87
83
|
s = ECDSA_SIG_from_bytes(sig, sig_len);
|
88
84
|
if (s == NULL) {
|
@@ -148,11 +144,6 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len,
|
|
148
144
|
const EC_GROUP *group;
|
149
145
|
const EC_POINT *pub_key;
|
150
146
|
|
151
|
-
if (eckey->ecdsa_meth && eckey->ecdsa_meth->verify) {
|
152
|
-
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_NOT_IMPLEMENTED);
|
153
|
-
return 0;
|
154
|
-
}
|
155
|
-
|
156
147
|
/* check input values */
|
157
148
|
if ((group = EC_KEY_get0_group(eckey)) == NULL ||
|
158
149
|
(pub_key = EC_KEY_get0_public_key(eckey)) == NULL ||
|
@@ -185,7 +176,8 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len,
|
|
185
176
|
goto err;
|
186
177
|
}
|
187
178
|
/* calculate tmp1 = inv(S) mod order */
|
188
|
-
|
179
|
+
int no_inverse;
|
180
|
+
if (!BN_mod_inverse_odd(u2, &no_inverse, sig->s, order, ctx)) {
|
189
181
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
|
190
182
|
goto err;
|
191
183
|
}
|
@@ -234,7 +226,7 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
|
|
234
226
|
BIGNUM **rp, const uint8_t *digest,
|
235
227
|
size_t digest_len) {
|
236
228
|
BN_CTX *ctx = NULL;
|
237
|
-
BIGNUM *k = NULL, *r = NULL, *
|
229
|
+
BIGNUM *k = NULL, *r = NULL, *tmp = NULL;
|
238
230
|
EC_POINT *tmp_point = NULL;
|
239
231
|
const EC_GROUP *group;
|
240
232
|
int ret = 0;
|
@@ -255,8 +247,8 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
|
|
255
247
|
|
256
248
|
k = BN_new(); /* this value is later returned in *kinvp */
|
257
249
|
r = BN_new(); /* this value is later returned in *rp */
|
258
|
-
|
259
|
-
if (k == NULL || r == NULL ||
|
250
|
+
tmp = BN_new();
|
251
|
+
if (k == NULL || r == NULL || tmp == NULL) {
|
260
252
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
|
261
253
|
goto err;
|
262
254
|
}
|
@@ -272,20 +264,18 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
|
|
272
264
|
/* If possible, we'll include the private key and message digest in the k
|
273
265
|
* generation. The |digest| argument is only empty if |ECDSA_sign_setup| is
|
274
266
|
* being used. */
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
}
|
288
|
-
} while (BN_is_zero(k));
|
267
|
+
if (digest_len > 0) {
|
268
|
+
do {
|
269
|
+
if (!BN_generate_dsa_nonce(k, order, EC_KEY_get0_private_key(eckey),
|
270
|
+
digest, digest_len, ctx)) {
|
271
|
+
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED);
|
272
|
+
goto err;
|
273
|
+
}
|
274
|
+
} while (BN_is_zero(k));
|
275
|
+
} else if (!BN_rand_range_ex(k, 1, order)) {
|
276
|
+
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED);
|
277
|
+
goto err;
|
278
|
+
}
|
289
279
|
|
290
280
|
/* We do not want timing information to leak the length of k,
|
291
281
|
* so we compute G*k using an equivalent scalar of fixed
|
@@ -305,33 +295,25 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
|
|
305
295
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
|
306
296
|
goto err;
|
307
297
|
}
|
308
|
-
if (!EC_POINT_get_affine_coordinates_GFp(group, tmp_point,
|
298
|
+
if (!EC_POINT_get_affine_coordinates_GFp(group, tmp_point, tmp, NULL,
|
299
|
+
ctx)) {
|
309
300
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
|
310
301
|
goto err;
|
311
302
|
}
|
312
303
|
|
313
|
-
if (!BN_nnmod(r,
|
304
|
+
if (!BN_nnmod(r, tmp, order, ctx)) {
|
314
305
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
|
315
306
|
goto err;
|
316
307
|
}
|
317
308
|
} while (BN_is_zero(r));
|
318
309
|
|
319
|
-
/*
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
goto err;
|
327
|
-
}
|
328
|
-
BN_set_flags(X, BN_FLG_CONSTTIME);
|
329
|
-
if (!BN_mod_exp_mont_consttime(k, k, X, order, ctx,
|
330
|
-
ec_group_get_mont_data(group))) {
|
331
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
|
332
|
-
goto err;
|
333
|
-
}
|
334
|
-
} else if (!BN_mod_inverse(k, k, order, ctx)) {
|
310
|
+
/* Compute the inverse of k. The order is a prime, so use Fermat's Little
|
311
|
+
* Theorem. */
|
312
|
+
if (!BN_set_word(tmp, 2) ||
|
313
|
+
!BN_sub(tmp, order, tmp) ||
|
314
|
+
/* Note |ec_group_get_mont_data| may return NULL but |BN_mod_exp_mont|
|
315
|
+
* allows it to be. */
|
316
|
+
!BN_mod_exp_mont(k, k, tmp, order, ctx, ec_group_get_mont_data(group))) {
|
335
317
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
|
336
318
|
goto err;
|
337
319
|
}
|
@@ -353,7 +335,7 @@ err:
|
|
353
335
|
BN_CTX_free(ctx);
|
354
336
|
}
|
355
337
|
EC_POINT_free(tmp_point);
|
356
|
-
BN_clear_free(
|
338
|
+
BN_clear_free(tmp);
|
357
339
|
return ret;
|
358
340
|
}
|
359
341
|
|
@@ -114,9 +114,9 @@
|
|
114
114
|
#include <string.h>
|
115
115
|
|
116
116
|
#if defined(OPENSSL_WINDOWS)
|
117
|
-
|
117
|
+
OPENSSL_MSVC_PRAGMA(warning(push, 3))
|
118
118
|
#include <windows.h>
|
119
|
-
|
119
|
+
OPENSSL_MSVC_PRAGMA(warning(pop))
|
120
120
|
#endif
|
121
121
|
|
122
122
|
#include <openssl/mem.h>
|
@@ -325,7 +325,7 @@ int ERR_get_next_error_library(void) {
|
|
325
325
|
|
326
326
|
CRYPTO_STATIC_MUTEX_lock_write(&global_next_library_mutex);
|
327
327
|
ret = global_next_library++;
|
328
|
-
|
328
|
+
CRYPTO_STATIC_MUTEX_unlock_write(&global_next_library_mutex);
|
329
329
|
|
330
330
|
return ret;
|
331
331
|
}
|
@@ -59,12 +59,11 @@
|
|
59
59
|
#include <assert.h>
|
60
60
|
#include <string.h>
|
61
61
|
|
62
|
-
#include <openssl/bio.h>
|
63
62
|
#include <openssl/dsa.h>
|
64
63
|
#include <openssl/ec.h>
|
65
64
|
#include <openssl/err.h>
|
66
65
|
#include <openssl/mem.h>
|
67
|
-
#include <openssl/
|
66
|
+
#include <openssl/nid.h>
|
68
67
|
#include <openssl/rsa.h>
|
69
68
|
#include <openssl/thread.h>
|
70
69
|
|
@@ -109,9 +108,9 @@ void EVP_PKEY_free(EVP_PKEY *pkey) {
|
|
109
108
|
OPENSSL_free(pkey);
|
110
109
|
}
|
111
110
|
|
112
|
-
|
111
|
+
int EVP_PKEY_up_ref(EVP_PKEY *pkey) {
|
113
112
|
CRYPTO_refcount_inc(&pkey->references);
|
114
|
-
return
|
113
|
+
return 1;
|
115
114
|
}
|
116
115
|
|
117
116
|
int EVP_PKEY_is_opaque(const EVP_PKEY *pkey) {
|
@@ -195,8 +194,10 @@ int EVP_PKEY_id(const EVP_PKEY *pkey) {
|
|
195
194
|
return pkey->type;
|
196
195
|
}
|
197
196
|
|
198
|
-
/*
|
199
|
-
|
197
|
+
/* evp_pkey_asn1_find returns the ASN.1 method table for the given |nid|, which
|
198
|
+
* should be one of the |EVP_PKEY_*| values. It returns NULL if |nid| is
|
199
|
+
* unknown. */
|
200
|
+
static const EVP_PKEY_ASN1_METHOD *evp_pkey_asn1_find(int nid) {
|
200
201
|
switch (nid) {
|
201
202
|
case EVP_PKEY_RSA:
|
202
203
|
return &rsa_asn1_meth;
|
@@ -210,7 +211,7 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pengine, int nid) {
|
|
210
211
|
}
|
211
212
|
|
212
213
|
int EVP_PKEY_type(int nid) {
|
213
|
-
const EVP_PKEY_ASN1_METHOD *meth =
|
214
|
+
const EVP_PKEY_ASN1_METHOD *meth = evp_pkey_asn1_find(nid);
|
214
215
|
if (meth == NULL) {
|
215
216
|
return NID_undef;
|
216
217
|
}
|
@@ -301,6 +302,8 @@ EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey) {
|
|
301
302
|
return ec_key;
|
302
303
|
}
|
303
304
|
|
305
|
+
DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey) { return NULL; }
|
306
|
+
|
304
307
|
int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) {
|
305
308
|
if (!EVP_PKEY_set_type(pkey, type)) {
|
306
309
|
return 0;
|
@@ -309,21 +312,6 @@ int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) {
|
|
309
312
|
return key != NULL;
|
310
313
|
}
|
311
314
|
|
312
|
-
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pengine,
|
313
|
-
const char *name,
|
314
|
-
size_t len) {
|
315
|
-
if (len == 3 && memcmp(name, "RSA", 3) == 0) {
|
316
|
-
return &rsa_asn1_meth;
|
317
|
-
}
|
318
|
-
if (len == 2 && memcmp(name, "EC", 2) == 0) {
|
319
|
-
return &ec_asn1_meth;
|
320
|
-
}
|
321
|
-
if (len == 3 && memcmp(name, "DSA", 3) == 0) {
|
322
|
-
return &dsa_asn1_meth;
|
323
|
-
}
|
324
|
-
return NULL;
|
325
|
-
}
|
326
|
-
|
327
315
|
int EVP_PKEY_set_type(EVP_PKEY *pkey, int type) {
|
328
316
|
const EVP_PKEY_ASN1_METHOD *ameth;
|
329
317
|
|
@@ -331,10 +319,10 @@ int EVP_PKEY_set_type(EVP_PKEY *pkey, int type) {
|
|
331
319
|
free_it(pkey);
|
332
320
|
}
|
333
321
|
|
334
|
-
ameth =
|
322
|
+
ameth = evp_pkey_asn1_find(type);
|
335
323
|
if (ameth == NULL) {
|
336
324
|
OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM);
|
337
|
-
ERR_add_error_dataf("algorithm %d
|
325
|
+
ERR_add_error_dataf("algorithm %d", type);
|
338
326
|
return 0;
|
339
327
|
}
|
340
328
|
|
@@ -358,41 +346,6 @@ int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) {
|
|
358
346
|
return -2;
|
359
347
|
}
|
360
348
|
|
361
|
-
static int print_unsupported(BIO *out, const EVP_PKEY *pkey, int indent,
|
362
|
-
const char *kstr) {
|
363
|
-
BIO_indent(out, indent, 128);
|
364
|
-
BIO_printf(out, "%s algorithm \"%s\" unsupported\n", kstr,
|
365
|
-
OBJ_nid2ln(pkey->type));
|
366
|
-
return 1;
|
367
|
-
}
|
368
|
-
|
369
|
-
int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, int indent,
|
370
|
-
ASN1_PCTX *pctx) {
|
371
|
-
if (pkey->ameth && pkey->ameth->pub_print) {
|
372
|
-
return pkey->ameth->pub_print(out, pkey, indent, pctx);
|
373
|
-
}
|
374
|
-
|
375
|
-
return print_unsupported(out, pkey, indent, "Public Key");
|
376
|
-
}
|
377
|
-
|
378
|
-
int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, int indent,
|
379
|
-
ASN1_PCTX *pctx) {
|
380
|
-
if (pkey->ameth && pkey->ameth->priv_print) {
|
381
|
-
return pkey->ameth->priv_print(out, pkey, indent, pctx);
|
382
|
-
}
|
383
|
-
|
384
|
-
return print_unsupported(out, pkey, indent, "Private Key");
|
385
|
-
}
|
386
|
-
|
387
|
-
int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, int indent,
|
388
|
-
ASN1_PCTX *pctx) {
|
389
|
-
if (pkey->ameth && pkey->ameth->param_print) {
|
390
|
-
return pkey->ameth->param_print(out, pkey, indent, pctx);
|
391
|
-
}
|
392
|
-
|
393
|
-
return print_unsupported(out, pkey, indent, "Parameters");
|
394
|
-
}
|
395
|
-
|
396
349
|
int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md) {
|
397
350
|
return EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, EVP_PKEY_CTRL_MD, 0,
|
398
351
|
(void *)md);
|
@@ -405,6 +358,8 @@ int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **out_md) {
|
|
405
358
|
|
406
359
|
void OpenSSL_add_all_algorithms(void) {}
|
407
360
|
|
361
|
+
void OPENSSL_add_all_algorithms_conf(void) {}
|
362
|
+
|
408
363
|
void OpenSSL_add_all_ciphers(void) {}
|
409
364
|
|
410
365
|
void OpenSSL_add_all_digests(void) {}
|
@@ -56,22 +56,51 @@
|
|
56
56
|
|
57
57
|
#include <openssl/evp.h>
|
58
58
|
|
59
|
-
#include <
|
59
|
+
#include <string.h>
|
60
|
+
|
60
61
|
#include <openssl/bytestring.h>
|
62
|
+
#include <openssl/dsa.h>
|
63
|
+
#include <openssl/ec_key.h>
|
61
64
|
#include <openssl/err.h>
|
62
|
-
#include <openssl/
|
63
|
-
#include <openssl/x509.h>
|
65
|
+
#include <openssl/rsa.h>
|
64
66
|
|
65
67
|
#include "internal.h"
|
68
|
+
#include "../internal.h"
|
69
|
+
|
70
|
+
|
71
|
+
static const EVP_PKEY_ASN1_METHOD *const kASN1Methods[] = {
|
72
|
+
&rsa_asn1_meth,
|
73
|
+
&ec_asn1_meth,
|
74
|
+
&dsa_asn1_meth,
|
75
|
+
};
|
76
|
+
|
77
|
+
static int parse_key_type(CBS *cbs, int *out_type) {
|
78
|
+
CBS oid;
|
79
|
+
if (!CBS_get_asn1(cbs, &oid, CBS_ASN1_OBJECT)) {
|
80
|
+
return 0;
|
81
|
+
}
|
82
|
+
|
83
|
+
unsigned i;
|
84
|
+
for (i = 0; i < OPENSSL_ARRAY_SIZE(kASN1Methods); i++) {
|
85
|
+
const EVP_PKEY_ASN1_METHOD *method = kASN1Methods[i];
|
86
|
+
if (CBS_len(&oid) == method->oid_len &&
|
87
|
+
memcmp(CBS_data(&oid), method->oid, method->oid_len) == 0) {
|
88
|
+
*out_type = method->pkey_id;
|
89
|
+
return 1;
|
90
|
+
}
|
91
|
+
}
|
66
92
|
|
93
|
+
return 0;
|
94
|
+
}
|
67
95
|
|
68
96
|
EVP_PKEY *EVP_parse_public_key(CBS *cbs) {
|
69
97
|
/* Parse the SubjectPublicKeyInfo. */
|
70
|
-
CBS spki, algorithm,
|
98
|
+
CBS spki, algorithm, key;
|
99
|
+
int type;
|
71
100
|
uint8_t padding;
|
72
101
|
if (!CBS_get_asn1(cbs, &spki, CBS_ASN1_SEQUENCE) ||
|
73
102
|
!CBS_get_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
|
74
|
-
!
|
103
|
+
!parse_key_type(&algorithm, &type) ||
|
75
104
|
!CBS_get_asn1(&spki, &key, CBS_ASN1_BITSTRING) ||
|
76
105
|
CBS_len(&spki) != 0 ||
|
77
106
|
/* Every key type defined encodes the key as a byte string with the same
|
@@ -85,7 +114,7 @@ EVP_PKEY *EVP_parse_public_key(CBS *cbs) {
|
|
85
114
|
/* Set up an |EVP_PKEY| of the appropriate type. */
|
86
115
|
EVP_PKEY *ret = EVP_PKEY_new();
|
87
116
|
if (ret == NULL ||
|
88
|
-
!EVP_PKEY_set_type(ret,
|
117
|
+
!EVP_PKEY_set_type(ret, type)) {
|
89
118
|
goto err;
|
90
119
|
}
|
91
120
|
|
@@ -106,7 +135,7 @@ err:
|
|
106
135
|
}
|
107
136
|
|
108
137
|
int EVP_marshal_public_key(CBB *cbb, const EVP_PKEY *key) {
|
109
|
-
if (key->ameth->pub_encode == NULL) {
|
138
|
+
if (key->ameth == NULL || key->ameth->pub_encode == NULL) {
|
110
139
|
OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM);
|
111
140
|
return 0;
|
112
141
|
}
|
@@ -116,13 +145,14 @@ int EVP_marshal_public_key(CBB *cbb, const EVP_PKEY *key) {
|
|
116
145
|
|
117
146
|
EVP_PKEY *EVP_parse_private_key(CBS *cbs) {
|
118
147
|
/* Parse the PrivateKeyInfo. */
|
119
|
-
CBS pkcs8, algorithm,
|
148
|
+
CBS pkcs8, algorithm, key;
|
120
149
|
uint64_t version;
|
150
|
+
int type;
|
121
151
|
if (!CBS_get_asn1(cbs, &pkcs8, CBS_ASN1_SEQUENCE) ||
|
122
152
|
!CBS_get_asn1_uint64(&pkcs8, &version) ||
|
123
153
|
version != 0 ||
|
124
154
|
!CBS_get_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) ||
|
125
|
-
!
|
155
|
+
!parse_key_type(&algorithm, &type) ||
|
126
156
|
!CBS_get_asn1(&pkcs8, &key, CBS_ASN1_OCTETSTRING)) {
|
127
157
|
OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
|
128
158
|
return NULL;
|
@@ -133,7 +163,7 @@ EVP_PKEY *EVP_parse_private_key(CBS *cbs) {
|
|
133
163
|
/* Set up an |EVP_PKEY| of the appropriate type. */
|
134
164
|
EVP_PKEY *ret = EVP_PKEY_new();
|
135
165
|
if (ret == NULL ||
|
136
|
-
!EVP_PKEY_set_type(ret,
|
166
|
+
!EVP_PKEY_set_type(ret, type)) {
|
137
167
|
goto err;
|
138
168
|
}
|
139
169
|
|
@@ -154,7 +184,7 @@ err:
|
|
154
184
|
}
|
155
185
|
|
156
186
|
int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key) {
|
157
|
-
if (key->ameth->priv_encode == NULL) {
|
187
|
+
if (key->ameth == NULL || key->ameth->priv_encode == NULL) {
|
158
188
|
OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM);
|
159
189
|
return 0;
|
160
190
|
}
|
@@ -162,107 +192,134 @@ int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key) {
|
|
162
192
|
return key->ameth->priv_encode(cbb, key);
|
163
193
|
}
|
164
194
|
|
165
|
-
EVP_PKEY *
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
if (out == NULL || *out == NULL) {
|
170
|
-
ret = EVP_PKEY_new();
|
171
|
-
if (ret == NULL) {
|
172
|
-
OPENSSL_PUT_ERROR(EVP, ERR_R_EVP_LIB);
|
173
|
-
return NULL;
|
174
|
-
}
|
175
|
-
} else {
|
176
|
-
ret = *out;
|
177
|
-
}
|
178
|
-
|
179
|
-
if (!EVP_PKEY_set_type(ret, type)) {
|
180
|
-
OPENSSL_PUT_ERROR(EVP, EVP_R_UNKNOWN_PUBLIC_KEY_TYPE);
|
181
|
-
goto err;
|
195
|
+
static EVP_PKEY *old_priv_decode(CBS *cbs, int type) {
|
196
|
+
EVP_PKEY *ret = EVP_PKEY_new();
|
197
|
+
if (ret == NULL) {
|
198
|
+
return NULL;
|
182
199
|
}
|
183
200
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
!ret->ameth->old_priv_decode(ret, &in, len)) {
|
190
|
-
if (ret->ameth->priv_decode) {
|
191
|
-
/* Reset |in| in case |old_priv_decode| advanced it on error. */
|
192
|
-
in = *inp;
|
193
|
-
PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &in, len);
|
194
|
-
if (!p8) {
|
201
|
+
switch (type) {
|
202
|
+
case EVP_PKEY_EC: {
|
203
|
+
EC_KEY *ec_key = EC_KEY_parse_private_key(cbs, NULL);
|
204
|
+
if (ec_key == NULL || !EVP_PKEY_assign_EC_KEY(ret, ec_key)) {
|
205
|
+
EC_KEY_free(ec_key);
|
195
206
|
goto err;
|
196
207
|
}
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
208
|
+
return ret;
|
209
|
+
}
|
210
|
+
case EVP_PKEY_DSA: {
|
211
|
+
DSA *dsa = DSA_parse_private_key(cbs);
|
212
|
+
if (dsa == NULL || !EVP_PKEY_assign_DSA(ret, dsa)) {
|
213
|
+
DSA_free(dsa);
|
201
214
|
goto err;
|
202
215
|
}
|
203
|
-
|
204
|
-
|
216
|
+
return ret;
|
217
|
+
}
|
218
|
+
case EVP_PKEY_RSA: {
|
219
|
+
RSA *rsa = RSA_parse_private_key(cbs);
|
220
|
+
if (rsa == NULL || !EVP_PKEY_assign_RSA(ret, rsa)) {
|
221
|
+
RSA_free(rsa);
|
222
|
+
goto err;
|
223
|
+
}
|
224
|
+
return ret;
|
225
|
+
}
|
226
|
+
default:
|
227
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_UNKNOWN_PUBLIC_KEY_TYPE);
|
205
228
|
goto err;
|
229
|
+
}
|
230
|
+
|
231
|
+
err:
|
232
|
+
EVP_PKEY_free(ret);
|
233
|
+
return NULL;
|
234
|
+
}
|
235
|
+
|
236
|
+
EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out, const uint8_t **inp,
|
237
|
+
long len) {
|
238
|
+
if (len < 0) {
|
239
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
|
240
|
+
return NULL;
|
241
|
+
}
|
242
|
+
|
243
|
+
/* Parse with the legacy format. */
|
244
|
+
CBS cbs;
|
245
|
+
CBS_init(&cbs, *inp, (size_t)len);
|
246
|
+
EVP_PKEY *ret = old_priv_decode(&cbs, type);
|
247
|
+
if (ret == NULL) {
|
248
|
+
/* Try again with PKCS#8. */
|
249
|
+
ERR_clear_error();
|
250
|
+
CBS_init(&cbs, *inp, (size_t)len);
|
251
|
+
ret = EVP_parse_private_key(&cbs);
|
252
|
+
if (ret == NULL) {
|
253
|
+
return NULL;
|
254
|
+
}
|
255
|
+
if (ret->type != type) {
|
256
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_DIFFERENT_KEY_TYPES);
|
257
|
+
EVP_PKEY_free(ret);
|
258
|
+
return NULL;
|
206
259
|
}
|
207
260
|
}
|
208
261
|
|
209
262
|
if (out != NULL) {
|
263
|
+
EVP_PKEY_free(*out);
|
210
264
|
*out = ret;
|
211
265
|
}
|
212
|
-
*inp =
|
266
|
+
*inp = CBS_data(&cbs);
|
213
267
|
return ret;
|
268
|
+
}
|
214
269
|
|
215
|
-
|
216
|
-
|
217
|
-
|
270
|
+
/* num_elements parses one SEQUENCE from |in| and returns the number of elements
|
271
|
+
* in it. On parse error, it returns zero. */
|
272
|
+
static size_t num_elements(const uint8_t *in, size_t in_len) {
|
273
|
+
CBS cbs, sequence;
|
274
|
+
CBS_init(&cbs, in, (size_t)in_len);
|
275
|
+
|
276
|
+
if (!CBS_get_asn1(&cbs, &sequence, CBS_ASN1_SEQUENCE)) {
|
277
|
+
return 0;
|
218
278
|
}
|
219
|
-
|
279
|
+
|
280
|
+
size_t count = 0;
|
281
|
+
while (CBS_len(&sequence) > 0) {
|
282
|
+
if (!CBS_get_any_asn1_element(&sequence, NULL, NULL, NULL)) {
|
283
|
+
return 0;
|
284
|
+
}
|
285
|
+
|
286
|
+
count++;
|
287
|
+
}
|
288
|
+
|
289
|
+
return count;
|
220
290
|
}
|
221
291
|
|
222
292
|
EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp, long len) {
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
/* Dirty trick: read in the ASN1 data into out STACK_OF(ASN1_TYPE):
|
229
|
-
* by analyzing it we can determine the passed structure: this
|
230
|
-
* assumes the input is surrounded by an ASN1 SEQUENCE. */
|
231
|
-
inkey = d2i_ASN1_SEQUENCE_ANY(NULL, &p, len);
|
232
|
-
/* Since we only need to discern "traditional format" RSA and DSA
|
233
|
-
* keys we can just count the elements. */
|
234
|
-
if (sk_ASN1_TYPE_num(inkey) == 6) {
|
235
|
-
keytype = EVP_PKEY_DSA;
|
236
|
-
} else if (sk_ASN1_TYPE_num(inkey) == 4) {
|
237
|
-
keytype = EVP_PKEY_EC;
|
238
|
-
} else if (sk_ASN1_TYPE_num(inkey) == 3) {
|
239
|
-
/* This seems to be PKCS8, not traditional format */
|
240
|
-
p = *inp;
|
241
|
-
PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len);
|
242
|
-
EVP_PKEY *ret;
|
243
|
-
|
244
|
-
sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free);
|
245
|
-
if (!p8) {
|
246
|
-
OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
|
247
|
-
return NULL;
|
248
|
-
}
|
249
|
-
ret = EVP_PKCS82PKEY(p8);
|
250
|
-
PKCS8_PRIV_KEY_INFO_free(p8);
|
251
|
-
if (ret == NULL) {
|
252
|
-
return NULL;
|
253
|
-
}
|
293
|
+
if (len < 0) {
|
294
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
|
295
|
+
return NULL;
|
296
|
+
}
|
254
297
|
|
255
|
-
|
256
|
-
|
298
|
+
/* Parse the input as a PKCS#8 PrivateKeyInfo. */
|
299
|
+
CBS cbs;
|
300
|
+
CBS_init(&cbs, *inp, (size_t)len);
|
301
|
+
EVP_PKEY *ret = EVP_parse_private_key(&cbs);
|
302
|
+
if (ret != NULL) {
|
303
|
+
if (out != NULL) {
|
304
|
+
EVP_PKEY_free(*out);
|
257
305
|
*out = ret;
|
258
306
|
}
|
307
|
+
*inp = CBS_data(&cbs);
|
259
308
|
return ret;
|
260
|
-
} else {
|
261
|
-
keytype = EVP_PKEY_RSA;
|
262
309
|
}
|
310
|
+
ERR_clear_error();
|
263
311
|
|
264
|
-
|
265
|
-
|
312
|
+
/* Count the elements to determine the legacy key format. */
|
313
|
+
switch (num_elements(*inp, (size_t)len)) {
|
314
|
+
case 4:
|
315
|
+
return d2i_PrivateKey(EVP_PKEY_EC, out, inp, len);
|
316
|
+
|
317
|
+
case 6:
|
318
|
+
return d2i_PrivateKey(EVP_PKEY_DSA, out, inp, len);
|
319
|
+
|
320
|
+
default:
|
321
|
+
return d2i_PrivateKey(EVP_PKEY_RSA, out, inp, len);
|
322
|
+
}
|
266
323
|
}
|
267
324
|
|
268
325
|
int i2d_PublicKey(EVP_PKEY *key, uint8_t **outp) {
|