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
@@ -27,7 +27,6 @@
|
|
27
27
|
#include <openssl/ec.h>
|
28
28
|
#include <openssl/err.h>
|
29
29
|
#include <openssl/mem.h>
|
30
|
-
#include <openssl/obj.h>
|
31
30
|
|
32
31
|
#include <string.h>
|
33
32
|
|
@@ -94,9 +93,8 @@ static void smallfelem_to_bin32(u8 out[32], const smallfelem in) {
|
|
94
93
|
}
|
95
94
|
|
96
95
|
/* To preserve endianness when using BN_bn2bin and BN_bin2bn. */
|
97
|
-
static void flip_endian(u8 *out, const u8 *in,
|
98
|
-
|
99
|
-
for (i = 0; i < len; ++i) {
|
96
|
+
static void flip_endian(u8 *out, const u8 *in, size_t len) {
|
97
|
+
for (size_t i = 0; i < len; ++i) {
|
100
98
|
out[i] = in[len - 1 - i];
|
101
99
|
}
|
102
100
|
}
|
@@ -111,7 +109,7 @@ static int BN_to_felem(felem out, const BIGNUM *bn) {
|
|
111
109
|
felem_bytearray b_out;
|
112
110
|
/* BN_bn2bin eats leading zeroes */
|
113
111
|
memset(b_out, 0, sizeof(b_out));
|
114
|
-
|
112
|
+
size_t num_bytes = BN_num_bytes(bn);
|
115
113
|
if (num_bytes > sizeof(b_out)) {
|
116
114
|
OPENSSL_PUT_ERROR(EC, EC_R_BIGNUM_OUT_OF_RANGE);
|
117
115
|
return 0;
|
@@ -134,20 +132,6 @@ static BIGNUM *smallfelem_to_BN(BIGNUM *out, const smallfelem in) {
|
|
134
132
|
|
135
133
|
/* Field operations. */
|
136
134
|
|
137
|
-
static void smallfelem_one(smallfelem out) {
|
138
|
-
out[0] = 1;
|
139
|
-
out[1] = 0;
|
140
|
-
out[2] = 0;
|
141
|
-
out[3] = 0;
|
142
|
-
}
|
143
|
-
|
144
|
-
static void smallfelem_assign(smallfelem out, const smallfelem in) {
|
145
|
-
out[0] = in[0];
|
146
|
-
out[1] = in[1];
|
147
|
-
out[2] = in[2];
|
148
|
-
out[3] = in[3];
|
149
|
-
}
|
150
|
-
|
151
135
|
static void felem_assign(felem out, const felem in) {
|
152
136
|
out[0] = in[0];
|
153
137
|
out[1] = in[1];
|
@@ -343,8 +327,7 @@ static void felem_shrink(smallfelem out, const felem in) {
|
|
343
327
|
* conditionally subtract kPrime if tmp[3] is large enough. */
|
344
328
|
high = tmp[3] >> 64;
|
345
329
|
/* As tmp[3] < 2^65, high is either 1 or 0 */
|
346
|
-
high
|
347
|
-
high >>= 63;
|
330
|
+
high = ~(high - 1);
|
348
331
|
/* high is:
|
349
332
|
* all ones if the high word of tmp[3] is 1
|
350
333
|
* all zeros if the high word of tmp[3] if 0 */
|
@@ -735,8 +718,7 @@ static void felem_contract(smallfelem out, const felem in) {
|
|
735
718
|
* each u64, from most-significant to least significant. For each one, if
|
736
719
|
* all words so far have been equal (m is all ones) then a non-equal
|
737
720
|
* result is the answer. Otherwise we continue. */
|
738
|
-
|
739
|
-
for (i = 3; i < 4; i--) {
|
721
|
+
for (size_t i = 3; i < 4; i--) {
|
740
722
|
u64 equal;
|
741
723
|
uint128_t a = ((uint128_t)kPrime[i]) - out[i];
|
742
724
|
/* if out[i] > kPrime[i] then a will underflow and the high 64-bits
|
@@ -779,25 +761,6 @@ static void felem_contract(smallfelem out, const felem in) {
|
|
779
761
|
subtract_u64(&out[3], &carry, result & kPrime[3]);
|
780
762
|
}
|
781
763
|
|
782
|
-
static void smallfelem_square_contract(smallfelem out, const smallfelem in) {
|
783
|
-
longfelem longtmp;
|
784
|
-
felem tmp;
|
785
|
-
|
786
|
-
smallfelem_square(longtmp, in);
|
787
|
-
felem_reduce(tmp, longtmp);
|
788
|
-
felem_contract(out, tmp);
|
789
|
-
}
|
790
|
-
|
791
|
-
static void smallfelem_mul_contract(smallfelem out, const smallfelem in1,
|
792
|
-
const smallfelem in2) {
|
793
|
-
longfelem longtmp;
|
794
|
-
felem tmp;
|
795
|
-
|
796
|
-
smallfelem_mul(longtmp, in1, in2);
|
797
|
-
felem_reduce(tmp, longtmp);
|
798
|
-
felem_contract(out, tmp);
|
799
|
-
}
|
800
|
-
|
801
764
|
/* felem_is_zero returns a limb with all bits set if |in| == 0 (mod p) and 0
|
802
765
|
* otherwise.
|
803
766
|
* On entry:
|
@@ -834,10 +797,6 @@ static limb smallfelem_is_zero(const smallfelem small) {
|
|
834
797
|
return result;
|
835
798
|
}
|
836
799
|
|
837
|
-
static int smallfelem_is_zero_int(const smallfelem small) {
|
838
|
-
return (int)(smallfelem_is_zero(small) & ((limb)1));
|
839
|
-
}
|
840
|
-
|
841
800
|
/* felem_inv calculates |out| = |in|^{-1}
|
842
801
|
*
|
843
802
|
* Based on Fermat's Little Theorem:
|
@@ -849,7 +808,6 @@ static void felem_inv(felem out, const felem in) {
|
|
849
808
|
/* each e_I will hold |in|^{2^I - 1} */
|
850
809
|
felem e2, e4, e8, e16, e32, e64;
|
851
810
|
longfelem tmp;
|
852
|
-
unsigned i;
|
853
811
|
|
854
812
|
felem_square(tmp, in);
|
855
813
|
felem_reduce(ftmp, tmp); /* 2^1 */
|
@@ -874,47 +832,47 @@ static void felem_inv(felem out, const felem in) {
|
|
874
832
|
felem_mul(tmp, ftmp, e4);
|
875
833
|
felem_reduce(ftmp, tmp); /* 2^8 - 2^0 */
|
876
834
|
felem_assign(e8, ftmp);
|
877
|
-
for (i = 0; i < 8; i++) {
|
835
|
+
for (size_t i = 0; i < 8; i++) {
|
878
836
|
felem_square(tmp, ftmp);
|
879
837
|
felem_reduce(ftmp, tmp);
|
880
838
|
} /* 2^16 - 2^8 */
|
881
839
|
felem_mul(tmp, ftmp, e8);
|
882
840
|
felem_reduce(ftmp, tmp); /* 2^16 - 2^0 */
|
883
841
|
felem_assign(e16, ftmp);
|
884
|
-
for (i = 0; i < 16; i++) {
|
842
|
+
for (size_t i = 0; i < 16; i++) {
|
885
843
|
felem_square(tmp, ftmp);
|
886
844
|
felem_reduce(ftmp, tmp);
|
887
845
|
} /* 2^32 - 2^16 */
|
888
846
|
felem_mul(tmp, ftmp, e16);
|
889
847
|
felem_reduce(ftmp, tmp); /* 2^32 - 2^0 */
|
890
848
|
felem_assign(e32, ftmp);
|
891
|
-
for (i = 0; i < 32; i++) {
|
849
|
+
for (size_t i = 0; i < 32; i++) {
|
892
850
|
felem_square(tmp, ftmp);
|
893
851
|
felem_reduce(ftmp, tmp);
|
894
852
|
} /* 2^64 - 2^32 */
|
895
853
|
felem_assign(e64, ftmp);
|
896
854
|
felem_mul(tmp, ftmp, in);
|
897
855
|
felem_reduce(ftmp, tmp); /* 2^64 - 2^32 + 2^0 */
|
898
|
-
for (i = 0; i < 192; i++) {
|
856
|
+
for (size_t i = 0; i < 192; i++) {
|
899
857
|
felem_square(tmp, ftmp);
|
900
858
|
felem_reduce(ftmp, tmp);
|
901
859
|
} /* 2^256 - 2^224 + 2^192 */
|
902
860
|
|
903
861
|
felem_mul(tmp, e64, e32);
|
904
862
|
felem_reduce(ftmp2, tmp); /* 2^64 - 2^0 */
|
905
|
-
for (i = 0; i < 16; i++) {
|
863
|
+
for (size_t i = 0; i < 16; i++) {
|
906
864
|
felem_square(tmp, ftmp2);
|
907
865
|
felem_reduce(ftmp2, tmp);
|
908
866
|
} /* 2^80 - 2^16 */
|
909
867
|
felem_mul(tmp, ftmp2, e16);
|
910
868
|
felem_reduce(ftmp2, tmp); /* 2^80 - 2^0 */
|
911
|
-
for (i = 0; i < 8; i++) {
|
869
|
+
for (size_t i = 0; i < 8; i++) {
|
912
870
|
felem_square(tmp, ftmp2);
|
913
871
|
felem_reduce(ftmp2, tmp);
|
914
872
|
} /* 2^88 - 2^8 */
|
915
873
|
felem_mul(tmp, ftmp2, e8);
|
916
874
|
felem_reduce(ftmp2, tmp); /* 2^88 - 2^0 */
|
917
|
-
for (i = 0; i < 4; i++) {
|
875
|
+
for (size_t i = 0; i < 4; i++) {
|
918
876
|
felem_square(tmp, ftmp2);
|
919
877
|
felem_reduce(ftmp2, tmp);
|
920
878
|
} /* 2^92 - 2^4 */
|
@@ -937,14 +895,6 @@ static void felem_inv(felem out, const felem in) {
|
|
937
895
|
felem_reduce(out, tmp); /* 2^256 - 2^224 + 2^192 + 2^96 - 3 */
|
938
896
|
}
|
939
897
|
|
940
|
-
static void smallfelem_inv_contract(smallfelem out, const smallfelem in) {
|
941
|
-
felem tmp;
|
942
|
-
|
943
|
-
smallfelem_expand(tmp, in);
|
944
|
-
felem_inv(tmp, tmp);
|
945
|
-
felem_contract(out, tmp);
|
946
|
-
}
|
947
|
-
|
948
898
|
/* Group operations
|
949
899
|
* ----------------
|
950
900
|
*
|
@@ -1055,8 +1005,7 @@ static void point_double_small(smallfelem x_out, smallfelem y_out,
|
|
1055
1005
|
|
1056
1006
|
/* copy_conditional copies in to out iff mask is all ones. */
|
1057
1007
|
static void copy_conditional(felem out, const felem in, limb mask) {
|
1058
|
-
|
1059
|
-
for (i = 0; i < NLIMBS; ++i) {
|
1008
|
+
for (size_t i = 0; i < NLIMBS; ++i) {
|
1060
1009
|
const limb tmp = mask & (in[i] ^ out[i]);
|
1061
1010
|
out[i] ^= tmp;
|
1062
1011
|
}
|
@@ -1064,9 +1013,8 @@ static void copy_conditional(felem out, const felem in, limb mask) {
|
|
1064
1013
|
|
1065
1014
|
/* copy_small_conditional copies in to out iff mask is all ones. */
|
1066
1015
|
static void copy_small_conditional(felem out, const smallfelem in, limb mask) {
|
1067
|
-
unsigned i;
|
1068
1016
|
const u64 mask64 = mask;
|
1069
|
-
for (i = 0; i < NLIMBS; ++i) {
|
1017
|
+
for (size_t i = 0; i < NLIMBS; ++i) {
|
1070
1018
|
out[i] = ((limb)(in[i] & mask64)) | (out[i] & ~mask);
|
1071
1019
|
}
|
1072
1020
|
}
|
@@ -1448,13 +1396,13 @@ static const smallfelem g_pre_comp[2][16][3] = {
|
|
1448
1396
|
|
1449
1397
|
/* select_point selects the |idx|th point from a precomputation table and
|
1450
1398
|
* copies it to out. */
|
1451
|
-
static void select_point(const u64 idx,
|
1452
|
-
const smallfelem pre_comp[
|
1453
|
-
|
1399
|
+
static void select_point(const u64 idx, size_t size,
|
1400
|
+
const smallfelem pre_comp[/*size*/][3],
|
1401
|
+
smallfelem out[3]) {
|
1454
1402
|
u64 *outlimbs = &out[0][0];
|
1455
1403
|
memset(outlimbs, 0, 3 * sizeof(smallfelem));
|
1456
1404
|
|
1457
|
-
for (i = 0; i < size; i++) {
|
1405
|
+
for (size_t i = 0; i < size; i++) {
|
1458
1406
|
const u64 *inlimbs = (const u64 *)&pre_comp[i][0][0];
|
1459
1407
|
u64 mask = i ^ idx;
|
1460
1408
|
mask |= mask >> 4;
|
@@ -1462,7 +1410,7 @@ static void select_point(const u64 idx, unsigned int size,
|
|
1462
1410
|
mask |= mask >> 1;
|
1463
1411
|
mask &= 1;
|
1464
1412
|
mask--;
|
1465
|
-
for (j = 0; j < NLIMBS * 3; j++) {
|
1413
|
+
for (size_t j = 0; j < NLIMBS * 3; j++) {
|
1466
1414
|
outlimbs[j] |= inlimbs[j] & mask;
|
1467
1415
|
}
|
1468
1416
|
}
|
@@ -1483,10 +1431,8 @@ static char get_bit(const felem_bytearray in, int i) {
|
|
1483
1431
|
* Output point (X, Y, Z) is stored in x_out, y_out, z_out. */
|
1484
1432
|
static void batch_mul(felem x_out, felem y_out, felem z_out,
|
1485
1433
|
const felem_bytearray scalars[],
|
1486
|
-
const
|
1487
|
-
const
|
1488
|
-
int i, skip;
|
1489
|
-
unsigned num, gen_mul = (g_scalar != NULL);
|
1434
|
+
const size_t num_points, const u8 *g_scalar,
|
1435
|
+
const smallfelem pre_comp[][17][3]) {
|
1490
1436
|
felem nq[3], ftmp;
|
1491
1437
|
smallfelem tmp[3];
|
1492
1438
|
u64 bits;
|
@@ -1499,16 +1445,16 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
1499
1445
|
* of the generator (two in each of the last 32 rounds) and additions of
|
1500
1446
|
* other points multiples (every 5th round). */
|
1501
1447
|
|
1502
|
-
skip = 1; /* save two point operations in the first
|
1503
|
-
|
1504
|
-
for (
|
1448
|
+
int skip = 1; /* save two point operations in the first round */
|
1449
|
+
size_t i = num_points != 0 ? 255 : 31;
|
1450
|
+
for (;;) {
|
1505
1451
|
/* double */
|
1506
1452
|
if (!skip) {
|
1507
1453
|
point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
|
1508
1454
|
}
|
1509
1455
|
|
1510
1456
|
/* add multiples of the generator */
|
1511
|
-
if (
|
1457
|
+
if (g_scalar != NULL && i <= 31) {
|
1512
1458
|
/* first, look 32 bits upwards */
|
1513
1459
|
bits = get_bit(g_scalar, i + 224) << 3;
|
1514
1460
|
bits |= get_bit(g_scalar, i + 160) << 2;
|
@@ -1518,9 +1464,8 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
1518
1464
|
select_point(bits, 16, g_pre_comp[1], tmp);
|
1519
1465
|
|
1520
1466
|
if (!skip) {
|
1521
|
-
|
1522
|
-
|
1523
|
-
tmp[2]);
|
1467
|
+
point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
|
1468
|
+
tmp[0], tmp[1], tmp[2]);
|
1524
1469
|
} else {
|
1525
1470
|
smallfelem_expand(nq[0], tmp[0]);
|
1526
1471
|
smallfelem_expand(nq[1], tmp[1]);
|
@@ -1535,14 +1480,14 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
1535
1480
|
bits |= get_bit(g_scalar, i);
|
1536
1481
|
/* select the point to add, in constant time */
|
1537
1482
|
select_point(bits, 16, g_pre_comp[0], tmp);
|
1538
|
-
|
1539
|
-
|
1540
|
-
tmp[2]);
|
1483
|
+
point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */, tmp[0],
|
1484
|
+
tmp[1], tmp[2]);
|
1541
1485
|
}
|
1542
1486
|
|
1543
1487
|
/* do other additions every 5 doublings */
|
1544
|
-
if (num_points &&
|
1488
|
+
if (num_points != 0 && i % 5 == 0) {
|
1545
1489
|
/* loop over all scalars */
|
1490
|
+
size_t num;
|
1546
1491
|
for (num = 0; num < num_points; ++num) {
|
1547
1492
|
bits = get_bit(scalars[num], i + 4) << 5;
|
1548
1493
|
bits |= get_bit(scalars[num], i + 3) << 4;
|
@@ -1560,8 +1505,8 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
1560
1505
|
felem_contract(tmp[1], ftmp);
|
1561
1506
|
|
1562
1507
|
if (!skip) {
|
1563
|
-
point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], mixed
|
1564
|
-
tmp[1], tmp[2]);
|
1508
|
+
point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
|
1509
|
+
tmp[0], tmp[1], tmp[2]);
|
1565
1510
|
} else {
|
1566
1511
|
smallfelem_expand(nq[0], tmp[0]);
|
1567
1512
|
smallfelem_expand(nq[1], tmp[1]);
|
@@ -1570,6 +1515,11 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
1570
1515
|
}
|
1571
1516
|
}
|
1572
1517
|
}
|
1518
|
+
|
1519
|
+
if (i == 0) {
|
1520
|
+
break;
|
1521
|
+
}
|
1522
|
+
--i;
|
1573
1523
|
}
|
1574
1524
|
felem_assign(x_out, nq[0]);
|
1575
1525
|
felem_assign(y_out, nq[1]);
|
@@ -1583,10 +1533,10 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
1583
1533
|
|
1584
1534
|
/* Takes the Jacobian coordinates (X, Y, Z) of a point and returns (X', Y') =
|
1585
1535
|
* (X/Z^2, Y/Z^3). */
|
1586
|
-
int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group,
|
1587
|
-
|
1588
|
-
|
1589
|
-
|
1536
|
+
static int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group,
|
1537
|
+
const EC_POINT *point,
|
1538
|
+
BIGNUM *x, BIGNUM *y,
|
1539
|
+
BN_CTX *ctx) {
|
1590
1540
|
felem z1, z2, x_in, y_in;
|
1591
1541
|
smallfelem x_out, y_out;
|
1592
1542
|
longfelem tmp;
|
@@ -1603,45 +1553,38 @@ int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group,
|
|
1603
1553
|
felem_inv(z2, z1);
|
1604
1554
|
felem_square(tmp, z2);
|
1605
1555
|
felem_reduce(z1, tmp);
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1556
|
+
|
1557
|
+
if (x != NULL) {
|
1558
|
+
felem_mul(tmp, x_in, z1);
|
1559
|
+
felem_reduce(x_in, tmp);
|
1560
|
+
felem_contract(x_out, x_in);
|
1561
|
+
if (!smallfelem_to_BN(x, x_out)) {
|
1562
|
+
OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
|
1563
|
+
return 0;
|
1564
|
+
}
|
1612
1565
|
}
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1566
|
+
|
1567
|
+
if (y != NULL) {
|
1568
|
+
felem_mul(tmp, z1, z2);
|
1569
|
+
felem_reduce(z1, tmp);
|
1570
|
+
felem_mul(tmp, y_in, z1);
|
1571
|
+
felem_reduce(y_in, tmp);
|
1572
|
+
felem_contract(y_out, y_in);
|
1573
|
+
if (!smallfelem_to_BN(y, y_out)) {
|
1574
|
+
OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
|
1575
|
+
return 0;
|
1576
|
+
}
|
1621
1577
|
}
|
1622
|
-
return 1;
|
1623
|
-
}
|
1624
1578
|
|
1625
|
-
|
1626
|
-
static void make_points_affine(size_t num, smallfelem points[][3],
|
1627
|
-
smallfelem tmp_smallfelems[]) {
|
1628
|
-
/* Runs in constant time, unless an input is the point at infinity (which
|
1629
|
-
* normally shouldn't happen). */
|
1630
|
-
ec_GFp_nistp_points_make_affine_internal(
|
1631
|
-
num, points, sizeof(smallfelem), tmp_smallfelems,
|
1632
|
-
(void (*)(void *))smallfelem_one,
|
1633
|
-
(int (*)(const void *))smallfelem_is_zero_int,
|
1634
|
-
(void (*)(void *, const void *))smallfelem_assign,
|
1635
|
-
(void (*)(void *, const void *))smallfelem_square_contract,
|
1636
|
-
(void (*)(void *, const void *, const void *))smallfelem_mul_contract,
|
1637
|
-
(void (*)(void *, const void *))smallfelem_inv_contract,
|
1638
|
-
/* nothing to contract */
|
1639
|
-
(void (*)(void *, const void *))smallfelem_assign);
|
1579
|
+
return 1;
|
1640
1580
|
}
|
1641
1581
|
|
1642
|
-
int ec_GFp_nistp256_points_mul(const EC_GROUP *group,
|
1643
|
-
|
1644
|
-
|
1582
|
+
static int ec_GFp_nistp256_points_mul(const EC_GROUP *group,
|
1583
|
+
EC_POINT *r,
|
1584
|
+
const BIGNUM *g_scalar,
|
1585
|
+
const EC_POINT *p_,
|
1586
|
+
const BIGNUM *p_scalar_,
|
1587
|
+
BN_CTX *ctx) {
|
1645
1588
|
/* TODO: This function used to take |points| and |scalars| as arrays of
|
1646
1589
|
* |num| elements. The code below should be simplified to work in terms of |p|
|
1647
1590
|
* and |p_scalar|. */
|
@@ -1650,16 +1593,12 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1650
1593
|
BIGNUM const *const *scalars = p_ != NULL ? &p_scalar_ : NULL;
|
1651
1594
|
|
1652
1595
|
int ret = 0;
|
1653
|
-
int j;
|
1654
|
-
int mixed = 0;
|
1655
1596
|
BN_CTX *new_ctx = NULL;
|
1656
1597
|
BIGNUM *x, *y, *z, *tmp_scalar;
|
1657
1598
|
felem_bytearray g_secret;
|
1658
1599
|
felem_bytearray *secrets = NULL;
|
1659
1600
|
smallfelem(*pre_comp)[17][3] = NULL;
|
1660
|
-
smallfelem *tmp_smallfelems = NULL;
|
1661
1601
|
felem_bytearray tmp;
|
1662
|
-
unsigned i, num_bytes;
|
1663
1602
|
size_t num_points = num;
|
1664
1603
|
smallfelem x_in, y_in, z_in;
|
1665
1604
|
felem x_out, y_out, z_out;
|
@@ -1682,19 +1621,9 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1682
1621
|
}
|
1683
1622
|
|
1684
1623
|
if (num_points > 0) {
|
1685
|
-
if (num_points >= 3) {
|
1686
|
-
/* unless we precompute multiples for just one or two points,
|
1687
|
-
* converting those into affine form is time well spent */
|
1688
|
-
mixed = 1;
|
1689
|
-
}
|
1690
1624
|
secrets = OPENSSL_malloc(num_points * sizeof(felem_bytearray));
|
1691
1625
|
pre_comp = OPENSSL_malloc(num_points * sizeof(smallfelem[17][3]));
|
1692
|
-
if (
|
1693
|
-
tmp_smallfelems =
|
1694
|
-
OPENSSL_malloc((num_points * 17 + 1) * sizeof(smallfelem));
|
1695
|
-
}
|
1696
|
-
if (secrets == NULL || pre_comp == NULL ||
|
1697
|
-
(mixed && tmp_smallfelems == NULL)) {
|
1626
|
+
if (secrets == NULL || pre_comp == NULL) {
|
1698
1627
|
OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
|
1699
1628
|
goto err;
|
1700
1629
|
}
|
@@ -1703,7 +1632,7 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1703
1632
|
* i.e., they contribute nothing to the linear combination. */
|
1704
1633
|
memset(secrets, 0, num_points * sizeof(felem_bytearray));
|
1705
1634
|
memset(pre_comp, 0, num_points * 17 * 3 * sizeof(smallfelem));
|
1706
|
-
for (i = 0; i < num_points; ++i) {
|
1635
|
+
for (size_t i = 0; i < num_points; ++i) {
|
1707
1636
|
if (i == num) {
|
1708
1637
|
/* we didn't have a valid precomputation, so we pick the generator. */
|
1709
1638
|
p = EC_GROUP_get0_generator(group);
|
@@ -1714,6 +1643,7 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1714
1643
|
p_scalar = scalars[i];
|
1715
1644
|
}
|
1716
1645
|
if (p_scalar != NULL && p != NULL) {
|
1646
|
+
size_t num_bytes;
|
1717
1647
|
/* reduce g_scalar to 0 <= g_scalar < 2^256 */
|
1718
1648
|
if (BN_num_bits(p_scalar) > 256 || BN_is_negative(p_scalar)) {
|
1719
1649
|
/* this is an unusual input, and we don't guarantee
|
@@ -1736,7 +1666,7 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1736
1666
|
felem_shrink(pre_comp[i][1][0], x_out);
|
1737
1667
|
felem_shrink(pre_comp[i][1][1], y_out);
|
1738
1668
|
felem_shrink(pre_comp[i][1][2], z_out);
|
1739
|
-
for (j = 2; j <= 16; ++j) {
|
1669
|
+
for (size_t j = 2; j <= 16; ++j) {
|
1740
1670
|
if (j & 1) {
|
1741
1671
|
point_add_small(pre_comp[i][j][0], pre_comp[i][j][1],
|
1742
1672
|
pre_comp[i][j][2], pre_comp[i][1][0],
|
@@ -1751,12 +1681,11 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1751
1681
|
}
|
1752
1682
|
}
|
1753
1683
|
}
|
1754
|
-
if (mixed) {
|
1755
|
-
make_points_affine(num_points * 17, pre_comp[0], tmp_smallfelems);
|
1756
|
-
}
|
1757
1684
|
}
|
1758
1685
|
|
1759
1686
|
if (g_scalar != NULL) {
|
1687
|
+
size_t num_bytes;
|
1688
|
+
|
1760
1689
|
memset(g_secret, 0, sizeof(g_secret));
|
1761
1690
|
/* reduce g_scalar to 0 <= g_scalar < 2^256 */
|
1762
1691
|
if (BN_num_bits(g_scalar) > 256 || BN_is_negative(g_scalar)) {
|
@@ -1773,7 +1702,7 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1773
1702
|
flip_endian(g_secret, tmp, num_bytes);
|
1774
1703
|
}
|
1775
1704
|
batch_mul(x_out, y_out, z_out, (const felem_bytearray(*))secrets,
|
1776
|
-
num_points, g_scalar != NULL ? g_secret : NULL,
|
1705
|
+
num_points, g_scalar != NULL ? g_secret : NULL,
|
1777
1706
|
(const smallfelem(*)[17][3])pre_comp);
|
1778
1707
|
|
1779
1708
|
/* reduce the output to its unique minimal representation */
|
@@ -1793,24 +1722,20 @@ err:
|
|
1793
1722
|
BN_CTX_free(new_ctx);
|
1794
1723
|
OPENSSL_free(secrets);
|
1795
1724
|
OPENSSL_free(pre_comp);
|
1796
|
-
OPENSSL_free(tmp_smallfelems);
|
1797
1725
|
return ret;
|
1798
1726
|
}
|
1799
1727
|
|
1800
|
-
const EC_METHOD
|
1801
|
-
|
1802
|
-
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
return &ret;
|
1814
|
-
}
|
1728
|
+
const EC_METHOD EC_GFp_nistp256_method = {
|
1729
|
+
ec_GFp_simple_group_init,
|
1730
|
+
ec_GFp_simple_group_finish,
|
1731
|
+
ec_GFp_simple_group_copy,
|
1732
|
+
ec_GFp_simple_group_set_curve,
|
1733
|
+
ec_GFp_nistp256_point_get_affine_coordinates,
|
1734
|
+
ec_GFp_nistp256_points_mul,
|
1735
|
+
ec_GFp_simple_field_mul,
|
1736
|
+
ec_GFp_simple_field_sqr,
|
1737
|
+
NULL /* field_encode */,
|
1738
|
+
NULL /* field_decode */,
|
1739
|
+
};
|
1815
1740
|
|
1816
1741
|
#endif /* 64_BIT && !WINDOWS */
|