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
@@ -54,20 +54,28 @@ typedef struct {
|
|
54
54
|
|
55
55
|
typedef P256_POINT_AFFINE PRECOMP256_ROW[64];
|
56
56
|
|
57
|
-
/*
|
58
|
-
|
59
|
-
|
57
|
+
/* Arithmetic on field elements using Almost Montgomery Multiplication. The
|
58
|
+
* "almost" means, in particular, that the inputs and outputs of these
|
59
|
+
* functions are in the range [0, 2**BN_BITS2), not [0, P). Only
|
60
|
+
* |ecp_nistz256_from_mont| outputs a fully reduced value in [0, P). Almost
|
61
|
+
* Montgomery Arithmetic is described clearly in "Efficient Software
|
62
|
+
* Implementations of Modular Exponentiation" by Shay Gueron. */
|
63
|
+
|
64
|
+
/* Modular neg: res = -a mod P, where res is not fully reduced. */
|
60
65
|
void ecp_nistz256_neg(BN_ULONG res[P256_LIMBS], const BN_ULONG a[P256_LIMBS]);
|
61
|
-
/* Montgomery mul: res = a*b*2^-256 mod P */
|
66
|
+
/* Montgomery mul: res = a*b*2^-256 mod P, where res is not fully reduced. */
|
62
67
|
void ecp_nistz256_mul_mont(BN_ULONG res[P256_LIMBS],
|
63
68
|
const BN_ULONG a[P256_LIMBS],
|
64
69
|
const BN_ULONG b[P256_LIMBS]);
|
65
|
-
/* Montgomery sqr: res = a*a*2^-256 mod P */
|
70
|
+
/* Montgomery sqr: res = a*a*2^-256 mod P, where res is not fully reduced. */
|
66
71
|
void ecp_nistz256_sqr_mont(BN_ULONG res[P256_LIMBS],
|
67
72
|
const BN_ULONG a[P256_LIMBS]);
|
68
|
-
/* Convert a number from Montgomery domain, by multiplying with 1
|
73
|
+
/* Convert a number from Montgomery domain, by multiplying with 1, where res
|
74
|
+
* will be fully reduced mod P. */
|
69
75
|
void ecp_nistz256_from_mont(BN_ULONG res[P256_LIMBS],
|
70
76
|
const BN_ULONG in[P256_LIMBS]);
|
77
|
+
|
78
|
+
|
71
79
|
/* Functions that perform constant time access to the precomputed tables */
|
72
80
|
void ecp_nistz256_select_w5(P256_POINT *val, const P256_POINT *in_t, int index);
|
73
81
|
void ecp_nistz256_select_w7(P256_POINT_AFFINE *val,
|
@@ -205,9 +213,7 @@ static void ecp_nistz256_mod_inverse(BN_ULONG r[P256_LIMBS],
|
|
205
213
|
|
206
214
|
ecp_nistz256_sqr_mont(res, res);
|
207
215
|
ecp_nistz256_sqr_mont(res, res);
|
208
|
-
ecp_nistz256_mul_mont(
|
209
|
-
|
210
|
-
memcpy(r, res, sizeof(res));
|
216
|
+
ecp_nistz256_mul_mont(r, res, in);
|
211
217
|
}
|
212
218
|
|
213
219
|
/* ecp_nistz256_bignum_to_field_elem copies the contents of |in| to |out| and
|
@@ -314,7 +320,7 @@ static int ecp_nistz256_windowed_mul(const EC_GROUP *group, P256_POINT *r,
|
|
314
320
|
ecp_nistz256_point_double(&row[10 - 1], &row[5 - 1]);
|
315
321
|
ecp_nistz256_point_add(&row[15 - 1], &row[14 - 1], &row[1 - 1]);
|
316
322
|
ecp_nistz256_point_add(&row[11 - 1], &row[10 - 1], &row[1 - 1]);
|
317
|
-
|
323
|
+
ecp_nistz256_point_double(&row[16 - 1], &row[8 - 1]);
|
318
324
|
|
319
325
|
BN_ULONG tmp[P256_LIMBS];
|
320
326
|
alignas(32) P256_POINT h;
|
@@ -390,17 +396,6 @@ static int ecp_nistz256_points_mul(
|
|
390
396
|
BN_CTX *new_ctx = NULL;
|
391
397
|
int ctx_started = 0;
|
392
398
|
|
393
|
-
/* Need 256 bits for space for all coordinates. */
|
394
|
-
if (bn_wexpand(&r->X, P256_LIMBS) == NULL ||
|
395
|
-
bn_wexpand(&r->Y, P256_LIMBS) == NULL ||
|
396
|
-
bn_wexpand(&r->Z, P256_LIMBS) == NULL) {
|
397
|
-
OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
|
398
|
-
goto err;
|
399
|
-
}
|
400
|
-
r->X.top = P256_LIMBS;
|
401
|
-
r->Y.top = P256_LIMBS;
|
402
|
-
r->Z.top = P256_LIMBS;
|
403
|
-
|
404
399
|
if (g_scalar != NULL) {
|
405
400
|
if (BN_num_bits(g_scalar) > 256 || BN_is_negative(g_scalar)) {
|
406
401
|
if (ctx == NULL) {
|
@@ -494,15 +489,12 @@ static int ecp_nistz256_points_mul(
|
|
494
489
|
}
|
495
490
|
}
|
496
491
|
|
497
|
-
memcpy(r->X.d, p.p.X, sizeof(p.p.X));
|
498
|
-
memcpy(r->Y.d, p.p.Y, sizeof(p.p.Y));
|
499
|
-
memcpy(r->Z.d, p.p.Z, sizeof(p.p.Z));
|
500
|
-
|
501
492
|
/* Not constant-time, but we're only operating on the public output. */
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
493
|
+
if (!bn_set_words(&r->X, p.p.X, P256_LIMBS) ||
|
494
|
+
!bn_set_words(&r->Y, p.p.Y, P256_LIMBS) ||
|
495
|
+
!bn_set_words(&r->Z, p.p.Z, P256_LIMBS)) {
|
496
|
+
return 0;
|
497
|
+
}
|
506
498
|
|
507
499
|
ret = 1;
|
508
500
|
|
@@ -518,8 +510,6 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point,
|
|
518
510
|
BIGNUM *x, BIGNUM *y, BN_CTX *ctx) {
|
519
511
|
BN_ULONG z_inv2[P256_LIMBS];
|
520
512
|
BN_ULONG z_inv3[P256_LIMBS];
|
521
|
-
BN_ULONG x_aff[P256_LIMBS];
|
522
|
-
BN_ULONG y_aff[P256_LIMBS];
|
523
513
|
BN_ULONG point_x[P256_LIMBS], point_y[P256_LIMBS], point_z[P256_LIMBS];
|
524
514
|
|
525
515
|
if (EC_POINT_is_at_infinity(group, point)) {
|
@@ -536,51 +526,49 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point,
|
|
536
526
|
|
537
527
|
ecp_nistz256_mod_inverse(z_inv3, point_z);
|
538
528
|
ecp_nistz256_sqr_mont(z_inv2, z_inv3);
|
539
|
-
|
529
|
+
|
530
|
+
/* Unlike the |BN_mod_mul_montgomery|-based implementation, we cannot factor
|
531
|
+
* out the two calls to |ecp_nistz256_from_mont| into one call, because
|
532
|
+
* |ecp_nistz256_from_mont| must be the last operation to ensure that the
|
533
|
+
* result is fully reduced mod P. */
|
540
534
|
|
541
535
|
if (x != NULL) {
|
542
|
-
|
536
|
+
BN_ULONG x_aff[P256_LIMBS];
|
537
|
+
ecp_nistz256_mul_mont(x_aff, z_inv2, point_x);
|
538
|
+
ecp_nistz256_from_mont(x_aff, x_aff);
|
539
|
+
if (!bn_set_words(x, x_aff, P256_LIMBS)) {
|
543
540
|
OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
|
544
541
|
return 0;
|
545
542
|
}
|
546
|
-
x->top = P256_LIMBS;
|
547
|
-
ecp_nistz256_from_mont(x->d, x_aff);
|
548
|
-
bn_correct_top(x);
|
549
543
|
}
|
550
544
|
|
551
545
|
if (y != NULL) {
|
546
|
+
BN_ULONG y_aff[P256_LIMBS];
|
552
547
|
ecp_nistz256_mul_mont(z_inv3, z_inv3, z_inv2);
|
553
548
|
ecp_nistz256_mul_mont(y_aff, z_inv3, point_y);
|
554
|
-
|
549
|
+
ecp_nistz256_from_mont(y_aff, y_aff);
|
550
|
+
if (!bn_set_words(y, y_aff, P256_LIMBS)) {
|
555
551
|
OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
|
556
552
|
return 0;
|
557
553
|
}
|
558
|
-
y->top = P256_LIMBS;
|
559
|
-
ecp_nistz256_from_mont(y->d, y_aff);
|
560
|
-
bn_correct_top(y);
|
561
554
|
}
|
562
555
|
|
563
556
|
return 1;
|
564
557
|
}
|
565
558
|
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
ec_GFp_mont_field_set_to_one,
|
580
|
-
};
|
581
|
-
|
582
|
-
return &ret;
|
583
|
-
}
|
559
|
+
|
560
|
+
const EC_METHOD EC_GFp_nistz256_method = {
|
561
|
+
ec_GFp_mont_group_init,
|
562
|
+
ec_GFp_mont_group_finish,
|
563
|
+
ec_GFp_mont_group_copy,
|
564
|
+
ec_GFp_mont_group_set_curve,
|
565
|
+
ecp_nistz256_get_affine,
|
566
|
+
ecp_nistz256_points_mul,
|
567
|
+
ec_GFp_mont_field_mul,
|
568
|
+
ec_GFp_mont_field_sqr,
|
569
|
+
ec_GFp_mont_field_encode,
|
570
|
+
ec_GFp_mont_field_decode,
|
571
|
+
};
|
584
572
|
|
585
573
|
#endif /* !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && \
|
586
574
|
!defined(OPENSSL_SMALL) */
|
@@ -82,16 +82,16 @@
|
|
82
82
|
* field_sqr methods will be used for multiplication, and field_encode and
|
83
83
|
* field_decode (if defined) will be used for converting between
|
84
84
|
* representations.
|
85
|
-
|
86
|
-
* Functions
|
87
|
-
*
|
88
|
-
*
|
89
|
-
* 'encoding' means multiplying by some factor R). */
|
85
|
+
*
|
86
|
+
* Functions here specifically assume that if a non-trivial representation is
|
87
|
+
* used, it is a Montgomery representation (i.e. 'encoding' means multiplying
|
88
|
+
* by some factor R). */
|
90
89
|
|
91
90
|
int ec_GFp_simple_group_init(EC_GROUP *group) {
|
92
91
|
BN_init(&group->field);
|
93
92
|
BN_init(&group->a);
|
94
93
|
BN_init(&group->b);
|
94
|
+
BN_init(&group->one);
|
95
95
|
group->a_is_minus3 = 0;
|
96
96
|
return 1;
|
97
97
|
}
|
@@ -100,12 +100,14 @@ void ec_GFp_simple_group_finish(EC_GROUP *group) {
|
|
100
100
|
BN_free(&group->field);
|
101
101
|
BN_free(&group->a);
|
102
102
|
BN_free(&group->b);
|
103
|
+
BN_free(&group->one);
|
103
104
|
}
|
104
105
|
|
105
106
|
int ec_GFp_simple_group_copy(EC_GROUP *dest, const EC_GROUP *src) {
|
106
107
|
if (!BN_copy(&dest->field, &src->field) ||
|
107
108
|
!BN_copy(&dest->a, &src->a) ||
|
108
|
-
!BN_copy(&dest->b, &src->b)
|
109
|
+
!BN_copy(&dest->b, &src->b) ||
|
110
|
+
!BN_copy(&dest->one, &src->one)) {
|
109
111
|
return 0;
|
110
112
|
}
|
111
113
|
|
@@ -172,6 +174,14 @@ int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p,
|
|
172
174
|
}
|
173
175
|
group->a_is_minus3 = (0 == BN_cmp(tmp_a, &group->field));
|
174
176
|
|
177
|
+
if (group->meth->field_encode != NULL) {
|
178
|
+
if (!group->meth->field_encode(group, &group->one, BN_value_one(), ctx)) {
|
179
|
+
goto err;
|
180
|
+
}
|
181
|
+
} else if (!BN_copy(&group->one, BN_value_one())) {
|
182
|
+
goto err;
|
183
|
+
}
|
184
|
+
|
175
185
|
ret = 1;
|
176
186
|
|
177
187
|
err:
|
@@ -228,7 +238,6 @@ int ec_GFp_simple_point_init(EC_POINT *point) {
|
|
228
238
|
BN_init(&point->X);
|
229
239
|
BN_init(&point->Y);
|
230
240
|
BN_init(&point->Z);
|
231
|
-
point->Z_is_one = 0;
|
232
241
|
|
233
242
|
return 1;
|
234
243
|
}
|
@@ -243,7 +252,6 @@ void ec_GFp_simple_point_clear_finish(EC_POINT *point) {
|
|
243
252
|
BN_clear_free(&point->X);
|
244
253
|
BN_clear_free(&point->Y);
|
245
254
|
BN_clear_free(&point->Z);
|
246
|
-
point->Z_is_one = 0;
|
247
255
|
}
|
248
256
|
|
249
257
|
int ec_GFp_simple_point_copy(EC_POINT *dest, const EC_POINT *src) {
|
@@ -252,18 +260,32 @@ int ec_GFp_simple_point_copy(EC_POINT *dest, const EC_POINT *src) {
|
|
252
260
|
!BN_copy(&dest->Z, &src->Z)) {
|
253
261
|
return 0;
|
254
262
|
}
|
255
|
-
dest->Z_is_one = src->Z_is_one;
|
256
263
|
|
257
264
|
return 1;
|
258
265
|
}
|
259
266
|
|
260
267
|
int ec_GFp_simple_point_set_to_infinity(const EC_GROUP *group,
|
261
268
|
EC_POINT *point) {
|
262
|
-
point->Z_is_one = 0;
|
263
269
|
BN_zero(&point->Z);
|
264
270
|
return 1;
|
265
271
|
}
|
266
272
|
|
273
|
+
static int set_Jprojective_coordinate_GFp(const EC_GROUP *group, BIGNUM *out,
|
274
|
+
const BIGNUM *in, BN_CTX *ctx) {
|
275
|
+
if (in == NULL) {
|
276
|
+
return 1;
|
277
|
+
}
|
278
|
+
if (BN_is_negative(in) ||
|
279
|
+
BN_cmp(in, &group->field) >= 0) {
|
280
|
+
OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE);
|
281
|
+
return 0;
|
282
|
+
}
|
283
|
+
if (group->meth->field_encode) {
|
284
|
+
return group->meth->field_encode(group, out, in, ctx);
|
285
|
+
}
|
286
|
+
return BN_copy(out, in) != NULL;
|
287
|
+
}
|
288
|
+
|
267
289
|
int ec_GFp_simple_set_Jprojective_coordinates_GFp(
|
268
290
|
const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, const BIGNUM *y,
|
269
291
|
const BIGNUM *z, BN_CTX *ctx) {
|
@@ -277,43 +299,10 @@ int ec_GFp_simple_set_Jprojective_coordinates_GFp(
|
|
277
299
|
}
|
278
300
|
}
|
279
301
|
|
280
|
-
if (x
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
if (group->meth->field_encode &&
|
285
|
-
!group->meth->field_encode(group, &point->X, &point->X, ctx)) {
|
286
|
-
goto err;
|
287
|
-
}
|
288
|
-
}
|
289
|
-
|
290
|
-
if (y != NULL) {
|
291
|
-
if (!BN_nnmod(&point->Y, y, &group->field, ctx)) {
|
292
|
-
goto err;
|
293
|
-
}
|
294
|
-
if (group->meth->field_encode &&
|
295
|
-
!group->meth->field_encode(group, &point->Y, &point->Y, ctx)) {
|
296
|
-
goto err;
|
297
|
-
}
|
298
|
-
}
|
299
|
-
|
300
|
-
if (z != NULL) {
|
301
|
-
int Z_is_one;
|
302
|
-
|
303
|
-
if (!BN_nnmod(&point->Z, z, &group->field, ctx)) {
|
304
|
-
goto err;
|
305
|
-
}
|
306
|
-
Z_is_one = BN_is_one(&point->Z);
|
307
|
-
if (group->meth->field_encode) {
|
308
|
-
if (Z_is_one && (group->meth->field_set_to_one != 0)) {
|
309
|
-
if (!group->meth->field_set_to_one(group, &point->Z, ctx)) {
|
310
|
-
goto err;
|
311
|
-
}
|
312
|
-
} else if (!group->meth->field_encode(group, &point->Z, &point->Z, ctx)) {
|
313
|
-
goto err;
|
314
|
-
}
|
315
|
-
}
|
316
|
-
point->Z_is_one = Z_is_one;
|
302
|
+
if (!set_Jprojective_coordinate_GFp(group, &point->X, x, ctx) ||
|
303
|
+
!set_Jprojective_coordinate_GFp(group, &point->Y, y, ctx) ||
|
304
|
+
!set_Jprojective_coordinate_GFp(group, &point->Z, z, ctx)) {
|
305
|
+
goto err;
|
317
306
|
}
|
318
307
|
|
319
308
|
ret = 1;
|
@@ -379,109 +368,6 @@ int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group,
|
|
379
368
|
BN_value_one(), ctx);
|
380
369
|
}
|
381
370
|
|
382
|
-
int ec_GFp_simple_point_get_affine_coordinates(const EC_GROUP *group,
|
383
|
-
const EC_POINT *point, BIGNUM *x,
|
384
|
-
BIGNUM *y, BN_CTX *ctx) {
|
385
|
-
BN_CTX *new_ctx = NULL;
|
386
|
-
BIGNUM *Z, *Z_1, *Z_2, *Z_3;
|
387
|
-
const BIGNUM *Z_;
|
388
|
-
int ret = 0;
|
389
|
-
|
390
|
-
if (EC_POINT_is_at_infinity(group, point)) {
|
391
|
-
OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
|
392
|
-
return 0;
|
393
|
-
}
|
394
|
-
|
395
|
-
if (ctx == NULL) {
|
396
|
-
ctx = new_ctx = BN_CTX_new();
|
397
|
-
if (ctx == NULL) {
|
398
|
-
return 0;
|
399
|
-
}
|
400
|
-
}
|
401
|
-
|
402
|
-
BN_CTX_start(ctx);
|
403
|
-
Z = BN_CTX_get(ctx);
|
404
|
-
Z_1 = BN_CTX_get(ctx);
|
405
|
-
Z_2 = BN_CTX_get(ctx);
|
406
|
-
Z_3 = BN_CTX_get(ctx);
|
407
|
-
if (Z == NULL || Z_1 == NULL || Z_2 == NULL || Z_3 == NULL) {
|
408
|
-
goto err;
|
409
|
-
}
|
410
|
-
|
411
|
-
/* transform (X, Y, Z) into (x, y) := (X/Z^2, Y/Z^3) */
|
412
|
-
|
413
|
-
if (group->meth->field_decode) {
|
414
|
-
if (!group->meth->field_decode(group, Z, &point->Z, ctx)) {
|
415
|
-
goto err;
|
416
|
-
}
|
417
|
-
Z_ = Z;
|
418
|
-
} else {
|
419
|
-
Z_ = &point->Z;
|
420
|
-
}
|
421
|
-
|
422
|
-
if (BN_is_one(Z_)) {
|
423
|
-
if (group->meth->field_decode) {
|
424
|
-
if (x != NULL && !group->meth->field_decode(group, x, &point->X, ctx)) {
|
425
|
-
goto err;
|
426
|
-
}
|
427
|
-
if (y != NULL && !group->meth->field_decode(group, y, &point->Y, ctx)) {
|
428
|
-
goto err;
|
429
|
-
}
|
430
|
-
} else {
|
431
|
-
if (x != NULL && !BN_copy(x, &point->X)) {
|
432
|
-
goto err;
|
433
|
-
}
|
434
|
-
if (y != NULL && !BN_copy(y, &point->Y)) {
|
435
|
-
goto err;
|
436
|
-
}
|
437
|
-
}
|
438
|
-
} else {
|
439
|
-
if (!BN_mod_inverse(Z_1, Z_, &group->field, ctx)) {
|
440
|
-
OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
|
441
|
-
goto err;
|
442
|
-
}
|
443
|
-
|
444
|
-
if (group->meth->field_encode == 0) {
|
445
|
-
/* field_sqr works on standard representation */
|
446
|
-
if (!group->meth->field_sqr(group, Z_2, Z_1, ctx)) {
|
447
|
-
goto err;
|
448
|
-
}
|
449
|
-
} else if (!BN_mod_sqr(Z_2, Z_1, &group->field, ctx)) {
|
450
|
-
goto err;
|
451
|
-
}
|
452
|
-
|
453
|
-
/* in the Montgomery case, field_mul will cancel out Montgomery factor in
|
454
|
-
* X: */
|
455
|
-
if (x != NULL && !group->meth->field_mul(group, x, &point->X, Z_2, ctx)) {
|
456
|
-
goto err;
|
457
|
-
}
|
458
|
-
|
459
|
-
if (y != NULL) {
|
460
|
-
if (group->meth->field_encode == 0) {
|
461
|
-
/* field_mul works on standard representation */
|
462
|
-
if (!group->meth->field_mul(group, Z_3, Z_2, Z_1, ctx)) {
|
463
|
-
goto err;
|
464
|
-
}
|
465
|
-
} else if (!BN_mod_mul(Z_3, Z_2, Z_1, &group->field, ctx)) {
|
466
|
-
goto err;
|
467
|
-
}
|
468
|
-
|
469
|
-
/* in the Montgomery case, field_mul will cancel out Montgomery factor in
|
470
|
-
* Y: */
|
471
|
-
if (!group->meth->field_mul(group, y, &point->Y, Z_3, ctx)) {
|
472
|
-
goto err;
|
473
|
-
}
|
474
|
-
}
|
475
|
-
}
|
476
|
-
|
477
|
-
ret = 1;
|
478
|
-
|
479
|
-
err:
|
480
|
-
BN_CTX_end(ctx);
|
481
|
-
BN_CTX_free(new_ctx);
|
482
|
-
return ret;
|
483
|
-
}
|
484
|
-
|
485
371
|
int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
486
372
|
const EC_POINT *b, BN_CTX *ctx) {
|
487
373
|
int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *,
|
@@ -531,7 +417,9 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
531
417
|
*/
|
532
418
|
|
533
419
|
/* n1, n2 */
|
534
|
-
|
420
|
+
int b_Z_is_one = BN_cmp(&b->Z, &group->one) == 0;
|
421
|
+
|
422
|
+
if (b_Z_is_one) {
|
535
423
|
if (!BN_copy(n1, &a->X) || !BN_copy(n2, &a->Y)) {
|
536
424
|
goto end;
|
537
425
|
}
|
@@ -552,7 +440,8 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
552
440
|
}
|
553
441
|
|
554
442
|
/* n3, n4 */
|
555
|
-
|
443
|
+
int a_Z_is_one = BN_cmp(&a->Z, &group->one) == 0;
|
444
|
+
if (a_Z_is_one) {
|
556
445
|
if (!BN_copy(n3, &b->X) || !BN_copy(n4, &b->Y)) {
|
557
446
|
goto end;
|
558
447
|
}
|
@@ -590,7 +479,6 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
590
479
|
} else {
|
591
480
|
/* a is the inverse of b */
|
592
481
|
BN_zero(&r->Z);
|
593
|
-
r->Z_is_one = 0;
|
594
482
|
ret = 1;
|
595
483
|
goto end;
|
596
484
|
}
|
@@ -605,16 +493,16 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
605
493
|
/* 'n8' = n2 + n4 */
|
606
494
|
|
607
495
|
/* Z_r */
|
608
|
-
if (
|
496
|
+
if (a_Z_is_one && b_Z_is_one) {
|
609
497
|
if (!BN_copy(&r->Z, n5)) {
|
610
498
|
goto end;
|
611
499
|
}
|
612
500
|
} else {
|
613
|
-
if (
|
501
|
+
if (a_Z_is_one) {
|
614
502
|
if (!BN_copy(n0, &b->Z)) {
|
615
503
|
goto end;
|
616
504
|
}
|
617
|
-
} else if (
|
505
|
+
} else if (b_Z_is_one) {
|
618
506
|
if (!BN_copy(n0, &a->Z)) {
|
619
507
|
goto end;
|
620
508
|
}
|
@@ -625,7 +513,7 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
625
513
|
goto end;
|
626
514
|
}
|
627
515
|
}
|
628
|
-
|
516
|
+
|
629
517
|
/* Z_r = Z_a * Z_b * n5 */
|
630
518
|
|
631
519
|
/* X_r */
|
@@ -685,7 +573,6 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
685
573
|
|
686
574
|
if (EC_POINT_is_at_infinity(group, a)) {
|
687
575
|
BN_zero(&r->Z);
|
688
|
-
r->Z_is_one = 0;
|
689
576
|
return 1;
|
690
577
|
}
|
691
578
|
|
@@ -715,7 +602,7 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
715
602
|
*/
|
716
603
|
|
717
604
|
/* n1 */
|
718
|
-
if (a->
|
605
|
+
if (BN_cmp(&a->Z, &group->one) == 0) {
|
719
606
|
if (!field_sqr(group, n0, &a->X, ctx) ||
|
720
607
|
!BN_mod_lshift1_quick(n1, n0, p) ||
|
721
608
|
!BN_mod_add_quick(n0, n0, n1, p) ||
|
@@ -748,7 +635,7 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
748
635
|
}
|
749
636
|
|
750
637
|
/* Z_r */
|
751
|
-
if (a->
|
638
|
+
if (BN_cmp(&a->Z, &group->one) == 0) {
|
752
639
|
if (!BN_copy(n0, &a->Y)) {
|
753
640
|
goto err;
|
754
641
|
}
|
@@ -758,7 +645,6 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
758
645
|
if (!BN_mod_lshift1_quick(&r->Z, n0, p)) {
|
759
646
|
goto err;
|
760
647
|
}
|
761
|
-
r->Z_is_one = 0;
|
762
648
|
/* Z_r = 2 * Y_a * Z_a */
|
763
649
|
|
764
650
|
/* n2 */
|
@@ -810,7 +696,7 @@ int ec_GFp_simple_invert(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx) {
|
|
810
696
|
}
|
811
697
|
|
812
698
|
int ec_GFp_simple_is_at_infinity(const EC_GROUP *group, const EC_POINT *point) {
|
813
|
-
return
|
699
|
+
return BN_is_zero(&point->Z);
|
814
700
|
}
|
815
701
|
|
816
702
|
int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
|
@@ -821,7 +707,7 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
|
|
821
707
|
const BIGNUM *p;
|
822
708
|
BN_CTX *new_ctx = NULL;
|
823
709
|
BIGNUM *rh, *tmp, *Z4, *Z6;
|
824
|
-
int ret =
|
710
|
+
int ret = 0;
|
825
711
|
|
826
712
|
if (EC_POINT_is_at_infinity(group, point)) {
|
827
713
|
return 1;
|
@@ -834,7 +720,7 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
|
|
834
720
|
if (ctx == NULL) {
|
835
721
|
ctx = new_ctx = BN_CTX_new();
|
836
722
|
if (ctx == NULL) {
|
837
|
-
return
|
723
|
+
return 0;
|
838
724
|
}
|
839
725
|
}
|
840
726
|
|
@@ -862,7 +748,7 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
|
|
862
748
|
goto err;
|
863
749
|
}
|
864
750
|
|
865
|
-
if (
|
751
|
+
if (BN_cmp(&point->Z, &group->one) != 0) {
|
866
752
|
if (!field_sqr(group, tmp, &point->Z, ctx) ||
|
867
753
|
!field_sqr(group, Z4, tmp, ctx) ||
|
868
754
|
!field_mul(group, Z6, Z4, tmp, ctx)) {
|
@@ -891,8 +777,6 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
|
|
891
777
|
goto err;
|
892
778
|
}
|
893
779
|
} else {
|
894
|
-
/* point->Z_is_one */
|
895
|
-
|
896
780
|
/* rh := (rh + a)*X */
|
897
781
|
if (!BN_mod_add_quick(rh, rh, &group->a, p) ||
|
898
782
|
!field_mul(group, rh, rh, &point->X, ctx)) {
|
@@ -941,7 +825,10 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
|
|
941
825
|
return 1;
|
942
826
|
}
|
943
827
|
|
944
|
-
|
828
|
+
int a_Z_is_one = BN_cmp(&a->Z, &group->one) == 0;
|
829
|
+
int b_Z_is_one = BN_cmp(&b->Z, &group->one) == 0;
|
830
|
+
|
831
|
+
if (a_Z_is_one && b_Z_is_one) {
|
945
832
|
return ((BN_cmp(&a->X, &b->X) == 0) && BN_cmp(&a->Y, &b->Y) == 0) ? 0 : 1;
|
946
833
|
}
|
947
834
|
|
@@ -970,7 +857,7 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
|
|
970
857
|
* (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
|
971
858
|
*/
|
972
859
|
|
973
|
-
if (!
|
860
|
+
if (!b_Z_is_one) {
|
974
861
|
if (!field_sqr(group, Zb23, &b->Z, ctx) ||
|
975
862
|
!field_mul(group, tmp1, &a->X, Zb23, ctx)) {
|
976
863
|
goto end;
|
@@ -979,7 +866,7 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
|
|
979
866
|
} else {
|
980
867
|
tmp1_ = &a->X;
|
981
868
|
}
|
982
|
-
if (!
|
869
|
+
if (!a_Z_is_one) {
|
983
870
|
if (!field_sqr(group, Za23, &a->Z, ctx) ||
|
984
871
|
!field_mul(group, tmp2, &b->X, Za23, ctx)) {
|
985
872
|
goto end;
|
@@ -996,7 +883,7 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
|
|
996
883
|
}
|
997
884
|
|
998
885
|
|
999
|
-
if (!
|
886
|
+
if (!b_Z_is_one) {
|
1000
887
|
if (!field_mul(group, Zb23, Zb23, &b->Z, ctx) ||
|
1001
888
|
!field_mul(group, tmp1, &a->Y, Zb23, ctx)) {
|
1002
889
|
goto end;
|
@@ -1005,7 +892,7 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
|
|
1005
892
|
} else {
|
1006
893
|
tmp1_ = &a->Y;
|
1007
894
|
}
|
1008
|
-
if (!
|
895
|
+
if (!a_Z_is_one) {
|
1009
896
|
if (!field_mul(group, Za23, Za23, &a->Z, ctx) ||
|
1010
897
|
!field_mul(group, tmp2, &b->Y, Za23, ctx)) {
|
1011
898
|
goto end;
|
@@ -1036,7 +923,8 @@ int ec_GFp_simple_make_affine(const EC_GROUP *group, EC_POINT *point,
|
|
1036
923
|
BIGNUM *x, *y;
|
1037
924
|
int ret = 0;
|
1038
925
|
|
1039
|
-
if (point->
|
926
|
+
if (BN_cmp(&point->Z, &group->one) == 0 ||
|
927
|
+
EC_POINT_is_at_infinity(group, point)) {
|
1040
928
|
return 1;
|
1041
929
|
}
|
1042
930
|
|
@@ -1058,7 +946,7 @@ int ec_GFp_simple_make_affine(const EC_GROUP *group, EC_POINT *point,
|
|
1058
946
|
!EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)) {
|
1059
947
|
goto err;
|
1060
948
|
}
|
1061
|
-
if (
|
949
|
+
if (BN_cmp(&point->Z, &group->one) != 0) {
|
1062
950
|
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
1063
951
|
goto err;
|
1064
952
|
}
|
@@ -1076,7 +964,6 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
|
|
1076
964
|
BN_CTX *new_ctx = NULL;
|
1077
965
|
BIGNUM *tmp, *tmp_Z;
|
1078
966
|
BIGNUM **prod_Z = NULL;
|
1079
|
-
size_t i;
|
1080
967
|
int ret = 0;
|
1081
968
|
|
1082
969
|
if (num == 0) {
|
@@ -1102,7 +989,7 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
|
|
1102
989
|
goto err;
|
1103
990
|
}
|
1104
991
|
memset(prod_Z, 0, num * sizeof(prod_Z[0]));
|
1105
|
-
for (i = 0; i < num; i++) {
|
992
|
+
for (size_t i = 0; i < num; i++) {
|
1106
993
|
prod_Z[i] = BN_new();
|
1107
994
|
if (prod_Z[i] == NULL) {
|
1108
995
|
goto err;
|
@@ -1117,18 +1004,12 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
|
|
1117
1004
|
goto err;
|
1118
1005
|
}
|
1119
1006
|
} else {
|
1120
|
-
if (group->
|
1121
|
-
|
1122
|
-
goto err;
|
1123
|
-
}
|
1124
|
-
} else {
|
1125
|
-
if (!BN_one(prod_Z[0])) {
|
1126
|
-
goto err;
|
1127
|
-
}
|
1007
|
+
if (BN_copy(prod_Z[0], &group->one) == NULL) {
|
1008
|
+
goto err;
|
1128
1009
|
}
|
1129
1010
|
}
|
1130
1011
|
|
1131
|
-
for (i = 1; i < num; i++) {
|
1012
|
+
for (size_t i = 1; i < num; i++) {
|
1132
1013
|
if (!BN_is_zero(&points[i]->Z)) {
|
1133
1014
|
if (!group->meth->field_mul(group, prod_Z[i], prod_Z[i - 1],
|
1134
1015
|
&points[i]->Z, ctx)) {
|
@@ -1141,10 +1022,16 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
|
|
1141
1022
|
}
|
1142
1023
|
}
|
1143
1024
|
|
1144
|
-
/* Now use a single explicit inversion to replace every
|
1145
|
-
*
|
1146
|
-
|
1147
|
-
|
1025
|
+
/* Now use a single explicit inversion to replace every non-zero points[i]->Z
|
1026
|
+
* by its inverse. We use |BN_mod_inverse_odd| instead of doing a constant-
|
1027
|
+
* time inversion using Fermat's Little Theorem because this function is
|
1028
|
+
* usually only used for converting multiples of a public key point to
|
1029
|
+
* affine, and a public key point isn't secret. If we were to use Fermat's
|
1030
|
+
* Little Theorem then the cost of the inversion would usually be so high
|
1031
|
+
* that converting the multiples to affine would be counterproductive. */
|
1032
|
+
int no_inverse;
|
1033
|
+
if (!BN_mod_inverse_odd(tmp, &no_inverse, prod_Z[num - 1], &group->field,
|
1034
|
+
ctx)) {
|
1148
1035
|
OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
|
1149
1036
|
goto err;
|
1150
1037
|
}
|
@@ -1159,7 +1046,7 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
|
|
1159
1046
|
}
|
1160
1047
|
}
|
1161
1048
|
|
1162
|
-
for (i = num - 1; i > 0; --i) {
|
1049
|
+
for (size_t i = num - 1; i > 0; --i) {
|
1163
1050
|
/* Loop invariant: tmp is the product of the inverses of
|
1164
1051
|
* points[0]->Z .. points[i]->Z (zero-valued inputs skipped). */
|
1165
1052
|
if (BN_is_zero(&points[i]->Z)) {
|
@@ -1183,7 +1070,7 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
|
|
1183
1070
|
}
|
1184
1071
|
|
1185
1072
|
/* Finally, fix up the X and Y coordinates for all points. */
|
1186
|
-
for (i = 0; i < num; i++) {
|
1073
|
+
for (size_t i = 0; i < num; i++) {
|
1187
1074
|
EC_POINT *p = points[i];
|
1188
1075
|
|
1189
1076
|
if (!BN_is_zero(&p->Z)) {
|
@@ -1195,16 +1082,9 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
|
|
1195
1082
|
goto err;
|
1196
1083
|
}
|
1197
1084
|
|
1198
|
-
if (group->
|
1199
|
-
|
1200
|
-
goto err;
|
1201
|
-
}
|
1202
|
-
} else {
|
1203
|
-
if (!BN_one(&p->Z)) {
|
1204
|
-
goto err;
|
1205
|
-
}
|
1085
|
+
if (BN_copy(&p->Z, &group->one) == NULL) {
|
1086
|
+
goto err;
|
1206
1087
|
}
|
1207
|
-
p->Z_is_one = 1;
|
1208
1088
|
}
|
1209
1089
|
}
|
1210
1090
|
|
@@ -1214,7 +1094,7 @@ err:
|
|
1214
1094
|
BN_CTX_end(ctx);
|
1215
1095
|
BN_CTX_free(new_ctx);
|
1216
1096
|
if (prod_Z != NULL) {
|
1217
|
-
for (i = 0; i < num; i++) {
|
1097
|
+
for (size_t i = 0; i < num; i++) {
|
1218
1098
|
if (prod_Z[i] == NULL) {
|
1219
1099
|
break;
|
1220
1100
|
}
|