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
@@ -96,15 +96,6 @@ struct ec_method_st {
|
|
96
96
|
int (*mul)(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar,
|
97
97
|
const EC_POINT *p, const BIGNUM *p_scalar, BN_CTX *ctx);
|
98
98
|
|
99
|
-
/* |check_pub_key_order| checks that the public key is in the proper subgroup
|
100
|
-
* by checking that |pub_key*group->order| is the point at infinity. This may
|
101
|
-
* be NULL for |EC_METHOD|s specialized for prime-order curves (i.e. with
|
102
|
-
* cofactor one), as this check is not necessary for such curves (See section
|
103
|
-
* A.3 of the NSA's "Suite B Implementer's Guide to FIPS 186-3
|
104
|
-
* (ECDSA)"). */
|
105
|
-
int (*check_pub_key_order)(const EC_GROUP *group, const EC_POINT *pub_key,
|
106
|
-
BN_CTX *ctx);
|
107
|
-
|
108
99
|
/* 'field_mul' and 'field_sqr' can be used by 'add' and 'dbl' so that the
|
109
100
|
* same implementations of point operations can be used with different
|
110
101
|
* optimized implementations of expensive field operations: */
|
@@ -116,16 +107,15 @@ struct ec_method_st {
|
|
116
107
|
BN_CTX *); /* e.g. to Montgomery */
|
117
108
|
int (*field_decode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a,
|
118
109
|
BN_CTX *); /* e.g. from Montgomery */
|
119
|
-
int (*field_set_to_one)(const EC_GROUP *, BIGNUM *r, BN_CTX *);
|
120
110
|
} /* EC_METHOD */;
|
121
111
|
|
122
|
-
const EC_METHOD
|
112
|
+
extern const EC_METHOD EC_GFp_mont_method;
|
123
113
|
|
124
114
|
struct ec_group_st {
|
125
115
|
const EC_METHOD *meth;
|
126
116
|
|
127
117
|
EC_POINT *generator;
|
128
|
-
BIGNUM order
|
118
|
+
BIGNUM order;
|
129
119
|
|
130
120
|
int curve_name; /* optional NID for named curve */
|
131
121
|
|
@@ -141,7 +131,8 @@ struct ec_group_st {
|
|
141
131
|
int a_is_minus3; /* enable optimized point arithmetics for special case */
|
142
132
|
|
143
133
|
BN_MONT_CTX *mont; /* Montgomery structure. */
|
144
|
-
|
134
|
+
|
135
|
+
BIGNUM one; /* The value one. */
|
145
136
|
} /* EC_GROUP */;
|
146
137
|
|
147
138
|
struct ec_point_st {
|
@@ -151,7 +142,6 @@ struct ec_point_st {
|
|
151
142
|
BIGNUM Y;
|
152
143
|
BIGNUM Z; /* Jacobian projective coordinates:
|
153
144
|
* (X, Y, Z) represents (X/Z^2, Y/Z^3) if Z != 0 */
|
154
|
-
int Z_is_one; /* enable optimized point arithmetics for special case */
|
155
145
|
} /* EC_POINT */;
|
156
146
|
|
157
147
|
EC_GROUP *ec_group_new(const EC_METHOD *meth);
|
@@ -190,9 +180,6 @@ int ec_GFp_simple_get_Jprojective_coordinates_GFp(const EC_GROUP *,
|
|
190
180
|
int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *, EC_POINT *,
|
191
181
|
const BIGNUM *x, const BIGNUM *y,
|
192
182
|
BN_CTX *);
|
193
|
-
int ec_GFp_simple_point_get_affine_coordinates(const EC_GROUP *,
|
194
|
-
const EC_POINT *, BIGNUM *x,
|
195
|
-
BIGNUM *y, BN_CTX *);
|
196
183
|
int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *, EC_POINT *,
|
197
184
|
const BIGNUM *x, int y_bit,
|
198
185
|
BN_CTX *);
|
@@ -227,30 +214,20 @@ int ec_GFp_mont_field_encode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a,
|
|
227
214
|
BN_CTX *);
|
228
215
|
int ec_GFp_mont_field_decode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a,
|
229
216
|
BN_CTX *);
|
230
|
-
int ec_GFp_mont_field_set_to_one(const EC_GROUP *, BIGNUM *r, BN_CTX *);
|
231
217
|
|
232
218
|
int ec_point_set_Jprojective_coordinates_GFp(const EC_GROUP *group,
|
233
219
|
EC_POINT *point, const BIGNUM *x,
|
234
220
|
const BIGNUM *y, const BIGNUM *z,
|
235
221
|
BN_CTX *ctx);
|
236
222
|
|
237
|
-
void ec_GFp_nistp_points_make_affine_internal(
|
238
|
-
size_t num, void *point_array, size_t felem_size, void *tmp_felems,
|
239
|
-
void (*felem_one)(void *out), int (*felem_is_zero)(const void *in),
|
240
|
-
void (*felem_assign)(void *out, const void *in),
|
241
|
-
void (*felem_square)(void *out, const void *in),
|
242
|
-
void (*felem_mul)(void *out, const void *in1, const void *in2),
|
243
|
-
void (*felem_inv)(void *out, const void *in),
|
244
|
-
void (*felem_contract)(void *out, const void *in));
|
245
|
-
|
246
223
|
void ec_GFp_nistp_recode_scalar_bits(uint8_t *sign, uint8_t *digit, uint8_t in);
|
247
224
|
|
248
|
-
const EC_METHOD
|
249
|
-
const EC_METHOD
|
225
|
+
extern const EC_METHOD EC_GFp_nistp224_method;
|
226
|
+
extern const EC_METHOD EC_GFp_nistp256_method;
|
250
227
|
|
251
|
-
/*
|
252
|
-
* optimized P256. See http://eprint.iacr.org/2013/816. */
|
253
|
-
const EC_METHOD
|
228
|
+
/* EC_GFp_nistz256_method is a GFp method using montgomery multiplication, with
|
229
|
+
* x86-64 optimized P256. See http://eprint.iacr.org/2013/816. */
|
230
|
+
extern const EC_METHOD EC_GFp_nistz256_method;
|
254
231
|
|
255
232
|
struct ec_key_st {
|
256
233
|
EC_GROUP *group;
|
@@ -274,9 +251,6 @@ struct curve_data {
|
|
274
251
|
const char *comment;
|
275
252
|
/* param_len is the number of bytes needed to store a field element. */
|
276
253
|
uint8_t param_len;
|
277
|
-
/* cofactor is the cofactor of the group (i.e. the number of elements in the
|
278
|
-
* group divided by the size of the main subgroup. */
|
279
|
-
uint8_t cofactor; /* promoted to BN_ULONG */
|
280
254
|
/* data points to an array of 6*|param_len| bytes which hold the field
|
281
255
|
* elements of the following (in big-endian order): prime, a, b, generator x,
|
282
256
|
* generator y, order. */
|
@@ -285,8 +259,10 @@ struct curve_data {
|
|
285
259
|
|
286
260
|
struct built_in_curve {
|
287
261
|
int nid;
|
262
|
+
uint8_t oid[8];
|
263
|
+
uint8_t oid_len;
|
288
264
|
const struct curve_data *data;
|
289
|
-
const EC_METHOD *
|
265
|
+
const EC_METHOD *method;
|
290
266
|
};
|
291
267
|
|
292
268
|
/* OPENSSL_built_in_curves is terminated with an entry where |nid| is
|
@@ -281,10 +281,15 @@ int EC_POINT_point2cbb(CBB *out, const EC_GROUP *group, const EC_POINT *point,
|
|
281
281
|
}
|
282
282
|
|
283
283
|
int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *group,
|
284
|
-
EC_POINT *point, const BIGNUM *
|
284
|
+
EC_POINT *point, const BIGNUM *x,
|
285
285
|
int y_bit, BN_CTX *ctx) {
|
286
|
+
if (BN_is_negative(x) || BN_cmp(x, &group->field) >= 0) {
|
287
|
+
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_COMPRESSION_BIT);
|
288
|
+
return 0;
|
289
|
+
}
|
290
|
+
|
286
291
|
BN_CTX *new_ctx = NULL;
|
287
|
-
BIGNUM *tmp1, *tmp2, *
|
292
|
+
BIGNUM *tmp1, *tmp2, *y;
|
288
293
|
int ret = 0;
|
289
294
|
|
290
295
|
ERR_clear_error();
|
@@ -301,7 +306,6 @@ int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *group,
|
|
301
306
|
BN_CTX_start(ctx);
|
302
307
|
tmp1 = BN_CTX_get(ctx);
|
303
308
|
tmp2 = BN_CTX_get(ctx);
|
304
|
-
x = BN_CTX_get(ctx);
|
305
309
|
y = BN_CTX_get(ctx);
|
306
310
|
if (y == NULL) {
|
307
311
|
goto err;
|
@@ -312,19 +316,15 @@ int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *group,
|
|
312
316
|
* so y is one of the square roots of x^3 + a*x + b. */
|
313
317
|
|
314
318
|
/* tmp1 := x^3 */
|
315
|
-
if (!BN_nnmod(x, x_, &group->field, ctx)) {
|
316
|
-
goto err;
|
317
|
-
}
|
318
|
-
|
319
319
|
if (group->meth->field_decode == 0) {
|
320
320
|
/* field_{sqr,mul} work on standard representation */
|
321
|
-
if (!group->meth->field_sqr(group, tmp2,
|
322
|
-
!group->meth->field_mul(group, tmp1, tmp2,
|
321
|
+
if (!group->meth->field_sqr(group, tmp2, x, ctx) ||
|
322
|
+
!group->meth->field_mul(group, tmp1, tmp2, x, ctx)) {
|
323
323
|
goto err;
|
324
324
|
}
|
325
325
|
} else {
|
326
|
-
if (!BN_mod_sqr(tmp2,
|
327
|
-
!BN_mod_mul(tmp1, tmp2,
|
326
|
+
if (!BN_mod_sqr(tmp2, x, &group->field, ctx) ||
|
327
|
+
!BN_mod_mul(tmp1, tmp2, x, &group->field, ctx)) {
|
328
328
|
goto err;
|
329
329
|
}
|
330
330
|
}
|
@@ -26,7 +26,6 @@
|
|
26
26
|
#include <openssl/ec.h>
|
27
27
|
#include <openssl/err.h>
|
28
28
|
#include <openssl/mem.h>
|
29
|
-
#include <openssl/obj.h>
|
30
29
|
|
31
30
|
#include <string.h>
|
32
31
|
|
@@ -193,8 +192,7 @@ static void bin28_to_felem(felem out, const u8 in[28]) {
|
|
193
192
|
}
|
194
193
|
|
195
194
|
static void felem_to_bin28(u8 out[28], const felem in) {
|
196
|
-
|
197
|
-
for (i = 0; i < 7; ++i) {
|
195
|
+
for (size_t i = 0; i < 7; ++i) {
|
198
196
|
out[i] = in[0] >> (8 * i);
|
199
197
|
out[i + 7] = in[1] >> (8 * i);
|
200
198
|
out[i + 14] = in[2] >> (8 * i);
|
@@ -203,9 +201,8 @@ static void felem_to_bin28(u8 out[28], const felem in) {
|
|
203
201
|
}
|
204
202
|
|
205
203
|
/* To preserve endianness when using BN_bn2bin and BN_bin2bn */
|
206
|
-
static void flip_endian(u8 *out, const u8 *in,
|
207
|
-
|
208
|
-
for (i = 0; i < len; ++i) {
|
204
|
+
static void flip_endian(u8 *out, const u8 *in, size_t len) {
|
205
|
+
for (size_t i = 0; i < len; ++i) {
|
209
206
|
out[i] = in[len - 1 - i];
|
210
207
|
}
|
211
208
|
}
|
@@ -215,7 +212,7 @@ static int BN_to_felem(felem out, const BIGNUM *bn) {
|
|
215
212
|
/* BN_bn2bin eats leading zeroes */
|
216
213
|
felem_bytearray b_out;
|
217
214
|
memset(b_out, 0, sizeof(b_out));
|
218
|
-
|
215
|
+
size_t num_bytes = BN_num_bytes(bn);
|
219
216
|
if (num_bytes > sizeof(b_out) ||
|
220
217
|
BN_is_negative(bn)) {
|
221
218
|
OPENSSL_PUT_ERROR(EC, EC_R_BIGNUM_OUT_OF_RANGE);
|
@@ -242,13 +239,6 @@ static BIGNUM *felem_to_BN(BIGNUM *out, const felem in) {
|
|
242
239
|
* expected to be correct in general - e.g., multiplication with a large scalar
|
243
240
|
* will cause an overflow. */
|
244
241
|
|
245
|
-
static void felem_one(felem out) {
|
246
|
-
out[0] = 1;
|
247
|
-
out[1] = 0;
|
248
|
-
out[2] = 0;
|
249
|
-
out[3] = 0;
|
250
|
-
}
|
251
|
-
|
252
242
|
static void felem_assign(felem out, const felem in) {
|
253
243
|
out[0] = in[0];
|
254
244
|
out[1] = in[1];
|
@@ -460,18 +450,6 @@ static void felem_reduce(felem out, const widefelem in) {
|
|
460
450
|
out[3] = output[3];
|
461
451
|
}
|
462
452
|
|
463
|
-
static void felem_square_reduce(felem out, const felem in) {
|
464
|
-
widefelem tmp;
|
465
|
-
felem_square(tmp, in);
|
466
|
-
felem_reduce(out, tmp);
|
467
|
-
}
|
468
|
-
|
469
|
-
static void felem_mul_reduce(felem out, const felem in1, const felem in2) {
|
470
|
-
widefelem tmp;
|
471
|
-
felem_mul(tmp, in1, in2);
|
472
|
-
felem_reduce(out, tmp);
|
473
|
-
}
|
474
|
-
|
475
453
|
/* Reduce to unique minimal representation.
|
476
454
|
* Requires 0 <= in < 2*p (always call felem_reduce first) */
|
477
455
|
static void felem_contract(felem out, const felem in) {
|
@@ -539,16 +517,11 @@ static limb felem_is_zero(const felem in) {
|
|
539
517
|
return (zero | two224m96p1 | two225m97p2);
|
540
518
|
}
|
541
519
|
|
542
|
-
static limb felem_is_zero_int(const felem in) {
|
543
|
-
return (int)(felem_is_zero(in) & ((limb)1));
|
544
|
-
}
|
545
|
-
|
546
520
|
/* Invert a field element */
|
547
521
|
/* Computation chain copied from djb's code */
|
548
522
|
static void felem_inv(felem out, const felem in) {
|
549
523
|
felem ftmp, ftmp2, ftmp3, ftmp4;
|
550
524
|
widefelem tmp;
|
551
|
-
unsigned i;
|
552
525
|
|
553
526
|
felem_square(tmp, in);
|
554
527
|
felem_reduce(ftmp, tmp); /* 2 */
|
@@ -568,7 +541,7 @@ static void felem_inv(felem out, const felem in) {
|
|
568
541
|
felem_reduce(ftmp, tmp); /* 2^6 - 1 */
|
569
542
|
felem_square(tmp, ftmp);
|
570
543
|
felem_reduce(ftmp2, tmp); /* 2^7 - 2 */
|
571
|
-
for (i = 0; i < 5; ++i) { /* 2^12 - 2^6 */
|
544
|
+
for (size_t i = 0; i < 5; ++i) { /* 2^12 - 2^6 */
|
572
545
|
felem_square(tmp, ftmp2);
|
573
546
|
felem_reduce(ftmp2, tmp);
|
574
547
|
}
|
@@ -576,7 +549,7 @@ static void felem_inv(felem out, const felem in) {
|
|
576
549
|
felem_reduce(ftmp2, tmp); /* 2^12 - 1 */
|
577
550
|
felem_square(tmp, ftmp2);
|
578
551
|
felem_reduce(ftmp3, tmp); /* 2^13 - 2 */
|
579
|
-
for (i = 0; i < 11; ++i) {/* 2^24 - 2^12 */
|
552
|
+
for (size_t i = 0; i < 11; ++i) {/* 2^24 - 2^12 */
|
580
553
|
felem_square(tmp, ftmp3);
|
581
554
|
felem_reduce(ftmp3, tmp);
|
582
555
|
}
|
@@ -584,7 +557,7 @@ static void felem_inv(felem out, const felem in) {
|
|
584
557
|
felem_reduce(ftmp2, tmp); /* 2^24 - 1 */
|
585
558
|
felem_square(tmp, ftmp2);
|
586
559
|
felem_reduce(ftmp3, tmp); /* 2^25 - 2 */
|
587
|
-
for (i = 0; i < 23; ++i) {/* 2^48 - 2^24 */
|
560
|
+
for (size_t i = 0; i < 23; ++i) {/* 2^48 - 2^24 */
|
588
561
|
felem_square(tmp, ftmp3);
|
589
562
|
felem_reduce(ftmp3, tmp);
|
590
563
|
}
|
@@ -592,7 +565,7 @@ static void felem_inv(felem out, const felem in) {
|
|
592
565
|
felem_reduce(ftmp3, tmp); /* 2^48 - 1 */
|
593
566
|
felem_square(tmp, ftmp3);
|
594
567
|
felem_reduce(ftmp4, tmp); /* 2^49 - 2 */
|
595
|
-
for (i = 0; i < 47; ++i) {/* 2^96 - 2^48 */
|
568
|
+
for (size_t i = 0; i < 47; ++i) {/* 2^96 - 2^48 */
|
596
569
|
felem_square(tmp, ftmp4);
|
597
570
|
felem_reduce(ftmp4, tmp);
|
598
571
|
}
|
@@ -600,13 +573,13 @@ static void felem_inv(felem out, const felem in) {
|
|
600
573
|
felem_reduce(ftmp3, tmp); /* 2^96 - 1 */
|
601
574
|
felem_square(tmp, ftmp3);
|
602
575
|
felem_reduce(ftmp4, tmp); /* 2^97 - 2 */
|
603
|
-
for (i = 0; i < 23; ++i) {/* 2^120 - 2^24 */
|
576
|
+
for (size_t i = 0; i < 23; ++i) {/* 2^120 - 2^24 */
|
604
577
|
felem_square(tmp, ftmp4);
|
605
578
|
felem_reduce(ftmp4, tmp);
|
606
579
|
}
|
607
580
|
felem_mul(tmp, ftmp2, ftmp4);
|
608
581
|
felem_reduce(ftmp2, tmp); /* 2^120 - 1 */
|
609
|
-
for (i = 0; i < 6; ++i) { /* 2^126 - 2^6 */
|
582
|
+
for (size_t i = 0; i < 6; ++i) { /* 2^126 - 2^6 */
|
610
583
|
felem_square(tmp, ftmp2);
|
611
584
|
felem_reduce(ftmp2, tmp);
|
612
585
|
}
|
@@ -616,7 +589,7 @@ static void felem_inv(felem out, const felem in) {
|
|
616
589
|
felem_reduce(ftmp, tmp); /* 2^127 - 2 */
|
617
590
|
felem_mul(tmp, ftmp, in);
|
618
591
|
felem_reduce(ftmp, tmp); /* 2^127 - 1 */
|
619
|
-
for (i = 0; i < 97; ++i) {/* 2^224 - 2^97 */
|
592
|
+
for (size_t i = 0; i < 97; ++i) {/* 2^224 - 2^97 */
|
620
593
|
felem_square(tmp, ftmp);
|
621
594
|
felem_reduce(ftmp, tmp);
|
622
595
|
}
|
@@ -628,10 +601,9 @@ static void felem_inv(felem out, const felem in) {
|
|
628
601
|
* if icopy == 1, copy in to out,
|
629
602
|
* if icopy == 0, copy out to itself. */
|
630
603
|
static void copy_conditional(felem out, const felem in, limb icopy) {
|
631
|
-
unsigned i;
|
632
604
|
/* icopy is a (64-bit) 0 or 1, so copy is either all-zero or all-one */
|
633
605
|
const limb copy = -icopy;
|
634
|
-
for (i = 0; i < 4; ++i) {
|
606
|
+
for (size_t i = 0; i < 4; ++i) {
|
635
607
|
const limb tmp = copy & (in[i] ^ out[i]);
|
636
608
|
out[i] ^= tmp;
|
637
609
|
}
|
@@ -885,13 +857,12 @@ static void point_add(felem x3, felem y3, felem z3, const felem x1,
|
|
885
857
|
|
886
858
|
/* select_point selects the |idx|th point from a precomputation table and
|
887
859
|
* copies it to out. */
|
888
|
-
static void select_point(const u64 idx,
|
860
|
+
static void select_point(const u64 idx, size_t size,
|
889
861
|
const felem pre_comp[/*size*/][3], felem out[3]) {
|
890
|
-
unsigned i, j;
|
891
862
|
limb *outlimbs = &out[0][0];
|
892
863
|
memset(outlimbs, 0, 3 * sizeof(felem));
|
893
864
|
|
894
|
-
for (i = 0; i < size; i++) {
|
865
|
+
for (size_t i = 0; i < size; i++) {
|
895
866
|
const limb *inlimbs = &pre_comp[i][0][0];
|
896
867
|
u64 mask = i ^ idx;
|
897
868
|
mask |= mask >> 4;
|
@@ -899,14 +870,14 @@ static void select_point(const u64 idx, unsigned int size,
|
|
899
870
|
mask |= mask >> 1;
|
900
871
|
mask &= 1;
|
901
872
|
mask--;
|
902
|
-
for (j = 0; j < 4 * 3; j++) {
|
873
|
+
for (size_t j = 0; j < 4 * 3; j++) {
|
903
874
|
outlimbs[j] |= inlimbs[j] & mask;
|
904
875
|
}
|
905
876
|
}
|
906
877
|
}
|
907
878
|
|
908
879
|
/* get_bit returns the |i|th bit in |in| */
|
909
|
-
static char get_bit(const felem_bytearray in,
|
880
|
+
static char get_bit(const felem_bytearray in, size_t i) {
|
910
881
|
if (i >= 224) {
|
911
882
|
return 0;
|
912
883
|
}
|
@@ -920,11 +891,8 @@ static char get_bit(const felem_bytearray in, unsigned i) {
|
|
920
891
|
* Output point (X, Y, Z) is stored in x_out, y_out, z_out */
|
921
892
|
static void batch_mul(felem x_out, felem y_out, felem z_out,
|
922
893
|
const felem_bytearray scalars[],
|
923
|
-
const
|
924
|
-
const
|
925
|
-
int i, skip;
|
926
|
-
unsigned num;
|
927
|
-
unsigned gen_mul = (g_scalar != NULL);
|
894
|
+
const size_t num_points, const u8 *g_scalar,
|
895
|
+
const felem pre_comp[][17][3]) {
|
928
896
|
felem nq[3], tmp[4];
|
929
897
|
u64 bits;
|
930
898
|
u8 sign, digit;
|
@@ -935,15 +903,16 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
935
903
|
/* Loop over all scalars msb-to-lsb, interleaving additions
|
936
904
|
* of multiples of the generator (two in each of the last 28 rounds)
|
937
905
|
* and additions of other points multiples (every 5th round). */
|
938
|
-
skip = 1; /* save two point operations in the first round */
|
939
|
-
|
906
|
+
int skip = 1; /* save two point operations in the first round */
|
907
|
+
size_t i = num_points != 0 ? 220 : 27;
|
908
|
+
for (;;) {
|
940
909
|
/* double */
|
941
910
|
if (!skip) {
|
942
911
|
point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
|
943
912
|
}
|
944
913
|
|
945
914
|
/* add multiples of the generator */
|
946
|
-
if (
|
915
|
+
if (g_scalar != NULL && i <= 27) {
|
947
916
|
/* first, look 28 bits upwards */
|
948
917
|
bits = get_bit(g_scalar, i + 196) << 3;
|
949
918
|
bits |= get_bit(g_scalar, i + 140) << 2;
|
@@ -972,8 +941,9 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
972
941
|
}
|
973
942
|
|
974
943
|
/* do other additions every 5 doublings */
|
975
|
-
if (num_points &&
|
944
|
+
if (num_points != 0 && i % 5 == 0) {
|
976
945
|
/* loop over all scalars */
|
946
|
+
size_t num;
|
977
947
|
for (num = 0; num < num_points; ++num) {
|
978
948
|
bits = get_bit(scalars[num], i + 4) << 5;
|
979
949
|
bits |= get_bit(scalars[num], i + 3) << 4;
|
@@ -989,14 +959,19 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
989
959
|
copy_conditional(tmp[1], tmp[3], sign);
|
990
960
|
|
991
961
|
if (!skip) {
|
992
|
-
point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], mixed
|
993
|
-
tmp[1], tmp[2]);
|
962
|
+
point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
|
963
|
+
tmp[0], tmp[1], tmp[2]);
|
994
964
|
} else {
|
995
965
|
memcpy(nq, tmp, 3 * sizeof(felem));
|
996
966
|
skip = 0;
|
997
967
|
}
|
998
968
|
}
|
999
969
|
}
|
970
|
+
|
971
|
+
if (i == 0) {
|
972
|
+
break;
|
973
|
+
}
|
974
|
+
--i;
|
1000
975
|
}
|
1001
976
|
felem_assign(x_out, nq[0]);
|
1002
977
|
felem_assign(y_out, nq[1]);
|
@@ -1005,10 +980,10 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
|
|
1005
980
|
|
1006
981
|
/* Takes the Jacobian coordinates (X, Y, Z) of a point and returns
|
1007
982
|
* (X', Y') = (X/Z^2, Y/Z^3) */
|
1008
|
-
int ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group,
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
983
|
+
static int ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group,
|
984
|
+
const EC_POINT *point,
|
985
|
+
BIGNUM *x, BIGNUM *y,
|
986
|
+
BN_CTX *ctx) {
|
1012
987
|
felem z1, z2, x_in, y_in, x_out, y_out;
|
1013
988
|
widefelem tmp;
|
1014
989
|
|
@@ -1047,23 +1022,12 @@ int ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group,
|
|
1047
1022
|
return 1;
|
1048
1023
|
}
|
1049
1024
|
|
1050
|
-
static
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
(int (*)(const void *))felem_is_zero_int,
|
1057
|
-
(void (*)(void *, const void *))felem_assign,
|
1058
|
-
(void (*)(void *, const void *))felem_square_reduce,
|
1059
|
-
(void (*)(void *, const void *, const void *))felem_mul_reduce,
|
1060
|
-
(void (*)(void *, const void *))felem_inv,
|
1061
|
-
(void (*)(void *, const void *))felem_contract);
|
1062
|
-
}
|
1063
|
-
|
1064
|
-
int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
|
1065
|
-
const BIGNUM *g_scalar, const EC_POINT *p_,
|
1066
|
-
const BIGNUM *p_scalar_, BN_CTX *ctx) {
|
1025
|
+
static int ec_GFp_nistp224_points_mul(const EC_GROUP *group,
|
1026
|
+
EC_POINT *r,
|
1027
|
+
const BIGNUM *g_scalar,
|
1028
|
+
const EC_POINT *p_,
|
1029
|
+
const BIGNUM *p_scalar_,
|
1030
|
+
BN_CTX *ctx) {
|
1067
1031
|
/* TODO: This function used to take |points| and |scalars| as arrays of
|
1068
1032
|
* |num| elements. The code below should be simplified to work in terms of
|
1069
1033
|
* |p_| and |p_scalar_|. */
|
@@ -1072,17 +1036,12 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1072
1036
|
BIGNUM const *const *scalars = p_ != NULL ? &p_scalar_ : NULL;
|
1073
1037
|
|
1074
1038
|
int ret = 0;
|
1075
|
-
int j;
|
1076
|
-
unsigned i;
|
1077
|
-
int mixed = 0;
|
1078
1039
|
BN_CTX *new_ctx = NULL;
|
1079
1040
|
BIGNUM *x, *y, *z, *tmp_scalar;
|
1080
1041
|
felem_bytearray g_secret;
|
1081
1042
|
felem_bytearray *secrets = NULL;
|
1082
1043
|
felem(*pre_comp)[17][3] = NULL;
|
1083
|
-
felem *tmp_felems = NULL;
|
1084
1044
|
felem_bytearray tmp;
|
1085
|
-
unsigned num_bytes;
|
1086
1045
|
size_t num_points = num;
|
1087
1046
|
felem x_in, y_in, z_in, x_out, y_out, z_out;
|
1088
1047
|
const EC_POINT *p = NULL;
|
@@ -1105,19 +1064,10 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1105
1064
|
}
|
1106
1065
|
|
1107
1066
|
if (num_points > 0) {
|
1108
|
-
if (num_points >= 3) {
|
1109
|
-
/* unless we precompute multiples for just one or two points,
|
1110
|
-
* converting those into affine form is time well spent */
|
1111
|
-
mixed = 1;
|
1112
|
-
}
|
1113
1067
|
secrets = OPENSSL_malloc(num_points * sizeof(felem_bytearray));
|
1114
1068
|
pre_comp = OPENSSL_malloc(num_points * sizeof(felem[17][3]));
|
1115
|
-
if (mixed) {
|
1116
|
-
tmp_felems = OPENSSL_malloc((num_points * 17 + 1) * sizeof(felem));
|
1117
|
-
}
|
1118
1069
|
if (secrets == NULL ||
|
1119
|
-
pre_comp == NULL
|
1120
|
-
(mixed && tmp_felems == NULL)) {
|
1070
|
+
pre_comp == NULL) {
|
1121
1071
|
OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
|
1122
1072
|
goto err;
|
1123
1073
|
}
|
@@ -1126,7 +1076,7 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1126
1076
|
* i.e., they contribute nothing to the linear combination */
|
1127
1077
|
memset(secrets, 0, num_points * sizeof(felem_bytearray));
|
1128
1078
|
memset(pre_comp, 0, num_points * 17 * 3 * sizeof(felem));
|
1129
|
-
for (i = 0; i < num_points; ++i) {
|
1079
|
+
for (size_t i = 0; i < num_points; ++i) {
|
1130
1080
|
if (i == num) {
|
1131
1081
|
/* the generator */
|
1132
1082
|
p = EC_GROUP_get0_generator(group);
|
@@ -1138,6 +1088,7 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1138
1088
|
}
|
1139
1089
|
|
1140
1090
|
if (p_scalar != NULL && p != NULL) {
|
1091
|
+
size_t num_bytes;
|
1141
1092
|
/* reduce g_scalar to 0 <= g_scalar < 2^224 */
|
1142
1093
|
if (BN_num_bits(p_scalar) > 224 || BN_is_negative(p_scalar)) {
|
1143
1094
|
/* this is an unusual input, and we don't guarantee
|
@@ -1163,7 +1114,7 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1163
1114
|
felem_assign(pre_comp[i][1][1], y_out);
|
1164
1115
|
felem_assign(pre_comp[i][1][2], z_out);
|
1165
1116
|
|
1166
|
-
for (j = 2; j <= 16; ++j) {
|
1117
|
+
for (size_t j = 2; j <= 16; ++j) {
|
1167
1118
|
if (j & 1) {
|
1168
1119
|
point_add(pre_comp[i][j][0], pre_comp[i][j][1], pre_comp[i][j][2],
|
1169
1120
|
pre_comp[i][1][0], pre_comp[i][1][1], pre_comp[i][1][2],
|
@@ -1177,14 +1128,11 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1177
1128
|
}
|
1178
1129
|
}
|
1179
1130
|
}
|
1180
|
-
|
1181
|
-
if (mixed) {
|
1182
|
-
make_points_affine(num_points * 17, pre_comp[0], tmp_felems);
|
1183
|
-
}
|
1184
1131
|
}
|
1185
1132
|
|
1186
1133
|
if (g_scalar != NULL) {
|
1187
1134
|
memset(g_secret, 0, sizeof(g_secret));
|
1135
|
+
size_t num_bytes;
|
1188
1136
|
/* reduce g_scalar to 0 <= g_scalar < 2^224 */
|
1189
1137
|
if (BN_num_bits(g_scalar) > 224 || BN_is_negative(g_scalar)) {
|
1190
1138
|
/* this is an unusual input, and we don't guarantee constant-timeness */
|
@@ -1200,7 +1148,7 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
|
|
1200
1148
|
flip_endian(g_secret, tmp, num_bytes);
|
1201
1149
|
}
|
1202
1150
|
batch_mul(x_out, y_out, z_out, (const felem_bytearray(*))secrets,
|
1203
|
-
num_points, g_scalar != NULL ? g_secret : NULL,
|
1151
|
+
num_points, g_scalar != NULL ? g_secret : NULL,
|
1204
1152
|
(const felem(*)[17][3])pre_comp);
|
1205
1153
|
|
1206
1154
|
/* reduce the output to its unique minimal representation */
|
@@ -1220,25 +1168,20 @@ err:
|
|
1220
1168
|
BN_CTX_free(new_ctx);
|
1221
1169
|
OPENSSL_free(secrets);
|
1222
1170
|
OPENSSL_free(pre_comp);
|
1223
|
-
OPENSSL_free(tmp_felems);
|
1224
1171
|
return ret;
|
1225
1172
|
}
|
1226
1173
|
|
1227
|
-
const EC_METHOD
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1238
|
-
|
1239
|
-
0 /* field_set_to_one */};
|
1240
|
-
|
1241
|
-
return &ret;
|
1242
|
-
}
|
1174
|
+
const EC_METHOD EC_GFp_nistp224_method = {
|
1175
|
+
ec_GFp_simple_group_init,
|
1176
|
+
ec_GFp_simple_group_finish,
|
1177
|
+
ec_GFp_simple_group_copy,
|
1178
|
+
ec_GFp_simple_group_set_curve,
|
1179
|
+
ec_GFp_nistp224_point_get_affine_coordinates,
|
1180
|
+
ec_GFp_nistp224_points_mul,
|
1181
|
+
ec_GFp_simple_field_mul,
|
1182
|
+
ec_GFp_simple_field_sqr,
|
1183
|
+
NULL /* field_encode */,
|
1184
|
+
NULL /* field_decode */,
|
1185
|
+
};
|
1243
1186
|
|
1244
1187
|
#endif /* 64_BIT && !WINDOWS && !SMALL */
|