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.
Files changed (1004) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/include/grpc/event_engine/memory_allocator.h +1 -0
  4. data/include/grpc/grpc.h +3 -0
  5. data/include/grpc/grpc_security_constants.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +4 -0
  7. data/src/core/call/call_filters.h +10 -10
  8. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  10. data/src/core/call/filter_fusion.h +15 -15
  11. data/src/core/call/interception_chain.h +3 -3
  12. data/src/core/call/metadata_batch.cc +1 -0
  13. data/src/core/call/metadata_batch.h +45 -33
  14. data/src/core/call/parsed_metadata.h +3 -3
  15. data/src/core/call/request_buffer.cc +6 -6
  16. data/src/core/call/request_buffer.h +1 -1
  17. data/src/core/channelz/channel_trace.cc +5 -5
  18. data/src/core/channelz/channel_trace.h +1 -1
  19. data/src/core/channelz/channelz.cc +9 -9
  20. data/src/core/channelz/channelz.h +12 -12
  21. data/src/core/channelz/channelz_registry.cc +10 -10
  22. data/src/core/channelz/ztrace_collector.h +5 -5
  23. data/src/core/client_channel/client_channel.cc +4 -4
  24. data/src/core/client_channel/client_channel_filter.cc +14 -14
  25. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  26. data/src/core/client_channel/subchannel.cc +24 -23
  27. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  28. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  29. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  30. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  31. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  32. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  33. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  34. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  39. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  40. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  41. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  42. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  43. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  45. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  46. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  48. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  49. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  50. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  51. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  53. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  55. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  56. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  61. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  63. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  65. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  68. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  70. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  72. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  73. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  74. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  76. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  85. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  87. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  97. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  98. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  99. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  100. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  101. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  102. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  103. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  104. data/src/core/handshaker/handshaker.cc +4 -4
  105. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  106. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  107. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  108. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  109. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  110. data/src/core/lib/channel/channel_args.cc +20 -0
  111. data/src/core/lib/channel/channel_args.h +17 -17
  112. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  113. data/src/core/lib/channel/promise_based_filter.h +66 -27
  114. data/src/core/lib/debug/trace_flags.cc +2 -0
  115. data/src/core/lib/debug/trace_flags.h +1 -0
  116. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  117. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  118. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  119. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  120. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  121. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  122. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  123. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  124. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  126. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  127. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  128. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  129. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  132. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  134. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  136. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  137. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  139. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  140. data/src/core/lib/experiments/experiments.cc +48 -0
  141. data/src/core/lib/experiments/experiments.h +24 -0
  142. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  143. data/src/core/lib/iomgr/buffer_list.h +1 -1
  144. data/src/core/lib/iomgr/combiner.cc +0 -1
  145. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  146. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  147. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  148. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  149. data/src/core/lib/promise/activity.cc +1 -1
  150. data/src/core/lib/promise/activity.h +1 -1
  151. data/src/core/lib/promise/arena_promise.h +7 -7
  152. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  153. data/src/core/lib/promise/detail/promise_like.h +4 -4
  154. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  155. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  156. data/src/core/lib/promise/observable.h +3 -3
  157. data/src/core/lib/promise/party.cc +1 -1
  158. data/src/core/lib/promise/try_seq.h +2 -2
  159. data/src/core/lib/resource_quota/arena.h +3 -3
  160. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  161. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  162. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  163. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  164. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  165. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  168. data/src/core/lib/security/authorization/matchers.h +1 -1
  169. data/src/core/lib/surface/call.cc +8 -7
  170. data/src/core/lib/surface/call.h +3 -3
  171. data/src/core/lib/surface/call_utils.h +4 -0
  172. data/src/core/lib/surface/channel.cc +1 -1
  173. data/src/core/lib/surface/channel.h +1 -1
  174. data/src/core/lib/surface/channel_init.cc +1 -1
  175. data/src/core/lib/surface/init.cc +7 -7
  176. data/src/core/lib/surface/lame_client.cc +1 -1
  177. data/src/core/lib/surface/legacy_channel.cc +2 -2
  178. data/src/core/lib/surface/version.cc +1 -1
  179. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  180. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  181. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  182. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  183. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  184. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  185. data/src/core/load_balancing/health_check_client.cc +7 -7
  186. data/src/core/load_balancing/lb_policy.cc +1 -1
  187. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  188. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  189. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  190. data/src/core/load_balancing/rls/rls.cc +23 -17
  191. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  192. data/src/core/load_balancing/xds/cds.cc +6 -5
  193. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  194. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  195. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  196. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  197. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  198. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  199. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  200. data/src/core/server/server.cc +30 -30
  201. data/src/core/server/server.h +4 -3
  202. data/src/core/server/server_config_selector_filter.cc +3 -3
  203. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  204. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  205. data/src/core/telemetry/instrument.cc +30 -16
  206. data/src/core/telemetry/instrument.h +3 -3
  207. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  210. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  211. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  212. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  213. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  214. data/src/core/tsi/ssl_transport_security.cc +46 -13
  215. data/src/core/tsi/ssl_transport_security.h +7 -0
  216. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  217. data/src/core/util/event_log.cc +3 -3
  218. data/src/core/util/http_client/httpcli.cc +5 -5
  219. data/src/core/util/http_client/httpcli.h +1 -1
  220. data/src/core/util/json/json_object_loader.cc +7 -0
  221. data/src/core/util/json/json_object_loader.h +17 -2
  222. data/src/core/util/latent_see.cc +123 -36
  223. data/src/core/util/latent_see.h +14 -1
  224. data/src/core/util/mpscq.cc +1 -1
  225. data/src/core/util/notification.h +4 -4
  226. data/src/core/util/sync.h +20 -6
  227. data/src/core/util/table.h +20 -22
  228. data/src/core/util/work_serializer.cc +2 -2
  229. data/src/core/xds/grpc/blackboard.cc +4 -3
  230. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  231. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  233. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  234. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  235. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  236. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  237. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  238. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  239. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  240. data/src/core/xds/grpc/xds_matcher.h +2 -2
  241. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  242. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  243. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  244. data/src/core/xds/xds_client/xds_client.cc +19 -16
  245. data/src/core/xds/xds_client/xds_transport.h +49 -3
  246. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  248. data/src/ruby/lib/grpc/version.rb +1 -1
  249. data/src/ruby/pb/README.md +1 -1
  250. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  251. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  252. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  253. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  254. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  255. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  256. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  257. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  258. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  259. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  260. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  261. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  262. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  265. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  266. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  268. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  269. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  270. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  273. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  274. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  275. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  276. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  277. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  278. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  280. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  281. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  282. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  283. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  284. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  285. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  286. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  287. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  288. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  289. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  290. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  291. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  292. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  293. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  294. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  295. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  296. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  297. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  300. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  301. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  305. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  306. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  308. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  309. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  310. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  313. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  314. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  316. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  317. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  326. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  327. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  328. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  330. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  331. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  335. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  336. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  337. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  338. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  341. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  342. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  343. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  344. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  345. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  346. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  347. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  348. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  349. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  350. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  351. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  352. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  353. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  354. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  356. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  357. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  358. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  360. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  361. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  362. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  364. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  365. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  366. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  367. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  368. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  370. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  372. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  373. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  374. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  375. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  376. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  377. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  378. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  379. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  380. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  381. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  382. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  383. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  384. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  385. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  386. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  387. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  388. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  389. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  390. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  391. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  393. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  395. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  396. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  397. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  398. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  399. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  401. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  402. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  403. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  404. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  405. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  407. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  408. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  409. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  410. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  411. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  412. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  413. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  414. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  415. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  416. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  417. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  418. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  420. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  423. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  427. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  428. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  429. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  433. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  434. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  435. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  436. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  437. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  438. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  439. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  440. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  441. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  442. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  443. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  444. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  445. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  446. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  447. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  448. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  449. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  450. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  451. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  453. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  454. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  455. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  456. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  457. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  458. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  459. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  465. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  466. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  467. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  468. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  469. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  470. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  471. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  472. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  473. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  474. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  475. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  476. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  477. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  478. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  492. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  494. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  497. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  498. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  504. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  505. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  506. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  508. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  509. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  510. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  511. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  512. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  513. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  514. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  515. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  516. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  518. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  519. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  520. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  521. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  522. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  523. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  524. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  525. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  531. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  532. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  533. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  534. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  543. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  544. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  545. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  546. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  547. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  548. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  549. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  555. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  558. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  559. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  560. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  564. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  565. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  566. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  567. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  568. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  569. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  571. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  572. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  574. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  575. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  576. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  577. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  579. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  580. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  581. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  582. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  586. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  587. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  597. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  598. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  599. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  600. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  601. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  602. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  709. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  710. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  711. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  712. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  713. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  714. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  715. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  716. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  717. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  718. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  719. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  720. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  721. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  722. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  723. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  724. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  725. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  728. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  729. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  730. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  736. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  739. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  743. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  747. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  748. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  749. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  750. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  751. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  752. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  753. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  754. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  755. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  756. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  757. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  758. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  759. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  760. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  761. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  765. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  768. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  769. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  770. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  772. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  773. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  774. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  775. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  776. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  777. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  781. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  784. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  785. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  786. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  788. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  789. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  790. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  791. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  792. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  796. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  819. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  837. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  849. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  850. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  853. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  854. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  855. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  856. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  858. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  859. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  860. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  861. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  862. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  863. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  864. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  865. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  866. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  867. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  868. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  869. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  870. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  871. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  872. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  873. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  874. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  875. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  876. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  877. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  878. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  879. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  880. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  881. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  883. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  884. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  885. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  886. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  887. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  888. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  889. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  890. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  891. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  892. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  893. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  894. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  895. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  897. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  898. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  899. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  900. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  901. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  902. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  904. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  906. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  907. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  908. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  909. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  913. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  914. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  915. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  916. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  917. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  918. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  919. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  920. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  921. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  923. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  924. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  925. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  926. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  927. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  928. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  929. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  930. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  931. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  932. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  933. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  934. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  935. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  936. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  937. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  938. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  939. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  940. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  941. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  942. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  943. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  944. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  945. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  946. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  947. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  948. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  949. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  950. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  951. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  952. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  953. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  955. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  956. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  957. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  958. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  959. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  960. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  961. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  962. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  963. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  964. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  965. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  966. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  967. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  968. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  969. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  970. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  971. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  974. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  979. metadata +77 -52
  980. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  982. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  984. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  985. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  986. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  987. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  989. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  990. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  996. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1000. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1001. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1002. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1003. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1004. 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() : position_(0) {}
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
- // An internal implementation detail that contains common implementation details
172
- // for all of the "hash state objects" objects generated by Abseil. This is not
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
- // hash_bytes()
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
- absl::enable_if_t<FitsIn64Bits<T>::value, int> = 0>
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
- absl::enable_if_t<!FitsIn64Bits<T>::value, int> = 0>
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<unsigned char>(value ? 1 : 0));
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. The
506
- // byte swap in WeakMix helps ensure we still have good entropy in low bits.
507
- // Mix pointers twice to ensure we have good entropy in low bits.
508
- return H::combine(std::move(hash_state), v, 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, absl::index_sequence<Is...>) {
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<absl::conjunction<is_hashable<Ts>...>::value, H>::type
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
- absl::make_index_sequence<sizeof...(Ts)>());
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::combine(
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 = absl::enable_if_t<std::is_same<Char, wchar_t>::value ||
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::combine(
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 = absl::enable_if_t<std::is_same<Char, wchar_t>::value ||
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::combine(
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 = absl::enable_if_t<
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::combine(H::combine_contiguous(std::move(hash_state), vector.data(),
731
- vector.size()),
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 absl::optional
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 absl::optional<T>& opt) {
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 absl::variant
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 absl::variant<T...>& v) {
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 = absl::visit(VariantVisitor<H>{std::move(hash_state)}, v);
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
- #if defined(ABSL_INTERNAL_LEGACY_HASH_NAMESPACE) && \
963
- ABSL_META_INTERNAL_STD_HASH_SFINAE_FRIENDLY_
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
- -> absl::enable_if_t<is_uniquely_represented<T>::value, H> {
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) -> absl::enable_if_t<
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) -> absl::enable_if_t<
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
- -> absl::enable_if_t<type_traits_internal::IsHashable<T>::value, H> {
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 = absl::disjunction< //
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
- FitsIn64Bits<T>>;
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
- // MixingHashState::hash()
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, absl::enable_if_t<IntegralFastPath<T>::value, int> = 0>
1118
- static size_t hash(T value) {
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
- WeakMix(Seed(), static_cast<std::make_unsigned_t<T>>(value)));
1419
+ CombineRawImpl(seed, static_cast<std::make_unsigned_t<T>>(value)));
1121
1420
  }
1122
1421
 
1123
- // Overload of MixingHashState::hash()
1124
- template <typename T, absl::enable_if_t<!IntegralFastPath<T>::value, int> = 0>
1125
- static size_t hash(const T& value) {
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 uint64_t Seed() {
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<uint64_t>(reinterpret_cast<uintptr_t>(&kSeed));
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<uint64_t>(reinterpret_cast<uintptr_t>(kSeed));
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
- : absl::conditional_t<is_hashable<T>::value, HashImpl<T>, PoisonedHash> {};
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
- // Hash the remainder left in the buffer, which may be empty
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_