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
@@ -121,9 +121,9 @@ extern "C" {
|
|
121
121
|
#endif
|
122
122
|
#elif defined(_MSC_VER)
|
123
123
|
#if _MSC_VER >= 1300
|
124
|
-
|
124
|
+
OPENSSL_MSVC_PRAGMA(warning(push, 3))
|
125
125
|
#include <intrin.h>
|
126
|
-
|
126
|
+
OPENSSL_MSVC_PRAGMA(warning(pop))
|
127
127
|
#pragma intrinsic(_byteswap_uint64, _byteswap_ulong)
|
128
128
|
#define BSWAP8(x) _byteswap_uint64((uint64_t)(x))
|
129
129
|
#define BSWAP4(x) _byteswap_ulong((uint32_t)(x))
|
@@ -179,16 +179,6 @@ struct gcm128_context {
|
|
179
179
|
block128_f block;
|
180
180
|
};
|
181
181
|
|
182
|
-
struct ccm128_context {
|
183
|
-
union {
|
184
|
-
uint64_t u[2];
|
185
|
-
uint8_t c[16];
|
186
|
-
} nonce, cmac;
|
187
|
-
uint64_t blocks;
|
188
|
-
block128_f block;
|
189
|
-
void *key;
|
190
|
-
};
|
191
|
-
|
192
182
|
#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
|
193
183
|
/* crypto_gcm_clmul_enabled returns one if the CLMUL implementation of GCM is
|
194
184
|
* used. */
|
@@ -210,7 +200,7 @@ typedef void (*ctr128_f)(const uint8_t *in, uint8_t *out, size_t blocks,
|
|
210
200
|
* incremented by this function. */
|
211
201
|
void CRYPTO_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
212
202
|
const void *key, uint8_t ivec[16],
|
213
|
-
uint8_t ecount_buf[16], unsigned
|
203
|
+
uint8_t ecount_buf[16], unsigned *num,
|
214
204
|
block128_f block);
|
215
205
|
|
216
206
|
/* CRYPTO_ctr128_encrypt_ctr32 acts like |CRYPTO_ctr128_encrypt| but takes
|
@@ -219,7 +209,7 @@ void CRYPTO_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
|
219
209
|
* function. */
|
220
210
|
void CRYPTO_ctr128_encrypt_ctr32(const uint8_t *in, uint8_t *out, size_t len,
|
221
211
|
const void *key, uint8_t ivec[16],
|
222
|
-
uint8_t ecount_buf[16], unsigned
|
212
|
+
uint8_t ecount_buf[16], unsigned *num,
|
223
213
|
ctr128_f ctr);
|
224
214
|
|
225
215
|
|
@@ -232,11 +222,6 @@ void CRYPTO_ctr128_encrypt_ctr32(const uint8_t *in, uint8_t *out, size_t len,
|
|
232
222
|
|
233
223
|
typedef struct gcm128_context GCM128_CONTEXT;
|
234
224
|
|
235
|
-
/* CRYPTO_gcm128_new allocates a fresh |GCM128_CONTEXT| and calls
|
236
|
-
* |CRYPTO_gcm128_init|. It returns the new context, or NULL on error. */
|
237
|
-
OPENSSL_EXPORT GCM128_CONTEXT *CRYPTO_gcm128_new(const void *key,
|
238
|
-
block128_f block);
|
239
|
-
|
240
225
|
/* CRYPTO_gcm128_init initialises |ctx| to use |block| (typically AES) with
|
241
226
|
* the given key. */
|
242
227
|
OPENSSL_EXPORT void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, const void *key,
|
@@ -297,9 +282,6 @@ OPENSSL_EXPORT int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const uint8_t *tag,
|
|
297
282
|
OPENSSL_EXPORT void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, uint8_t *tag,
|
298
283
|
size_t len);
|
299
284
|
|
300
|
-
/* CRYPTO_gcm128_release clears and frees |ctx|. */
|
301
|
-
OPENSSL_EXPORT void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);
|
302
|
-
|
303
285
|
|
304
286
|
/* CBC. */
|
305
287
|
|
@@ -331,7 +313,7 @@ void CRYPTO_cbc128_decrypt(const uint8_t *in, uint8_t *out, size_t len,
|
|
331
313
|
* call. */
|
332
314
|
void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out,
|
333
315
|
size_t len, const void *key, uint8_t ivec[16],
|
334
|
-
|
316
|
+
unsigned *num, block128_f block);
|
335
317
|
|
336
318
|
|
337
319
|
/* CFB. */
|
@@ -341,21 +323,21 @@ void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out,
|
|
341
323
|
* |len| be a multiple of any value and any partial blocks are stored in |ivec|
|
342
324
|
* and |*num|, the latter must be zero before the initial call. */
|
343
325
|
void CRYPTO_cfb128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
344
|
-
const void *key, uint8_t ivec[16],
|
345
|
-
block128_f block);
|
326
|
+
const void *key, uint8_t ivec[16], unsigned *num,
|
327
|
+
int enc, block128_f block);
|
346
328
|
|
347
329
|
/* CRYPTO_cfb128_8_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes
|
348
330
|
* from |in| to |out| using |block| in CFB-8 mode. Prior to the first call
|
349
331
|
* |num| should be set to zero. */
|
350
332
|
void CRYPTO_cfb128_8_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
351
|
-
const void *key, uint8_t ivec[16],
|
333
|
+
const void *key, uint8_t ivec[16], unsigned *num,
|
352
334
|
int enc, block128_f block);
|
353
335
|
|
354
336
|
/* CRYPTO_cfb128_1_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes
|
355
337
|
* from |in| to |out| using |block| in CFB-1 mode. Prior to the first call
|
356
338
|
* |num| should be set to zero. */
|
357
339
|
void CRYPTO_cfb128_1_encrypt(const uint8_t *in, uint8_t *out, size_t bits,
|
358
|
-
const void *key, uint8_t ivec[16],
|
340
|
+
const void *key, uint8_t ivec[16], unsigned *num,
|
359
341
|
int enc, block128_f block);
|
360
342
|
|
361
343
|
size_t CRYPTO_cts128_encrypt_block(const uint8_t *in, uint8_t *out, size_t len,
|
@@ -363,6 +345,12 @@ size_t CRYPTO_cts128_encrypt_block(const uint8_t *in, uint8_t *out, size_t len,
|
|
363
345
|
block128_f block);
|
364
346
|
|
365
347
|
|
348
|
+
#if !defined(OPENSSL_NO_ASM) && \
|
349
|
+
(defined(OPENSSL_X86) || defined(OPENSSL_X86_64))
|
350
|
+
void aesni_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t blocks,
|
351
|
+
const void *key, const uint8_t *ivec);
|
352
|
+
#endif
|
353
|
+
|
366
354
|
#if defined(__cplusplus)
|
367
355
|
} /* extern C */
|
368
356
|
#endif
|
@@ -49,6 +49,7 @@
|
|
49
49
|
#include <openssl/type_check.h>
|
50
50
|
|
51
51
|
#include <assert.h>
|
52
|
+
#include <string.h>
|
52
53
|
|
53
54
|
#include "internal.h"
|
54
55
|
|
@@ -56,13 +57,11 @@
|
|
56
57
|
OPENSSL_COMPILE_ASSERT((16 % sizeof(size_t)) == 0, bad_size_t_size);
|
57
58
|
|
58
59
|
void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
59
|
-
const void *key, uint8_t ivec[16],
|
60
|
+
const void *key, uint8_t ivec[16], unsigned *num,
|
60
61
|
block128_f block) {
|
61
|
-
unsigned int n;
|
62
|
-
|
63
62
|
assert(in && out && key && ivec && num);
|
64
63
|
|
65
|
-
n = *num;
|
64
|
+
unsigned n = *num;
|
66
65
|
|
67
66
|
while (n && len) {
|
68
67
|
*(out++) = *(in++) ^ ivec[n];
|
@@ -70,27 +69,15 @@ void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
|
70
69
|
n = (n + 1) % 16;
|
71
70
|
}
|
72
71
|
|
73
|
-
#if STRICT_ALIGNMENT
|
74
|
-
if (((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) != 0) {
|
75
|
-
size_t l = 0;
|
76
|
-
while (l < len) {
|
77
|
-
if (n == 0) {
|
78
|
-
(*block)(ivec, ivec, key);
|
79
|
-
}
|
80
|
-
out[l] = in[l] ^ ivec[n];
|
81
|
-
++l;
|
82
|
-
n = (n + 1) % 16;
|
83
|
-
}
|
84
|
-
|
85
|
-
*num = n;
|
86
|
-
return;
|
87
|
-
}
|
88
|
-
#endif
|
89
|
-
|
90
72
|
while (len >= 16) {
|
91
73
|
(*block)(ivec, ivec, key);
|
92
74
|
for (; n < 16; n += sizeof(size_t)) {
|
93
|
-
|
75
|
+
size_t a, b;
|
76
|
+
memcpy(&a, in + n, sizeof(size_t));
|
77
|
+
memcpy(&b, ivec + n, sizeof(size_t));
|
78
|
+
|
79
|
+
const size_t c = a ^ b;
|
80
|
+
memcpy(out + n, &c, sizeof(size_t));
|
94
81
|
}
|
95
82
|
len -= 16;
|
96
83
|
out += 16;
|
@@ -0,0 +1,131 @@
|
|
1
|
+
/* Copyright (c) 2016, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include <string.h>
|
16
|
+
|
17
|
+
#include <openssl/base.h>
|
18
|
+
#include <openssl/rand.h>
|
19
|
+
|
20
|
+
#include "internal.h"
|
21
|
+
|
22
|
+
|
23
|
+
/* See paper for details on the error reconciliation */
|
24
|
+
|
25
|
+
static int32_t abs_32(int32_t v) {
|
26
|
+
int32_t mask = v >> 31;
|
27
|
+
return (v ^ mask) - mask;
|
28
|
+
}
|
29
|
+
|
30
|
+
static int32_t f(int32_t* v0, int32_t* v1, int32_t x) {
|
31
|
+
int32_t xit, t, r, b;
|
32
|
+
|
33
|
+
/* Next 6 lines compute t = x/PARAM_Q */
|
34
|
+
b = x * 2730;
|
35
|
+
t = b >> 25;
|
36
|
+
b = x - t * 12289;
|
37
|
+
b = 12288 - b;
|
38
|
+
b >>= 31;
|
39
|
+
t -= b;
|
40
|
+
|
41
|
+
r = t & 1;
|
42
|
+
xit = (t >> 1);
|
43
|
+
*v0 = xit + r; /* v0 = round(x/(2*PARAM_Q)) */
|
44
|
+
|
45
|
+
t -= 1;
|
46
|
+
r = t & 1;
|
47
|
+
*v1 = (t >> 1) + r;
|
48
|
+
|
49
|
+
return abs_32(x - ((*v0) * 2 * PARAM_Q));
|
50
|
+
}
|
51
|
+
|
52
|
+
static int32_t g(int32_t x) {
|
53
|
+
int32_t t, c, b;
|
54
|
+
|
55
|
+
/* Next 6 lines compute t = x/(4*PARAM_Q); */
|
56
|
+
b = x * 2730;
|
57
|
+
t = b >> 27;
|
58
|
+
b = x - t * 49156;
|
59
|
+
b = 49155 - b;
|
60
|
+
b >>= 31;
|
61
|
+
t -= b;
|
62
|
+
|
63
|
+
c = t & 1;
|
64
|
+
t = (t >> 1) + c; /* t = round(x/(8*PARAM_Q)) */
|
65
|
+
|
66
|
+
t *= 8 * PARAM_Q;
|
67
|
+
|
68
|
+
return abs_32(t - x);
|
69
|
+
}
|
70
|
+
|
71
|
+
static int16_t LDDecode(int32_t xi0, int32_t xi1, int32_t xi2, int32_t xi3) {
|
72
|
+
int32_t t;
|
73
|
+
|
74
|
+
t = g(xi0);
|
75
|
+
t += g(xi1);
|
76
|
+
t += g(xi2);
|
77
|
+
t += g(xi3);
|
78
|
+
|
79
|
+
t -= 8 * PARAM_Q;
|
80
|
+
t >>= 31;
|
81
|
+
return t & 1;
|
82
|
+
}
|
83
|
+
|
84
|
+
void newhope_helprec(NEWHOPE_POLY* c, const NEWHOPE_POLY* v,
|
85
|
+
const uint8_t rand[32]) {
|
86
|
+
int32_t v0[4], v1[4], v_tmp[4], k;
|
87
|
+
uint8_t rbit;
|
88
|
+
unsigned i;
|
89
|
+
|
90
|
+
for (i = 0; i < 256; i++) {
|
91
|
+
rbit = (rand[i >> 3] >> (i & 7)) & 1;
|
92
|
+
|
93
|
+
k = f(v0 + 0, v1 + 0, 8 * v->coeffs[0 + i] + 4 * rbit);
|
94
|
+
k += f(v0 + 1, v1 + 1, 8 * v->coeffs[256 + i] + 4 * rbit);
|
95
|
+
k += f(v0 + 2, v1 + 2, 8 * v->coeffs[512 + i] + 4 * rbit);
|
96
|
+
k += f(v0 + 3, v1 + 3, 8 * v->coeffs[768 + i] + 4 * rbit);
|
97
|
+
|
98
|
+
k = (2 * PARAM_Q - 1 - k) >> 31;
|
99
|
+
|
100
|
+
v_tmp[0] = ((~k) & v0[0]) ^ (k & v1[0]);
|
101
|
+
v_tmp[1] = ((~k) & v0[1]) ^ (k & v1[1]);
|
102
|
+
v_tmp[2] = ((~k) & v0[2]) ^ (k & v1[2]);
|
103
|
+
v_tmp[3] = ((~k) & v0[3]) ^ (k & v1[3]);
|
104
|
+
|
105
|
+
c->coeffs[0 + i] = (v_tmp[0] - v_tmp[3]) & 3;
|
106
|
+
c->coeffs[256 + i] = (v_tmp[1] - v_tmp[3]) & 3;
|
107
|
+
c->coeffs[512 + i] = (v_tmp[2] - v_tmp[3]) & 3;
|
108
|
+
c->coeffs[768 + i] = (-k + 2 * v_tmp[3]) & 3;
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
void newhope_reconcile(uint8_t* key, const NEWHOPE_POLY* v,
|
113
|
+
const NEWHOPE_POLY* c) {
|
114
|
+
int i;
|
115
|
+
int32_t tmp[4];
|
116
|
+
|
117
|
+
memset(key, 0, NEWHOPE_KEY_LENGTH);
|
118
|
+
|
119
|
+
for (i = 0; i < 256; i++) {
|
120
|
+
tmp[0] = 16 * PARAM_Q + 8 * (int32_t)v->coeffs[0 + i] -
|
121
|
+
PARAM_Q * (2 * c->coeffs[0 + i] + c->coeffs[768 + i]);
|
122
|
+
tmp[1] = 16 * PARAM_Q + 8 * (int32_t)v->coeffs[256 + i] -
|
123
|
+
PARAM_Q * (2 * c->coeffs[256 + i] + c->coeffs[768 + i]);
|
124
|
+
tmp[2] = 16 * PARAM_Q + 8 * (int32_t)v->coeffs[512 + i] -
|
125
|
+
PARAM_Q * (2 * c->coeffs[512 + i] + c->coeffs[768 + i]);
|
126
|
+
tmp[3] = 16 * PARAM_Q + 8 * (int32_t)v->coeffs[768 + i] -
|
127
|
+
PARAM_Q * (c->coeffs[768 + i]);
|
128
|
+
|
129
|
+
key[i >> 3] |= LDDecode(tmp[0], tmp[1], tmp[2], tmp[3]) << (i & 7);
|
130
|
+
}
|
131
|
+
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
/* Copyright (c) 2016, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#ifndef OPENSSL_HEADER_NEWHOPE_INTERNAL_H
|
16
|
+
#define OPENSSL_HEADER_NEWHOPE_INTERNAL_H
|
17
|
+
|
18
|
+
#include <openssl/newhope.h>
|
19
|
+
#include <openssl/sha.h>
|
20
|
+
|
21
|
+
#include "../internal.h"
|
22
|
+
|
23
|
+
|
24
|
+
/* The number of polynomial coefficients. */
|
25
|
+
#define PARAM_N 1024
|
26
|
+
|
27
|
+
/* The width the noise distribution. */
|
28
|
+
#define PARAM_K 16
|
29
|
+
|
30
|
+
/* Modulus. */
|
31
|
+
#define PARAM_Q 12289
|
32
|
+
|
33
|
+
/* Polynomial coefficients in unpacked form. */
|
34
|
+
struct newhope_poly_st {
|
35
|
+
uint16_t coeffs[PARAM_N];
|
36
|
+
};
|
37
|
+
|
38
|
+
/* SEED_LENGTH is the length of the AES-CTR seed used to derive a polynomial. */
|
39
|
+
#define SEED_LENGTH 32
|
40
|
+
|
41
|
+
/* newhope_poly_uniform generates the polynomial |a| using AES-CTR mode with the
|
42
|
+
* seed
|
43
|
+
* |seed|. (In the reference implementation this was done with SHAKE-128.) */
|
44
|
+
void newhope_poly_uniform(NEWHOPE_POLY* a, const uint8_t* seed);
|
45
|
+
|
46
|
+
void newhope_helprec(NEWHOPE_POLY* c, const NEWHOPE_POLY* v,
|
47
|
+
const uint8_t rbits[32]);
|
48
|
+
|
49
|
+
/* newhope_reconcile performs the error-reconciliation step using the input |v|
|
50
|
+
* and
|
51
|
+
* reconciliation data |c|, writing the resulting key to |key|. */
|
52
|
+
void newhope_reconcile(uint8_t* key, const NEWHOPE_POLY* v,
|
53
|
+
const NEWHOPE_POLY* c);
|
54
|
+
|
55
|
+
/* newhope_poly_invntt performs the inverse of NTT(r) in-place. */
|
56
|
+
void newhope_poly_invntt(NEWHOPE_POLY* r);
|
57
|
+
|
58
|
+
void newhope_poly_add(NEWHOPE_POLY* r, const NEWHOPE_POLY* a,
|
59
|
+
const NEWHOPE_POLY* b);
|
60
|
+
void newhope_poly_pointwise(NEWHOPE_POLY* r, const NEWHOPE_POLY* a,
|
61
|
+
const NEWHOPE_POLY* b);
|
62
|
+
|
63
|
+
uint16_t newhope_montgomery_reduce(uint32_t a);
|
64
|
+
uint16_t newhope_barrett_reduce(uint16_t a);
|
65
|
+
|
66
|
+
void newhope_bitrev_vector(uint16_t* poly);
|
67
|
+
void newhope_mul_coefficients(uint16_t* poly, const uint16_t* factors);
|
68
|
+
void newhope_ntt(uint16_t* poly, const uint16_t* omegas);
|
69
|
+
|
70
|
+
|
71
|
+
#endif /* OPENSSL_HEADER_NEWHOPE_INTERNAL_H */
|
@@ -0,0 +1,174 @@
|
|
1
|
+
/* Copyright (c) 2016, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include <string.h>
|
16
|
+
|
17
|
+
#include <openssl/mem.h>
|
18
|
+
#include <openssl/rand.h>
|
19
|
+
|
20
|
+
#include "internal.h"
|
21
|
+
|
22
|
+
|
23
|
+
NEWHOPE_POLY *NEWHOPE_POLY_new(void) {
|
24
|
+
return (NEWHOPE_POLY *)OPENSSL_malloc(sizeof(NEWHOPE_POLY));
|
25
|
+
}
|
26
|
+
|
27
|
+
void NEWHOPE_POLY_free(NEWHOPE_POLY *p) { OPENSSL_free(p); }
|
28
|
+
|
29
|
+
/* Encodes reconciliation data from |c| into |r|. */
|
30
|
+
static void encode_rec(const NEWHOPE_POLY *c, uint8_t *r) {
|
31
|
+
int i;
|
32
|
+
for (i = 0; i < PARAM_N / 4; i++) {
|
33
|
+
r[i] = c->coeffs[4 * i] | (c->coeffs[4 * i + 1] << 2) |
|
34
|
+
(c->coeffs[4 * i + 2] << 4) | (c->coeffs[4 * i + 3] << 6);
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
/* Decodes reconciliation data from |r| into |c|. */
|
39
|
+
static void decode_rec(const uint8_t *r, NEWHOPE_POLY *c) {
|
40
|
+
int i;
|
41
|
+
for (i = 0; i < PARAM_N / 4; i++) {
|
42
|
+
c->coeffs[4 * i + 0] = r[i] & 0x03;
|
43
|
+
c->coeffs[4 * i + 1] = (r[i] >> 2) & 0x03;
|
44
|
+
c->coeffs[4 * i + 2] = (r[i] >> 4) & 0x03;
|
45
|
+
c->coeffs[4 * i + 3] = (r[i] >> 6);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
void NEWHOPE_offer(uint8_t *offermsg, NEWHOPE_POLY *s) {
|
50
|
+
NEWHOPE_POLY_noise_ntt(s);
|
51
|
+
|
52
|
+
/* The first part of the offer message is the seed, which compactly encodes
|
53
|
+
* a. */
|
54
|
+
NEWHOPE_POLY a;
|
55
|
+
uint8_t *seed = &offermsg[NEWHOPE_POLY_LENGTH];
|
56
|
+
RAND_bytes(seed, SEED_LENGTH);
|
57
|
+
newhope_poly_uniform(&a, seed);
|
58
|
+
|
59
|
+
NEWHOPE_POLY e;
|
60
|
+
NEWHOPE_POLY_noise_ntt(&e);
|
61
|
+
|
62
|
+
/* The second part of the offer message is the polynomial pk = a*s+e */
|
63
|
+
NEWHOPE_POLY pk;
|
64
|
+
NEWHOPE_offer_computation(&pk, s, &e, &a);
|
65
|
+
NEWHOPE_POLY_tobytes(offermsg, &pk);
|
66
|
+
}
|
67
|
+
|
68
|
+
int NEWHOPE_accept(uint8_t key[SHA256_DIGEST_LENGTH],
|
69
|
+
uint8_t acceptmsg[NEWHOPE_ACCEPTMSG_LENGTH],
|
70
|
+
const uint8_t offermsg[NEWHOPE_OFFERMSG_LENGTH],
|
71
|
+
size_t msg_len) {
|
72
|
+
if (msg_len != NEWHOPE_OFFERMSG_LENGTH) {
|
73
|
+
return 0;
|
74
|
+
}
|
75
|
+
|
76
|
+
/* Decode the |offermsg|, generating the same |a| as the peer, from the peer's
|
77
|
+
* seed. */
|
78
|
+
NEWHOPE_POLY pk, a;
|
79
|
+
NEWHOPE_offer_frommsg(&pk, &a, offermsg);
|
80
|
+
|
81
|
+
/* Generate noise polynomials used to generate our key. */
|
82
|
+
NEWHOPE_POLY sp, ep, epp;
|
83
|
+
NEWHOPE_POLY_noise_ntt(&sp);
|
84
|
+
NEWHOPE_POLY_noise_ntt(&ep);
|
85
|
+
NEWHOPE_POLY_noise(&epp); /* intentionally not NTT */
|
86
|
+
|
87
|
+
/* Generate random bytes used for reconciliation. (The reference
|
88
|
+
* implementation calls ChaCha20 here.) */
|
89
|
+
uint8_t rand[32];
|
90
|
+
RAND_bytes(rand, sizeof(rand));
|
91
|
+
|
92
|
+
/* Encode |bp| and |c| as the |acceptmsg|. */
|
93
|
+
NEWHOPE_POLY bp, c;
|
94
|
+
uint8_t k[NEWHOPE_KEY_LENGTH];
|
95
|
+
NEWHOPE_accept_computation(k, &bp, &c, &sp, &ep, &epp, rand, &pk, &a);
|
96
|
+
NEWHOPE_POLY_tobytes(acceptmsg, &bp);
|
97
|
+
encode_rec(&c, &acceptmsg[NEWHOPE_POLY_LENGTH]);
|
98
|
+
|
99
|
+
SHA256_CTX ctx;
|
100
|
+
if (!SHA256_Init(&ctx) ||
|
101
|
+
!SHA256_Update(&ctx, k, NEWHOPE_KEY_LENGTH) ||
|
102
|
+
!SHA256_Final(key, &ctx)) {
|
103
|
+
return 0;
|
104
|
+
}
|
105
|
+
|
106
|
+
return 1;
|
107
|
+
}
|
108
|
+
|
109
|
+
int NEWHOPE_finish(uint8_t key[SHA256_DIGEST_LENGTH], const NEWHOPE_POLY *sk,
|
110
|
+
const uint8_t acceptmsg[NEWHOPE_ACCEPTMSG_LENGTH],
|
111
|
+
size_t msg_len) {
|
112
|
+
if (msg_len != NEWHOPE_ACCEPTMSG_LENGTH) {
|
113
|
+
return 0;
|
114
|
+
}
|
115
|
+
|
116
|
+
/* Decode the accept message into |bp| and |c|. */
|
117
|
+
NEWHOPE_POLY bp, c;
|
118
|
+
NEWHOPE_POLY_frombytes(&bp, acceptmsg);
|
119
|
+
decode_rec(&acceptmsg[NEWHOPE_POLY_LENGTH], &c);
|
120
|
+
|
121
|
+
uint8_t k[NEWHOPE_KEY_LENGTH];
|
122
|
+
NEWHOPE_finish_computation(k, sk, &bp, &c);
|
123
|
+
SHA256_CTX ctx;
|
124
|
+
if (!SHA256_Init(&ctx) ||
|
125
|
+
!SHA256_Update(&ctx, k, NEWHOPE_KEY_LENGTH) ||
|
126
|
+
!SHA256_Final(key, &ctx)) {
|
127
|
+
return 0;
|
128
|
+
}
|
129
|
+
|
130
|
+
return 1;
|
131
|
+
}
|
132
|
+
|
133
|
+
void NEWHOPE_offer_computation(NEWHOPE_POLY *out_pk,
|
134
|
+
const NEWHOPE_POLY *s, const NEWHOPE_POLY *e,
|
135
|
+
const NEWHOPE_POLY *a) {
|
136
|
+
NEWHOPE_POLY r;
|
137
|
+
newhope_poly_pointwise(&r, s, a);
|
138
|
+
newhope_poly_add(out_pk, e, &r);
|
139
|
+
}
|
140
|
+
|
141
|
+
void NEWHOPE_accept_computation(
|
142
|
+
uint8_t k[NEWHOPE_KEY_LENGTH], NEWHOPE_POLY *bp,
|
143
|
+
NEWHOPE_POLY *reconciliation,
|
144
|
+
const NEWHOPE_POLY *sp, const NEWHOPE_POLY *ep, const NEWHOPE_POLY *epp,
|
145
|
+
const uint8_t rand[32],
|
146
|
+
const NEWHOPE_POLY *pk, const NEWHOPE_POLY *a) {
|
147
|
+
/* bp = a*s' + e' */
|
148
|
+
newhope_poly_pointwise(bp, a, sp);
|
149
|
+
newhope_poly_add(bp, bp, ep);
|
150
|
+
|
151
|
+
/* v = pk * s' + e'' */
|
152
|
+
NEWHOPE_POLY v;
|
153
|
+
newhope_poly_pointwise(&v, pk, sp);
|
154
|
+
newhope_poly_invntt(&v);
|
155
|
+
newhope_poly_add(&v, &v, epp);
|
156
|
+
newhope_helprec(reconciliation, &v, rand);
|
157
|
+
newhope_reconcile(k, &v, reconciliation);
|
158
|
+
}
|
159
|
+
|
160
|
+
void NEWHOPE_finish_computation(uint8_t k[NEWHOPE_KEY_LENGTH],
|
161
|
+
const NEWHOPE_POLY *sk, const NEWHOPE_POLY *bp,
|
162
|
+
const NEWHOPE_POLY *reconciliation) {
|
163
|
+
NEWHOPE_POLY v;
|
164
|
+
newhope_poly_pointwise(&v, sk, bp);
|
165
|
+
newhope_poly_invntt(&v);
|
166
|
+
newhope_reconcile(k, &v, reconciliation);
|
167
|
+
}
|
168
|
+
|
169
|
+
void NEWHOPE_offer_frommsg(NEWHOPE_POLY *out_pk, NEWHOPE_POLY *out_a,
|
170
|
+
const uint8_t offermsg[NEWHOPE_OFFERMSG_LENGTH]) {
|
171
|
+
NEWHOPE_POLY_frombytes(out_pk, offermsg);
|
172
|
+
const uint8_t *seed = offermsg + NEWHOPE_POLY_LENGTH;
|
173
|
+
newhope_poly_uniform(out_a, seed);
|
174
|
+
}
|