grpc-flamingo 1.11.0 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +1150 -176
- data/etc/roots.pem +40 -196
- data/include/grpc/grpc.h +49 -8
- data/include/grpc/grpc_security.h +123 -2
- data/include/grpc/grpc_security_constants.h +6 -0
- data/include/grpc/impl/codegen/fork.h +4 -4
- data/include/grpc/impl/codegen/grpc_types.h +26 -5
- data/include/grpc/impl/codegen/log.h +112 -0
- data/include/grpc/impl/codegen/port_platform.h +55 -4
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/log.h +2 -80
- data/include/grpc/support/string_util.h +2 -0
- data/include/grpc/support/sync.h +0 -16
- data/src/boringssl/err_data.c +602 -588
- data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
- data/src/core/ext/filters/client_channel/client_channel.h +5 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
- data/src/core/ext/filters/client_channel/method_params.h +4 -0
- data/src/core/ext/filters/client_channel/resolver.h +10 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
- data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
- data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
- data/src/core/ext/filters/client_channel/subchannel.h +11 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
- data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
- data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
- data/src/core/lib/channel/channel_args.cc +28 -0
- data/src/core/lib/channel/channel_args.h +4 -0
- data/src/core/lib/channel/channel_stack.cc +22 -29
- data/src/core/lib/channel/channel_stack.h +2 -2
- data/src/core/lib/channel/channel_stack_builder.cc +0 -3
- data/src/core/lib/channel/channel_stack_builder.h +0 -2
- data/src/core/lib/channel/channel_trace.cc +28 -63
- data/src/core/lib/channel/channel_trace.h +13 -17
- data/src/core/lib/channel/channelz.cc +153 -0
- data/src/core/lib/channel/channelz.h +133 -0
- data/src/core/lib/channel/channelz_registry.cc +145 -0
- data/src/core/lib/channel/channelz_registry.h +120 -0
- data/src/core/lib/channel/connected_channel.cc +8 -1
- data/src/core/lib/channel/handshaker.cc +71 -0
- data/src/core/lib/channel/handshaker.h +4 -0
- data/src/core/lib/debug/stats.h +7 -0
- data/src/core/lib/debug/stats_data.cc +5 -0
- data/src/core/lib/debug/stats_data.h +120 -0
- data/src/core/lib/debug/trace.cc +2 -1
- data/src/core/lib/debug/trace.h +12 -1
- data/src/core/lib/gpr/alloc.h +28 -0
- data/src/core/lib/gpr/arena.cc +38 -45
- data/src/core/lib/gpr/log.cc +8 -2
- data/src/core/lib/gpr/log_android.cc +4 -0
- data/src/core/lib/gpr/log_linux.cc +4 -0
- data/src/core/lib/gpr/log_posix.cc +4 -0
- data/src/core/lib/gpr/log_windows.cc +5 -0
- data/src/core/lib/gpr/string.cc +28 -0
- data/src/core/lib/gpr/string.h +10 -0
- data/src/core/lib/gprpp/abstract.h +5 -2
- data/src/core/lib/gprpp/fork.cc +268 -0
- data/src/core/lib/gprpp/fork.h +88 -0
- data/src/core/lib/gprpp/inlined_vector.h +87 -37
- data/src/core/lib/gprpp/memory.h +12 -0
- data/src/core/lib/gprpp/mutex_lock.h +42 -0
- data/src/core/lib/gprpp/orphanable.h +10 -12
- data/src/core/lib/gprpp/ref_counted.h +10 -12
- data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
- data/src/core/lib/gprpp/thd.h +0 -3
- data/src/core/lib/gprpp/thd_posix.cc +5 -54
- data/src/core/lib/gprpp/thd_windows.cc +0 -7
- data/src/core/lib/http/httpcli_security_connector.cc +1 -3
- data/src/core/lib/iomgr/call_combiner.cc +13 -13
- data/src/core/lib/iomgr/call_combiner.h +84 -1
- data/src/core/lib/iomgr/closure.h +6 -5
- data/src/core/lib/iomgr/combiner.cc +30 -13
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +12 -0
- data/src/core/lib/iomgr/error.h +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
- data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
- data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
- data/src/core/lib/iomgr/ev_posix.cc +88 -24
- data/src/core/lib/iomgr/ev_posix.h +48 -12
- data/src/core/lib/iomgr/exec_ctx.cc +15 -9
- data/src/core/lib/iomgr/exec_ctx.h +48 -20
- data/src/core/lib/iomgr/executor.cc +274 -142
- data/src/core/lib/iomgr/executor.h +82 -16
- data/src/core/lib/iomgr/fork_posix.cc +42 -19
- data/src/core/lib/iomgr/iocp_windows.cc +9 -4
- data/src/core/lib/iomgr/iomgr.cc +2 -0
- data/src/core/lib/iomgr/iomgr.h +5 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +5 -1
- data/src/core/lib/iomgr/polling_entity.cc +11 -2
- data/src/core/lib/iomgr/pollset_custom.cc +2 -2
- data/src/core/lib/iomgr/port.h +51 -1
- data/src/core/lib/iomgr/resolve_address.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
- data/src/core/lib/iomgr/resource_quota.cc +89 -12
- data/src/core/lib/iomgr/resource_quota.h +16 -0
- data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +1 -1
- data/src/core/lib/iomgr/socket_utils.h +9 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
- data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
- data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
- data/src/core/lib/iomgr/socket_windows.cc +33 -0
- data/src/core/lib/iomgr/socket_windows.h +6 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
- data/src/core/lib/iomgr/tcp_custom.cc +11 -11
- data/src/core/lib/iomgr/tcp_posix.cc +49 -36
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
- data/src/core/lib/iomgr/tcp_uv.cc +3 -0
- data/src/core/lib/iomgr/tcp_windows.cc +18 -2
- data/src/core/lib/iomgr/tcp_windows.h +2 -0
- data/src/core/lib/iomgr/timer.h +4 -3
- data/src/core/lib/iomgr/timer_generic.cc +133 -51
- data/src/core/lib/iomgr/timer_manager.cc +12 -14
- data/src/core/lib/iomgr/timer_uv.cc +3 -0
- data/src/core/lib/iomgr/udp_server.cc +106 -52
- data/src/core/lib/iomgr/udp_server.h +8 -4
- data/src/core/lib/json/json.cc +12 -1
- data/src/core/lib/json/json.h +5 -0
- data/src/core/lib/profiling/basic_timers.cc +1 -0
- data/src/core/lib/security/context/security_context.cc +8 -8
- data/src/core/lib/security/context/security_context.h +6 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
- data/src/core/lib/security/credentials/credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
- data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
- data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
- data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
- data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
- data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
- data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
- data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
- data/src/core/lib/security/security_connector/security_connector.cc +79 -32
- data/src/core/lib/security/security_connector/security_connector.h +5 -3
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
- data/src/core/lib/security/transport/security_handshaker.cc +7 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
- data/src/core/lib/security/util/json_util.cc +4 -0
- data/src/core/lib/slice/slice.cc +6 -2
- data/src/core/lib/slice/slice_buffer.cc +27 -7
- data/src/core/lib/slice/slice_hash_table.h +4 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
- data/src/core/lib/surface/call.cc +119 -58
- data/src/core/lib/surface/call.h +7 -0
- data/src/core/lib/surface/channel.cc +50 -18
- data/src/core/lib/surface/channel.h +4 -0
- data/src/core/lib/surface/completion_queue.cc +153 -18
- data/src/core/lib/surface/completion_queue.h +20 -2
- data/src/core/lib/surface/completion_queue_factory.cc +13 -4
- data/src/core/lib/surface/init.cc +7 -8
- data/src/core/lib/surface/init.h +0 -1
- data/src/core/lib/surface/server.cc +16 -0
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/byte_stream.cc +1 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -7
- data/src/core/lib/transport/service_config.cc +2 -2
- data/src/core/lib/transport/service_config.h +3 -3
- data/src/core/lib/transport/transport.cc +22 -10
- data/src/core/lib/transport/transport.h +18 -18
- data/src/core/lib/transport/transport_op_string.cc +1 -8
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
- data/src/core/tsi/fake_transport_security.cc +1 -0
- data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
- data/src/core/tsi/local_transport_security.cc +209 -0
- data/src/core/tsi/local_transport_security.h +51 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +245 -116
- data/src/core/tsi/ssl_types.h +2 -0
- data/src/core/tsi/transport_security.cc +14 -0
- data/src/core/tsi/transport_security.h +2 -0
- data/src/core/tsi/transport_security_interface.h +11 -1
- data/src/ruby/bin/math_client.rb +17 -9
- data/src/ruby/ext/grpc/extconf.rb +1 -26
- data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
- data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +7 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
- data/src/ruby/spec/call_credentials_spec.rb +1 -1
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +1 -1
- data/src/ruby/spec/client_auth_spec.rb +1 -12
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/compression_options_spec.rb +1 -1
- data/src/ruby/spec/error_sanity_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
- data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/service_spec.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +1 -1
- data/src/ruby/spec/server_spec.rb +1 -1
- data/src/ruby/spec/spec_helper.rb +1 -0
- data/src/ruby/spec/support/services.rb +1 -1
- data/src/ruby/spec/time_consts_spec.rb +1 -1
- data/third_party/address_sorting/address_sorting.c +17 -11
- data/third_party/address_sorting/address_sorting_windows.c +43 -3
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
- data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
- data/third_party/boringssl/crypto/bio/fd.c +1 -0
- data/third_party/boringssl/crypto/bio/file.c +2 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
- data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
- data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
- data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
- data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
- data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
- data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
- data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
- data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
- data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
- data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
- data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
- data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
- data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
- data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
- data/third_party/boringssl/crypto/internal.h +65 -2
- data/third_party/boringssl/crypto/mem.c +0 -2
- data/third_party/boringssl/crypto/obj/obj.c +6 -73
- data/third_party/boringssl/crypto/thread_pthread.c +35 -5
- data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
- data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
- data/third_party/boringssl/crypto/x509/x_name.c +13 -0
- data/third_party/boringssl/include/openssl/aead.h +10 -0
- data/third_party/boringssl/include/openssl/asn1.h +2 -3
- data/third_party/boringssl/include/openssl/base.h +5 -14
- data/third_party/boringssl/include/openssl/bio.h +1 -1
- data/third_party/boringssl/include/openssl/bn.h +62 -18
- data/third_party/boringssl/include/openssl/bytestring.h +53 -28
- data/third_party/boringssl/include/openssl/crypto.h +4 -0
- data/third_party/boringssl/include/openssl/ec.h +10 -4
- data/third_party/boringssl/include/openssl/ec_key.h +7 -6
- data/third_party/boringssl/include/openssl/err.h +9 -9
- data/third_party/boringssl/include/openssl/evp.h +1 -1
- data/third_party/boringssl/include/openssl/rsa.h +35 -10
- data/third_party/boringssl/include/openssl/ssl.h +167 -19
- data/third_party/boringssl/include/openssl/ssl3.h +0 -1
- data/third_party/boringssl/include/openssl/stack.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +10 -2
- data/third_party/boringssl/include/openssl/x509.h +4 -0
- data/third_party/boringssl/include/openssl/x509v3.h +1 -0
- data/third_party/boringssl/ssl/d1_both.cc +16 -2
- data/third_party/boringssl/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl/ssl/handoff.cc +285 -0
- data/third_party/boringssl/ssl/handshake.cc +26 -12
- data/third_party/boringssl/ssl/handshake_client.cc +101 -95
- data/third_party/boringssl/ssl/handshake_server.cc +14 -2
- data/third_party/boringssl/ssl/internal.h +132 -79
- data/third_party/boringssl/ssl/s3_both.cc +2 -2
- data/third_party/boringssl/ssl/s3_lib.cc +3 -1
- data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
- data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
- data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
- data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
- data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
- data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
- data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
- data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
- data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
- data/third_party/boringssl/ssl/t1_enc.cc +73 -124
- data/third_party/boringssl/ssl/t1_lib.cc +367 -41
- data/third_party/boringssl/ssl/tls13_both.cc +8 -0
- data/third_party/boringssl/ssl/tls13_client.cc +98 -184
- data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
- data/third_party/boringssl/ssl/tls13_server.cc +91 -137
- data/third_party/boringssl/ssl/tls_method.cc +0 -17
- data/third_party/boringssl/ssl/tls_record.cc +1 -10
- data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
- data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
- data/third_party/boringssl/third_party/fiat/internal.h +32 -20
- data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
- metadata +86 -71
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
- data/src/core/lib/channel/channel_trace_registry.cc +0 -80
- data/src/core/lib/channel/channel_trace_registry.h +0 -43
- data/src/core/lib/gpr/fork.cc +0 -78
- data/src/core/tsi/transport_security_adapter.cc +0 -235
- data/src/core/tsi/transport_security_adapter.h +0 -41
- data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
- data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
- data/src/ruby/pb/test/client.rb +0 -764
- data/src/ruby/pb/test/server.rb +0 -252
- data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
- data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
- data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -1148,7 +1148,7 @@ struct aead_aes_gcm_ctx {
|
|
1148
1148
|
|
1149
1149
|
struct aead_aes_gcm_tls12_ctx {
|
1150
1150
|
struct aead_aes_gcm_ctx gcm_ctx;
|
1151
|
-
uint64_t
|
1151
|
+
uint64_t min_next_nonce;
|
1152
1152
|
};
|
1153
1153
|
|
1154
1154
|
static int aead_aes_gcm_init_impl(struct aead_aes_gcm_ctx *gcm_ctx,
|
@@ -1349,7 +1349,7 @@ static int aead_aes_gcm_tls12_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
|
1349
1349
|
return 0;
|
1350
1350
|
}
|
1351
1351
|
|
1352
|
-
gcm_ctx->
|
1352
|
+
gcm_ctx->min_next_nonce = 0;
|
1353
1353
|
|
1354
1354
|
size_t actual_tag_len;
|
1355
1355
|
if (!aead_aes_gcm_init_impl(&gcm_ctx->gcm_ctx, &actual_tag_len, key, key_len,
|
@@ -1373,23 +1373,23 @@ static int aead_aes_gcm_tls12_seal_scatter(
|
|
1373
1373
|
size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
|
1374
1374
|
size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
|
1375
1375
|
struct aead_aes_gcm_tls12_ctx *gcm_ctx = ctx->aead_state;
|
1376
|
-
if (gcm_ctx->counter == UINT64_MAX) {
|
1377
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_NONCE);
|
1378
|
-
return 0;
|
1379
|
-
}
|
1380
|
-
|
1381
1376
|
if (nonce_len != 12) {
|
1382
1377
|
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
|
1383
1378
|
return 0;
|
1384
1379
|
}
|
1385
1380
|
|
1386
|
-
|
1387
|
-
|
1381
|
+
// The given nonces must be strictly monotonically increasing.
|
1382
|
+
uint64_t given_counter;
|
1383
|
+
OPENSSL_memcpy(&given_counter, nonce + nonce_len - sizeof(given_counter),
|
1384
|
+
sizeof(given_counter));
|
1385
|
+
given_counter = CRYPTO_bswap8(given_counter);
|
1386
|
+
if (given_counter == UINT64_MAX ||
|
1387
|
+
given_counter < gcm_ctx->min_next_nonce) {
|
1388
1388
|
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_NONCE);
|
1389
1389
|
return 0;
|
1390
1390
|
}
|
1391
1391
|
|
1392
|
-
gcm_ctx->
|
1392
|
+
gcm_ctx->min_next_nonce = given_counter + 1;
|
1393
1393
|
|
1394
1394
|
return aead_aes_gcm_seal_scatter(ctx, out, out_tag, out_tag_len,
|
1395
1395
|
max_out_tag_len, nonce, nonce_len, in,
|
@@ -215,13 +215,6 @@ static const uint8_t kP521Params[6 * 66] = {
|
|
215
215
|
0xB7, 0x1E, 0x91, 0x38, 0x64, 0x09,
|
216
216
|
};
|
217
217
|
|
218
|
-
// MSan appears to have a bug that causes code to be miscompiled in opt mode.
|
219
|
-
// While that is being looked at, don't run the uint128_t code under MSan.
|
220
|
-
#if defined(OPENSSL_64_BIT) && !defined(OPENSSL_WINDOWS) && \
|
221
|
-
!defined(MEMORY_SANITIZER)
|
222
|
-
#define BORINGSSL_USE_INT128_CODE
|
223
|
-
#endif
|
224
|
-
|
225
218
|
DEFINE_METHOD_FUNCTION(struct built_in_curves, OPENSSL_built_in_curves) {
|
226
219
|
// 1.3.132.0.35
|
227
220
|
static const uint8_t kOIDP521[] = {0x2b, 0x81, 0x04, 0x00, 0x23};
|
@@ -253,16 +246,12 @@ DEFINE_METHOD_FUNCTION(struct built_in_curves, OPENSSL_built_in_curves) {
|
|
253
246
|
out->curves[2].param_len = 32;
|
254
247
|
out->curves[2].params = kP256Params;
|
255
248
|
out->curves[2].method =
|
256
|
-
#if defined(BORINGSSL_USE_INT128_CODE)
|
257
249
|
#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && \
|
258
250
|
!defined(OPENSSL_SMALL)
|
259
251
|
EC_GFp_nistz256_method();
|
260
252
|
#else
|
261
253
|
EC_GFp_nistp256_method();
|
262
254
|
#endif
|
263
|
-
#else
|
264
|
-
EC_GFp_mont_method();
|
265
|
-
#endif
|
266
255
|
|
267
256
|
// 1.3.132.0.33
|
268
257
|
static const uint8_t kOIDP224[] = {0x2b, 0x81, 0x04, 0x00, 0x21};
|
@@ -273,7 +262,7 @@ DEFINE_METHOD_FUNCTION(struct built_in_curves, OPENSSL_built_in_curves) {
|
|
273
262
|
out->curves[3].param_len = 28;
|
274
263
|
out->curves[3].params = kP224Params;
|
275
264
|
out->curves[3].method =
|
276
|
-
#if defined(
|
265
|
+
#if defined(BORINGSSL_HAS_UINT128) && !defined(OPENSSL_SMALL)
|
277
266
|
EC_GFp_nistp224_method();
|
278
267
|
#else
|
279
268
|
EC_GFp_mont_method();
|
@@ -398,11 +387,12 @@ int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator,
|
|
398
387
|
EC_POINT_free(copy);
|
399
388
|
return 0;
|
400
389
|
}
|
390
|
+
// Store the order in minimal form, so it can be used with |BN_ULONG| arrays.
|
391
|
+
bn_set_minimal_width(&group->order);
|
401
392
|
|
402
393
|
BN_MONT_CTX_free(group->order_mont);
|
403
|
-
group->order_mont =
|
404
|
-
if (group->order_mont == NULL
|
405
|
-
!BN_MONT_CTX_set(group->order_mont, &group->order, NULL)) {
|
394
|
+
group->order_mont = BN_MONT_CTX_new_for_modulus(&group->order, NULL);
|
395
|
+
if (group->order_mont == NULL) {
|
406
396
|
return 0;
|
407
397
|
}
|
408
398
|
|
@@ -459,9 +449,8 @@ static EC_GROUP *ec_group_new_from_data(const struct built_in_curve *curve) {
|
|
459
449
|
goto err;
|
460
450
|
}
|
461
451
|
|
462
|
-
group->order_mont =
|
463
|
-
if (group->order_mont == NULL
|
464
|
-
!BN_MONT_CTX_set(group->order_mont, &group->order, ctx)) {
|
452
|
+
group->order_mont = BN_MONT_CTX_new_for_modulus(&group->order, ctx);
|
453
|
+
if (group->order_mont == NULL) {
|
465
454
|
OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
|
466
455
|
goto err;
|
467
456
|
}
|
@@ -779,6 +768,15 @@ int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *point,
|
|
779
768
|
}
|
780
769
|
|
781
770
|
if (!EC_POINT_is_on_curve(group, point, ctx)) {
|
771
|
+
// In the event of an error, defend against the caller not checking the
|
772
|
+
// return value by setting a known safe value: the base point.
|
773
|
+
const EC_POINT *generator = EC_GROUP_get0_generator(group);
|
774
|
+
// The generator can be missing if the caller is in the process of
|
775
|
+
// constructing an arbitrary group. In this, we give up and hope they're
|
776
|
+
// checking the return value.
|
777
|
+
if (generator) {
|
778
|
+
EC_POINT_copy(point, generator);
|
779
|
+
}
|
782
780
|
OPENSSL_PUT_ERROR(EC, EC_R_POINT_IS_NOT_ON_CURVE);
|
783
781
|
return 0;
|
784
782
|
}
|
@@ -817,6 +815,25 @@ int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx) {
|
|
817
815
|
return ec_GFp_simple_invert(group, a, ctx);
|
818
816
|
}
|
819
817
|
|
818
|
+
static int arbitrary_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
|
819
|
+
const BIGNUM *in, BN_CTX *ctx) {
|
820
|
+
if (ec_bignum_to_scalar(group, out, in)) {
|
821
|
+
return 1;
|
822
|
+
}
|
823
|
+
|
824
|
+
ERR_clear_error();
|
825
|
+
|
826
|
+
// This is an unusual input, so we do not guarantee constant-time processing.
|
827
|
+
const BIGNUM *order = &group->order;
|
828
|
+
BN_CTX_start(ctx);
|
829
|
+
BIGNUM *tmp = BN_CTX_get(ctx);
|
830
|
+
int ok = tmp != NULL &&
|
831
|
+
BN_nnmod(tmp, in, order, ctx) &&
|
832
|
+
ec_bignum_to_scalar_unchecked(group, out, tmp);
|
833
|
+
BN_CTX_end(ctx);
|
834
|
+
return ok;
|
835
|
+
}
|
836
|
+
|
820
837
|
int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar,
|
821
838
|
const EC_POINT *p, const BIGNUM *p_scalar, BN_CTX *ctx) {
|
822
839
|
// Previously, this function set |r| to the point at infinity if there was
|
@@ -828,30 +845,27 @@ int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar,
|
|
828
845
|
return 0;
|
829
846
|
}
|
830
847
|
|
831
|
-
// We cannot easily process arbitrary scalars in constant-time, and there is
|
832
|
-
// no need to do so. Require that scalars be the same size as the order.
|
833
|
-
//
|
834
|
-
// One could require they be fully reduced, but some consumers try to check
|
835
|
-
// that |order| * |pubkey| is the identity. This comes from following NIST SP
|
836
|
-
// 800-56A section 5.6.2.3.2. (Though all our curves have cofactor one, so
|
837
|
-
// this check isn't useful.)
|
838
848
|
int ret = 0;
|
839
849
|
EC_SCALAR g_scalar_storage, p_scalar_storage;
|
840
850
|
EC_SCALAR *g_scalar_arg = NULL, *p_scalar_arg = NULL;
|
841
|
-
|
851
|
+
BN_CTX *new_ctx = NULL;
|
852
|
+
if (ctx == NULL) {
|
853
|
+
new_ctx = BN_CTX_new();
|
854
|
+
if (new_ctx == NULL) {
|
855
|
+
goto err;
|
856
|
+
}
|
857
|
+
ctx = new_ctx;
|
858
|
+
}
|
859
|
+
|
842
860
|
if (g_scalar != NULL) {
|
843
|
-
if (
|
844
|
-
!ec_bignum_to_scalar(group, &g_scalar_storage, g_scalar)) {
|
845
|
-
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR);
|
861
|
+
if (!arbitrary_bignum_to_scalar(group, &g_scalar_storage, g_scalar, ctx)) {
|
846
862
|
goto err;
|
847
863
|
}
|
848
864
|
g_scalar_arg = &g_scalar_storage;
|
849
865
|
}
|
850
866
|
|
851
867
|
if (p_scalar != NULL) {
|
852
|
-
if (
|
853
|
-
!ec_bignum_to_scalar(group, &p_scalar_storage, p_scalar)) {
|
854
|
-
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR);
|
868
|
+
if (!arbitrary_bignum_to_scalar(group, &p_scalar_storage, p_scalar, ctx)) {
|
855
869
|
goto err;
|
856
870
|
}
|
857
871
|
p_scalar_arg = &p_scalar_storage;
|
@@ -860,14 +874,15 @@ int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar,
|
|
860
874
|
ret = ec_point_mul_scalar(group, r, g_scalar_arg, p, p_scalar_arg, ctx);
|
861
875
|
|
862
876
|
err:
|
877
|
+
BN_CTX_free(new_ctx);
|
863
878
|
OPENSSL_cleanse(&g_scalar_storage, sizeof(g_scalar_storage));
|
864
879
|
OPENSSL_cleanse(&p_scalar_storage, sizeof(p_scalar_storage));
|
865
880
|
return ret;
|
866
881
|
}
|
867
882
|
|
868
|
-
int
|
869
|
-
|
870
|
-
|
883
|
+
int ec_point_mul_scalar_public(const EC_GROUP *group, EC_POINT *r,
|
884
|
+
const EC_SCALAR *g_scalar, const EC_POINT *p,
|
885
|
+
const EC_SCALAR *p_scalar, BN_CTX *ctx) {
|
871
886
|
if ((g_scalar == NULL && p_scalar == NULL) ||
|
872
887
|
(p == NULL) != (p_scalar == NULL)) {
|
873
888
|
OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
|
@@ -880,19 +895,25 @@ int ec_point_mul_scalar(const EC_GROUP *group, EC_POINT *r,
|
|
880
895
|
return 0;
|
881
896
|
}
|
882
897
|
|
883
|
-
return group->meth->
|
898
|
+
return group->meth->mul_public(group, r, g_scalar, p, p_scalar, ctx);
|
884
899
|
}
|
885
900
|
|
886
|
-
int
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
901
|
+
int ec_point_mul_scalar(const EC_GROUP *group, EC_POINT *r,
|
902
|
+
const EC_SCALAR *g_scalar, const EC_POINT *p,
|
903
|
+
const EC_SCALAR *p_scalar, BN_CTX *ctx) {
|
904
|
+
if ((g_scalar == NULL && p_scalar == NULL) ||
|
905
|
+
(p == NULL) != (p_scalar == NULL)) {
|
906
|
+
OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
|
907
|
+
return 0;
|
908
|
+
}
|
909
|
+
|
910
|
+
if (EC_GROUP_cmp(group, r->group, NULL) != 0 ||
|
911
|
+
(p != NULL && EC_GROUP_cmp(group, p->group, NULL) != 0)) {
|
891
912
|
OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS);
|
892
913
|
return 0;
|
893
914
|
}
|
894
|
-
|
895
|
-
|
915
|
+
|
916
|
+
return group->meth->mul(group, r, g_scalar, p, p_scalar, ctx);
|
896
917
|
}
|
897
918
|
|
898
919
|
void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag) {}
|
@@ -927,17 +948,27 @@ size_t EC_get_builtin_curves(EC_builtin_curve *out_curves,
|
|
927
948
|
|
928
949
|
int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
|
929
950
|
const BIGNUM *in) {
|
930
|
-
if (
|
951
|
+
if (!ec_bignum_to_scalar_unchecked(group, out, in)) {
|
952
|
+
return 0;
|
953
|
+
}
|
954
|
+
if (!bn_less_than_words(out->words, group->order.d, group->order.width)) {
|
955
|
+
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR);
|
956
|
+
return 0;
|
957
|
+
}
|
958
|
+
return 1;
|
959
|
+
}
|
960
|
+
|
961
|
+
int ec_bignum_to_scalar_unchecked(const EC_GROUP *group, EC_SCALAR *out,
|
962
|
+
const BIGNUM *in) {
|
963
|
+
if (!bn_copy_words(out->words, group->order.width, in)) {
|
931
964
|
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR);
|
932
965
|
return 0;
|
933
966
|
}
|
934
|
-
OPENSSL_memset(out->words, 0, group->order.top * sizeof(BN_ULONG));
|
935
|
-
OPENSSL_memcpy(out->words, in->d, in->top * sizeof(BN_ULONG));
|
936
967
|
return 1;
|
937
968
|
}
|
938
969
|
|
939
970
|
int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out,
|
940
971
|
const uint8_t additional_data[32]) {
|
941
|
-
return bn_rand_range_words(out->words, 1, group->order.d, group->order.
|
972
|
+
return bn_rand_range_words(out->words, 1, group->order.d, group->order.width,
|
942
973
|
additional_data);
|
943
974
|
}
|
@@ -84,6 +84,25 @@
|
|
84
84
|
|
85
85
|
DEFINE_STATIC_EX_DATA_CLASS(g_ec_ex_data_class);
|
86
86
|
|
87
|
+
static EC_WRAPPED_SCALAR *ec_wrapped_scalar_new(const EC_GROUP *group) {
|
88
|
+
EC_WRAPPED_SCALAR *wrapped = OPENSSL_malloc(sizeof(EC_WRAPPED_SCALAR));
|
89
|
+
if (wrapped == NULL) {
|
90
|
+
OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
|
91
|
+
return NULL;
|
92
|
+
}
|
93
|
+
|
94
|
+
OPENSSL_memset(wrapped, 0, sizeof(EC_WRAPPED_SCALAR));
|
95
|
+
wrapped->bignum.d = wrapped->scalar.words;
|
96
|
+
wrapped->bignum.width = group->order.width;
|
97
|
+
wrapped->bignum.dmax = group->order.width;
|
98
|
+
wrapped->bignum.flags = BN_FLG_STATIC_DATA;
|
99
|
+
return wrapped;
|
100
|
+
}
|
101
|
+
|
102
|
+
static void ec_wrapped_scalar_free(EC_WRAPPED_SCALAR *scalar) {
|
103
|
+
OPENSSL_free(scalar);
|
104
|
+
}
|
105
|
+
|
87
106
|
EC_KEY *EC_KEY_new(void) { return EC_KEY_new_method(NULL); }
|
88
107
|
|
89
108
|
EC_KEY *EC_KEY_new_method(const ENGINE *engine) {
|
@@ -151,7 +170,7 @@ void EC_KEY_free(EC_KEY *r) {
|
|
151
170
|
|
152
171
|
EC_GROUP_free(r->group);
|
153
172
|
EC_POINT_free(r->pub_key);
|
154
|
-
|
173
|
+
ec_wrapped_scalar_free(r->priv_key);
|
155
174
|
BN_free(r->fixed_k);
|
156
175
|
|
157
176
|
CRYPTO_free_ex_data(g_ec_ex_data_class_bss_get(), r, &r->ex_data);
|
@@ -159,65 +178,29 @@ void EC_KEY_free(EC_KEY *r) {
|
|
159
178
|
OPENSSL_free(r);
|
160
179
|
}
|
161
180
|
|
162
|
-
EC_KEY *
|
163
|
-
if (
|
181
|
+
EC_KEY *EC_KEY_dup(const EC_KEY *src) {
|
182
|
+
if (src == NULL) {
|
164
183
|
OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
|
165
184
|
return NULL;
|
166
185
|
}
|
167
|
-
// Copy the parameters.
|
168
|
-
if (src->group) {
|
169
|
-
// TODO(fork): duplicating the group seems wasteful.
|
170
|
-
EC_GROUP_free(dest->group);
|
171
|
-
dest->group = EC_GROUP_dup(src->group);
|
172
|
-
if (dest->group == NULL) {
|
173
|
-
return NULL;
|
174
|
-
}
|
175
|
-
}
|
176
|
-
|
177
|
-
// Copy the public key.
|
178
|
-
if (src->pub_key && src->group) {
|
179
|
-
EC_POINT_free(dest->pub_key);
|
180
|
-
dest->pub_key = EC_POINT_dup(src->pub_key, src->group);
|
181
|
-
if (dest->pub_key == NULL) {
|
182
|
-
return NULL;
|
183
|
-
}
|
184
|
-
}
|
185
186
|
|
186
|
-
// copy the private key
|
187
|
-
if (src->priv_key) {
|
188
|
-
if (dest->priv_key == NULL) {
|
189
|
-
dest->priv_key = BN_new();
|
190
|
-
if (dest->priv_key == NULL) {
|
191
|
-
return NULL;
|
192
|
-
}
|
193
|
-
}
|
194
|
-
if (!BN_copy(dest->priv_key, src->priv_key)) {
|
195
|
-
return NULL;
|
196
|
-
}
|
197
|
-
}
|
198
|
-
// copy method/extra data
|
199
|
-
if (src->ecdsa_meth) {
|
200
|
-
METHOD_unref(dest->ecdsa_meth);
|
201
|
-
dest->ecdsa_meth = src->ecdsa_meth;
|
202
|
-
METHOD_ref(dest->ecdsa_meth);
|
203
|
-
}
|
204
|
-
|
205
|
-
// copy the rest
|
206
|
-
dest->enc_flag = src->enc_flag;
|
207
|
-
dest->conv_form = src->conv_form;
|
208
|
-
|
209
|
-
return dest;
|
210
|
-
}
|
211
|
-
|
212
|
-
EC_KEY *EC_KEY_dup(const EC_KEY *ec_key) {
|
213
187
|
EC_KEY *ret = EC_KEY_new();
|
214
188
|
if (ret == NULL) {
|
215
189
|
return NULL;
|
216
190
|
}
|
217
|
-
|
191
|
+
|
192
|
+
if ((src->group != NULL &&
|
193
|
+
!EC_KEY_set_group(ret, src->group)) ||
|
194
|
+
(src->pub_key != NULL &&
|
195
|
+
!EC_KEY_set_public_key(ret, src->pub_key)) ||
|
196
|
+
(src->priv_key != NULL &&
|
197
|
+
!EC_KEY_set_private_key(ret, EC_KEY_get0_private_key(src)))) {
|
218
198
|
EC_KEY_free(ret);
|
219
199
|
return NULL;
|
220
200
|
}
|
201
|
+
|
202
|
+
ret->enc_flag = src->enc_flag;
|
203
|
+
ret->conv_form = src->conv_form;
|
221
204
|
return ret;
|
222
205
|
}
|
223
206
|
|
@@ -233,35 +216,45 @@ int EC_KEY_is_opaque(const EC_KEY *key) {
|
|
233
216
|
const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key) { return key->group; }
|
234
217
|
|
235
218
|
int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group) {
|
219
|
+
// If |key| already has a group, it is an error to switch to another one.
|
220
|
+
if (key->group != NULL) {
|
221
|
+
if (EC_GROUP_cmp(key->group, group, NULL) != 0) {
|
222
|
+
OPENSSL_PUT_ERROR(EC, EC_R_GROUP_MISMATCH);
|
223
|
+
return 0;
|
224
|
+
}
|
225
|
+
return 1;
|
226
|
+
}
|
227
|
+
|
228
|
+
assert(key->priv_key == NULL);
|
229
|
+
assert(key->pub_key == NULL);
|
230
|
+
|
236
231
|
EC_GROUP_free(key->group);
|
237
|
-
// TODO(fork): duplicating the group seems wasteful but see
|
238
|
-
// |EC_KEY_set_conv_form|.
|
239
232
|
key->group = EC_GROUP_dup(group);
|
240
|
-
|
241
|
-
return 0;
|
242
|
-
}
|
243
|
-
// XXX: |BN_cmp| is not constant time.
|
244
|
-
if (key->priv_key != NULL &&
|
245
|
-
BN_cmp(key->priv_key, EC_GROUP_get0_order(group)) >= 0) {
|
246
|
-
return 0;
|
247
|
-
}
|
248
|
-
return 1;
|
233
|
+
return key->group != NULL;
|
249
234
|
}
|
250
235
|
|
251
236
|
const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key) {
|
252
|
-
return key->priv_key;
|
237
|
+
return key->priv_key != NULL ? &key->priv_key->bignum : NULL;
|
253
238
|
}
|
254
239
|
|
255
240
|
int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *priv_key) {
|
256
|
-
|
257
|
-
|
258
|
-
|
241
|
+
if (key->group == NULL) {
|
242
|
+
OPENSSL_PUT_ERROR(EC, EC_R_MISSING_PARAMETERS);
|
243
|
+
return 0;
|
244
|
+
}
|
245
|
+
|
246
|
+
EC_WRAPPED_SCALAR *scalar = ec_wrapped_scalar_new(key->group);
|
247
|
+
if (scalar == NULL) {
|
248
|
+
return 0;
|
249
|
+
}
|
250
|
+
if (!ec_bignum_to_scalar(key->group, &scalar->scalar, priv_key)) {
|
259
251
|
OPENSSL_PUT_ERROR(EC, EC_R_WRONG_ORDER);
|
252
|
+
ec_wrapped_scalar_free(scalar);
|
260
253
|
return 0;
|
261
254
|
}
|
262
|
-
|
263
|
-
key->priv_key =
|
264
|
-
return
|
255
|
+
ec_wrapped_scalar_free(key->priv_key);
|
256
|
+
key->priv_key = scalar;
|
257
|
+
return 1;
|
265
258
|
}
|
266
259
|
|
267
260
|
const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key) {
|
@@ -269,6 +262,16 @@ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key) {
|
|
269
262
|
}
|
270
263
|
|
271
264
|
int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub_key) {
|
265
|
+
if (key->group == NULL) {
|
266
|
+
OPENSSL_PUT_ERROR(EC, EC_R_MISSING_PARAMETERS);
|
267
|
+
return 0;
|
268
|
+
}
|
269
|
+
|
270
|
+
if (EC_GROUP_cmp(key->group, pub_key->group, NULL) != 0) {
|
271
|
+
OPENSSL_PUT_ERROR(EC, EC_R_GROUP_MISMATCH);
|
272
|
+
return 0;
|
273
|
+
}
|
274
|
+
|
272
275
|
EC_POINT_free(key->pub_key);
|
273
276
|
key->pub_key = EC_POINT_dup(pub_key, key->group);
|
274
277
|
return (key->pub_key == NULL) ? 0 : 1;
|
@@ -316,15 +319,11 @@ int EC_KEY_check_key(const EC_KEY *eckey) {
|
|
316
319
|
}
|
317
320
|
// in case the priv_key is present :
|
318
321
|
// check if generator * priv_key == pub_key
|
319
|
-
if (eckey->priv_key) {
|
320
|
-
// XXX: |BN_cmp| is not constant time.
|
321
|
-
if (BN_cmp(eckey->priv_key, EC_GROUP_get0_order(eckey->group)) >= 0) {
|
322
|
-
OPENSSL_PUT_ERROR(EC, EC_R_WRONG_ORDER);
|
323
|
-
goto err;
|
324
|
-
}
|
322
|
+
if (eckey->priv_key != NULL) {
|
325
323
|
point = EC_POINT_new(eckey->group);
|
326
324
|
if (point == NULL ||
|
327
|
-
!
|
325
|
+
!ec_point_mul_scalar(eckey->group, point, &eckey->priv_key->scalar,
|
326
|
+
NULL, NULL, ctx)) {
|
328
327
|
OPENSSL_PUT_ERROR(EC, ERR_R_EC_LIB);
|
329
328
|
goto err;
|
330
329
|
}
|
@@ -372,8 +371,6 @@ int EC_KEY_check_fips(const EC_KEY *key) {
|
|
372
371
|
|
373
372
|
int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x,
|
374
373
|
BIGNUM *y) {
|
375
|
-
BN_CTX *ctx = NULL;
|
376
|
-
BIGNUM *tx, *ty;
|
377
374
|
EC_POINT *point = NULL;
|
378
375
|
int ok = 0;
|
379
376
|
|
@@ -381,114 +378,53 @@ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x,
|
|
381
378
|
OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
|
382
379
|
return 0;
|
383
380
|
}
|
384
|
-
ctx = BN_CTX_new();
|
385
381
|
|
386
|
-
if (ctx == NULL) {
|
387
|
-
return 0;
|
388
|
-
}
|
389
|
-
|
390
|
-
BN_CTX_start(ctx);
|
391
382
|
point = EC_POINT_new(key->group);
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
tx = BN_CTX_get(ctx);
|
398
|
-
ty = BN_CTX_get(ctx);
|
399
|
-
if (tx == NULL ||
|
400
|
-
ty == NULL) {
|
401
|
-
goto err;
|
402
|
-
}
|
403
|
-
|
404
|
-
if (!EC_POINT_set_affine_coordinates_GFp(key->group, point, x, y, ctx) ||
|
405
|
-
!EC_POINT_get_affine_coordinates_GFp(key->group, point, tx, ty, ctx)) {
|
406
|
-
goto err;
|
407
|
-
}
|
408
|
-
|
409
|
-
// Check if retrieved coordinates match originals: if not values
|
410
|
-
// are out of range.
|
411
|
-
if (BN_cmp(x, tx) || BN_cmp(y, ty)) {
|
412
|
-
OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE);
|
413
|
-
goto err;
|
414
|
-
}
|
415
|
-
|
416
|
-
if (!EC_KEY_set_public_key(key, point)) {
|
417
|
-
goto err;
|
418
|
-
}
|
419
|
-
|
420
|
-
if (EC_KEY_check_key(key) == 0) {
|
383
|
+
if (point == NULL ||
|
384
|
+
!EC_POINT_set_affine_coordinates_GFp(key->group, point, x, y, NULL) ||
|
385
|
+
!EC_KEY_set_public_key(key, point) ||
|
386
|
+
!EC_KEY_check_key(key)) {
|
421
387
|
goto err;
|
422
388
|
}
|
423
389
|
|
424
390
|
ok = 1;
|
425
391
|
|
426
392
|
err:
|
427
|
-
BN_CTX_end(ctx);
|
428
|
-
BN_CTX_free(ctx);
|
429
393
|
EC_POINT_free(point);
|
430
394
|
return ok;
|
431
395
|
}
|
432
396
|
|
433
|
-
int EC_KEY_generate_key(EC_KEY *
|
434
|
-
|
435
|
-
BIGNUM *priv_key = NULL;
|
436
|
-
EC_POINT *pub_key = NULL;
|
437
|
-
|
438
|
-
if (!eckey || !eckey->group) {
|
397
|
+
int EC_KEY_generate_key(EC_KEY *key) {
|
398
|
+
if (key == NULL || key->group == NULL) {
|
439
399
|
OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
|
440
400
|
return 0;
|
441
401
|
}
|
442
402
|
|
443
|
-
|
444
|
-
|
445
|
-
if (priv_key == NULL) {
|
446
|
-
goto err;
|
447
|
-
}
|
448
|
-
} else {
|
449
|
-
priv_key = eckey->priv_key;
|
450
|
-
}
|
451
|
-
|
452
|
-
const BIGNUM *order = EC_GROUP_get0_order(eckey->group);
|
453
|
-
|
454
|
-
// Check that the size of the group order is FIPS compliant (FIPS 186-4
|
455
|
-
// B.4.2).
|
456
|
-
if (BN_num_bits(order) < 160) {
|
403
|
+
// Check that the group order is FIPS compliant (FIPS 186-4 B.4.2).
|
404
|
+
if (BN_num_bits(EC_GROUP_get0_order(key->group)) < 160) {
|
457
405
|
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_GROUP_ORDER);
|
458
|
-
|
459
|
-
}
|
460
|
-
|
461
|
-
// Generate the private key by testing candidates (FIPS 186-4 B.4.2).
|
462
|
-
if (!BN_rand_range_ex(priv_key, 1, order)) {
|
463
|
-
goto err;
|
464
|
-
}
|
465
|
-
|
466
|
-
if (eckey->pub_key == NULL) {
|
467
|
-
pub_key = EC_POINT_new(eckey->group);
|
468
|
-
if (pub_key == NULL) {
|
469
|
-
goto err;
|
470
|
-
}
|
471
|
-
} else {
|
472
|
-
pub_key = eckey->pub_key;
|
473
|
-
}
|
474
|
-
|
475
|
-
if (!EC_POINT_mul(eckey->group, pub_key, priv_key, NULL, NULL, NULL)) {
|
476
|
-
goto err;
|
406
|
+
return 0;
|
477
407
|
}
|
478
408
|
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
409
|
+
static const uint8_t kDefaultAdditionalData[32] = {0};
|
410
|
+
EC_WRAPPED_SCALAR *priv_key = ec_wrapped_scalar_new(key->group);
|
411
|
+
EC_POINT *pub_key = EC_POINT_new(key->group);
|
412
|
+
if (priv_key == NULL || pub_key == NULL ||
|
413
|
+
// Generate the private key by testing candidates (FIPS 186-4 B.4.2).
|
414
|
+
!ec_random_nonzero_scalar(key->group, &priv_key->scalar,
|
415
|
+
kDefaultAdditionalData) ||
|
416
|
+
!ec_point_mul_scalar(key->group, pub_key, &priv_key->scalar, NULL, NULL,
|
417
|
+
NULL)) {
|
486
418
|
EC_POINT_free(pub_key);
|
419
|
+
ec_wrapped_scalar_free(priv_key);
|
420
|
+
return 0;
|
487
421
|
}
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
422
|
+
|
423
|
+
ec_wrapped_scalar_free(key->priv_key);
|
424
|
+
key->priv_key = priv_key;
|
425
|
+
EC_POINT_free(key->pub_key);
|
426
|
+
key->pub_key = pub_key;
|
427
|
+
return 1;
|
492
428
|
}
|
493
429
|
|
494
430
|
int EC_KEY_generate_key_fips(EC_KEY *eckey) {
|