grpc 1.56.2 → 1.57.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +29 -22
- data/include/grpc/event_engine/event_engine.h +22 -32
- data/include/grpc/impl/grpc_types.h +3 -0
- data/include/grpc/support/port_platform.h +29 -23
- data/src/core/ext/filters/client_channel/client_channel.cc +44 -8
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +21 -52
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +19 -7
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -35
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +78 -132
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +38 -15
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +3 -5
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +22 -6
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +97 -71
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -16
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +56 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +25 -0
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -32
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +20 -79
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +31 -19
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -41
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +8 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +31 -74
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +7 -51
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +16 -87
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +16 -50
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -74
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -4
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +69 -59
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +7 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +25 -13
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +366 -311
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +17 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +39 -2498
- data/src/core/ext/filters/client_channel/retry_filter.h +91 -1
- data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc +2052 -0
- data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.h +442 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +38 -58
- data/src/core/ext/filters/client_channel/subchannel.h +3 -3
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +40 -111
- data/src/core/ext/filters/rbac/rbac_filter.h +12 -30
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +162 -86
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -6
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +7 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -186
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +6569 -174
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +2278 -441
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +8 -4
- data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -6
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +143 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +0 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +35 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +17 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +85 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +26 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +45 -3
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +4 -3
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +21 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +30 -6
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +180 -0
- data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.c +558 -0
- data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.h +2710 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +30 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +53 -24
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +30 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +110 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +41 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +150 -27
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +93 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +88 -76
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +11 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +162 -160
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +129 -118
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +141 -135
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +19 -12
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +38 -30
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.c +402 -0
- data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.h +111 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +80 -74
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +63 -47
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +315 -293
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -29
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +33 -30
- data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -13
- data/src/core/ext/xds/xds_client_grpc.cc +11 -6
- data/src/core/ext/xds/xds_client_grpc.h +16 -2
- data/src/core/ext/xds/xds_client_stats.h +10 -0
- data/src/core/ext/xds/xds_cluster.cc +26 -16
- data/src/core/ext/xds/xds_endpoint.cc +4 -7
- data/src/core/ext/xds/xds_health_status.cc +0 -17
- data/src/core/ext/xds/xds_health_status.h +5 -25
- data/src/core/ext/xds/xds_lb_policy_registry.cc +39 -0
- data/src/core/ext/xds/xds_route_config.cc +4 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +1 -3
- data/src/core/lib/address_utils/parse_address.cc +63 -1
- data/src/core/lib/address_utils/parse_address.h +8 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +46 -1
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
- data/src/core/lib/channel/channel_args.cc +21 -10
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/connected_channel.cc +4 -1
- data/src/core/lib/channel/promise_based_filter.h +1 -0
- data/src/core/lib/debug/trace.cc +1 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -1
- data/src/core/lib/event_engine/event_engine.cc +0 -12
- data/src/core/lib/event_engine/forkable.cc +47 -42
- data/src/core/lib/event_engine/handle_containers.h +0 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +25 -11
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +2 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +8 -12
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +37 -27
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +2 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +42 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +6 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +10 -37
- data/src/core/lib/event_engine/tcp_socket_utils.cc +67 -7
- data/src/core/lib/event_engine/tcp_socket_utils.h +3 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +90 -37
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +32 -12
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +12 -21
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +8 -12
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +55 -54
- data/src/core/lib/event_engine/windows/windows_endpoint.h +15 -12
- data/src/core/lib/event_engine/windows/windows_engine.cc +2 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -12
- data/src/core/lib/experiments/config.cc +60 -22
- data/src/core/lib/experiments/config.h +20 -8
- data/src/core/lib/experiments/experiments.cc +278 -0
- data/src/core/lib/experiments/experiments.h +59 -1
- data/src/core/lib/gprpp/dual_ref_counted.h +9 -9
- data/src/core/lib/gprpp/fork.cc +8 -9
- data/src/core/lib/gprpp/fork.h +6 -5
- data/src/core/lib/gprpp/if_list.h +4530 -0
- data/src/core/lib/gprpp/orphanable.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +6 -6
- data/src/core/lib/gprpp/sorted_pack.h +3 -12
- data/src/core/lib/gprpp/status_helper.h +16 -15
- data/src/core/lib/gprpp/time.h +12 -0
- data/src/core/lib/gprpp/type_list.h +32 -0
- data/src/core/lib/http/httpcli.h +6 -9
- data/src/core/lib/iomgr/error.cc +32 -2
- data/src/core/lib/iomgr/error.h +9 -10
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/exec_ctx.h +11 -0
- data/src/core/lib/iomgr/pollset.h +4 -5
- data/src/core/lib/iomgr/port.h +10 -0
- data/src/core/lib/iomgr/resolve_address.cc +13 -1
- data/src/core/lib/iomgr/resolve_address.h +17 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +7 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -0
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +6 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -1
- data/src/core/lib/iomgr/tcp_posix.cc +21 -4
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -2
- data/src/core/lib/iomgr/tcp_windows.cc +1 -3
- data/src/core/lib/iomgr/vsock.cc +59 -0
- data/src/core/lib/iomgr/vsock.h +38 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -6
- data/src/core/lib/load_balancing/delegating_helper.h +115 -0
- data/src/core/lib/load_balancing/lb_policy.h +20 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +6 -0
- data/src/core/lib/promise/party.h +1 -1
- data/src/core/lib/resolver/resolver_factory.h +3 -2
- data/src/core/lib/resolver/server_address.cc +9 -94
- data/src/core/lib/resolver/server_address.h +10 -64
- data/src/core/lib/resource_quota/memory_quota.h +1 -1
- data/src/core/lib/security/credentials/channel_creds_registry.h +51 -27
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +169 -9
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -38
- data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -1
- data/src/core/lib/service_config/service_config_call_data.h +5 -0
- data/src/core/lib/slice/slice.h +16 -0
- data/src/core/lib/surface/call.cc +31 -29
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/metadata_batch.cc +7 -7
- data/src/core/lib/transport/metadata_batch.h +86 -48
- data/src/core/lib/transport/parsed_metadata.h +34 -20
- data/src/core/lib/transport/simple_slice_based_metadata.h +9 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +4 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +28 -7
- data/src/ruby/bin/math_pb.rb +24 -18
- data/src/ruby/ext/grpc/extconf.rb +19 -18
- data/src/ruby/ext/grpc/rb_call.c +62 -39
- data/src/ruby/ext/grpc/rb_call_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_channel.c +126 -49
- data/src/ruby/ext/grpc/rb_channel.h +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +16 -2
- data/src/ruby/ext/grpc/rb_channel_args.h +4 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +22 -6
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -0
- data/src/ruby/ext/grpc/rb_grpc.c +192 -30
- data/src/ruby/ext/grpc/rb_grpc.h +8 -2
- data/src/ruby/ext/grpc/rb_server.c +62 -45
- data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +24 -13
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +24 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +25 -111
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +25 -2
- data/third_party/boringssl-with-bazel/err_data.c +552 -552
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +34 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +7 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +19 -1
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +8 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +28 -185
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +49 -46
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_64_adx.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +2809 -7417
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +27 -5
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +20 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +110 -72
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +15 -14
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +13 -10
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +35 -12
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +34 -72
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +12 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +5 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +12 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +17 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +51 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +5 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +277 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +180 -404
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +24 -57
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +33 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +18 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +15 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +9 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +24 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +11 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +9 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +40 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +21 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +38 -19
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +2 -29
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +55 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +33 -52
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +3 -8
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +198 -79
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +5 -4
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +7 -8
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -23
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +8 -5
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +6 -12
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +48 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{fuchsia.c → ios.c} +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_no_threads.c → rand_extra/trusty.c} +15 -19
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +41 -19
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_c11.c → refcount.c} +11 -17
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +147 -72
- data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +6 -35
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +5 -26
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +14 -18
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +54 -143
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +7 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +8 -12
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +19 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +4 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +4 -119
- data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +207 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -116
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +0 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +0 -21
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +21 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +19 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +11 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +13 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +0 -61
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +127 -81
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +224 -209
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +154 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -29
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +4 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +3 -2
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +9 -65
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +20 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -11
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +24 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +37 -30
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +125 -26
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -3
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +691 -0
- data/third_party/upb/upb/collections/map.c +3 -3
- metadata +27 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +0 -42
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +0 -64
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +0 -177
- data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -68
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +0 -89
@@ -93,8 +93,8 @@ static EC_WRAPPED_SCALAR *ec_wrapped_scalar_new(const EC_GROUP *group) {
|
|
93
93
|
|
94
94
|
OPENSSL_memset(wrapped, 0, sizeof(EC_WRAPPED_SCALAR));
|
95
95
|
wrapped->bignum.d = wrapped->scalar.words;
|
96
|
-
wrapped->bignum.width = group->order.width;
|
97
|
-
wrapped->bignum.dmax = group->order.width;
|
96
|
+
wrapped->bignum.width = group->order.N.width;
|
97
|
+
wrapped->bignum.dmax = group->order.N.width;
|
98
98
|
wrapped->bignum.flags = BN_FLG_STATIC_DATA;
|
99
99
|
return wrapped;
|
100
100
|
}
|
@@ -485,7 +485,7 @@ int EC_KEY_generate_key(EC_KEY *key) {
|
|
485
485
|
}
|
486
486
|
|
487
487
|
// Check that the group order is FIPS compliant (FIPS 186-4 B.4.2).
|
488
|
-
if (
|
488
|
+
if (EC_GROUP_order_bits(key->group) < 160) {
|
489
489
|
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_GROUP_ORDER);
|
490
490
|
return 0;
|
491
491
|
}
|
@@ -76,67 +76,35 @@
|
|
76
76
|
#include "internal.h"
|
77
77
|
|
78
78
|
|
79
|
-
int ec_GFp_mont_group_init(EC_GROUP *group) {
|
80
|
-
int ok;
|
81
|
-
|
82
|
-
ok = ec_GFp_simple_group_init(group);
|
83
|
-
group->mont = NULL;
|
84
|
-
return ok;
|
85
|
-
}
|
86
|
-
|
87
|
-
void ec_GFp_mont_group_finish(EC_GROUP *group) {
|
88
|
-
BN_MONT_CTX_free(group->mont);
|
89
|
-
group->mont = NULL;
|
90
|
-
ec_GFp_simple_group_finish(group);
|
91
|
-
}
|
92
|
-
|
93
|
-
int ec_GFp_mont_group_set_curve(EC_GROUP *group, const BIGNUM *p,
|
94
|
-
const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) {
|
95
|
-
BN_MONT_CTX_free(group->mont);
|
96
|
-
group->mont = BN_MONT_CTX_new_for_modulus(p, ctx);
|
97
|
-
if (group->mont == NULL) {
|
98
|
-
OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
|
99
|
-
return 0;
|
100
|
-
}
|
101
|
-
|
102
|
-
if (!ec_GFp_simple_group_set_curve(group, p, a, b, ctx)) {
|
103
|
-
BN_MONT_CTX_free(group->mont);
|
104
|
-
group->mont = NULL;
|
105
|
-
return 0;
|
106
|
-
}
|
107
|
-
|
108
|
-
return 1;
|
109
|
-
}
|
110
|
-
|
111
79
|
static void ec_GFp_mont_felem_to_montgomery(const EC_GROUP *group,
|
112
80
|
EC_FELEM *out, const EC_FELEM *in) {
|
113
|
-
bn_to_montgomery_small(out->words, in->words, group->field.width,
|
114
|
-
group->
|
81
|
+
bn_to_montgomery_small(out->words, in->words, group->field.N.width,
|
82
|
+
&group->field);
|
115
83
|
}
|
116
84
|
|
117
85
|
static void ec_GFp_mont_felem_from_montgomery(const EC_GROUP *group,
|
118
86
|
EC_FELEM *out,
|
119
87
|
const EC_FELEM *in) {
|
120
|
-
bn_from_montgomery_small(out->words, group->field.width, in->words,
|
121
|
-
group->field.width, group->
|
88
|
+
bn_from_montgomery_small(out->words, group->field.N.width, in->words,
|
89
|
+
group->field.N.width, &group->field);
|
122
90
|
}
|
123
91
|
|
124
92
|
static void ec_GFp_mont_felem_inv0(const EC_GROUP *group, EC_FELEM *out,
|
125
93
|
const EC_FELEM *a) {
|
126
|
-
bn_mod_inverse0_prime_mont_small(out->words, a->words, group->field.width,
|
127
|
-
group->
|
94
|
+
bn_mod_inverse0_prime_mont_small(out->words, a->words, group->field.N.width,
|
95
|
+
&group->field);
|
128
96
|
}
|
129
97
|
|
130
98
|
void ec_GFp_mont_felem_mul(const EC_GROUP *group, EC_FELEM *r,
|
131
99
|
const EC_FELEM *a, const EC_FELEM *b) {
|
132
|
-
bn_mod_mul_montgomery_small(r->words, a->words, b->words,
|
133
|
-
group->
|
100
|
+
bn_mod_mul_montgomery_small(r->words, a->words, b->words,
|
101
|
+
group->field.N.width, &group->field);
|
134
102
|
}
|
135
103
|
|
136
104
|
void ec_GFp_mont_felem_sqr(const EC_GROUP *group, EC_FELEM *r,
|
137
105
|
const EC_FELEM *a) {
|
138
|
-
bn_mod_mul_montgomery_small(r->words, a->words, a->words,
|
139
|
-
group->
|
106
|
+
bn_mod_mul_montgomery_small(r->words, a->words, a->words,
|
107
|
+
group->field.N.width, &group->field);
|
140
108
|
}
|
141
109
|
|
142
110
|
void ec_GFp_mont_felem_to_bytes(const EC_GROUP *group, uint8_t *out,
|
@@ -159,8 +127,8 @@ int ec_GFp_mont_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
|
|
159
127
|
void ec_GFp_mont_felem_reduce(const EC_GROUP *group, EC_FELEM *out,
|
160
128
|
const BN_ULONG *words, size_t num) {
|
161
129
|
// Convert "from" Montgomery form so the value is reduced mod p.
|
162
|
-
bn_from_montgomery_small(out->words, group->field.width, words, num,
|
163
|
-
group->
|
130
|
+
bn_from_montgomery_small(out->words, group->field.N.width, words, num,
|
131
|
+
&group->field);
|
164
132
|
// Convert "to" Montgomery form to remove the R^-1 factor added.
|
165
133
|
ec_GFp_mont_felem_to_montgomery(group, out, out);
|
166
134
|
// Convert to Montgomery form to match this implementation's representation.
|
@@ -170,14 +138,15 @@ void ec_GFp_mont_felem_reduce(const EC_GROUP *group, EC_FELEM *out,
|
|
170
138
|
void ec_GFp_mont_felem_exp(const EC_GROUP *group, EC_FELEM *out,
|
171
139
|
const EC_FELEM *a, const BN_ULONG *exp,
|
172
140
|
size_t num_exp) {
|
173
|
-
bn_mod_exp_mont_small(out->words, a->words, group->field.width, exp,
|
174
|
-
group->
|
141
|
+
bn_mod_exp_mont_small(out->words, a->words, group->field.N.width, exp,
|
142
|
+
num_exp, &group->field);
|
175
143
|
}
|
176
144
|
|
177
145
|
static int ec_GFp_mont_point_get_affine_coordinates(const EC_GROUP *group,
|
178
146
|
const EC_JACOBIAN *point,
|
179
147
|
EC_FELEM *x, EC_FELEM *y) {
|
180
|
-
if (
|
148
|
+
if (constant_time_declassify_int(
|
149
|
+
ec_GFp_simple_is_at_infinity(group, point))) {
|
181
150
|
OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
|
182
151
|
return 0;
|
183
152
|
}
|
@@ -317,7 +286,7 @@ void ec_GFp_mont_add(const EC_GROUP *group, EC_JACOBIAN *out,
|
|
317
286
|
|
318
287
|
// This case will never occur in the constant-time |ec_GFp_mont_mul|.
|
319
288
|
BN_ULONG is_nontrivial_double = ~xneq & ~yneq & z1nz & z2nz;
|
320
|
-
if (is_nontrivial_double) {
|
289
|
+
if (constant_time_declassify_w(is_nontrivial_double)) {
|
321
290
|
ec_GFp_mont_dbl(group, out, a);
|
322
291
|
return;
|
323
292
|
}
|
@@ -456,7 +425,7 @@ static int ec_GFp_mont_cmp_x_coordinate(const EC_GROUP *group,
|
|
456
425
|
const EC_JACOBIAN *p,
|
457
426
|
const EC_SCALAR *r) {
|
458
427
|
if (!group->field_greater_than_order ||
|
459
|
-
group->field.width != group->order.width) {
|
428
|
+
group->field.N.width != group->order.N.width) {
|
460
429
|
// Do not bother optimizing this case. p > order in all commonly-used
|
461
430
|
// curves.
|
462
431
|
return ec_GFp_simple_cmp_x_coordinate(group, p, r);
|
@@ -472,7 +441,7 @@ static int ec_GFp_mont_cmp_x_coordinate(const EC_GROUP *group,
|
|
472
441
|
EC_FELEM r_Z2, Z2_mont, X;
|
473
442
|
ec_GFp_mont_felem_mul(group, &Z2_mont, &p->Z, &p->Z);
|
474
443
|
// r < order < p, so this is valid.
|
475
|
-
OPENSSL_memcpy(r_Z2.words, r->words, group->field.width * sizeof(BN_ULONG));
|
444
|
+
OPENSSL_memcpy(r_Z2.words, r->words, group->field.N.width * sizeof(BN_ULONG));
|
476
445
|
ec_GFp_mont_felem_mul(group, &r_Z2, &r_Z2, &Z2_mont);
|
477
446
|
ec_GFp_mont_felem_from_montgomery(group, &X, &p->X);
|
478
447
|
|
@@ -484,10 +453,11 @@ static int ec_GFp_mont_cmp_x_coordinate(const EC_GROUP *group,
|
|
484
453
|
// Therefore there is a small possibility, less than 1/2^128, that group_order
|
485
454
|
// < p.x < P. in that case we need not only to compare against |r| but also to
|
486
455
|
// compare against r+group_order.
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
456
|
+
BN_ULONG carry = bn_add_words(r_Z2.words, r->words, group->order.N.d,
|
457
|
+
group->field.N.width);
|
458
|
+
if (carry == 0 &&
|
459
|
+
bn_less_than_words(r_Z2.words, group->field.N.d, group->field.N.width)) {
|
460
|
+
// r + group_order < p, so compare (r + group_order) * Z^2 against X.
|
491
461
|
ec_GFp_mont_felem_mul(group, &r_Z2, &r_Z2, &Z2_mont);
|
492
462
|
if (ec_felem_equal(group, &r_Z2, &X)) {
|
493
463
|
return 1;
|
@@ -498,9 +468,6 @@ static int ec_GFp_mont_cmp_x_coordinate(const EC_GROUP *group,
|
|
498
468
|
}
|
499
469
|
|
500
470
|
DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_mont_method) {
|
501
|
-
out->group_init = ec_GFp_mont_group_init;
|
502
|
-
out->group_finish = ec_GFp_mont_group_finish;
|
503
|
-
out->group_set_curve = ec_GFp_mont_group_set_curve;
|
504
471
|
out->point_get_affine_coordinates = ec_GFp_mont_point_get_affine_coordinates;
|
505
472
|
out->jacobian_to_affine_batch = ec_GFp_mont_jacobian_to_affine_batch;
|
506
473
|
out->add = ec_GFp_mont_add;
|
@@ -23,12 +23,16 @@
|
|
23
23
|
#include "../../internal.h"
|
24
24
|
|
25
25
|
|
26
|
+
const EC_FELEM *ec_felem_one(const EC_GROUP *group) {
|
27
|
+
// We reuse generator.Z as a cache for 1 in the field.
|
28
|
+
return &group->generator.raw.Z;
|
29
|
+
}
|
30
|
+
|
26
31
|
int ec_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, const BIGNUM *in) {
|
27
32
|
uint8_t bytes[EC_MAX_BYTES];
|
28
|
-
size_t len = BN_num_bytes(&group->field);
|
33
|
+
size_t len = BN_num_bytes(&group->field.N);
|
29
34
|
assert(sizeof(bytes) >= len);
|
30
|
-
if (BN_is_negative(in) ||
|
31
|
-
BN_cmp(in, &group->field) >= 0 ||
|
35
|
+
if (BN_is_negative(in) || BN_cmp(in, &group->field.N) >= 0 ||
|
32
36
|
!BN_bn2bin_padded(bytes, len, in)) {
|
33
37
|
OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE);
|
34
38
|
return 0;
|
@@ -57,11 +61,11 @@ int ec_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out, const uint8_t *in,
|
|
57
61
|
void ec_felem_neg(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a) {
|
58
62
|
// -a is zero if a is zero and p-a otherwise.
|
59
63
|
BN_ULONG mask = ec_felem_non_zero_mask(group, a);
|
60
|
-
BN_ULONG borrow =
|
61
|
-
|
64
|
+
BN_ULONG borrow = bn_sub_words(out->words, group->field.N.d, a->words,
|
65
|
+
group->field.N.width);
|
62
66
|
assert(borrow == 0);
|
63
67
|
(void)borrow;
|
64
|
-
for (int i = 0; i < group->field.width; i++) {
|
68
|
+
for (int i = 0; i < group->field.N.width; i++) {
|
65
69
|
out->words[i] &= mask;
|
66
70
|
}
|
67
71
|
}
|
@@ -69,20 +73,20 @@ void ec_felem_neg(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a) {
|
|
69
73
|
void ec_felem_add(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
|
70
74
|
const EC_FELEM *b) {
|
71
75
|
EC_FELEM tmp;
|
72
|
-
bn_mod_add_words(out->words, a->words, b->words, group->field.d, tmp.words,
|
73
|
-
group->field.width);
|
76
|
+
bn_mod_add_words(out->words, a->words, b->words, group->field.N.d, tmp.words,
|
77
|
+
group->field.N.width);
|
74
78
|
}
|
75
79
|
|
76
80
|
void ec_felem_sub(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
|
77
81
|
const EC_FELEM *b) {
|
78
82
|
EC_FELEM tmp;
|
79
|
-
bn_mod_sub_words(out->words, a->words, b->words, group->field.d, tmp.words,
|
80
|
-
group->field.width);
|
83
|
+
bn_mod_sub_words(out->words, a->words, b->words, group->field.N.d, tmp.words,
|
84
|
+
group->field.N.width);
|
81
85
|
}
|
82
86
|
|
83
87
|
BN_ULONG ec_felem_non_zero_mask(const EC_GROUP *group, const EC_FELEM *a) {
|
84
88
|
BN_ULONG mask = 0;
|
85
|
-
for (int i = 0; i < group->field.width; i++) {
|
89
|
+
for (int i = 0; i < group->field.N.width; i++) {
|
86
90
|
mask |= a->words[i];
|
87
91
|
}
|
88
92
|
return ~constant_time_is_zero_w(mask);
|
@@ -90,11 +94,11 @@ BN_ULONG ec_felem_non_zero_mask(const EC_GROUP *group, const EC_FELEM *a) {
|
|
90
94
|
|
91
95
|
void ec_felem_select(const EC_GROUP *group, EC_FELEM *out, BN_ULONG mask,
|
92
96
|
const EC_FELEM *a, const EC_FELEM *b) {
|
93
|
-
bn_select_words(out->words, mask, a->words, b->words, group->field.width);
|
97
|
+
bn_select_words(out->words, mask, a->words, b->words, group->field.N.width);
|
94
98
|
}
|
95
99
|
|
96
100
|
int ec_felem_equal(const EC_GROUP *group, const EC_FELEM *a,
|
97
101
|
const EC_FELEM *b) {
|
98
102
|
return CRYPTO_memcmp(a->words, b->words,
|
99
|
-
group->field.width * sizeof(BN_ULONG)) == 0;
|
103
|
+
group->field.N.width * sizeof(BN_ULONG)) == 0;
|
100
104
|
}
|
@@ -197,6 +197,9 @@ typedef struct {
|
|
197
197
|
BN_ULONG words[EC_MAX_WORDS];
|
198
198
|
} EC_FELEM;
|
199
199
|
|
200
|
+
// ec_felem_one returns one in |group|'s field.
|
201
|
+
const EC_FELEM *ec_felem_one(const EC_GROUP *group);
|
202
|
+
|
200
203
|
// ec_bignum_to_felem converts |in| to an |EC_FELEM|. It returns one on success
|
201
204
|
// and zero if |in| is out of range.
|
202
205
|
int ec_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, const BIGNUM *in);
|
@@ -421,7 +424,7 @@ void ec_precomp_select(const EC_GROUP *group, EC_PRECOMP *out, BN_ULONG mask,
|
|
421
424
|
|
422
425
|
// ec_cmp_x_coordinate compares the x (affine) coordinate of |p|, mod the group
|
423
426
|
// order, with |r|. It returns one if the values match and zero if |p| is the
|
424
|
-
// point at infinity of the values do not match.
|
427
|
+
// point at infinity of the values do not match. |p| is treated as public.
|
425
428
|
int ec_cmp_x_coordinate(const EC_GROUP *group, const EC_JACOBIAN *p,
|
426
429
|
const EC_SCALAR *r);
|
427
430
|
|
@@ -472,14 +475,10 @@ int ec_affine_jacobian_equal(const EC_GROUP *group, const EC_AFFINE *a,
|
|
472
475
|
// Implementation details.
|
473
476
|
|
474
477
|
struct ec_method_st {
|
475
|
-
int (*group_init)(EC_GROUP *);
|
476
|
-
void (*group_finish)(EC_GROUP *);
|
477
|
-
int (*group_set_curve)(EC_GROUP *, const BIGNUM *p, const BIGNUM *a,
|
478
|
-
const BIGNUM *b, BN_CTX *);
|
479
|
-
|
480
478
|
// point_get_affine_coordinates sets |*x| and |*y| to the affine coordinates
|
481
479
|
// of |p|. Either |x| or |y| may be NULL to omit it. It returns one on success
|
482
|
-
// and zero if |p| is the point at infinity.
|
480
|
+
// and zero if |p| is the point at infinity. It leaks whether |p| was the
|
481
|
+
// point at infinity, but otherwise treats |p| as secret.
|
483
482
|
int (*point_get_affine_coordinates)(const EC_GROUP *, const EC_JACOBIAN *p,
|
484
483
|
EC_FELEM *x, EC_FELEM *y);
|
485
484
|
|
@@ -587,60 +586,54 @@ struct ec_method_st {
|
|
587
586
|
|
588
587
|
const EC_METHOD *EC_GFp_mont_method(void);
|
589
588
|
|
589
|
+
struct ec_point_st {
|
590
|
+
// group is an owning reference to |group|, unless this is
|
591
|
+
// |group->generator|.
|
592
|
+
EC_GROUP *group;
|
593
|
+
// raw is the group-specific point data. Functions that take |EC_POINT|
|
594
|
+
// typically check consistency with |EC_GROUP| while functions that take
|
595
|
+
// |EC_JACOBIAN| do not. Thus accesses to this field should be externally
|
596
|
+
// checked for consistency.
|
597
|
+
EC_JACOBIAN raw;
|
598
|
+
} /* EC_POINT */;
|
599
|
+
|
590
600
|
struct ec_group_st {
|
591
601
|
const EC_METHOD *meth;
|
592
602
|
|
593
603
|
// Unlike all other |EC_POINT|s, |generator| does not own |generator->group|
|
594
604
|
// to avoid a reference cycle. Additionally, Z is guaranteed to be one, so X
|
595
|
-
// and Y are suitable for use as an |EC_AFFINE|.
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
int curve_name; // optional NID for named curve
|
605
|
+
// and Y are suitable for use as an |EC_AFFINE|. Before |has_order| is set, Z
|
606
|
+
// is one, but X and Y are uninitialized.
|
607
|
+
EC_POINT generator;
|
600
608
|
|
601
|
-
BN_MONT_CTX
|
609
|
+
BN_MONT_CTX order;
|
610
|
+
BN_MONT_CTX field;
|
602
611
|
|
603
|
-
|
604
|
-
// even if they appear generic
|
612
|
+
EC_FELEM a, b; // Curve coefficients.
|
605
613
|
|
606
|
-
|
614
|
+
// comment is a human-readable string describing the curve.
|
615
|
+
const char *comment;
|
607
616
|
|
608
|
-
|
617
|
+
int curve_name; // optional NID for named curve
|
618
|
+
uint8_t oid[9];
|
619
|
+
uint8_t oid_len;
|
609
620
|
|
610
621
|
// a_is_minus3 is one if |a| is -3 mod |field| and zero otherwise. Point
|
611
622
|
// arithmetic is optimized for -3.
|
612
623
|
int a_is_minus3;
|
613
624
|
|
625
|
+
// has_order is one if |generator| and |order| have been initialized.
|
626
|
+
int has_order;
|
627
|
+
|
614
628
|
// field_greater_than_order is one if |field| is greate than |order| and zero
|
615
629
|
// otherwise.
|
616
630
|
int field_greater_than_order;
|
617
631
|
|
618
|
-
// field_minus_order, if |field_greater_than_order| is true, is |field| minus
|
619
|
-
// |order| represented as an |EC_FELEM|. Otherwise, it is zero.
|
620
|
-
//
|
621
|
-
// Note: unlike |EC_FELEM|s used as intermediate values internal to the
|
622
|
-
// |EC_METHOD|, this value is not encoded in Montgomery form.
|
623
|
-
EC_FELEM field_minus_order;
|
624
|
-
|
625
632
|
CRYPTO_refcount_t references;
|
626
|
-
|
627
|
-
BN_MONT_CTX *mont; // Montgomery structure.
|
628
|
-
|
629
|
-
EC_FELEM one; // The value one.
|
630
633
|
} /* EC_GROUP */;
|
631
634
|
|
632
|
-
|
633
|
-
|
634
|
-
// |group->generator|.
|
635
|
-
EC_GROUP *group;
|
636
|
-
// raw is the group-specific point data. Functions that take |EC_POINT|
|
637
|
-
// typically check consistency with |EC_GROUP| while functions that take
|
638
|
-
// |EC_JACOBIAN| do not. Thus accesses to this field should be externally
|
639
|
-
// checked for consistency.
|
640
|
-
EC_JACOBIAN raw;
|
641
|
-
} /* EC_POINT */;
|
642
|
-
|
643
|
-
EC_GROUP *ec_group_new(const EC_METHOD *meth);
|
635
|
+
EC_GROUP *ec_group_new(const EC_METHOD *meth, const BIGNUM *p, const BIGNUM *a,
|
636
|
+
const BIGNUM *b, BN_CTX *ctx);
|
644
637
|
|
645
638
|
void ec_GFp_mont_mul(const EC_GROUP *group, EC_JACOBIAN *r,
|
646
639
|
const EC_JACOBIAN *p, const EC_SCALAR *scalar);
|
@@ -679,8 +672,6 @@ int ec_GFp_mont_mul_public_batch(const EC_GROUP *group, EC_JACOBIAN *r,
|
|
679
672
|
const EC_SCALAR *scalars, size_t num);
|
680
673
|
|
681
674
|
// method functions in simple.c
|
682
|
-
int ec_GFp_simple_group_init(EC_GROUP *);
|
683
|
-
void ec_GFp_simple_group_finish(EC_GROUP *);
|
684
675
|
int ec_GFp_simple_group_set_curve(EC_GROUP *, const BIGNUM *p, const BIGNUM *a,
|
685
676
|
const BIGNUM *b, BN_CTX *);
|
686
677
|
int ec_GFp_simple_group_get_curve(const EC_GROUP *, BIGNUM *p, BIGNUM *a,
|
@@ -712,10 +703,6 @@ int ec_GFp_simple_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
|
|
712
703
|
const uint8_t *in, size_t len);
|
713
704
|
|
714
705
|
// method functions in montgomery.c
|
715
|
-
int ec_GFp_mont_group_init(EC_GROUP *);
|
716
|
-
int ec_GFp_mont_group_set_curve(EC_GROUP *, const BIGNUM *p, const BIGNUM *a,
|
717
|
-
const BIGNUM *b, BN_CTX *);
|
718
|
-
void ec_GFp_mont_group_finish(EC_GROUP *);
|
719
706
|
void ec_GFp_mont_felem_mul(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
|
720
707
|
const EC_FELEM *b);
|
721
708
|
void ec_GFp_mont_felem_sqr(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a);
|
@@ -761,31 +748,6 @@ struct ec_key_st {
|
|
761
748
|
CRYPTO_EX_DATA ex_data;
|
762
749
|
} /* EC_KEY */;
|
763
750
|
|
764
|
-
struct built_in_curve {
|
765
|
-
int nid;
|
766
|
-
const uint8_t *oid;
|
767
|
-
uint8_t oid_len;
|
768
|
-
// comment is a human-readable string describing the curve.
|
769
|
-
const char *comment;
|
770
|
-
// param_len is the number of bytes needed to store a field element.
|
771
|
-
uint8_t param_len;
|
772
|
-
// params points to an array of 6*|param_len| bytes which hold the field
|
773
|
-
// elements of the following (in big-endian order): prime, a, b, generator x,
|
774
|
-
// generator y, order.
|
775
|
-
const uint8_t *params;
|
776
|
-
const EC_METHOD *method;
|
777
|
-
};
|
778
|
-
|
779
|
-
#define OPENSSL_NUM_BUILT_IN_CURVES 4
|
780
|
-
|
781
|
-
struct built_in_curves {
|
782
|
-
struct built_in_curve curves[OPENSSL_NUM_BUILT_IN_CURVES];
|
783
|
-
};
|
784
|
-
|
785
|
-
// OPENSSL_built_in_curves returns a pointer to static information about
|
786
|
-
// standard curves. The array is terminated with an entry where |nid| is
|
787
|
-
// |NID_undef|.
|
788
|
-
const struct built_in_curves *OPENSSL_built_in_curves(void);
|
789
751
|
|
790
752
|
#if defined(__cplusplus)
|
791
753
|
} // extern C
|
@@ -80,7 +80,7 @@ size_t ec_point_byte_len(const EC_GROUP *group, point_conversion_form_t form) {
|
|
80
80
|
return 0;
|
81
81
|
}
|
82
82
|
|
83
|
-
const size_t field_len = BN_num_bytes(&group->field);
|
83
|
+
const size_t field_len = BN_num_bytes(&group->field.N);
|
84
84
|
size_t output_len = 1 /* type byte */ + field_len;
|
85
85
|
if (form == POINT_CONVERSION_UNCOMPRESSED) {
|
86
86
|
// Uncompressed points have a second coordinate.
|
@@ -100,11 +100,11 @@ size_t ec_point_to_bytes(const EC_GROUP *group, const EC_AFFINE *point,
|
|
100
100
|
|
101
101
|
size_t field_len;
|
102
102
|
ec_felem_to_bytes(group, buf + 1, &field_len, &point->X);
|
103
|
-
assert(field_len == BN_num_bytes(&group->field));
|
103
|
+
assert(field_len == BN_num_bytes(&group->field.N));
|
104
104
|
|
105
105
|
if (form == POINT_CONVERSION_UNCOMPRESSED) {
|
106
106
|
ec_felem_to_bytes(group, buf + 1 + field_len, &field_len, &point->Y);
|
107
|
-
assert(field_len == BN_num_bytes(&group->field));
|
107
|
+
assert(field_len == BN_num_bytes(&group->field.N));
|
108
108
|
buf[0] = form;
|
109
109
|
} else {
|
110
110
|
uint8_t y_buf[EC_MAX_BYTES];
|
@@ -117,7 +117,7 @@ size_t ec_point_to_bytes(const EC_GROUP *group, const EC_AFFINE *point,
|
|
117
117
|
|
118
118
|
int ec_point_from_uncompressed(const EC_GROUP *group, EC_AFFINE *out,
|
119
119
|
const uint8_t *in, size_t len) {
|
120
|
-
const size_t field_len = BN_num_bytes(&group->field);
|
120
|
+
const size_t field_len = BN_num_bytes(&group->field.N);
|
121
121
|
if (len != 1 + 2 * field_len || in[0] != POINT_CONVERSION_UNCOMPRESSED) {
|
122
122
|
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_ENCODING);
|
123
123
|
return 0;
|
@@ -155,7 +155,7 @@ static int ec_GFp_simple_oct2point(const EC_GROUP *group, EC_POINT *point,
|
|
155
155
|
}
|
156
156
|
|
157
157
|
const int y_bit = form & 1;
|
158
|
-
const size_t field_len = BN_num_bytes(&group->field);
|
158
|
+
const size_t field_len = BN_num_bytes(&group->field.N);
|
159
159
|
form = form & ~1u;
|
160
160
|
if (form != POINT_CONVERSION_COMPRESSED ||
|
161
161
|
len != 1 /* type byte */ + field_len) {
|
@@ -182,7 +182,7 @@ static int ec_GFp_simple_oct2point(const EC_GROUP *group, EC_POINT *point,
|
|
182
182
|
if (x == NULL || !BN_bin2bn(buf + 1, field_len, x)) {
|
183
183
|
goto err;
|
184
184
|
}
|
185
|
-
if (BN_ucmp(x, &group->field) >= 0) {
|
185
|
+
if (BN_ucmp(x, &group->field.N) >= 0) {
|
186
186
|
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_ENCODING);
|
187
187
|
goto err;
|
188
188
|
}
|
@@ -260,7 +260,8 @@ int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group,
|
|
260
260
|
return 0;
|
261
261
|
}
|
262
262
|
|
263
|
-
|
263
|
+
const BIGNUM *field = &group->field.N;
|
264
|
+
if (BN_is_negative(x) || BN_cmp(x, field) >= 0) {
|
264
265
|
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_COMPRESSED_POINT);
|
265
266
|
return 0;
|
266
267
|
}
|
@@ -295,31 +296,31 @@ int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group,
|
|
295
296
|
// so y is one of the square roots of x^3 + a*x + b.
|
296
297
|
|
297
298
|
// tmp1 := x^3
|
298
|
-
if (!BN_mod_sqr(tmp2, x,
|
299
|
-
!BN_mod_mul(tmp1, tmp2, x,
|
299
|
+
if (!BN_mod_sqr(tmp2, x, field, ctx) ||
|
300
|
+
!BN_mod_mul(tmp1, tmp2, x, field, ctx)) {
|
300
301
|
goto err;
|
301
302
|
}
|
302
303
|
|
303
304
|
// tmp1 := tmp1 + a*x
|
304
305
|
if (group->a_is_minus3) {
|
305
|
-
if (!bn_mod_lshift1_consttime(tmp2, x,
|
306
|
-
!bn_mod_add_consttime(tmp2, tmp2, x,
|
307
|
-
!bn_mod_sub_consttime(tmp1, tmp1, tmp2,
|
306
|
+
if (!bn_mod_lshift1_consttime(tmp2, x, field, ctx) ||
|
307
|
+
!bn_mod_add_consttime(tmp2, tmp2, x, field, ctx) ||
|
308
|
+
!bn_mod_sub_consttime(tmp1, tmp1, tmp2, field, ctx)) {
|
308
309
|
goto err;
|
309
310
|
}
|
310
311
|
} else {
|
311
|
-
if (!BN_mod_mul(tmp2, a, x,
|
312
|
-
!bn_mod_add_consttime(tmp1, tmp1, tmp2,
|
312
|
+
if (!BN_mod_mul(tmp2, a, x, field, ctx) ||
|
313
|
+
!bn_mod_add_consttime(tmp1, tmp1, tmp2, field, ctx)) {
|
313
314
|
goto err;
|
314
315
|
}
|
315
316
|
}
|
316
317
|
|
317
318
|
// tmp1 := tmp1 + b
|
318
|
-
if (!bn_mod_add_consttime(tmp1, tmp1, b,
|
319
|
+
if (!bn_mod_add_consttime(tmp1, tmp1, b, field, ctx)) {
|
319
320
|
goto err;
|
320
321
|
}
|
321
322
|
|
322
|
-
if (!BN_mod_sqrt(y, tmp1,
|
323
|
+
if (!BN_mod_sqrt(y, tmp1, field, ctx)) {
|
323
324
|
uint32_t err = ERR_peek_last_error();
|
324
325
|
if (ERR_GET_LIB(err) == ERR_LIB_BN &&
|
325
326
|
ERR_GET_REASON(err) == BN_R_NOT_A_SQUARE) {
|
@@ -336,7 +337,7 @@ int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group,
|
|
336
337
|
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_COMPRESSION_BIT);
|
337
338
|
goto err;
|
338
339
|
}
|
339
|
-
if (!BN_usub(y,
|
340
|
+
if (!BN_usub(y, field, y)) {
|
340
341
|
goto err;
|
341
342
|
}
|
342
343
|
}
|
@@ -734,8 +734,8 @@ static void p224_point_add(p224_felem x3, p224_felem y3, p224_felem z3,
|
|
734
734
|
// tmp[i] < 2^116 + 2^64 + 8 < 2^117
|
735
735
|
p224_felem_reduce(ftmp, tmp);
|
736
736
|
|
737
|
-
//
|
738
|
-
//
|
737
|
+
// The formulae are incorrect if the points are equal, so we check for this
|
738
|
+
// and do doubling if this happens.
|
739
739
|
x_equal = p224_felem_is_zero(ftmp);
|
740
740
|
y_equal = p224_felem_is_zero(ftmp3);
|
741
741
|
z1_is_zero = p224_felem_is_zero(z1);
|
@@ -743,7 +743,7 @@ static void p224_point_add(p224_felem x3, p224_felem y3, p224_felem z3,
|
|
743
743
|
// In affine coordinates, (X_1, Y_1) == (X_2, Y_2)
|
744
744
|
p224_limb is_nontrivial_double =
|
745
745
|
x_equal & y_equal & (1 - z1_is_zero) & (1 - z2_is_zero);
|
746
|
-
if (is_nontrivial_double) {
|
746
|
+
if (constant_time_declassify_w(is_nontrivial_double)) {
|
747
747
|
p224_point_double(x3, y3, z3, x1, y1, z1);
|
748
748
|
return;
|
749
749
|
}
|
@@ -862,7 +862,8 @@ static crypto_word_t p224_get_bit(const EC_SCALAR *in, size_t i) {
|
|
862
862
|
static int ec_GFp_nistp224_point_get_affine_coordinates(
|
863
863
|
const EC_GROUP *group, const EC_JACOBIAN *point, EC_FELEM *x,
|
864
864
|
EC_FELEM *y) {
|
865
|
-
if (
|
865
|
+
if (constant_time_declassify_int(
|
866
|
+
ec_GFp_simple_is_at_infinity(group, point))) {
|
866
867
|
OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
|
867
868
|
return 0;
|
868
869
|
}
|
@@ -1141,9 +1142,6 @@ static void ec_GFp_nistp224_felem_sqr(const EC_GROUP *group, EC_FELEM *r,
|
|
1141
1142
|
}
|
1142
1143
|
|
1143
1144
|
DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp224_method) {
|
1144
|
-
out->group_init = ec_GFp_simple_group_init;
|
1145
|
-
out->group_finish = ec_GFp_simple_group_finish;
|
1146
|
-
out->group_set_curve = ec_GFp_simple_group_set_curve;
|
1147
1145
|
out->point_get_affine_coordinates =
|
1148
1146
|
ec_GFp_nistp224_point_get_affine_coordinates;
|
1149
1147
|
out->add = ec_GFp_nistp224_add;
|