grpc 1.37.1 → 1.39.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +96 -59
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/endpoint_config.h +48 -0
- data/include/grpc/event_engine/event_engine.h +334 -0
- data/include/grpc/event_engine/port.h +41 -0
- data/include/grpc/event_engine/slice_allocator.h +91 -0
- data/include/grpc/grpc.h +11 -4
- data/include/grpc/grpc_security.h +32 -0
- data/include/grpc/grpc_security_constants.h +15 -0
- data/include/grpc/impl/codegen/grpc_types.h +28 -13
- data/include/grpc/impl/codegen/port_platform.h +22 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +755 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +25 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +348 -199
- data/src/core/ext/xds/xds_api.h +21 -12
- data/src/core/ext/xds/xds_bootstrap.cc +97 -159
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +310 -178
- data/src/core/ext/xds/xds_client.h +41 -27
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +10 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +21 -13
- data/src/core/lib/channel/channelz.h +3 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/event_engine/endpoint_config.cc +46 -0
- data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
- data/src/core/lib/event_engine/event_engine.cc +50 -0
- data/src/core/lib/event_engine/slice_allocator.cc +89 -0
- data/src/core/lib/event_engine/sockaddr.cc +40 -0
- data/src/core/lib/event_engine/sockaddr.h +44 -0
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +183 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +168 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
- data/src/core/lib/iomgr/event_engine/closure.h +33 -0
- data/src/core/lib/iomgr/event_engine/endpoint.cc +194 -0
- data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
- data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
- data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
- data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
- data/src/core/lib/iomgr/event_engine/promise.h +51 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +243 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
- data/src/core/lib/iomgr/exec_ctx.cc +12 -4
- data/src/core/lib/iomgr/exec_ctx.h +4 -5
- data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
- data/src/core/lib/iomgr/executor/threadpool.h +2 -2
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +2 -2
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +7 -7
- data/src/core/lib/iomgr/pollset_custom.h +3 -1
- data/src/core/lib/iomgr/pollset_uv.cc +3 -1
- data/src/core/lib/iomgr/pollset_uv.h +5 -1
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +7 -5
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +8 -4
- data/src/core/lib/iomgr/resolve_address.h +12 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +11 -10
- data/src/core/lib/iomgr/sockaddr.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +15 -2
- data/src/core/lib/iomgr/socket_mutator.h +26 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +78 -73
- data/src/core/lib/iomgr/tcp_posix.h +8 -0
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
- data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer.h +6 -1
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/matchers/matchers.cc +39 -39
- data/src/core/lib/matchers/matchers.h +28 -28
- data/src/core/lib/security/authorization/authorization_engine.h +44 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
- data/src/core/lib/security/authorization/evaluate_args.h +91 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +33 -32
- data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +13 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +68 -69
- data/src/core/lib/surface/completion_queue.h +3 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -2
- data/src/core/lib/surface/init.cc +1 -3
- data/src/core/lib/surface/init.h +10 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +28 -22
- data/src/core/lib/surface/server.h +16 -15
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +21 -10
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +6 -4
- data/src/core/lib/transport/transport_op_string.cc +6 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/crypt/gsec.h +6 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +483 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
- data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +94 -46
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -0,0 +1,111 @@
|
|
1
|
+
// Copyright 2020 The Abseil Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include "absl/hash/internal/wyhash.h"
|
16
|
+
|
17
|
+
#include "absl/base/internal/unaligned_access.h"
|
18
|
+
#include "absl/numeric/int128.h"
|
19
|
+
|
20
|
+
namespace absl {
|
21
|
+
ABSL_NAMESPACE_BEGIN
|
22
|
+
namespace hash_internal {
|
23
|
+
|
24
|
+
static uint64_t WyhashMix(uint64_t v0, uint64_t v1) {
|
25
|
+
absl::uint128 p = v0;
|
26
|
+
p *= v1;
|
27
|
+
return absl::Uint128Low64(p) ^ absl::Uint128High64(p);
|
28
|
+
}
|
29
|
+
|
30
|
+
uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
|
31
|
+
const uint64_t salt[]) {
|
32
|
+
const uint8_t* ptr = static_cast<const uint8_t*>(data);
|
33
|
+
uint64_t starting_length = static_cast<uint64_t>(len);
|
34
|
+
uint64_t current_state = seed ^ salt[0];
|
35
|
+
|
36
|
+
if (len > 64) {
|
37
|
+
// If we have more than 64 bytes, we're going to handle chunks of 64
|
38
|
+
// bytes at a time. We're going to build up two separate hash states
|
39
|
+
// which we will then hash together.
|
40
|
+
uint64_t duplicated_state = current_state;
|
41
|
+
|
42
|
+
do {
|
43
|
+
uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
|
44
|
+
uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
|
45
|
+
uint64_t c = absl::base_internal::UnalignedLoad64(ptr + 16);
|
46
|
+
uint64_t d = absl::base_internal::UnalignedLoad64(ptr + 24);
|
47
|
+
uint64_t e = absl::base_internal::UnalignedLoad64(ptr + 32);
|
48
|
+
uint64_t f = absl::base_internal::UnalignedLoad64(ptr + 40);
|
49
|
+
uint64_t g = absl::base_internal::UnalignedLoad64(ptr + 48);
|
50
|
+
uint64_t h = absl::base_internal::UnalignedLoad64(ptr + 56);
|
51
|
+
|
52
|
+
uint64_t cs0 = WyhashMix(a ^ salt[1], b ^ current_state);
|
53
|
+
uint64_t cs1 = WyhashMix(c ^ salt[2], d ^ current_state);
|
54
|
+
current_state = (cs0 ^ cs1);
|
55
|
+
|
56
|
+
uint64_t ds0 = WyhashMix(e ^ salt[3], f ^ duplicated_state);
|
57
|
+
uint64_t ds1 = WyhashMix(g ^ salt[4], h ^ duplicated_state);
|
58
|
+
duplicated_state = (ds0 ^ ds1);
|
59
|
+
|
60
|
+
ptr += 64;
|
61
|
+
len -= 64;
|
62
|
+
} while (len > 64);
|
63
|
+
|
64
|
+
current_state = current_state ^ duplicated_state;
|
65
|
+
}
|
66
|
+
|
67
|
+
// We now have a data `ptr` with at most 64 bytes and the current state
|
68
|
+
// of the hashing state machine stored in current_state.
|
69
|
+
while (len > 16) {
|
70
|
+
uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
|
71
|
+
uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
|
72
|
+
|
73
|
+
current_state = WyhashMix(a ^ salt[1], b ^ current_state);
|
74
|
+
|
75
|
+
ptr += 16;
|
76
|
+
len -= 16;
|
77
|
+
}
|
78
|
+
|
79
|
+
// We now have a data `ptr` with at most 16 bytes.
|
80
|
+
uint64_t a = 0;
|
81
|
+
uint64_t b = 0;
|
82
|
+
if (len > 8) {
|
83
|
+
// When we have at least 9 and at most 16 bytes, set A to the first 64
|
84
|
+
// bits of the input and B to the last 64 bits of the input. Yes, they will
|
85
|
+
// overlap in the middle if we are working with less than the full 16
|
86
|
+
// bytes.
|
87
|
+
a = absl::base_internal::UnalignedLoad64(ptr);
|
88
|
+
b = absl::base_internal::UnalignedLoad64(ptr + len - 8);
|
89
|
+
} else if (len > 3) {
|
90
|
+
// If we have at least 4 and at most 8 bytes, set A to the first 32
|
91
|
+
// bits and B to the last 32 bits.
|
92
|
+
a = absl::base_internal::UnalignedLoad32(ptr);
|
93
|
+
b = absl::base_internal::UnalignedLoad32(ptr + len - 4);
|
94
|
+
} else if (len > 0) {
|
95
|
+
// If we have at least 1 and at most 3 bytes, read all of the provided
|
96
|
+
// bits into A, with some adjustments.
|
97
|
+
a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]);
|
98
|
+
b = 0;
|
99
|
+
} else {
|
100
|
+
a = 0;
|
101
|
+
b = 0;
|
102
|
+
}
|
103
|
+
|
104
|
+
uint64_t w = WyhashMix(a ^ salt[1], b ^ current_state);
|
105
|
+
uint64_t z = salt[1] ^ starting_length;
|
106
|
+
return WyhashMix(w, z);
|
107
|
+
}
|
108
|
+
|
109
|
+
} // namespace hash_internal
|
110
|
+
ABSL_NAMESPACE_END
|
111
|
+
} // namespace absl
|
@@ -0,0 +1,48 @@
|
|
1
|
+
// Copyright 2020 The Abseil Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
//
|
15
|
+
// This file provides the Google-internal implementation of the Wyhash
|
16
|
+
// algorithm.
|
17
|
+
//
|
18
|
+
// Wyhash is a fast hash function for hash tables, the fastest we've currently
|
19
|
+
// (late 2020) found that passes the SMHasher tests. The algorithm relies on
|
20
|
+
// intrinsic 128-bit multiplication for speed. This is not meant to be secure -
|
21
|
+
// just fast.
|
22
|
+
|
23
|
+
#ifndef ABSL_HASH_INTERNAL_WYHASH_H_
|
24
|
+
#define ABSL_HASH_INTERNAL_WYHASH_H_
|
25
|
+
|
26
|
+
#include <stdint.h>
|
27
|
+
#include <stdlib.h>
|
28
|
+
|
29
|
+
#include "absl/base/config.h"
|
30
|
+
|
31
|
+
namespace absl {
|
32
|
+
ABSL_NAMESPACE_BEGIN
|
33
|
+
namespace hash_internal {
|
34
|
+
|
35
|
+
// Hash function for a byte array. A 64-bit seed and a set of five 64-bit
|
36
|
+
// integers are hashed into the result.
|
37
|
+
//
|
38
|
+
// To allow all hashable types (including string_view and Span) to depend on
|
39
|
+
// this algoritm, we keep the API low-level, with as few dependencies as
|
40
|
+
// possible.
|
41
|
+
uint64_t Wyhash(const void* data, size_t len, uint64_t seed,
|
42
|
+
const uint64_t salt[5]);
|
43
|
+
|
44
|
+
} // namespace hash_internal
|
45
|
+
ABSL_NAMESPACE_END
|
46
|
+
} // namespace absl
|
47
|
+
|
48
|
+
#endif // ABSL_HASH_INTERNAL_WYHASH_H_
|
@@ -610,8 +610,22 @@ using common_type_t = typename std::common_type<T...>::type;
|
|
610
610
|
template <typename T>
|
611
611
|
using underlying_type_t = typename std::underlying_type<T>::type;
|
612
612
|
|
613
|
-
|
614
|
-
|
613
|
+
|
614
|
+
namespace type_traits_internal {
|
615
|
+
|
616
|
+
#if __cplusplus >= 201703L
|
617
|
+
// std::result_of is deprecated (C++17) or removed (C++20)
|
618
|
+
template<typename> struct result_of;
|
619
|
+
template<typename F, typename... Args>
|
620
|
+
struct result_of<F(Args...)> : std::invoke_result<F, Args...> {};
|
621
|
+
#else
|
622
|
+
template<typename F> using result_of = std::result_of<F>;
|
623
|
+
#endif
|
624
|
+
|
625
|
+
} // namespace type_traits_internal
|
626
|
+
|
627
|
+
template<typename F>
|
628
|
+
using result_of_t = typename type_traits_internal::result_of<F>::type;
|
615
629
|
|
616
630
|
namespace type_traits_internal {
|
617
631
|
// In MSVC we can't probe std::hash or stdext::hash because it triggers a
|
@@ -0,0 +1,177 @@
|
|
1
|
+
// Copyright 2020 The Abseil Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
//
|
15
|
+
// -----------------------------------------------------------------------------
|
16
|
+
// File: bits.h
|
17
|
+
// -----------------------------------------------------------------------------
|
18
|
+
//
|
19
|
+
// This file contains implementations of C++20's bitwise math functions, as
|
20
|
+
// defined by:
|
21
|
+
//
|
22
|
+
// P0553R4:
|
23
|
+
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0553r4.html
|
24
|
+
// P0556R3:
|
25
|
+
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0556r3.html
|
26
|
+
// P1355R2:
|
27
|
+
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1355r2.html
|
28
|
+
// P1956R1:
|
29
|
+
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1956r1.pdf
|
30
|
+
//
|
31
|
+
// When using a standard library that implements these functions, we use the
|
32
|
+
// standard library's implementation.
|
33
|
+
|
34
|
+
#ifndef ABSL_NUMERIC_BITS_H_
|
35
|
+
#define ABSL_NUMERIC_BITS_H_
|
36
|
+
|
37
|
+
#include <cstdint>
|
38
|
+
#include <limits>
|
39
|
+
#include <type_traits>
|
40
|
+
|
41
|
+
#if (defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L) || \
|
42
|
+
(defined(__cpp_lib_bitops) && __cpp_lib_bitops >= 201907L)
|
43
|
+
#include <bit>
|
44
|
+
#endif
|
45
|
+
|
46
|
+
#include "absl/base/attributes.h"
|
47
|
+
#include "absl/base/config.h"
|
48
|
+
#include "absl/numeric/internal/bits.h"
|
49
|
+
|
50
|
+
namespace absl {
|
51
|
+
ABSL_NAMESPACE_BEGIN
|
52
|
+
|
53
|
+
#if !(defined(__cpp_lib_bitops) && __cpp_lib_bitops >= 201907L)
|
54
|
+
// rotating
|
55
|
+
template <class T>
|
56
|
+
ABSL_MUST_USE_RESULT constexpr
|
57
|
+
typename std::enable_if<std::is_unsigned<T>::value, T>::type
|
58
|
+
rotl(T x, int s) noexcept {
|
59
|
+
return numeric_internal::RotateLeft(x, s);
|
60
|
+
}
|
61
|
+
|
62
|
+
template <class T>
|
63
|
+
ABSL_MUST_USE_RESULT constexpr
|
64
|
+
typename std::enable_if<std::is_unsigned<T>::value, T>::type
|
65
|
+
rotr(T x, int s) noexcept {
|
66
|
+
return numeric_internal::RotateRight(x, s);
|
67
|
+
}
|
68
|
+
|
69
|
+
// Counting functions
|
70
|
+
//
|
71
|
+
// While these functions are typically constexpr, on some platforms, they may
|
72
|
+
// not be marked as constexpr due to constraints of the compiler/available
|
73
|
+
// intrinsics.
|
74
|
+
template <class T>
|
75
|
+
ABSL_INTERNAL_CONSTEXPR_CLZ inline
|
76
|
+
typename std::enable_if<std::is_unsigned<T>::value, int>::type
|
77
|
+
countl_zero(T x) noexcept {
|
78
|
+
return numeric_internal::CountLeadingZeroes(x);
|
79
|
+
}
|
80
|
+
|
81
|
+
template <class T>
|
82
|
+
ABSL_INTERNAL_CONSTEXPR_CLZ inline
|
83
|
+
typename std::enable_if<std::is_unsigned<T>::value, int>::type
|
84
|
+
countl_one(T x) noexcept {
|
85
|
+
// Avoid integer promotion to a wider type
|
86
|
+
return countl_zero(static_cast<T>(~x));
|
87
|
+
}
|
88
|
+
|
89
|
+
template <class T>
|
90
|
+
ABSL_INTERNAL_CONSTEXPR_CTZ inline
|
91
|
+
typename std::enable_if<std::is_unsigned<T>::value, int>::type
|
92
|
+
countr_zero(T x) noexcept {
|
93
|
+
return numeric_internal::CountTrailingZeroes(x);
|
94
|
+
}
|
95
|
+
|
96
|
+
template <class T>
|
97
|
+
ABSL_INTERNAL_CONSTEXPR_CTZ inline
|
98
|
+
typename std::enable_if<std::is_unsigned<T>::value, int>::type
|
99
|
+
countr_one(T x) noexcept {
|
100
|
+
// Avoid integer promotion to a wider type
|
101
|
+
return countr_zero(static_cast<T>(~x));
|
102
|
+
}
|
103
|
+
|
104
|
+
template <class T>
|
105
|
+
ABSL_INTERNAL_CONSTEXPR_POPCOUNT inline
|
106
|
+
typename std::enable_if<std::is_unsigned<T>::value, int>::type
|
107
|
+
popcount(T x) noexcept {
|
108
|
+
return numeric_internal::Popcount(x);
|
109
|
+
}
|
110
|
+
#else // defined(__cpp_lib_bitops) && __cpp_lib_bitops >= 201907L
|
111
|
+
|
112
|
+
using std::countl_one;
|
113
|
+
using std::countl_zero;
|
114
|
+
using std::countr_one;
|
115
|
+
using std::countr_zero;
|
116
|
+
using std::popcount;
|
117
|
+
using std::rotl;
|
118
|
+
using std::rotr;
|
119
|
+
|
120
|
+
#endif
|
121
|
+
|
122
|
+
#if !(defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L)
|
123
|
+
// Returns: true if x is an integral power of two; false otherwise.
|
124
|
+
template <class T>
|
125
|
+
constexpr inline typename std::enable_if<std::is_unsigned<T>::value, bool>::type
|
126
|
+
has_single_bit(T x) noexcept {
|
127
|
+
return x != 0 && (x & (x - 1)) == 0;
|
128
|
+
}
|
129
|
+
|
130
|
+
// Returns: If x == 0, 0; otherwise one plus the base-2 logarithm of x, with any
|
131
|
+
// fractional part discarded.
|
132
|
+
template <class T>
|
133
|
+
ABSL_INTERNAL_CONSTEXPR_CLZ inline
|
134
|
+
typename std::enable_if<std::is_unsigned<T>::value, T>::type
|
135
|
+
bit_width(T x) noexcept {
|
136
|
+
return std::numeric_limits<T>::digits - countl_zero(x);
|
137
|
+
}
|
138
|
+
|
139
|
+
// Returns: If x == 0, 0; otherwise the maximal value y such that
|
140
|
+
// has_single_bit(y) is true and y <= x.
|
141
|
+
template <class T>
|
142
|
+
ABSL_INTERNAL_CONSTEXPR_CLZ inline
|
143
|
+
typename std::enable_if<std::is_unsigned<T>::value, T>::type
|
144
|
+
bit_floor(T x) noexcept {
|
145
|
+
return x == 0 ? 0 : T{1} << (bit_width(x) - 1);
|
146
|
+
}
|
147
|
+
|
148
|
+
// Returns: N, where N is the smallest power of 2 greater than or equal to x.
|
149
|
+
//
|
150
|
+
// Preconditions: N is representable as a value of type T.
|
151
|
+
template <class T>
|
152
|
+
ABSL_INTERNAL_CONSTEXPR_CLZ inline
|
153
|
+
typename std::enable_if<std::is_unsigned<T>::value, T>::type
|
154
|
+
bit_ceil(T x) {
|
155
|
+
// If T is narrower than unsigned, T{1} << bit_width will be promoted. We
|
156
|
+
// want to force it to wraparound so that bit_ceil of an invalid value are not
|
157
|
+
// core constant expressions.
|
158
|
+
//
|
159
|
+
// BitCeilNonPowerOf2 triggers an overflow in constexpr contexts if we would
|
160
|
+
// undergo promotion to unsigned but not fit the result into T without
|
161
|
+
// truncation.
|
162
|
+
return has_single_bit(x) ? T{1} << (bit_width(x) - 1)
|
163
|
+
: numeric_internal::BitCeilNonPowerOf2(x);
|
164
|
+
}
|
165
|
+
#else // defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L
|
166
|
+
|
167
|
+
using std::bit_ceil;
|
168
|
+
using std::bit_floor;
|
169
|
+
using std::bit_width;
|
170
|
+
using std::has_single_bit;
|
171
|
+
|
172
|
+
#endif
|
173
|
+
|
174
|
+
ABSL_NAMESPACE_END
|
175
|
+
} // namespace absl
|
176
|
+
|
177
|
+
#endif // ABSL_NUMERIC_BITS_H_
|
@@ -23,8 +23,8 @@
|
|
23
23
|
#include <string>
|
24
24
|
#include <type_traits>
|
25
25
|
|
26
|
-
#include "absl/base/internal/bits.h"
|
27
26
|
#include "absl/base/optimization.h"
|
27
|
+
#include "absl/numeric/bits.h"
|
28
28
|
|
29
29
|
namespace absl {
|
30
30
|
ABSL_NAMESPACE_BEGIN
|
@@ -43,11 +43,11 @@ namespace {
|
|
43
43
|
inline ABSL_ATTRIBUTE_ALWAYS_INLINE int Fls128(uint128 n) {
|
44
44
|
if (uint64_t hi = Uint128High64(n)) {
|
45
45
|
ABSL_INTERNAL_ASSUME(hi != 0);
|
46
|
-
return 127 -
|
46
|
+
return 127 - countl_zero(hi);
|
47
47
|
}
|
48
48
|
const uint64_t low = Uint128Low64(n);
|
49
49
|
ABSL_INTERNAL_ASSUME(low != 0);
|
50
|
-
return 63 -
|
50
|
+
return 63 - countl_zero(low);
|
51
51
|
}
|
52
52
|
|
53
53
|
// Long division/modulo for uint128 implemented using the shift-subtract
|
@@ -0,0 +1,358 @@
|
|
1
|
+
// Copyright 2020 The Abseil Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef ABSL_NUMERIC_INTERNAL_BITS_H_
|
16
|
+
#define ABSL_NUMERIC_INTERNAL_BITS_H_
|
17
|
+
|
18
|
+
#include <cstdint>
|
19
|
+
#include <limits>
|
20
|
+
#include <type_traits>
|
21
|
+
|
22
|
+
// Clang on Windows has __builtin_clzll; otherwise we need to use the
|
23
|
+
// windows intrinsic functions.
|
24
|
+
#if defined(_MSC_VER) && !defined(__clang__)
|
25
|
+
#include <intrin.h>
|
26
|
+
#endif
|
27
|
+
|
28
|
+
#include "absl/base/attributes.h"
|
29
|
+
#include "absl/base/config.h"
|
30
|
+
|
31
|
+
#if defined(__GNUC__) && !defined(__clang__)
|
32
|
+
// GCC
|
33
|
+
#define ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(x) 1
|
34
|
+
#else
|
35
|
+
#define ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(x) ABSL_HAVE_BUILTIN(x)
|
36
|
+
#endif
|
37
|
+
|
38
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_popcountl) && \
|
39
|
+
ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_popcountll)
|
40
|
+
#define ABSL_INTERNAL_CONSTEXPR_POPCOUNT constexpr
|
41
|
+
#define ABSL_INTERNAL_HAS_CONSTEXPR_POPCOUNT 1
|
42
|
+
#else
|
43
|
+
#define ABSL_INTERNAL_CONSTEXPR_POPCOUNT
|
44
|
+
#define ABSL_INTERNAL_HAS_CONSTEXPR_POPCOUNT 0
|
45
|
+
#endif
|
46
|
+
|
47
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_clz) && \
|
48
|
+
ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_clzll)
|
49
|
+
#define ABSL_INTERNAL_CONSTEXPR_CLZ constexpr
|
50
|
+
#define ABSL_INTERNAL_HAS_CONSTEXPR_CLZ 1
|
51
|
+
#else
|
52
|
+
#define ABSL_INTERNAL_CONSTEXPR_CLZ
|
53
|
+
#define ABSL_INTERNAL_HAS_CONSTEXPR_CLZ 0
|
54
|
+
#endif
|
55
|
+
|
56
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_ctz) && \
|
57
|
+
ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_ctzll)
|
58
|
+
#define ABSL_INTERNAL_CONSTEXPR_CTZ constexpr
|
59
|
+
#define ABSL_INTERNAL_HAS_CONSTEXPR_CTZ 1
|
60
|
+
#else
|
61
|
+
#define ABSL_INTERNAL_CONSTEXPR_CTZ
|
62
|
+
#define ABSL_INTERNAL_HAS_CONSTEXPR_CTZ 0
|
63
|
+
#endif
|
64
|
+
|
65
|
+
namespace absl {
|
66
|
+
ABSL_NAMESPACE_BEGIN
|
67
|
+
namespace numeric_internal {
|
68
|
+
|
69
|
+
constexpr bool IsPowerOf2(unsigned int x) noexcept {
|
70
|
+
return x != 0 && (x & (x - 1)) == 0;
|
71
|
+
}
|
72
|
+
|
73
|
+
template <class T>
|
74
|
+
ABSL_MUST_USE_RESULT ABSL_ATTRIBUTE_ALWAYS_INLINE constexpr T RotateRight(
|
75
|
+
T x, int s) noexcept {
|
76
|
+
static_assert(std::is_unsigned<T>::value, "T must be unsigned");
|
77
|
+
static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
|
78
|
+
"T must have a power-of-2 size");
|
79
|
+
|
80
|
+
return static_cast<T>(x >> (s & (std::numeric_limits<T>::digits - 1))) |
|
81
|
+
static_cast<T>(x << ((-s) & (std::numeric_limits<T>::digits - 1)));
|
82
|
+
}
|
83
|
+
|
84
|
+
template <class T>
|
85
|
+
ABSL_MUST_USE_RESULT ABSL_ATTRIBUTE_ALWAYS_INLINE constexpr T RotateLeft(
|
86
|
+
T x, int s) noexcept {
|
87
|
+
static_assert(std::is_unsigned<T>::value, "T must be unsigned");
|
88
|
+
static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
|
89
|
+
"T must have a power-of-2 size");
|
90
|
+
|
91
|
+
return static_cast<T>(x << (s & (std::numeric_limits<T>::digits - 1))) |
|
92
|
+
static_cast<T>(x >> ((-s) & (std::numeric_limits<T>::digits - 1)));
|
93
|
+
}
|
94
|
+
|
95
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_POPCOUNT inline int
|
96
|
+
Popcount32(uint32_t x) noexcept {
|
97
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_popcount)
|
98
|
+
static_assert(sizeof(unsigned int) == sizeof(x),
|
99
|
+
"__builtin_popcount does not take 32-bit arg");
|
100
|
+
return __builtin_popcount(x);
|
101
|
+
#else
|
102
|
+
x -= ((x >> 1) & 0x55555555);
|
103
|
+
x = ((x >> 2) & 0x33333333) + (x & 0x33333333);
|
104
|
+
return static_cast<int>((((x + (x >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24);
|
105
|
+
#endif
|
106
|
+
}
|
107
|
+
|
108
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_POPCOUNT inline int
|
109
|
+
Popcount64(uint64_t x) noexcept {
|
110
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_popcountll)
|
111
|
+
static_assert(sizeof(unsigned long long) == sizeof(x), // NOLINT(runtime/int)
|
112
|
+
"__builtin_popcount does not take 64-bit arg");
|
113
|
+
return __builtin_popcountll(x);
|
114
|
+
#else
|
115
|
+
x -= (x >> 1) & 0x5555555555555555ULL;
|
116
|
+
x = ((x >> 2) & 0x3333333333333333ULL) + (x & 0x3333333333333333ULL);
|
117
|
+
return static_cast<int>(
|
118
|
+
(((x + (x >> 4)) & 0xF0F0F0F0F0F0F0FULL) * 0x101010101010101ULL) >> 56);
|
119
|
+
#endif
|
120
|
+
}
|
121
|
+
|
122
|
+
template <class T>
|
123
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_POPCOUNT inline int
|
124
|
+
Popcount(T x) noexcept {
|
125
|
+
static_assert(std::is_unsigned<T>::value, "T must be unsigned");
|
126
|
+
static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
|
127
|
+
"T must have a power-of-2 size");
|
128
|
+
static_assert(sizeof(x) <= sizeof(uint64_t), "T is too large");
|
129
|
+
return sizeof(x) <= sizeof(uint32_t) ? Popcount32(x) : Popcount64(x);
|
130
|
+
}
|
131
|
+
|
132
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline int
|
133
|
+
CountLeadingZeroes32(uint32_t x) {
|
134
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_clz)
|
135
|
+
// Use __builtin_clz, which uses the following instructions:
|
136
|
+
// x86: bsr, lzcnt
|
137
|
+
// ARM64: clz
|
138
|
+
// PPC: cntlzd
|
139
|
+
|
140
|
+
static_assert(sizeof(unsigned int) == sizeof(x),
|
141
|
+
"__builtin_clz does not take 32-bit arg");
|
142
|
+
// Handle 0 as a special case because __builtin_clz(0) is undefined.
|
143
|
+
return x == 0 ? 32 : __builtin_clz(x);
|
144
|
+
#elif defined(_MSC_VER) && !defined(__clang__)
|
145
|
+
unsigned long result = 0; // NOLINT(runtime/int)
|
146
|
+
if (_BitScanReverse(&result, x)) {
|
147
|
+
return 31 - result;
|
148
|
+
}
|
149
|
+
return 32;
|
150
|
+
#else
|
151
|
+
int zeroes = 28;
|
152
|
+
if (x >> 16) {
|
153
|
+
zeroes -= 16;
|
154
|
+
x >>= 16;
|
155
|
+
}
|
156
|
+
if (x >> 8) {
|
157
|
+
zeroes -= 8;
|
158
|
+
x >>= 8;
|
159
|
+
}
|
160
|
+
if (x >> 4) {
|
161
|
+
zeroes -= 4;
|
162
|
+
x >>= 4;
|
163
|
+
}
|
164
|
+
return "\4\3\2\2\1\1\1\1\0\0\0\0\0\0\0"[x] + zeroes;
|
165
|
+
#endif
|
166
|
+
}
|
167
|
+
|
168
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline int
|
169
|
+
CountLeadingZeroes16(uint16_t x) {
|
170
|
+
#if ABSL_HAVE_BUILTIN(__builtin_clzs)
|
171
|
+
static_assert(sizeof(unsigned short) == sizeof(x), // NOLINT(runtime/int)
|
172
|
+
"__builtin_clzs does not take 16-bit arg");
|
173
|
+
return x == 0 ? 16 : __builtin_clzs(x);
|
174
|
+
#else
|
175
|
+
return CountLeadingZeroes32(x) - 16;
|
176
|
+
#endif
|
177
|
+
}
|
178
|
+
|
179
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline int
|
180
|
+
CountLeadingZeroes64(uint64_t x) {
|
181
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_clzll)
|
182
|
+
// Use __builtin_clzll, which uses the following instructions:
|
183
|
+
// x86: bsr, lzcnt
|
184
|
+
// ARM64: clz
|
185
|
+
// PPC: cntlzd
|
186
|
+
static_assert(sizeof(unsigned long long) == sizeof(x), // NOLINT(runtime/int)
|
187
|
+
"__builtin_clzll does not take 64-bit arg");
|
188
|
+
|
189
|
+
// Handle 0 as a special case because __builtin_clzll(0) is undefined.
|
190
|
+
return x == 0 ? 64 : __builtin_clzll(x);
|
191
|
+
#elif defined(_MSC_VER) && !defined(__clang__) && \
|
192
|
+
(defined(_M_X64) || defined(_M_ARM64))
|
193
|
+
// MSVC does not have __buitin_clzll. Use _BitScanReverse64.
|
194
|
+
unsigned long result = 0; // NOLINT(runtime/int)
|
195
|
+
if (_BitScanReverse64(&result, x)) {
|
196
|
+
return 63 - result;
|
197
|
+
}
|
198
|
+
return 64;
|
199
|
+
#elif defined(_MSC_VER) && !defined(__clang__)
|
200
|
+
// MSVC does not have __buitin_clzll. Compose two calls to _BitScanReverse
|
201
|
+
unsigned long result = 0; // NOLINT(runtime/int)
|
202
|
+
if ((x >> 32) &&
|
203
|
+
_BitScanReverse(&result, static_cast<unsigned long>(x >> 32))) {
|
204
|
+
return 31 - result;
|
205
|
+
}
|
206
|
+
if (_BitScanReverse(&result, static_cast<unsigned long>(x))) {
|
207
|
+
return 63 - result;
|
208
|
+
}
|
209
|
+
return 64;
|
210
|
+
#else
|
211
|
+
int zeroes = 60;
|
212
|
+
if (x >> 32) {
|
213
|
+
zeroes -= 32;
|
214
|
+
x >>= 32;
|
215
|
+
}
|
216
|
+
if (x >> 16) {
|
217
|
+
zeroes -= 16;
|
218
|
+
x >>= 16;
|
219
|
+
}
|
220
|
+
if (x >> 8) {
|
221
|
+
zeroes -= 8;
|
222
|
+
x >>= 8;
|
223
|
+
}
|
224
|
+
if (x >> 4) {
|
225
|
+
zeroes -= 4;
|
226
|
+
x >>= 4;
|
227
|
+
}
|
228
|
+
return "\4\3\2\2\1\1\1\1\0\0\0\0\0\0\0"[x] + zeroes;
|
229
|
+
#endif
|
230
|
+
}
|
231
|
+
|
232
|
+
template <typename T>
|
233
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline int
|
234
|
+
CountLeadingZeroes(T x) {
|
235
|
+
static_assert(std::is_unsigned<T>::value, "T must be unsigned");
|
236
|
+
static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
|
237
|
+
"T must have a power-of-2 size");
|
238
|
+
static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
|
239
|
+
return sizeof(T) <= sizeof(uint16_t)
|
240
|
+
? CountLeadingZeroes16(static_cast<uint16_t>(x)) -
|
241
|
+
(std::numeric_limits<uint16_t>::digits -
|
242
|
+
std::numeric_limits<T>::digits)
|
243
|
+
: (sizeof(T) <= sizeof(uint32_t)
|
244
|
+
? CountLeadingZeroes32(static_cast<uint32_t>(x)) -
|
245
|
+
(std::numeric_limits<uint32_t>::digits -
|
246
|
+
std::numeric_limits<T>::digits)
|
247
|
+
: CountLeadingZeroes64(x));
|
248
|
+
}
|
249
|
+
|
250
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CTZ inline int
|
251
|
+
CountTrailingZeroesNonzero32(uint32_t x) {
|
252
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_ctz)
|
253
|
+
static_assert(sizeof(unsigned int) == sizeof(x),
|
254
|
+
"__builtin_ctz does not take 32-bit arg");
|
255
|
+
return __builtin_ctz(x);
|
256
|
+
#elif defined(_MSC_VER) && !defined(__clang__)
|
257
|
+
unsigned long result = 0; // NOLINT(runtime/int)
|
258
|
+
_BitScanForward(&result, x);
|
259
|
+
return result;
|
260
|
+
#else
|
261
|
+
int c = 31;
|
262
|
+
x &= ~x + 1;
|
263
|
+
if (x & 0x0000FFFF) c -= 16;
|
264
|
+
if (x & 0x00FF00FF) c -= 8;
|
265
|
+
if (x & 0x0F0F0F0F) c -= 4;
|
266
|
+
if (x & 0x33333333) c -= 2;
|
267
|
+
if (x & 0x55555555) c -= 1;
|
268
|
+
return c;
|
269
|
+
#endif
|
270
|
+
}
|
271
|
+
|
272
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CTZ inline int
|
273
|
+
CountTrailingZeroesNonzero64(uint64_t x) {
|
274
|
+
#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_ctzll)
|
275
|
+
static_assert(sizeof(unsigned long long) == sizeof(x), // NOLINT(runtime/int)
|
276
|
+
"__builtin_ctzll does not take 64-bit arg");
|
277
|
+
return __builtin_ctzll(x);
|
278
|
+
#elif defined(_MSC_VER) && !defined(__clang__) && \
|
279
|
+
(defined(_M_X64) || defined(_M_ARM64))
|
280
|
+
unsigned long result = 0; // NOLINT(runtime/int)
|
281
|
+
_BitScanForward64(&result, x);
|
282
|
+
return result;
|
283
|
+
#elif defined(_MSC_VER) && !defined(__clang__)
|
284
|
+
unsigned long result = 0; // NOLINT(runtime/int)
|
285
|
+
if (static_cast<uint32_t>(x) == 0) {
|
286
|
+
_BitScanForward(&result, static_cast<unsigned long>(x >> 32));
|
287
|
+
return result + 32;
|
288
|
+
}
|
289
|
+
_BitScanForward(&result, static_cast<unsigned long>(x));
|
290
|
+
return result;
|
291
|
+
#else
|
292
|
+
int c = 63;
|
293
|
+
x &= ~x + 1;
|
294
|
+
if (x & 0x00000000FFFFFFFF) c -= 32;
|
295
|
+
if (x & 0x0000FFFF0000FFFF) c -= 16;
|
296
|
+
if (x & 0x00FF00FF00FF00FF) c -= 8;
|
297
|
+
if (x & 0x0F0F0F0F0F0F0F0F) c -= 4;
|
298
|
+
if (x & 0x3333333333333333) c -= 2;
|
299
|
+
if (x & 0x5555555555555555) c -= 1;
|
300
|
+
return c;
|
301
|
+
#endif
|
302
|
+
}
|
303
|
+
|
304
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CTZ inline int
|
305
|
+
CountTrailingZeroesNonzero16(uint16_t x) {
|
306
|
+
#if ABSL_HAVE_BUILTIN(__builtin_ctzs)
|
307
|
+
static_assert(sizeof(unsigned short) == sizeof(x), // NOLINT(runtime/int)
|
308
|
+
"__builtin_ctzs does not take 16-bit arg");
|
309
|
+
return __builtin_ctzs(x);
|
310
|
+
#else
|
311
|
+
return CountTrailingZeroesNonzero32(x);
|
312
|
+
#endif
|
313
|
+
}
|
314
|
+
|
315
|
+
template <class T>
|
316
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CTZ inline int
|
317
|
+
CountTrailingZeroes(T x) noexcept {
|
318
|
+
static_assert(std::is_unsigned<T>::value, "T must be unsigned");
|
319
|
+
static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
|
320
|
+
"T must have a power-of-2 size");
|
321
|
+
static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
|
322
|
+
return x == 0 ? std::numeric_limits<T>::digits
|
323
|
+
: (sizeof(T) <= sizeof(uint16_t)
|
324
|
+
? CountTrailingZeroesNonzero16(static_cast<uint16_t>(x))
|
325
|
+
: (sizeof(T) <= sizeof(uint32_t)
|
326
|
+
? CountTrailingZeroesNonzero32(
|
327
|
+
static_cast<uint32_t>(x))
|
328
|
+
: CountTrailingZeroesNonzero64(x)));
|
329
|
+
}
|
330
|
+
|
331
|
+
// If T is narrower than unsigned, T{1} << bit_width will be promoted. We
|
332
|
+
// want to force it to wraparound so that bit_ceil of an invalid value are not
|
333
|
+
// core constant expressions.
|
334
|
+
template <class T>
|
335
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline
|
336
|
+
typename std::enable_if<std::is_unsigned<T>::value, T>::type
|
337
|
+
BitCeilPromotionHelper(T x, T promotion) {
|
338
|
+
return (T{1} << (x + promotion)) >> promotion;
|
339
|
+
}
|
340
|
+
|
341
|
+
template <class T>
|
342
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline
|
343
|
+
typename std::enable_if<std::is_unsigned<T>::value, T>::type
|
344
|
+
BitCeilNonPowerOf2(T x) {
|
345
|
+
// If T is narrower than unsigned, it undergoes promotion to unsigned when we
|
346
|
+
// shift. We calculate the number of bits added by the wider type.
|
347
|
+
return BitCeilPromotionHelper(
|
348
|
+
static_cast<T>(std::numeric_limits<T>::digits - CountLeadingZeroes(x)),
|
349
|
+
T{sizeof(T) >= sizeof(unsigned) ? 0
|
350
|
+
: std::numeric_limits<unsigned>::digits -
|
351
|
+
std::numeric_limits<T>::digits});
|
352
|
+
}
|
353
|
+
|
354
|
+
} // namespace numeric_internal
|
355
|
+
ABSL_NAMESPACE_END
|
356
|
+
} // namespace absl
|
357
|
+
|
358
|
+
#endif // ABSL_NUMERIC_INTERNAL_BITS_H_
|