grpc 1.84.0 → 1.85.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +40 -27
- data/include/grpc/event_engine/memory_allocator.h +1 -0
- data/include/grpc/grpc.h +3 -0
- data/include/grpc/grpc_security_constants.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +4 -0
- data/src/core/call/call_filters.h +10 -10
- data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
- data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
- data/src/core/call/filter_fusion.h +15 -15
- data/src/core/call/interception_chain.h +3 -3
- data/src/core/call/metadata_batch.cc +1 -0
- data/src/core/call/metadata_batch.h +45 -33
- data/src/core/call/parsed_metadata.h +3 -3
- data/src/core/call/request_buffer.cc +6 -6
- data/src/core/call/request_buffer.h +1 -1
- data/src/core/channelz/channel_trace.cc +5 -5
- data/src/core/channelz/channel_trace.h +1 -1
- data/src/core/channelz/channelz.cc +9 -9
- data/src/core/channelz/channelz.h +12 -12
- data/src/core/channelz/channelz_registry.cc +10 -10
- data/src/core/channelz/ztrace_collector.h +5 -5
- data/src/core/client_channel/client_channel.cc +4 -4
- data/src/core/client_channel/client_channel_filter.cc +14 -14
- data/src/core/client_channel/global_subchannel_pool.cc +4 -4
- data/src/core/client_channel/subchannel.cc +24 -23
- data/src/core/client_channel/subchannel_stream_client.cc +5 -5
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
- data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
- data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
- data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
- data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
- data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
- data/src/core/credentials/transport/tls/tls_utils.h +9 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
- data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
- data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
- data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
- data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
- data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
- data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
- data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
- data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
- data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
- data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
- data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
- data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
- data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
- data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
- data/src/core/handshaker/handshaker.cc +4 -4
- data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
- data/src/core/handshaker/security/secure_endpoint.cc +13 -13
- data/src/core/handshaker/security/security_handshaker.cc +6 -6
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
- data/src/core/lib/channel/channel_args.cc +20 -0
- data/src/core/lib/channel/channel_args.h +17 -17
- data/src/core/lib/channel/promise_based_filter.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.h +66 -27
- data/src/core/lib/debug/trace_flags.cc +2 -0
- data/src/core/lib/debug/trace_flags.h +1 -0
- data/src/core/lib/event_engine/ares_resolver.cc +14 -14
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
- data/src/core/lib/event_engine/default_event_engine.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
- data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
- data/src/core/lib/experiments/experiments.cc +48 -0
- data/src/core/lib/experiments/experiments.h +24 -0
- data/src/core/lib/iomgr/buffer_list.cc +3 -3
- data/src/core/lib/iomgr/buffer_list.h +1 -1
- data/src/core/lib/iomgr/combiner.cc +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_posix.cc +7 -7
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +1 -1
- data/src/core/lib/promise/arena_promise.h +7 -7
- data/src/core/lib/promise/detail/promise_factory.h +8 -8
- data/src/core/lib/promise/detail/promise_like.h +4 -4
- data/src/core/lib/promise/inter_activity_latch.h +6 -6
- data/src/core/lib/promise/inter_activity_pipe.h +1 -1
- data/src/core/lib/promise/observable.h +3 -3
- data/src/core/lib/promise/party.cc +1 -1
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resource_quota/arena.h +3 -3
- data/src/core/lib/resource_quota/memory_quota.cc +16 -16
- data/src/core/lib/resource_quota/memory_quota.h +1 -1
- data/src/core/lib/resource_quota/thread_quota.cc +3 -3
- data/src/core/lib/security/authorization/audit_logging.cc +5 -5
- data/src/core/lib/security/authorization/authorization_engine.h +1 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
- data/src/core/lib/security/authorization/matchers.h +1 -1
- data/src/core/lib/surface/call.cc +8 -7
- data/src/core/lib/surface/call.h +3 -3
- data/src/core/lib/surface/call_utils.h +4 -0
- data/src/core/lib/surface/channel.cc +1 -1
- data/src/core/lib/surface/channel.h +1 -1
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/init.cc +7 -7
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/legacy_channel.cc +2 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
- data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
- data/src/core/load_balancing/autosharding/autosharding.h +78 -0
- data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
- data/src/core/load_balancing/health_check_client.cc +7 -7
- data/src/core/load_balancing/lb_policy.cc +1 -1
- data/src/core/load_balancing/oob_backend_metric.cc +5 -5
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
- data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
- data/src/core/load_balancing/rls/rls.cc +23 -17
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
- data/src/core/load_balancing/xds/cds.cc +6 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
- data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
- data/src/core/mitigation_engine/mitigation_engine.h +28 -4
- data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
- data/src/core/resolver/dns/dns_resolver.cc +7 -7
- data/src/core/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
- data/src/core/server/server.cc +30 -30
- data/src/core/server/server.h +4 -3
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
- data/src/core/telemetry/default_tcp_tracer.cc +1 -1
- data/src/core/telemetry/instrument.cc +30 -16
- data/src/core/telemetry/instrument.h +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
- data/src/core/tsi/ssl_transport_security.cc +46 -13
- data/src/core/tsi/ssl_transport_security.h +7 -0
- data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
- data/src/core/util/event_log.cc +3 -3
- data/src/core/util/http_client/httpcli.cc +5 -5
- data/src/core/util/http_client/httpcli.h +1 -1
- data/src/core/util/json/json_object_loader.cc +7 -0
- data/src/core/util/json/json_object_loader.h +17 -2
- data/src/core/util/latent_see.cc +123 -36
- data/src/core/util/latent_see.h +14 -1
- data/src/core/util/mpscq.cc +1 -1
- data/src/core/util/notification.h +4 -4
- data/src/core/util/sync.h +20 -6
- data/src/core/util/table.h +20 -22
- data/src/core/util/work_serializer.cc +2 -2
- data/src/core/xds/grpc/blackboard.cc +4 -3
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
- data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
- data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_endpoint.cc +1 -1
- data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
- data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
- data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
- data/src/core/xds/grpc/xds_matcher.h +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
- data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
- data/src/core/xds/xds_client/lrs_client.cc +22 -19
- data/src/core/xds/xds_client/xds_client.cc +19 -16
- data/src/core/xds/xds_client/xds_transport.h +49 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -1
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
- data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
- data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
- data/third_party/abseil-cpp/absl/base/casts.h +135 -2
- data/third_party/abseil-cpp/absl/base/config.h +63 -41
- data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
- data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
- data/third_party/abseil-cpp/absl/base/macros.h +76 -37
- data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
- data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
- data/third_party/abseil-cpp/absl/base/options.h +46 -18
- data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
- data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
- data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
- data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
- data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
- data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
- data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
- data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
- data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
- data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
- data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
- data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
- data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
- data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
- data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
- data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
- data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
- data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
- data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
- data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
- data/third_party/abseil-cpp/absl/log/log.h +2 -2
- data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
- data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
- data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
- data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
- data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
- data/third_party/abseil-cpp/absl/status/status.cc +66 -70
- data/third_party/abseil-cpp/absl/status/status.h +254 -23
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
- data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
- data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
- data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
- data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
- data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
- data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
- data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
- data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
- data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
- data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
- data/third_party/abseil-cpp/absl/time/clock.h +3 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
- data/third_party/abseil-cpp/absl/time/format.cc +3 -10
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- data/third_party/abseil-cpp/absl/time/time.cc +4 -4
- data/third_party/abseil-cpp/absl/time/time.h +14 -13
- data/third_party/abseil-cpp/absl/types/compare.h +64 -63
- data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
- data/third_party/abseil-cpp/absl/types/optional.h +31 -4
- data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
- data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
- data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
- data/third_party/abseil-cpp/absl/types/span.h +67 -38
- data/third_party/abseil-cpp/absl/types/variant.h +75 -18
- data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
- data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
- data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
- data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
- data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
- data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
- data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
- data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
- data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
- data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
- data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
- data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
- data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
- data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
- data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
- data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
- data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
- data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
- data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
- data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
- data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
- data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
- data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
- data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
- data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
- data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
- data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
- data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
- data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
- data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
- data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
- data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
- data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
- data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
- data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
- data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
- data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
- data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
- data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
- data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
- data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
- data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
- data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
- data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
- data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
- data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
- data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
- data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
- data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
- data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
- data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
- data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
- data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
- data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
- data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
- data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
- data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
- data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
- data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
- data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
- data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
- data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
- data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
- data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
- data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
- data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
- data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
- data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
- data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
- data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
- data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
- data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
- data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
- data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
- data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
- data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
- data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
- data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
- data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
- data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
- data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
- data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
- data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
- data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
- data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
- data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
- data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
- data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
- data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
- data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
- data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
- data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
- data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
- data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
- data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
- data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
- data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
- data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
- data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
- data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
- data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
- data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
- data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
- data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
- data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
- data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
- data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
- data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
- data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
- data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
- data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
- data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
- data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
- data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
- data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
- data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
- data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
- data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
- data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
- data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
- data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
- data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
- data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
- data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
- data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
- data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
- data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
- data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
- data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
- data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
- data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
- data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
- data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
- data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
- data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
- data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
- data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
- data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
- data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
- data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
- data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
- data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
- data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
- data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
- data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
- data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
- data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
- data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
- data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
- data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
- data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
- data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
- data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
- data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
- data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
- data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
- data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
- data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
- data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
- data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
- data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
- data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
- data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
- data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
- data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
- data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
- data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
- data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
- data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
- data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
- data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
- data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
- data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
- data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
- data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
- data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
- data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
- data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
- data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
- data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
- data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
- data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
- data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
- data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
- data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
- data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
- data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
- data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
- data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
- data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
- data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
- data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
- data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
- data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
- data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
- data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
- data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
- data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
- data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
- data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
- data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
- data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
- data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
- data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
- data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
- data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
- data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
- data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
- data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
- data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
- data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
- data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
- data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
- data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
- data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
- data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
- data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
- data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
- data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
- data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
- data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
- data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
- data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
- data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
- data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
- data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
- data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
- data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
- data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
- data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
- data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
- data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
- data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
- data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
- data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
- data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
- data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
- data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
- data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
- data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
- data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
- data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
- data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
- data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
- data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
- data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
- data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
- data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
- data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
- data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
- data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
- data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
- data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
- data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
- data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
- data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
- data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
- data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
- data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
- data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
- data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
- data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
- data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
- data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
- data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
- data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
- data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
- data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
- data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
- data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
- data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
- data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
- data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
- data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
- data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
- data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
- data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
- data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
- data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
- data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
- data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
- data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
- data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
- data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
- data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
- data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
- data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
- data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
- data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
- data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
- data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
- data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
- data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
- data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
- data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
- data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
- data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
- data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
- data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
- data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
- data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
- data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
- data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
- data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
- data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
- data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
- data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
- data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
- data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
- data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
- data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
- data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
- data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
- data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
- data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
- data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
- data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
- data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
- data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
- data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
- data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
- data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
- data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
- data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
- data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
- data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
- data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
- data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
- data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
- data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
- data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
- data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
- data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
- data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
- data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
- data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
- data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
- data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
- data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
- data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
- data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
- metadata +77 -52
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
- data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
- data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
- data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
- data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
- data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
- data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
- data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
- data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
- data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
- data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
- data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
- data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
- data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
- data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
- data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
- data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
- data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
|
@@ -12,43 +12,67 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
+
#include <openssl/base.h>
|
|
15
16
|
#include <openssl/x509.h>
|
|
16
17
|
|
|
17
18
|
#include <assert.h>
|
|
18
19
|
|
|
20
|
+
#include <algorithm>
|
|
21
|
+
#include <optional>
|
|
22
|
+
#include <utility>
|
|
23
|
+
|
|
19
24
|
#include <openssl/mem.h>
|
|
20
25
|
#include <openssl/obj.h>
|
|
26
|
+
#include <openssl/span.h>
|
|
21
27
|
#include <openssl/stack.h>
|
|
22
28
|
|
|
23
29
|
#include "../internal.h"
|
|
30
|
+
#include "../mem_internal.h"
|
|
24
31
|
#include "internal.h"
|
|
25
32
|
|
|
26
33
|
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
BSSL_NAMESPACE_BEGIN
|
|
35
|
+
namespace {
|
|
36
|
+
|
|
37
|
+
// This file computes the X.509 policy graph, as described in RFC 9618.
|
|
38
|
+
// Implementation notes:
|
|
29
39
|
//
|
|
30
40
|
// (1) It does not track "qualifier_set". This is not needed as it is not
|
|
31
41
|
// output by this implementation.
|
|
32
42
|
//
|
|
33
|
-
// (2)
|
|
34
|
-
// policy matches multiple parents, RFC 5280 makes a separate node for
|
|
35
|
-
// each parent. This representation condenses them into one node with
|
|
36
|
-
// multiple parents. Thus we refer to this structure as a "policy graph",
|
|
37
|
-
// rather than a "policy tree".
|
|
38
|
-
//
|
|
39
|
-
// (3) "expected_policy_set" is not tracked explicitly and built temporarily
|
|
43
|
+
// (2) "expected_policy_set" is not tracked explicitly and built temporarily
|
|
40
44
|
// as part of building the graph.
|
|
41
45
|
//
|
|
42
|
-
// (
|
|
46
|
+
// (3) anyPolicy nodes are not tracked explicitly.
|
|
43
47
|
//
|
|
44
|
-
// (
|
|
48
|
+
// (4) Some pruning steps are deferred to when policies are evaluated, as a
|
|
45
49
|
// reachability pass.
|
|
46
50
|
|
|
47
|
-
|
|
51
|
+
bool is_any_policy(const ASN1_OBJECT *obj) {
|
|
52
|
+
return OBJ_obj2nid(obj) == NID_any_policy;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// An X509PolicyNode is a node in the policy graph. It corresponds to a node
|
|
48
56
|
// from RFC 5280, section 6.1.2, step (a), but we store some fields differently.
|
|
49
|
-
|
|
57
|
+
struct X509PolicyNode {
|
|
58
|
+
static std::optional<X509PolicyNode> Create(const ASN1_OBJECT *policy) {
|
|
59
|
+
assert(!is_any_policy(policy));
|
|
60
|
+
X509PolicyNode node;
|
|
61
|
+
node.policy.reset(OBJ_dup(policy));
|
|
62
|
+
if (node.policy == nullptr) {
|
|
63
|
+
return std::nullopt;
|
|
64
|
+
}
|
|
65
|
+
return node;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
bool operator<(const X509PolicyNode &other) const {
|
|
69
|
+
return OBJ_cmp(policy.get(), other.policy.get()) < 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
bool parent_is_any_policy() const { return parent_policies.empty(); }
|
|
73
|
+
|
|
50
74
|
// policy is the "valid_policy" field from RFC 5280.
|
|
51
|
-
ASN1_OBJECT
|
|
75
|
+
UniquePtr<ASN1_OBJECT> policy;
|
|
52
76
|
|
|
53
77
|
// parent_policies, if non-empty, is the list of "valid_policy" values for all
|
|
54
78
|
// nodes which are a parent of this node. In this case, no entry in this list
|
|
@@ -56,625 +80,502 @@ typedef struct x509_policy_node_st {
|
|
|
56
80
|
// duplicates if the corresponding certificate had duplicate mappings.
|
|
57
81
|
//
|
|
58
82
|
// If empty, this node has a single parent, anyPolicy. The node is then a root
|
|
59
|
-
//
|
|
60
|
-
//
|
|
83
|
+
// policy, and is in authorities-constrained-policy-set if it has a path to a
|
|
84
|
+
// leaf node.
|
|
61
85
|
//
|
|
62
86
|
// Note it is not possible for a policy to have both anyPolicy and a
|
|
63
87
|
// concrete policy as a parent. Section 6.1.3, step (d.1.ii) only runs if
|
|
64
88
|
// there was no match in step (d.1.i). We do not need to represent a parent
|
|
65
89
|
// list of, say, {anyPolicy, OID1, OID2}.
|
|
66
|
-
|
|
90
|
+
Vector<UniquePtr<ASN1_OBJECT>> parent_policies;
|
|
67
91
|
|
|
68
|
-
// mapped is
|
|
69
|
-
|
|
70
|
-
int mapped;
|
|
92
|
+
// mapped is whether this node matches a policy mapping in the certificate.
|
|
93
|
+
bool mapped = false;
|
|
71
94
|
|
|
72
|
-
// reachable is
|
|
73
|
-
// end-entity certificate. It is computed during
|
|
74
|
-
|
|
75
|
-
}
|
|
95
|
+
// reachable is whether this node is reachable from some valid policy in the
|
|
96
|
+
// end-entity certificate. It is computed during `has_explicit_policy`.
|
|
97
|
+
bool reachable = false;
|
|
98
|
+
};
|
|
76
99
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
// An X509_POLICY_LEVEL is the collection of nodes at the same depth in the
|
|
100
|
+
// An X509PolicyLevel is the collection of nodes at the same depth in the
|
|
80
101
|
// policy graph. This structure can also be used to represent a level's
|
|
81
|
-
// "expected_policy_set" values. See
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
102
|
+
// "expected_policy_set" values. See `process_policy_mappings`.
|
|
103
|
+
class X509PolicyLevel {
|
|
104
|
+
public:
|
|
105
|
+
bool has_any_policy() const { return has_any_policy_; }
|
|
106
|
+
bool is_empty() const { return !has_any_policy_ && nodes_.empty(); }
|
|
107
|
+
Span<const X509PolicyNode> nodes() const { return nodes_; }
|
|
86
108
|
|
|
87
|
-
|
|
88
|
-
// otherwise.
|
|
89
|
-
int has_any_policy;
|
|
90
|
-
} X509_POLICY_LEVEL;
|
|
109
|
+
void set_has_any_policy(bool v) { has_any_policy_ = v; }
|
|
91
110
|
|
|
92
|
-
|
|
111
|
+
// Although this is mutable, callers may not modify the node's policy.
|
|
112
|
+
Span<X509PolicyNode> nodes() { return Span(nodes_); }
|
|
93
113
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
static void x509_policy_node_free(X509_POLICY_NODE *node) {
|
|
99
|
-
if (node != NULL) {
|
|
100
|
-
ASN1_OBJECT_free(node->policy);
|
|
101
|
-
sk_ASN1_OBJECT_pop_free(node->parent_policies, ASN1_OBJECT_free);
|
|
102
|
-
OPENSSL_free(node);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
static X509_POLICY_NODE *x509_policy_node_new(const ASN1_OBJECT *policy) {
|
|
107
|
-
assert(!is_any_policy(policy));
|
|
108
|
-
X509_POLICY_NODE *node = reinterpret_cast<X509_POLICY_NODE *>(
|
|
109
|
-
OPENSSL_zalloc(sizeof(X509_POLICY_NODE)));
|
|
110
|
-
if (node == NULL) {
|
|
111
|
-
return NULL;
|
|
112
|
-
}
|
|
113
|
-
node->policy = OBJ_dup(policy);
|
|
114
|
-
node->parent_policies = sk_ASN1_OBJECT_new_null();
|
|
115
|
-
if (node->policy == NULL || node->parent_policies == NULL) {
|
|
116
|
-
x509_policy_node_free(node);
|
|
117
|
-
return NULL;
|
|
114
|
+
void Clear() {
|
|
115
|
+
has_any_policy_ = false;
|
|
116
|
+
nodes_.clear();
|
|
118
117
|
}
|
|
119
|
-
return node;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
static int x509_policy_node_cmp(const X509_POLICY_NODE *const *a,
|
|
123
|
-
const X509_POLICY_NODE *const *b) {
|
|
124
|
-
return OBJ_cmp((*a)->policy, (*b)->policy);
|
|
125
|
-
}
|
|
126
118
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
119
|
+
// Find returns the node corresponding to `policy`, or nullptr if none exists.
|
|
120
|
+
X509PolicyNode *Find(const ASN1_OBJECT *policy) {
|
|
121
|
+
// The list is sorted, so we can binary search.
|
|
122
|
+
auto it = std::lower_bound(
|
|
123
|
+
nodes_.begin(), nodes_.end(), policy,
|
|
124
|
+
[](const X509PolicyNode &node, const ASN1_OBJECT *obj) {
|
|
125
|
+
return OBJ_cmp(node.policy.get(), obj) < 0;
|
|
126
|
+
});
|
|
127
|
+
if (it == nodes_.end() || OBJ_cmp(it->policy.get(), policy) != 0) {
|
|
128
|
+
return nullptr;
|
|
129
|
+
}
|
|
130
|
+
return &*it;
|
|
131
131
|
}
|
|
132
|
-
}
|
|
133
132
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
133
|
+
// AddNodes adds the nodes in `nodes`. It returns true on success and false on
|
|
134
|
+
// error. No policy in `nodes` may already be present. This method leaves
|
|
135
|
+
// the objects in `nodes` in a moved-from state.
|
|
136
|
+
//
|
|
137
|
+
// This method re-sorts the nodes, so it runs in time proportional to the
|
|
138
|
+
// total size of the level. However, each level is only added to three times
|
|
139
|
+
// in the course of policy validation.
|
|
140
|
+
bool AddNodes(Span<X509PolicyNode> nodes) {
|
|
141
|
+
if (!nodes_.AppendMove(nodes)) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
std::sort(nodes_.begin(), nodes_.end());
|
|
145
|
+
#if !defined(NDEBUG)
|
|
146
|
+
// There should be no duplicate nodes.
|
|
147
|
+
for (size_t i = 1; i < nodes_.size(); i++) {
|
|
148
|
+
assert(OBJ_cmp(nodes_[i - 1].policy.get(), nodes_[i].policy.get()) != 0);
|
|
149
|
+
}
|
|
150
|
+
#endif
|
|
151
|
+
return true;
|
|
144
152
|
}
|
|
145
|
-
return level;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
static int x509_policy_level_is_empty(const X509_POLICY_LEVEL *level) {
|
|
149
|
-
return !level->has_any_policy && sk_X509_POLICY_NODE_num(level->nodes) == 0;
|
|
150
|
-
}
|
|
151
153
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
// EraseNodesIf removes all nodes that satisfy the predicate `pred`.
|
|
155
|
+
template <typename Pred>
|
|
156
|
+
void EraseNodesIf(Pred pred) {
|
|
157
|
+
nodes_.EraseIf(pred);
|
|
156
158
|
}
|
|
157
|
-
sk_X509_POLICY_NODE_zero(level->nodes);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// x509_policy_level_find returns the node in |level| corresponding to |policy|,
|
|
161
|
-
// or NULL if none exists.
|
|
162
|
-
static X509_POLICY_NODE *x509_policy_level_find(X509_POLICY_LEVEL *level,
|
|
163
|
-
const ASN1_OBJECT *policy) {
|
|
164
|
-
assert(sk_X509_POLICY_NODE_is_sorted(level->nodes));
|
|
165
|
-
X509_POLICY_NODE node;
|
|
166
|
-
node.policy = (ASN1_OBJECT *)policy;
|
|
167
|
-
size_t idx;
|
|
168
|
-
if (!sk_X509_POLICY_NODE_find(level->nodes, &idx, &node)) {
|
|
169
|
-
return NULL;
|
|
170
|
-
}
|
|
171
|
-
return sk_X509_POLICY_NODE_value(level->nodes, idx);
|
|
172
|
-
}
|
|
173
159
|
|
|
174
|
-
|
|
175
|
-
//
|
|
176
|
-
//
|
|
177
|
-
|
|
178
|
-
//
|
|
179
|
-
// This function is used to add nodes to |level| in bulk, and avoid resorting
|
|
180
|
-
// |level| after each addition.
|
|
181
|
-
static int x509_policy_level_add_nodes(X509_POLICY_LEVEL *level,
|
|
182
|
-
STACK_OF(X509_POLICY_NODE) *nodes) {
|
|
183
|
-
for (size_t i = 0; i < sk_X509_POLICY_NODE_num(nodes); i++) {
|
|
184
|
-
X509_POLICY_NODE *node = sk_X509_POLICY_NODE_value(nodes, i);
|
|
185
|
-
if (!sk_X509_POLICY_NODE_push(level->nodes, node)) {
|
|
186
|
-
return 0;
|
|
187
|
-
}
|
|
188
|
-
sk_X509_POLICY_NODE_set(nodes, i, NULL);
|
|
189
|
-
}
|
|
190
|
-
sk_X509_POLICY_NODE_sort(level->nodes);
|
|
160
|
+
private:
|
|
161
|
+
// nodes is the list of nodes at this depth, except for the anyPolicy node, if
|
|
162
|
+
// any. This list is sorted by policy OID for efficient lookup.
|
|
163
|
+
Vector<X509PolicyNode> nodes_;
|
|
191
164
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
assert(OBJ_cmp(sk_X509_POLICY_NODE_value(level->nodes, i - 1)->policy,
|
|
196
|
-
sk_X509_POLICY_NODE_value(level->nodes, i)->policy) != 0);
|
|
197
|
-
}
|
|
198
|
-
#endif
|
|
199
|
-
return 1;
|
|
200
|
-
}
|
|
165
|
+
// has_any_policy is whether there is an anyPolicy node at this depth.
|
|
166
|
+
bool has_any_policy_ = false;
|
|
167
|
+
};
|
|
201
168
|
|
|
202
|
-
|
|
203
|
-
const POLICYINFO *const *b) {
|
|
169
|
+
int policyinfo_cmp(const POLICYINFO *const *a, const POLICYINFO *const *b) {
|
|
204
170
|
return OBJ_cmp((*a)->policyid, (*b)->policyid);
|
|
205
171
|
}
|
|
206
172
|
|
|
207
|
-
|
|
208
|
-
const CERTIFICATEPOLICIES *policies =
|
|
209
|
-
reinterpret_cast<CERTIFICATEPOLICIES *>(data);
|
|
210
|
-
assert(sk_POLICYINFO_is_sorted(policies));
|
|
211
|
-
POLICYINFO info;
|
|
212
|
-
info.policyid = node->policy;
|
|
213
|
-
if (sk_POLICYINFO_find(policies, NULL, &info)) {
|
|
214
|
-
return 0;
|
|
215
|
-
}
|
|
216
|
-
x509_policy_node_free(node);
|
|
217
|
-
return 1;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// process_certificate_policies updates |level| to incorporate |x509|'s
|
|
173
|
+
// process_certificate_policies updates `level` to incorporate `x509`'s
|
|
221
174
|
// certificate policies extension. This implements steps (d) and (e) of RFC
|
|
222
|
-
// 5280, section 6.1.3.
|
|
175
|
+
// 5280, section 6.1.3. `level` must contain the previous level's
|
|
223
176
|
// "expected_policy_set" information. For all but the top-most level, this is
|
|
224
|
-
// the output of
|
|
177
|
+
// the output of `process_policy_mappings`. `any_policy_allowed` specifies
|
|
225
178
|
// whether anyPolicy is allowed or inhibited, taking into account the exception
|
|
226
179
|
// for self-issued certificates.
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
int any_policy_allowed) {
|
|
230
|
-
int ret = 0;
|
|
180
|
+
bool process_certificate_policies(const X509 *x509, X509PolicyLevel *level,
|
|
181
|
+
int any_policy_allowed) {
|
|
231
182
|
int critical;
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
if (critical != -1) {
|
|
239
|
-
return 0; // Syntax error in the extension.
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// RFC 5280, section 6.1.3, step (e).
|
|
243
|
-
x509_policy_level_clear(level);
|
|
244
|
-
return 1;
|
|
183
|
+
UniquePtr<CERTIFICATEPOLICIES> policies(
|
|
184
|
+
reinterpret_cast<CERTIFICATEPOLICIES *>(X509_get_ext_d2i(
|
|
185
|
+
x509, NID_certificate_policies, &critical, nullptr)));
|
|
186
|
+
if (policies == nullptr) {
|
|
187
|
+
if (critical != -1) {
|
|
188
|
+
return false; // Syntax error in the extension.
|
|
245
189
|
}
|
|
246
190
|
|
|
247
|
-
//
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
goto err;
|
|
252
|
-
}
|
|
191
|
+
// RFC 5280, section 6.1.3, step (e).
|
|
192
|
+
level->Clear();
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
253
195
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
cert_has_any_policy = 1;
|
|
261
|
-
}
|
|
262
|
-
if (i > 0 && OBJ_cmp(sk_POLICYINFO_value(policies, i - 1)->policyid,
|
|
263
|
-
policy->policyid) == 0) {
|
|
264
|
-
// Per RFC 5280, section 4.2.1.4, |policies| may not have duplicates.
|
|
265
|
-
OPENSSL_PUT_ERROR(X509, X509_R_INVALID_POLICY_EXTENSION);
|
|
266
|
-
goto err;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
196
|
+
// certificatePolicies may not be empty. See RFC 5280, section 4.2.1.4.
|
|
197
|
+
// TODO(https://crbug.com/boringssl/443): Move this check into the parser.
|
|
198
|
+
if (sk_POLICYINFO_num(policies.get()) == 0) {
|
|
199
|
+
OPENSSL_PUT_ERROR(X509, X509_R_INVALID_POLICY_EXTENSION);
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
269
202
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
const
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
203
|
+
sk_POLICYINFO_set_cmp_func(policies.get(), policyinfo_cmp);
|
|
204
|
+
sk_POLICYINFO_sort(policies.get());
|
|
205
|
+
bool cert_has_any_policy = false;
|
|
206
|
+
for (size_t i = 0; i < sk_POLICYINFO_num(policies.get()); i++) {
|
|
207
|
+
const POLICYINFO *policy = sk_POLICYINFO_value(policies.get(), i);
|
|
208
|
+
if (is_any_policy(policy->policyid)) {
|
|
209
|
+
cert_has_any_policy = true;
|
|
210
|
+
}
|
|
211
|
+
if (i > 0 && OBJ_cmp(sk_POLICYINFO_value(policies.get(), i - 1)->policyid,
|
|
212
|
+
policy->policyid) == 0) {
|
|
213
|
+
// Per RFC 5280, section 4.2.1.4, `policies` may not have duplicates.
|
|
214
|
+
OPENSSL_PUT_ERROR(X509, X509_R_INVALID_POLICY_EXTENSION);
|
|
215
|
+
return false;
|
|
283
216
|
}
|
|
217
|
+
}
|
|
284
218
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
219
|
+
// This does the same thing as RFC 5280, section 6.1.3, step (d), though in
|
|
220
|
+
// a slightly different order. `level` currently contains
|
|
221
|
+
// "expected_policy_set" values of the previous level. See
|
|
222
|
+
// `process_policy_mappings` for details.
|
|
223
|
+
const bool previous_level_has_any_policy = level->has_any_policy();
|
|
224
|
+
|
|
225
|
+
// First, we handle steps (d.1.i) and (d.2). The net effect of these two
|
|
226
|
+
// steps is to intersect `level` with `policies`, ignoring anyPolicy if it
|
|
227
|
+
// is inhibited.
|
|
228
|
+
if (!cert_has_any_policy || !any_policy_allowed) {
|
|
229
|
+
level->EraseNodesIf([&](const X509PolicyNode &node) {
|
|
230
|
+
assert(sk_POLICYINFO_is_sorted(policies.get()));
|
|
231
|
+
// Erase the node if it not present in the current certificate.
|
|
232
|
+
POLICYINFO info;
|
|
233
|
+
info.policyid = node.policy.get();
|
|
234
|
+
return !sk_POLICYINFO_find(policies.get(), nullptr, &info);
|
|
235
|
+
});
|
|
236
|
+
level->set_has_any_policy(false);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Step (d.1.ii) may attach new nodes to the previous level's anyPolicy
|
|
240
|
+
// node.
|
|
241
|
+
if (previous_level_has_any_policy) {
|
|
242
|
+
Vector<X509PolicyNode> new_nodes;
|
|
243
|
+
for (const POLICYINFO *policy : policies.get()) {
|
|
244
|
+
// Though we've reordered the steps slightly, `policy` is in `level` if
|
|
245
|
+
// and only if it would have been a match in step (d.1.ii).
|
|
246
|
+
if (!is_any_policy(policy->policyid) &&
|
|
247
|
+
level->Find(policy->policyid) == nullptr) {
|
|
248
|
+
auto node = X509PolicyNode::Create(policy->policyid);
|
|
249
|
+
if (!node.has_value() || !new_nodes.Push(*std::move(node))) {
|
|
250
|
+
return false;
|
|
304
251
|
}
|
|
305
252
|
}
|
|
306
|
-
if (!x509_policy_level_add_nodes(level, new_nodes)) {
|
|
307
|
-
goto err;
|
|
308
|
-
}
|
|
309
253
|
}
|
|
310
|
-
|
|
311
|
-
|
|
254
|
+
if (!level->AddNodes(Span(new_nodes))) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
312
257
|
}
|
|
313
258
|
|
|
314
|
-
|
|
315
|
-
sk_X509_POLICY_NODE_pop_free(new_nodes, x509_policy_node_free);
|
|
316
|
-
CERTIFICATEPOLICIES_free(policies);
|
|
317
|
-
return ret;
|
|
259
|
+
return true;
|
|
318
260
|
}
|
|
319
261
|
|
|
320
|
-
|
|
321
|
-
|
|
262
|
+
int compare_issuer_policy(const POLICY_MAPPING *const *a,
|
|
263
|
+
const POLICY_MAPPING *const *b) {
|
|
322
264
|
return OBJ_cmp((*a)->issuerDomainPolicy, (*b)->issuerDomainPolicy);
|
|
323
265
|
}
|
|
324
266
|
|
|
325
|
-
|
|
326
|
-
|
|
267
|
+
int compare_subject_policy(const POLICY_MAPPING *const *a,
|
|
268
|
+
const POLICY_MAPPING *const *b) {
|
|
327
269
|
return OBJ_cmp((*a)->subjectDomainPolicy, (*b)->subjectDomainPolicy);
|
|
328
270
|
}
|
|
329
271
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
// |mappings| must have been sorted by |compare_issuer_policy|.
|
|
333
|
-
assert(sk_POLICY_MAPPING_is_sorted(mappings));
|
|
334
|
-
POLICY_MAPPING mapping;
|
|
335
|
-
mapping.issuerDomainPolicy = node->policy;
|
|
336
|
-
if (!sk_POLICY_MAPPING_find(mappings, /*out_index=*/NULL, &mapping)) {
|
|
337
|
-
return 0;
|
|
338
|
-
}
|
|
339
|
-
x509_policy_node_free(node);
|
|
340
|
-
return 1;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// process_policy_mappings processes the policy mappings extension of |cert|,
|
|
344
|
-
// whose corresponding graph level is |level|. |mapping_allowed| specifies
|
|
272
|
+
// process_policy_mappings processes the policy mappings extension of `cert`,
|
|
273
|
+
// whose corresponding graph level is `level`. `mapping_allowed` specifies
|
|
345
274
|
// whether policy mapping is inhibited at this point. On success, it returns an
|
|
346
|
-
//
|
|
347
|
-
//
|
|
275
|
+
// `X509PolicyLevel` containing the "expected_policy_set" for `level`. On error,
|
|
276
|
+
// it returns std::nullopt. This implements steps (a) and (b) of RFC 5280,
|
|
348
277
|
// section 6.1.4.
|
|
349
278
|
//
|
|
350
|
-
// We represent the "expected_policy_set" as an
|
|
351
|
-
//
|
|
279
|
+
// We represent the "expected_policy_set" as an `X509PolicyLevel`.
|
|
280
|
+
// `has_any_policy` indicates whether there is an anyPolicy node with
|
|
352
281
|
// "expected_policy_set" of {anyPolicy}. If a node with policy oid P1 contains
|
|
353
282
|
// P2 in its "expected_policy_set", the level will contain a node of policy P2
|
|
354
|
-
// with P1 in
|
|
283
|
+
// with P1 in `parent_policies`.
|
|
355
284
|
//
|
|
356
|
-
// This is equivalent to the
|
|
357
|
-
//
|
|
285
|
+
// This is equivalent to the `X509PolicyLevel` that would result if the next
|
|
286
|
+
// certificates contained anyPolicy. `process_certificate_policies` will filter
|
|
358
287
|
// this result down to compute the actual level.
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
int ok = 0;
|
|
363
|
-
STACK_OF(X509_POLICY_NODE) *new_nodes = NULL;
|
|
364
|
-
X509_POLICY_LEVEL *next = NULL;
|
|
288
|
+
std::optional<X509PolicyLevel> process_policy_mappings(const X509 *cert,
|
|
289
|
+
X509PolicyLevel *level,
|
|
290
|
+
bool mapping_allowed) {
|
|
365
291
|
int critical;
|
|
366
|
-
POLICY_MAPPINGS
|
|
367
|
-
X509_get_ext_d2i(cert, NID_policy_mappings, &critical,
|
|
292
|
+
UniquePtr<POLICY_MAPPINGS> mappings(reinterpret_cast<POLICY_MAPPINGS *>(
|
|
293
|
+
X509_get_ext_d2i(cert, NID_policy_mappings, &critical, nullptr)));
|
|
294
|
+
if (mappings == nullptr && critical != -1) {
|
|
295
|
+
// Syntax error in the policy mappings extension.
|
|
296
|
+
return std::nullopt;
|
|
297
|
+
}
|
|
368
298
|
|
|
369
|
-
{
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
299
|
+
if (mappings != nullptr) {
|
|
300
|
+
// PolicyMappings may not be empty. See RFC 5280, section 4.2.1.5.
|
|
301
|
+
// TODO(https://crbug.com/boringssl/443): Move this check into the parser.
|
|
302
|
+
if (sk_POLICY_MAPPING_num(mappings.get()) == 0) {
|
|
303
|
+
OPENSSL_PUT_ERROR(X509, X509_R_INVALID_POLICY_EXTENSION);
|
|
304
|
+
return std::nullopt;
|
|
373
305
|
}
|
|
374
306
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
goto err;
|
|
307
|
+
// RFC 5280, section 6.1.4, step (a).
|
|
308
|
+
for (const POLICY_MAPPING *mapping : mappings.get()) {
|
|
309
|
+
if (is_any_policy(mapping->issuerDomainPolicy) ||
|
|
310
|
+
is_any_policy(mapping->subjectDomainPolicy)) {
|
|
311
|
+
return std::nullopt;
|
|
381
312
|
}
|
|
313
|
+
}
|
|
382
314
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
315
|
+
// Sort to group by issuerDomainPolicy.
|
|
316
|
+
sk_POLICY_MAPPING_set_cmp_func(mappings.get(), compare_issuer_policy);
|
|
317
|
+
sk_POLICY_MAPPING_sort(mappings.get());
|
|
318
|
+
|
|
319
|
+
if (mapping_allowed) {
|
|
320
|
+
// Mark nodes as mapped, and add any nodes to `level` which may be
|
|
321
|
+
// needed as part of RFC 5280, section 6.1.4, step (b.1).
|
|
322
|
+
Vector<X509PolicyNode> new_nodes;
|
|
323
|
+
const ASN1_OBJECT *last_policy = nullptr;
|
|
324
|
+
for (const POLICY_MAPPING *mapping : mappings.get()) {
|
|
325
|
+
// There may be multiple mappings with the same `issuerDomainPolicy`.
|
|
326
|
+
if (last_policy != nullptr &&
|
|
327
|
+
OBJ_cmp(mapping->issuerDomainPolicy, last_policy) == 0) {
|
|
328
|
+
continue;
|
|
389
329
|
}
|
|
390
|
-
|
|
330
|
+
last_policy = mapping->issuerDomainPolicy;
|
|
391
331
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
// Mark nodes as mapped, and add any nodes to |level| which may be
|
|
398
|
-
// needed as part of RFC 5280, section 6.1.4, step (b.1).
|
|
399
|
-
new_nodes = sk_X509_POLICY_NODE_new_null();
|
|
400
|
-
if (new_nodes == NULL) {
|
|
401
|
-
goto err;
|
|
402
|
-
}
|
|
403
|
-
const ASN1_OBJECT *last_policy = NULL;
|
|
404
|
-
for (size_t i = 0; i < sk_POLICY_MAPPING_num(mappings); i++) {
|
|
405
|
-
const POLICY_MAPPING *mapping = sk_POLICY_MAPPING_value(mappings, i);
|
|
406
|
-
// There may be multiple mappings with the same |issuerDomainPolicy|.
|
|
407
|
-
if (last_policy != NULL &&
|
|
408
|
-
OBJ_cmp(mapping->issuerDomainPolicy, last_policy) == 0) {
|
|
332
|
+
X509PolicyNode *node = level->Find(mapping->issuerDomainPolicy);
|
|
333
|
+
if (node != nullptr) {
|
|
334
|
+
node->mapped = true;
|
|
335
|
+
} else {
|
|
336
|
+
if (!level->has_any_policy()) {
|
|
409
337
|
continue;
|
|
410
338
|
}
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
}
|
|
419
|
-
node = x509_policy_node_new(mapping->issuerDomainPolicy);
|
|
420
|
-
if (node == NULL || //
|
|
421
|
-
!sk_X509_POLICY_NODE_push(new_nodes, node)) {
|
|
422
|
-
x509_policy_node_free(node);
|
|
423
|
-
goto err;
|
|
424
|
-
}
|
|
339
|
+
auto new_node = X509PolicyNode::Create(mapping->issuerDomainPolicy);
|
|
340
|
+
if (!new_node.has_value()) {
|
|
341
|
+
return std::nullopt;
|
|
342
|
+
}
|
|
343
|
+
new_node->mapped = true;
|
|
344
|
+
if (!new_nodes.Push(*std::move(new_node))) {
|
|
345
|
+
return std::nullopt;
|
|
425
346
|
}
|
|
426
|
-
node->mapped = 1;
|
|
427
|
-
}
|
|
428
|
-
if (!x509_policy_level_add_nodes(level, new_nodes)) {
|
|
429
|
-
goto err;
|
|
430
347
|
}
|
|
431
|
-
} else {
|
|
432
|
-
// RFC 5280, section 6.1.4, step (b.2). If mapping is inhibited, delete
|
|
433
|
-
// all mapped nodes.
|
|
434
|
-
sk_X509_POLICY_NODE_delete_if(level->nodes, delete_if_mapped, mappings);
|
|
435
|
-
sk_POLICY_MAPPING_pop_free(mappings, POLICY_MAPPING_free);
|
|
436
|
-
mappings = NULL;
|
|
437
348
|
}
|
|
349
|
+
if (!level->AddNodes(Span(new_nodes))) {
|
|
350
|
+
return std::nullopt;
|
|
351
|
+
}
|
|
352
|
+
} else {
|
|
353
|
+
// RFC 5280, section 6.1.4, step (b.2). If mapping is inhibited, delete
|
|
354
|
+
// all mapped nodes.
|
|
355
|
+
level->EraseNodesIf([&](const X509PolicyNode &node) {
|
|
356
|
+
// `mappings` must have been sorted by `compare_issuer_policy`.
|
|
357
|
+
assert(sk_POLICY_MAPPING_is_sorted(mappings.get()));
|
|
358
|
+
// Check if the node was mapped.
|
|
359
|
+
POLICY_MAPPING mapping;
|
|
360
|
+
mapping.issuerDomainPolicy = node.policy.get();
|
|
361
|
+
return sk_POLICY_MAPPING_find(mappings.get(), /*out_index=*/nullptr,
|
|
362
|
+
&mapping);
|
|
363
|
+
});
|
|
364
|
+
// Dropping the mappings.
|
|
365
|
+
mappings = nullptr;
|
|
438
366
|
}
|
|
367
|
+
}
|
|
439
368
|
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
}
|
|
369
|
+
// If a node was not mapped, it retains the original "explicit_policy_set"
|
|
370
|
+
// value, itself. Add those to `mappings`.
|
|
371
|
+
if (mappings == nullptr) {
|
|
372
|
+
mappings.reset(sk_POLICY_MAPPING_new_null());
|
|
373
|
+
if (mappings == nullptr) {
|
|
374
|
+
return std::nullopt;
|
|
447
375
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
goto err;
|
|
462
|
-
}
|
|
376
|
+
}
|
|
377
|
+
for (const X509PolicyNode &node : level->nodes()) {
|
|
378
|
+
if (!node.mapped) {
|
|
379
|
+
UniquePtr<POLICY_MAPPING> mapping(POLICY_MAPPING_new());
|
|
380
|
+
if (mapping == nullptr) {
|
|
381
|
+
return std::nullopt;
|
|
382
|
+
}
|
|
383
|
+
mapping->issuerDomainPolicy = OBJ_dup(node.policy.get());
|
|
384
|
+
mapping->subjectDomainPolicy = OBJ_dup(node.policy.get());
|
|
385
|
+
if (mapping->issuerDomainPolicy == nullptr ||
|
|
386
|
+
mapping->subjectDomainPolicy == nullptr ||
|
|
387
|
+
!PushToStack(mappings.get(), std::move(mapping))) {
|
|
388
|
+
return std::nullopt;
|
|
463
389
|
}
|
|
464
390
|
}
|
|
391
|
+
}
|
|
465
392
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
393
|
+
// Sort to group by subjectDomainPolicy.
|
|
394
|
+
sk_POLICY_MAPPING_set_cmp_func(mappings.get(), compare_subject_policy);
|
|
395
|
+
sk_POLICY_MAPPING_sort(mappings.get());
|
|
396
|
+
|
|
397
|
+
// Convert `mappings` to our "expected_policy_set" representation.
|
|
398
|
+
Vector<X509PolicyNode> next_nodes;
|
|
399
|
+
for (POLICY_MAPPING *mapping : mappings.get()) {
|
|
400
|
+
// Skip mappings where `issuerDomainPolicy` does not appear in the graph.
|
|
401
|
+
if (!level->has_any_policy() &&
|
|
402
|
+
level->Find(mapping->issuerDomainPolicy) == nullptr) {
|
|
403
|
+
continue;
|
|
474
404
|
}
|
|
475
|
-
next->has_any_policy = level->has_any_policy;
|
|
476
|
-
|
|
477
|
-
X509_POLICY_NODE *last_node = NULL;
|
|
478
|
-
for (size_t i = 0; i < sk_POLICY_MAPPING_num(mappings); i++) {
|
|
479
|
-
POLICY_MAPPING *mapping = sk_POLICY_MAPPING_value(mappings, i);
|
|
480
|
-
// Skip mappings where |issuerDomainPolicy| does not appear in the graph.
|
|
481
|
-
if (!level->has_any_policy &&
|
|
482
|
-
x509_policy_level_find(level, mapping->issuerDomainPolicy) == NULL) {
|
|
483
|
-
continue;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
if (last_node == NULL ||
|
|
487
|
-
OBJ_cmp(last_node->policy, mapping->subjectDomainPolicy) != 0) {
|
|
488
|
-
last_node = x509_policy_node_new(mapping->subjectDomainPolicy);
|
|
489
|
-
if (last_node == NULL ||
|
|
490
|
-
!sk_X509_POLICY_NODE_push(next->nodes, last_node)) {
|
|
491
|
-
x509_policy_node_free(last_node);
|
|
492
|
-
goto err;
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
405
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
406
|
+
if (next_nodes.empty() || OBJ_cmp(next_nodes.back().policy.get(),
|
|
407
|
+
mapping->subjectDomainPolicy) != 0) {
|
|
408
|
+
auto new_node = X509PolicyNode::Create(mapping->subjectDomainPolicy);
|
|
409
|
+
if (!new_node.has_value() || !next_nodes.Push(*std::move(new_node))) {
|
|
410
|
+
return std::nullopt;
|
|
499
411
|
}
|
|
500
|
-
mapping->issuerDomainPolicy = NULL;
|
|
501
412
|
}
|
|
502
413
|
|
|
503
|
-
|
|
504
|
-
|
|
414
|
+
// `mapping` is going to be destroyed, so steal its policy object.
|
|
415
|
+
UniquePtr<ASN1_OBJECT> policy(
|
|
416
|
+
std::exchange(mapping->issuerDomainPolicy, nullptr));
|
|
417
|
+
if (!next_nodes.back().parent_policies.Push(std::move(policy))) {
|
|
418
|
+
return std::nullopt;
|
|
419
|
+
}
|
|
505
420
|
}
|
|
506
421
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
422
|
+
X509PolicyLevel next;
|
|
423
|
+
next.set_has_any_policy(level->has_any_policy());
|
|
424
|
+
if (!next.AddNodes(Span(next_nodes))) {
|
|
425
|
+
return std::nullopt;
|
|
511
426
|
}
|
|
512
|
-
|
|
513
|
-
sk_POLICY_MAPPING_pop_free(mappings, POLICY_MAPPING_free);
|
|
514
|
-
sk_X509_POLICY_NODE_pop_free(new_nodes, x509_policy_node_free);
|
|
515
427
|
return next;
|
|
516
428
|
}
|
|
517
429
|
|
|
518
|
-
// apply_skip_certs, if
|
|
519
|
-
// of its current value and
|
|
520
|
-
//
|
|
521
|
-
|
|
522
|
-
if (skip_certs ==
|
|
523
|
-
return
|
|
430
|
+
// apply_skip_certs, if `skip_certs` is non-NULL, sets `*value` to the minimum
|
|
431
|
+
// of its current value and `skip_certs`. It returns true on success and false
|
|
432
|
+
// if `skip_certs` is negative.
|
|
433
|
+
bool apply_skip_certs(const ASN1_INTEGER *skip_certs, size_t *value) {
|
|
434
|
+
if (skip_certs == nullptr) {
|
|
435
|
+
return true;
|
|
524
436
|
}
|
|
525
437
|
|
|
526
438
|
// TODO(https://crbug.com/boringssl/443): Move this check into the parser.
|
|
527
439
|
if (skip_certs->type & V_ASN1_NEG) {
|
|
528
440
|
OPENSSL_PUT_ERROR(X509, X509_R_INVALID_POLICY_EXTENSION);
|
|
529
|
-
return
|
|
441
|
+
return false;
|
|
530
442
|
}
|
|
531
443
|
|
|
532
|
-
// If
|
|
444
|
+
// If `skip_certs` does not fit in `uint64_t`, it must exceed `*value`.
|
|
533
445
|
uint64_t u64;
|
|
534
446
|
if (ASN1_INTEGER_get_uint64(&u64, skip_certs) && u64 < *value) {
|
|
535
447
|
*value = (size_t)u64;
|
|
536
448
|
}
|
|
537
449
|
ERR_clear_error();
|
|
538
|
-
return
|
|
450
|
+
return true;
|
|
539
451
|
}
|
|
540
452
|
|
|
541
|
-
// process_policy_constraints updates
|
|
542
|
-
//
|
|
453
|
+
// process_policy_constraints updates `*explicit_policy`, `*policy_mapping`, and
|
|
454
|
+
// `*inhibit_any_policy` according to `x509`'s policy constraints and inhibit
|
|
543
455
|
// anyPolicy extensions. It returns one on success and zero on error. This
|
|
544
456
|
// implements steps (i) and (j) of RFC 5280, section 6.1.4.
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
457
|
+
bool process_policy_constraints(const X509 *x509, size_t *explicit_policy,
|
|
458
|
+
size_t *policy_mapping,
|
|
459
|
+
size_t *inhibit_any_policy) {
|
|
548
460
|
int critical;
|
|
549
|
-
POLICY_CONSTRAINTS
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
461
|
+
UniquePtr<POLICY_CONSTRAINTS> constraints(
|
|
462
|
+
reinterpret_cast<POLICY_CONSTRAINTS *>(
|
|
463
|
+
X509_get_ext_d2i(x509, NID_policy_constraints, &critical, nullptr)));
|
|
464
|
+
if (constraints == nullptr && critical != -1) {
|
|
465
|
+
return false;
|
|
466
|
+
}
|
|
467
|
+
if (constraints != nullptr) {
|
|
468
|
+
if (constraints->requireExplicitPolicy == nullptr &&
|
|
469
|
+
constraints->inhibitPolicyMapping == nullptr) {
|
|
557
470
|
// Per RFC 5280, section 4.2.1.11, at least one of the fields must be
|
|
558
471
|
// present.
|
|
559
472
|
OPENSSL_PUT_ERROR(X509, X509_R_INVALID_POLICY_EXTENSION);
|
|
560
|
-
|
|
561
|
-
return 0;
|
|
473
|
+
return false;
|
|
562
474
|
}
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
apply_skip_certs(constraints->inhibitPolicyMapping, policy_mapping)
|
|
566
|
-
|
|
567
|
-
if (!ok) {
|
|
568
|
-
return 0;
|
|
475
|
+
if (!apply_skip_certs(constraints->requireExplicitPolicy,
|
|
476
|
+
explicit_policy) ||
|
|
477
|
+
!apply_skip_certs(constraints->inhibitPolicyMapping, policy_mapping)) {
|
|
478
|
+
return false;
|
|
569
479
|
}
|
|
570
480
|
}
|
|
571
481
|
|
|
572
|
-
ASN1_INTEGER
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
482
|
+
UniquePtr<ASN1_INTEGER> inhibit_any_policy_ext(
|
|
483
|
+
reinterpret_cast<ASN1_INTEGER *>(
|
|
484
|
+
X509_get_ext_d2i(x509, NID_inhibit_any_policy, &critical, nullptr)));
|
|
485
|
+
if (inhibit_any_policy_ext == nullptr && critical != -1) {
|
|
486
|
+
return false;
|
|
576
487
|
}
|
|
577
|
-
|
|
578
|
-
ASN1_INTEGER_free(inhibit_any_policy_ext);
|
|
579
|
-
return ok;
|
|
488
|
+
return apply_skip_certs(inhibit_any_policy_ext.get(), inhibit_any_policy);
|
|
580
489
|
}
|
|
581
490
|
|
|
582
|
-
// has_explicit_policy returns
|
|
583
|
-
//
|
|
491
|
+
// has_explicit_policy returns true if the set of authority-space policy OIDs
|
|
492
|
+
// `levels` has some non-empty intersection with `user_policies`, and false
|
|
584
493
|
// otherwise. This mirrors the logic in RFC 5280, section 6.1.5, step (g). This
|
|
585
|
-
// function modifies
|
|
494
|
+
// function modifies `levels` and should only be called at the end of policy
|
|
586
495
|
// evaluation.
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
assert(user_policies ==
|
|
496
|
+
bool has_explicit_policy(Span<X509PolicyLevel> levels,
|
|
497
|
+
const STACK_OF(ASN1_OBJECT) *user_policies) {
|
|
498
|
+
assert(user_policies == nullptr || sk_ASN1_OBJECT_is_sorted(user_policies));
|
|
590
499
|
|
|
591
500
|
// Step (g.i). If the policy graph is empty, the intersection is empty.
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
if (x509_policy_level_is_empty(level)) {
|
|
595
|
-
return 0;
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
// If |user_policies| is empty, we interpret it as having a single anyPolicy
|
|
599
|
-
// value. The caller may also have supplied anyPolicy explicitly.
|
|
600
|
-
int user_has_any_policy = sk_ASN1_OBJECT_num(user_policies) == 0;
|
|
601
|
-
for (size_t i = 0; i < sk_ASN1_OBJECT_num(user_policies); i++) {
|
|
602
|
-
if (is_any_policy(sk_ASN1_OBJECT_value(user_policies, i))) {
|
|
603
|
-
user_has_any_policy = 1;
|
|
604
|
-
break;
|
|
605
|
-
}
|
|
501
|
+
if (levels.empty() || levels.back().is_empty()) {
|
|
502
|
+
return false;
|
|
606
503
|
}
|
|
607
504
|
|
|
608
505
|
// Step (g.ii). If the policy graph is not empty and the user set contains
|
|
609
506
|
// anyPolicy, the intersection is the entire (non-empty) graph.
|
|
610
|
-
|
|
611
|
-
|
|
507
|
+
//
|
|
508
|
+
// If `user_policies` is empty, we interpret it as having a single anyPolicy
|
|
509
|
+
// value. The caller may also have supplied anyPolicy explicitly.
|
|
510
|
+
if (sk_ASN1_OBJECT_num(user_policies) == 0) {
|
|
511
|
+
return true;
|
|
512
|
+
}
|
|
513
|
+
for (const ASN1_OBJECT *user_policy : user_policies) {
|
|
514
|
+
if (is_any_policy(user_policy)) {
|
|
515
|
+
return true;
|
|
516
|
+
}
|
|
612
517
|
}
|
|
613
518
|
|
|
614
519
|
// Step (g.iii) does not delete anyPolicy nodes, so if the graph has
|
|
615
520
|
// anyPolicy, some explicit policy will survive. The actual intersection may
|
|
616
521
|
// synthesize some nodes in step (g.iii.3), but we do not return the policy
|
|
617
522
|
// list itself, so we skip actually computing this.
|
|
618
|
-
if (
|
|
619
|
-
return
|
|
523
|
+
if (levels.back().has_any_policy()) {
|
|
524
|
+
return true;
|
|
620
525
|
}
|
|
621
526
|
|
|
622
527
|
// We defer pruning the tree, so as we look for nodes with parent anyPolicy,
|
|
623
528
|
// step (g.iii.1), we must limit to nodes reachable from the bottommost level.
|
|
624
529
|
// Start by marking each of those nodes as reachable.
|
|
625
|
-
for (
|
|
626
|
-
|
|
530
|
+
for (X509PolicyNode &node : levels.back().nodes()) {
|
|
531
|
+
node.reachable = true;
|
|
627
532
|
}
|
|
628
533
|
|
|
534
|
+
const size_t num_levels = levels.size();
|
|
629
535
|
for (size_t i = num_levels - 1; i < num_levels; i--) {
|
|
630
|
-
level =
|
|
631
|
-
for (
|
|
632
|
-
|
|
633
|
-
if (!node->reachable) {
|
|
536
|
+
X509PolicyLevel &level = levels[i];
|
|
537
|
+
for (X509PolicyNode &node : level.nodes()) {
|
|
538
|
+
if (!node.reachable) {
|
|
634
539
|
continue;
|
|
635
540
|
}
|
|
636
|
-
if (
|
|
637
|
-
//
|
|
638
|
-
// If it exists in
|
|
541
|
+
if (node.parent_is_any_policy()) {
|
|
542
|
+
// `node`'s parent is anyPolicy and is part of "valid_policy_node_set".
|
|
543
|
+
// If it exists in `user_policies`, the intersection is non-empty and we
|
|
639
544
|
// can return immediately.
|
|
640
|
-
if (sk_ASN1_OBJECT_find(user_policies, /*out_index=*/
|
|
641
|
-
node
|
|
642
|
-
return
|
|
545
|
+
if (sk_ASN1_OBJECT_find(user_policies, /*out_index=*/nullptr,
|
|
546
|
+
node.policy.get())) {
|
|
547
|
+
return true;
|
|
643
548
|
}
|
|
644
549
|
} else if (i > 0) {
|
|
645
|
-
//
|
|
550
|
+
// `node`'s parents are concrete policies. Mark the parents reachable,
|
|
646
551
|
// to be inspected by the next loop iteration.
|
|
647
|
-
|
|
648
|
-
for (
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
parent->reachable = 1;
|
|
552
|
+
X509PolicyLevel &prev = levels[i - 1];
|
|
553
|
+
for (const auto &parent_policy : node.parent_policies) {
|
|
554
|
+
X509PolicyNode *parent_node = prev.Find(parent_policy.get());
|
|
555
|
+
if (parent_node != nullptr) {
|
|
556
|
+
parent_node->reachable = true;
|
|
653
557
|
}
|
|
654
558
|
}
|
|
655
559
|
}
|
|
656
560
|
}
|
|
657
561
|
}
|
|
658
562
|
|
|
659
|
-
return
|
|
563
|
+
return false;
|
|
660
564
|
}
|
|
661
565
|
|
|
662
|
-
|
|
663
|
-
const ASN1_OBJECT *const *b) {
|
|
566
|
+
int asn1_object_cmp(const ASN1_OBJECT *const *a, const ASN1_OBJECT *const *b) {
|
|
664
567
|
return OBJ_cmp(*a, *b);
|
|
665
568
|
}
|
|
666
569
|
|
|
570
|
+
} // namespace
|
|
571
|
+
|
|
667
572
|
int X509_policy_check(const STACK_OF(X509) *certs,
|
|
668
573
|
const STACK_OF(ASN1_OBJECT) *user_policies,
|
|
669
574
|
unsigned long flags, X509 **out_current_cert) {
|
|
670
|
-
*out_current_cert =
|
|
671
|
-
int ret = X509_V_ERR_OUT_OF_MEM;
|
|
672
|
-
X509_POLICY_LEVEL *level = NULL;
|
|
673
|
-
STACK_OF(X509_POLICY_LEVEL) *levels = NULL;
|
|
674
|
-
STACK_OF(ASN1_OBJECT) *user_policies_sorted = NULL;
|
|
675
|
-
size_t num_certs = sk_X509_num(certs);
|
|
575
|
+
*out_current_cert = nullptr;
|
|
676
576
|
|
|
677
577
|
// Skip policy checking if the chain is just the trust anchor.
|
|
578
|
+
const size_t num_certs = sk_X509_num(certs);
|
|
678
579
|
if (num_certs <= 1) {
|
|
679
580
|
return X509_V_OK;
|
|
680
581
|
}
|
|
@@ -686,65 +587,58 @@ int X509_policy_check(const STACK_OF(X509) *certs,
|
|
|
686
587
|
(flags & X509_V_FLAG_INHIBIT_ANY) ? 0 : num_certs + 1;
|
|
687
588
|
size_t policy_mapping = (flags & X509_V_FLAG_INHIBIT_MAP) ? 0 : num_certs + 1;
|
|
688
589
|
|
|
689
|
-
levels
|
|
690
|
-
|
|
691
|
-
goto err;
|
|
692
|
-
}
|
|
693
|
-
|
|
590
|
+
Vector<X509PolicyLevel> levels;
|
|
591
|
+
std::optional<X509PolicyLevel> level;
|
|
694
592
|
for (size_t i = num_certs - 2; i < num_certs; i--) {
|
|
695
593
|
X509 *cert = sk_X509_value(certs, i);
|
|
696
|
-
|
|
697
|
-
|
|
594
|
+
uint32_t ex_flags = X509_get_extension_flags(cert);
|
|
595
|
+
if (ex_flags & EXFLAG_INVALID) {
|
|
596
|
+
return X509_V_ERR_OUT_OF_MEM;
|
|
698
597
|
}
|
|
699
|
-
const
|
|
598
|
+
const bool is_self_issued = (ex_flags & EXFLAG_SI) != 0;
|
|
700
599
|
|
|
701
|
-
|
|
600
|
+
// In all but the first iteration, the previous iteration will have prepared
|
|
601
|
+
// "expected_policy_set" for us as a staging level.
|
|
602
|
+
if (!level.has_value()) {
|
|
702
603
|
assert(i == num_certs - 2);
|
|
703
|
-
level
|
|
704
|
-
|
|
705
|
-
goto err;
|
|
706
|
-
}
|
|
707
|
-
level->has_any_policy = 1;
|
|
604
|
+
level.emplace();
|
|
605
|
+
level->set_has_any_policy(true);
|
|
708
606
|
}
|
|
709
607
|
|
|
710
|
-
// RFC 5280, section 6.1.3, steps (d) and (e).
|
|
608
|
+
// RFC 5280, section 6.1.3, steps (d) and (e). `any_policy_allowed` is
|
|
711
609
|
// computed as in step (d.2).
|
|
712
610
|
const int any_policy_allowed =
|
|
713
611
|
inhibit_any_policy > 0 || (i > 0 && is_self_issued);
|
|
714
|
-
if (!process_certificate_policies(cert, level, any_policy_allowed)) {
|
|
715
|
-
ret = X509_V_ERR_INVALID_POLICY_EXTENSION;
|
|
612
|
+
if (!process_certificate_policies(cert, &*level, any_policy_allowed)) {
|
|
716
613
|
*out_current_cert = cert;
|
|
717
|
-
|
|
614
|
+
return X509_V_ERR_INVALID_POLICY_EXTENSION;
|
|
718
615
|
}
|
|
719
616
|
|
|
720
617
|
// RFC 5280, section 6.1.3, step (f).
|
|
721
|
-
if (explicit_policy == 0 &&
|
|
722
|
-
|
|
723
|
-
goto err;
|
|
618
|
+
if (explicit_policy == 0 && level->is_empty()) {
|
|
619
|
+
return X509_V_ERR_NO_EXPLICIT_POLICY;
|
|
724
620
|
}
|
|
725
621
|
|
|
726
|
-
// Insert into the list.
|
|
727
|
-
if (!
|
|
728
|
-
|
|
622
|
+
// Insert the completed level into the list.
|
|
623
|
+
if (!levels.Push(*std::exchange(level, std::nullopt))) {
|
|
624
|
+
return X509_V_ERR_OUT_OF_MEM;
|
|
729
625
|
}
|
|
730
|
-
|
|
731
|
-
level = NULL;
|
|
626
|
+
level = std::nullopt;
|
|
732
627
|
|
|
733
628
|
// If this is not the leaf certificate, we go to section 6.1.4. If it
|
|
734
629
|
// is the leaf certificate, we go to section 6.1.5 instead.
|
|
735
630
|
if (i != 0) {
|
|
736
631
|
// RFC 5280, section 6.1.4, steps (a) and (b).
|
|
737
|
-
level = process_policy_mappings(cert,
|
|
738
|
-
if (level
|
|
739
|
-
ret = X509_V_ERR_INVALID_POLICY_EXTENSION;
|
|
632
|
+
level = process_policy_mappings(cert, &levels.back(), policy_mapping > 0);
|
|
633
|
+
if (!level.has_value()) {
|
|
740
634
|
*out_current_cert = cert;
|
|
741
|
-
|
|
635
|
+
return X509_V_ERR_INVALID_POLICY_EXTENSION;
|
|
742
636
|
}
|
|
743
637
|
}
|
|
744
638
|
|
|
745
639
|
// RFC 5280, section 6.1.4, step (h-j) for non-leaves, and section 6.1.5,
|
|
746
640
|
// step (a-b) for leaves. In the leaf case, RFC 5280 says only to update
|
|
747
|
-
//
|
|
641
|
+
// `explicit_policy`, but `policy_mapping` and `inhibit_any_policy` are no
|
|
748
642
|
// longer read at this point, so we use the same process.
|
|
749
643
|
if (i == 0 || !is_self_issued) {
|
|
750
644
|
if (explicit_policy > 0) {
|
|
@@ -759,38 +653,34 @@ int X509_policy_check(const STACK_OF(X509) *certs,
|
|
|
759
653
|
}
|
|
760
654
|
if (!process_policy_constraints(cert, &explicit_policy, &policy_mapping,
|
|
761
655
|
&inhibit_any_policy)) {
|
|
762
|
-
ret = X509_V_ERR_INVALID_POLICY_EXTENSION;
|
|
763
656
|
*out_current_cert = cert;
|
|
764
|
-
|
|
657
|
+
return X509_V_ERR_INVALID_POLICY_EXTENSION;
|
|
765
658
|
}
|
|
766
659
|
}
|
|
767
660
|
|
|
768
661
|
// RFC 5280, section 6.1.5, step (g). We do not output the policy set, so it
|
|
769
662
|
// is only necessary to check if the user-constrained-policy-set is not empty.
|
|
770
663
|
if (explicit_policy == 0) {
|
|
771
|
-
// Build a sorted copy of
|
|
772
|
-
|
|
664
|
+
// Build a sorted copy of `user_policies` for more efficient lookup.
|
|
665
|
+
STACK_OF(ASN1_OBJECT) *user_policies_sorted = nullptr;
|
|
666
|
+
// `user_policies_sorted`'s contents are owned by `user_policies`, so we do
|
|
667
|
+
// not use `sk_ASN1_OBJECT_pop_free`.
|
|
668
|
+
Cleanup cleanup = [&] { sk_ASN1_OBJECT_free(user_policies_sorted); };
|
|
669
|
+
if (user_policies != nullptr) {
|
|
773
670
|
user_policies_sorted = sk_ASN1_OBJECT_dup(user_policies);
|
|
774
|
-
if (user_policies_sorted ==
|
|
775
|
-
|
|
671
|
+
if (user_policies_sorted == nullptr) {
|
|
672
|
+
return X509_V_ERR_OUT_OF_MEM;
|
|
776
673
|
}
|
|
777
674
|
sk_ASN1_OBJECT_set_cmp_func(user_policies_sorted, asn1_object_cmp);
|
|
778
675
|
sk_ASN1_OBJECT_sort(user_policies_sorted);
|
|
779
676
|
}
|
|
780
677
|
|
|
781
|
-
if (!has_explicit_policy(levels, user_policies_sorted)) {
|
|
782
|
-
|
|
783
|
-
goto err;
|
|
678
|
+
if (!has_explicit_policy(Span(levels), user_policies_sorted)) {
|
|
679
|
+
return X509_V_ERR_NO_EXPLICIT_POLICY;
|
|
784
680
|
}
|
|
785
681
|
}
|
|
786
682
|
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
err:
|
|
790
|
-
x509_policy_level_free(level);
|
|
791
|
-
// |user_policies_sorted|'s contents are owned by |user_policies|, so we do
|
|
792
|
-
// not use |sk_ASN1_OBJECT_pop_free|.
|
|
793
|
-
sk_ASN1_OBJECT_free(user_policies_sorted);
|
|
794
|
-
sk_X509_POLICY_LEVEL_pop_free(levels, x509_policy_level_free);
|
|
795
|
-
return ret;
|
|
683
|
+
return X509_V_OK;
|
|
796
684
|
}
|
|
685
|
+
|
|
686
|
+
BSSL_NAMESPACE_END
|