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,380 +12,311 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
+
#include <string_view>
|
|
16
|
+
|
|
15
17
|
#include <stdio.h>
|
|
16
18
|
#include <string.h>
|
|
17
19
|
|
|
20
|
+
#include <utility>
|
|
21
|
+
|
|
22
|
+
#include <openssl/asn1.h>
|
|
18
23
|
#include <openssl/asn1t.h>
|
|
24
|
+
#include <openssl/base.h>
|
|
25
|
+
#include <openssl/bio.h>
|
|
26
|
+
#include <openssl/bytestring.h>
|
|
19
27
|
#include <openssl/conf.h>
|
|
20
28
|
#include <openssl/err.h>
|
|
21
29
|
#include <openssl/mem.h>
|
|
22
30
|
#include <openssl/obj.h>
|
|
31
|
+
#include <openssl/span.h>
|
|
32
|
+
#include <openssl/stack.h>
|
|
23
33
|
#include <openssl/x509.h>
|
|
24
34
|
|
|
25
35
|
#include "../internal.h"
|
|
26
|
-
#include "ext_dat.h"
|
|
27
36
|
#include "internal.h"
|
|
28
37
|
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const STACK_OF(CONF_VALUE) *nval);
|
|
33
|
-
static int i2r_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, void *a,
|
|
34
|
-
BIO *bp, int ind);
|
|
35
|
-
static int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
|
|
36
|
-
STACK_OF(GENERAL_SUBTREE) *trees, BIO *bp,
|
|
37
|
-
int ind, const char *name);
|
|
38
|
-
static int print_nc_ipadd(BIO *bp, const ASN1_OCTET_STRING *ip);
|
|
39
|
-
|
|
40
|
-
static int nc_match(GENERAL_NAME *gen, NAME_CONSTRAINTS *nc);
|
|
41
|
-
static int nc_match_single(GENERAL_NAME *sub, GENERAL_NAME *gen);
|
|
42
|
-
static int nc_dn(X509_NAME *sub, X509_NAME *nm);
|
|
43
|
-
static int nc_dns(const ASN1_IA5STRING *sub, const ASN1_IA5STRING *dns);
|
|
44
|
-
static int nc_email(const ASN1_IA5STRING *sub, const ASN1_IA5STRING *eml);
|
|
45
|
-
static int nc_uri(const ASN1_IA5STRING *uri, const ASN1_IA5STRING *base);
|
|
46
|
-
|
|
47
|
-
const X509V3_EXT_METHOD v3_name_constraints = {
|
|
48
|
-
NID_name_constraints,
|
|
49
|
-
0,
|
|
50
|
-
ASN1_ITEM_ref(NAME_CONSTRAINTS),
|
|
51
|
-
0,
|
|
52
|
-
0,
|
|
53
|
-
0,
|
|
54
|
-
0,
|
|
55
|
-
0,
|
|
56
|
-
0,
|
|
57
|
-
0,
|
|
58
|
-
v2i_NAME_CONSTRAINTS,
|
|
59
|
-
i2r_NAME_CONSTRAINTS,
|
|
60
|
-
0,
|
|
61
|
-
NULL,
|
|
62
|
-
};
|
|
39
|
+
BSSL_NAMESPACE_BEGIN
|
|
40
|
+
namespace {
|
|
63
41
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
ASN1_IMP_OPT(GENERAL_SUBTREE, maximum, ASN1_INTEGER, 1),
|
|
68
|
-
} ASN1_SEQUENCE_END(GENERAL_SUBTREE)
|
|
69
|
-
|
|
70
|
-
ASN1_SEQUENCE(NAME_CONSTRAINTS) = {
|
|
71
|
-
ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, permittedSubtrees,
|
|
72
|
-
GENERAL_SUBTREE, 0),
|
|
73
|
-
ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, excludedSubtrees,
|
|
74
|
-
GENERAL_SUBTREE, 1),
|
|
75
|
-
} ASN1_SEQUENCE_END(NAME_CONSTRAINTS)
|
|
42
|
+
int starts_with(const CBS *cbs, uint8_t c) {
|
|
43
|
+
return CBS_len(cbs) > 0 && CBS_data(cbs)[0] == c;
|
|
44
|
+
}
|
|
76
45
|
|
|
46
|
+
int starts_with_str(const CBS *cbs, std::string_view str) {
|
|
47
|
+
return CBS_len(cbs) >= str.size() &&
|
|
48
|
+
!OPENSSL_memcmp(CBS_data(cbs), str.data(), str.size());
|
|
49
|
+
}
|
|
77
50
|
|
|
78
|
-
|
|
79
|
-
|
|
51
|
+
int ends_with(const CBS *cbs, uint8_t c) {
|
|
52
|
+
return CBS_len(cbs) > 0 && CBS_data(cbs)[CBS_len(cbs) - 1] == c;
|
|
53
|
+
}
|
|
80
54
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
STACK_OF(GENERAL_SUBTREE) **ptree = NULL;
|
|
85
|
-
NAME_CONSTRAINTS *ncons = NULL;
|
|
86
|
-
GENERAL_SUBTREE *sub = NULL;
|
|
87
|
-
ncons = NAME_CONSTRAINTS_new();
|
|
88
|
-
if (!ncons) {
|
|
89
|
-
goto err;
|
|
55
|
+
int equal_case(const CBS *a, const CBS *b) {
|
|
56
|
+
if (CBS_len(a) != CBS_len(b)) {
|
|
57
|
+
return 0;
|
|
90
58
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
} else if (!strncmp(val->name, "excluded", 8) && val->name[8]) {
|
|
98
|
-
ptree = &ncons->excludedSubtrees;
|
|
99
|
-
tval.name = val->name + 9;
|
|
100
|
-
} else {
|
|
101
|
-
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SYNTAX);
|
|
102
|
-
goto err;
|
|
103
|
-
}
|
|
104
|
-
tval.value = val->value;
|
|
105
|
-
sub = GENERAL_SUBTREE_new();
|
|
106
|
-
if (!v2i_GENERAL_NAME_ex(sub->base, method, ctx, &tval, 1)) {
|
|
107
|
-
goto err;
|
|
108
|
-
}
|
|
109
|
-
if (!*ptree) {
|
|
110
|
-
*ptree = sk_GENERAL_SUBTREE_new_null();
|
|
111
|
-
}
|
|
112
|
-
if (!*ptree || !sk_GENERAL_SUBTREE_push(*ptree, sub)) {
|
|
113
|
-
goto err;
|
|
59
|
+
// Note we cannot use `OPENSSL_strncasecmp` because that would stop
|
|
60
|
+
// iterating at NUL.
|
|
61
|
+
const uint8_t *a_data = CBS_data(a), *b_data = CBS_data(b);
|
|
62
|
+
for (size_t i = 0; i < CBS_len(a); i++) {
|
|
63
|
+
if (OPENSSL_tolower(a_data[i]) != OPENSSL_tolower(b_data[i])) {
|
|
64
|
+
return 0;
|
|
114
65
|
}
|
|
115
|
-
sub = NULL;
|
|
116
66
|
}
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
117
69
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
70
|
+
int has_suffix_case(const CBS *a, const CBS *b) {
|
|
71
|
+
if (CBS_len(a) < CBS_len(b)) {
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
CBS copy = *a;
|
|
75
|
+
CBS_skip(©, CBS_len(a) - CBS_len(b));
|
|
76
|
+
return equal_case(©, b);
|
|
124
77
|
}
|
|
125
78
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
79
|
+
bool is_allowed_rfc822_local_part(const CBS *cbs) {
|
|
80
|
+
if (CBS_len(cbs) == 0) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
for (size_t i = 0; i < CBS_len(cbs); i++) {
|
|
84
|
+
uint8_t c = CBS_data(cbs)[i];
|
|
85
|
+
if (!(OPENSSL_isalnum(c) || c == '!' || c == '#' || c == '$' || c == '%' ||
|
|
86
|
+
c == '&' || c == '\'' || c == '*' || c == '+' || c == '-' ||
|
|
87
|
+
c == '/' || c == '=' || c == '?' || c == '^' || c == '_' ||
|
|
88
|
+
c == '`' || c == '{' || c == '|' || c == '}' || c == '~' ||
|
|
89
|
+
c == '.')) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
133
94
|
}
|
|
134
95
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
GENERAL_SUBTREE *tree;
|
|
139
|
-
size_t i;
|
|
140
|
-
if (sk_GENERAL_SUBTREE_num(trees) > 0) {
|
|
141
|
-
BIO_printf(bp, "%*s%s:\n", ind, "", name);
|
|
96
|
+
bool is_allowed_rfc822_domain(const CBS *cbs) {
|
|
97
|
+
if (CBS_len(cbs) == 0) {
|
|
98
|
+
return false;
|
|
142
99
|
}
|
|
143
|
-
for (i = 0; i <
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
print_nc_ipadd(bp, tree->base->d.ip);
|
|
148
|
-
} else {
|
|
149
|
-
GENERAL_NAME_print(bp, tree->base);
|
|
100
|
+
for (size_t i = 0; i < CBS_len(cbs); i++) {
|
|
101
|
+
uint8_t c = CBS_data(cbs)[i];
|
|
102
|
+
if (!(OPENSSL_isalnum(c) || c == '-' || c == '.')) {
|
|
103
|
+
return false;
|
|
150
104
|
}
|
|
151
|
-
BIO_puts(bp, "\n");
|
|
152
105
|
}
|
|
153
|
-
return
|
|
106
|
+
return true;
|
|
154
107
|
}
|
|
155
108
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
} else if (len == 32) {
|
|
166
|
-
for (i = 0; i < 16; i++) {
|
|
167
|
-
uint16_t v = ((uint16_t)p[0] << 8) | p[1];
|
|
168
|
-
BIO_printf(bp, "%X", v);
|
|
169
|
-
p += 2;
|
|
170
|
-
if (i == 7) {
|
|
171
|
-
BIO_puts(bp, "/");
|
|
172
|
-
} else if (i != 15) {
|
|
173
|
-
BIO_puts(bp, ":");
|
|
174
|
-
}
|
|
109
|
+
// Removes the port part of a URI authority string, if present, leaving the
|
|
110
|
+
// host. Returns true if the port was syntactically valid (contained only
|
|
111
|
+
// digits), or was not present (vacuously valid).
|
|
112
|
+
bool nc_uri_remove_port(CBS *in_out) {
|
|
113
|
+
CBS host, unused;
|
|
114
|
+
if (CBS_get_until_first(in_out, &host, ':')) {
|
|
115
|
+
if (!CBS_skip(in_out, 1) ||
|
|
116
|
+
CBS_get_until_first_not_of(in_out, &unused, "0123456789")) {
|
|
117
|
+
return false;
|
|
175
118
|
}
|
|
176
|
-
|
|
177
|
-
|
|
119
|
+
*in_out = host;
|
|
120
|
+
return true;
|
|
178
121
|
}
|
|
179
|
-
|
|
122
|
+
// There was no port.
|
|
123
|
+
return true;
|
|
180
124
|
}
|
|
181
125
|
|
|
182
|
-
|
|
183
|
-
//
|
|
184
|
-
//
|
|
185
|
-
//
|
|
186
|
-
//
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
// X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: Bad or unsupported constraint
|
|
192
|
-
// syntax.
|
|
193
|
-
// X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: Bad or unsupported syntax of name.
|
|
194
|
-
|
|
195
|
-
int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc) {
|
|
196
|
-
int r, i;
|
|
197
|
-
size_t j;
|
|
198
|
-
X509_NAME *nm;
|
|
199
|
-
|
|
200
|
-
nm = X509_get_subject_name(x);
|
|
201
|
-
|
|
202
|
-
// Guard against certificates with an excessive number of names or
|
|
203
|
-
// constraints causing a computationally expensive name constraints
|
|
204
|
-
// check.
|
|
205
|
-
size_t name_count =
|
|
206
|
-
X509_NAME_entry_count(nm) + sk_GENERAL_NAME_num(x->altname);
|
|
207
|
-
size_t constraint_count = sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) +
|
|
208
|
-
sk_GENERAL_SUBTREE_num(nc->excludedSubtrees);
|
|
209
|
-
size_t check_count = constraint_count * name_count;
|
|
210
|
-
if (name_count < (size_t)X509_NAME_entry_count(nm) ||
|
|
211
|
-
constraint_count < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) ||
|
|
212
|
-
(constraint_count && check_count / constraint_count != name_count) ||
|
|
213
|
-
check_count > 1 << 20) {
|
|
214
|
-
return X509_V_ERR_UNSPECIFIED;
|
|
126
|
+
// Strips a single trailing dot from `host` if present.
|
|
127
|
+
// Per RFC 9499, we allow names to be written relative to the root (e.g.
|
|
128
|
+
// "www.example.com" is allowed even though technically the FQDN is
|
|
129
|
+
// "www.example.com." with a trailing dot representing the common root), and
|
|
130
|
+
// normalize names into this relative form for consistency.
|
|
131
|
+
void nc_uri_remove_trailing_dot(CBS *host) {
|
|
132
|
+
if (ends_with(host, '.')) {
|
|
133
|
+
uint8_t unused_byte;
|
|
134
|
+
BSSL_CHECK(CBS_get_last_u8(host, &unused_byte));
|
|
215
135
|
}
|
|
136
|
+
}
|
|
216
137
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
138
|
+
// Returns whether the authority portion of a URI contains a syntactically valid
|
|
139
|
+
// fully qualified domain name (FQDN).
|
|
140
|
+
//
|
|
141
|
+
// RFC 3986, section 3.2:
|
|
142
|
+
// authority = [ userinfo "@" ] host [ ":" port ]
|
|
143
|
+
//
|
|
144
|
+
// RFC 5280, section 4.2.1.10: if a URI name constraint applies, applications
|
|
145
|
+
// MUST reject a certificate with a subjectAltName with a URI that "does not
|
|
146
|
+
// include an authority component with a host name specified as a fully
|
|
147
|
+
// qualified domain name".
|
|
148
|
+
//
|
|
149
|
+
// Therefore we reject IP addresses in this function, and reject authority
|
|
150
|
+
// components containing a userinfo component. The caller is responsible for
|
|
151
|
+
// having removed any colon and port component, and normalizing to DNS relative
|
|
152
|
+
// form by removing any trailing dot.
|
|
153
|
+
bool nc_uri_is_fqdn(const CBS *uri_authority) {
|
|
154
|
+
if (CBS_len(uri_authority) == 0) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
CBS host_to_parse = *uri_authority;
|
|
158
|
+
|
|
159
|
+
// Reject userinfo, and IPv6 addresses delimited by square brackets. IPv4
|
|
160
|
+
// addresses are rejected later.
|
|
161
|
+
CBS unused;
|
|
162
|
+
if (CBS_get_until_first_of(&host_to_parse, &unused, "@[]")) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Validate that the host is identified by a registered name. Following RFC
|
|
167
|
+
// 3986, section 3.2.2: we refer to the preferred name syntax rules for DNS
|
|
168
|
+
// registered names found in RFC 1034, section 3.5, modified by RFC 1123:
|
|
169
|
+
//
|
|
170
|
+
// <domain> ::= <subdomain> | " "
|
|
171
|
+
// <subdomain> ::= <label> | <subdomain> "." <label>
|
|
172
|
+
// <label> ::= <let-dig> [ [ <ldh-str> ] <let-dig> ]
|
|
173
|
+
// <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
|
|
174
|
+
// <let-dig-hyp> ::= <let-dig> | "-"
|
|
175
|
+
// <let-dig> ::= <letter> | <digit>
|
|
176
|
+
// <letter> ::= any one of the 52 alphabetic characters A through Z in
|
|
177
|
+
// upper case and a through z in lower case
|
|
178
|
+
// <digit> ::= any one of the ten digits 0 through 9
|
|
179
|
+
//
|
|
180
|
+
// Additionally:
|
|
181
|
+
// - The first and last character of each label is a letter or digit.
|
|
182
|
+
// - Label length is no more than 63 characters.
|
|
183
|
+
CBS label;
|
|
184
|
+
CBS_init(&label, nullptr, 0);
|
|
185
|
+
while (CBS_len(&host_to_parse) > 0) {
|
|
186
|
+
if (CBS_get_until_first(&host_to_parse, &label, '.')) {
|
|
187
|
+
// Consume the dot.
|
|
188
|
+
CBS_skip(&host_to_parse, 1);
|
|
189
|
+
// A trailing dot should have already been removed by the caller.
|
|
190
|
+
if (CBS_len(&host_to_parse) == 0) {
|
|
191
|
+
return false;
|
|
236
192
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
193
|
+
} else {
|
|
194
|
+
// This is the last label.
|
|
195
|
+
label = host_to_parse;
|
|
196
|
+
CBS_skip(&host_to_parse, CBS_len(&label));
|
|
197
|
+
}
|
|
198
|
+
if (CBS_len(&label) == 0 || CBS_len(&label) > 63 ||
|
|
199
|
+
!OPENSSL_isalnum(CBS_data(&label)[0]) ||
|
|
200
|
+
!OPENSSL_isalnum(CBS_data(&label)[CBS_len(&label) - 1])) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
for (uint8_t c : Span<const uint8_t>(label)) {
|
|
204
|
+
if (!OPENSSL_isalnum(c) && c != '-') {
|
|
205
|
+
return false;
|
|
241
206
|
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
242
209
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
210
|
+
// Reject IP addresses by looking for (following the WHATWG URL parser) a
|
|
211
|
+
// completely numeric (decimal, octal, or hex) last component. An empty final
|
|
212
|
+
// component (e.g. if the host itself was empty) is also rejected here.
|
|
213
|
+
// https://url.spec.whatwg.org/#concept-host-parser
|
|
214
|
+
// https://url.spec.whatwg.org/#ends-in-a-number-checker
|
|
215
|
+
//
|
|
216
|
+
// Check for 0x or 0X followed by zero or more hex digits.
|
|
217
|
+
if (starts_with_str(&label, "0x") || starts_with_str(&label, "0X")) {
|
|
218
|
+
for (uint8_t c : Span<const uint8_t>(label).subspan(2)) {
|
|
219
|
+
if (!OPENSSL_isxdigit(c)) {
|
|
220
|
+
return true;
|
|
247
221
|
}
|
|
248
222
|
}
|
|
223
|
+
return false;
|
|
249
224
|
}
|
|
250
|
-
|
|
251
|
-
for (
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if (r != X509_V_OK) {
|
|
255
|
-
return r;
|
|
225
|
+
// Check for decimal or octal digits.
|
|
226
|
+
for (uint8_t c : Span<const uint8_t>(label)) {
|
|
227
|
+
if (!OPENSSL_isdigit(c)) {
|
|
228
|
+
return true;
|
|
256
229
|
}
|
|
257
230
|
}
|
|
258
|
-
|
|
259
|
-
return X509_V_OK;
|
|
231
|
+
return false;
|
|
260
232
|
}
|
|
261
233
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
234
|
+
// Performs basic parsing of a URI to extract the host portion for name
|
|
235
|
+
// constraints matching. This is not a full URI parser. This returns false if no
|
|
236
|
+
// valid URI host could be obtained, which means the certificate should be
|
|
237
|
+
// rejected.
|
|
238
|
+
bool nc_get_valid_uri_host(CBS *out, const ASN1_IA5STRING *uri_name) {
|
|
239
|
+
CBS uri_cbs;
|
|
240
|
+
CBS_init(&uri_cbs, uri_name->data, uri_name->length);
|
|
266
241
|
|
|
267
|
-
//
|
|
268
|
-
//
|
|
242
|
+
// RFC 3986, section 3:
|
|
243
|
+
// URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
|
|
269
244
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
if (r == X509_V_OK) {
|
|
287
|
-
match = 2;
|
|
288
|
-
} else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
|
|
289
|
-
return r;
|
|
245
|
+
// Check for the scheme and skip past it.
|
|
246
|
+
// RFC 3986, section 3.1:
|
|
247
|
+
// scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
|
|
248
|
+
CBS scheme;
|
|
249
|
+
uint8_t byte;
|
|
250
|
+
if (!CBS_get_until_first(&uri_cbs, &scheme, ':') ||
|
|
251
|
+
// Consume the colon.
|
|
252
|
+
!CBS_get_u8(&uri_cbs, &byte) ||
|
|
253
|
+
// Test that the first byte is a letter.
|
|
254
|
+
!CBS_get_u8(&scheme, &byte) || !OPENSSL_isalpha(byte)) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
// Check that the rest of the scheme consists of allowed characters.
|
|
258
|
+
for (uint8_t c : Span<const uint8_t>(scheme)) {
|
|
259
|
+
if (!OPENSSL_isalnum(c) && c != '+' && c != '-' && c != '.') {
|
|
260
|
+
return false;
|
|
290
261
|
}
|
|
291
262
|
}
|
|
292
263
|
|
|
293
|
-
|
|
294
|
-
|
|
264
|
+
// RFC 3986, section 3.2:
|
|
265
|
+
// The authority component is preceded by a double slash ("//") and is
|
|
266
|
+
// terminated by the next slash ("/"), question mark ("?"), or number
|
|
267
|
+
// sign ("#") character, or by the end of the URI.
|
|
268
|
+
if (!CBS_get_u8(&uri_cbs, &byte) || byte != '/' ||
|
|
269
|
+
!CBS_get_u8(&uri_cbs, &byte) || byte != '/') {
|
|
270
|
+
return false;
|
|
295
271
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
for (i = 0; i < sk_GENERAL_SUBTREE_num(nc->excludedSubtrees); i++) {
|
|
300
|
-
sub = sk_GENERAL_SUBTREE_value(nc->excludedSubtrees, i);
|
|
301
|
-
if (gen->type != sub->base->type) {
|
|
302
|
-
continue;
|
|
303
|
-
}
|
|
304
|
-
if (sub->minimum || sub->maximum) {
|
|
305
|
-
return X509_V_ERR_SUBTREE_MINMAX;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
r = nc_match_single(gen, sub->base);
|
|
309
|
-
if (r == X509_V_OK) {
|
|
310
|
-
return X509_V_ERR_EXCLUDED_VIOLATION;
|
|
311
|
-
} else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
|
|
312
|
-
return r;
|
|
313
|
-
}
|
|
272
|
+
CBS authority;
|
|
273
|
+
if (!CBS_get_until_first_of(&uri_cbs, &authority, "/?#")) {
|
|
274
|
+
authority = uri_cbs;
|
|
314
275
|
}
|
|
315
276
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
switch (base->type) {
|
|
321
|
-
case GEN_DIRNAME:
|
|
322
|
-
return nc_dn(gen->d.directoryName, base->d.directoryName);
|
|
323
|
-
|
|
324
|
-
case GEN_DNS:
|
|
325
|
-
return nc_dns(gen->d.dNSName, base->d.dNSName);
|
|
326
|
-
|
|
327
|
-
case GEN_EMAIL:
|
|
328
|
-
return nc_email(gen->d.rfc822Name, base->d.rfc822Name);
|
|
277
|
+
// RFC 5280, section 4.2.1.10: reject URI with no authority component.
|
|
278
|
+
if (CBS_len(&authority) == 0) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
329
281
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
282
|
+
if (!nc_uri_remove_port(&authority)) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
333
285
|
|
|
334
|
-
|
|
335
|
-
|
|
286
|
+
CBS host = authority;
|
|
287
|
+
nc_uri_remove_trailing_dot(&host);
|
|
288
|
+
if (!nc_uri_is_fqdn(&host)) {
|
|
289
|
+
return false;
|
|
336
290
|
}
|
|
291
|
+
*out = host;
|
|
292
|
+
return true;
|
|
337
293
|
}
|
|
338
294
|
|
|
339
|
-
// directoryName name constraint matching. The canonical encoding of
|
|
340
|
-
//
|
|
341
|
-
//
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
if (nm->modified && i2d_X509_NAME(nm, NULL) < 0) {
|
|
295
|
+
// directoryName name constraint matching. The canonical encoding of X509_NAME
|
|
296
|
+
// makes this comparison easy. It is matched if the constraint is a prefix of
|
|
297
|
+
// the name.
|
|
298
|
+
int nc_dn(const X509_NAME *nm, const X509_NAME *base) {
|
|
299
|
+
const X509_NAME_CACHE *nm_cache = x509_name_get_cache(nm);
|
|
300
|
+
if (nm_cache == nullptr) {
|
|
346
301
|
return X509_V_ERR_OUT_OF_MEM;
|
|
347
302
|
}
|
|
348
|
-
|
|
303
|
+
const X509_NAME_CACHE *base_cache = x509_name_get_cache(base);
|
|
304
|
+
if (base_cache == nullptr) {
|
|
349
305
|
return X509_V_ERR_OUT_OF_MEM;
|
|
350
306
|
}
|
|
351
|
-
if (
|
|
307
|
+
if (base_cache->canon.size() > nm_cache->canon.size()) {
|
|
352
308
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
|
353
309
|
}
|
|
354
|
-
if (
|
|
310
|
+
if (base_cache->canon !=
|
|
311
|
+
Span(nm_cache->canon).first(base_cache->canon.size())) {
|
|
355
312
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
|
356
313
|
}
|
|
357
314
|
return X509_V_OK;
|
|
358
315
|
}
|
|
359
316
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
static int equal_case(const CBS *a, const CBS *b) {
|
|
365
|
-
if (CBS_len(a) != CBS_len(b)) {
|
|
366
|
-
return 0;
|
|
367
|
-
}
|
|
368
|
-
// Note we cannot use |OPENSSL_strncasecmp| because that would stop
|
|
369
|
-
// iterating at NUL.
|
|
370
|
-
const uint8_t *a_data = CBS_data(a), *b_data = CBS_data(b);
|
|
371
|
-
for (size_t i = 0; i < CBS_len(a); i++) {
|
|
372
|
-
if (OPENSSL_tolower(a_data[i]) != OPENSSL_tolower(b_data[i])) {
|
|
373
|
-
return 0;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
return 1;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
static int has_suffix_case(const CBS *a, const CBS *b) {
|
|
380
|
-
if (CBS_len(a) < CBS_len(b)) {
|
|
381
|
-
return 0;
|
|
382
|
-
}
|
|
383
|
-
CBS copy = *a;
|
|
384
|
-
CBS_skip(©, CBS_len(a) - CBS_len(b));
|
|
385
|
-
return equal_case(©, b);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
static int nc_dns(const ASN1_IA5STRING *dns, const ASN1_IA5STRING *base) {
|
|
317
|
+
// DNS name constraint matching.
|
|
318
|
+
int nc_dns(const ASN1_IA5STRING *dns, const ASN1_IA5STRING *base,
|
|
319
|
+
bool excluding) {
|
|
389
320
|
CBS dns_cbs, base_cbs;
|
|
390
321
|
CBS_init(&dns_cbs, dns->data, dns->length);
|
|
391
322
|
CBS_init(&base_cbs, base->data, base->length);
|
|
@@ -395,7 +326,35 @@ static int nc_dns(const ASN1_IA5STRING *dns, const ASN1_IA5STRING *base) {
|
|
|
395
326
|
return X509_V_OK;
|
|
396
327
|
}
|
|
397
328
|
|
|
398
|
-
//
|
|
329
|
+
// Normalize absolute DNS names by removing the trailing dot, if any.
|
|
330
|
+
if (ends_with(&dns_cbs, '.')) {
|
|
331
|
+
uint8_t unused;
|
|
332
|
+
CBS_get_last_u8(&dns_cbs, &unused);
|
|
333
|
+
}
|
|
334
|
+
if (ends_with(&base_cbs, '.')) {
|
|
335
|
+
uint8_t unused;
|
|
336
|
+
CBS_get_last_u8(&base_cbs, &unused);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Wildcard partial-match handling ("*.bar.com" matching name constraint
|
|
340
|
+
// "foo.bar.com"). This only handles the case where the the dnsname and the
|
|
341
|
+
// constraint match after removing the leftmost label, otherwise it is handled
|
|
342
|
+
// by falling through to the check of whether the dnsname is fully within or
|
|
343
|
+
// fully outside of the constraint.
|
|
344
|
+
if (excluding && starts_with_str(&dns_cbs, "*.")) {
|
|
345
|
+
CBS unused;
|
|
346
|
+
CBS base_parent_cbs = base_cbs;
|
|
347
|
+
CBS dns_parent_cbs = dns_cbs;
|
|
348
|
+
CBS_skip(&dns_parent_cbs, 2);
|
|
349
|
+
if (CBS_get_until_first(&base_parent_cbs, &unused, '.') &&
|
|
350
|
+
CBS_skip(&base_parent_cbs, 1)) {
|
|
351
|
+
if (equal_case(&dns_parent_cbs, &base_parent_cbs)) {
|
|
352
|
+
return X509_V_OK;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// If `base_cbs` begins with a '.', do a simple suffix comparison. This is
|
|
399
358
|
// not part of RFC5280, but is part of OpenSSL's original behavior.
|
|
400
359
|
if (starts_with(&base_cbs, '.')) {
|
|
401
360
|
if (has_suffix_case(&dns_cbs, &base_cbs)) {
|
|
@@ -421,94 +380,419 @@ static int nc_dns(const ASN1_IA5STRING *dns, const ASN1_IA5STRING *base) {
|
|
|
421
380
|
return X509_V_OK;
|
|
422
381
|
}
|
|
423
382
|
|
|
424
|
-
|
|
383
|
+
int nc_email(const ASN1_IA5STRING *eml, const ASN1_IA5STRING *base,
|
|
384
|
+
bool case_insensitive_local_part) {
|
|
425
385
|
CBS eml_cbs, base_cbs;
|
|
426
386
|
CBS_init(&eml_cbs, eml->data, eml->length);
|
|
427
387
|
CBS_init(&base_cbs, base->data, base->length);
|
|
428
388
|
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
CBS eml_local, base_local;
|
|
433
|
-
if (!CBS_get_until_first(&eml_cbs, &eml_local, '@')) {
|
|
389
|
+
CBS eml_local;
|
|
390
|
+
if (!CBS_get_until_first(&eml_cbs, &eml_local, '@') ||
|
|
391
|
+
!CBS_skip(&eml_cbs, 1)) {
|
|
434
392
|
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
|
435
393
|
}
|
|
436
|
-
|
|
394
|
+
CBS eml_domain = eml_cbs;
|
|
437
395
|
|
|
438
|
-
//
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
396
|
+
// Exactly one '@' in eml.
|
|
397
|
+
CBS unused;
|
|
398
|
+
if (CBS_get_until_first(&eml_cbs, &unused, '@')) {
|
|
399
|
+
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if (!is_allowed_rfc822_local_part(&eml_local) ||
|
|
403
|
+
!is_allowed_rfc822_domain(&eml_domain)) {
|
|
404
|
+
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
CBS base_local, base_domain;
|
|
408
|
+
bool base_has_at = CBS_get_until_first(&base_cbs, &base_local, '@');
|
|
409
|
+
if (base_has_at) {
|
|
410
|
+
CBS_skip(&base_cbs, 1);
|
|
411
|
+
base_domain = base_cbs;
|
|
412
|
+
if (CBS_get_until_first(&base_cbs, &unused, '@')) {
|
|
413
|
+
// If we did the full parsing then it is possible for a @ to be in a
|
|
414
|
+
// quoted local-part of the name, but we don't do that, so just error if @
|
|
415
|
+
// appears more than once.
|
|
416
|
+
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
|
442
417
|
}
|
|
443
|
-
|
|
418
|
+
if (!is_allowed_rfc822_local_part(&base_local)) {
|
|
419
|
+
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
|
420
|
+
}
|
|
421
|
+
} else {
|
|
422
|
+
base_domain = base_cbs;
|
|
444
423
|
}
|
|
445
424
|
|
|
446
|
-
|
|
425
|
+
if (!is_allowed_rfc822_domain(&base_domain)) {
|
|
426
|
+
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// RFC 5280 section 4.2.1.10:
|
|
430
|
+
// To indicate a particular mailbox, the constraint is the complete mail
|
|
431
|
+
// address. For example, "root@example.com" indicates the root mailbox on
|
|
432
|
+
// the host "example.com".
|
|
447
433
|
if (base_has_at) {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
434
|
+
bool local_part_matches =
|
|
435
|
+
case_insensitive_local_part
|
|
436
|
+
? equal_case(&base_local, &eml_local)
|
|
437
|
+
: CBS_mem_equal(&base_local, CBS_data(&eml_local),
|
|
438
|
+
CBS_len(&eml_local));
|
|
439
|
+
bool domain_matches = equal_case(&base_domain, &eml_domain);
|
|
440
|
+
if (!local_part_matches || !domain_matches) {
|
|
441
|
+
return X509_V_ERR_PERMITTED_VIOLATION;
|
|
456
442
|
}
|
|
457
|
-
|
|
458
|
-
assert(starts_with(&base_cbs, '@'));
|
|
459
|
-
CBS_skip(&base_cbs, 1);
|
|
443
|
+
return X509_V_OK;
|
|
460
444
|
}
|
|
461
445
|
|
|
462
|
-
//
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
446
|
+
// RFC 5280 section 4.2.1.10:
|
|
447
|
+
// To specify any address within a domain, the constraint is specified with a
|
|
448
|
+
// leading period (as with URIs). For example, ".example.com" indicates all
|
|
449
|
+
// the Internet mail addresses in the domain "example.com", but not Internet
|
|
450
|
+
// mail addresses on the host "example.com".
|
|
451
|
+
if (starts_with(&base_domain, '.')) {
|
|
452
|
+
if (has_suffix_case(&eml_domain, &base_domain)) {
|
|
453
|
+
return X509_V_OK;
|
|
454
|
+
}
|
|
466
455
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
|
467
456
|
}
|
|
468
457
|
|
|
469
|
-
|
|
458
|
+
// RFC 5280 section 4.2.1.10:
|
|
459
|
+
// To indicate all Internet mail addresses on a particular host, the
|
|
460
|
+
// constraint is specified as the host name. For example, the constraint
|
|
461
|
+
// "example.com" is satisfied by any mail address at the host "example.com".
|
|
462
|
+
if (equal_case(&base_domain, &eml_domain)) {
|
|
463
|
+
return X509_V_OK;
|
|
464
|
+
}
|
|
465
|
+
return X509_V_ERR_PERMITTED_VIOLATION;
|
|
470
466
|
}
|
|
471
467
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
// Check for foo:// and skip past it
|
|
478
|
-
CBS scheme;
|
|
479
|
-
uint8_t byte;
|
|
480
|
-
if (!CBS_get_until_first(&uri_cbs, &scheme, ':') ||
|
|
481
|
-
!CBS_skip(&uri_cbs, 1) || // Skip the colon
|
|
482
|
-
!CBS_get_u8(&uri_cbs, &byte) || byte != '/' ||
|
|
483
|
-
!CBS_get_u8(&uri_cbs, &byte) || byte != '/') {
|
|
468
|
+
int nc_uri(const ASN1_IA5STRING *uri, const ASN1_IA5STRING *base) {
|
|
469
|
+
// Parse a URI name to extract the host name as a fully qualified domain name.
|
|
470
|
+
CBS uri_host;
|
|
471
|
+
if (!nc_get_valid_uri_host(&uri_host, uri)) {
|
|
484
472
|
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
|
485
473
|
}
|
|
486
474
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
475
|
+
CBS base_cbs;
|
|
476
|
+
CBS_init(&base_cbs, base->data, base->length);
|
|
477
|
+
nc_uri_remove_trailing_dot(&base_cbs);
|
|
478
|
+
|
|
479
|
+
// Make a copy of the name constraint string, which will be modified and
|
|
480
|
+
// checked for FQDN validity.
|
|
481
|
+
CBS base_fqdn = base_cbs;
|
|
482
|
+
|
|
483
|
+
// If present, strip a leading dot, which denotes a name constraint that
|
|
484
|
+
// matches all DNS subdomains.
|
|
485
|
+
const bool base_has_leading_dot = starts_with(&base_fqdn, '.');
|
|
486
|
+
if (base_has_leading_dot) {
|
|
487
|
+
CBS_skip(&base_fqdn, 1);
|
|
495
488
|
}
|
|
496
489
|
|
|
497
|
-
|
|
498
|
-
|
|
490
|
+
// Validate that the name constraint is a proper FQDN.
|
|
491
|
+
if (!nc_uri_is_fqdn(&base_fqdn)) {
|
|
492
|
+
return X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX;
|
|
499
493
|
}
|
|
500
494
|
|
|
501
495
|
// Special case: initial '.' is RHS match
|
|
502
|
-
if (
|
|
503
|
-
if (has_suffix_case(&
|
|
496
|
+
if (base_has_leading_dot) {
|
|
497
|
+
if (has_suffix_case(&uri_host, &base_cbs)) {
|
|
504
498
|
return X509_V_OK;
|
|
505
499
|
}
|
|
506
500
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
|
507
501
|
}
|
|
508
502
|
|
|
509
|
-
if (!equal_case(&base_cbs, &
|
|
503
|
+
if (!equal_case(&base_cbs, &uri_host)) {
|
|
510
504
|
return X509_V_ERR_PERMITTED_VIOLATION;
|
|
511
505
|
}
|
|
512
506
|
|
|
513
507
|
return X509_V_OK;
|
|
514
508
|
}
|
|
509
|
+
|
|
510
|
+
int nc_match_single(const GENERAL_NAME *gen, const GENERAL_NAME *base,
|
|
511
|
+
bool excluding, bool case_insensitive_local_part) {
|
|
512
|
+
switch (base->type) {
|
|
513
|
+
case GEN_DIRNAME:
|
|
514
|
+
return nc_dn(gen->d.directoryName, base->d.directoryName);
|
|
515
|
+
|
|
516
|
+
case GEN_DNS:
|
|
517
|
+
return nc_dns(gen->d.dNSName, base->d.dNSName, excluding);
|
|
518
|
+
|
|
519
|
+
case GEN_EMAIL:
|
|
520
|
+
return nc_email(gen->d.rfc822Name, base->d.rfc822Name,
|
|
521
|
+
case_insensitive_local_part);
|
|
522
|
+
|
|
523
|
+
case GEN_URI:
|
|
524
|
+
return nc_uri(gen->d.uniformResourceIdentifier,
|
|
525
|
+
base->d.uniformResourceIdentifier);
|
|
526
|
+
|
|
527
|
+
default:
|
|
528
|
+
return X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
int nc_match(const GENERAL_NAME *gen, const NAME_CONSTRAINTS *nc,
|
|
533
|
+
bool case_insensitive_exclude_localpart) {
|
|
534
|
+
// Permitted subtrees: if any subtrees exist of the name type, then at least
|
|
535
|
+
// one subtree must match. If no subtrees match the type, then that name type
|
|
536
|
+
// is unconstrained.
|
|
537
|
+
enum {
|
|
538
|
+
kUnconstrainedNameType = 0,
|
|
539
|
+
kNoMatch,
|
|
540
|
+
kMatch,
|
|
541
|
+
} match_status = kUnconstrainedNameType;
|
|
542
|
+
for (const GENERAL_SUBTREE *sub : nc->permittedSubtrees) {
|
|
543
|
+
if (gen->type != sub->base->type) {
|
|
544
|
+
continue;
|
|
545
|
+
}
|
|
546
|
+
if (sub->minimum || sub->maximum) {
|
|
547
|
+
return X509_V_ERR_SUBTREE_MINMAX;
|
|
548
|
+
}
|
|
549
|
+
// If we already have a match don't bother trying any more
|
|
550
|
+
if (match_status == kMatch) {
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
match_status = kNoMatch;
|
|
554
|
+
int r = nc_match_single(gen, sub->base, /*excluding=*/false,
|
|
555
|
+
/*case_insensitive_local_part=*/false);
|
|
556
|
+
if (r == X509_V_OK) {
|
|
557
|
+
match_status = kMatch;
|
|
558
|
+
} else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
|
|
559
|
+
return r;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
if (match_status == kNoMatch) {
|
|
564
|
+
return X509_V_ERR_PERMITTED_VIOLATION;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
// Excluded subtrees: must not match any of these
|
|
568
|
+
for (const GENERAL_SUBTREE *sub : nc->excludedSubtrees) {
|
|
569
|
+
if (gen->type != sub->base->type) {
|
|
570
|
+
continue;
|
|
571
|
+
}
|
|
572
|
+
if (sub->minimum || sub->maximum) {
|
|
573
|
+
return X509_V_ERR_SUBTREE_MINMAX;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
int r = nc_match_single(gen, sub->base, /*excluding=*/true,
|
|
577
|
+
/*case_insensitive_local_part=*/
|
|
578
|
+
case_insensitive_exclude_localpart);
|
|
579
|
+
if (r == X509_V_OK) {
|
|
580
|
+
return X509_V_ERR_EXCLUDED_VIOLATION;
|
|
581
|
+
} else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
|
|
582
|
+
return r;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
return X509_V_OK;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
int print_nc_ipadd(BIO *bp, const ASN1_OCTET_STRING *ip) {
|
|
590
|
+
int i, len;
|
|
591
|
+
unsigned char *p;
|
|
592
|
+
p = ip->data;
|
|
593
|
+
len = ip->length;
|
|
594
|
+
BIO_puts(bp, "IP:");
|
|
595
|
+
if (len == 8) {
|
|
596
|
+
BIO_printf(bp, "%d.%d.%d.%d/%d.%d.%d.%d", p[0], p[1], p[2], p[3], p[4],
|
|
597
|
+
p[5], p[6], p[7]);
|
|
598
|
+
} else if (len == 32) {
|
|
599
|
+
for (i = 0; i < 16; i++) {
|
|
600
|
+
uint16_t v = ((uint16_t)p[0] << 8) | p[1];
|
|
601
|
+
BIO_printf(bp, "%X", v);
|
|
602
|
+
p += 2;
|
|
603
|
+
if (i == 7) {
|
|
604
|
+
BIO_puts(bp, "/");
|
|
605
|
+
} else if (i != 15) {
|
|
606
|
+
BIO_puts(bp, ":");
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
} else {
|
|
610
|
+
BIO_printf(bp, "IP Address:<invalid>");
|
|
611
|
+
}
|
|
612
|
+
return 1;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
|
|
616
|
+
const STACK_OF(GENERAL_SUBTREE) *trees, BIO *bp,
|
|
617
|
+
int ind, const char *name) {
|
|
618
|
+
if (sk_GENERAL_SUBTREE_num(trees) > 0) {
|
|
619
|
+
BIO_printf(bp, "%*s%s:\n", ind, "", name);
|
|
620
|
+
}
|
|
621
|
+
for (const GENERAL_SUBTREE *tree : trees) {
|
|
622
|
+
BIO_printf(bp, "%*s", ind + 2, "");
|
|
623
|
+
if (tree->base->type == GEN_IPADD) {
|
|
624
|
+
print_nc_ipadd(bp, tree->base->d.ip);
|
|
625
|
+
} else {
|
|
626
|
+
GENERAL_NAME_print(bp, tree->base);
|
|
627
|
+
}
|
|
628
|
+
BIO_puts(bp, "\n");
|
|
629
|
+
}
|
|
630
|
+
return 1;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
int i2r_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, void *a, BIO *bp,
|
|
634
|
+
int ind) {
|
|
635
|
+
NAME_CONSTRAINTS *ncons = reinterpret_cast<NAME_CONSTRAINTS *>(a);
|
|
636
|
+
do_i2r_name_constraints(method, ncons->permittedSubtrees, bp, ind,
|
|
637
|
+
"Permitted");
|
|
638
|
+
do_i2r_name_constraints(method, ncons->excludedSubtrees, bp, ind, "Excluded");
|
|
639
|
+
return 1;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
|
|
643
|
+
const X509V3_CTX *ctx,
|
|
644
|
+
const STACK_OF(CONF_VALUE) *nval) {
|
|
645
|
+
UniquePtr<NAME_CONSTRAINTS> ncons(NAME_CONSTRAINTS_new());
|
|
646
|
+
if (!ncons) {
|
|
647
|
+
return nullptr;
|
|
648
|
+
}
|
|
649
|
+
for (const CONF_VALUE *val : nval) {
|
|
650
|
+
CONF_VALUE tval;
|
|
651
|
+
STACK_OF(GENERAL_SUBTREE) **ptree = nullptr;
|
|
652
|
+
if (!strncmp(val->name, "permitted", 9) && val->name[9]) {
|
|
653
|
+
ptree = &ncons->permittedSubtrees;
|
|
654
|
+
tval.name = val->name + 10;
|
|
655
|
+
} else if (!strncmp(val->name, "excluded", 8) && val->name[8]) {
|
|
656
|
+
ptree = &ncons->excludedSubtrees;
|
|
657
|
+
tval.name = val->name + 9;
|
|
658
|
+
} else {
|
|
659
|
+
OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SYNTAX);
|
|
660
|
+
return nullptr;
|
|
661
|
+
}
|
|
662
|
+
tval.value = val->value;
|
|
663
|
+
UniquePtr<GENERAL_SUBTREE> sub(GENERAL_SUBTREE_new());
|
|
664
|
+
if (sub == nullptr ||
|
|
665
|
+
!v2i_GENERAL_NAME_ex(sub->base, method, ctx, &tval, 1)) {
|
|
666
|
+
return nullptr;
|
|
667
|
+
}
|
|
668
|
+
if (!*ptree) {
|
|
669
|
+
*ptree = sk_GENERAL_SUBTREE_new_null();
|
|
670
|
+
}
|
|
671
|
+
if (!*ptree || !PushToStack(*ptree, std::move(sub))) {
|
|
672
|
+
return nullptr;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
return ncons.release();
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
} // namespace
|
|
680
|
+
BSSL_NAMESPACE_END
|
|
681
|
+
|
|
682
|
+
using namespace bssl;
|
|
683
|
+
|
|
684
|
+
const X509V3_EXT_METHOD bssl::v3_name_constraints = {
|
|
685
|
+
NID_name_constraints,
|
|
686
|
+
0,
|
|
687
|
+
ASN1_ITEM_ref(NAME_CONSTRAINTS),
|
|
688
|
+
nullptr,
|
|
689
|
+
nullptr,
|
|
690
|
+
nullptr,
|
|
691
|
+
nullptr,
|
|
692
|
+
nullptr,
|
|
693
|
+
nullptr,
|
|
694
|
+
nullptr,
|
|
695
|
+
v2i_NAME_CONSTRAINTS,
|
|
696
|
+
i2r_NAME_CONSTRAINTS,
|
|
697
|
+
nullptr,
|
|
698
|
+
nullptr,
|
|
699
|
+
};
|
|
700
|
+
|
|
701
|
+
ASN1_SEQUENCE(GENERAL_SUBTREE) = {
|
|
702
|
+
ASN1_SIMPLE(GENERAL_SUBTREE, base, GENERAL_NAME),
|
|
703
|
+
ASN1_IMP_OPT(GENERAL_SUBTREE, minimum, ASN1_INTEGER, 0),
|
|
704
|
+
ASN1_IMP_OPT(GENERAL_SUBTREE, maximum, ASN1_INTEGER, 1),
|
|
705
|
+
} ASN1_SEQUENCE_END(GENERAL_SUBTREE)
|
|
706
|
+
|
|
707
|
+
ASN1_SEQUENCE(NAME_CONSTRAINTS) = {
|
|
708
|
+
ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, permittedSubtrees,
|
|
709
|
+
GENERAL_SUBTREE, 0),
|
|
710
|
+
ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, excludedSubtrees,
|
|
711
|
+
GENERAL_SUBTREE, 1),
|
|
712
|
+
} ASN1_SEQUENCE_END(NAME_CONSTRAINTS)
|
|
713
|
+
|
|
714
|
+
IMPLEMENT_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)
|
|
715
|
+
IMPLEMENT_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)
|
|
716
|
+
|
|
717
|
+
//-
|
|
718
|
+
// Check a certificate conforms to a specified set of constraints.
|
|
719
|
+
// Return values:
|
|
720
|
+
// X509_V_OK: All constraints obeyed.
|
|
721
|
+
// X509_V_ERR_PERMITTED_VIOLATION: Permitted subtree violation.
|
|
722
|
+
// X509_V_ERR_EXCLUDED_VIOLATION: Excluded subtree violation.
|
|
723
|
+
// X509_V_ERR_SUBTREE_MINMAX: Min or max values present and matching type.
|
|
724
|
+
// X509_V_ERR_UNSPECIFIED: Unspecified error.
|
|
725
|
+
// X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: Unsupported constraint type.
|
|
726
|
+
// X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: Bad or unsupported constraint
|
|
727
|
+
// syntax.
|
|
728
|
+
// X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: Bad or unsupported syntax of name.
|
|
729
|
+
int NAME_CONSTRAINTS_check(const X509 *x, const NAME_CONSTRAINTS *nc) {
|
|
730
|
+
const X509_NAME *nm = X509_get_subject_name(x);
|
|
731
|
+
|
|
732
|
+
// Guard against certificates with an excessive number of names or
|
|
733
|
+
// constraints causing a computationally expensive name constraints
|
|
734
|
+
// check.
|
|
735
|
+
const auto *x_impl = FromOpaque(x);
|
|
736
|
+
size_t name_count =
|
|
737
|
+
X509_NAME_entry_count(nm) + sk_GENERAL_NAME_num(x_impl->altname);
|
|
738
|
+
size_t constraint_count = sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) +
|
|
739
|
+
sk_GENERAL_SUBTREE_num(nc->excludedSubtrees);
|
|
740
|
+
size_t check_count = constraint_count * name_count;
|
|
741
|
+
if (name_count < (size_t)X509_NAME_entry_count(nm) ||
|
|
742
|
+
constraint_count < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) ||
|
|
743
|
+
(constraint_count && check_count / constraint_count != name_count) ||
|
|
744
|
+
check_count > 1 << 20) {
|
|
745
|
+
return X509_V_ERR_UNSPECIFIED;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
if (X509_NAME_entry_count(nm) > 0) {
|
|
749
|
+
GENERAL_NAME gntmp;
|
|
750
|
+
gntmp.type = GEN_DIRNAME;
|
|
751
|
+
gntmp.d.directoryName = const_cast<X509_NAME *>(nm);
|
|
752
|
+
|
|
753
|
+
int r = nc_match(&gntmp, nc, /*case_insensitive_exclude_localpart=*/false);
|
|
754
|
+
if (r != X509_V_OK) {
|
|
755
|
+
return r;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
gntmp.type = GEN_EMAIL;
|
|
759
|
+
|
|
760
|
+
// Process any email address attributes in subject name
|
|
761
|
+
for (int i = -1;;) {
|
|
762
|
+
i = X509_NAME_get_index_by_NID(nm, NID_pkcs9_emailAddress, i);
|
|
763
|
+
if (i == -1) {
|
|
764
|
+
break;
|
|
765
|
+
}
|
|
766
|
+
const X509_NAME_ENTRY *ne = X509_NAME_get_entry(nm, i);
|
|
767
|
+
gntmp.d.rfc822Name = X509_NAME_ENTRY_get_data(ne);
|
|
768
|
+
if (gntmp.d.rfc822Name->type != V_ASN1_IA5STRING) {
|
|
769
|
+
return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
// Whether local_part should be matched case-sensitive or not is somewhat
|
|
773
|
+
// unclear. RFC 2821 says that it should be case-sensitive. RFC 2985 says
|
|
774
|
+
// that emailAddress attributes in a Name are fully case-insensitive.
|
|
775
|
+
// Some other verifier implementations always do local-part comparison
|
|
776
|
+
// case-sensitive, while some always do it case-insensitive. Many but not
|
|
777
|
+
// all SMTP servers interpret addresses as case-insensitive.
|
|
778
|
+
//
|
|
779
|
+
// Give how poorly specified this is, and the conflicting implementations
|
|
780
|
+
// in the wild, this implementation will do case-insensitive match for
|
|
781
|
+
// excluded names from the subject to avoid potentially allowing
|
|
782
|
+
// something that wasn't expected.
|
|
783
|
+
r = nc_match(&gntmp, nc, /*case_insensitive_exclude_localpart=*/true);
|
|
784
|
+
if (r != X509_V_OK) {
|
|
785
|
+
return r;
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
for (const GENERAL_NAME *gen : x_impl->altname) {
|
|
791
|
+
int r = nc_match(gen, nc, /*case_insensitive_exclude_localpart=*/false);
|
|
792
|
+
if (r != X509_V_OK) {
|
|
793
|
+
return r;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
return X509_V_OK;
|
|
798
|
+
}
|