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
@@ -64,17 +64,19 @@
|
|
64
64
|
#if !defined(OPENSSL_NO_ASM) && (defined(OPENSSL_X86) || defined(OPENSSL_X86_64))
|
65
65
|
|
66
66
|
#include <inttypes.h>
|
67
|
-
#include <stdlib.h>
|
68
67
|
#include <stdio.h>
|
68
|
+
#include <stdlib.h>
|
69
69
|
#include <string.h>
|
70
70
|
|
71
71
|
#if defined(OPENSSL_WINDOWS)
|
72
|
-
|
72
|
+
OPENSSL_MSVC_PRAGMA(warning(push, 3))
|
73
73
|
#include <immintrin.h>
|
74
74
|
#include <intrin.h>
|
75
|
-
|
75
|
+
OPENSSL_MSVC_PRAGMA(warning(pop))
|
76
76
|
#endif
|
77
77
|
|
78
|
+
#include "internal.h"
|
79
|
+
|
78
80
|
|
79
81
|
/* OPENSSL_cpuid runs the cpuid instruction. |leaf| is passed in as EAX and ECX
|
80
82
|
* is set to zero. It writes EAX, EBX, ECX, and EDX to |*out_eax| through
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* Copyright (c)
|
1
|
+
/* Copyright (c) 2016, Google Inc.
|
2
2
|
*
|
3
3
|
* Permission to use, copy, modify, and/or distribute this software for any
|
4
4
|
* purpose with or without fee is hereby granted, provided that the above
|
@@ -12,17 +12,29 @@
|
|
12
12
|
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
13
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
14
|
|
15
|
-
#
|
16
|
-
#define OPENSSL_HEADER_SSL_TEST_SCOPED_TYPES_H
|
15
|
+
#include <openssl/cpu.h>
|
17
16
|
|
18
|
-
#
|
17
|
+
#if defined(OPENSSL_PPC64LE)
|
19
18
|
|
20
|
-
#include
|
19
|
+
#include <sys/auxv.h>
|
21
20
|
|
21
|
+
#include "internal.h"
|
22
22
|
|
23
|
-
using ScopedSSL = ScopedOpenSSLType<SSL, SSL_free>;
|
24
|
-
using ScopedSSL_CTX = ScopedOpenSSLType<SSL_CTX, SSL_CTX_free>;
|
25
|
-
using ScopedSSL_SESSION = ScopedOpenSSLType<SSL_SESSION, SSL_SESSION_free>;
|
26
23
|
|
24
|
+
#if !defined(PPC_FEATURE2_HAS_VCRYPTO)
|
25
|
+
/* PPC_FEATURE2_HAS_VCRYPTO was taken from section 4.1.2.3 of the “OpenPOWER
|
26
|
+
* ABI for Linux Supplement”. */
|
27
|
+
#define PPC_FEATURE2_HAS_VCRYPTO 0x02000000
|
28
|
+
#endif
|
27
29
|
|
28
|
-
|
30
|
+
static unsigned long g_ppc64le_hwcap2 = 0;
|
31
|
+
|
32
|
+
void OPENSSL_cpuid_setup(void) {
|
33
|
+
g_ppc64le_hwcap2 = getauxval(AT_HWCAP2);
|
34
|
+
}
|
35
|
+
|
36
|
+
int CRYPTO_is_PPC64LE_vcrypto_capable(void) {
|
37
|
+
return (g_ppc64le_hwcap2 & PPC_FEATURE2_HAS_VCRYPTO) != 0;
|
38
|
+
}
|
39
|
+
|
40
|
+
#endif /* OPENSSL_PPC64LE */
|
@@ -21,9 +21,11 @@
|
|
21
21
|
|
22
22
|
#if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_STATIC_ARMCAP) && \
|
23
23
|
(defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
|
24
|
-
defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
|
25
|
-
|
26
|
-
|
24
|
+
defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) || \
|
25
|
+
defined(OPENSSL_PPC64LE))
|
26
|
+
/* x86, x86_64, the ARMs and ppc64le need to record the result of a
|
27
|
+
* cpuid/getauxval call for the asm to work correctly, unless compiled without
|
28
|
+
* asm code. */
|
27
29
|
#define NEED_CPUID
|
28
30
|
|
29
31
|
#else
|
@@ -63,7 +65,7 @@ uint32_t OPENSSL_ia32cap_P[4] = {0};
|
|
63
65
|
|
64
66
|
uint32_t OPENSSL_armcap_P =
|
65
67
|
#if defined(OPENSSL_STATIC_ARMCAP_NEON) || defined(__ARM_NEON__)
|
66
|
-
ARMV7_NEON |
|
68
|
+
ARMV7_NEON |
|
67
69
|
#endif
|
68
70
|
#if defined(OPENSSL_STATIC_ARMCAP_AES)
|
69
71
|
ARMV8_AES |
|
@@ -79,10 +81,8 @@ uint32_t OPENSSL_armcap_P =
|
|
79
81
|
#endif
|
80
82
|
0;
|
81
83
|
|
82
|
-
#elif defined(__ARM_NEON__)
|
83
|
-
uint32_t OPENSSL_armcap_P = ARMV7_NEON | ARMV7_NEON_FUNCTIONAL;
|
84
84
|
#else
|
85
|
-
uint32_t OPENSSL_armcap_P =
|
85
|
+
uint32_t OPENSSL_armcap_P = 0;
|
86
86
|
#endif
|
87
87
|
|
88
88
|
#endif
|
@@ -125,6 +125,22 @@ void CRYPTO_library_init(void) {
|
|
125
125
|
#endif
|
126
126
|
}
|
127
127
|
|
128
|
+
int CRYPTO_is_confidential_build(void) {
|
129
|
+
#if defined(BORINGSSL_CONFIDENTIAL)
|
130
|
+
return 1;
|
131
|
+
#else
|
132
|
+
return 0;
|
133
|
+
#endif
|
134
|
+
}
|
135
|
+
|
136
|
+
int CRYPTO_has_asm(void) {
|
137
|
+
#if defined(OPENSSL_NO_ASM)
|
138
|
+
return 0;
|
139
|
+
#else
|
140
|
+
return 1;
|
141
|
+
#endif
|
142
|
+
}
|
143
|
+
|
128
144
|
const char *SSLeay_version(int unused) {
|
129
145
|
return "BoringSSL";
|
130
146
|
}
|
@@ -139,4 +155,10 @@ int CRYPTO_malloc_init(void) {
|
|
139
155
|
|
140
156
|
void ENGINE_load_builtin_engines(void) {}
|
141
157
|
|
158
|
+
int ENGINE_register_all_complete(void) {
|
159
|
+
return 1;
|
160
|
+
}
|
161
|
+
|
142
162
|
void OPENSSL_load_builtin_modules(void) {}
|
163
|
+
|
164
|
+
int FIPS_mode(void) { return 0; }
|
@@ -31,11 +31,10 @@
|
|
31
31
|
#include "internal.h"
|
32
32
|
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
typedef int32_t fe[10];
|
34
|
+
static const int64_t kBottom25Bits = INT64_C(0x1ffffff);
|
35
|
+
static const int64_t kBottom26Bits = INT64_C(0x3ffffff);
|
36
|
+
static const int64_t kTop39Bits = INT64_C(0xfffffffffe000000);
|
37
|
+
static const int64_t kTop38Bits = INT64_C(0xfffffffffc000000);
|
39
38
|
|
40
39
|
static uint64_t load_3(const uint8_t *in) {
|
41
40
|
uint64_t result;
|
@@ -77,17 +76,17 @@ static void fe_frombytes(fe h, const uint8_t *s) {
|
|
77
76
|
int64_t carry8;
|
78
77
|
int64_t carry9;
|
79
78
|
|
80
|
-
carry9 =
|
81
|
-
carry1 =
|
82
|
-
carry3 =
|
83
|
-
carry5 =
|
84
|
-
carry7 =
|
79
|
+
carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
|
80
|
+
carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
|
81
|
+
carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
|
82
|
+
carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
|
83
|
+
carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
|
85
84
|
|
86
|
-
carry0 =
|
87
|
-
carry2 =
|
88
|
-
carry4 =
|
89
|
-
carry6 =
|
90
|
-
carry8 =
|
85
|
+
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
86
|
+
carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
|
87
|
+
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
88
|
+
carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
|
89
|
+
carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
|
91
90
|
|
92
91
|
h[0] = h0;
|
93
92
|
h[1] = h1;
|
@@ -135,16 +134,6 @@ static void fe_tobytes(uint8_t *s, const fe h) {
|
|
135
134
|
int32_t h8 = h[8];
|
136
135
|
int32_t h9 = h[9];
|
137
136
|
int32_t q;
|
138
|
-
int32_t carry0;
|
139
|
-
int32_t carry1;
|
140
|
-
int32_t carry2;
|
141
|
-
int32_t carry3;
|
142
|
-
int32_t carry4;
|
143
|
-
int32_t carry5;
|
144
|
-
int32_t carry6;
|
145
|
-
int32_t carry7;
|
146
|
-
int32_t carry8;
|
147
|
-
int32_t carry9;
|
148
137
|
|
149
138
|
q = (19 * h9 + (((int32_t) 1) << 24)) >> 25;
|
150
139
|
q = (h0 + q) >> 26;
|
@@ -162,16 +151,16 @@ static void fe_tobytes(uint8_t *s, const fe h) {
|
|
162
151
|
h0 += 19 * q;
|
163
152
|
/* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */
|
164
153
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
154
|
+
h1 += h0 >> 26; h0 &= kBottom26Bits;
|
155
|
+
h2 += h1 >> 25; h1 &= kBottom25Bits;
|
156
|
+
h3 += h2 >> 26; h2 &= kBottom26Bits;
|
157
|
+
h4 += h3 >> 25; h3 &= kBottom25Bits;
|
158
|
+
h5 += h4 >> 26; h4 &= kBottom26Bits;
|
159
|
+
h6 += h5 >> 25; h5 &= kBottom25Bits;
|
160
|
+
h7 += h6 >> 26; h6 &= kBottom26Bits;
|
161
|
+
h8 += h7 >> 25; h7 &= kBottom25Bits;
|
162
|
+
h9 += h8 >> 26; h8 &= kBottom26Bits;
|
163
|
+
h9 &= kBottom25Bits;
|
175
164
|
/* h10 = carry9 */
|
176
165
|
|
177
166
|
/* Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.
|
@@ -182,32 +171,32 @@ static void fe_tobytes(uint8_t *s, const fe h) {
|
|
182
171
|
s[0] = h0 >> 0;
|
183
172
|
s[1] = h0 >> 8;
|
184
173
|
s[2] = h0 >> 16;
|
185
|
-
s[3] = (h0 >> 24) | (h1 << 2);
|
174
|
+
s[3] = (h0 >> 24) | ((uint32_t)(h1) << 2);
|
186
175
|
s[4] = h1 >> 6;
|
187
176
|
s[5] = h1 >> 14;
|
188
|
-
s[6] = (h1 >> 22) | (h2 << 3);
|
177
|
+
s[6] = (h1 >> 22) | ((uint32_t)(h2) << 3);
|
189
178
|
s[7] = h2 >> 5;
|
190
179
|
s[8] = h2 >> 13;
|
191
|
-
s[9] = (h2 >> 21) | (h3 << 5);
|
180
|
+
s[9] = (h2 >> 21) | ((uint32_t)(h3) << 5);
|
192
181
|
s[10] = h3 >> 3;
|
193
182
|
s[11] = h3 >> 11;
|
194
|
-
s[12] = (h3 >> 19) | (h4 << 6);
|
183
|
+
s[12] = (h3 >> 19) | ((uint32_t)(h4) << 6);
|
195
184
|
s[13] = h4 >> 2;
|
196
185
|
s[14] = h4 >> 10;
|
197
186
|
s[15] = h4 >> 18;
|
198
187
|
s[16] = h5 >> 0;
|
199
188
|
s[17] = h5 >> 8;
|
200
189
|
s[18] = h5 >> 16;
|
201
|
-
s[19] = (h5 >> 24) | (h6 << 1);
|
190
|
+
s[19] = (h5 >> 24) | ((uint32_t)(h6) << 1);
|
202
191
|
s[20] = h6 >> 7;
|
203
192
|
s[21] = h6 >> 15;
|
204
|
-
s[22] = (h6 >> 23) | (h7 << 3);
|
193
|
+
s[22] = (h6 >> 23) | ((uint32_t)(h7) << 3);
|
205
194
|
s[23] = h7 >> 5;
|
206
195
|
s[24] = h7 >> 13;
|
207
|
-
s[25] = (h7 >> 21) | (h8 << 4);
|
196
|
+
s[25] = (h7 >> 21) | ((uint32_t)(h8) << 4);
|
208
197
|
s[26] = h8 >> 4;
|
209
198
|
s[27] = h8 >> 12;
|
210
|
-
s[28] = (h8 >> 20) | (h9 << 6);
|
199
|
+
s[28] = (h8 >> 20) | ((uint32_t)(h9) << 6);
|
211
200
|
s[29] = h9 >> 2;
|
212
201
|
s[30] = h9 >> 10;
|
213
202
|
s[31] = h9 >> 18;
|
@@ -447,46 +436,46 @@ static void fe_mul(fe h, const fe f, const fe g) {
|
|
447
436
|
* |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19))
|
448
437
|
* i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9 */
|
449
438
|
|
450
|
-
carry0 =
|
451
|
-
carry4 =
|
439
|
+
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
440
|
+
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
452
441
|
/* |h0| <= 2^25 */
|
453
442
|
/* |h4| <= 2^25 */
|
454
443
|
/* |h1| <= 1.71*2^59 */
|
455
444
|
/* |h5| <= 1.71*2^59 */
|
456
445
|
|
457
|
-
carry1 =
|
458
|
-
carry5 =
|
446
|
+
carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
|
447
|
+
carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
|
459
448
|
/* |h1| <= 2^24; from now on fits into int32 */
|
460
449
|
/* |h5| <= 2^24; from now on fits into int32 */
|
461
450
|
/* |h2| <= 1.41*2^60 */
|
462
451
|
/* |h6| <= 1.41*2^60 */
|
463
452
|
|
464
|
-
carry2 =
|
465
|
-
carry6 =
|
453
|
+
carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
|
454
|
+
carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
|
466
455
|
/* |h2| <= 2^25; from now on fits into int32 unchanged */
|
467
456
|
/* |h6| <= 2^25; from now on fits into int32 unchanged */
|
468
457
|
/* |h3| <= 1.71*2^59 */
|
469
458
|
/* |h7| <= 1.71*2^59 */
|
470
459
|
|
471
|
-
carry3 =
|
472
|
-
carry7 =
|
460
|
+
carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
|
461
|
+
carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
|
473
462
|
/* |h3| <= 2^24; from now on fits into int32 unchanged */
|
474
463
|
/* |h7| <= 2^24; from now on fits into int32 unchanged */
|
475
464
|
/* |h4| <= 1.72*2^34 */
|
476
465
|
/* |h8| <= 1.41*2^60 */
|
477
466
|
|
478
|
-
carry4 =
|
479
|
-
carry8 =
|
467
|
+
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
468
|
+
carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
|
480
469
|
/* |h4| <= 2^25; from now on fits into int32 unchanged */
|
481
470
|
/* |h8| <= 2^25; from now on fits into int32 unchanged */
|
482
471
|
/* |h5| <= 1.01*2^24 */
|
483
472
|
/* |h9| <= 1.71*2^59 */
|
484
473
|
|
485
|
-
carry9 =
|
474
|
+
carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
|
486
475
|
/* |h9| <= 2^24; from now on fits into int32 unchanged */
|
487
476
|
/* |h0| <= 1.1*2^39 */
|
488
477
|
|
489
|
-
carry0 =
|
478
|
+
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
490
479
|
/* |h0| <= 2^25; from now on fits into int32 unchanged */
|
491
480
|
/* |h1| <= 1.01*2^24 */
|
492
481
|
|
@@ -612,24 +601,24 @@ static void fe_sq(fe h, const fe f) {
|
|
612
601
|
int64_t carry8;
|
613
602
|
int64_t carry9;
|
614
603
|
|
615
|
-
carry0 =
|
616
|
-
carry4 =
|
604
|
+
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
605
|
+
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
617
606
|
|
618
|
-
carry1 =
|
619
|
-
carry5 =
|
607
|
+
carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
|
608
|
+
carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
|
620
609
|
|
621
|
-
carry2 =
|
622
|
-
carry6 =
|
610
|
+
carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
|
611
|
+
carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
|
623
612
|
|
624
|
-
carry3 =
|
625
|
-
carry7 =
|
613
|
+
carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
|
614
|
+
carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
|
626
615
|
|
627
|
-
carry4 =
|
628
|
-
carry8 =
|
616
|
+
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
617
|
+
carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
|
629
618
|
|
630
|
-
carry9 =
|
619
|
+
carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
|
631
620
|
|
632
|
-
carry0 =
|
621
|
+
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
633
622
|
|
634
623
|
h[0] = h0;
|
635
624
|
h[1] = h1;
|
@@ -880,24 +869,24 @@ static void fe_sq2(fe h, const fe f) {
|
|
880
869
|
h8 += h8;
|
881
870
|
h9 += h9;
|
882
871
|
|
883
|
-
carry0 =
|
884
|
-
carry4 =
|
872
|
+
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
873
|
+
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
885
874
|
|
886
|
-
carry1 =
|
887
|
-
carry5 =
|
875
|
+
carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
|
876
|
+
carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
|
888
877
|
|
889
|
-
carry2 =
|
890
|
-
carry6 =
|
878
|
+
carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
|
879
|
+
carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
|
891
880
|
|
892
|
-
carry3 =
|
893
|
-
carry7 =
|
881
|
+
carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
|
882
|
+
carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
|
894
883
|
|
895
|
-
carry4 =
|
896
|
-
carry8 =
|
884
|
+
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
885
|
+
carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
|
897
886
|
|
898
|
-
carry9 =
|
887
|
+
carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
|
899
888
|
|
900
|
-
carry0 =
|
889
|
+
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
901
890
|
|
902
891
|
h[0] = h0;
|
903
892
|
h[1] = h1;
|
@@ -974,52 +963,7 @@ static void fe_pow22523(fe out, const fe z) {
|
|
974
963
|
fe_mul(out, t0, z);
|
975
964
|
}
|
976
965
|
|
977
|
-
|
978
|
-
|
979
|
-
* Here the group is the set of pairs (x,y) of field elements (see fe.h)
|
980
|
-
* satisfying -x^2 + y^2 = 1 + d x^2y^2
|
981
|
-
* where d = -121665/121666.
|
982
|
-
*
|
983
|
-
* Representations:
|
984
|
-
* ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z
|
985
|
-
* ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT
|
986
|
-
* ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T
|
987
|
-
* ge_precomp (Duif): (y+x,y-x,2dxy) */
|
988
|
-
|
989
|
-
typedef struct {
|
990
|
-
fe X;
|
991
|
-
fe Y;
|
992
|
-
fe Z;
|
993
|
-
} ge_p2;
|
994
|
-
|
995
|
-
typedef struct {
|
996
|
-
fe X;
|
997
|
-
fe Y;
|
998
|
-
fe Z;
|
999
|
-
fe T;
|
1000
|
-
} ge_p3;
|
1001
|
-
|
1002
|
-
typedef struct {
|
1003
|
-
fe X;
|
1004
|
-
fe Y;
|
1005
|
-
fe Z;
|
1006
|
-
fe T;
|
1007
|
-
} ge_p1p1;
|
1008
|
-
|
1009
|
-
typedef struct {
|
1010
|
-
fe yplusx;
|
1011
|
-
fe yminusx;
|
1012
|
-
fe xy2d;
|
1013
|
-
} ge_precomp;
|
1014
|
-
|
1015
|
-
typedef struct {
|
1016
|
-
fe YplusX;
|
1017
|
-
fe YminusX;
|
1018
|
-
fe Z;
|
1019
|
-
fe T2d;
|
1020
|
-
} ge_cached;
|
1021
|
-
|
1022
|
-
static void ge_tobytes(uint8_t *s, const ge_p2 *h) {
|
966
|
+
void x25519_ge_tobytes(uint8_t *s, const ge_p2 *h) {
|
1023
967
|
fe recip;
|
1024
968
|
fe x;
|
1025
969
|
fe y;
|
@@ -1049,7 +993,7 @@ static const fe d = {-10913610, 13857413, -15372611, 6949391, 114729,
|
|
1049
993
|
static const fe sqrtm1 = {-32595792, -7943725, 9377950, 3500415, 12389472,
|
1050
994
|
-272473, -25146209, -2005654, 326686, 11406482};
|
1051
995
|
|
1052
|
-
|
996
|
+
int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t *s) {
|
1053
997
|
fe u;
|
1054
998
|
fe v;
|
1055
999
|
fe v3;
|
@@ -1105,6 +1049,13 @@ static void ge_p3_0(ge_p3 *h) {
|
|
1105
1049
|
fe_0(h->T);
|
1106
1050
|
}
|
1107
1051
|
|
1052
|
+
static void ge_cached_0(ge_cached *h) {
|
1053
|
+
fe_1(h->YplusX);
|
1054
|
+
fe_1(h->YminusX);
|
1055
|
+
fe_1(h->Z);
|
1056
|
+
fe_0(h->T2d);
|
1057
|
+
}
|
1058
|
+
|
1108
1059
|
static void ge_precomp_0(ge_precomp *h) {
|
1109
1060
|
fe_1(h->yplusx);
|
1110
1061
|
fe_1(h->yminusx);
|
@@ -1122,7 +1073,7 @@ static const fe d2 = {-21827239, -5839606, -30745221, 13898782, 229458,
|
|
1122
1073
|
15978800, -12551817, -6495438, 29715968, 9444199};
|
1123
1074
|
|
1124
1075
|
/* r = p */
|
1125
|
-
|
1076
|
+
void x25519_ge_p3_to_cached(ge_cached *r, const ge_p3 *p) {
|
1126
1077
|
fe_add(r->YplusX, p->Y, p->X);
|
1127
1078
|
fe_sub(r->YminusX, p->Y, p->X);
|
1128
1079
|
fe_copy(r->Z, p->Z);
|
@@ -1130,20 +1081,27 @@ static void ge_p3_to_cached(ge_cached *r, const ge_p3 *p) {
|
|
1130
1081
|
}
|
1131
1082
|
|
1132
1083
|
/* r = p */
|
1133
|
-
|
1084
|
+
void x25519_ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p) {
|
1134
1085
|
fe_mul(r->X, p->X, p->T);
|
1135
1086
|
fe_mul(r->Y, p->Y, p->Z);
|
1136
1087
|
fe_mul(r->Z, p->Z, p->T);
|
1137
1088
|
}
|
1138
1089
|
|
1139
1090
|
/* r = p */
|
1140
|
-
|
1091
|
+
void x25519_ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p) {
|
1141
1092
|
fe_mul(r->X, p->X, p->T);
|
1142
1093
|
fe_mul(r->Y, p->Y, p->Z);
|
1143
1094
|
fe_mul(r->Z, p->Z, p->T);
|
1144
1095
|
fe_mul(r->T, p->X, p->Y);
|
1145
1096
|
}
|
1146
1097
|
|
1098
|
+
/* r = p */
|
1099
|
+
static void ge_p1p1_to_cached(ge_cached *r, const ge_p1p1 *p) {
|
1100
|
+
ge_p3 t;
|
1101
|
+
x25519_ge_p1p1_to_p3(&t, p);
|
1102
|
+
x25519_ge_p3_to_cached(r, &t);
|
1103
|
+
}
|
1104
|
+
|
1147
1105
|
/* r = 2 * p */
|
1148
1106
|
static void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p) {
|
1149
1107
|
fe t0;
|
@@ -1199,7 +1157,7 @@ static void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
|
|
1199
1157
|
}
|
1200
1158
|
|
1201
1159
|
/* r = p + q */
|
1202
|
-
|
1160
|
+
void x25519_ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
|
1203
1161
|
fe t0;
|
1204
1162
|
|
1205
1163
|
fe_add(r->X, p->Y, p->X);
|
@@ -1216,7 +1174,7 @@ static void ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
|
|
1216
1174
|
}
|
1217
1175
|
|
1218
1176
|
/* r = p - q */
|
1219
|
-
|
1177
|
+
void x25519_ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
|
1220
1178
|
fe t0;
|
1221
1179
|
|
1222
1180
|
fe_add(r->X, p->Y, p->X);
|
@@ -1242,12 +1200,64 @@ static uint8_t equal(signed char b, signed char c) {
|
|
1242
1200
|
return y;
|
1243
1201
|
}
|
1244
1202
|
|
1245
|
-
static void cmov(ge_precomp *t, ge_precomp *u, uint8_t b) {
|
1203
|
+
static void cmov(ge_precomp *t, const ge_precomp *u, uint8_t b) {
|
1246
1204
|
fe_cmov(t->yplusx, u->yplusx, b);
|
1247
1205
|
fe_cmov(t->yminusx, u->yminusx, b);
|
1248
1206
|
fe_cmov(t->xy2d, u->xy2d, b);
|
1249
1207
|
}
|
1250
1208
|
|
1209
|
+
void x25519_ge_scalarmult_small_precomp(
|
1210
|
+
ge_p3 *h, const uint8_t a[32], const uint8_t precomp_table[15 * 2 * 32]) {
|
1211
|
+
/* precomp_table is first expanded into matching |ge_precomp|
|
1212
|
+
* elements. */
|
1213
|
+
ge_precomp multiples[15];
|
1214
|
+
|
1215
|
+
unsigned i;
|
1216
|
+
for (i = 0; i < 15; i++) {
|
1217
|
+
const uint8_t *bytes = &precomp_table[i*(2 * 32)];
|
1218
|
+
fe x, y;
|
1219
|
+
fe_frombytes(x, bytes);
|
1220
|
+
fe_frombytes(y, bytes + 32);
|
1221
|
+
|
1222
|
+
ge_precomp *out = &multiples[i];
|
1223
|
+
fe_add(out->yplusx, y, x);
|
1224
|
+
fe_sub(out->yminusx, y, x);
|
1225
|
+
fe_mul(out->xy2d, x, y);
|
1226
|
+
fe_mul(out->xy2d, out->xy2d, d2);
|
1227
|
+
}
|
1228
|
+
|
1229
|
+
/* See the comment above |k25519SmallPrecomp| about the structure of the
|
1230
|
+
* precomputed elements. This loop does 64 additions and 64 doublings to
|
1231
|
+
* calculate the result. */
|
1232
|
+
ge_p3_0(h);
|
1233
|
+
|
1234
|
+
for (i = 63; i < 64; i--) {
|
1235
|
+
unsigned j;
|
1236
|
+
signed char index = 0;
|
1237
|
+
|
1238
|
+
for (j = 0; j < 4; j++) {
|
1239
|
+
const uint8_t bit = 1 & (a[(8 * j) + (i / 8)] >> (i & 7));
|
1240
|
+
index |= (bit << j);
|
1241
|
+
}
|
1242
|
+
|
1243
|
+
ge_precomp e;
|
1244
|
+
ge_precomp_0(&e);
|
1245
|
+
|
1246
|
+
for (j = 1; j < 16; j++) {
|
1247
|
+
cmov(&e, &multiples[j-1], equal(index, j));
|
1248
|
+
}
|
1249
|
+
|
1250
|
+
ge_cached cached;
|
1251
|
+
ge_p1p1 r;
|
1252
|
+
x25519_ge_p3_to_cached(&cached, h);
|
1253
|
+
x25519_ge_add(&r, h, &cached);
|
1254
|
+
x25519_ge_p1p1_to_p3(h, &r);
|
1255
|
+
|
1256
|
+
ge_madd(&r, h, &e);
|
1257
|
+
x25519_ge_p1p1_to_p3(h, &r);
|
1258
|
+
}
|
1259
|
+
}
|
1260
|
+
|
1251
1261
|
#if defined(OPENSSL_SMALL)
|
1252
1262
|
|
1253
1263
|
/* This block of code replaces the standard base-point table with a much smaller
|
@@ -1341,61 +1351,14 @@ static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {
|
|
1341
1351
|
0x45, 0xc9, 0x8b, 0x17, 0x79, 0xe7, 0xc7, 0x90, 0x99, 0x3a, 0x18, 0x25,
|
1342
1352
|
};
|
1343
1353
|
|
1344
|
-
|
1345
|
-
|
1346
|
-
* elements. */
|
1347
|
-
ge_precomp multiples[15];
|
1348
|
-
|
1349
|
-
unsigned i;
|
1350
|
-
for (i = 0; i < 15; i++) {
|
1351
|
-
const uint8_t *bytes = &k25519SmallPrecomp[i*(2 * 32)];
|
1352
|
-
fe x, y;
|
1353
|
-
fe_frombytes(x, bytes);
|
1354
|
-
fe_frombytes(y, bytes + 32);
|
1355
|
-
|
1356
|
-
ge_precomp *out = &multiples[i];
|
1357
|
-
fe_add(out->yplusx, y, x);
|
1358
|
-
fe_sub(out->yminusx, y, x);
|
1359
|
-
fe_mul(out->xy2d, x, y);
|
1360
|
-
fe_mul(out->xy2d, out->xy2d, d2);
|
1361
|
-
}
|
1362
|
-
|
1363
|
-
/* See the comment above |k25519SmallPrecomp| about the structure of the
|
1364
|
-
* precomputed elements. This loop does 64 additions and 64 doublings to
|
1365
|
-
* calculate the result. */
|
1366
|
-
ge_p3_0(h);
|
1367
|
-
|
1368
|
-
for (i = 63; i < 64; i--) {
|
1369
|
-
unsigned j;
|
1370
|
-
signed char index = 0;
|
1371
|
-
|
1372
|
-
for (j = 0; j < 4; j++) {
|
1373
|
-
const uint8_t bit = 1 & (a[(8 * j) + (i / 8)] >> (i & 7));
|
1374
|
-
index |= (bit << j);
|
1375
|
-
}
|
1376
|
-
|
1377
|
-
ge_precomp e;
|
1378
|
-
ge_precomp_0(&e);
|
1379
|
-
|
1380
|
-
for (j = 1; j < 16; j++) {
|
1381
|
-
cmov(&e, &multiples[j-1], equal(index, j));
|
1382
|
-
}
|
1383
|
-
|
1384
|
-
ge_cached cached;
|
1385
|
-
ge_p1p1 r;
|
1386
|
-
ge_p3_to_cached(&cached, h);
|
1387
|
-
ge_add(&r, h, &cached);
|
1388
|
-
ge_p1p1_to_p3(h, &r);
|
1389
|
-
|
1390
|
-
ge_madd(&r, h, &e);
|
1391
|
-
ge_p1p1_to_p3(h, &r);
|
1392
|
-
}
|
1354
|
+
void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]) {
|
1355
|
+
x25519_ge_scalarmult_small_precomp(h, a, k25519SmallPrecomp);
|
1393
1356
|
}
|
1394
1357
|
|
1395
1358
|
#else
|
1396
1359
|
|
1397
1360
|
/* k25519Precomp[i][j] = (j+1)*256^i*B */
|
1398
|
-
static ge_precomp k25519Precomp[32][8] = {
|
1361
|
+
static const ge_precomp k25519Precomp[32][8] = {
|
1399
1362
|
{
|
1400
1363
|
{
|
1401
1364
|
{25967493, -14356035, 29566456, 3660896, -12694345, 4014787,
|
@@ -3519,7 +3482,7 @@ static uint8_t negative(signed char b) {
|
|
3519
3482
|
static void table_select(ge_precomp *t, int pos, signed char b) {
|
3520
3483
|
ge_precomp minust;
|
3521
3484
|
uint8_t bnegative = negative(b);
|
3522
|
-
uint8_t babs = b - (((-bnegative) & b) << 1);
|
3485
|
+
uint8_t babs = b - ((uint8_t)((-bnegative) & b) << 1);
|
3523
3486
|
|
3524
3487
|
ge_precomp_0(t);
|
3525
3488
|
cmov(t, &k25519Precomp[pos][0], equal(babs, 1));
|
@@ -3542,7 +3505,7 @@ static void table_select(ge_precomp *t, int pos, signed char b) {
|
|
3542
3505
|
*
|
3543
3506
|
* Preconditions:
|
3544
3507
|
* a[31] <= 127 */
|
3545
|
-
|
3508
|
+
void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
|
3546
3509
|
signed char e[64];
|
3547
3510
|
signed char carry;
|
3548
3511
|
ge_p1p1 r;
|
@@ -3571,27 +3534,88 @@ static void ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
|
|
3571
3534
|
for (i = 1; i < 64; i += 2) {
|
3572
3535
|
table_select(&t, i / 2, e[i]);
|
3573
3536
|
ge_madd(&r, h, &t);
|
3574
|
-
|
3537
|
+
x25519_ge_p1p1_to_p3(h, &r);
|
3575
3538
|
}
|
3576
3539
|
|
3577
3540
|
ge_p3_dbl(&r, h);
|
3578
|
-
|
3541
|
+
x25519_ge_p1p1_to_p2(&s, &r);
|
3579
3542
|
ge_p2_dbl(&r, &s);
|
3580
|
-
|
3543
|
+
x25519_ge_p1p1_to_p2(&s, &r);
|
3581
3544
|
ge_p2_dbl(&r, &s);
|
3582
|
-
|
3545
|
+
x25519_ge_p1p1_to_p2(&s, &r);
|
3583
3546
|
ge_p2_dbl(&r, &s);
|
3584
|
-
|
3547
|
+
x25519_ge_p1p1_to_p3(h, &r);
|
3585
3548
|
|
3586
3549
|
for (i = 0; i < 64; i += 2) {
|
3587
3550
|
table_select(&t, i / 2, e[i]);
|
3588
3551
|
ge_madd(&r, h, &t);
|
3589
|
-
|
3552
|
+
x25519_ge_p1p1_to_p3(h, &r);
|
3590
3553
|
}
|
3591
3554
|
}
|
3592
3555
|
|
3593
3556
|
#endif
|
3594
3557
|
|
3558
|
+
static void cmov_cached(ge_cached *t, ge_cached *u, uint8_t b) {
|
3559
|
+
fe_cmov(t->YplusX, u->YplusX, b);
|
3560
|
+
fe_cmov(t->YminusX, u->YminusX, b);
|
3561
|
+
fe_cmov(t->Z, u->Z, b);
|
3562
|
+
fe_cmov(t->T2d, u->T2d, b);
|
3563
|
+
}
|
3564
|
+
|
3565
|
+
/* r = scalar * A.
|
3566
|
+
* where a = a[0]+256*a[1]+...+256^31 a[31]. */
|
3567
|
+
void x25519_ge_scalarmult(ge_p2 *r, const uint8_t *scalar, const ge_p3 *A) {
|
3568
|
+
ge_p2 Ai_p2[8];
|
3569
|
+
ge_cached Ai[16];
|
3570
|
+
ge_p1p1 t;
|
3571
|
+
|
3572
|
+
ge_cached_0(&Ai[0]);
|
3573
|
+
x25519_ge_p3_to_cached(&Ai[1], A);
|
3574
|
+
ge_p3_to_p2(&Ai_p2[1], A);
|
3575
|
+
|
3576
|
+
unsigned i;
|
3577
|
+
for (i = 2; i < 16; i += 2) {
|
3578
|
+
ge_p2_dbl(&t, &Ai_p2[i / 2]);
|
3579
|
+
ge_p1p1_to_cached(&Ai[i], &t);
|
3580
|
+
if (i < 8) {
|
3581
|
+
x25519_ge_p1p1_to_p2(&Ai_p2[i], &t);
|
3582
|
+
}
|
3583
|
+
x25519_ge_add(&t, A, &Ai[i]);
|
3584
|
+
ge_p1p1_to_cached(&Ai[i + 1], &t);
|
3585
|
+
if (i < 7) {
|
3586
|
+
x25519_ge_p1p1_to_p2(&Ai_p2[i + 1], &t);
|
3587
|
+
}
|
3588
|
+
}
|
3589
|
+
|
3590
|
+
ge_p2_0(r);
|
3591
|
+
ge_p3 u;
|
3592
|
+
|
3593
|
+
for (i = 0; i < 256; i += 4) {
|
3594
|
+
ge_p2_dbl(&t, r);
|
3595
|
+
x25519_ge_p1p1_to_p2(r, &t);
|
3596
|
+
ge_p2_dbl(&t, r);
|
3597
|
+
x25519_ge_p1p1_to_p2(r, &t);
|
3598
|
+
ge_p2_dbl(&t, r);
|
3599
|
+
x25519_ge_p1p1_to_p2(r, &t);
|
3600
|
+
ge_p2_dbl(&t, r);
|
3601
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3602
|
+
|
3603
|
+
uint8_t index = scalar[31 - i/8];
|
3604
|
+
index >>= 4 - (i & 4);
|
3605
|
+
index &= 0xf;
|
3606
|
+
|
3607
|
+
unsigned j;
|
3608
|
+
ge_cached selected;
|
3609
|
+
ge_cached_0(&selected);
|
3610
|
+
for (j = 0; j < 16; j++) {
|
3611
|
+
cmov_cached(&selected, &Ai[j], equal(j, index));
|
3612
|
+
}
|
3613
|
+
|
3614
|
+
x25519_ge_add(&t, &u, &selected);
|
3615
|
+
x25519_ge_p1p1_to_p2(r, &t);
|
3616
|
+
}
|
3617
|
+
}
|
3618
|
+
|
3595
3619
|
static void slide(signed char *r, const uint8_t *a) {
|
3596
3620
|
int i;
|
3597
3621
|
int b;
|
@@ -3626,7 +3650,7 @@ static void slide(signed char *r, const uint8_t *a) {
|
|
3626
3650
|
}
|
3627
3651
|
}
|
3628
3652
|
|
3629
|
-
static ge_precomp Bi[8] = {
|
3653
|
+
static const ge_precomp Bi[8] = {
|
3630
3654
|
{
|
3631
3655
|
{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626,
|
3632
3656
|
-11754271, -6079156, 2047605},
|
@@ -3697,8 +3721,8 @@ static ge_precomp Bi[8] = {
|
|
3697
3721
|
* where a = a[0]+256*a[1]+...+256^31 a[31].
|
3698
3722
|
* and b = b[0]+256*b[1]+...+256^31 b[31].
|
3699
3723
|
* B is the Ed25519 base point (x,4/5) with x positive. */
|
3700
|
-
void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
|
3701
|
-
|
3724
|
+
static void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
|
3725
|
+
const ge_p3 *A, const uint8_t *b) {
|
3702
3726
|
signed char aslide[256];
|
3703
3727
|
signed char bslide[256];
|
3704
3728
|
ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */
|
@@ -3710,30 +3734,30 @@ void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
|
|
3710
3734
|
slide(aslide, a);
|
3711
3735
|
slide(bslide, b);
|
3712
3736
|
|
3713
|
-
|
3737
|
+
x25519_ge_p3_to_cached(&Ai[0], A);
|
3714
3738
|
ge_p3_dbl(&t, A);
|
3715
|
-
|
3716
|
-
|
3717
|
-
|
3718
|
-
|
3719
|
-
|
3720
|
-
|
3721
|
-
|
3722
|
-
|
3723
|
-
|
3724
|
-
|
3725
|
-
|
3726
|
-
|
3727
|
-
|
3728
|
-
|
3729
|
-
|
3730
|
-
|
3731
|
-
|
3732
|
-
|
3733
|
-
|
3734
|
-
|
3735
|
-
|
3736
|
-
|
3739
|
+
x25519_ge_p1p1_to_p3(&A2, &t);
|
3740
|
+
x25519_ge_add(&t, &A2, &Ai[0]);
|
3741
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3742
|
+
x25519_ge_p3_to_cached(&Ai[1], &u);
|
3743
|
+
x25519_ge_add(&t, &A2, &Ai[1]);
|
3744
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3745
|
+
x25519_ge_p3_to_cached(&Ai[2], &u);
|
3746
|
+
x25519_ge_add(&t, &A2, &Ai[2]);
|
3747
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3748
|
+
x25519_ge_p3_to_cached(&Ai[3], &u);
|
3749
|
+
x25519_ge_add(&t, &A2, &Ai[3]);
|
3750
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3751
|
+
x25519_ge_p3_to_cached(&Ai[4], &u);
|
3752
|
+
x25519_ge_add(&t, &A2, &Ai[4]);
|
3753
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3754
|
+
x25519_ge_p3_to_cached(&Ai[5], &u);
|
3755
|
+
x25519_ge_add(&t, &A2, &Ai[5]);
|
3756
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3757
|
+
x25519_ge_p3_to_cached(&Ai[6], &u);
|
3758
|
+
x25519_ge_add(&t, &A2, &Ai[6]);
|
3759
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3760
|
+
x25519_ge_p3_to_cached(&Ai[7], &u);
|
3737
3761
|
|
3738
3762
|
ge_p2_0(r);
|
3739
3763
|
|
@@ -3747,22 +3771,22 @@ void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
|
|
3747
3771
|
ge_p2_dbl(&t, r);
|
3748
3772
|
|
3749
3773
|
if (aslide[i] > 0) {
|
3750
|
-
|
3751
|
-
|
3774
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3775
|
+
x25519_ge_add(&t, &u, &Ai[aslide[i] / 2]);
|
3752
3776
|
} else if (aslide[i] < 0) {
|
3753
|
-
|
3754
|
-
|
3777
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3778
|
+
x25519_ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]);
|
3755
3779
|
}
|
3756
3780
|
|
3757
3781
|
if (bslide[i] > 0) {
|
3758
|
-
|
3782
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3759
3783
|
ge_madd(&t, &u, &Bi[bslide[i] / 2]);
|
3760
3784
|
} else if (bslide[i] < 0) {
|
3761
|
-
|
3785
|
+
x25519_ge_p1p1_to_p3(&u, &t);
|
3762
3786
|
ge_msub(&t, &u, &Bi[(-bslide[i]) / 2]);
|
3763
3787
|
}
|
3764
3788
|
|
3765
|
-
|
3789
|
+
x25519_ge_p1p1_to_p2(r, &t);
|
3766
3790
|
}
|
3767
3791
|
}
|
3768
3792
|
|
@@ -3776,7 +3800,7 @@ void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
|
|
3776
3800
|
* s[0]+256*s[1]+...+256^31*s[31] = s mod l
|
3777
3801
|
* where l = 2^252 + 27742317777372353535851937790883648493.
|
3778
3802
|
* Overwrites s in place. */
|
3779
|
-
|
3803
|
+
void x25519_sc_reduce(uint8_t *s) {
|
3780
3804
|
int64_t s0 = 2097151 & load_3(s);
|
3781
3805
|
int64_t s1 = 2097151 & (load_4(s + 2) >> 5);
|
3782
3806
|
int64_t s2 = 2097151 & (load_3(s + 5) >> 2);
|
@@ -4610,7 +4634,7 @@ void ED25519_keypair(uint8_t out_public_key[32], uint8_t out_private_key[64]) {
|
|
4610
4634
|
az[31] |= 64;
|
4611
4635
|
|
4612
4636
|
ge_p3 A;
|
4613
|
-
|
4637
|
+
x25519_ge_scalarmult_base(&A, az);
|
4614
4638
|
ge_p3_tobytes(out_public_key, &A);
|
4615
4639
|
|
4616
4640
|
memcpy(out_private_key, seed, 32);
|
@@ -4633,9 +4657,9 @@ int ED25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len,
|
|
4633
4657
|
uint8_t nonce[SHA512_DIGEST_LENGTH];
|
4634
4658
|
SHA512_Final(nonce, &hash_ctx);
|
4635
4659
|
|
4636
|
-
|
4660
|
+
x25519_sc_reduce(nonce);
|
4637
4661
|
ge_p3 R;
|
4638
|
-
|
4662
|
+
x25519_ge_scalarmult_base(&R, nonce);
|
4639
4663
|
ge_p3_tobytes(out_sig, &R);
|
4640
4664
|
|
4641
4665
|
SHA512_Init(&hash_ctx);
|
@@ -4645,7 +4669,7 @@ int ED25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len,
|
|
4645
4669
|
uint8_t hram[SHA512_DIGEST_LENGTH];
|
4646
4670
|
SHA512_Final(hram, &hash_ctx);
|
4647
4671
|
|
4648
|
-
|
4672
|
+
x25519_sc_reduce(hram);
|
4649
4673
|
sc_muladd(out_sig + 32, hram, az, nonce);
|
4650
4674
|
|
4651
4675
|
return 1;
|
@@ -4655,7 +4679,7 @@ int ED25519_verify(const uint8_t *message, size_t message_len,
|
|
4655
4679
|
const uint8_t signature[64], const uint8_t public_key[32]) {
|
4656
4680
|
ge_p3 A;
|
4657
4681
|
if ((signature[63] & 224) != 0 ||
|
4658
|
-
|
4682
|
+
x25519_ge_frombytes_vartime(&A, public_key) != 0) {
|
4659
4683
|
return 0;
|
4660
4684
|
}
|
4661
4685
|
|
@@ -4677,13 +4701,13 @@ int ED25519_verify(const uint8_t *message, size_t message_len,
|
|
4677
4701
|
uint8_t h[SHA512_DIGEST_LENGTH];
|
4678
4702
|
SHA512_Final(h, &hash_ctx);
|
4679
4703
|
|
4680
|
-
|
4704
|
+
x25519_sc_reduce(h);
|
4681
4705
|
|
4682
4706
|
ge_p2 R;
|
4683
4707
|
ge_double_scalarmult_vartime(&R, h, &A, scopy);
|
4684
4708
|
|
4685
4709
|
uint8_t rcheck[32];
|
4686
|
-
|
4710
|
+
x25519_ge_tobytes(rcheck, &R);
|
4687
4711
|
|
4688
4712
|
return CRYPTO_memcmp(rcheck, rcopy, sizeof(rcheck)) == 0;
|
4689
4713
|
}
|
@@ -4753,17 +4777,17 @@ static void fe_mul121666(fe h, fe f) {
|
|
4753
4777
|
int64_t carry8;
|
4754
4778
|
int64_t carry9;
|
4755
4779
|
|
4756
|
-
carry9 =
|
4757
|
-
carry1 =
|
4758
|
-
carry3 =
|
4759
|
-
carry5 =
|
4760
|
-
carry7 =
|
4780
|
+
carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
|
4781
|
+
carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
|
4782
|
+
carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
|
4783
|
+
carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
|
4784
|
+
carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
|
4761
4785
|
|
4762
|
-
carry0 =
|
4763
|
-
carry2 =
|
4764
|
-
carry4 =
|
4765
|
-
carry6 =
|
4766
|
-
carry8 =
|
4786
|
+
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
4787
|
+
carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
|
4788
|
+
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
4789
|
+
carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
|
4790
|
+
carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
|
4767
4791
|
|
4768
4792
|
h[0] = h0;
|
4769
4793
|
h[1] = h1;
|
@@ -4845,6 +4869,24 @@ static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32],
|
|
4845
4869
|
|
4846
4870
|
void X25519_keypair(uint8_t out_public_value[32], uint8_t out_private_key[32]) {
|
4847
4871
|
RAND_bytes(out_private_key, 32);
|
4872
|
+
|
4873
|
+
/* All X25519 implementations should decode scalars correctly (see
|
4874
|
+
* https://tools.ietf.org/html/rfc7748#section-5). However, if an
|
4875
|
+
* implementation doesn't then it might interoperate with random keys a
|
4876
|
+
* fraction of the time because they'll, randomly, happen to be correctly
|
4877
|
+
* formed.
|
4878
|
+
*
|
4879
|
+
* Thus we do the opposite of the masking here to make sure that our private
|
4880
|
+
* keys are never correctly masked and so, hopefully, any incorrect
|
4881
|
+
* implementations are deterministically broken.
|
4882
|
+
*
|
4883
|
+
* This does not affect security because, although we're throwing away
|
4884
|
+
* entropy, a valid implementation of scalarmult should throw away the exact
|
4885
|
+
* same bits anyway. */
|
4886
|
+
out_private_key[0] |= 7;
|
4887
|
+
out_private_key[31] &= 63;
|
4888
|
+
out_private_key[31] |= 128;
|
4889
|
+
|
4848
4890
|
X25519_public_from_private(out_public_value, out_private_key);
|
4849
4891
|
}
|
4850
4892
|
|
@@ -4887,7 +4929,7 @@ void X25519_public_from_private(uint8_t out_public_value[32],
|
|
4887
4929
|
e[31] |= 64;
|
4888
4930
|
|
4889
4931
|
ge_p3 A;
|
4890
|
-
|
4932
|
+
x25519_ge_scalarmult_base(&A, e);
|
4891
4933
|
|
4892
4934
|
/* We only need the u-coordinate of the curve25519 point. The map is
|
4893
4935
|
* u=(y+1)/(1-y). Since y=Y/Z, this gives u=(Z+Y)/(Z-Y). */
|