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
@@ -1,24 +1,20 @@
|
|
1
|
-
/*
|
1
|
+
/*
|
2
|
+
* Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
|
3
|
+
* Copyright (c) 2014, Intel Corporation. All Rights Reserved.
|
2
4
|
*
|
3
|
-
*
|
4
|
-
*
|
5
|
-
*
|
5
|
+
* Licensed under the OpenSSL license (the "License"). You may not use
|
6
|
+
* this file except in compliance with the License. You can obtain a copy
|
7
|
+
* in the file LICENSE in the source distribution or at
|
8
|
+
* https://www.openssl.org/source/license.html
|
6
9
|
*
|
7
|
-
*
|
8
|
-
*
|
9
|
-
*
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*
|
13
|
-
*
|
14
|
-
|
15
|
-
// Developers and authors:
|
16
|
-
// Shay Gueron (1, 2), and Vlad Krasnov (1)
|
17
|
-
// (1) Intel Corporation, Israel Development Center
|
18
|
-
// (2) University of Haifa
|
19
|
-
// Reference:
|
20
|
-
// S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with
|
21
|
-
// 256 Bit Primes"
|
10
|
+
* Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1)
|
11
|
+
* (1) Intel Corporation, Israel Development Center, Haifa, Israel
|
12
|
+
* (2) University of Haifa, Israel
|
13
|
+
*
|
14
|
+
* Reference:
|
15
|
+
* S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with
|
16
|
+
* 256 Bit Primes"
|
17
|
+
*/
|
22
18
|
|
23
19
|
#include <openssl/ec.h>
|
24
20
|
|
@@ -205,13 +201,7 @@ static void ecp_nistz256_mod_inverse_mont(BN_ULONG r[P256_LIMBS],
|
|
205
201
|
// returns one if it fits. Otherwise it returns zero.
|
206
202
|
static int ecp_nistz256_bignum_to_field_elem(BN_ULONG out[P256_LIMBS],
|
207
203
|
const BIGNUM *in) {
|
208
|
-
|
209
|
-
return 0;
|
210
|
-
}
|
211
|
-
|
212
|
-
OPENSSL_memset(out, 0, sizeof(BN_ULONG) * P256_LIMBS);
|
213
|
-
OPENSSL_memcpy(out, in->d, sizeof(BN_ULONG) * in->top);
|
214
|
-
return 1;
|
204
|
+
return bn_copy_words(out, P256_LIMBS, in);
|
215
205
|
}
|
216
206
|
|
217
207
|
// r = p * p_scalar
|
@@ -446,6 +436,7 @@ DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistz256_method) {
|
|
446
436
|
out->group_set_curve = ec_GFp_mont_group_set_curve;
|
447
437
|
out->point_get_affine_coordinates = ecp_nistz256_get_affine;
|
448
438
|
out->mul = ecp_nistz256_points_mul;
|
439
|
+
out->mul_public = ecp_nistz256_points_mul;
|
449
440
|
out->field_mul = ec_GFp_mont_field_mul;
|
450
441
|
out->field_sqr = ec_GFp_mont_field_sqr;
|
451
442
|
out->field_encode = ec_GFp_mont_field_encode;
|
@@ -1,16 +1,20 @@
|
|
1
|
-
/*
|
1
|
+
/*
|
2
|
+
* Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
|
3
|
+
* Copyright (c) 2014, Intel Corporation. All Rights Reserved.
|
2
4
|
*
|
3
|
-
*
|
4
|
-
*
|
5
|
-
*
|
5
|
+
* Licensed under the OpenSSL license (the "License"). You may not use
|
6
|
+
* this file except in compliance with the License. You can obtain a copy
|
7
|
+
* in the file LICENSE in the source distribution or at
|
8
|
+
* https://www.openssl.org/source/license.html
|
6
9
|
*
|
7
|
-
*
|
8
|
-
*
|
9
|
-
*
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*
|
13
|
-
*
|
10
|
+
* Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1)
|
11
|
+
* (1) Intel Corporation, Israel Development Center, Haifa, Israel
|
12
|
+
* (2) University of Haifa, Israel
|
13
|
+
*
|
14
|
+
* Reference:
|
15
|
+
* S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with
|
16
|
+
* 256 Bit Primes"
|
17
|
+
*/
|
14
18
|
|
15
19
|
#ifndef OPENSSL_HEADER_EC_P256_X86_64_H
|
16
20
|
#define OPENSSL_HEADER_EC_P256_X86_64_H
|
@@ -135,9 +135,11 @@ int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p,
|
|
135
135
|
goto err;
|
136
136
|
}
|
137
137
|
BN_set_negative(&group->field, 0);
|
138
|
+
// Store the field in minimal form, so it can be used with |BN_ULONG| arrays.
|
139
|
+
bn_set_minimal_width(&group->field);
|
138
140
|
|
139
141
|
// group->a
|
140
|
-
if (!BN_nnmod(tmp_a, a,
|
142
|
+
if (!BN_nnmod(tmp_a, a, &group->field, ctx)) {
|
141
143
|
goto err;
|
142
144
|
}
|
143
145
|
if (group->meth->field_encode) {
|
@@ -149,7 +151,7 @@ int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p,
|
|
149
151
|
}
|
150
152
|
|
151
153
|
// group->b
|
152
|
-
if (!BN_nnmod(&group->b, b,
|
154
|
+
if (!BN_nnmod(&group->b, b, &group->field, ctx)) {
|
153
155
|
goto err;
|
154
156
|
}
|
155
157
|
if (group->meth->field_encode &&
|
@@ -269,9 +271,14 @@ static int set_Jprojective_coordinate_GFp(const EC_GROUP *group, BIGNUM *out,
|
|
269
271
|
return BN_copy(out, in) != NULL;
|
270
272
|
}
|
271
273
|
|
272
|
-
int
|
273
|
-
|
274
|
-
|
274
|
+
int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group,
|
275
|
+
EC_POINT *point, const BIGNUM *x,
|
276
|
+
const BIGNUM *y, BN_CTX *ctx) {
|
277
|
+
if (x == NULL || y == NULL) {
|
278
|
+
OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
|
279
|
+
return 0;
|
280
|
+
}
|
281
|
+
|
275
282
|
BN_CTX *new_ctx = NULL;
|
276
283
|
int ret = 0;
|
277
284
|
|
@@ -284,7 +291,7 @@ int ec_GFp_simple_set_Jprojective_coordinates_GFp(
|
|
284
291
|
|
285
292
|
if (!set_Jprojective_coordinate_GFp(group, &point->X, x, ctx) ||
|
286
293
|
!set_Jprojective_coordinate_GFp(group, &point->Y, y, ctx) ||
|
287
|
-
!
|
294
|
+
!BN_copy(&point->Z, &group->one)) {
|
288
295
|
goto err;
|
289
296
|
}
|
290
297
|
|
@@ -295,19 +302,6 @@ err:
|
|
295
302
|
return ret;
|
296
303
|
}
|
297
304
|
|
298
|
-
int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group,
|
299
|
-
EC_POINT *point, const BIGNUM *x,
|
300
|
-
const BIGNUM *y, BN_CTX *ctx) {
|
301
|
-
if (x == NULL || y == NULL) {
|
302
|
-
// unlike for projective coordinates, we do not tolerate this
|
303
|
-
OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
|
304
|
-
return 0;
|
305
|
-
}
|
306
|
-
|
307
|
-
return ec_point_set_Jprojective_coordinates_GFp(group, point, x, y,
|
308
|
-
BN_value_one(), ctx);
|
309
|
-
}
|
310
|
-
|
311
305
|
int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
312
306
|
const EC_POINT *b, BN_CTX *ctx) {
|
313
307
|
int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *,
|
@@ -401,8 +395,8 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
401
395
|
}
|
402
396
|
|
403
397
|
// n5, n6
|
404
|
-
if (!
|
405
|
-
!
|
398
|
+
if (!bn_mod_sub_consttime(n5, n1, n3, p, ctx) ||
|
399
|
+
!bn_mod_sub_consttime(n6, n2, n4, p, ctx)) {
|
406
400
|
goto end;
|
407
401
|
}
|
408
402
|
// n5 = n1 - n3
|
@@ -424,8 +418,8 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
424
418
|
}
|
425
419
|
|
426
420
|
// 'n7', 'n8'
|
427
|
-
if (!
|
428
|
-
!
|
421
|
+
if (!bn_mod_add_consttime(n1, n1, n3, p, ctx) ||
|
422
|
+
!bn_mod_add_consttime(n2, n2, n4, p, ctx)) {
|
429
423
|
goto end;
|
430
424
|
}
|
431
425
|
// 'n7' = n1 + n3
|
@@ -459,14 +453,14 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
459
453
|
if (!field_sqr(group, n0, n6, ctx) ||
|
460
454
|
!field_sqr(group, n4, n5, ctx) ||
|
461
455
|
!field_mul(group, n3, n1, n4, ctx) ||
|
462
|
-
!
|
456
|
+
!bn_mod_sub_consttime(&r->X, n0, n3, p, ctx)) {
|
463
457
|
goto end;
|
464
458
|
}
|
465
459
|
// X_r = n6^2 - n5^2 * 'n7'
|
466
460
|
|
467
461
|
// 'n9'
|
468
|
-
if (!
|
469
|
-
!
|
462
|
+
if (!bn_mod_lshift1_consttime(n0, &r->X, p, ctx) ||
|
463
|
+
!bn_mod_sub_consttime(n0, n3, n0, p, ctx)) {
|
470
464
|
goto end;
|
471
465
|
}
|
472
466
|
// n9 = n5^2 * 'n7' - 2 * X_r
|
@@ -477,7 +471,7 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
477
471
|
goto end; // now n5 is n5^3
|
478
472
|
}
|
479
473
|
if (!field_mul(group, n1, n2, n5, ctx) ||
|
480
|
-
!
|
474
|
+
!bn_mod_sub_consttime(n0, n0, n1, p, ctx)) {
|
481
475
|
goto end;
|
482
476
|
}
|
483
477
|
if (BN_is_odd(n0) && !BN_add(n0, n0, p)) {
|
@@ -542,31 +536,31 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
542
536
|
// n1
|
543
537
|
if (BN_cmp(&a->Z, &group->one) == 0) {
|
544
538
|
if (!field_sqr(group, n0, &a->X, ctx) ||
|
545
|
-
!
|
546
|
-
!
|
547
|
-
!
|
539
|
+
!bn_mod_lshift1_consttime(n1, n0, p, ctx) ||
|
540
|
+
!bn_mod_add_consttime(n0, n0, n1, p, ctx) ||
|
541
|
+
!bn_mod_add_consttime(n1, n0, &group->a, p, ctx)) {
|
548
542
|
goto err;
|
549
543
|
}
|
550
544
|
// n1 = 3 * X_a^2 + a_curve
|
551
545
|
} else if (group->a_is_minus3) {
|
552
546
|
if (!field_sqr(group, n1, &a->Z, ctx) ||
|
553
|
-
!
|
554
|
-
!
|
547
|
+
!bn_mod_add_consttime(n0, &a->X, n1, p, ctx) ||
|
548
|
+
!bn_mod_sub_consttime(n2, &a->X, n1, p, ctx) ||
|
555
549
|
!field_mul(group, n1, n0, n2, ctx) ||
|
556
|
-
!
|
557
|
-
!
|
550
|
+
!bn_mod_lshift1_consttime(n0, n1, p, ctx) ||
|
551
|
+
!bn_mod_add_consttime(n1, n0, n1, p, ctx)) {
|
558
552
|
goto err;
|
559
553
|
}
|
560
554
|
// n1 = 3 * (X_a + Z_a^2) * (X_a - Z_a^2)
|
561
555
|
// = 3 * X_a^2 - 3 * Z_a^4
|
562
556
|
} else {
|
563
557
|
if (!field_sqr(group, n0, &a->X, ctx) ||
|
564
|
-
!
|
565
|
-
!
|
558
|
+
!bn_mod_lshift1_consttime(n1, n0, p, ctx) ||
|
559
|
+
!bn_mod_add_consttime(n0, n0, n1, p, ctx) ||
|
566
560
|
!field_sqr(group, n1, &a->Z, ctx) ||
|
567
561
|
!field_sqr(group, n1, n1, ctx) ||
|
568
562
|
!field_mul(group, n1, n1, &group->a, ctx) ||
|
569
|
-
!
|
563
|
+
!bn_mod_add_consttime(n1, n1, n0, p, ctx)) {
|
570
564
|
goto err;
|
571
565
|
}
|
572
566
|
// n1 = 3 * X_a^2 + a_curve * Z_a^4
|
@@ -580,7 +574,7 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
580
574
|
} else if (!field_mul(group, n0, &a->Y, &a->Z, ctx)) {
|
581
575
|
goto err;
|
582
576
|
}
|
583
|
-
if (!
|
577
|
+
if (!bn_mod_lshift1_consttime(&r->Z, n0, p, ctx)) {
|
584
578
|
goto err;
|
585
579
|
}
|
586
580
|
// Z_r = 2 * Y_a * Z_a
|
@@ -588,30 +582,30 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
|
|
588
582
|
// n2
|
589
583
|
if (!field_sqr(group, n3, &a->Y, ctx) ||
|
590
584
|
!field_mul(group, n2, &a->X, n3, ctx) ||
|
591
|
-
!
|
585
|
+
!bn_mod_lshift_consttime(n2, n2, 2, p, ctx)) {
|
592
586
|
goto err;
|
593
587
|
}
|
594
588
|
// n2 = 4 * X_a * Y_a^2
|
595
589
|
|
596
590
|
// X_r
|
597
|
-
if (!
|
591
|
+
if (!bn_mod_lshift1_consttime(n0, n2, p, ctx) ||
|
598
592
|
!field_sqr(group, &r->X, n1, ctx) ||
|
599
|
-
!
|
593
|
+
!bn_mod_sub_consttime(&r->X, &r->X, n0, p, ctx)) {
|
600
594
|
goto err;
|
601
595
|
}
|
602
596
|
// X_r = n1^2 - 2 * n2
|
603
597
|
|
604
598
|
// n3
|
605
599
|
if (!field_sqr(group, n0, n3, ctx) ||
|
606
|
-
!
|
600
|
+
!bn_mod_lshift_consttime(n3, n0, 3, p, ctx)) {
|
607
601
|
goto err;
|
608
602
|
}
|
609
603
|
// n3 = 8 * Y_a^4
|
610
604
|
|
611
605
|
// Y_r
|
612
|
-
if (!
|
606
|
+
if (!bn_mod_sub_consttime(n0, n2, &r->X, p, ctx) ||
|
613
607
|
!field_mul(group, n0, n1, n0, ctx) ||
|
614
|
-
!
|
608
|
+
!bn_mod_sub_consttime(&r->Y, n0, n3, p, ctx)) {
|
615
609
|
goto err;
|
616
610
|
}
|
617
611
|
// Y_r = n1 * (n2 - X_r) - n3
|
@@ -694,15 +688,15 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
|
|
694
688
|
|
695
689
|
// rh := (rh + a*Z^4)*X
|
696
690
|
if (group->a_is_minus3) {
|
697
|
-
if (!
|
698
|
-
!
|
699
|
-
!
|
691
|
+
if (!bn_mod_lshift1_consttime(tmp, Z4, p, ctx) ||
|
692
|
+
!bn_mod_add_consttime(tmp, tmp, Z4, p, ctx) ||
|
693
|
+
!bn_mod_sub_consttime(rh, rh, tmp, p, ctx) ||
|
700
694
|
!field_mul(group, rh, rh, &point->X, ctx)) {
|
701
695
|
goto err;
|
702
696
|
}
|
703
697
|
} else {
|
704
698
|
if (!field_mul(group, tmp, Z4, &group->a, ctx) ||
|
705
|
-
!
|
699
|
+
!bn_mod_add_consttime(rh, rh, tmp, p, ctx) ||
|
706
700
|
!field_mul(group, rh, rh, &point->X, ctx)) {
|
707
701
|
goto err;
|
708
702
|
}
|
@@ -710,17 +704,17 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
|
|
710
704
|
|
711
705
|
// rh := rh + b*Z^6
|
712
706
|
if (!field_mul(group, tmp, &group->b, Z6, ctx) ||
|
713
|
-
!
|
707
|
+
!bn_mod_add_consttime(rh, rh, tmp, p, ctx)) {
|
714
708
|
goto err;
|
715
709
|
}
|
716
710
|
} else {
|
717
711
|
// rh := (rh + a)*X
|
718
|
-
if (!
|
712
|
+
if (!bn_mod_add_consttime(rh, rh, &group->a, p, ctx) ||
|
719
713
|
!field_mul(group, rh, rh, &point->X, ctx)) {
|
720
714
|
goto err;
|
721
715
|
}
|
722
716
|
// rh := rh + b
|
723
|
-
if (!
|
717
|
+
if (!bn_mod_add_consttime(rh, rh, &group->b, p, ctx)) {
|
724
718
|
goto err;
|
725
719
|
}
|
726
720
|
}
|
@@ -14,9 +14,6 @@
|
|
14
14
|
|
15
15
|
#include <openssl/base.h>
|
16
16
|
|
17
|
-
|
18
|
-
#if defined(OPENSSL_64_BIT) && !defined(OPENSSL_WINDOWS)
|
19
|
-
|
20
17
|
#include <openssl/ec.h>
|
21
18
|
|
22
19
|
#include "internal.h"
|
@@ -105,5 +102,3 @@ void ec_GFp_nistp_recode_scalar_bits(uint8_t *sign, uint8_t *digit,
|
|
105
102
|
*sign = s & 1;
|
106
103
|
*digit = d;
|
107
104
|
}
|
108
|
-
|
109
|
-
#endif // 64_BIT && !WINDOWS
|
@@ -73,8 +73,10 @@
|
|
73
73
|
#include <openssl/err.h>
|
74
74
|
#include <openssl/mem.h>
|
75
75
|
#include <openssl/thread.h>
|
76
|
+
#include <openssl/type_check.h>
|
76
77
|
|
77
78
|
#include "internal.h"
|
79
|
+
#include "../bn/internal.h"
|
78
80
|
#include "../../internal.h"
|
79
81
|
|
80
82
|
|
@@ -83,58 +85,21 @@
|
|
83
85
|
// http://link.springer.com/chapter/10.1007%2F3-540-45537-X_13
|
84
86
|
// http://www.bmoeller.de/pdf/TI-01-08.multiexp.pdf
|
85
87
|
|
86
|
-
|
87
|
-
|
88
|
-
// absolute value less than 2^w satisfying
|
89
|
-
// scalar = \sum_j r[j]*2^j
|
90
|
-
// where at most one of any w+1 consecutive digits is non-zero
|
91
|
-
// with the exception that the most significant digit may be only
|
92
|
-
// w-1 zeros away from that next non-zero digit.
|
93
|
-
static int8_t *compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len) {
|
94
|
-
int window_val;
|
95
|
-
int ok = 0;
|
96
|
-
int8_t *r = NULL;
|
97
|
-
int sign = 1;
|
98
|
-
int bit, next_bit, mask;
|
99
|
-
size_t len = 0, j;
|
100
|
-
|
101
|
-
if (BN_is_zero(scalar)) {
|
102
|
-
r = OPENSSL_malloc(1);
|
103
|
-
if (!r) {
|
104
|
-
OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
|
105
|
-
goto err;
|
106
|
-
}
|
107
|
-
r[0] = 0;
|
108
|
-
*ret_len = 1;
|
109
|
-
return r;
|
110
|
-
}
|
111
|
-
|
88
|
+
int ec_compute_wNAF(const EC_GROUP *group, int8_t *out, const EC_SCALAR *scalar,
|
89
|
+
size_t bits, int w) {
|
112
90
|
// 'int8_t' can represent integers with absolute values less than 2^7.
|
113
|
-
if (w <= 0 || w > 7) {
|
91
|
+
if (w <= 0 || w > 7 || bits == 0) {
|
114
92
|
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
115
|
-
|
116
|
-
}
|
117
|
-
bit = 1 << w; // at most 128
|
118
|
-
next_bit = bit << 1; // at most 256
|
119
|
-
mask = next_bit - 1; // at most 255
|
120
|
-
|
121
|
-
if (BN_is_negative(scalar)) {
|
122
|
-
sign = -1;
|
93
|
+
return 0;
|
123
94
|
}
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
goto err;
|
133
|
-
}
|
134
|
-
window_val = scalar->d[0] & mask;
|
135
|
-
j = 0;
|
136
|
-
// If j+w+1 >= len, window_val will not increase.
|
137
|
-
while (window_val != 0 || j + w + 1 < len) {
|
95
|
+
int bit = 1 << w; // at most 128
|
96
|
+
int next_bit = bit << 1; // at most 256
|
97
|
+
int mask = next_bit - 1; // at most 255
|
98
|
+
|
99
|
+
int window_val = scalar->words[0] & mask;
|
100
|
+
size_t j = 0;
|
101
|
+
// If j+w+1 >= bits, window_val will not increase.
|
102
|
+
while (window_val != 0 || j + w + 1 < bits) {
|
138
103
|
int digit = 0;
|
139
104
|
|
140
105
|
// 0 <= window_val <= 2^(w+1)
|
@@ -146,7 +111,7 @@ static int8_t *compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len) {
|
|
146
111
|
digit = window_val - next_bit; // -2^w < digit < 0
|
147
112
|
|
148
113
|
#if 1 // modified wNAF
|
149
|
-
if (j + w + 1 >=
|
114
|
+
if (j + w + 1 >= bits) {
|
150
115
|
// special case for generating modified wNAFs:
|
151
116
|
// no new bits will be added into window_val,
|
152
117
|
// so using a positive digit here will decrease
|
@@ -161,7 +126,7 @@ static int8_t *compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len) {
|
|
161
126
|
|
162
127
|
if (digit <= -bit || digit >= bit || !(digit & 1)) {
|
163
128
|
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
164
|
-
|
129
|
+
return 0;
|
165
130
|
}
|
166
131
|
|
167
132
|
window_val -= digit;
|
@@ -170,52 +135,38 @@ static int8_t *compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len) {
|
|
170
135
|
// for modified window NAFs, it may also be 2^w.
|
171
136
|
if (window_val != 0 && window_val != next_bit && window_val != bit) {
|
172
137
|
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
173
|
-
|
138
|
+
return 0;
|
174
139
|
}
|
175
140
|
}
|
176
141
|
|
177
|
-
|
142
|
+
out[j++] = digit;
|
178
143
|
|
179
144
|
window_val >>= 1;
|
180
|
-
window_val +=
|
145
|
+
window_val +=
|
146
|
+
bit * bn_is_bit_set_words(scalar->words, group->order.width, j + w);
|
181
147
|
|
182
148
|
if (window_val > next_bit) {
|
183
149
|
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
184
|
-
|
150
|
+
return 0;
|
185
151
|
}
|
186
152
|
}
|
187
153
|
|
188
|
-
|
154
|
+
// Fill the rest of the wNAF with zeros.
|
155
|
+
if (j > bits + 1) {
|
189
156
|
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
190
|
-
|
191
|
-
}
|
192
|
-
len = j;
|
193
|
-
ok = 1;
|
194
|
-
|
195
|
-
err:
|
196
|
-
if (!ok) {
|
197
|
-
OPENSSL_free(r);
|
198
|
-
r = NULL;
|
157
|
+
return 0;
|
199
158
|
}
|
200
|
-
|
201
|
-
|
159
|
+
for (size_t i = j; i < bits + 1; i++) {
|
160
|
+
out[i] = 0;
|
202
161
|
}
|
203
|
-
return r;
|
204
|
-
}
|
205
162
|
|
163
|
+
return 1;
|
164
|
+
}
|
206
165
|
|
207
166
|
// TODO: table should be optimised for the wNAF-based implementation,
|
208
167
|
// sometimes smaller windows will give better performance
|
209
168
|
// (thus the boundaries should be increased)
|
210
169
|
static size_t window_bits_for_scalar_size(size_t b) {
|
211
|
-
if (b >= 2000) {
|
212
|
-
return 6;
|
213
|
-
}
|
214
|
-
|
215
|
-
if (b >= 800) {
|
216
|
-
return 5;
|
217
|
-
}
|
218
|
-
|
219
170
|
if (b >= 300) {
|
220
171
|
return 4;
|
221
172
|
}
|
@@ -231,244 +182,173 @@ static size_t window_bits_for_scalar_size(size_t b) {
|
|
231
182
|
return 1;
|
232
183
|
}
|
233
184
|
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
size_t max_len = 0;
|
249
|
-
size_t num_val = 0;
|
250
|
-
EC_POINT **val = NULL; // precomputation
|
251
|
-
EC_POINT **v;
|
252
|
-
EC_POINT ***val_sub = NULL; // pointers to sub-arrays of 'val'
|
253
|
-
int ret = 0;
|
185
|
+
// EC_WNAF_MAX_WINDOW_BITS is the largest value returned by
|
186
|
+
// |window_bits_for_scalar_size|.
|
187
|
+
#define EC_WNAF_MAX_WINDOW_BITS 4
|
188
|
+
|
189
|
+
// compute_precomp sets |out[i]| to a newly-allocated |EC_POINT| containing
|
190
|
+
// (2*i+1)*p, for i from 0 to |len|. It returns one on success and
|
191
|
+
// zero on error.
|
192
|
+
static int compute_precomp(const EC_GROUP *group, EC_POINT **out,
|
193
|
+
const EC_POINT *p, size_t len, BN_CTX *ctx) {
|
194
|
+
out[0] = EC_POINT_new(group);
|
195
|
+
if (out[0] == NULL ||
|
196
|
+
!EC_POINT_copy(out[0], p)) {
|
197
|
+
return 0;
|
198
|
+
}
|
254
199
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
200
|
+
int ret = 0;
|
201
|
+
EC_POINT *two_p = EC_POINT_new(group);
|
202
|
+
if (two_p == NULL ||
|
203
|
+
!EC_POINT_dbl(group, two_p, p, ctx)) {
|
204
|
+
goto err;
|
260
205
|
}
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
if (g_scalar_raw != NULL) {
|
267
|
-
g_scalar = BN_CTX_get(ctx);
|
268
|
-
if (g_scalar == NULL ||
|
269
|
-
!bn_set_words(g_scalar, g_scalar_raw->words, group->order.top)) {
|
206
|
+
|
207
|
+
for (size_t i = 1; i < len; i++) {
|
208
|
+
out[i] = EC_POINT_new(group);
|
209
|
+
if (out[i] == NULL ||
|
210
|
+
!EC_POINT_add(group, out[i], out[i - 1], two_p, ctx)) {
|
270
211
|
goto err;
|
271
212
|
}
|
272
213
|
}
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
214
|
+
|
215
|
+
ret = 1;
|
216
|
+
|
217
|
+
err:
|
218
|
+
EC_POINT_free(two_p);
|
219
|
+
return ret;
|
220
|
+
}
|
221
|
+
|
222
|
+
static int lookup_precomp(const EC_GROUP *group, EC_POINT *out,
|
223
|
+
EC_POINT *const *precomp, int digit, BN_CTX *ctx) {
|
224
|
+
if (digit < 0) {
|
225
|
+
digit = -digit;
|
226
|
+
return EC_POINT_copy(out, precomp[digit >> 1]) &&
|
227
|
+
EC_POINT_invert(group, out, ctx);
|
279
228
|
}
|
280
229
|
|
281
|
-
|
282
|
-
|
283
|
-
// and |p_scalar|.
|
284
|
-
size_t num = p != NULL ? 1 : 0;
|
285
|
-
const EC_POINT **points = p != NULL ? &p : NULL;
|
286
|
-
BIGNUM **scalars = p != NULL ? &p_scalar : NULL;
|
230
|
+
return EC_POINT_copy(out, precomp[digit >> 1]);
|
231
|
+
}
|
287
232
|
|
288
|
-
|
233
|
+
int ec_wNAF_mul(const EC_GROUP *group, EC_POINT *r, const EC_SCALAR *g_scalar,
|
234
|
+
const EC_POINT *p, const EC_SCALAR *p_scalar, BN_CTX *ctx) {
|
235
|
+
BN_CTX *new_ctx = NULL;
|
236
|
+
EC_POINT *precomp_storage[2 * (1 << (EC_WNAF_MAX_WINDOW_BITS - 1))] = {NULL};
|
237
|
+
EC_POINT **g_precomp = NULL, **p_precomp = NULL;
|
238
|
+
int8_t g_wNAF[EC_MAX_SCALAR_BYTES * 8 + 1];
|
239
|
+
int8_t p_wNAF[EC_MAX_SCALAR_BYTES * 8 + 1];
|
240
|
+
EC_POINT *tmp = NULL;
|
241
|
+
int ret = 0;
|
289
242
|
|
290
|
-
if (
|
291
|
-
|
292
|
-
if (
|
293
|
-
OPENSSL_PUT_ERROR(EC, EC_R_UNDEFINED_GENERATOR);
|
243
|
+
if (ctx == NULL) {
|
244
|
+
ctx = new_ctx = BN_CTX_new();
|
245
|
+
if (ctx == NULL) {
|
294
246
|
goto err;
|
295
247
|
}
|
296
|
-
|
297
|
-
++total_num; // treat 'g_scalar' like 'num'-th element of 'scalars'
|
298
248
|
}
|
299
249
|
|
250
|
+
size_t bits = BN_num_bits(&group->order);
|
251
|
+
size_t wsize = window_bits_for_scalar_size(bits);
|
252
|
+
size_t wNAF_len = bits + 1;
|
253
|
+
size_t precomp_len = (size_t)1 << (wsize - 1);
|
300
254
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
val_sub = OPENSSL_malloc(total_num * sizeof(val_sub[0]));
|
305
|
-
|
306
|
-
// Ensure wNAF is initialised in case we end up going to err.
|
307
|
-
if (wNAF != NULL) {
|
308
|
-
OPENSSL_memset(wNAF, 0, total_num * sizeof(wNAF[0]));
|
309
|
-
}
|
255
|
+
OPENSSL_COMPILE_ASSERT(
|
256
|
+
OPENSSL_ARRAY_SIZE(g_wNAF) == OPENSSL_ARRAY_SIZE(p_wNAF),
|
257
|
+
g_wNAF_and_p_wNAF_are_different_sizes);
|
310
258
|
|
311
|
-
if (
|
312
|
-
|
259
|
+
if (wNAF_len > OPENSSL_ARRAY_SIZE(g_wNAF) ||
|
260
|
+
2 * precomp_len > OPENSSL_ARRAY_SIZE(precomp_storage)) {
|
261
|
+
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
313
262
|
goto err;
|
314
263
|
}
|
315
264
|
|
316
|
-
//
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
num_val += (size_t)1 << (wsize[i] - 1);
|
325
|
-
wNAF[i] =
|
326
|
-
compute_wNAF((i < num ? scalars[i] : g_scalar), wsize[i], &wNAF_len[i]);
|
327
|
-
if (wNAF[i] == NULL) {
|
265
|
+
// TODO(davidben): |mul_public| is for ECDSA verification which can assume
|
266
|
+
// non-NULL inputs, but this code is also used for |mul| which cannot. It's
|
267
|
+
// not constant-time, so replace the generic |mul| and remove the NULL checks.
|
268
|
+
size_t total_precomp = 0;
|
269
|
+
if (g_scalar != NULL) {
|
270
|
+
const EC_POINT *g = EC_GROUP_get0_generator(group);
|
271
|
+
if (g == NULL) {
|
272
|
+
OPENSSL_PUT_ERROR(EC, EC_R_UNDEFINED_GENERATOR);
|
328
273
|
goto err;
|
329
274
|
}
|
330
|
-
|
331
|
-
|
275
|
+
g_precomp = precomp_storage + total_precomp;
|
276
|
+
total_precomp += precomp_len;
|
277
|
+
if (!ec_compute_wNAF(group, g_wNAF, g_scalar, bits, wsize) ||
|
278
|
+
!compute_precomp(group, g_precomp, g, precomp_len, ctx)) {
|
279
|
+
goto err;
|
332
280
|
}
|
333
281
|
}
|
334
282
|
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
}
|
342
|
-
OPENSSL_memset(val, 0, num_val * sizeof(val[0]));
|
343
|
-
|
344
|
-
// allocate points for precomputation
|
345
|
-
v = val;
|
346
|
-
for (i = 0; i < total_num; i++) {
|
347
|
-
val_sub[i] = v;
|
348
|
-
for (j = 0; j < ((size_t)1 << (wsize[i] - 1)); j++) {
|
349
|
-
*v = EC_POINT_new(group);
|
350
|
-
if (*v == NULL) {
|
351
|
-
goto err;
|
352
|
-
}
|
353
|
-
v++;
|
283
|
+
if (p_scalar != NULL) {
|
284
|
+
p_precomp = precomp_storage + total_precomp;
|
285
|
+
total_precomp += precomp_len;
|
286
|
+
if (!ec_compute_wNAF(group, p_wNAF, p_scalar, bits, wsize) ||
|
287
|
+
!compute_precomp(group, p_precomp, p, precomp_len, ctx)) {
|
288
|
+
goto err;
|
354
289
|
}
|
355
290
|
}
|
356
|
-
if (!(v == val + num_val)) {
|
357
|
-
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
358
|
-
goto err;
|
359
|
-
}
|
360
291
|
|
361
|
-
|
292
|
+
tmp = EC_POINT_new(group);
|
293
|
+
if (tmp == NULL ||
|
294
|
+
// |window_bits_for_scalar_size| assumes we do this step.
|
295
|
+
!EC_POINTs_make_affine(group, total_precomp, precomp_storage, ctx)) {
|
362
296
|
goto err;
|
363
297
|
}
|
364
298
|
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
// val_sub[i][2] := 5 * points[i]
|
369
|
-
// ...
|
370
|
-
for (i = 0; i < total_num; i++) {
|
371
|
-
if (i < num) {
|
372
|
-
if (!EC_POINT_copy(val_sub[i][0], points[i])) {
|
373
|
-
goto err;
|
374
|
-
}
|
375
|
-
} else if (!EC_POINT_copy(val_sub[i][0], generator)) {
|
299
|
+
int r_is_at_infinity = 1;
|
300
|
+
for (size_t k = wNAF_len - 1; k < wNAF_len; k--) {
|
301
|
+
if (!r_is_at_infinity && !EC_POINT_dbl(group, r, r, ctx)) {
|
376
302
|
goto err;
|
377
303
|
}
|
378
304
|
|
379
|
-
if (
|
380
|
-
if (
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
if (
|
305
|
+
if (g_scalar != NULL) {
|
306
|
+
if (g_wNAF[k] != 0) {
|
307
|
+
if (!lookup_precomp(group, tmp, g_precomp, g_wNAF[k], ctx)) {
|
308
|
+
goto err;
|
309
|
+
}
|
310
|
+
if (r_is_at_infinity) {
|
311
|
+
if (!EC_POINT_copy(r, tmp)) {
|
312
|
+
goto err;
|
313
|
+
}
|
314
|
+
r_is_at_infinity = 0;
|
315
|
+
} else if (!EC_POINT_add(group, r, r, tmp, ctx)) {
|
385
316
|
goto err;
|
386
317
|
}
|
387
318
|
}
|
388
319
|
}
|
389
|
-
}
|
390
320
|
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
for (k = max_len - 1; k >= 0; k--) {
|
400
|
-
if (!r_is_at_infinity && !EC_POINT_dbl(group, r, r, ctx)) {
|
401
|
-
goto err;
|
402
|
-
}
|
403
|
-
|
404
|
-
for (i = 0; i < total_num; i++) {
|
405
|
-
if (wNAF_len[i] > (size_t)k) {
|
406
|
-
int digit = wNAF[i][k];
|
407
|
-
int is_neg;
|
408
|
-
|
409
|
-
if (digit) {
|
410
|
-
is_neg = digit < 0;
|
411
|
-
|
412
|
-
if (is_neg) {
|
413
|
-
digit = -digit;
|
414
|
-
}
|
415
|
-
|
416
|
-
if (is_neg != r_is_inverted) {
|
417
|
-
if (!r_is_at_infinity && !EC_POINT_invert(group, r, ctx)) {
|
418
|
-
goto err;
|
419
|
-
}
|
420
|
-
r_is_inverted = !r_is_inverted;
|
421
|
-
}
|
422
|
-
|
423
|
-
// digit > 0
|
424
|
-
|
425
|
-
if (r_is_at_infinity) {
|
426
|
-
if (!EC_POINT_copy(r, val_sub[i][digit >> 1])) {
|
427
|
-
goto err;
|
428
|
-
}
|
429
|
-
r_is_at_infinity = 0;
|
430
|
-
} else {
|
431
|
-
if (!EC_POINT_add(group, r, r, val_sub[i][digit >> 1], ctx)) {
|
432
|
-
goto err;
|
433
|
-
}
|
321
|
+
if (p_scalar != NULL) {
|
322
|
+
if (p_wNAF[k] != 0) {
|
323
|
+
if (!lookup_precomp(group, tmp, p_precomp, p_wNAF[k], ctx)) {
|
324
|
+
goto err;
|
325
|
+
}
|
326
|
+
if (r_is_at_infinity) {
|
327
|
+
if (!EC_POINT_copy(r, tmp)) {
|
328
|
+
goto err;
|
434
329
|
}
|
330
|
+
r_is_at_infinity = 0;
|
331
|
+
} else if (!EC_POINT_add(group, r, r, tmp, ctx)) {
|
332
|
+
goto err;
|
435
333
|
}
|
436
334
|
}
|
437
335
|
}
|
438
336
|
}
|
439
337
|
|
440
|
-
if (r_is_at_infinity
|
441
|
-
|
442
|
-
goto err;
|
443
|
-
}
|
444
|
-
} else if (r_is_inverted && !EC_POINT_invert(group, r, ctx)) {
|
338
|
+
if (r_is_at_infinity &&
|
339
|
+
!EC_POINT_set_to_infinity(group, r)) {
|
445
340
|
goto err;
|
446
341
|
}
|
447
342
|
|
448
343
|
ret = 1;
|
449
344
|
|
450
345
|
err:
|
451
|
-
if (ctx != NULL) {
|
452
|
-
BN_CTX_end(ctx);
|
453
|
-
}
|
454
346
|
BN_CTX_free(new_ctx);
|
455
347
|
EC_POINT_free(tmp);
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
OPENSSL_free(wNAF[i]);
|
461
|
-
}
|
462
|
-
|
463
|
-
OPENSSL_free(wNAF);
|
464
|
-
}
|
465
|
-
if (val != NULL) {
|
466
|
-
for (i = 0; i < num_val; i++) {
|
467
|
-
EC_POINT_free(val[i]);
|
468
|
-
}
|
469
|
-
|
470
|
-
OPENSSL_free(val);
|
348
|
+
OPENSSL_cleanse(&g_wNAF, sizeof(g_wNAF));
|
349
|
+
OPENSSL_cleanse(&p_wNAF, sizeof(p_wNAF));
|
350
|
+
for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(precomp_storage); i++) {
|
351
|
+
EC_POINT_free(precomp_storage[i]);
|
471
352
|
}
|
472
|
-
OPENSSL_free(val_sub);
|
473
353
|
return ret;
|
474
354
|
}
|