grpc 1.84.0 → 1.85.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +40 -27
- data/include/grpc/event_engine/memory_allocator.h +1 -0
- data/include/grpc/grpc.h +3 -0
- data/include/grpc/grpc_security_constants.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +4 -0
- data/src/core/call/call_filters.h +10 -10
- data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
- data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
- data/src/core/call/filter_fusion.h +15 -15
- data/src/core/call/interception_chain.h +3 -3
- data/src/core/call/metadata_batch.cc +1 -0
- data/src/core/call/metadata_batch.h +45 -33
- data/src/core/call/parsed_metadata.h +3 -3
- data/src/core/call/request_buffer.cc +6 -6
- data/src/core/call/request_buffer.h +1 -1
- data/src/core/channelz/channel_trace.cc +5 -5
- data/src/core/channelz/channel_trace.h +1 -1
- data/src/core/channelz/channelz.cc +9 -9
- data/src/core/channelz/channelz.h +12 -12
- data/src/core/channelz/channelz_registry.cc +10 -10
- data/src/core/channelz/ztrace_collector.h +5 -5
- data/src/core/client_channel/client_channel.cc +4 -4
- data/src/core/client_channel/client_channel_filter.cc +14 -14
- data/src/core/client_channel/global_subchannel_pool.cc +4 -4
- data/src/core/client_channel/subchannel.cc +24 -23
- data/src/core/client_channel/subchannel_stream_client.cc +5 -5
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
- data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
- data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
- data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
- data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
- data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
- data/src/core/credentials/transport/tls/tls_utils.h +9 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
- data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
- data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
- data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
- data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
- data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
- data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
- data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
- data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
- data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
- data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
- data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
- data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
- data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
- data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
- data/src/core/handshaker/handshaker.cc +4 -4
- data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
- data/src/core/handshaker/security/secure_endpoint.cc +13 -13
- data/src/core/handshaker/security/security_handshaker.cc +6 -6
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
- data/src/core/lib/channel/channel_args.cc +20 -0
- data/src/core/lib/channel/channel_args.h +17 -17
- data/src/core/lib/channel/promise_based_filter.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.h +66 -27
- data/src/core/lib/debug/trace_flags.cc +2 -0
- data/src/core/lib/debug/trace_flags.h +1 -0
- data/src/core/lib/event_engine/ares_resolver.cc +14 -14
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
- data/src/core/lib/event_engine/default_event_engine.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
- data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
- data/src/core/lib/experiments/experiments.cc +48 -0
- data/src/core/lib/experiments/experiments.h +24 -0
- data/src/core/lib/iomgr/buffer_list.cc +3 -3
- data/src/core/lib/iomgr/buffer_list.h +1 -1
- data/src/core/lib/iomgr/combiner.cc +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_posix.cc +7 -7
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +1 -1
- data/src/core/lib/promise/arena_promise.h +7 -7
- data/src/core/lib/promise/detail/promise_factory.h +8 -8
- data/src/core/lib/promise/detail/promise_like.h +4 -4
- data/src/core/lib/promise/inter_activity_latch.h +6 -6
- data/src/core/lib/promise/inter_activity_pipe.h +1 -1
- data/src/core/lib/promise/observable.h +3 -3
- data/src/core/lib/promise/party.cc +1 -1
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resource_quota/arena.h +3 -3
- data/src/core/lib/resource_quota/memory_quota.cc +16 -16
- data/src/core/lib/resource_quota/memory_quota.h +1 -1
- data/src/core/lib/resource_quota/thread_quota.cc +3 -3
- data/src/core/lib/security/authorization/audit_logging.cc +5 -5
- data/src/core/lib/security/authorization/authorization_engine.h +1 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
- data/src/core/lib/security/authorization/matchers.h +1 -1
- data/src/core/lib/surface/call.cc +8 -7
- data/src/core/lib/surface/call.h +3 -3
- data/src/core/lib/surface/call_utils.h +4 -0
- data/src/core/lib/surface/channel.cc +1 -1
- data/src/core/lib/surface/channel.h +1 -1
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/init.cc +7 -7
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/legacy_channel.cc +2 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
- data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
- data/src/core/load_balancing/autosharding/autosharding.h +78 -0
- data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
- data/src/core/load_balancing/health_check_client.cc +7 -7
- data/src/core/load_balancing/lb_policy.cc +1 -1
- data/src/core/load_balancing/oob_backend_metric.cc +5 -5
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
- data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
- data/src/core/load_balancing/rls/rls.cc +23 -17
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
- data/src/core/load_balancing/xds/cds.cc +6 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
- data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
- data/src/core/mitigation_engine/mitigation_engine.h +28 -4
- data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
- data/src/core/resolver/dns/dns_resolver.cc +7 -7
- data/src/core/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
- data/src/core/server/server.cc +30 -30
- data/src/core/server/server.h +4 -3
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
- data/src/core/telemetry/default_tcp_tracer.cc +1 -1
- data/src/core/telemetry/instrument.cc +30 -16
- data/src/core/telemetry/instrument.h +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
- data/src/core/tsi/ssl_transport_security.cc +46 -13
- data/src/core/tsi/ssl_transport_security.h +7 -0
- data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
- data/src/core/util/event_log.cc +3 -3
- data/src/core/util/http_client/httpcli.cc +5 -5
- data/src/core/util/http_client/httpcli.h +1 -1
- data/src/core/util/json/json_object_loader.cc +7 -0
- data/src/core/util/json/json_object_loader.h +17 -2
- data/src/core/util/latent_see.cc +123 -36
- data/src/core/util/latent_see.h +14 -1
- data/src/core/util/mpscq.cc +1 -1
- data/src/core/util/notification.h +4 -4
- data/src/core/util/sync.h +20 -6
- data/src/core/util/table.h +20 -22
- data/src/core/util/work_serializer.cc +2 -2
- data/src/core/xds/grpc/blackboard.cc +4 -3
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
- data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
- data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_endpoint.cc +1 -1
- data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
- data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
- data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
- data/src/core/xds/grpc/xds_matcher.h +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
- data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
- data/src/core/xds/xds_client/lrs_client.cc +22 -19
- data/src/core/xds/xds_client/xds_client.cc +19 -16
- data/src/core/xds/xds_client/xds_transport.h +49 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -1
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
- data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
- data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
- data/third_party/abseil-cpp/absl/base/casts.h +135 -2
- data/third_party/abseil-cpp/absl/base/config.h +63 -41
- data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
- data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
- data/third_party/abseil-cpp/absl/base/macros.h +76 -37
- data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
- data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
- data/third_party/abseil-cpp/absl/base/options.h +46 -18
- data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
- data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
- data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
- data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
- data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
- data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
- data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
- data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
- data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
- data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
- data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
- data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
- data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
- data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
- data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
- data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
- data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
- data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
- data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
- data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
- data/third_party/abseil-cpp/absl/log/log.h +2 -2
- data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
- data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
- data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
- data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
- data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
- data/third_party/abseil-cpp/absl/status/status.cc +66 -70
- data/third_party/abseil-cpp/absl/status/status.h +254 -23
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
- data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
- data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
- data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
- data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
- data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
- data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
- data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
- data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
- data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
- data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
- data/third_party/abseil-cpp/absl/time/clock.h +3 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
- data/third_party/abseil-cpp/absl/time/format.cc +3 -10
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- data/third_party/abseil-cpp/absl/time/time.cc +4 -4
- data/third_party/abseil-cpp/absl/time/time.h +14 -13
- data/third_party/abseil-cpp/absl/types/compare.h +64 -63
- data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
- data/third_party/abseil-cpp/absl/types/optional.h +31 -4
- data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
- data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
- data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
- data/third_party/abseil-cpp/absl/types/span.h +67 -38
- data/third_party/abseil-cpp/absl/types/variant.h +75 -18
- data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
- data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
- data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
- data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
- data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
- data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
- data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
- data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
- data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
- data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
- data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
- data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
- data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
- data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
- data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
- data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
- data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
- data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
- data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
- data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
- data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
- data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
- data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
- data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
- data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
- data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
- data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
- data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
- data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
- data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
- data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
- data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
- data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
- data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
- data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
- data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
- data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
- data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
- data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
- data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
- data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
- data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
- data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
- data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
- data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
- data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
- data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
- data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
- data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
- data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
- data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
- data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
- data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
- data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
- data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
- data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
- data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
- data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
- data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
- data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
- data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
- data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
- data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
- data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
- data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
- data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
- data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
- data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
- data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
- data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
- data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
- data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
- data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
- data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
- data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
- data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
- data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
- data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
- data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
- data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
- data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
- data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
- data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
- data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
- data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
- data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
- data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
- data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
- data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
- data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
- data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
- data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
- data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
- data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
- data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
- data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
- data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
- data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
- data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
- data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
- data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
- data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
- data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
- data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
- data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
- data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
- data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
- data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
- data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
- data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
- data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
- data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
- data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
- data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
- data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
- data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
- data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
- data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
- data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
- data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
- data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
- data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
- data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
- data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
- data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
- data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
- data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
- data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
- data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
- data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
- data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
- data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
- data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
- data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
- data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
- data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
- data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
- data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
- data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
- data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
- data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
- data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
- data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
- data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
- data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
- data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
- data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
- data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
- data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
- data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
- data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
- data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
- data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
- data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
- data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
- data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
- data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
- data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
- data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
- data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
- data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
- data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
- data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
- data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
- data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
- data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
- data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
- data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
- data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
- data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
- data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
- data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
- data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
- data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
- data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
- data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
- data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
- data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
- data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
- data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
- data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
- data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
- data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
- data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
- data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
- data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
- data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
- data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
- data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
- data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
- data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
- data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
- data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
- data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
- data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
- data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
- data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
- data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
- data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
- data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
- data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
- data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
- data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
- data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
- data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
- data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
- data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
- data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
- data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
- data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
- data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
- data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
- data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
- data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
- data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
- data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
- data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
- data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
- data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
- data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
- data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
- data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
- data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
- data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
- data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
- data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
- data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
- data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
- data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
- data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
- data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
- data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
- data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
- data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
- data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
- data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
- data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
- data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
- data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
- data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
- data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
- data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
- data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
- data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
- data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
- data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
- data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
- data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
- data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
- data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
- data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
- data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
- data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
- data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
- data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
- data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
- data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
- data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
- data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
- data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
- data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
- data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
- data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
- data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
- data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
- data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
- data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
- data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
- data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
- data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
- data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
- data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
- data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
- data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
- data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
- data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
- data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
- data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
- data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
- data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
- data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
- data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
- data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
- data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
- data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
- data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
- data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
- data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
- data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
- data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
- data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
- data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
- data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
- data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
- data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
- data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
- data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
- data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
- data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
- data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
- data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
- data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
- data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
- data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
- data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
- data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
- data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
- data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
- data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
- data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
- data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
- data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
- data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
- data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
- data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
- data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
- data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
- data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
- data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
- data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
- data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
- data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
- data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
- data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
- data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
- data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
- data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
- data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
- data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
- data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
- data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
- data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
- data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
- data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
- data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
- data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
- data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
- data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
- data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
- data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
- data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
- metadata +77 -52
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
- data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
- data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
- data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
- data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
- data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
- data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
- data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
- data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
- data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
- data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
- data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
- data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
- data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
- data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
- data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
- data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
- data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
#include <list>
|
|
64
64
|
#include <map>
|
|
65
65
|
#include <memory>
|
|
66
|
+
#include <optional>
|
|
66
67
|
#include <set>
|
|
67
68
|
#include <string>
|
|
68
69
|
#include <string_view>
|
|
@@ -71,12 +72,14 @@
|
|
|
71
72
|
#include <unordered_map>
|
|
72
73
|
#include <unordered_set>
|
|
73
74
|
#include <utility>
|
|
75
|
+
#include <variant>
|
|
74
76
|
#include <vector>
|
|
75
77
|
|
|
76
78
|
#include "absl/base/attributes.h"
|
|
77
79
|
#include "absl/base/internal/endian.h"
|
|
78
80
|
#include "absl/base/internal/unaligned_access.h"
|
|
79
81
|
#include "absl/base/optimization.h"
|
|
82
|
+
#include "absl/base/options.h"
|
|
80
83
|
#include "absl/base/port.h"
|
|
81
84
|
#include "absl/container/fixed_array.h"
|
|
82
85
|
#include "absl/hash/internal/city.h"
|
|
@@ -89,10 +92,59 @@
|
|
|
89
92
|
#include "absl/types/variant.h"
|
|
90
93
|
#include "absl/utility/utility.h"
|
|
91
94
|
|
|
92
|
-
#if defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703L
|
|
95
|
+
#if defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703L && \
|
|
96
|
+
!defined(__XTENSA__)
|
|
93
97
|
#include <filesystem> // NOLINT
|
|
94
98
|
#endif
|
|
95
99
|
|
|
100
|
+
// We are allowed to use a non-portable hardware-accelerated implementation in
|
|
101
|
+
// headers if ABSL_OPTION_INLINE_HW_ACCEL_STRATEGY != 0
|
|
102
|
+
#if ABSL_OPTION_INLINE_HW_ACCEL_STRATEGY != 0
|
|
103
|
+
|
|
104
|
+
// 32-bit builds with SSE 4.2 do not have _mm_crc32_u64, so the
|
|
105
|
+
// __x86_64__ condition is necessary.
|
|
106
|
+
#if defined(__SSE4_2__) && defined(__x86_64__)
|
|
107
|
+
|
|
108
|
+
#include <x86intrin.h>
|
|
109
|
+
#define ABSL_HASH_INTERNAL_HAS_CRC32
|
|
110
|
+
#define ABSL_HASH_INTERNAL_CRC32_U64 _mm_crc32_u64
|
|
111
|
+
#define ABSL_HASH_INTERNAL_CRC32_U32 _mm_crc32_u32
|
|
112
|
+
#define ABSL_HASH_INTERNAL_CRC32_U8 _mm_crc32_u8
|
|
113
|
+
|
|
114
|
+
// 32-bit builds with AVX do not have _mm_crc32_u64, so the _M_X64 condition is
|
|
115
|
+
// necessary.
|
|
116
|
+
#elif defined(_MSC_VER) && !defined(__clang__) && defined(__AVX__) && \
|
|
117
|
+
defined(_M_X64)
|
|
118
|
+
|
|
119
|
+
// MSVC AVX (/arch:AVX) implies SSE 4.2.
|
|
120
|
+
#include <intrin.h>
|
|
121
|
+
#define ABSL_HASH_INTERNAL_HAS_CRC32
|
|
122
|
+
#define ABSL_HASH_INTERNAL_CRC32_U64 _mm_crc32_u64
|
|
123
|
+
#define ABSL_HASH_INTERNAL_CRC32_U32 _mm_crc32_u32
|
|
124
|
+
#define ABSL_HASH_INTERNAL_CRC32_U8 _mm_crc32_u8
|
|
125
|
+
|
|
126
|
+
#elif defined(__ARM_FEATURE_CRC32)
|
|
127
|
+
|
|
128
|
+
#include <arm_acle.h>
|
|
129
|
+
#define ABSL_HASH_INTERNAL_HAS_CRC32
|
|
130
|
+
// Casting to uint32_t to be consistent with x86 intrinsic (_mm_crc32_u64
|
|
131
|
+
// accepts crc as 64 bit integer).
|
|
132
|
+
#define ABSL_HASH_INTERNAL_CRC32_U64(crc, data) \
|
|
133
|
+
__crc32cd(static_cast<uint32_t>(crc), data)
|
|
134
|
+
#define ABSL_HASH_INTERNAL_CRC32_U32 __crc32cw
|
|
135
|
+
#define ABSL_HASH_INTERNAL_CRC32_U8 __crc32cb
|
|
136
|
+
|
|
137
|
+
#endif // Platform tests
|
|
138
|
+
|
|
139
|
+
#endif // ABSL_OPTION_INLINE_HW_ACCEL_STRATEGY != 0
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
#if ABSL_OPTION_INLINE_HW_ACCEL_STRATEGY == 1
|
|
143
|
+
#ifndef ABSL_HASH_INTERNAL_HAS_CRC32
|
|
144
|
+
#error "Hardware acceleration is required by ABSL_OPTION_INLINE_HW_ACCEL_STRATEGY but not supported on this platform; see absl/base/options.h"
|
|
145
|
+
#endif
|
|
146
|
+
#endif
|
|
147
|
+
|
|
96
148
|
namespace absl {
|
|
97
149
|
ABSL_NAMESPACE_BEGIN
|
|
98
150
|
|
|
@@ -104,8 +156,6 @@ namespace hash_internal {
|
|
|
104
156
|
// returns the size of these chunks.
|
|
105
157
|
constexpr size_t PiecewiseChunkSize() { return 1024; }
|
|
106
158
|
|
|
107
|
-
// PiecewiseCombiner
|
|
108
|
-
//
|
|
109
159
|
// PiecewiseCombiner is an internal-only helper class for hashing a piecewise
|
|
110
160
|
// buffer of `char` or `unsigned char` as though it were contiguous. This class
|
|
111
161
|
// provides two methods:
|
|
@@ -126,12 +176,10 @@ constexpr size_t PiecewiseChunkSize() { return 1024; }
|
|
|
126
176
|
// return combiner.finalize(std::move(state));
|
|
127
177
|
class PiecewiseCombiner {
|
|
128
178
|
public:
|
|
129
|
-
PiecewiseCombiner()
|
|
179
|
+
PiecewiseCombiner() = default;
|
|
130
180
|
PiecewiseCombiner(const PiecewiseCombiner&) = delete;
|
|
131
181
|
PiecewiseCombiner& operator=(const PiecewiseCombiner&) = delete;
|
|
132
182
|
|
|
133
|
-
// PiecewiseCombiner::add_buffer()
|
|
134
|
-
//
|
|
135
183
|
// Appends the given range of bytes to the sequence to be hashed, which may
|
|
136
184
|
// modify the provided hash state.
|
|
137
185
|
template <typename H>
|
|
@@ -142,8 +190,6 @@ class PiecewiseCombiner {
|
|
|
142
190
|
reinterpret_cast<const unsigned char*>(data), size);
|
|
143
191
|
}
|
|
144
192
|
|
|
145
|
-
// PiecewiseCombiner::finalize()
|
|
146
|
-
//
|
|
147
193
|
// Finishes combining the hash sequence, which may may modify the provided
|
|
148
194
|
// hash state.
|
|
149
195
|
//
|
|
@@ -156,21 +202,19 @@ class PiecewiseCombiner {
|
|
|
156
202
|
|
|
157
203
|
private:
|
|
158
204
|
unsigned char buf_[PiecewiseChunkSize()];
|
|
159
|
-
size_t position_;
|
|
205
|
+
size_t position_ = 0;
|
|
206
|
+
bool added_something_ = false;
|
|
160
207
|
};
|
|
161
208
|
|
|
162
|
-
// is_hashable()
|
|
163
|
-
//
|
|
164
209
|
// Trait class which returns true if T is hashable by the absl::Hash framework.
|
|
165
210
|
// Used for the AbslHashValue implementations for composite types below.
|
|
166
211
|
template <typename T>
|
|
167
212
|
struct is_hashable;
|
|
168
213
|
|
|
169
|
-
// HashStateBase
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
// a public API; users should not create classes that inherit from this.
|
|
214
|
+
// HashStateBase is an internal implementation detail that contains common
|
|
215
|
+
// implementation details for all of the "hash state objects" objects generated
|
|
216
|
+
// by Abseil. This is not a public API; users should not create classes that
|
|
217
|
+
// inherit from this.
|
|
174
218
|
//
|
|
175
219
|
// A hash state object is the template argument `H` passed to `AbslHashValue`.
|
|
176
220
|
// It represents an intermediate state in the computation of an unspecified hash
|
|
@@ -235,8 +279,6 @@ struct is_hashable;
|
|
|
235
279
|
template <typename H>
|
|
236
280
|
class HashStateBase {
|
|
237
281
|
public:
|
|
238
|
-
// HashStateBase::combine()
|
|
239
|
-
//
|
|
240
282
|
// Combines an arbitrary number of values into a hash state, returning the
|
|
241
283
|
// updated state.
|
|
242
284
|
//
|
|
@@ -256,8 +298,6 @@ class HashStateBase {
|
|
|
256
298
|
static H combine(H state, const T& value, const Ts&... values);
|
|
257
299
|
static H combine(H state) { return state; }
|
|
258
300
|
|
|
259
|
-
// HashStateBase::combine_contiguous()
|
|
260
|
-
//
|
|
261
301
|
// Combines a contiguous array of `size` elements into a hash state, returning
|
|
262
302
|
// the updated state.
|
|
263
303
|
//
|
|
@@ -297,8 +337,6 @@ class HashStateBase {
|
|
|
297
337
|
};
|
|
298
338
|
};
|
|
299
339
|
|
|
300
|
-
// is_uniquely_represented
|
|
301
|
-
//
|
|
302
340
|
// `is_uniquely_represented<T>` is a trait class that indicates whether `T`
|
|
303
341
|
// is uniquely represented.
|
|
304
342
|
//
|
|
@@ -333,8 +371,6 @@ class HashStateBase {
|
|
|
333
371
|
template <typename T, typename Enable = void>
|
|
334
372
|
struct is_uniquely_represented : std::false_type {};
|
|
335
373
|
|
|
336
|
-
// is_uniquely_represented<unsigned char>
|
|
337
|
-
//
|
|
338
374
|
// unsigned char is a synonym for "byte", so it is guaranteed to be
|
|
339
375
|
// uniquely represented.
|
|
340
376
|
template <>
|
|
@@ -349,9 +385,6 @@ struct is_uniquely_represented<
|
|
|
349
385
|
Integral, typename std::enable_if<std::is_integral<Integral>::value>::type>
|
|
350
386
|
: std::true_type {};
|
|
351
387
|
|
|
352
|
-
// is_uniquely_represented<bool>
|
|
353
|
-
//
|
|
354
|
-
//
|
|
355
388
|
template <>
|
|
356
389
|
struct is_uniquely_represented<bool> : std::false_type {};
|
|
357
390
|
|
|
@@ -373,12 +406,19 @@ struct CombineRaw {
|
|
|
373
406
|
}
|
|
374
407
|
};
|
|
375
408
|
|
|
376
|
-
//
|
|
377
|
-
|
|
409
|
+
// For use in `raw_hash_set` to pass a seed to the hash function.
|
|
410
|
+
struct HashWithSeed {
|
|
411
|
+
template <typename Hasher, typename T>
|
|
412
|
+
size_t hash(const Hasher& hasher, const T& value, size_t seed) const {
|
|
413
|
+
// NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
|
|
414
|
+
return hasher.hash_with_seed(value, seed);
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
|
|
378
418
|
// Convenience function that combines `hash_state` with the byte representation
|
|
379
419
|
// of `value`.
|
|
380
420
|
template <typename H, typename T,
|
|
381
|
-
|
|
421
|
+
std::enable_if_t<FitsIn64Bits<T>::value, int> = 0>
|
|
382
422
|
H hash_bytes(H hash_state, const T& value) {
|
|
383
423
|
const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
|
|
384
424
|
uint64_t v;
|
|
@@ -395,7 +435,7 @@ H hash_bytes(H hash_state, const T& value) {
|
|
|
395
435
|
return CombineRaw()(std::move(hash_state), v);
|
|
396
436
|
}
|
|
397
437
|
template <typename H, typename T,
|
|
398
|
-
|
|
438
|
+
std::enable_if_t<!FitsIn64Bits<T>::value, int> = 0>
|
|
399
439
|
H hash_bytes(H hash_state, const T& value) {
|
|
400
440
|
const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
|
|
401
441
|
return H::combine_contiguous(std::move(hash_state), start, sizeof(value));
|
|
@@ -422,8 +462,10 @@ H hash_weakly_mixed_integer(H hash_state, WeaklyMixedInteger value) {
|
|
|
422
462
|
template <typename H, typename B>
|
|
423
463
|
typename std::enable_if<std::is_same<B, bool>::value, H>::type AbslHashValue(
|
|
424
464
|
H hash_state, B value) {
|
|
465
|
+
// We use ~size_t{} instead of 1 so that all bits are different between
|
|
466
|
+
// true/false instead of only 1.
|
|
425
467
|
return H::combine(std::move(hash_state),
|
|
426
|
-
static_cast<
|
|
468
|
+
static_cast<size_t>(value ? ~size_t{} : 0));
|
|
427
469
|
}
|
|
428
470
|
|
|
429
471
|
// AbslHashValue() for hashing enum values
|
|
@@ -502,10 +544,10 @@ std::enable_if_t<std::is_pointer<T>::value, H> AbslHashValue(H hash_state,
|
|
|
502
544
|
T ptr) {
|
|
503
545
|
auto v = reinterpret_cast<uintptr_t>(ptr);
|
|
504
546
|
// Due to alignment, pointers tend to have low bits as zero, and the next few
|
|
505
|
-
// bits follow a pattern since they are also multiples of some base value.
|
|
506
|
-
//
|
|
507
|
-
//
|
|
508
|
-
return H::combine(std::move(hash_state), v
|
|
547
|
+
// bits follow a pattern since they are also multiples of some base value.
|
|
548
|
+
// The PointerAlignment test verifies that our mixing is good enough to handle
|
|
549
|
+
// these cases.
|
|
550
|
+
return H::combine(std::move(hash_state), v);
|
|
509
551
|
}
|
|
510
552
|
|
|
511
553
|
// AbslHashValue() for hashing nullptr_t
|
|
@@ -559,12 +601,10 @@ AbslHashValue(H hash_state, const std::pair<T1, T2>& p) {
|
|
|
559
601
|
return H::combine(std::move(hash_state), p.first, p.second);
|
|
560
602
|
}
|
|
561
603
|
|
|
562
|
-
// hash_tuple()
|
|
563
|
-
//
|
|
564
604
|
// Helper function for hashing a tuple. The third argument should
|
|
565
605
|
// be an index_sequence running from 0 to tuple_size<Tuple> - 1.
|
|
566
606
|
template <typename H, typename Tuple, size_t... Is>
|
|
567
|
-
H hash_tuple(H hash_state, const Tuple& t,
|
|
607
|
+
H hash_tuple(H hash_state, const Tuple& t, std::index_sequence<Is...>) {
|
|
568
608
|
return H::combine(std::move(hash_state), std::get<Is>(t)...);
|
|
569
609
|
}
|
|
570
610
|
|
|
@@ -575,11 +615,11 @@ template <typename H, typename... Ts>
|
|
|
575
615
|
// for now.
|
|
576
616
|
H
|
|
577
617
|
#else // _MSC_VER
|
|
578
|
-
typename std::enable_if<
|
|
618
|
+
typename std::enable_if<std::conjunction<is_hashable<Ts>...>::value, H>::type
|
|
579
619
|
#endif // _MSC_VER
|
|
580
620
|
AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
|
|
581
621
|
return hash_internal::hash_tuple(std::move(hash_state), t,
|
|
582
|
-
|
|
622
|
+
std::make_index_sequence<sizeof...(Ts)>());
|
|
583
623
|
}
|
|
584
624
|
|
|
585
625
|
// -----------------------------------------------------------------------------
|
|
@@ -619,47 +659,42 @@ H AbslHashValue(H hash_state, const std::shared_ptr<T>& ptr) {
|
|
|
619
659
|
// `eq()` member isn't equivalent to `==` on the underlying character type.
|
|
620
660
|
template <typename H>
|
|
621
661
|
H AbslHashValue(H hash_state, absl::string_view str) {
|
|
622
|
-
return H::
|
|
623
|
-
H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
|
|
624
|
-
WeaklyMixedInteger{str.size()});
|
|
662
|
+
return H::combine_contiguous(std::move(hash_state), str.data(), str.size());
|
|
625
663
|
}
|
|
626
664
|
|
|
627
665
|
// Support std::wstring, std::u16string and std::u32string.
|
|
628
666
|
template <typename Char, typename Alloc, typename H,
|
|
629
|
-
typename =
|
|
667
|
+
typename = std::enable_if_t<std::is_same<Char, wchar_t>::value ||
|
|
630
668
|
std::is_same<Char, char16_t>::value ||
|
|
631
669
|
std::is_same<Char, char32_t>::value>>
|
|
632
670
|
H AbslHashValue(
|
|
633
671
|
H hash_state,
|
|
634
672
|
const std::basic_string<Char, std::char_traits<Char>, Alloc>& str) {
|
|
635
|
-
return H::
|
|
636
|
-
H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
|
|
637
|
-
WeaklyMixedInteger{str.size()});
|
|
673
|
+
return H::combine_contiguous(std::move(hash_state), str.data(), str.size());
|
|
638
674
|
}
|
|
639
675
|
|
|
640
676
|
// Support std::wstring_view, std::u16string_view and std::u32string_view.
|
|
641
677
|
template <typename Char, typename H,
|
|
642
|
-
typename =
|
|
678
|
+
typename = std::enable_if_t<std::is_same<Char, wchar_t>::value ||
|
|
643
679
|
std::is_same<Char, char16_t>::value ||
|
|
644
680
|
std::is_same<Char, char32_t>::value>>
|
|
645
681
|
H AbslHashValue(H hash_state, std::basic_string_view<Char> str) {
|
|
646
|
-
return H::
|
|
647
|
-
H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
|
|
648
|
-
WeaklyMixedInteger{str.size()});
|
|
682
|
+
return H::combine_contiguous(std::move(hash_state), str.data(), str.size());
|
|
649
683
|
}
|
|
650
684
|
|
|
651
685
|
#if defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703L && \
|
|
652
686
|
(!defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) || \
|
|
653
687
|
__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 130000) && \
|
|
654
688
|
(!defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) || \
|
|
655
|
-
__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101500)
|
|
689
|
+
__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101500) && \
|
|
690
|
+
(!defined(__XTENSA__))
|
|
656
691
|
|
|
657
692
|
#define ABSL_INTERNAL_STD_FILESYSTEM_PATH_HASH_AVAILABLE 1
|
|
658
693
|
|
|
659
694
|
// Support std::filesystem::path. The SFINAE is required because some string
|
|
660
695
|
// types are implicitly convertible to std::filesystem::path.
|
|
661
696
|
template <typename Path, typename H,
|
|
662
|
-
typename =
|
|
697
|
+
typename = std::enable_if_t<
|
|
663
698
|
std::is_same_v<Path, std::filesystem::path>>>
|
|
664
699
|
H AbslHashValue(H hash_state, const Path& path) {
|
|
665
700
|
// This is implemented by deferring to the standard library to compute the
|
|
@@ -727,9 +762,8 @@ template <typename H, typename T, typename Allocator>
|
|
|
727
762
|
typename std::enable_if<is_hashable<T>::value && !std::is_same<T, bool>::value,
|
|
728
763
|
H>::type
|
|
729
764
|
AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
|
|
730
|
-
return H::
|
|
731
|
-
|
|
732
|
-
WeaklyMixedInteger{vector.size()});
|
|
765
|
+
return H::combine_contiguous(std::move(hash_state), vector.data(),
|
|
766
|
+
vector.size());
|
|
733
767
|
}
|
|
734
768
|
|
|
735
769
|
// AbslHashValue special cases for hashing std::vector<bool>
|
|
@@ -880,15 +914,14 @@ typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
|
|
|
880
914
|
return H::combine(std::move(hash_state), opt.get());
|
|
881
915
|
}
|
|
882
916
|
|
|
883
|
-
// AbslHashValue for hashing
|
|
917
|
+
// AbslHashValue for hashing std::optional
|
|
884
918
|
template <typename H, typename T>
|
|
885
919
|
typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
|
|
886
|
-
H hash_state, const
|
|
920
|
+
H hash_state, const std::optional<T>& opt) {
|
|
887
921
|
if (opt) hash_state = H::combine(std::move(hash_state), *opt);
|
|
888
922
|
return H::combine(std::move(hash_state), opt.has_value());
|
|
889
923
|
}
|
|
890
924
|
|
|
891
|
-
// VariantVisitor
|
|
892
925
|
template <typename H>
|
|
893
926
|
struct VariantVisitor {
|
|
894
927
|
H&& hash_state;
|
|
@@ -898,12 +931,12 @@ struct VariantVisitor {
|
|
|
898
931
|
}
|
|
899
932
|
};
|
|
900
933
|
|
|
901
|
-
// AbslHashValue for hashing
|
|
934
|
+
// AbslHashValue for hashing std::variant
|
|
902
935
|
template <typename H, typename... T>
|
|
903
|
-
typename std::enable_if<conjunction<is_hashable<T>...>::value, H>::type
|
|
904
|
-
AbslHashValue(H hash_state, const
|
|
936
|
+
typename std::enable_if<std::conjunction<is_hashable<T>...>::value, H>::type
|
|
937
|
+
AbslHashValue(H hash_state, const std::variant<T...>& v) {
|
|
905
938
|
if (!v.valueless_by_exception()) {
|
|
906
|
-
hash_state =
|
|
939
|
+
hash_state = std::visit(VariantVisitor<H>{std::move(hash_state)}, v);
|
|
907
940
|
}
|
|
908
941
|
return H::combine(std::move(hash_state), v.index());
|
|
909
942
|
}
|
|
@@ -937,8 +970,6 @@ H AbslHashValue(H hash_state, const std::bitset<N>& set) {
|
|
|
937
970
|
|
|
938
971
|
// -----------------------------------------------------------------------------
|
|
939
972
|
|
|
940
|
-
// hash_range_or_bytes()
|
|
941
|
-
//
|
|
942
973
|
// Mixes all values in the range [data, data+size) into the hash state.
|
|
943
974
|
// This overload accepts only uniquely-represented types, and hashes them by
|
|
944
975
|
// hashing the entire range of bytes.
|
|
@@ -949,25 +980,311 @@ hash_range_or_bytes(H hash_state, const T* data, size_t size) {
|
|
|
949
980
|
return H::combine_contiguous(std::move(hash_state), bytes, sizeof(T) * size);
|
|
950
981
|
}
|
|
951
982
|
|
|
952
|
-
// hash_range_or_bytes()
|
|
953
983
|
template <typename H, typename T>
|
|
954
984
|
typename std::enable_if<!is_uniquely_represented<T>::value, H>::type
|
|
955
985
|
hash_range_or_bytes(H hash_state, const T* data, size_t size) {
|
|
956
986
|
for (const auto end = data + size; data < end; ++data) {
|
|
957
987
|
hash_state = H::combine(std::move(hash_state), *data);
|
|
958
988
|
}
|
|
959
|
-
return hash_state
|
|
989
|
+
return H::combine(std::move(hash_state),
|
|
990
|
+
hash_internal::WeaklyMixedInteger{size});
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
inline constexpr uint64_t kMul = uint64_t{0x79d5f9e0de1e8cf5};
|
|
994
|
+
|
|
995
|
+
// Random data taken from the hexadecimal digits of Pi's fractional component.
|
|
996
|
+
// https://en.wikipedia.org/wiki/Nothing-up-my-sleeve_number
|
|
997
|
+
ABSL_CACHELINE_ALIGNED inline constexpr uint64_t kStaticRandomData[] = {
|
|
998
|
+
0x243f'6a88'85a3'08d3, 0x1319'8a2e'0370'7344, 0xa409'3822'299f'31d0,
|
|
999
|
+
0x082e'fa98'ec4e'6c89, 0x4528'21e6'38d0'1377,
|
|
1000
|
+
};
|
|
1001
|
+
|
|
1002
|
+
// Extremely weak mixture of length that is mixed into the state before
|
|
1003
|
+
// combining the data. It is used only for small strings. This also ensures that
|
|
1004
|
+
// we have high entropy in all bits of the state.
|
|
1005
|
+
inline uint64_t PrecombineLengthMix(uint64_t state, size_t len) {
|
|
1006
|
+
ABSL_ASSUME(len + sizeof(uint64_t) <= sizeof(kStaticRandomData));
|
|
1007
|
+
uint64_t data = absl::base_internal::UnalignedLoad64(
|
|
1008
|
+
reinterpret_cast<const unsigned char*>(&kStaticRandomData[0]) + len);
|
|
1009
|
+
return state ^ data;
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE inline uint64_t Mix(uint64_t lhs, uint64_t rhs) {
|
|
1013
|
+
// Though the 128-bit product needs multiple instructions on non-x86-64
|
|
1014
|
+
// platforms, it is still a good balance between speed and hash quality.
|
|
1015
|
+
absl::uint128 m = lhs;
|
|
1016
|
+
m *= rhs;
|
|
1017
|
+
return Uint128High64(m) ^ Uint128Low64(m);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
// Suppress erroneous array bounds errors on GCC.
|
|
1021
|
+
#if defined(__GNUC__) && !defined(__clang__)
|
|
1022
|
+
#pragma GCC diagnostic push
|
|
1023
|
+
#pragma GCC diagnostic ignored "-Warray-bounds"
|
|
1024
|
+
#endif
|
|
1025
|
+
inline uint32_t Read4(const unsigned char* p) {
|
|
1026
|
+
return absl::base_internal::UnalignedLoad32(p);
|
|
1027
|
+
}
|
|
1028
|
+
inline uint64_t Read8(const unsigned char* p) {
|
|
1029
|
+
return absl::base_internal::UnalignedLoad64(p);
|
|
1030
|
+
}
|
|
1031
|
+
#if defined(__GNUC__) && !defined(__clang__)
|
|
1032
|
+
#pragma GCC diagnostic pop
|
|
1033
|
+
#endif
|
|
1034
|
+
|
|
1035
|
+
// Reads 9 to 16 bytes from p.
|
|
1036
|
+
// The first 8 bytes are in .first, and the rest of the bytes are in .second
|
|
1037
|
+
// along with duplicated bytes from .first if len<16.
|
|
1038
|
+
inline std::pair<uint64_t, uint64_t> Read9To16(const unsigned char* p,
|
|
1039
|
+
size_t len) {
|
|
1040
|
+
return {Read8(p), Read8(p + len - 8)};
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// Reads 4 to 8 bytes from p.
|
|
1044
|
+
// Bytes are permuted and some input bytes may be duplicated in output.
|
|
1045
|
+
inline uint64_t Read4To8(const unsigned char* p, size_t len) {
|
|
1046
|
+
// If `len < 8`, we duplicate bytes. We always put low memory at the end.
|
|
1047
|
+
// E.g., on little endian platforms:
|
|
1048
|
+
// `ABCD` will be read as `ABCDABCD`.
|
|
1049
|
+
// `ABCDE` will be read as `BCDEABCD`.
|
|
1050
|
+
// `ABCDEF` will be read as `CDEFABCD`.
|
|
1051
|
+
// `ABCDEFG` will be read as `DEFGABCD`.
|
|
1052
|
+
// `ABCDEFGH` will be read as `EFGHABCD`.
|
|
1053
|
+
// We also do not care about endianness. On big-endian platforms, bytes will
|
|
1054
|
+
// be permuted differently. We always shift low memory by 32, because that
|
|
1055
|
+
// can be pipelined earlier. Reading high memory requires computing
|
|
1056
|
+
// `p + len - 4`.
|
|
1057
|
+
uint64_t most_significant =
|
|
1058
|
+
static_cast<uint64_t>(absl::base_internal::UnalignedLoad32(p)) << 32;
|
|
1059
|
+
uint64_t least_significant =
|
|
1060
|
+
absl::base_internal::UnalignedLoad32(p + len - 4);
|
|
1061
|
+
return most_significant | least_significant;
|
|
960
1062
|
}
|
|
961
1063
|
|
|
962
|
-
|
|
963
|
-
|
|
1064
|
+
// Reads 1 to 3 bytes from p. Some input bytes may be duplicated in output.
|
|
1065
|
+
inline uint32_t Read1To3(const unsigned char* p, size_t len) {
|
|
1066
|
+
// The trick used by this implementation is to avoid branches.
|
|
1067
|
+
// We always read three bytes by duplicating.
|
|
1068
|
+
// E.g.,
|
|
1069
|
+
// `A` is read as `AAA`.
|
|
1070
|
+
// `AB` is read as `ABB`.
|
|
1071
|
+
// `ABC` is read as `ABC`.
|
|
1072
|
+
// We always shift `p[0]` so that it can be pipelined better.
|
|
1073
|
+
// Other bytes require extra computation to find indices.
|
|
1074
|
+
uint32_t mem0 = (static_cast<uint32_t>(p[0]) << 16) | p[len - 1];
|
|
1075
|
+
uint32_t mem1 = static_cast<uint32_t>(p[len / 2]) << 8;
|
|
1076
|
+
return mem0 | mem1;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
#ifdef ABSL_HASH_INTERNAL_HAS_CRC32
|
|
1080
|
+
|
|
1081
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE inline uint64_t CombineRawImpl(uint64_t state,
|
|
1082
|
+
uint64_t value) {
|
|
1083
|
+
// We use a union to access the high and low 32 bits of the state.
|
|
1084
|
+
union {
|
|
1085
|
+
uint64_t u64;
|
|
1086
|
+
struct {
|
|
1087
|
+
#ifdef ABSL_IS_LITTLE_ENDIAN
|
|
1088
|
+
uint32_t low, high;
|
|
1089
|
+
#else // big endian
|
|
1090
|
+
uint32_t high, low;
|
|
1091
|
+
#endif
|
|
1092
|
+
} u32s;
|
|
1093
|
+
} s;
|
|
1094
|
+
s.u64 = state;
|
|
1095
|
+
// The general idea here is to do two CRC32 operations in parallel using the
|
|
1096
|
+
// low and high 32 bits of state as CRC states. Note that: (1) when absl::Hash
|
|
1097
|
+
// is inlined into swisstable lookups, we know that the seed's high bits are
|
|
1098
|
+
// zero so s.u32s.high is available immediately. (2) We chose to multiply
|
|
1099
|
+
// value by 3 for the low CRC because (a) multiplication by 3 can be done in 1
|
|
1100
|
+
// cycle on x86/ARM and (b) multiplication has carry bits so it's nonlinear in
|
|
1101
|
+
// GF(2) and therefore ensures that the two CRCs are independent (unlike bit
|
|
1102
|
+
// rotation, XOR, etc). (3) We also tried using addition instead of
|
|
1103
|
+
// multiplication by 3, but (a) code size is larger and (b) if the input keys
|
|
1104
|
+
// all have 0s in the bits where the addition constant has 1s, then the
|
|
1105
|
+
// addition is equivalent to XOR and linear in GF(2). (4) The union makes it
|
|
1106
|
+
// easy for the compiler to understand that the high and low CRC states are
|
|
1107
|
+
// independent from each other so that when CombineRawImpl is repeated (e.g.
|
|
1108
|
+
// for std::pair<size_t, size_t>), the CRC chains can run in parallel. We
|
|
1109
|
+
// originally tried using bswaps rather than shifting by 32 bits (to get from
|
|
1110
|
+
// high to low bits) because bswap is one byte smaller in code size, but the
|
|
1111
|
+
// compiler couldn't understand that the CRC chains were independent.
|
|
1112
|
+
s.u32s.high =
|
|
1113
|
+
static_cast<uint32_t>(ABSL_HASH_INTERNAL_CRC32_U64(s.u32s.high, value));
|
|
1114
|
+
s.u32s.low = static_cast<uint32_t>(
|
|
1115
|
+
ABSL_HASH_INTERNAL_CRC32_U64(s.u32s.low, 3 * value));
|
|
1116
|
+
return s.u64;
|
|
1117
|
+
}
|
|
1118
|
+
#else // ABSL_HASH_INTERNAL_HAS_CRC32
|
|
1119
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE inline uint64_t CombineRawImpl(uint64_t state,
|
|
1120
|
+
uint64_t value) {
|
|
1121
|
+
return Mix(state ^ value, kMul);
|
|
1122
|
+
}
|
|
1123
|
+
#endif // ABSL_HASH_INTERNAL_HAS_CRC32
|
|
1124
|
+
|
|
1125
|
+
// Slow dispatch path for calls to CombineContiguousImpl with a size argument
|
|
1126
|
+
// larger than inlined size. Has the same effect as calling
|
|
1127
|
+
// CombineContiguousImpl() repeatedly with the chunk stride size.
|
|
1128
|
+
uint64_t CombineLargeContiguousImplOn32BitLengthGt8(uint64_t state,
|
|
1129
|
+
const unsigned char* first,
|
|
1130
|
+
size_t len);
|
|
1131
|
+
uint64_t CombineLargeContiguousImplOn64BitLengthGt32(uint64_t state,
|
|
1132
|
+
const unsigned char* first,
|
|
1133
|
+
size_t len);
|
|
1134
|
+
|
|
1135
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE inline uint64_t CombineSmallContiguousImpl(
|
|
1136
|
+
uint64_t state, const unsigned char* first, size_t len) {
|
|
1137
|
+
ABSL_ASSUME(len <= 8);
|
|
1138
|
+
uint64_t v;
|
|
1139
|
+
if (len >= 4) {
|
|
1140
|
+
v = Read4To8(first, len);
|
|
1141
|
+
} else if (len > 0) {
|
|
1142
|
+
v = Read1To3(first, len);
|
|
1143
|
+
} else {
|
|
1144
|
+
// Empty string must modify the state.
|
|
1145
|
+
v = 0x57;
|
|
1146
|
+
}
|
|
1147
|
+
return CombineRawImpl(state, v);
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE inline uint64_t CombineContiguousImpl9to16(
|
|
1151
|
+
uint64_t state, const unsigned char* first, size_t len) {
|
|
1152
|
+
ABSL_ASSUME(len >= 9);
|
|
1153
|
+
ABSL_ASSUME(len <= 16);
|
|
1154
|
+
// Note: any time one half of the mix function becomes zero it will fail to
|
|
1155
|
+
// incorporate any bits from the other half. However, there is exactly 1 in
|
|
1156
|
+
// 2^64 values for each side that achieve this, and only when the size is
|
|
1157
|
+
// exactly 16 -- for smaller sizes there is an overlapping byte that makes
|
|
1158
|
+
// this impossible unless the seed is *also* incredibly unlucky.
|
|
1159
|
+
auto p = Read9To16(first, len);
|
|
1160
|
+
return Mix(state ^ p.first, kMul ^ p.second);
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE inline uint64_t CombineContiguousImpl17to32(
|
|
1164
|
+
uint64_t state, const unsigned char* first, size_t len) {
|
|
1165
|
+
ABSL_ASSUME(len >= 17);
|
|
1166
|
+
ABSL_ASSUME(len <= 32);
|
|
1167
|
+
// Do two mixes of overlapping 16-byte ranges in parallel to minimize
|
|
1168
|
+
// latency.
|
|
1169
|
+
const uint64_t m0 =
|
|
1170
|
+
Mix(Read8(first) ^ kStaticRandomData[1], Read8(first + 8) ^ state);
|
|
1171
|
+
|
|
1172
|
+
const unsigned char* tail_16b_ptr = first + (len - 16);
|
|
1173
|
+
const uint64_t m1 = Mix(Read8(tail_16b_ptr) ^ kStaticRandomData[3],
|
|
1174
|
+
Read8(tail_16b_ptr + 8) ^ state);
|
|
1175
|
+
return m0 ^ m1;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
// Implementation of the base case for combine_contiguous where we actually
|
|
1179
|
+
// mix the bytes into the state.
|
|
1180
|
+
// Dispatch to different implementations of combine_contiguous depending
|
|
1181
|
+
// on the value of `sizeof(size_t)`.
|
|
1182
|
+
inline uint64_t CombineContiguousImpl(
|
|
1183
|
+
uint64_t state, const unsigned char* first, size_t len,
|
|
1184
|
+
std::integral_constant<int, 4> /* sizeof_size_t */) {
|
|
1185
|
+
// For large values we use CityHash, for small ones we use custom low latency
|
|
1186
|
+
// hash.
|
|
1187
|
+
if (len <= 8) {
|
|
1188
|
+
return CombineSmallContiguousImpl(PrecombineLengthMix(state, len), first,
|
|
1189
|
+
len);
|
|
1190
|
+
}
|
|
1191
|
+
return CombineLargeContiguousImplOn32BitLengthGt8(state, first, len);
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
#ifdef ABSL_HASH_INTERNAL_HAS_CRC32
|
|
1195
|
+
inline uint64_t CombineContiguousImpl(
|
|
1196
|
+
uint64_t state, const unsigned char* first, size_t len,
|
|
1197
|
+
std::integral_constant<int, 8> /* sizeof_size_t */) {
|
|
1198
|
+
if (ABSL_PREDICT_FALSE(len > 32)) {
|
|
1199
|
+
return CombineLargeContiguousImplOn64BitLengthGt32(state, first, len);
|
|
1200
|
+
}
|
|
1201
|
+
// `mul` is the salt that is used for final mixing. It is important to fill
|
|
1202
|
+
// high 32 bits because CRC wipes out high 32 bits.
|
|
1203
|
+
// `rotr` is important to mix `len` into high 32 bits.
|
|
1204
|
+
uint64_t mul = absl::rotr(kMul, static_cast<int>(len));
|
|
1205
|
+
// Only low 32 bits of each uint64_t are used in CRC32 so we use gbswap_64 to
|
|
1206
|
+
// move high 32 bits to low 32 bits. It has slightly smaller binary size than
|
|
1207
|
+
// `>> 32`. `state + 8 * len` is a single instruction on both x86 and ARM, so
|
|
1208
|
+
// we use it to better mix length. Although only the low 32 bits of the pair
|
|
1209
|
+
// elements are used, we use pair<uint64_t, uint64_t> for better generated
|
|
1210
|
+
// code.
|
|
1211
|
+
std::pair<uint64_t, uint64_t> crcs = {state + 8 * len,
|
|
1212
|
+
absl::gbswap_64(state)};
|
|
1213
|
+
|
|
1214
|
+
// All CRC operations here directly read bytes from the memory.
|
|
1215
|
+
// Single fused instructions are used, like `crc32 rcx, qword ptr [rsi]`.
|
|
1216
|
+
// On x86, llvm-mca reports latency `R + 2` for such fused instructions, while
|
|
1217
|
+
// `R + 3` for two separate `mov` + `crc` instructions. `R` is the latency of
|
|
1218
|
+
// reading the memory. Fused instructions also reduce register pressure
|
|
1219
|
+
// allowing surrounding code to be more efficient when this code is inlined.
|
|
1220
|
+
if (len > 8) {
|
|
1221
|
+
crcs = {ABSL_HASH_INTERNAL_CRC32_U64(crcs.first, Read8(first)),
|
|
1222
|
+
ABSL_HASH_INTERNAL_CRC32_U64(crcs.second, Read8(first + len - 8))};
|
|
1223
|
+
if (len > 16) {
|
|
1224
|
+
// We compute the second round of dependent CRC32 operations.
|
|
1225
|
+
crcs = {ABSL_HASH_INTERNAL_CRC32_U64(crcs.first, Read8(first + len - 16)),
|
|
1226
|
+
ABSL_HASH_INTERNAL_CRC32_U64(crcs.second, Read8(first + 8))};
|
|
1227
|
+
}
|
|
1228
|
+
} else {
|
|
1229
|
+
if (len >= 4) {
|
|
1230
|
+
// We use CRC for 4 bytes to benefit from the fused instruction and better
|
|
1231
|
+
// hash quality.
|
|
1232
|
+
// Using `xor` or `add` may reduce latency for this case, but would
|
|
1233
|
+
// require more registers, more instructions and will have worse hash
|
|
1234
|
+
// quality.
|
|
1235
|
+
crcs = {ABSL_HASH_INTERNAL_CRC32_U32(static_cast<uint32_t>(crcs.first),
|
|
1236
|
+
Read4(first)),
|
|
1237
|
+
ABSL_HASH_INTERNAL_CRC32_U32(static_cast<uint32_t>(crcs.second),
|
|
1238
|
+
Read4(first + len - 4))};
|
|
1239
|
+
} else if (len >= 1) {
|
|
1240
|
+
// We mix three bytes all into different output registers.
|
|
1241
|
+
// This way, we do not need shifting of these bytes (so they don't overlap
|
|
1242
|
+
// with each other).
|
|
1243
|
+
crcs = {ABSL_HASH_INTERNAL_CRC32_U8(static_cast<uint32_t>(crcs.first),
|
|
1244
|
+
first[0]),
|
|
1245
|
+
ABSL_HASH_INTERNAL_CRC32_U8(static_cast<uint32_t>(crcs.second),
|
|
1246
|
+
first[len - 1])};
|
|
1247
|
+
// Middle byte is mixed weaker. It is a new byte only for len == 3.
|
|
1248
|
+
// Mixing is independent from CRC operations so it is scheduled ASAP.
|
|
1249
|
+
mul += first[len / 2];
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
// `mul` is mixed into both sides of `Mix` to guarantee non-zero values for
|
|
1253
|
+
// both multiplicands. Using Mix instead of just multiplication here improves
|
|
1254
|
+
// hash quality, especially for short strings.
|
|
1255
|
+
return Mix(mul - crcs.first, crcs.second - mul);
|
|
1256
|
+
}
|
|
1257
|
+
#else
|
|
1258
|
+
inline uint64_t CombineContiguousImpl(
|
|
1259
|
+
uint64_t state, const unsigned char* first, size_t len,
|
|
1260
|
+
std::integral_constant<int, 8> /* sizeof_size_t */) {
|
|
1261
|
+
// For large values we use LowLevelHash or CityHash depending on the platform,
|
|
1262
|
+
// for small ones we use custom low latency hash.
|
|
1263
|
+
if (len <= 8) {
|
|
1264
|
+
return CombineSmallContiguousImpl(PrecombineLengthMix(state, len), first,
|
|
1265
|
+
len);
|
|
1266
|
+
}
|
|
1267
|
+
if (len <= 16) {
|
|
1268
|
+
return CombineContiguousImpl9to16(PrecombineLengthMix(state, len), first,
|
|
1269
|
+
len);
|
|
1270
|
+
}
|
|
1271
|
+
if (len <= 32) {
|
|
1272
|
+
return CombineContiguousImpl17to32(PrecombineLengthMix(state, len), first,
|
|
1273
|
+
len);
|
|
1274
|
+
}
|
|
1275
|
+
// We must not mix length into the state here because calling
|
|
1276
|
+
// CombineContiguousImpl twice with PiecewiseChunkSize() must be equivalent
|
|
1277
|
+
// to calling CombineLargeContiguousImpl once with 2 * PiecewiseChunkSize().
|
|
1278
|
+
return CombineLargeContiguousImplOn64BitLengthGt32(state, first, len);
|
|
1279
|
+
}
|
|
1280
|
+
#endif // ABSL_HASH_INTERNAL_HAS_CRC32
|
|
1281
|
+
|
|
1282
|
+
#if defined(ABSL_INTERNAL_LEGACY_HASH_NAMESPACE)
|
|
964
1283
|
#define ABSL_HASH_INTERNAL_SUPPORT_LEGACY_HASH_ 1
|
|
965
1284
|
#else
|
|
966
1285
|
#define ABSL_HASH_INTERNAL_SUPPORT_LEGACY_HASH_ 0
|
|
967
1286
|
#endif
|
|
968
1287
|
|
|
969
|
-
// HashSelect
|
|
970
|
-
//
|
|
971
1288
|
// Type trait to select the appropriate hash implementation to use.
|
|
972
1289
|
// HashSelect::type<T> will give the proper hash implementation, to be invoked
|
|
973
1290
|
// as:
|
|
@@ -996,14 +1313,14 @@ struct HashSelect {
|
|
|
996
1313
|
struct UniquelyRepresentedProbe {
|
|
997
1314
|
template <typename H, typename T>
|
|
998
1315
|
static auto Invoke(H state, const T& value)
|
|
999
|
-
->
|
|
1316
|
+
-> std::enable_if_t<is_uniquely_represented<T>::value, H> {
|
|
1000
1317
|
return hash_internal::hash_bytes(std::move(state), value);
|
|
1001
1318
|
}
|
|
1002
1319
|
};
|
|
1003
1320
|
|
|
1004
1321
|
struct HashValueProbe {
|
|
1005
1322
|
template <typename H, typename T>
|
|
1006
|
-
static auto Invoke(H state, const T& value) ->
|
|
1323
|
+
static auto Invoke(H state, const T& value) -> std::enable_if_t<
|
|
1007
1324
|
std::is_same<H,
|
|
1008
1325
|
decltype(AbslHashValue(std::move(state), value))>::value,
|
|
1009
1326
|
H> {
|
|
@@ -1014,7 +1331,7 @@ struct HashSelect {
|
|
|
1014
1331
|
struct LegacyHashProbe {
|
|
1015
1332
|
#if ABSL_HASH_INTERNAL_SUPPORT_LEGACY_HASH_
|
|
1016
1333
|
template <typename H, typename T>
|
|
1017
|
-
static auto Invoke(H state, const T& value) ->
|
|
1334
|
+
static auto Invoke(H state, const T& value) -> std::enable_if_t<
|
|
1018
1335
|
std::is_convertible<
|
|
1019
1336
|
decltype(ABSL_INTERNAL_LEGACY_HASH_NAMESPACE::hash<T>()(value)),
|
|
1020
1337
|
size_t>::value,
|
|
@@ -1029,7 +1346,7 @@ struct HashSelect {
|
|
|
1029
1346
|
struct StdHashProbe {
|
|
1030
1347
|
template <typename H, typename T>
|
|
1031
1348
|
static auto Invoke(H state, const T& value)
|
|
1032
|
-
->
|
|
1349
|
+
-> std::enable_if_t<type_traits_internal::IsHashable<T>::value, H> {
|
|
1033
1350
|
return hash_internal::hash_bytes(std::move(state), std::hash<T>{}(value));
|
|
1034
1351
|
}
|
|
1035
1352
|
};
|
|
@@ -1051,7 +1368,7 @@ struct HashSelect {
|
|
|
1051
1368
|
// Probe each implementation in order.
|
|
1052
1369
|
// disjunction provides short circuiting wrt instantiation.
|
|
1053
1370
|
template <typename T>
|
|
1054
|
-
using Apply =
|
|
1371
|
+
using Apply = std::disjunction< //
|
|
1055
1372
|
Probe<WeaklyMixedIntegerProbe, T>, //
|
|
1056
1373
|
Probe<UniquelyRepresentedProbe, T>, //
|
|
1057
1374
|
Probe<HashValueProbe, T>, //
|
|
@@ -1064,38 +1381,17 @@ template <typename T>
|
|
|
1064
1381
|
struct is_hashable
|
|
1065
1382
|
: std::integral_constant<bool, HashSelect::template Apply<T>::value> {};
|
|
1066
1383
|
|
|
1067
|
-
// MixingHashState
|
|
1068
1384
|
class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1069
|
-
// absl::uint128 is not an alias or a thin wrapper around the intrinsic.
|
|
1070
|
-
// We use the intrinsic when available to improve performance.
|
|
1071
|
-
#ifdef ABSL_HAVE_INTRINSIC_INT128
|
|
1072
|
-
using uint128 = __uint128_t;
|
|
1073
|
-
#else // ABSL_HAVE_INTRINSIC_INT128
|
|
1074
|
-
using uint128 = absl::uint128;
|
|
1075
|
-
#endif // ABSL_HAVE_INTRINSIC_INT128
|
|
1076
|
-
|
|
1077
|
-
// Random data taken from the hexadecimal digits of Pi's fractional component.
|
|
1078
|
-
// https://en.wikipedia.org/wiki/Nothing-up-my-sleeve_number
|
|
1079
|
-
ABSL_CACHELINE_ALIGNED static constexpr uint64_t kStaticRandomData[] = {
|
|
1080
|
-
0x243f'6a88'85a3'08d3, 0x1319'8a2e'0370'7344, 0xa409'3822'299f'31d0,
|
|
1081
|
-
0x082e'fa98'ec4e'6c89, 0x4528'21e6'38d0'1377,
|
|
1082
|
-
};
|
|
1083
|
-
|
|
1084
|
-
static constexpr uint64_t kMul =
|
|
1085
|
-
uint64_t{0xdcb22ca68cb134ed};
|
|
1086
|
-
|
|
1087
1385
|
template <typename T>
|
|
1088
1386
|
using IntegralFastPath =
|
|
1089
|
-
conjunction<std::is_integral<T>, is_uniquely_represented<T>,
|
|
1090
|
-
|
|
1387
|
+
std::conjunction<std::is_integral<T>, is_uniquely_represented<T>,
|
|
1388
|
+
FitsIn64Bits<T>>;
|
|
1091
1389
|
|
|
1092
1390
|
public:
|
|
1093
1391
|
// Move only
|
|
1094
1392
|
MixingHashState(MixingHashState&&) = default;
|
|
1095
1393
|
MixingHashState& operator=(MixingHashState&&) = default;
|
|
1096
1394
|
|
|
1097
|
-
// MixingHashState::combine_contiguous()
|
|
1098
|
-
//
|
|
1099
1395
|
// Fundamental base case for hash recursion: mixes the given range of bytes
|
|
1100
1396
|
// into the hash state.
|
|
1101
1397
|
static MixingHashState combine_contiguous(MixingHashState hash_state,
|
|
@@ -1107,34 +1403,59 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
|
1107
1403
|
}
|
|
1108
1404
|
using MixingHashState::HashStateBase::combine_contiguous;
|
|
1109
1405
|
|
|
1110
|
-
|
|
1111
|
-
|
|
1406
|
+
template <typename T>
|
|
1407
|
+
static size_t hash(const T& value) {
|
|
1408
|
+
return hash_with_seed(value, Seed());
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1112
1411
|
// For performance reasons in non-opt mode, we specialize this for
|
|
1113
1412
|
// integral types.
|
|
1114
1413
|
// Otherwise we would be instantiating and calling dozens of functions for
|
|
1115
1414
|
// something that is just one multiplication and a couple xor's.
|
|
1116
1415
|
// The result should be the same as running the whole algorithm, but faster.
|
|
1117
|
-
template <typename T,
|
|
1118
|
-
static size_t
|
|
1416
|
+
template <typename T, std::enable_if_t<IntegralFastPath<T>::value, int> = 0>
|
|
1417
|
+
static size_t hash_with_seed(T value, size_t seed) {
|
|
1119
1418
|
return static_cast<size_t>(
|
|
1120
|
-
|
|
1419
|
+
CombineRawImpl(seed, static_cast<std::make_unsigned_t<T>>(value)));
|
|
1121
1420
|
}
|
|
1122
1421
|
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
return static_cast<size_t>(combine(MixingHashState{}, value).state_);
|
|
1422
|
+
template <typename T, std::enable_if_t<!IntegralFastPath<T>::value, int> = 0>
|
|
1423
|
+
static size_t hash_with_seed(const T& value, size_t seed) {
|
|
1424
|
+
return static_cast<size_t>(combine(MixingHashState{seed}, value).state_);
|
|
1127
1425
|
}
|
|
1128
1426
|
|
|
1129
1427
|
private:
|
|
1130
|
-
// Invoked only once for a given argument; that plus the fact that this is
|
|
1131
|
-
// move-only ensures that there is only one non-moved-from object.
|
|
1132
|
-
MixingHashState() : state_(Seed()) {}
|
|
1133
|
-
|
|
1134
1428
|
friend class MixingHashState::HashStateBase;
|
|
1135
1429
|
template <typename H>
|
|
1136
1430
|
friend H absl::hash_internal::hash_weakly_mixed_integer(H,
|
|
1137
1431
|
WeaklyMixedInteger);
|
|
1432
|
+
// Allow the HashState type-erasure implementation to invoke
|
|
1433
|
+
// RunCombinedUnordered() directly.
|
|
1434
|
+
friend class absl::HashState;
|
|
1435
|
+
friend struct CombineRaw;
|
|
1436
|
+
|
|
1437
|
+
// For use in Seed().
|
|
1438
|
+
static const void* const kSeed;
|
|
1439
|
+
|
|
1440
|
+
// Invoked only once for a given argument; that plus the fact that this is
|
|
1441
|
+
// move-only ensures that there is only one non-moved-from object.
|
|
1442
|
+
MixingHashState() : state_(Seed()) {}
|
|
1443
|
+
|
|
1444
|
+
// Workaround for MSVC bug.
|
|
1445
|
+
// We make the type copyable to fix the calling convention, even though we
|
|
1446
|
+
// never actually copy it. Keep it private to not affect the public API of the
|
|
1447
|
+
// type.
|
|
1448
|
+
MixingHashState(const MixingHashState&) = default;
|
|
1449
|
+
|
|
1450
|
+
explicit MixingHashState(uint64_t state) : state_(state) {}
|
|
1451
|
+
|
|
1452
|
+
// Combines a raw value from e.g. integrals/floats/pointers/etc. This allows
|
|
1453
|
+
// us to be consistent with IntegralFastPath when combining raw types, but
|
|
1454
|
+
// optimize Read1To3 and Read4To8 differently for the string case.
|
|
1455
|
+
static MixingHashState combine_raw(MixingHashState hash_state,
|
|
1456
|
+
uint64_t value) {
|
|
1457
|
+
return MixingHashState(CombineRawImpl(hash_state.state_, value));
|
|
1458
|
+
}
|
|
1138
1459
|
|
|
1139
1460
|
static MixingHashState combine_weakly_mixed_integer(
|
|
1140
1461
|
MixingHashState hash_state, WeaklyMixedInteger value) {
|
|
@@ -1164,195 +1485,6 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
|
1164
1485
|
return MixingHashState::combine(std::move(state), unordered_state);
|
|
1165
1486
|
}
|
|
1166
1487
|
|
|
1167
|
-
// Allow the HashState type-erasure implementation to invoke
|
|
1168
|
-
// RunCombinedUnordered() directly.
|
|
1169
|
-
friend class absl::HashState;
|
|
1170
|
-
friend struct CombineRaw;
|
|
1171
|
-
|
|
1172
|
-
// Workaround for MSVC bug.
|
|
1173
|
-
// We make the type copyable to fix the calling convention, even though we
|
|
1174
|
-
// never actually copy it. Keep it private to not affect the public API of the
|
|
1175
|
-
// type.
|
|
1176
|
-
MixingHashState(const MixingHashState&) = default;
|
|
1177
|
-
|
|
1178
|
-
explicit MixingHashState(uint64_t state) : state_(state) {}
|
|
1179
|
-
|
|
1180
|
-
// Combines a raw value from e.g. integrals/floats/pointers/etc. This allows
|
|
1181
|
-
// us to be consistent with IntegralFastPath when combining raw types, but
|
|
1182
|
-
// optimize Read1To3 and Read4To8 differently for the string case.
|
|
1183
|
-
static MixingHashState combine_raw(MixingHashState hash_state,
|
|
1184
|
-
uint64_t value) {
|
|
1185
|
-
return MixingHashState(WeakMix(hash_state.state_, value));
|
|
1186
|
-
}
|
|
1187
|
-
|
|
1188
|
-
// Implementation of the base case for combine_contiguous where we actually
|
|
1189
|
-
// mix the bytes into the state.
|
|
1190
|
-
// Dispatch to different implementations of the combine_contiguous depending
|
|
1191
|
-
// on the value of `sizeof(size_t)`.
|
|
1192
|
-
static uint64_t CombineContiguousImpl(uint64_t state,
|
|
1193
|
-
const unsigned char* first, size_t len,
|
|
1194
|
-
std::integral_constant<int, 4>
|
|
1195
|
-
/* sizeof_size_t */);
|
|
1196
|
-
static uint64_t CombineContiguousImpl(uint64_t state,
|
|
1197
|
-
const unsigned char* first, size_t len,
|
|
1198
|
-
std::integral_constant<int, 8>
|
|
1199
|
-
/* sizeof_size_t */);
|
|
1200
|
-
|
|
1201
|
-
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t CombineSmallContiguousImpl(
|
|
1202
|
-
uint64_t state, const unsigned char* first, size_t len) {
|
|
1203
|
-
ABSL_ASSUME(len <= 8);
|
|
1204
|
-
uint64_t v;
|
|
1205
|
-
if (len >= 4) {
|
|
1206
|
-
v = Read4To8(first, len);
|
|
1207
|
-
} else if (len > 0) {
|
|
1208
|
-
v = Read1To3(first, len);
|
|
1209
|
-
} else {
|
|
1210
|
-
// Empty ranges have no effect.
|
|
1211
|
-
return state;
|
|
1212
|
-
}
|
|
1213
|
-
return WeakMix(state, v);
|
|
1214
|
-
}
|
|
1215
|
-
|
|
1216
|
-
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t CombineContiguousImpl9to16(
|
|
1217
|
-
uint64_t state, const unsigned char* first, size_t len) {
|
|
1218
|
-
ABSL_ASSUME(len >= 9);
|
|
1219
|
-
ABSL_ASSUME(len <= 16);
|
|
1220
|
-
// Note: any time one half of the mix function becomes zero it will fail to
|
|
1221
|
-
// incorporate any bits from the other half. However, there is exactly 1 in
|
|
1222
|
-
// 2^64 values for each side that achieve this, and only when the size is
|
|
1223
|
-
// exactly 16 -- for smaller sizes there is an overlapping byte that makes
|
|
1224
|
-
// this impossible unless the seed is *also* incredibly unlucky.
|
|
1225
|
-
auto p = Read9To16(first, len);
|
|
1226
|
-
return Mix(state ^ p.first, kMul ^ p.second);
|
|
1227
|
-
}
|
|
1228
|
-
|
|
1229
|
-
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t CombineContiguousImpl17to32(
|
|
1230
|
-
uint64_t state, const unsigned char* first, size_t len) {
|
|
1231
|
-
ABSL_ASSUME(len >= 17);
|
|
1232
|
-
ABSL_ASSUME(len <= 32);
|
|
1233
|
-
// Do two mixes of overlapping 16-byte ranges in parallel to minimize
|
|
1234
|
-
// latency.
|
|
1235
|
-
const uint64_t m0 =
|
|
1236
|
-
Mix(Read8(first) ^ kStaticRandomData[1], Read8(first + 8) ^ state);
|
|
1237
|
-
|
|
1238
|
-
const unsigned char* tail_16b_ptr = first + (len - 16);
|
|
1239
|
-
const uint64_t m1 = Mix(Read8(tail_16b_ptr) ^ kStaticRandomData[3],
|
|
1240
|
-
Read8(tail_16b_ptr + 8) ^ state);
|
|
1241
|
-
return m0 ^ m1;
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
|
-
// Slow dispatch path for calls to CombineContiguousImpl with a size argument
|
|
1245
|
-
// larger than PiecewiseChunkSize(). Has the same effect as calling
|
|
1246
|
-
// CombineContiguousImpl() repeatedly with the chunk stride size.
|
|
1247
|
-
static uint64_t CombineLargeContiguousImpl32(uint64_t state,
|
|
1248
|
-
const unsigned char* first,
|
|
1249
|
-
size_t len);
|
|
1250
|
-
static uint64_t CombineLargeContiguousImpl64(uint64_t state,
|
|
1251
|
-
const unsigned char* first,
|
|
1252
|
-
size_t len);
|
|
1253
|
-
|
|
1254
|
-
// Reads 9 to 16 bytes from p.
|
|
1255
|
-
// The least significant 8 bytes are in .first, and the rest of the bytes are
|
|
1256
|
-
// in .second along with duplicated bytes from .first if len<16.
|
|
1257
|
-
static std::pair<uint64_t, uint64_t> Read9To16(const unsigned char* p,
|
|
1258
|
-
size_t len) {
|
|
1259
|
-
uint64_t low_mem = Read8(p);
|
|
1260
|
-
uint64_t high_mem = Read8(p + len - 8);
|
|
1261
|
-
#ifdef ABSL_IS_LITTLE_ENDIAN
|
|
1262
|
-
uint64_t most_significant = high_mem;
|
|
1263
|
-
uint64_t least_significant = low_mem;
|
|
1264
|
-
#else
|
|
1265
|
-
uint64_t most_significant = low_mem;
|
|
1266
|
-
uint64_t least_significant = high_mem;
|
|
1267
|
-
#endif
|
|
1268
|
-
return {least_significant, most_significant};
|
|
1269
|
-
}
|
|
1270
|
-
|
|
1271
|
-
// Reads 8 bytes from p.
|
|
1272
|
-
static uint64_t Read8(const unsigned char* p) {
|
|
1273
|
-
// Suppress erroneous array bounds errors on GCC.
|
|
1274
|
-
#if defined(__GNUC__) && !defined(__clang__)
|
|
1275
|
-
#pragma GCC diagnostic push
|
|
1276
|
-
#pragma GCC diagnostic ignored "-Warray-bounds"
|
|
1277
|
-
#endif
|
|
1278
|
-
return absl::base_internal::UnalignedLoad64(p);
|
|
1279
|
-
#if defined(__GNUC__) && !defined(__clang__)
|
|
1280
|
-
#pragma GCC diagnostic pop
|
|
1281
|
-
#endif
|
|
1282
|
-
}
|
|
1283
|
-
|
|
1284
|
-
// Reads 4 to 8 bytes from p. Some input bytes may be duplicated in output.
|
|
1285
|
-
static uint64_t Read4To8(const unsigned char* p, size_t len) {
|
|
1286
|
-
// If `len < 8`, we duplicate bytes in the middle.
|
|
1287
|
-
// E.g.:
|
|
1288
|
-
// `ABCD` will be read as `ABCDABCD`.
|
|
1289
|
-
// `ABCDE` will be read as `ABCDBCDE`.
|
|
1290
|
-
// `ABCDEF` will be read as `ABCDCDEF`.
|
|
1291
|
-
// `ABCDEFG` will be read as `ABCDDEFG`.
|
|
1292
|
-
// We also do not care about endianness. On big-endian platforms, bytes will
|
|
1293
|
-
// be shuffled (it's fine). We always shift low memory by 32, because that
|
|
1294
|
-
// can be pipelined earlier. Reading high memory requires computing
|
|
1295
|
-
// `p + len - 4`.
|
|
1296
|
-
uint64_t most_significant =
|
|
1297
|
-
static_cast<uint64_t>(absl::base_internal::UnalignedLoad32(p)) << 32;
|
|
1298
|
-
uint64_t least_significant =
|
|
1299
|
-
absl::base_internal::UnalignedLoad32(p + len - 4);
|
|
1300
|
-
return most_significant | least_significant;
|
|
1301
|
-
}
|
|
1302
|
-
|
|
1303
|
-
// Reads 1 to 3 bytes from p. Some input bytes may be duplicated in output.
|
|
1304
|
-
static uint32_t Read1To3(const unsigned char* p, size_t len) {
|
|
1305
|
-
// The trick used by this implementation is to avoid branches.
|
|
1306
|
-
// We always read three bytes by duplicating.
|
|
1307
|
-
// E.g.,
|
|
1308
|
-
// `A` is read as `AAA`.
|
|
1309
|
-
// `AB` is read as `ABB`.
|
|
1310
|
-
// `ABC` is read as `ABC`.
|
|
1311
|
-
// We always shift `p[0]` so that it can be pipelined better.
|
|
1312
|
-
// Other bytes require extra computation to find indices.
|
|
1313
|
-
uint32_t mem0 = (static_cast<uint32_t>(p[0]) << 16) | p[len - 1];
|
|
1314
|
-
uint32_t mem1 = static_cast<uint32_t>(p[len / 2]) << 8;
|
|
1315
|
-
return mem0 | mem1;
|
|
1316
|
-
}
|
|
1317
|
-
|
|
1318
|
-
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t lhs, uint64_t rhs) {
|
|
1319
|
-
// For 32 bit platforms we are trying to use all 64 lower bits.
|
|
1320
|
-
if constexpr (sizeof(size_t) < 8) {
|
|
1321
|
-
uint64_t m = lhs * rhs;
|
|
1322
|
-
return m ^ (m >> 32);
|
|
1323
|
-
}
|
|
1324
|
-
// Though the 128-bit product on AArch64 needs two instructions, it is
|
|
1325
|
-
// still a good balance between speed and hash quality.
|
|
1326
|
-
uint128 m = lhs;
|
|
1327
|
-
m *= rhs;
|
|
1328
|
-
return Uint128High64(m) ^ Uint128Low64(m);
|
|
1329
|
-
}
|
|
1330
|
-
|
|
1331
|
-
// Slightly lower latency than Mix, but with lower quality. The byte swap
|
|
1332
|
-
// helps ensure that low bits still have high quality.
|
|
1333
|
-
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t WeakMix(uint64_t lhs,
|
|
1334
|
-
uint64_t rhs) {
|
|
1335
|
-
const uint64_t n = lhs ^ rhs;
|
|
1336
|
-
// WeakMix doesn't work well on 32-bit platforms so just use Mix.
|
|
1337
|
-
if constexpr (sizeof(size_t) < 8) return Mix(n, kMul);
|
|
1338
|
-
return absl::gbswap_64(n * kMul);
|
|
1339
|
-
}
|
|
1340
|
-
|
|
1341
|
-
// An extern to avoid bloat on a direct call to LowLevelHash() with fixed
|
|
1342
|
-
// values for both the seed and salt parameters.
|
|
1343
|
-
static uint64_t LowLevelHashImpl(const unsigned char* data, size_t len);
|
|
1344
|
-
|
|
1345
|
-
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Hash64(const unsigned char* data,
|
|
1346
|
-
size_t len) {
|
|
1347
|
-
#ifdef ABSL_HAVE_INTRINSIC_INT128
|
|
1348
|
-
return LowLevelHashImpl(data, len);
|
|
1349
|
-
#else
|
|
1350
|
-
return hash_internal::CityHash64(reinterpret_cast<const char*>(data), len);
|
|
1351
|
-
#endif
|
|
1352
|
-
}
|
|
1353
|
-
|
|
1354
|
-
// Seed()
|
|
1355
|
-
//
|
|
1356
1488
|
// A non-deterministic seed.
|
|
1357
1489
|
//
|
|
1358
1490
|
// The current purpose of this seed is to generate non-deterministic results
|
|
@@ -1367,64 +1499,23 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
|
1367
1499
|
//
|
|
1368
1500
|
// On other platforms this is still going to be non-deterministic but most
|
|
1369
1501
|
// probably per-build and not per-process.
|
|
1370
|
-
ABSL_ATTRIBUTE_ALWAYS_INLINE static
|
|
1502
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE static size_t Seed() {
|
|
1371
1503
|
#if (!defined(__clang__) || __clang_major__ > 11) && \
|
|
1372
1504
|
(!defined(__apple_build_version__) || \
|
|
1373
1505
|
__apple_build_version__ >= 19558921) // Xcode 12
|
|
1374
|
-
return static_cast<
|
|
1506
|
+
return static_cast<size_t>(reinterpret_cast<uintptr_t>(&kSeed));
|
|
1375
1507
|
#else
|
|
1376
1508
|
// Workaround the absence of
|
|
1377
1509
|
// https://github.com/llvm/llvm-project/commit/bc15bf66dcca76cc06fe71fca35b74dc4d521021.
|
|
1378
|
-
return static_cast<
|
|
1510
|
+
return static_cast<size_t>(reinterpret_cast<uintptr_t>(kSeed));
|
|
1379
1511
|
#endif
|
|
1380
1512
|
}
|
|
1381
|
-
static const void* const kSeed;
|
|
1382
1513
|
|
|
1383
1514
|
uint64_t state_;
|
|
1384
1515
|
};
|
|
1385
1516
|
|
|
1386
|
-
// MixingHashState::CombineContiguousImpl()
|
|
1387
|
-
inline uint64_t MixingHashState::CombineContiguousImpl(
|
|
1388
|
-
uint64_t state, const unsigned char* first, size_t len,
|
|
1389
|
-
std::integral_constant<int, 4> /* sizeof_size_t */) {
|
|
1390
|
-
// For large values we use CityHash, for small ones we just use a
|
|
1391
|
-
// multiplicative hash.
|
|
1392
|
-
if (len <= 8) {
|
|
1393
|
-
return CombineSmallContiguousImpl(state, first, len);
|
|
1394
|
-
}
|
|
1395
|
-
if (ABSL_PREDICT_TRUE(len <= PiecewiseChunkSize())) {
|
|
1396
|
-
return Mix(state ^ hash_internal::CityHash32(
|
|
1397
|
-
reinterpret_cast<const char*>(first), len),
|
|
1398
|
-
kMul);
|
|
1399
|
-
}
|
|
1400
|
-
return CombineLargeContiguousImpl32(state, first, len);
|
|
1401
|
-
}
|
|
1402
|
-
|
|
1403
|
-
// Overload of MixingHashState::CombineContiguousImpl()
|
|
1404
|
-
inline uint64_t MixingHashState::CombineContiguousImpl(
|
|
1405
|
-
uint64_t state, const unsigned char* first, size_t len,
|
|
1406
|
-
std::integral_constant<int, 8> /* sizeof_size_t */) {
|
|
1407
|
-
// For large values we use LowLevelHash or CityHash depending on the platform,
|
|
1408
|
-
// for small ones we just use a multiplicative hash.
|
|
1409
|
-
if (len <= 8) {
|
|
1410
|
-
return CombineSmallContiguousImpl(state, first, len);
|
|
1411
|
-
}
|
|
1412
|
-
if (len <= 16) {
|
|
1413
|
-
return CombineContiguousImpl9to16(state, first, len);
|
|
1414
|
-
}
|
|
1415
|
-
if (len <= 32) {
|
|
1416
|
-
return CombineContiguousImpl17to32(state, first, len);
|
|
1417
|
-
}
|
|
1418
|
-
if (ABSL_PREDICT_TRUE(len <= PiecewiseChunkSize())) {
|
|
1419
|
-
return Mix(state ^ Hash64(first, len), kMul);
|
|
1420
|
-
}
|
|
1421
|
-
return CombineLargeContiguousImpl64(state, first, len);
|
|
1422
|
-
}
|
|
1423
|
-
|
|
1424
1517
|
struct AggregateBarrier {};
|
|
1425
1518
|
|
|
1426
|
-
// HashImpl
|
|
1427
|
-
|
|
1428
1519
|
// Add a private base class to make sure this type is not an aggregate.
|
|
1429
1520
|
// Aggregates can be aggregate initialized even if the default constructor is
|
|
1430
1521
|
// deleted.
|
|
@@ -1439,11 +1530,18 @@ struct HashImpl {
|
|
|
1439
1530
|
size_t operator()(const T& value) const {
|
|
1440
1531
|
return MixingHashState::hash(value);
|
|
1441
1532
|
}
|
|
1533
|
+
|
|
1534
|
+
private:
|
|
1535
|
+
friend struct HashWithSeed;
|
|
1536
|
+
|
|
1537
|
+
size_t hash_with_seed(const T& value, size_t seed) const {
|
|
1538
|
+
return MixingHashState::hash_with_seed(value, seed);
|
|
1539
|
+
}
|
|
1442
1540
|
};
|
|
1443
1541
|
|
|
1444
1542
|
template <typename T>
|
|
1445
1543
|
struct Hash
|
|
1446
|
-
:
|
|
1544
|
+
: std::conditional_t<is_hashable<T>::value, HashImpl<T>, PoisonedHash> {};
|
|
1447
1545
|
|
|
1448
1546
|
template <typename H>
|
|
1449
1547
|
template <typename T, typename... Ts>
|
|
@@ -1453,14 +1551,12 @@ H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
|
|
|
1453
1551
|
values...);
|
|
1454
1552
|
}
|
|
1455
1553
|
|
|
1456
|
-
// HashStateBase::combine_contiguous()
|
|
1457
1554
|
template <typename H>
|
|
1458
1555
|
template <typename T>
|
|
1459
1556
|
H HashStateBase<H>::combine_contiguous(H state, const T* data, size_t size) {
|
|
1460
1557
|
return hash_internal::hash_range_or_bytes(std::move(state), data, size);
|
|
1461
1558
|
}
|
|
1462
1559
|
|
|
1463
|
-
// HashStateBase::combine_unordered()
|
|
1464
1560
|
template <typename H>
|
|
1465
1561
|
template <typename I>
|
|
1466
1562
|
H HashStateBase<H>::combine_unordered(H state, I begin, I end) {
|
|
@@ -1468,7 +1564,6 @@ H HashStateBase<H>::combine_unordered(H state, I begin, I end) {
|
|
|
1468
1564
|
CombineUnorderedCallback<I>{begin, end});
|
|
1469
1565
|
}
|
|
1470
1566
|
|
|
1471
|
-
// HashStateBase::PiecewiseCombiner::add_buffer()
|
|
1472
1567
|
template <typename H>
|
|
1473
1568
|
H PiecewiseCombiner::add_buffer(H state, const unsigned char* data,
|
|
1474
1569
|
size_t size) {
|
|
@@ -1478,7 +1573,7 @@ H PiecewiseCombiner::add_buffer(H state, const unsigned char* data,
|
|
|
1478
1573
|
position_ += size;
|
|
1479
1574
|
return state;
|
|
1480
1575
|
}
|
|
1481
|
-
|
|
1576
|
+
added_something_ = true;
|
|
1482
1577
|
// If the buffer is partially filled we need to complete the buffer
|
|
1483
1578
|
// and hash it.
|
|
1484
1579
|
if (position_ != 0) {
|
|
@@ -1501,10 +1596,14 @@ H PiecewiseCombiner::add_buffer(H state, const unsigned char* data,
|
|
|
1501
1596
|
return state;
|
|
1502
1597
|
}
|
|
1503
1598
|
|
|
1504
|
-
// HashStateBase::PiecewiseCombiner::finalize()
|
|
1505
1599
|
template <typename H>
|
|
1506
1600
|
H PiecewiseCombiner::finalize(H state) {
|
|
1507
|
-
//
|
|
1601
|
+
// Do not call combine_contiguous with empty remainder since it is modifying
|
|
1602
|
+
// state.
|
|
1603
|
+
if (added_something_ && position_ == 0) {
|
|
1604
|
+
return state;
|
|
1605
|
+
}
|
|
1606
|
+
// We still call combine_contiguous for the entirely empty buffer.
|
|
1508
1607
|
return H::combine_contiguous(std::move(state), buf_, position_);
|
|
1509
1608
|
}
|
|
1510
1609
|
|
|
@@ -1512,4 +1611,9 @@ H PiecewiseCombiner::finalize(H state) {
|
|
|
1512
1611
|
ABSL_NAMESPACE_END
|
|
1513
1612
|
} // namespace absl
|
|
1514
1613
|
|
|
1614
|
+
#undef ABSL_HASH_INTERNAL_HAS_CRC32
|
|
1615
|
+
#undef ABSL_HASH_INTERNAL_CRC32_U64
|
|
1616
|
+
#undef ABSL_HASH_INTERNAL_CRC32_U32
|
|
1617
|
+
#undef ABSL_HASH_INTERNAL_CRC32_U8
|
|
1618
|
+
|
|
1515
1619
|
#endif // ABSL_HASH_INTERNAL_HASH_H_
|