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
@@ -64,7 +64,8 @@
|
|
64
64
|
// This file has two other implementations: x86 assembly language in
|
65
65
|
// asm/bn-586.pl and x86_64 inline assembly in asm/x86_64-gcc.c.
|
66
66
|
#if defined(OPENSSL_NO_ASM) || \
|
67
|
-
!(defined(OPENSSL_X86) ||
|
67
|
+
!(defined(OPENSSL_X86) || \
|
68
|
+
(defined(OPENSSL_X86_64) && (defined(__GNUC__) || defined(__clang__))))
|
68
69
|
|
69
70
|
#ifdef BN_ULLONG
|
70
71
|
#define mul_add(r, a, w, c) \
|
@@ -140,9 +140,12 @@ extern "C" {
|
|
140
140
|
|
141
141
|
#if defined(OPENSSL_64_BIT)
|
142
142
|
|
143
|
-
#if
|
143
|
+
#if defined(BORINGSSL_HAS_UINT128)
|
144
144
|
// MSVC doesn't support two-word integers on 64-bit.
|
145
145
|
#define BN_ULLONG uint128_t
|
146
|
+
#if defined(BORINGSSL_CAN_DIVIDE_UINT128)
|
147
|
+
#define BN_CAN_DIVIDE_ULLONG
|
148
|
+
#endif
|
146
149
|
#endif
|
147
150
|
|
148
151
|
#define BN_BITS2 64
|
@@ -160,6 +163,7 @@ extern "C" {
|
|
160
163
|
#elif defined(OPENSSL_32_BIT)
|
161
164
|
|
162
165
|
#define BN_ULLONG uint64_t
|
166
|
+
#define BN_CAN_DIVIDE_ULLONG
|
163
167
|
#define BN_BITS2 32
|
164
168
|
#define BN_BYTES 4
|
165
169
|
#define BN_BITS4 16
|
@@ -193,9 +197,13 @@ extern "C" {
|
|
193
197
|
#define Hw(t) ((BN_ULONG)((t) >> BN_BITS2))
|
194
198
|
#endif
|
195
199
|
|
196
|
-
//
|
197
|
-
//
|
198
|
-
|
200
|
+
// bn_minimal_width returns the minimal value of |bn->top| which fits the
|
201
|
+
// value of |bn|.
|
202
|
+
int bn_minimal_width(const BIGNUM *bn);
|
203
|
+
|
204
|
+
// bn_set_minimal_width sets |bn->width| to |bn_minimal_width(bn)|. If |bn| is
|
205
|
+
// zero, |bn->neg| is set to zero.
|
206
|
+
void bn_set_minimal_width(BIGNUM *bn);
|
199
207
|
|
200
208
|
// bn_wexpand ensures that |bn| has at least |words| works of space without
|
201
209
|
// altering its value. It returns one on success or zero on allocation
|
@@ -206,10 +214,27 @@ int bn_wexpand(BIGNUM *bn, size_t words);
|
|
206
214
|
// than a number of words.
|
207
215
|
int bn_expand(BIGNUM *bn, size_t bits);
|
208
216
|
|
217
|
+
// bn_resize_words adjusts |bn->top| to be |words|. It returns one on success
|
218
|
+
// and zero on allocation error or if |bn|'s value is too large.
|
219
|
+
OPENSSL_EXPORT int bn_resize_words(BIGNUM *bn, size_t words);
|
220
|
+
|
221
|
+
// bn_select_words sets |r| to |a| if |mask| is all ones or |b| if |mask| is
|
222
|
+
// all zeros.
|
223
|
+
void bn_select_words(BN_ULONG *r, BN_ULONG mask, const BN_ULONG *a,
|
224
|
+
const BN_ULONG *b, size_t num);
|
225
|
+
|
209
226
|
// bn_set_words sets |bn| to the value encoded in the |num| words in |words|,
|
210
227
|
// least significant word first.
|
211
228
|
int bn_set_words(BIGNUM *bn, const BN_ULONG *words, size_t num);
|
212
229
|
|
230
|
+
// bn_fits_in_words returns one if |bn| may be represented in |num| words, plus
|
231
|
+
// a sign bit, and zero otherwise.
|
232
|
+
int bn_fits_in_words(const BIGNUM *bn, size_t num);
|
233
|
+
|
234
|
+
// bn_copy_words copies the value of |bn| to |out| and returns one if the value
|
235
|
+
// is representable in |num| words. Otherwise, it returns zero.
|
236
|
+
int bn_copy_words(BN_ULONG *out, size_t num, const BIGNUM *bn);
|
237
|
+
|
213
238
|
// bn_mul_add_words multiples |ap| by |w|, adds the result to |rp|, and places
|
214
239
|
// the result in |rp|. |ap| and |rp| must both be |num| words long. It returns
|
215
240
|
// the carry word of the operation. |ap| and |rp| may be equal but otherwise may
|
@@ -255,25 +280,13 @@ void bn_sqr_comba8(BN_ULONG r[16], const BN_ULONG a[4]);
|
|
255
280
|
// bn_sqr_comba4 sets |r| to |a|^2.
|
256
281
|
void bn_sqr_comba4(BN_ULONG r[8], const BN_ULONG a[4]);
|
257
282
|
|
258
|
-
// bn_cmp_words returns a value less than, equal to or greater than zero if
|
259
|
-
// the, length |n|, array |a| is less than, equal to or greater than |b|.
|
260
|
-
int bn_cmp_words(const BN_ULONG *a, const BN_ULONG *b, int n);
|
261
|
-
|
262
|
-
// bn_cmp_words returns a value less than, equal to or greater than zero if the
|
263
|
-
// array |a| is less than, equal to or greater than |b|. The arrays can be of
|
264
|
-
// different lengths: |cl| gives the minimum of the two lengths and |dl| gives
|
265
|
-
// the length of |a| minus the length of |b|.
|
266
|
-
int bn_cmp_part_words(const BN_ULONG *a, const BN_ULONG *b, int cl, int dl);
|
267
|
-
|
268
283
|
// bn_less_than_words returns one if |a| < |b| and zero otherwise, where |a|
|
269
284
|
// and |b| both are |len| words long. It runs in constant time.
|
270
285
|
int bn_less_than_words(const BN_ULONG *a, const BN_ULONG *b, size_t len);
|
271
286
|
|
272
287
|
// bn_in_range_words returns one if |min_inclusive| <= |a| < |max_exclusive|,
|
273
|
-
// where |a| and |max_exclusive| both are |len| words long.
|
274
|
-
//
|
275
|
-
// [max_exclusive, 2^(BN_BITS2*len)) contains |a|, but otherwise the value of
|
276
|
-
// |a| is secret.
|
288
|
+
// where |a| and |max_exclusive| both are |len| words long. |a| and
|
289
|
+
// |max_exclusive| are treated as secret.
|
277
290
|
int bn_in_range_words(const BN_ULONG *a, BN_ULONG min_inclusive,
|
278
291
|
const BN_ULONG *max_exclusive, size_t len);
|
279
292
|
|
@@ -288,11 +301,38 @@ int bn_rand_range_words(BN_ULONG *out, BN_ULONG min_inclusive,
|
|
288
301
|
const BN_ULONG *max_exclusive, size_t len,
|
289
302
|
const uint8_t additional_data[32]);
|
290
303
|
|
304
|
+
// bn_range_secret_range behaves like |BN_rand_range_ex|, but treats
|
305
|
+
// |max_exclusive| as secret. Because of this constraint, the distribution of
|
306
|
+
// values returned is more complex.
|
307
|
+
//
|
308
|
+
// Rather than repeatedly generating values until one is in range, which would
|
309
|
+
// leak information, it generates one value. If the value is in range, it sets
|
310
|
+
// |*out_is_uniform| to one. Otherwise, it sets |*out_is_uniform| to zero,
|
311
|
+
// fixing up the value to force it in range.
|
312
|
+
//
|
313
|
+
// The subset of calls to |bn_rand_secret_range| which set |*out_is_uniform| to
|
314
|
+
// one are uniformly distributed in the target range. Calls overall are not.
|
315
|
+
// This function is intended for use in situations where the extra values are
|
316
|
+
// still usable and where the number of iterations needed to reach the target
|
317
|
+
// number of uniform outputs may be blinded for negligible probabilities of
|
318
|
+
// timing leaks.
|
319
|
+
//
|
320
|
+
// Although this function treats |max_exclusive| as secret, it treats the number
|
321
|
+
// of bits in |max_exclusive| as public.
|
322
|
+
int bn_rand_secret_range(BIGNUM *r, int *out_is_uniform, BN_ULONG min_inclusive,
|
323
|
+
const BIGNUM *max_exclusive);
|
324
|
+
|
291
325
|
int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
|
292
326
|
const BN_ULONG *np, const BN_ULONG *n0, int num);
|
293
327
|
|
294
328
|
uint64_t bn_mont_n0(const BIGNUM *n);
|
295
|
-
|
329
|
+
|
330
|
+
// bn_mod_exp_base_2_consttime calculates r = 2**p (mod n). |p| must be larger
|
331
|
+
// than log_2(n); i.e. 2**p must be larger than |n|. |n| must be positive and
|
332
|
+
// odd. |p| and the bit width of |n| are assumed public, but |n| is otherwise
|
333
|
+
// treated as secret.
|
334
|
+
int bn_mod_exp_base_2_consttime(BIGNUM *r, unsigned p, const BIGNUM *n,
|
335
|
+
BN_CTX *ctx);
|
296
336
|
|
297
337
|
#if defined(OPENSSL_X86_64) && defined(_MSC_VER)
|
298
338
|
#define BN_UMULT_LOHI(low, high, a, b) ((low) = _umul128((a), (b), &(high)))
|
@@ -302,6 +342,127 @@ int bn_mod_exp_base_2_vartime(BIGNUM *r, unsigned p, const BIGNUM *n);
|
|
302
342
|
#error "Either BN_ULLONG or BN_UMULT_LOHI must be defined on every platform."
|
303
343
|
#endif
|
304
344
|
|
345
|
+
// bn_jacobi returns the Jacobi symbol of |a| and |b| (which is -1, 0 or 1), or
|
346
|
+
// -2 on error.
|
347
|
+
int bn_jacobi(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
|
348
|
+
|
349
|
+
// bn_is_bit_set_words returns one if bit |bit| is set in |a| and zero
|
350
|
+
// otherwise.
|
351
|
+
int bn_is_bit_set_words(const BN_ULONG *a, size_t num, unsigned bit);
|
352
|
+
|
353
|
+
// bn_one_to_montgomery sets |r| to one in Montgomery form. It returns one on
|
354
|
+
// success and zero on error. This function treats the bit width of the modulus
|
355
|
+
// as public.
|
356
|
+
int bn_one_to_montgomery(BIGNUM *r, const BN_MONT_CTX *mont, BN_CTX *ctx);
|
357
|
+
|
358
|
+
// bn_less_than_montgomery_R returns one if |bn| is less than the Montgomery R
|
359
|
+
// value for |mont| and zero otherwise.
|
360
|
+
int bn_less_than_montgomery_R(const BIGNUM *bn, const BN_MONT_CTX *mont);
|
361
|
+
|
362
|
+
// bn_mod_u16_consttime returns |bn| mod |d|, ignoring |bn|'s sign bit. It runs
|
363
|
+
// in time independent of the value of |bn|, but it treats |d| as public.
|
364
|
+
OPENSSL_EXPORT uint16_t bn_mod_u16_consttime(const BIGNUM *bn, uint16_t d);
|
365
|
+
|
366
|
+
// bn_odd_number_is_obviously_composite returns one if |bn| is divisible by one
|
367
|
+
// of the first several odd primes and zero otherwise.
|
368
|
+
int bn_odd_number_is_obviously_composite(const BIGNUM *bn);
|
369
|
+
|
370
|
+
// bn_rshift1_words sets |r| to |a| >> 1, where both arrays are |num| bits wide.
|
371
|
+
void bn_rshift1_words(BN_ULONG *r, const BN_ULONG *a, size_t num);
|
372
|
+
|
373
|
+
// bn_rshift_secret_shift behaves like |BN_rshift| but runs in time independent
|
374
|
+
// of both |a| and |n|.
|
375
|
+
OPENSSL_EXPORT int bn_rshift_secret_shift(BIGNUM *r, const BIGNUM *a,
|
376
|
+
unsigned n, BN_CTX *ctx);
|
377
|
+
|
378
|
+
|
379
|
+
// Constant-time non-modular arithmetic.
|
380
|
+
//
|
381
|
+
// The following functions implement non-modular arithmetic in constant-time
|
382
|
+
// and pessimally set |r->width| to the largest possible word size.
|
383
|
+
//
|
384
|
+
// Note this means that, e.g., repeatedly multiplying by one will cause widths
|
385
|
+
// to increase without bound. The corresponding public API functions minimize
|
386
|
+
// their outputs to avoid regressing calculator consumers.
|
387
|
+
|
388
|
+
// bn_uadd_consttime behaves like |BN_uadd|, but it pessimally sets
|
389
|
+
// |r->width| = |a->width| + |b->width| + 1.
|
390
|
+
int bn_uadd_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
391
|
+
|
392
|
+
// bn_usub_consttime behaves like |BN_usub|, but it pessimally sets
|
393
|
+
// |r->width| = |a->width|.
|
394
|
+
int bn_usub_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
395
|
+
|
396
|
+
// bn_abs_sub_consttime sets |r| to the absolute value of |a| - |b|, treating
|
397
|
+
// both inputs as secret. It returns one on success and zero on error.
|
398
|
+
OPENSSL_EXPORT int bn_abs_sub_consttime(BIGNUM *r, const BIGNUM *a,
|
399
|
+
const BIGNUM *b, BN_CTX *ctx);
|
400
|
+
|
401
|
+
// bn_mul_consttime behaves like |BN_mul|, but it rejects negative inputs and
|
402
|
+
// pessimally sets |r->width| to |a->width| + |b->width|, to avoid leaking
|
403
|
+
// information about |a| and |b|.
|
404
|
+
int bn_mul_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
|
405
|
+
|
406
|
+
// bn_sqrt_consttime behaves like |BN_sqrt|, but it pessimally sets |r->width|
|
407
|
+
// to 2*|a->width|, to avoid leaking information about |a| and |b|.
|
408
|
+
int bn_sqr_consttime(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);
|
409
|
+
|
410
|
+
// bn_div_consttime behaves like |BN_div|, but it rejects negative inputs and
|
411
|
+
// treats both inputs, including their magnitudes, as secret. It is, as a
|
412
|
+
// result, much slower than |BN_div| and should only be used for rare operations
|
413
|
+
// where Montgomery reduction is not available.
|
414
|
+
//
|
415
|
+
// Note that |quotient->width| will be set pessimally to |numerator->width|.
|
416
|
+
OPENSSL_EXPORT int bn_div_consttime(BIGNUM *quotient, BIGNUM *remainder,
|
417
|
+
const BIGNUM *numerator,
|
418
|
+
const BIGNUM *divisor, BN_CTX *ctx);
|
419
|
+
|
420
|
+
// bn_is_relatively_prime checks whether GCD(|x|, |y|) is one. On success, it
|
421
|
+
// returns one and sets |*out_relatively_prime| to one if the GCD was one and
|
422
|
+
// zero otherwise. On error, it returns zero.
|
423
|
+
OPENSSL_EXPORT int bn_is_relatively_prime(int *out_relatively_prime,
|
424
|
+
const BIGNUM *x, const BIGNUM *y,
|
425
|
+
BN_CTX *ctx);
|
426
|
+
|
427
|
+
// bn_lcm_consttime sets |r| to LCM(|a|, |b|). It returns one and success and
|
428
|
+
// zero on error. |a| and |b| are both treated as secret.
|
429
|
+
OPENSSL_EXPORT int bn_lcm_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
430
|
+
BN_CTX *ctx);
|
431
|
+
|
432
|
+
|
433
|
+
// Constant-time modular arithmetic.
|
434
|
+
//
|
435
|
+
// The following functions implement basic constant-time modular arithmetic.
|
436
|
+
|
437
|
+
// bn_mod_add_consttime acts like |BN_mod_add_quick| but takes a |BN_CTX|.
|
438
|
+
int bn_mod_add_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
439
|
+
const BIGNUM *m, BN_CTX *ctx);
|
440
|
+
|
441
|
+
// bn_mod_sub_consttime acts like |BN_mod_sub_quick| but takes a |BN_CTX|.
|
442
|
+
int bn_mod_sub_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
443
|
+
const BIGNUM *m, BN_CTX *ctx);
|
444
|
+
|
445
|
+
// bn_mod_lshift1_consttime acts like |BN_mod_lshift1_quick| but takes a
|
446
|
+
// |BN_CTX|.
|
447
|
+
int bn_mod_lshift1_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *m,
|
448
|
+
BN_CTX *ctx);
|
449
|
+
|
450
|
+
// bn_mod_lshift_consttime acts like |BN_mod_lshift_quick| but takes a |BN_CTX|.
|
451
|
+
int bn_mod_lshift_consttime(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m,
|
452
|
+
BN_CTX *ctx);
|
453
|
+
|
454
|
+
// bn_mod_inverse_consttime sets |r| to |a|^-1, mod |n|. |a| must be non-
|
455
|
+
// negative and less than |n|. It returns one on success and zero on error. On
|
456
|
+
// failure, if the failure was caused by |a| having no inverse mod |n| then
|
457
|
+
// |*out_no_inverse| will be set to one; otherwise it will be set to zero.
|
458
|
+
//
|
459
|
+
// This function treats both |a| and |n| as secret, provided they are both non-
|
460
|
+
// zero and the inverse exists. It should only be used for even moduli where
|
461
|
+
// none of the less general implementations are applicable.
|
462
|
+
OPENSSL_EXPORT int bn_mod_inverse_consttime(BIGNUM *r, int *out_no_inverse,
|
463
|
+
const BIGNUM *a, const BIGNUM *n,
|
464
|
+
BN_CTX *ctx);
|
465
|
+
|
305
466
|
// bn_mod_inverse_prime sets |out| to the modular inverse of |a| modulo |p|,
|
306
467
|
// computed with Fermat's Little Theorem. It returns one on success and zero on
|
307
468
|
// error. If |mont_p| is NULL, one will be computed temporarily.
|
@@ -314,14 +475,6 @@ int bn_mod_inverse_prime(BIGNUM *out, const BIGNUM *a, const BIGNUM *p,
|
|
314
475
|
int bn_mod_inverse_secret_prime(BIGNUM *out, const BIGNUM *a, const BIGNUM *p,
|
315
476
|
BN_CTX *ctx, const BN_MONT_CTX *mont_p);
|
316
477
|
|
317
|
-
// bn_jacobi returns the Jacobi symbol of |a| and |b| (which is -1, 0 or 1), or
|
318
|
-
// -2 on error.
|
319
|
-
int bn_jacobi(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
|
320
|
-
|
321
|
-
// bn_is_bit_set_words returns one if bit |bit| is set in |a| and zero
|
322
|
-
// otherwise.
|
323
|
-
int bn_is_bit_set_words(const BN_ULONG *a, size_t num, unsigned bit);
|
324
|
-
|
325
478
|
|
326
479
|
// Low-level operations for small numbers.
|
327
480
|
//
|
@@ -368,6 +521,13 @@ int bn_to_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a,
|
|
368
521
|
int bn_from_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a,
|
369
522
|
size_t num_a, const BN_MONT_CTX *mont);
|
370
523
|
|
524
|
+
// bn_one_to_montgomery_small sets |r| to one in Montgomery form. It returns one
|
525
|
+
// on success and zero on error. |num_r| must be the length of the modulus,
|
526
|
+
// which is |mont->N.top|. This function treats the bit width of the modulus as
|
527
|
+
// public.
|
528
|
+
int bn_one_to_montgomery_small(BN_ULONG *r, size_t num_r,
|
529
|
+
const BN_MONT_CTX *mont);
|
530
|
+
|
371
531
|
// bn_mod_mul_montgomery_small sets |r| to |a| * |b| mod |mont->N|. Both inputs
|
372
532
|
// and outputs are in the Montgomery domain. |num_r| must be the length of the
|
373
533
|
// modulus, which is |mont->N.top|. This function returns one on success and
|
@@ -58,7 +58,7 @@
|
|
58
58
|
|
59
59
|
|
60
60
|
// least significant word
|
61
|
-
#define BN_lsw(n) (((n)->
|
61
|
+
#define BN_lsw(n) (((n)->width == 0) ? (BN_ULONG) 0 : (n)->d[0])
|
62
62
|
|
63
63
|
int bn_jacobi(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) {
|
64
64
|
// In 'tab', only odd-indexed entries are relevant:
|
@@ -126,10 +126,6 @@
|
|
126
126
|
#define OPENSSL_BN_ASM_MONT
|
127
127
|
#endif
|
128
128
|
|
129
|
-
static int bn_mod_mul_montgomery_fallback(BIGNUM *r, const BIGNUM *a,
|
130
|
-
const BIGNUM *b,
|
131
|
-
const BN_MONT_CTX *mont, BN_CTX *ctx);
|
132
|
-
|
133
129
|
|
134
130
|
BN_MONT_CTX *BN_MONT_CTX_new(void) {
|
135
131
|
BN_MONT_CTX *ret = OPENSSL_malloc(sizeof(BN_MONT_CTX));
|
@@ -193,6 +189,10 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) {
|
|
193
189
|
OPENSSL_PUT_ERROR(BN, ERR_R_INTERNAL_ERROR);
|
194
190
|
return 0;
|
195
191
|
}
|
192
|
+
// |mont->N| is always stored minimally. Computing RR efficiently leaks the
|
193
|
+
// size of the modulus. While the modulus may be private in RSA (one of the
|
194
|
+
// primes), their sizes are public, so this is fine.
|
195
|
+
bn_set_minimal_width(&mont->N);
|
196
196
|
|
197
197
|
// Find n0 such that n0 * N == -1 (mod r).
|
198
198
|
//
|
@@ -200,7 +200,7 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) {
|
|
200
200
|
// others, we could use a shorter R value and use faster |BN_ULONG|-based
|
201
201
|
// math instead of |uint64_t|-based math, which would be double-precision.
|
202
202
|
// However, currently only the assembler files know which is which.
|
203
|
-
uint64_t n0 = bn_mont_n0(
|
203
|
+
uint64_t n0 = bn_mont_n0(&mont->N);
|
204
204
|
mont->n0[0] = (BN_ULONG)n0;
|
205
205
|
#if BN_MONT_CTX_N0_LIMBS == 2
|
206
206
|
mont->n0[1] = (BN_ULONG)(n0 >> BN_BITS2);
|
@@ -208,19 +208,34 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) {
|
|
208
208
|
mont->n0[1] = 0;
|
209
209
|
#endif
|
210
210
|
|
211
|
+
BN_CTX *new_ctx = NULL;
|
212
|
+
if (ctx == NULL) {
|
213
|
+
new_ctx = BN_CTX_new();
|
214
|
+
if (new_ctx == NULL) {
|
215
|
+
return 0;
|
216
|
+
}
|
217
|
+
ctx = new_ctx;
|
218
|
+
}
|
219
|
+
|
211
220
|
// Save RR = R**2 (mod N). R is the smallest power of 2**BN_BITS2 such that R
|
212
221
|
// > mod. Even though the assembly on some 32-bit platforms works with 64-bit
|
213
222
|
// values, using |BN_BITS2| here, rather than |BN_MONT_CTX_N0_LIMBS *
|
214
223
|
// BN_BITS2|, is correct because R**2 will still be a multiple of the latter
|
215
224
|
// as |BN_MONT_CTX_N0_LIMBS| is either one or two.
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
}
|
225
|
+
unsigned lgBigR = mont->N.width * BN_BITS2;
|
226
|
+
int ok = bn_mod_exp_base_2_consttime(&mont->RR, lgBigR * 2, &mont->N, ctx);
|
227
|
+
BN_CTX_free(new_ctx);
|
228
|
+
return ok;
|
229
|
+
}
|
222
230
|
|
223
|
-
|
231
|
+
BN_MONT_CTX *BN_MONT_CTX_new_for_modulus(const BIGNUM *mod, BN_CTX *ctx) {
|
232
|
+
BN_MONT_CTX *mont = BN_MONT_CTX_new();
|
233
|
+
if (mont == NULL ||
|
234
|
+
!BN_MONT_CTX_set(mont, mod, ctx)) {
|
235
|
+
BN_MONT_CTX_free(mont);
|
236
|
+
return NULL;
|
237
|
+
}
|
238
|
+
return mont;
|
224
239
|
}
|
225
240
|
|
226
241
|
int BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_MUTEX *lock,
|
@@ -234,25 +249,12 @@ int BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_MUTEX *lock,
|
|
234
249
|
}
|
235
250
|
|
236
251
|
CRYPTO_MUTEX_lock_write(lock);
|
237
|
-
|
238
|
-
|
239
|
-
goto out;
|
252
|
+
if (*pmont == NULL) {
|
253
|
+
*pmont = BN_MONT_CTX_new_for_modulus(mod, bn_ctx);
|
240
254
|
}
|
241
|
-
|
242
|
-
ctx = BN_MONT_CTX_new();
|
243
|
-
if (ctx == NULL) {
|
244
|
-
goto out;
|
245
|
-
}
|
246
|
-
if (!BN_MONT_CTX_set(ctx, mod, bn_ctx)) {
|
247
|
-
BN_MONT_CTX_free(ctx);
|
248
|
-
ctx = NULL;
|
249
|
-
goto out;
|
250
|
-
}
|
251
|
-
*pmont = ctx;
|
252
|
-
|
253
|
-
out:
|
255
|
+
const int ok = *pmont != NULL;
|
254
256
|
CRYPTO_MUTEX_unlock_write(lock);
|
255
|
-
return
|
257
|
+
return ok;
|
256
258
|
}
|
257
259
|
|
258
260
|
int BN_to_montgomery(BIGNUM *ret, const BIGNUM *a, const BN_MONT_CTX *mont,
|
@@ -263,7 +265,7 @@ int BN_to_montgomery(BIGNUM *ret, const BIGNUM *a, const BN_MONT_CTX *mont,
|
|
263
265
|
static int bn_from_montgomery_in_place(BN_ULONG *r, size_t num_r, BN_ULONG *a,
|
264
266
|
size_t num_a, const BN_MONT_CTX *mont) {
|
265
267
|
const BN_ULONG *n = mont->N.d;
|
266
|
-
size_t num_n = mont->N.
|
268
|
+
size_t num_n = mont->N.width;
|
267
269
|
if (num_r != num_n || num_a != 2 * num_n) {
|
268
270
|
OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
269
271
|
return 0;
|
@@ -304,32 +306,26 @@ static int bn_from_montgomery_in_place(BN_ULONG *r, size_t num_r, BN_ULONG *a,
|
|
304
306
|
|
305
307
|
static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r,
|
306
308
|
const BN_MONT_CTX *mont) {
|
307
|
-
|
308
|
-
|
309
|
-
ret->top = 0;
|
310
|
-
return 1;
|
311
|
-
}
|
312
|
-
|
313
|
-
int max = (2 * n->top); // carry is stored separately
|
314
|
-
if (!bn_wexpand(r, max) ||
|
315
|
-
!bn_wexpand(ret, n->top)) {
|
309
|
+
if (r->neg) {
|
310
|
+
OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER);
|
316
311
|
return 0;
|
317
312
|
}
|
318
|
-
|
319
|
-
|
320
|
-
|
313
|
+
|
314
|
+
const BIGNUM *n = &mont->N;
|
315
|
+
if (n->width == 0) {
|
316
|
+
ret->width = 0;
|
317
|
+
return 1;
|
321
318
|
}
|
322
|
-
r->top = max;
|
323
|
-
ret->top = n->top;
|
324
319
|
|
325
|
-
|
320
|
+
int max = 2 * n->width; // carry is stored separately
|
321
|
+
if (!bn_resize_words(r, max) ||
|
322
|
+
!bn_wexpand(ret, n->width)) {
|
326
323
|
return 0;
|
327
324
|
}
|
328
|
-
ret->neg = r->neg;
|
329
325
|
|
330
|
-
|
331
|
-
|
332
|
-
return
|
326
|
+
ret->width = n->width;
|
327
|
+
ret->neg = 0;
|
328
|
+
return bn_from_montgomery_in_place(ret->d, ret->width, r->d, r->width, mont);
|
333
329
|
}
|
334
330
|
|
335
331
|
int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, const BN_MONT_CTX *mont,
|
@@ -352,35 +348,24 @@ err:
|
|
352
348
|
return ret;
|
353
349
|
}
|
354
350
|
|
355
|
-
int
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
return 0;
|
371
|
-
}
|
372
|
-
if (!bn_mul_mont(r->d, a->d, b->d, mont->N.d, mont->n0, num)) {
|
373
|
-
// The check above ensures this won't happen.
|
374
|
-
assert(0);
|
375
|
-
OPENSSL_PUT_ERROR(BN, ERR_R_INTERNAL_ERROR);
|
376
|
-
return 0;
|
351
|
+
int bn_one_to_montgomery(BIGNUM *r, const BN_MONT_CTX *mont, BN_CTX *ctx) {
|
352
|
+
// If the high bit of |n| is set, R = 2^(width*BN_BITS2) < 2 * |n|, so we
|
353
|
+
// compute R - |n| rather than perform Montgomery reduction.
|
354
|
+
const BIGNUM *n = &mont->N;
|
355
|
+
if (n->width > 0 && (n->d[n->width - 1] >> (BN_BITS2 - 1)) != 0) {
|
356
|
+
if (!bn_wexpand(r, n->width)) {
|
357
|
+
return 0;
|
358
|
+
}
|
359
|
+
r->d[0] = 0 - n->d[0];
|
360
|
+
for (int i = 1; i < n->width; i++) {
|
361
|
+
r->d[i] = ~n->d[i];
|
362
|
+
}
|
363
|
+
r->width = n->width;
|
364
|
+
r->neg = 0;
|
365
|
+
return 1;
|
377
366
|
}
|
378
|
-
r->neg = a->neg ^ b->neg;
|
379
|
-
r->top = num;
|
380
|
-
bn_correct_top(r);
|
381
367
|
|
382
|
-
return
|
383
|
-
#endif
|
368
|
+
return BN_from_montgomery(r, &mont->RR, mont, ctx);
|
384
369
|
}
|
385
370
|
|
386
371
|
static int bn_mod_mul_montgomery_fallback(BIGNUM *r, const BIGNUM *a,
|
@@ -396,11 +381,11 @@ static int bn_mod_mul_montgomery_fallback(BIGNUM *r, const BIGNUM *a,
|
|
396
381
|
}
|
397
382
|
|
398
383
|
if (a == b) {
|
399
|
-
if (!
|
384
|
+
if (!bn_sqr_consttime(tmp, a, ctx)) {
|
400
385
|
goto err;
|
401
386
|
}
|
402
387
|
} else {
|
403
|
-
if (!
|
388
|
+
if (!bn_mul_consttime(tmp, a, b, ctx)) {
|
404
389
|
goto err;
|
405
390
|
}
|
406
391
|
}
|
@@ -417,15 +402,51 @@ err:
|
|
417
402
|
return ret;
|
418
403
|
}
|
419
404
|
|
405
|
+
int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
406
|
+
const BN_MONT_CTX *mont, BN_CTX *ctx) {
|
407
|
+
if (a->neg || b->neg) {
|
408
|
+
OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER);
|
409
|
+
return 0;
|
410
|
+
}
|
411
|
+
|
412
|
+
#if defined(OPENSSL_BN_ASM_MONT)
|
413
|
+
// |bn_mul_mont| requires at least 128 bits of limbs, at least for x86.
|
414
|
+
int num = mont->N.width;
|
415
|
+
if (num >= (128 / BN_BITS2) &&
|
416
|
+
a->width == num &&
|
417
|
+
b->width == num) {
|
418
|
+
if (!bn_wexpand(r, num)) {
|
419
|
+
return 0;
|
420
|
+
}
|
421
|
+
if (!bn_mul_mont(r->d, a->d, b->d, mont->N.d, mont->n0, num)) {
|
422
|
+
// The check above ensures this won't happen.
|
423
|
+
assert(0);
|
424
|
+
OPENSSL_PUT_ERROR(BN, ERR_R_INTERNAL_ERROR);
|
425
|
+
return 0;
|
426
|
+
}
|
427
|
+
r->neg = 0;
|
428
|
+
r->width = num;
|
429
|
+
return 1;
|
430
|
+
}
|
431
|
+
#endif
|
432
|
+
|
433
|
+
return bn_mod_mul_montgomery_fallback(r, a, b, mont, ctx);
|
434
|
+
}
|
435
|
+
|
436
|
+
int bn_less_than_montgomery_R(const BIGNUM *bn, const BN_MONT_CTX *mont) {
|
437
|
+
return !BN_is_negative(bn) &&
|
438
|
+
bn_fits_in_words(bn, mont->N.width);
|
439
|
+
}
|
440
|
+
|
420
441
|
int bn_to_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a,
|
421
442
|
size_t num_a, const BN_MONT_CTX *mont) {
|
422
443
|
return bn_mod_mul_montgomery_small(r, num_r, a, num_a, mont->RR.d,
|
423
|
-
mont->RR.
|
444
|
+
mont->RR.width, mont);
|
424
445
|
}
|
425
446
|
|
426
447
|
int bn_from_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a,
|
427
448
|
size_t num_a, const BN_MONT_CTX *mont) {
|
428
|
-
size_t num_n = mont->N.
|
449
|
+
size_t num_n = mont->N.width;
|
429
450
|
if (num_a > 2 * num_n || num_r != num_n || num_n > BN_SMALL_MAX_WORDS) {
|
430
451
|
OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
431
452
|
return 0;
|
@@ -439,10 +460,32 @@ int bn_from_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a,
|
|
439
460
|
return ret;
|
440
461
|
}
|
441
462
|
|
463
|
+
int bn_one_to_montgomery_small(BN_ULONG *r, size_t num_r,
|
464
|
+
const BN_MONT_CTX *mont) {
|
465
|
+
const BN_ULONG *n = mont->N.d;
|
466
|
+
size_t num_n = mont->N.width;
|
467
|
+
if (num_n == 0 || num_r != num_n) {
|
468
|
+
OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
469
|
+
return 0;
|
470
|
+
}
|
471
|
+
|
472
|
+
// If the high bit of |n| is set, R = 2^(num_n*BN_BITS2) < 2 * |n|, so we
|
473
|
+
// compute R - |n| rather than perform Montgomery reduction.
|
474
|
+
if (num_n > 0 && (n[num_n - 1] >> (BN_BITS2 - 1)) != 0) {
|
475
|
+
r[0] = 0 - n[0];
|
476
|
+
for (size_t i = 1; i < num_n; i++) {
|
477
|
+
r[i] = ~n[i];
|
478
|
+
}
|
479
|
+
return 1;
|
480
|
+
}
|
481
|
+
|
482
|
+
return bn_from_montgomery_small(r, num_r, mont->RR.d, mont->RR.width, mont);
|
483
|
+
}
|
484
|
+
|
442
485
|
int bn_mod_mul_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a,
|
443
486
|
size_t num_a, const BN_ULONG *b, size_t num_b,
|
444
487
|
const BN_MONT_CTX *mont) {
|
445
|
-
size_t num_n = mont->N.
|
488
|
+
size_t num_n = mont->N.width;
|
446
489
|
if (num_r != num_n || num_a + num_b > 2 * num_n ||
|
447
490
|
num_n > BN_SMALL_MAX_WORDS) {
|
448
491
|
OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|