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
|
@@ -36,7 +36,7 @@ extern "C" {
|
|
|
36
36
|
// particularly prone to behavior changes and API removals, as BoringSSL
|
|
37
37
|
// iterates on these issues.
|
|
38
38
|
//
|
|
39
|
-
// Use the new
|
|
39
|
+
// Use the new `CBS` and `CBB` library in <openssl/bytestring.h> instead.
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
// Tag constants.
|
|
@@ -63,7 +63,7 @@ extern "C" {
|
|
|
63
63
|
#define V_ASN1_PRIMITIVE_TAG 0x1f
|
|
64
64
|
|
|
65
65
|
// V_ASN1_MAX_UNIVERSAL is the highest supported universal tag number. It is
|
|
66
|
-
// necessary to avoid ambiguity with
|
|
66
|
+
// necessary to avoid ambiguity with `V_ASN1_NEG` and `MBSTRING_FLAG`.
|
|
67
67
|
//
|
|
68
68
|
// TODO(davidben): Make this private.
|
|
69
69
|
#define V_ASN1_MAX_UNIVERSAL 0xff
|
|
@@ -71,16 +71,12 @@ extern "C" {
|
|
|
71
71
|
// V_ASN1_UNDEF is used in some APIs to indicate an ASN.1 element is omitted.
|
|
72
72
|
#define V_ASN1_UNDEF (-1)
|
|
73
73
|
|
|
74
|
-
// V_ASN1_OTHER is used in
|
|
74
|
+
// V_ASN1_OTHER is used in `ASN1_TYPE` to indicate a non-universal ASN.1 type.
|
|
75
75
|
#define V_ASN1_OTHER (-3)
|
|
76
76
|
|
|
77
77
|
// V_ASN1_ANY is used by the ASN.1 templates to indicate an ANY type.
|
|
78
78
|
#define V_ASN1_ANY (-4)
|
|
79
79
|
|
|
80
|
-
// V_ASN1_ANY_AS_STRING is used by the ASN.1 templates to indicate an ANY type
|
|
81
|
-
// represented with |ASN1_STRING| instead of |ASN1_TYPE|.
|
|
82
|
-
#define V_ASN1_ANY_AS_STRING (-5)
|
|
83
|
-
|
|
84
80
|
// The following constants are tag numbers for universal types.
|
|
85
81
|
#define V_ASN1_EOC 0
|
|
86
82
|
#define V_ASN1_BOOLEAN 1
|
|
@@ -111,8 +107,8 @@ extern "C" {
|
|
|
111
107
|
#define V_ASN1_UNIVERSALSTRING 28
|
|
112
108
|
#define V_ASN1_BMPSTRING 30
|
|
113
109
|
|
|
114
|
-
// The following constants are used for
|
|
115
|
-
// negative INTEGER and ENUMERATED values. See
|
|
110
|
+
// The following constants are used for `ASN1_STRING` values that represent
|
|
111
|
+
// negative INTEGER and ENUMERATED values. See `ASN1_STRING` for more details.
|
|
116
112
|
#define V_ASN1_NEG 0x100
|
|
117
113
|
#define V_ASN1_NEG_INTEGER (V_ASN1_INTEGER | V_ASN1_NEG)
|
|
118
114
|
#define V_ASN1_NEG_ENUMERATED (V_ASN1_ENUMERATED | V_ASN1_NEG)
|
|
@@ -137,12 +133,12 @@ extern "C" {
|
|
|
137
133
|
#define B_ASN1_GENERALIZEDTIME 0x8000
|
|
138
134
|
#define B_ASN1_SEQUENCE 0x10000
|
|
139
135
|
|
|
140
|
-
// ASN1_tag2bit converts
|
|
141
|
-
// corresponding
|
|
136
|
+
// ASN1_tag2bit converts `tag` from the tag number of a universal type to a
|
|
137
|
+
// corresponding `B_ASN1_*` constant, or zero if `tag` has no bitmask.
|
|
142
138
|
OPENSSL_EXPORT unsigned long ASN1_tag2bit(int tag);
|
|
143
139
|
|
|
144
|
-
// ASN1_tag2str returns a string representation of
|
|
145
|
-
// number for a universal type, or
|
|
140
|
+
// ASN1_tag2str returns a string representation of `tag`, interpret as a tag
|
|
141
|
+
// number for a universal type, or `V_ASN1_NEG_*`.
|
|
146
142
|
OPENSSL_EXPORT const char *ASN1_tag2str(int tag);
|
|
147
143
|
|
|
148
144
|
|
|
@@ -153,36 +149,36 @@ OPENSSL_EXPORT const char *ASN1_tag2str(int tag);
|
|
|
153
149
|
|
|
154
150
|
#if 0 // Sample functions
|
|
155
151
|
|
|
156
|
-
// d2i_SAMPLE parses a structure from up to
|
|
157
|
-
// it advances
|
|
158
|
-
//
|
|
159
|
-
// additionally frees the previous value at
|
|
152
|
+
// d2i_SAMPLE parses a structure from up to `len` bytes at `*inp`. On success,
|
|
153
|
+
// it advances `*inp` by the number of bytes read and returns a newly-allocated
|
|
154
|
+
// `SAMPLE` object containing the parsed structure. If `out` is non-NULL, it
|
|
155
|
+
// additionally frees the previous value at `*out` and updates `*out` to the
|
|
160
156
|
// result. If parsing or allocating the result fails, it returns NULL.
|
|
161
157
|
//
|
|
162
158
|
// This function does not reject trailing data in the input. This allows the
|
|
163
159
|
// caller to parse a sequence of concatenated structures. Callers parsing only
|
|
164
|
-
// one structure should check for trailing data by comparing the updated
|
|
160
|
+
// one structure should check for trailing data by comparing the updated `*inp`
|
|
165
161
|
// with the end of the input.
|
|
166
162
|
//
|
|
167
|
-
// Note: If
|
|
163
|
+
// Note: If `out` and `*out` are both non-NULL, the object at `*out` is not
|
|
168
164
|
// updated in-place. Instead, it is freed, and the pointer is updated to the
|
|
169
|
-
// new object. This differs from OpenSSL. Callers are recommended to set
|
|
165
|
+
// new object. This differs from OpenSSL. Callers are recommended to set `out`
|
|
170
166
|
// to NULL and instead use the return value.
|
|
171
167
|
SAMPLE *d2i_SAMPLE(SAMPLE **out, const uint8_t **inp, long len);
|
|
172
168
|
|
|
173
|
-
// i2d_SAMPLE marshals
|
|
174
|
-
// it returns the length of the result and outputs it via
|
|
169
|
+
// i2d_SAMPLE marshals `in`. On error, it returns a negative value. On success,
|
|
170
|
+
// it returns the length of the result and outputs it via `outp` as follows:
|
|
175
171
|
//
|
|
176
|
-
// If
|
|
172
|
+
// If `outp` is NULL, the function writes nothing. This mode can be used to size
|
|
177
173
|
// buffers.
|
|
178
174
|
//
|
|
179
|
-
// If
|
|
175
|
+
// If `outp` is non-NULL but `*outp` is NULL, the function sets `*outp` to a
|
|
180
176
|
// newly-allocated buffer containing the result. The caller is responsible for
|
|
181
|
-
// releasing
|
|
177
|
+
// releasing `*outp` with `OPENSSL_free`. This mode is recommended for most
|
|
182
178
|
// callers.
|
|
183
179
|
//
|
|
184
|
-
// If
|
|
185
|
-
//
|
|
180
|
+
// If `outp` and `*outp` are non-NULL, the function writes the result to
|
|
181
|
+
// `*outp`, which must have enough space available, and advances `*outp` just
|
|
186
182
|
// past the output.
|
|
187
183
|
//
|
|
188
184
|
// WARNING: In the third mode, the function does not internally check output
|
|
@@ -193,7 +189,7 @@ int i2d_SAMPLE(const SAMPLE *in, uint8_t **outp);
|
|
|
193
189
|
#endif // Sample functions
|
|
194
190
|
|
|
195
191
|
// The following typedefs are sometimes used for pointers to functions like
|
|
196
|
-
//
|
|
192
|
+
// `d2i_SAMPLE` and `i2d_SAMPLE`. Note, however, that these act on `void*`.
|
|
197
193
|
// Calling a function with a different pointer type is undefined in C, so this
|
|
198
194
|
// is only valid with a wrapper.
|
|
199
195
|
typedef void *d2i_of_void(void **, const unsigned char **, long);
|
|
@@ -202,212 +198,214 @@ typedef int i2d_of_void(const void *, unsigned char **);
|
|
|
202
198
|
|
|
203
199
|
// ASN.1 types.
|
|
204
200
|
//
|
|
205
|
-
// An
|
|
201
|
+
// An `ASN1_ITEM` represents an ASN.1 type and allows working with ASN.1 types
|
|
206
202
|
// generically.
|
|
207
203
|
//
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
// and the name of an
|
|
211
|
-
//
|
|
204
|
+
// `ASN1_ITEM`s use a different namespace from C types and are accessed via
|
|
205
|
+
// `ASN1_ITEM_*` macros. So, for example, `ASN1_OCTET_STRING` is both a C type
|
|
206
|
+
// and the name of an `ASN1_ITEM`, referenced as
|
|
207
|
+
// `ASN1_ITEM_rptr(ASN1_OCTET_STRING)`.
|
|
212
208
|
//
|
|
213
|
-
// Each
|
|
209
|
+
// Each `ASN1_ITEM` has a corresponding C type, typically with the same name,
|
|
214
210
|
// which represents values in the ASN.1 type. This type is either a pointer type
|
|
215
|
-
// or
|
|
211
|
+
// or `ASN1_BOOLEAN`. When it is a pointer, NULL pointers represent omitted
|
|
216
212
|
// values. For example, an OCTET STRING value is declared with the C type
|
|
217
|
-
//
|
|
213
|
+
// `ASN1_OCTET_STRING*` and uses the `ASN1_ITEM` named `ASN1_OCTET_STRING`. An
|
|
218
214
|
// OPTIONAL OCTET STRING uses the same C type and represents an omitted value
|
|
219
|
-
// with a NULL pointer.
|
|
215
|
+
// with a NULL pointer. `ASN1_BOOLEAN` is described in a later section.
|
|
220
216
|
|
|
221
|
-
// DECLARE_ASN1_ITEM declares an
|
|
222
|
-
// may be referenced with
|
|
217
|
+
// DECLARE_ASN1_ITEM declares an `ASN1_ITEM` with name `name`. The `ASN1_ITEM`
|
|
218
|
+
// may be referenced with `ASN1_ITEM_rptr`. Uses of this macro should document
|
|
223
219
|
// the corresponding ASN.1 and C types.
|
|
224
220
|
#define DECLARE_ASN1_ITEM(name) extern OPENSSL_EXPORT const ASN1_ITEM name##_it;
|
|
225
221
|
|
|
226
|
-
// ASN1_ITEM_rptr returns the
|
|
222
|
+
// ASN1_ITEM_rptr returns the `const ASN1_ITEM *` named `name`.
|
|
227
223
|
#define ASN1_ITEM_rptr(name) (&(name##_it))
|
|
228
224
|
|
|
229
|
-
// ASN1_ITEM_EXP is an abstraction for referencing an
|
|
225
|
+
// ASN1_ITEM_EXP is an abstraction for referencing an `ASN1_ITEM` in a
|
|
230
226
|
// constant-initialized structure, such as a method table. It exists because, on
|
|
231
|
-
// some OpenSSL platforms,
|
|
232
|
-
// functions. Structures reference the
|
|
233
|
-
//
|
|
227
|
+
// some OpenSSL platforms, `ASN1_ITEM` references are indirected through
|
|
228
|
+
// functions. Structures reference the `ASN1_ITEM` by declaring a field like
|
|
229
|
+
// `ASN1_ITEM_EXP *item` and initializing it with `ASN1_ITEM_ref`.
|
|
234
230
|
typedef const ASN1_ITEM ASN1_ITEM_EXP;
|
|
235
231
|
|
|
236
|
-
// ASN1_ITEM_ref returns an
|
|
232
|
+
// ASN1_ITEM_ref returns an `ASN1_ITEM_EXP*` for the `ASN1_ITEM` named `name`.
|
|
237
233
|
#define ASN1_ITEM_ref(name) (&(name##_it))
|
|
238
234
|
|
|
239
|
-
// ASN1_ITEM_ptr converts
|
|
240
|
-
//
|
|
235
|
+
// ASN1_ITEM_ptr converts `iptr`, which must be an `ASN1_ITEM_EXP*` to a
|
|
236
|
+
// `const ASN1_ITEM*`.
|
|
241
237
|
#define ASN1_ITEM_ptr(iptr) (iptr)
|
|
242
238
|
|
|
243
|
-
// ASN1_VALUE_st (aka
|
|
244
|
-
// the C type corresponding to an
|
|
239
|
+
// ASN1_VALUE_st (aka `ASN1_VALUE`) is an opaque type used as a placeholder for
|
|
240
|
+
// the C type corresponding to an `ASN1_ITEM`.
|
|
245
241
|
typedef struct ASN1_VALUE_st ASN1_VALUE;
|
|
246
242
|
|
|
247
|
-
// ASN1_item_new allocates a new value of the C type corresponding to
|
|
243
|
+
// ASN1_item_new allocates a new value of the C type corresponding to `it`, or
|
|
248
244
|
// NULL on error. On success, the caller must release the value with
|
|
249
|
-
//
|
|
245
|
+
// `ASN1_item_free`, or the corresponding C type's free function, when done. The
|
|
250
246
|
// new value will initialize fields of the value to some default state, such as
|
|
251
247
|
// an empty string. Note, however, that this default state sometimes omits
|
|
252
248
|
// required values, such as with CHOICE types.
|
|
253
249
|
//
|
|
254
|
-
// This function may not be used with
|
|
255
|
-
//
|
|
250
|
+
// This function may not be used with `ASN1_ITEM`s whose C type is
|
|
251
|
+
// `ASN1_BOOLEAN`.
|
|
256
252
|
//
|
|
257
253
|
// WARNING: Casting the result of this function to the wrong type is a
|
|
258
254
|
// potentially exploitable memory error. Callers must ensure the value is used
|
|
259
|
-
// consistently with
|
|
260
|
-
//
|
|
255
|
+
// consistently with `it`. Prefer using type-specific functions such as
|
|
256
|
+
// `ASN1_OCTET_STRING_new`.
|
|
261
257
|
OPENSSL_EXPORT ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it);
|
|
262
258
|
|
|
263
|
-
// ASN1_item_free releases memory associated with
|
|
264
|
-
// of the C type corresponding to
|
|
259
|
+
// ASN1_item_free releases memory associated with `val`, which must be an object
|
|
260
|
+
// of the C type corresponding to `it`.
|
|
265
261
|
//
|
|
266
|
-
// This function may not be used with
|
|
267
|
-
//
|
|
262
|
+
// This function may not be used with `ASN1_ITEM`s whose C type is
|
|
263
|
+
// `ASN1_BOOLEAN`.
|
|
268
264
|
//
|
|
269
265
|
// WARNING: Passing a pointer of the wrong type into this function is a
|
|
270
|
-
// potentially exploitable memory error. Callers must ensure
|
|
271
|
-
// with
|
|
272
|
-
//
|
|
266
|
+
// potentially exploitable memory error. Callers must ensure `val` is consistent
|
|
267
|
+
// with `it`. Prefer using type-specific functions such as
|
|
268
|
+
// `ASN1_OCTET_STRING_free`.
|
|
273
269
|
OPENSSL_EXPORT void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it);
|
|
274
270
|
|
|
275
|
-
// ASN1_item_d2i parses the ASN.1 type
|
|
276
|
-
// It behaves like
|
|
277
|
-
// to
|
|
271
|
+
// ASN1_item_d2i parses the ASN.1 type `it` from up to `len` bytes at `*inp`.
|
|
272
|
+
// It behaves like `d2i_SAMPLE`, except that `out` and the return value are cast
|
|
273
|
+
// to `ASN1_VALUE` pointers.
|
|
278
274
|
//
|
|
279
275
|
// TODO(https://crbug.com/boringssl/444): C strict aliasing forbids type-punning
|
|
280
|
-
//
|
|
281
|
-
// resolved, we will need to pick which type
|
|
282
|
-
// use a non-NULL
|
|
276
|
+
// `T*` and `ASN1_VALUE*` the way this function signature does. When that bug is
|
|
277
|
+
// resolved, we will need to pick which type `*out` is (probably `T*`). Do not
|
|
278
|
+
// use a non-NULL `out` to avoid ending up on the wrong side of this question.
|
|
283
279
|
//
|
|
284
|
-
// This function may not be used with
|
|
285
|
-
//
|
|
280
|
+
// This function may not be used with `ASN1_ITEM`s whose C type is
|
|
281
|
+
// `ASN1_BOOLEAN`.
|
|
286
282
|
//
|
|
287
283
|
// WARNING: Casting the result of this function to the wrong type, or passing a
|
|
288
284
|
// pointer of the wrong type into this function, are potentially exploitable
|
|
289
|
-
// memory errors. Callers must ensure
|
|
290
|
-
// using type-specific functions such as
|
|
285
|
+
// memory errors. Callers must ensure `out` is consistent with `it`. Prefer
|
|
286
|
+
// using type-specific functions such as `d2i_ASN1_OCTET_STRING`.
|
|
291
287
|
OPENSSL_EXPORT ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **out,
|
|
292
288
|
const unsigned char **inp, long len,
|
|
293
289
|
const ASN1_ITEM *it);
|
|
294
290
|
|
|
295
|
-
// ASN1_item_i2d marshals
|
|
296
|
-
// described in
|
|
291
|
+
// ASN1_item_i2d marshals `val` as the ASN.1 type associated with `it`, as
|
|
292
|
+
// described in `i2d_SAMPLE`.
|
|
297
293
|
//
|
|
298
|
-
// This function may not be used with
|
|
299
|
-
//
|
|
294
|
+
// This function may not be used with `ASN1_ITEM`s whose C type is
|
|
295
|
+
// `ASN1_BOOLEAN`.
|
|
300
296
|
//
|
|
301
297
|
// WARNING: Passing a pointer of the wrong type into this function is a
|
|
302
|
-
// potentially exploitable memory error. Callers must ensure
|
|
303
|
-
// with
|
|
304
|
-
//
|
|
298
|
+
// potentially exploitable memory error. Callers must ensure `val` is consistent
|
|
299
|
+
// with `it`. Prefer using type-specific functions such as
|
|
300
|
+
// `i2d_ASN1_OCTET_STRING`.
|
|
305
301
|
OPENSSL_EXPORT int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **outp,
|
|
306
302
|
const ASN1_ITEM *it);
|
|
307
303
|
|
|
308
|
-
// ASN1_item_dup returns a newly-allocated copy of
|
|
309
|
-
// must be an object of
|
|
304
|
+
// ASN1_item_dup returns a newly-allocated copy of `x`, or NULL on error. `x`
|
|
305
|
+
// must be an object of `it`'s C type.
|
|
310
306
|
//
|
|
311
|
-
// This function may not be used with
|
|
312
|
-
//
|
|
307
|
+
// This function may not be used with `ASN1_ITEM`s whose C type is
|
|
308
|
+
// `ASN1_BOOLEAN`.
|
|
313
309
|
//
|
|
314
310
|
// WARNING: Casting the result of this function to the wrong type, or passing a
|
|
315
311
|
// pointer of the wrong type into this function, are potentially exploitable
|
|
316
312
|
// memory errors. Prefer using type-specific functions such as
|
|
317
|
-
//
|
|
313
|
+
// `ASN1_STRING_dup`.
|
|
318
314
|
OPENSSL_EXPORT void *ASN1_item_dup(const ASN1_ITEM *it, void *x);
|
|
319
315
|
|
|
320
|
-
// The following functions behave like
|
|
321
|
-
// instead.
|
|
322
|
-
//
|
|
316
|
+
// The following functions behave like `ASN1_item_d2i` but read from `in`
|
|
317
|
+
// instead. `out` is the same parameter as in `ASN1_item_d2i`, but written with
|
|
318
|
+
// `void*` instead. The return values similarly match.
|
|
323
319
|
//
|
|
324
|
-
// These functions may not be used with
|
|
325
|
-
//
|
|
320
|
+
// These functions may not be used with `ASN1_ITEM`s whose C type is
|
|
321
|
+
// `ASN1_BOOLEAN`.
|
|
326
322
|
//
|
|
327
|
-
// WARNING: These functions do not bound how much data is read from
|
|
323
|
+
// WARNING: These functions do not bound how much data is read from `in`.
|
|
328
324
|
// Parsing an untrusted input could consume unbounded memory.
|
|
329
325
|
OPENSSL_EXPORT void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *out);
|
|
330
326
|
OPENSSL_EXPORT void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *out);
|
|
331
327
|
|
|
332
|
-
// The following functions behave like
|
|
333
|
-
// instead.
|
|
334
|
-
//
|
|
328
|
+
// The following functions behave like `ASN1_item_i2d` but write to `out`
|
|
329
|
+
// instead. `in` is the same parameter as in `ASN1_item_i2d`, but written with
|
|
330
|
+
// `void*` instead.
|
|
335
331
|
//
|
|
336
|
-
// These functions may not be used with
|
|
337
|
-
//
|
|
338
|
-
OPENSSL_EXPORT int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out,
|
|
339
|
-
|
|
332
|
+
// These functions may not be used with `ASN1_ITEM`s whose C type is
|
|
333
|
+
// `ASN1_BOOLEAN`.
|
|
334
|
+
OPENSSL_EXPORT int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out,
|
|
335
|
+
const void *in);
|
|
336
|
+
OPENSSL_EXPORT int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out,
|
|
337
|
+
const void *in);
|
|
340
338
|
|
|
341
|
-
// ASN1_item_unpack parses
|
|
342
|
-
// newly-allocated instance of
|
|
339
|
+
// ASN1_item_unpack parses `oct`'s contents as `it`'s ASN.1 type. It returns a
|
|
340
|
+
// newly-allocated instance of `it`'s C type on success, or NULL on error.
|
|
343
341
|
//
|
|
344
|
-
// This function may not be used with
|
|
345
|
-
//
|
|
342
|
+
// This function may not be used with `ASN1_ITEM`s whose C type is
|
|
343
|
+
// `ASN1_BOOLEAN`.
|
|
346
344
|
//
|
|
347
345
|
// WARNING: Casting the result of this function to the wrong type is a
|
|
348
346
|
// potentially exploitable memory error. Callers must ensure the value is used
|
|
349
|
-
// consistently with
|
|
347
|
+
// consistently with `it`.
|
|
350
348
|
OPENSSL_EXPORT void *ASN1_item_unpack(const ASN1_STRING *oct,
|
|
351
349
|
const ASN1_ITEM *it);
|
|
352
350
|
|
|
353
|
-
// ASN1_item_pack marshals
|
|
354
|
-
// returns a newly-allocated
|
|
355
|
-
// If
|
|
356
|
-
// sets
|
|
357
|
-
// the result to
|
|
351
|
+
// ASN1_item_pack marshals `obj` as `it`'s ASN.1 type. If `out` is NULL, it
|
|
352
|
+
// returns a newly-allocated `ASN1_STRING` with the result, or NULL on error.
|
|
353
|
+
// If `out` is non-NULL, but `*out` is NULL, it does the same but additionally
|
|
354
|
+
// sets `*out` to the result. If both `out` and `*out` are non-NULL, it writes
|
|
355
|
+
// the result to `*out` and returns `*out` on success or NULL on error.
|
|
358
356
|
//
|
|
359
|
-
// This function may not be used with
|
|
360
|
-
//
|
|
357
|
+
// This function may not be used with `ASN1_ITEM`s whose C type is
|
|
358
|
+
// `ASN1_BOOLEAN`.
|
|
361
359
|
//
|
|
362
360
|
// WARNING: Passing a pointer of the wrong type into this function is a
|
|
363
|
-
// potentially exploitable memory error. Callers must ensure
|
|
364
|
-
// with
|
|
361
|
+
// potentially exploitable memory error. Callers must ensure `val` is consistent
|
|
362
|
+
// with `it`.
|
|
365
363
|
OPENSSL_EXPORT ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it,
|
|
366
364
|
ASN1_STRING **out);
|
|
367
365
|
|
|
368
366
|
|
|
369
367
|
// Booleans.
|
|
370
368
|
//
|
|
371
|
-
// This library represents ASN.1 BOOLEAN values with
|
|
369
|
+
// This library represents ASN.1 BOOLEAN values with `ASN1_BOOLEAN`, which is an
|
|
372
370
|
// integer type. FALSE is zero, TRUE is 0xff, and an omitted OPTIONAL BOOLEAN is
|
|
373
371
|
// -1.
|
|
374
372
|
|
|
375
|
-
// ASN1_BOOLEAN_FALSE is FALSE as an
|
|
373
|
+
// ASN1_BOOLEAN_FALSE is FALSE as an `ASN1_BOOLEAN`.
|
|
376
374
|
#define ASN1_BOOLEAN_FALSE 0
|
|
377
375
|
|
|
378
|
-
// ASN1_BOOLEAN_TRUE is TRUE as an
|
|
379
|
-
// 1, so prefer
|
|
376
|
+
// ASN1_BOOLEAN_TRUE is TRUE as an `ASN1_BOOLEAN`. Some code incorrectly uses
|
|
377
|
+
// 1, so prefer `b != ASN1_BOOLEAN_FALSE` over `b == ASN1_BOOLEAN_TRUE`.
|
|
380
378
|
#define ASN1_BOOLEAN_TRUE 0xff
|
|
381
379
|
|
|
382
|
-
// ASN1_BOOLEAN_NONE, in contexts where the
|
|
380
|
+
// ASN1_BOOLEAN_NONE, in contexts where the `ASN1_BOOLEAN` represents an
|
|
383
381
|
// OPTIONAL BOOLEAN, is an omitted value. Using this value in other contexts is
|
|
384
382
|
// undefined and may be misinterpreted as TRUE.
|
|
385
383
|
#define ASN1_BOOLEAN_NONE (-1)
|
|
386
384
|
|
|
387
|
-
// d2i_ASN1_BOOLEAN parses a DER-encoded ASN.1 BOOLEAN from up to
|
|
388
|
-
//
|
|
389
|
-
// returns the result. If
|
|
390
|
-
// to
|
|
385
|
+
// d2i_ASN1_BOOLEAN parses a DER-encoded ASN.1 BOOLEAN from up to `len` bytes at
|
|
386
|
+
// `*inp`. On success, it advances `*inp` by the number of bytes read and
|
|
387
|
+
// returns the result. If `out` is non-NULL, it additionally writes the result
|
|
388
|
+
// to `*out`. On error, it returns `ASN1_BOOLEAN_NONE`.
|
|
391
389
|
//
|
|
392
390
|
// This function does not reject trailing data in the input. This allows the
|
|
393
391
|
// caller to parse a sequence of concatenated structures. Callers parsing only
|
|
394
|
-
// one structure should check for trailing data by comparing the updated
|
|
392
|
+
// one structure should check for trailing data by comparing the updated `*inp`
|
|
395
393
|
// with the end of the input.
|
|
396
394
|
//
|
|
397
|
-
// WARNING: This function's is slightly different from other
|
|
398
|
-
// because
|
|
395
|
+
// WARNING: This function's is slightly different from other `d2i_*` functions
|
|
396
|
+
// because `ASN1_BOOLEAN` is not a pointer type.
|
|
399
397
|
OPENSSL_EXPORT ASN1_BOOLEAN d2i_ASN1_BOOLEAN(ASN1_BOOLEAN *out,
|
|
400
398
|
const unsigned char **inp,
|
|
401
399
|
long len);
|
|
402
400
|
|
|
403
|
-
// i2d_ASN1_BOOLEAN marshals
|
|
404
|
-
//
|
|
401
|
+
// i2d_ASN1_BOOLEAN marshals `a` as a DER-encoded ASN.1 BOOLEAN, as described in
|
|
402
|
+
// `i2d_SAMPLE`.
|
|
405
403
|
OPENSSL_EXPORT int i2d_ASN1_BOOLEAN(ASN1_BOOLEAN a, unsigned char **outp);
|
|
406
404
|
|
|
407
|
-
// The following
|
|
408
|
-
//
|
|
405
|
+
// The following `ASN1_ITEM`s have ASN.1 type BOOLEAN and C type `ASN1_BOOLEAN`.
|
|
406
|
+
// `ASN1_TBOOLEAN` and `ASN1_FBOOLEAN` must be marked OPTIONAL. When omitted,
|
|
409
407
|
// they are parsed as TRUE and FALSE, respectively, rather than
|
|
410
|
-
//
|
|
408
|
+
// `ASN1_BOOLEAN_NONE`.
|
|
411
409
|
DECLARE_ASN1_ITEM(ASN1_BOOLEAN)
|
|
412
410
|
DECLARE_ASN1_ITEM(ASN1_TBOOLEAN)
|
|
413
411
|
DECLARE_ASN1_ITEM(ASN1_FBOOLEAN)
|
|
@@ -417,71 +415,71 @@ DECLARE_ASN1_ITEM(ASN1_FBOOLEAN)
|
|
|
417
415
|
//
|
|
418
416
|
// ASN.1 contains a myriad of string types, as well as types that contain data
|
|
419
417
|
// that may be encoded into a string. This library uses a single type,
|
|
420
|
-
//
|
|
418
|
+
// `ASN1_STRING`, to represent most values.
|
|
421
419
|
|
|
422
|
-
// An asn1_string_st (aka
|
|
423
|
-
// ASN.1 type. It contains a
|
|
420
|
+
// An asn1_string_st (aka `ASN1_STRING`) represents a value of a string-like
|
|
421
|
+
// ASN.1 type. It contains a `type` field, and a byte string `data` field with a
|
|
424
422
|
// type-specific representation. This type-specific representation does not
|
|
425
423
|
// always correspond to the DER encoding of the type.
|
|
426
424
|
//
|
|
427
|
-
// If
|
|
428
|
-
//
|
|
429
|
-
//
|
|
430
|
-
//
|
|
431
|
-
//
|
|
425
|
+
// If `type` is one of `V_ASN1_OCTET_STRING`, `V_ASN1_UTF8STRING`,
|
|
426
|
+
// `V_ASN1_NUMERICSTRING`, `V_ASN1_PRINTABLESTRING`, `V_ASN1_T61STRING`,
|
|
427
|
+
// `V_ASN1_VIDEOTEXSTRING`, `V_ASN1_IA5STRING`, `V_ASN1_GRAPHICSTRING`,
|
|
428
|
+
// `V_ASN1_ISO64STRING`, `V_ASN1_VISIBLESTRING`, `V_ASN1_GENERALSTRING`,
|
|
429
|
+
// `V_ASN1_UNIVERSALSTRING`, or `V_ASN1_BMPSTRING`, the object represents an
|
|
432
430
|
// ASN.1 string type. The data contains the byte representation of the
|
|
433
431
|
// string.
|
|
434
432
|
//
|
|
435
|
-
// If
|
|
433
|
+
// If `type` is `V_ASN1_BIT_STRING`, the object represents a BIT STRING value.
|
|
436
434
|
// See bit string documentation below for the data and flags.
|
|
437
435
|
//
|
|
438
|
-
// If
|
|
439
|
-
//
|
|
436
|
+
// If `type` is one of `V_ASN1_INTEGER`, `V_ASN1_NEG_INTEGER`,
|
|
437
|
+
// `V_ASN1_ENUMERATED`, or `V_ASN1_NEG_ENUMERATED`, the object represents an
|
|
440
438
|
// INTEGER or ENUMERATED value. See integer documentation below for details.
|
|
441
439
|
//
|
|
442
|
-
// If
|
|
440
|
+
// If `type` is `V_ASN1_GENERALIZEDTIME` or `V_ASN1_UTCTIME`, the object
|
|
443
441
|
// represents a GeneralizedTime or UTCTime value, respectively. The data
|
|
444
442
|
// contains the DER encoding of the value. For example, the UNIX epoch would be
|
|
445
443
|
// "19700101000000Z" for a GeneralizedTime and "700101000000Z" for a UTCTime.
|
|
446
444
|
//
|
|
447
|
-
// If
|
|
445
|
+
// If `type` is `V_ASN1_SEQUENCE`, `V_ASN1_SET`, or `V_ASN1_OTHER`, the object
|
|
448
446
|
// represents a SEQUENCE, SET, or arbitrary ASN.1 value, respectively. Unlike
|
|
449
447
|
// the above cases, the data contains the DER encoding of the entire structure,
|
|
450
448
|
// including the header. If the value is explicitly or implicitly tagged, this
|
|
451
449
|
// too will be reflected in the data field. As this case handles unknown types,
|
|
452
450
|
// the contents are not checked when parsing or serializing.
|
|
453
451
|
//
|
|
454
|
-
// Other values of
|
|
455
|
-
// default-constructed objects may set
|
|
452
|
+
// Other values of `type` do not represent a valid ASN.1 value, though
|
|
453
|
+
// default-constructed objects may set `type` to -1. Such objects cannot be
|
|
456
454
|
// serialized.
|
|
457
455
|
//
|
|
458
|
-
//
|
|
459
|
-
//
|
|
460
|
-
//
|
|
461
|
-
//
|
|
462
|
-
//
|
|
463
|
-
//
|
|
464
|
-
// ASN.1 types.
|
|
456
|
+
// `ASN1_STRING` additionally has the following typedefs: `ASN1_BIT_STRING`,
|
|
457
|
+
// `ASN1_BMPSTRING`, `ASN1_ENUMERATED`, `ASN1_GENERALIZEDTIME`,
|
|
458
|
+
// `ASN1_GENERALSTRING`, `ASN1_IA5STRING`, `ASN1_INTEGER`, `ASN1_OCTET_STRING`,
|
|
459
|
+
// `ASN1_PRINTABLESTRING`, `ASN1_T61STRING`, `ASN1_TIME`,
|
|
460
|
+
// `ASN1_UNIVERSALSTRING`, `ASN1_UTCTIME`, `ASN1_UTF8STRING`, and
|
|
461
|
+
// `ASN1_VISIBLESTRING`. Other than `ASN1_TIME`, these correspond to universal
|
|
462
|
+
// ASN.1 types. `ASN1_TIME` represents a CHOICE of UTCTime and GeneralizedTime,
|
|
465
463
|
// with a cutoff of 2049, as used in Section 4.1.2.5 of RFC 5280.
|
|
466
464
|
//
|
|
467
465
|
// For clarity, callers are encouraged to use the appropriate typedef when
|
|
468
|
-
// available. They are the same type as
|
|
469
|
-
// pass them into functions expecting
|
|
470
|
-
//
|
|
471
|
-
//
|
|
472
|
-
// If a function returns an
|
|
473
|
-
// implies constraints on
|
|
474
|
-
// However, if a function takes an
|
|
475
|
-
//
|
|
466
|
+
// available. They are the same type as `ASN1_STRING`, so a caller may freely
|
|
467
|
+
// pass them into functions expecting `ASN1_STRING`, such as
|
|
468
|
+
// `ASN1_STRING_length`.
|
|
469
|
+
//
|
|
470
|
+
// If a function returns an `ASN1_STRING` where the typedef or ASN.1 structure
|
|
471
|
+
// implies constraints on `type`, callers may assume that `type` is correct.
|
|
472
|
+
// However, if a function takes an `ASN1_STRING` as input, callers must ensure
|
|
473
|
+
// `type` matches. These invariants are not captured by the C type system and
|
|
476
474
|
// may not be checked at runtime. For example, callers may assume the output of
|
|
477
|
-
//
|
|
478
|
-
// Callers must not pass a string of type
|
|
479
|
-
//
|
|
480
|
-
// and break the
|
|
475
|
+
// `X509_get0_serialNumber` has type `V_ASN1_INTEGER` or `V_ASN1_NEG_INTEGER`.
|
|
476
|
+
// Callers must not pass a string of type `V_ASN1_OCTET_STRING` to
|
|
477
|
+
// `X509_set_serialNumber`. Doing so may break invariants on the `X509` object
|
|
478
|
+
// and break the `X509_get0_serialNumber` invariant.
|
|
481
479
|
//
|
|
482
480
|
// TODO(https://crbug.com/boringssl/445): This is very unfriendly. Getting the
|
|
483
481
|
// type field wrong should not cause memory errors, but it may do strange
|
|
484
|
-
// things. We should add runtime checks to anything that consumes
|
|
482
|
+
// things. We should add runtime checks to anything that consumes `ASN1_STRING`s
|
|
485
483
|
// from the caller.
|
|
486
484
|
struct asn1_string_st {
|
|
487
485
|
int length;
|
|
@@ -490,89 +488,91 @@ struct asn1_string_st {
|
|
|
490
488
|
long flags;
|
|
491
489
|
};
|
|
492
490
|
|
|
493
|
-
//
|
|
494
|
-
//
|
|
495
|
-
// value. When not set, all trailing zero bits in the last byte are implicitly
|
|
496
|
-
// treated as padding. This behavior is deprecated and should not be used.
|
|
497
|
-
#define ASN1_STRING_FLAG_BITS_LEFT 0x08
|
|
498
|
-
|
|
499
|
-
// ASN1_STRING_type_new returns a newly-allocated empty |ASN1_STRING| object of
|
|
500
|
-
// type |type|, or NULL on error.
|
|
491
|
+
// ASN1_STRING_type_new returns a newly-allocated empty `ASN1_STRING` object of
|
|
492
|
+
// type `type`, or NULL on error.
|
|
501
493
|
OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_type_new(int type);
|
|
502
494
|
|
|
503
|
-
// ASN1_STRING_new returns a newly-allocated empty
|
|
495
|
+
// ASN1_STRING_new returns a newly-allocated empty `ASN1_STRING` object with an
|
|
504
496
|
// arbitrary type. Prefer one of the type-specific constructors, such as
|
|
505
|
-
//
|
|
497
|
+
// `ASN1_OCTET_STRING_new`, or `ASN1_STRING_type_new`.
|
|
506
498
|
OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_new(void);
|
|
507
499
|
|
|
508
|
-
// ASN1_STRING_free releases memory associated with
|
|
500
|
+
// ASN1_STRING_free releases memory associated with `str`.
|
|
509
501
|
OPENSSL_EXPORT void ASN1_STRING_free(ASN1_STRING *str);
|
|
510
502
|
|
|
511
|
-
// ASN1_STRING_copy sets
|
|
503
|
+
// ASN1_STRING_copy sets `dst` to a copy of `str`. It returns one on success and
|
|
512
504
|
// zero on error.
|
|
513
505
|
OPENSSL_EXPORT int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str);
|
|
514
506
|
|
|
515
|
-
// ASN1_STRING_dup returns a newly-allocated copy of
|
|
507
|
+
// ASN1_STRING_dup returns a newly-allocated copy of `str`, or NULL on error.
|
|
516
508
|
OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *str);
|
|
517
509
|
|
|
518
|
-
// ASN1_STRING_type returns the type of
|
|
519
|
-
//
|
|
510
|
+
// ASN1_STRING_type returns the type of `str`. This value will be one of the
|
|
511
|
+
// `V_ASN1_*` constants.
|
|
520
512
|
OPENSSL_EXPORT int ASN1_STRING_type(const ASN1_STRING *str);
|
|
521
513
|
|
|
522
|
-
// ASN1_STRING_get0_data returns a pointer to
|
|
523
|
-
// use
|
|
514
|
+
// ASN1_STRING_get0_data returns a pointer to `str`'s contents. Callers should
|
|
515
|
+
// use `ASN1_STRING_length` to determine the length of the string. The string
|
|
524
516
|
// may have embedded NUL bytes and may not be NUL-terminated.
|
|
525
517
|
//
|
|
526
|
-
// The contents of an
|
|
518
|
+
// The contents of an `ASN1_STRING` encode the value in some type-specific
|
|
527
519
|
// representation that does not always correspond to the DER encoding of the
|
|
528
|
-
// type. See the documentation for
|
|
520
|
+
// type. See the documentation for `ASN1_STRING` for details.
|
|
529
521
|
OPENSSL_EXPORT const unsigned char *ASN1_STRING_get0_data(
|
|
530
522
|
const ASN1_STRING *str);
|
|
531
523
|
|
|
532
|
-
// ASN1_STRING_data returns a mutable pointer to
|
|
533
|
-
// should use
|
|
524
|
+
// ASN1_STRING_data returns a mutable pointer to `str`'s contents. Callers
|
|
525
|
+
// should use `ASN1_STRING_length` to determine the length of the string. The
|
|
534
526
|
// string may have embedded NUL bytes and may not be NUL-terminated.
|
|
535
527
|
//
|
|
536
|
-
// The contents of an
|
|
528
|
+
// The contents of an `ASN1_STRING` encode the value in some type-specific
|
|
537
529
|
// representation that does not always correspond to the DER encoding of the
|
|
538
|
-
// type. See the documentation for
|
|
530
|
+
// type. See the documentation for `ASN1_STRING` for details.
|
|
539
531
|
//
|
|
540
|
-
// Prefer
|
|
532
|
+
// Prefer `ASN1_STRING_get0_data`.
|
|
541
533
|
OPENSSL_EXPORT unsigned char *ASN1_STRING_data(ASN1_STRING *str);
|
|
542
534
|
|
|
543
|
-
// ASN1_STRING_length returns the length of
|
|
535
|
+
// ASN1_STRING_length returns the length of `str`, in bytes.
|
|
544
536
|
//
|
|
545
|
-
// The contents of an
|
|
537
|
+
// The contents of an `ASN1_STRING` encode the value in some type-specific
|
|
546
538
|
// representation that does not always correspond to the DER encoding of the
|
|
547
|
-
// type. See the documentation for
|
|
539
|
+
// type. See the documentation for `ASN1_STRING` for details.
|
|
548
540
|
OPENSSL_EXPORT int ASN1_STRING_length(const ASN1_STRING *str);
|
|
549
541
|
|
|
550
|
-
// ASN1_STRING_cmp compares
|
|
551
|
-
// integer equal to, less than, or greater than zero if
|
|
552
|
-
// than, or greater than
|
|
553
|
-
// then data, then type. Note the data compared is the
|
|
542
|
+
// ASN1_STRING_cmp compares `a` and `b`'s type and contents. It returns an
|
|
543
|
+
// integer equal to, less than, or greater than zero if `a` is equal to, less
|
|
544
|
+
// than, or greater than `b`, respectively. This function compares by length,
|
|
545
|
+
// then data, then type. Note the data compared is the `ASN1_STRING` internal
|
|
554
546
|
// representation and the type order is arbitrary. While this comparison is
|
|
555
|
-
// suitable for sorting, callers should not rely on the exact order when
|
|
556
|
-
// and
|
|
547
|
+
// suitable for sorting, callers should not rely on the exact order when `a`
|
|
548
|
+
// and `b` are different types.
|
|
557
549
|
//
|
|
558
|
-
// Note that, if
|
|
559
|
-
// values numerically. For a numerical comparison, use
|
|
550
|
+
// Note that, if `a` and `b` are INTEGERs, this comparison does not order the
|
|
551
|
+
// values numerically. For a numerical comparison, use `ASN1_INTEGER_cmp`.
|
|
560
552
|
OPENSSL_EXPORT int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b);
|
|
561
553
|
|
|
562
|
-
// ASN1_STRING_set sets the contents of
|
|
563
|
-
//
|
|
554
|
+
// ASN1_STRING_set sets the contents of `str` to a copy of `len` bytes from
|
|
555
|
+
// `data`. It returns one on success and zero on error. If `data` is NULL, it
|
|
564
556
|
// updates the length and allocates the buffer as needed, but does not
|
|
565
557
|
// initialize the contents.
|
|
558
|
+
//
|
|
559
|
+
// If `str` is a BIT STRING, this function sets the number of unused bits to
|
|
560
|
+
// zero. `ASN1_BIT_STRING_set1` may be used to set a BIT STRING that is not a
|
|
561
|
+
// whole number of bytes.
|
|
566
562
|
OPENSSL_EXPORT int ASN1_STRING_set(ASN1_STRING *str, const void *data,
|
|
567
563
|
ossl_ssize_t len);
|
|
568
564
|
|
|
569
|
-
// ASN1_STRING_set0 sets the contents of
|
|
570
|
-
// takes ownership of
|
|
571
|
-
//
|
|
565
|
+
// ASN1_STRING_set0 sets the contents of `str` to `len` bytes from `data`. It
|
|
566
|
+
// takes ownership of `data`, which must have been allocated with
|
|
567
|
+
// `OPENSSL_malloc`.
|
|
568
|
+
//
|
|
569
|
+
// If `str` is a BIT STRING, this function sets the number of unused bits to
|
|
570
|
+
// zero. `ASN1_BIT_STRING_set1` may be used to set a BIT STRING that is not a
|
|
571
|
+
// whole number of bytes.
|
|
572
572
|
OPENSSL_EXPORT void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len);
|
|
573
573
|
|
|
574
|
-
// The following functions call
|
|
575
|
-
//
|
|
574
|
+
// The following functions call `ASN1_STRING_type_new` with the corresponding
|
|
575
|
+
// `V_ASN1_*` constant.
|
|
576
576
|
OPENSSL_EXPORT ASN1_BMPSTRING *ASN1_BMPSTRING_new(void);
|
|
577
577
|
OPENSSL_EXPORT ASN1_GENERALSTRING *ASN1_GENERALSTRING_new(void);
|
|
578
578
|
OPENSSL_EXPORT ASN1_IA5STRING *ASN1_IA5STRING_new(void);
|
|
@@ -583,7 +583,7 @@ OPENSSL_EXPORT ASN1_UNIVERSALSTRING *ASN1_UNIVERSALSTRING_new(void);
|
|
|
583
583
|
OPENSSL_EXPORT ASN1_UTF8STRING *ASN1_UTF8STRING_new(void);
|
|
584
584
|
OPENSSL_EXPORT ASN1_VISIBLESTRING *ASN1_VISIBLESTRING_new(void);
|
|
585
585
|
|
|
586
|
-
// The following functions call
|
|
586
|
+
// The following functions call `ASN1_STRING_free`.
|
|
587
587
|
OPENSSL_EXPORT void ASN1_BMPSTRING_free(ASN1_BMPSTRING *str);
|
|
588
588
|
OPENSSL_EXPORT void ASN1_GENERALSTRING_free(ASN1_GENERALSTRING *str);
|
|
589
589
|
OPENSSL_EXPORT void ASN1_IA5STRING_free(ASN1_IA5STRING *str);
|
|
@@ -594,9 +594,9 @@ OPENSSL_EXPORT void ASN1_UNIVERSALSTRING_free(ASN1_UNIVERSALSTRING *str);
|
|
|
594
594
|
OPENSSL_EXPORT void ASN1_UTF8STRING_free(ASN1_UTF8STRING *str);
|
|
595
595
|
OPENSSL_EXPORT void ASN1_VISIBLESTRING_free(ASN1_VISIBLESTRING *str);
|
|
596
596
|
|
|
597
|
-
// The following functions parse up to
|
|
597
|
+
// The following functions parse up to `len` bytes from `*inp` as a
|
|
598
598
|
// DER-encoded ASN.1 value of the corresponding type, as described in
|
|
599
|
-
//
|
|
599
|
+
// `d2i_SAMPLE`.
|
|
600
600
|
OPENSSL_EXPORT ASN1_BMPSTRING *d2i_ASN1_BMPSTRING(ASN1_BMPSTRING **out,
|
|
601
601
|
const uint8_t **inp,
|
|
602
602
|
long len);
|
|
@@ -621,8 +621,8 @@ OPENSSL_EXPORT ASN1_UTF8STRING *d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **out,
|
|
|
621
621
|
OPENSSL_EXPORT ASN1_VISIBLESTRING *d2i_ASN1_VISIBLESTRING(
|
|
622
622
|
ASN1_VISIBLESTRING **out, const uint8_t **inp, long len);
|
|
623
623
|
|
|
624
|
-
// The following functions marshal
|
|
625
|
-
// corresponding type, as described in
|
|
624
|
+
// The following functions marshal `in` as a DER-encoded ASN.1 value of the
|
|
625
|
+
// corresponding type, as described in `i2d_SAMPLE`.
|
|
626
626
|
OPENSSL_EXPORT int i2d_ASN1_BMPSTRING(const ASN1_BMPSTRING *in, uint8_t **outp);
|
|
627
627
|
OPENSSL_EXPORT int i2d_ASN1_GENERALSTRING(const ASN1_GENERALSTRING *in,
|
|
628
628
|
uint8_t **outp);
|
|
@@ -639,8 +639,8 @@ OPENSSL_EXPORT int i2d_ASN1_UTF8STRING(const ASN1_UTF8STRING *in,
|
|
|
639
639
|
OPENSSL_EXPORT int i2d_ASN1_VISIBLESTRING(const ASN1_VISIBLESTRING *in,
|
|
640
640
|
uint8_t **outp);
|
|
641
641
|
|
|
642
|
-
// The following
|
|
643
|
-
// C type
|
|
642
|
+
// The following `ASN1_ITEM`s have the ASN.1 type referred to in their name and
|
|
643
|
+
// C type `ASN1_STRING*`. The C type may also be written as the corresponding
|
|
644
644
|
// typedef.
|
|
645
645
|
DECLARE_ASN1_ITEM(ASN1_BMPSTRING)
|
|
646
646
|
DECLARE_ASN1_ITEM(ASN1_GENERALSTRING)
|
|
@@ -652,27 +652,27 @@ DECLARE_ASN1_ITEM(ASN1_UNIVERSALSTRING)
|
|
|
652
652
|
DECLARE_ASN1_ITEM(ASN1_UTF8STRING)
|
|
653
653
|
DECLARE_ASN1_ITEM(ASN1_VISIBLESTRING)
|
|
654
654
|
|
|
655
|
-
// ASN1_OCTET_STRING_dup calls
|
|
655
|
+
// ASN1_OCTET_STRING_dup calls `ASN1_STRING_dup`.
|
|
656
656
|
OPENSSL_EXPORT ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(
|
|
657
657
|
const ASN1_OCTET_STRING *a);
|
|
658
658
|
|
|
659
|
-
// ASN1_OCTET_STRING_cmp calls
|
|
659
|
+
// ASN1_OCTET_STRING_cmp calls `ASN1_STRING_cmp`.
|
|
660
660
|
OPENSSL_EXPORT int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a,
|
|
661
661
|
const ASN1_OCTET_STRING *b);
|
|
662
662
|
|
|
663
|
-
// ASN1_OCTET_STRING_set calls
|
|
663
|
+
// ASN1_OCTET_STRING_set calls `ASN1_STRING_set`.
|
|
664
664
|
OPENSSL_EXPORT int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str,
|
|
665
665
|
const unsigned char *data, int len);
|
|
666
666
|
|
|
667
|
-
// ASN1_STRING_to_UTF8 converts
|
|
667
|
+
// ASN1_STRING_to_UTF8 converts `in` to UTF-8. On success, sets `*out` to a
|
|
668
668
|
// newly-allocated buffer containing the resulting string and returns the length
|
|
669
|
-
// of the string. The caller must call
|
|
669
|
+
// of the string. The caller must call `OPENSSL_free` to release `*out` when
|
|
670
670
|
// done. On error, it returns a negative number.
|
|
671
671
|
OPENSSL_EXPORT int ASN1_STRING_to_UTF8(unsigned char **out,
|
|
672
672
|
const ASN1_STRING *in);
|
|
673
673
|
|
|
674
674
|
// The following formats define encodings for use with functions like
|
|
675
|
-
//
|
|
675
|
+
// `ASN1_mbstring_copy`. Note `MBSTRING_ASC` refers to Latin-1, not ASCII.
|
|
676
676
|
#define MBSTRING_FLAG 0x1000
|
|
677
677
|
#define MBSTRING_UTF8 (MBSTRING_FLAG)
|
|
678
678
|
#define MBSTRING_ASC (MBSTRING_FLAG | 1)
|
|
@@ -687,77 +687,80 @@ OPENSSL_EXPORT int ASN1_STRING_to_UTF8(unsigned char **out,
|
|
|
687
687
|
// PKCS9STRING_TYPE contains the valid string types in a PKCS9String.
|
|
688
688
|
#define PKCS9STRING_TYPE (DIRSTRING_TYPE | B_ASN1_IA5STRING)
|
|
689
689
|
|
|
690
|
-
// ASN1_mbstring_copy converts
|
|
691
|
-
//
|
|
692
|
-
//
|
|
693
|
-
//
|
|
694
|
-
// bitmask containing a subset of
|
|
695
|
-
//
|
|
696
|
-
//
|
|
697
|
-
// first output type in
|
|
690
|
+
// ASN1_mbstring_copy converts `len` bytes from `in` to an ASN.1 string. If
|
|
691
|
+
// `len` is -1, `in` must be NUL-terminated and the length is determined by
|
|
692
|
+
// `strlen`. `in` is decoded according to `inform`, which must be one of
|
|
693
|
+
// `MBSTRING_*`. `mask` determines the set of valid output types and is a
|
|
694
|
+
// bitmask containing a subset of `B_ASN1_PRINTABLESTRING`, `B_ASN1_IA5STRING`,
|
|
695
|
+
// `B_ASN1_T61STRING`, `B_ASN1_BMPSTRING`, `B_ASN1_UNIVERSALSTRING`, and
|
|
696
|
+
// `B_ASN1_UTF8STRING`, in that preference order. This function chooses the
|
|
697
|
+
// first output type in `mask` which can represent `in`. It interprets T61String
|
|
698
698
|
// as Latin-1, rather than T.61.
|
|
699
699
|
//
|
|
700
|
-
// If
|
|
700
|
+
// If `mask` is zero, `DIRSTRING_TYPE` is used by default.
|
|
701
701
|
//
|
|
702
|
-
// On success, this function returns the
|
|
703
|
-
// the selected output type and, if
|
|
704
|
-
// the object at
|
|
705
|
-
// NULL, it instead sets
|
|
706
|
-
// the result. If
|
|
707
|
-
// constructing an
|
|
702
|
+
// On success, this function returns the `V_ASN1_*` constant corresponding to
|
|
703
|
+
// the selected output type and, if `out` and `*out` are both non-NULL, updates
|
|
704
|
+
// the object at `*out` with the result. If `out` is non-NULL and `*out` is
|
|
705
|
+
// NULL, it instead sets `*out` to a newly-allocated `ASN1_STRING` containing
|
|
706
|
+
// the result. If `out` is NULL, it returns the selected output type without
|
|
707
|
+
// constructing an `ASN1_STRING`. On error, this function returns -1.
|
|
708
708
|
OPENSSL_EXPORT int ASN1_mbstring_copy(ASN1_STRING **out, const uint8_t *in,
|
|
709
709
|
ossl_ssize_t len, int inform,
|
|
710
710
|
unsigned long mask);
|
|
711
711
|
|
|
712
|
-
// ASN1_mbstring_ncopy behaves like
|
|
713
|
-
// the input is less than
|
|
714
|
-
//
|
|
712
|
+
// ASN1_mbstring_ncopy behaves like `ASN1_mbstring_copy` but returns an error if
|
|
713
|
+
// the input is less than `minsize` or greater than `maxsize` codepoints long. A
|
|
714
|
+
// `maxsize` value of zero is ignored. Note the sizes are measured in
|
|
715
715
|
// codepoints, not output bytes.
|
|
716
716
|
OPENSSL_EXPORT int ASN1_mbstring_ncopy(ASN1_STRING **out, const uint8_t *in,
|
|
717
717
|
ossl_ssize_t len, int inform,
|
|
718
718
|
unsigned long mask, ossl_ssize_t minsize,
|
|
719
719
|
ossl_ssize_t maxsize);
|
|
720
720
|
|
|
721
|
-
// ASN1_STRING_set_by_NID behaves like
|
|
722
|
-
//
|
|
721
|
+
// ASN1_STRING_set_by_NID behaves like `ASN1_mbstring_ncopy`, but determines
|
|
722
|
+
// `mask`, `minsize`, and `maxsize` based on `nid`. When `nid` is a recognized
|
|
723
723
|
// X.509 attribute type, it will pick a suitable ASN.1 string type and bounds.
|
|
724
|
-
// For most attribute types, it preferentially chooses UTF8String. If
|
|
725
|
-
// unrecognized, it uses UTF8String by default.
|
|
726
|
-
//
|
|
727
|
-
//
|
|
728
|
-
//
|
|
729
|
-
//
|
|
730
|
-
//
|
|
731
|
-
//
|
|
732
|
-
//
|
|
733
|
-
//
|
|
734
|
-
//
|
|
735
|
-
//
|
|
736
|
-
//
|
|
737
|
-
//
|
|
738
|
-
//
|
|
739
|
-
//
|
|
740
|
-
//
|
|
741
|
-
//
|
|
742
|
-
//
|
|
724
|
+
// For most attribute types, it preferentially chooses UTF8String. If `nid` is
|
|
725
|
+
// unrecognized, it uses UTF8String by default. This function will also enforce
|
|
726
|
+
// any known attribute-specific constraints on the sizes of the string and fail
|
|
727
|
+
// if the size is invalid. In RFC 5280, these bounds are specified by
|
|
728
|
+
// constraints like "SIZE (1..ub-common-name)" in ASN.1.
|
|
729
|
+
//
|
|
730
|
+
// Slightly unlike `ASN1_mbstring_ncopy`, this function interprets `out` and
|
|
731
|
+
// returns its result as follows: If `out` is NULL, it returns a newly-allocated
|
|
732
|
+
// `ASN1_STRING` containing the result. If `out` is non-NULL and
|
|
733
|
+
// `*out` is NULL, it additionally sets `*out` to the result. If both `out` and
|
|
734
|
+
// `*out` are non-NULL, it instead updates the object at `*out` and returns
|
|
735
|
+
// `*out`. In all cases, it returns NULL on error.
|
|
736
|
+
//
|
|
737
|
+
// This function supports the following NIDs: `NID_countryName`,
|
|
738
|
+
// `NID_dnQualifier`, `NID_domainComponent`, `NID_friendlyName`,
|
|
739
|
+
// `NID_givenName`, `NID_initials`, `NID_localityName`, `NID_ms_csp_name`,
|
|
740
|
+
// `NID_name`, `NID_organizationalUnitName`, `NID_organizationName`,
|
|
741
|
+
// `NID_pkcs9_challengePassword`, `NID_pkcs9_emailAddress`,
|
|
742
|
+
// `NID_pkcs9_unstructuredAddress`, `NID_pkcs9_unstructuredName`,
|
|
743
|
+
// `NID_serialNumber`, `NID_stateOrProvinceName`, and `NID_surname`. Additional
|
|
744
|
+
// NIDs may be registered with `ASN1_STRING_set_by_NID`, but it is recommended
|
|
745
|
+
// to call `ASN1_mbstring_ncopy` directly instead.
|
|
743
746
|
OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
|
|
744
747
|
const unsigned char *in,
|
|
745
748
|
ossl_ssize_t len, int inform,
|
|
746
749
|
int nid);
|
|
747
750
|
|
|
748
|
-
// STABLE_NO_MASK causes
|
|
751
|
+
// STABLE_NO_MASK causes `ASN1_STRING_TABLE_add` to allow types other than
|
|
749
752
|
// UTF8String.
|
|
750
753
|
#define STABLE_NO_MASK 0x02
|
|
751
754
|
|
|
752
|
-
// ASN1_STRING_TABLE_add registers the corresponding parameters with
|
|
753
|
-
// use with
|
|
754
|
-
// error. It is an error to call this function if
|
|
755
|
+
// ASN1_STRING_TABLE_add registers the corresponding parameters with `nid`, for
|
|
756
|
+
// use with `ASN1_STRING_set_by_NID`. It returns one on success and zero on
|
|
757
|
+
// error. It is an error to call this function if `nid` is a built-in NID, or
|
|
755
758
|
// was already registered by a previous call.
|
|
756
759
|
//
|
|
757
760
|
// WARNING: This function affects global state in the library. If two libraries
|
|
758
761
|
// in the same address space register information for the same OID, one call
|
|
759
|
-
// will fail. Prefer directly passing the desired
|
|
760
|
-
//
|
|
762
|
+
// will fail. Prefer directly passing the desired parameters to
|
|
763
|
+
// `ASN1_mbstring_copy` or `ASN1_mbstring_ncopy` instead.
|
|
761
764
|
OPENSSL_EXPORT int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
|
|
762
765
|
unsigned long mask,
|
|
763
766
|
unsigned long flags);
|
|
@@ -765,11 +768,11 @@ OPENSSL_EXPORT int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
|
|
|
765
768
|
|
|
766
769
|
// Multi-strings.
|
|
767
770
|
//
|
|
768
|
-
// A multi-string, or "MSTRING", is an
|
|
771
|
+
// A multi-string, or "MSTRING", is an `ASN1_STRING` that represents a CHOICE of
|
|
769
772
|
// several string or string-like types, such as X.509's DirectoryString. The
|
|
770
|
-
//
|
|
773
|
+
// `ASN1_STRING`'s type field determines which type is used.
|
|
771
774
|
//
|
|
772
|
-
// Multi-string types are associated with a bitmask, using the
|
|
775
|
+
// Multi-string types are associated with a bitmask, using the `B_ASN1_*`
|
|
773
776
|
// constants, which defines which types are valid.
|
|
774
777
|
|
|
775
778
|
// B_ASN1_DIRECTORYSTRING is a bitmask of types allowed in an X.509
|
|
@@ -778,16 +781,16 @@ OPENSSL_EXPORT int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
|
|
|
778
781
|
(B_ASN1_PRINTABLESTRING | B_ASN1_TELETEXSTRING | B_ASN1_BMPSTRING | \
|
|
779
782
|
B_ASN1_UNIVERSALSTRING | B_ASN1_UTF8STRING)
|
|
780
783
|
|
|
781
|
-
// DIRECTORYSTRING_new returns a newly-allocated
|
|
782
|
-
// NULL on error. The resulting
|
|
784
|
+
// DIRECTORYSTRING_new returns a newly-allocated `ASN1_STRING` with type -1, or
|
|
785
|
+
// NULL on error. The resulting `ASN1_STRING` is not a valid X.509
|
|
783
786
|
// DirectoryString until initialized with a value.
|
|
784
787
|
OPENSSL_EXPORT ASN1_STRING *DIRECTORYSTRING_new(void);
|
|
785
788
|
|
|
786
|
-
// DIRECTORYSTRING_free calls
|
|
789
|
+
// DIRECTORYSTRING_free calls `ASN1_STRING_free`.
|
|
787
790
|
OPENSSL_EXPORT void DIRECTORYSTRING_free(ASN1_STRING *str);
|
|
788
791
|
|
|
789
|
-
// d2i_DIRECTORYSTRING parses up to
|
|
790
|
-
// X.509 DirectoryString (RFC 5280), as described in
|
|
792
|
+
// d2i_DIRECTORYSTRING parses up to `len` bytes from `*inp` as a DER-encoded
|
|
793
|
+
// X.509 DirectoryString (RFC 5280), as described in `d2i_SAMPLE`.
|
|
791
794
|
//
|
|
792
795
|
// TODO(https://crbug.com/boringssl/354): This function currently also accepts
|
|
793
796
|
// BER, but this will be removed in the future.
|
|
@@ -797,30 +800,26 @@ OPENSSL_EXPORT void DIRECTORYSTRING_free(ASN1_STRING *str);
|
|
|
797
800
|
OPENSSL_EXPORT ASN1_STRING *d2i_DIRECTORYSTRING(ASN1_STRING **out,
|
|
798
801
|
const uint8_t **inp, long len);
|
|
799
802
|
|
|
800
|
-
// i2d_DIRECTORYSTRING marshals
|
|
801
|
-
// 5280), as described in
|
|
803
|
+
// i2d_DIRECTORYSTRING marshals `in` as a DER-encoded X.509 DirectoryString (RFC
|
|
804
|
+
// 5280), as described in `i2d_SAMPLE`.
|
|
802
805
|
OPENSSL_EXPORT int i2d_DIRECTORYSTRING(const ASN1_STRING *in, uint8_t **outp);
|
|
803
806
|
|
|
804
|
-
// DIRECTORYSTRING is an |ASN1_ITEM| whose ASN.1 type is X.509 DirectoryString
|
|
805
|
-
// (RFC 5280) and C type is |ASN1_STRING*|.
|
|
806
|
-
DECLARE_ASN1_ITEM(DIRECTORYSTRING)
|
|
807
|
-
|
|
808
807
|
// B_ASN1_DISPLAYTEXT is a bitmask of types allowed in an X.509 DisplayText (RFC
|
|
809
808
|
// 5280).
|
|
810
809
|
#define B_ASN1_DISPLAYTEXT \
|
|
811
810
|
(B_ASN1_IA5STRING | B_ASN1_VISIBLESTRING | B_ASN1_BMPSTRING | \
|
|
812
811
|
B_ASN1_UTF8STRING)
|
|
813
812
|
|
|
814
|
-
// DISPLAYTEXT_new returns a newly-allocated
|
|
815
|
-
// on error. The resulting
|
|
813
|
+
// DISPLAYTEXT_new returns a newly-allocated `ASN1_STRING` with type -1, or NULL
|
|
814
|
+
// on error. The resulting `ASN1_STRING` is not a valid X.509 DisplayText until
|
|
816
815
|
// initialized with a value.
|
|
817
816
|
OPENSSL_EXPORT ASN1_STRING *DISPLAYTEXT_new(void);
|
|
818
817
|
|
|
819
|
-
// DISPLAYTEXT_free calls
|
|
818
|
+
// DISPLAYTEXT_free calls `ASN1_STRING_free`.
|
|
820
819
|
OPENSSL_EXPORT void DISPLAYTEXT_free(ASN1_STRING *str);
|
|
821
820
|
|
|
822
|
-
// d2i_DISPLAYTEXT parses up to
|
|
823
|
-
// DisplayText (RFC 5280), as described in
|
|
821
|
+
// d2i_DISPLAYTEXT parses up to `len` bytes from `*inp` as a DER-encoded X.509
|
|
822
|
+
// DisplayText (RFC 5280), as described in `d2i_SAMPLE`.
|
|
824
823
|
//
|
|
825
824
|
// TODO(https://crbug.com/boringssl/354): This function currently also accepts
|
|
826
825
|
// BER, but this will be removed in the future.
|
|
@@ -830,14 +829,10 @@ OPENSSL_EXPORT void DISPLAYTEXT_free(ASN1_STRING *str);
|
|
|
830
829
|
OPENSSL_EXPORT ASN1_STRING *d2i_DISPLAYTEXT(ASN1_STRING **out,
|
|
831
830
|
const uint8_t **inp, long len);
|
|
832
831
|
|
|
833
|
-
// i2d_DISPLAYTEXT marshals
|
|
834
|
-
// as described in
|
|
832
|
+
// i2d_DISPLAYTEXT marshals `in` as a DER-encoded X.509 DisplayText (RFC 5280),
|
|
833
|
+
// as described in `i2d_SAMPLE`.
|
|
835
834
|
OPENSSL_EXPORT int i2d_DISPLAYTEXT(const ASN1_STRING *in, uint8_t **outp);
|
|
836
835
|
|
|
837
|
-
// DISPLAYTEXT is an |ASN1_ITEM| whose ASN.1 type is X.509 DisplayText (RFC
|
|
838
|
-
// 5280) and C type is |ASN1_STRING*|.
|
|
839
|
-
DECLARE_ASN1_ITEM(DISPLAYTEXT)
|
|
840
|
-
|
|
841
836
|
|
|
842
837
|
// Bit strings.
|
|
843
838
|
//
|
|
@@ -848,7 +843,7 @@ DECLARE_ASN1_ITEM(DISPLAYTEXT)
|
|
|
848
843
|
// Some BIT STRINGs represent a bitmask of named bits, such as the X.509 key
|
|
849
844
|
// usage extension in RFC 5280, section 4.2.1.3. For such bit strings, DER
|
|
850
845
|
// imposes an additional restriction that trailing zero bits are removed. Some
|
|
851
|
-
// functions like
|
|
846
|
+
// functions like `ASN1_BIT_STRING_set_bit` help in maintaining this.
|
|
852
847
|
//
|
|
853
848
|
// Other BIT STRINGs are arbitrary strings of bits used as identifiers and do
|
|
854
849
|
// not have this constraint, such as the X.509 issuerUniqueID field.
|
|
@@ -859,54 +854,51 @@ DECLARE_ASN1_ITEM(DISPLAYTEXT)
|
|
|
859
854
|
// AlgorithmIdentifier. While some unknown algorithm could choose to store
|
|
860
855
|
// arbitrary bit strings, all supported algorithms use a byte string, with bit
|
|
861
856
|
// order matching the DER encoding. Callers interpreting a BIT STRING as a byte
|
|
862
|
-
// string should
|
|
863
|
-
//
|
|
857
|
+
// string should reject bit strings that are not a whole number of bytes by
|
|
858
|
+
// requiring that `ASN1_BIT_STRING_unused_bits` returns zero; the byte length is
|
|
859
|
+
// returned by `ASN1_STRING_length`.
|
|
864
860
|
//
|
|
865
|
-
// This library represents BIT STRINGs as
|
|
866
|
-
//
|
|
861
|
+
// This library represents BIT STRINGs as `ASN1_STRING`s with type
|
|
862
|
+
// `V_ASN1_BIT_STRING`. The data contains the encoded form of the BIT STRING,
|
|
867
863
|
// including any padding bits added to round to a whole number of bytes, but
|
|
868
|
-
// excluding the leading byte containing the number of padding bits.
|
|
869
|
-
//
|
|
870
|
-
//
|
|
871
|
-
//
|
|
872
|
-
|
|
873
|
-
//
|
|
874
|
-
// removed. Callers should not rely this representation when constructing bit
|
|
875
|
-
// strings. The padding bits in the |ASN1_STRING| data must be zero.
|
|
876
|
-
|
|
877
|
-
// ASN1_BIT_STRING_new calls |ASN1_STRING_type_new| with |V_ASN1_BIT_STRING|.
|
|
864
|
+
// excluding the leading byte containing the number of padding bits. Instead,
|
|
865
|
+
// the bottom three bits of `flags` contain the number of padding bits. For
|
|
866
|
+
// example, DER encodes the BIT STRING {1, 0} as {0x06, 0x80 = 0b10_000000}. The
|
|
867
|
+
// `ASN1_STRING` representation has data of {0x80} and flags of 6.
|
|
868
|
+
|
|
869
|
+
// ASN1_BIT_STRING_new calls `ASN1_STRING_type_new` with `V_ASN1_BIT_STRING`.
|
|
878
870
|
OPENSSL_EXPORT ASN1_BIT_STRING *ASN1_BIT_STRING_new(void);
|
|
879
871
|
|
|
880
|
-
// ASN1_BIT_STRING_free calls
|
|
872
|
+
// ASN1_BIT_STRING_free calls `ASN1_STRING_free`.
|
|
881
873
|
OPENSSL_EXPORT void ASN1_BIT_STRING_free(ASN1_BIT_STRING *str);
|
|
882
874
|
|
|
883
|
-
// d2i_ASN1_BIT_STRING parses up to
|
|
884
|
-
// ASN.1 BIT STRING, as described in
|
|
875
|
+
// d2i_ASN1_BIT_STRING parses up to `len` bytes from `*inp` as a DER-encoded
|
|
876
|
+
// ASN.1 BIT STRING, as described in `d2i_SAMPLE`.
|
|
885
877
|
OPENSSL_EXPORT ASN1_BIT_STRING *d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **out,
|
|
886
878
|
const uint8_t **inp,
|
|
887
879
|
long len);
|
|
888
880
|
|
|
889
|
-
// i2d_ASN1_BIT_STRING marshals
|
|
890
|
-
// described in
|
|
881
|
+
// i2d_ASN1_BIT_STRING marshals `in` as a DER-encoded ASN.1 BIT STRING, as
|
|
882
|
+
// described in `i2d_SAMPLE`.
|
|
891
883
|
OPENSSL_EXPORT int i2d_ASN1_BIT_STRING(const ASN1_BIT_STRING *in,
|
|
892
884
|
uint8_t **outp);
|
|
893
885
|
|
|
894
|
-
// c2i_ASN1_BIT_STRING decodes
|
|
886
|
+
// c2i_ASN1_BIT_STRING decodes `len` bytes from `*inp` as the contents of a
|
|
895
887
|
// DER-encoded BIT STRING, excluding the tag and length. It behaves like
|
|
896
|
-
//
|
|
888
|
+
// `d2i_SAMPLE` except, on success, it always consumes all `len` bytes.
|
|
897
889
|
OPENSSL_EXPORT ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **out,
|
|
898
890
|
const uint8_t **inp,
|
|
899
891
|
long len);
|
|
900
892
|
|
|
901
|
-
// i2c_ASN1_BIT_STRING encodes
|
|
902
|
-
// excluding the tag and length. If
|
|
903
|
-
//
|
|
904
|
-
// bytes written.
|
|
893
|
+
// i2c_ASN1_BIT_STRING encodes `in` as the contents of a DER-encoded BIT STRING,
|
|
894
|
+
// excluding the tag and length. If `outp` is non-NULL, it writes the result to
|
|
895
|
+
// `*outp`, advances `*outp` just past the output, and returns the number of
|
|
896
|
+
// bytes written. `*outp` must have space available for the result. If `outp` is
|
|
905
897
|
// NULL, it returns the number of bytes without writing anything. On error, it
|
|
906
898
|
// returns a value <= 0.
|
|
907
899
|
//
|
|
908
|
-
// Note this function differs slightly from
|
|
909
|
-
// and
|
|
900
|
+
// Note this function differs slightly from `i2d_SAMPLE`. If `outp` is non-NULL
|
|
901
|
+
// and `*outp` is NULL, it does not allocate a new buffer.
|
|
910
902
|
//
|
|
911
903
|
// TODO(davidben): This function currently returns zero on error instead of -1,
|
|
912
904
|
// but it is also mostly infallible. I've currently documented <= 0 to suggest
|
|
@@ -914,44 +906,44 @@ OPENSSL_EXPORT ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **out,
|
|
|
914
906
|
OPENSSL_EXPORT int i2c_ASN1_BIT_STRING(const ASN1_BIT_STRING *in,
|
|
915
907
|
uint8_t **outp);
|
|
916
908
|
|
|
917
|
-
// ASN1_BIT_STRING is an
|
|
918
|
-
//
|
|
909
|
+
// ASN1_BIT_STRING is an `ASN1_ITEM` with ASN.1 type BIT STRING and C type
|
|
910
|
+
// `ASN1_BIT_STRING*`.
|
|
919
911
|
DECLARE_ASN1_ITEM(ASN1_BIT_STRING)
|
|
920
912
|
|
|
921
|
-
//
|
|
922
|
-
//
|
|
923
|
-
//
|
|
924
|
-
|
|
925
|
-
// This function may be used with |ASN1_STRING_get0_data| to interpret |str| as
|
|
926
|
-
// a byte string.
|
|
927
|
-
OPENSSL_EXPORT int ASN1_BIT_STRING_num_bytes(const ASN1_BIT_STRING *str,
|
|
928
|
-
size_t *out);
|
|
913
|
+
// ASN1_BIT_STRING_unused_bits returns the number of unused bits in the last
|
|
914
|
+
// byte of `str`. If `str` is empty (i.e. `ASN1_STRING_length` is zero), this
|
|
915
|
+
// always returns zero. Otherwise it returns a number between 0 and 7.
|
|
916
|
+
OPENSSL_EXPORT uint8_t ASN1_BIT_STRING_unused_bits(const ASN1_BIT_STRING *str);
|
|
929
917
|
|
|
930
|
-
// ASN1_BIT_STRING_set calls
|
|
931
|
-
|
|
932
|
-
//
|
|
933
|
-
// TODO(davidben): Maybe it should? Wrapping a byte string in a bit string is a
|
|
934
|
-
// common use case.
|
|
935
|
-
OPENSSL_EXPORT int ASN1_BIT_STRING_set(ASN1_BIT_STRING *str,
|
|
936
|
-
const unsigned char *d,
|
|
918
|
+
// ASN1_BIT_STRING_set calls `ASN1_STRING_set`.
|
|
919
|
+
OPENSSL_EXPORT int ASN1_BIT_STRING_set(ASN1_BIT_STRING *str, const uint8_t *data,
|
|
937
920
|
ossl_ssize_t length);
|
|
938
921
|
|
|
939
|
-
//
|
|
940
|
-
//
|
|
941
|
-
//
|
|
942
|
-
//
|
|
922
|
+
// ASN1_BIT_STRING_set1 sets `str` to a BIT STRING containing `length` bytes
|
|
923
|
+
// from `data`. It returns one on success and zero on error. The least
|
|
924
|
+
// significant `unused_bits` of the last byte of `data` are removed from the bit
|
|
925
|
+
// string. The removed bits must all be zero. `unused_bits` must be between 0
|
|
926
|
+
// and 7, and must be 0 if `length` is zero.
|
|
927
|
+
OPENSSL_EXPORT int ASN1_BIT_STRING_set1(ASN1_BIT_STRING *str,
|
|
928
|
+
const uint8_t *data, size_t length,
|
|
929
|
+
int unused_bits);
|
|
930
|
+
|
|
931
|
+
// ASN1_BIT_STRING_set_bit sets bit `n` of `str` to one if `value` is non-zero
|
|
932
|
+
// and zero if `value` is zero, resizing `str` as needed. It then truncates
|
|
933
|
+
// trailing zeros in `str` to align with the DER representation for a bit string
|
|
934
|
+
// with named bits. It returns one on success and zero on error. `n` is indexed
|
|
943
935
|
// beginning from zero.
|
|
944
936
|
OPENSSL_EXPORT int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *str, int n,
|
|
945
937
|
int value);
|
|
946
938
|
|
|
947
|
-
// ASN1_BIT_STRING_get_bit returns one if bit
|
|
948
|
-
// and zero otherwise.
|
|
939
|
+
// ASN1_BIT_STRING_get_bit returns one if bit `n` of `a` is in bounds and set,
|
|
940
|
+
// and zero otherwise. `n` is indexed beginning from zero.
|
|
949
941
|
OPENSSL_EXPORT int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *str, int n);
|
|
950
942
|
|
|
951
|
-
// ASN1_BIT_STRING_check returns one if
|
|
952
|
-
// the
|
|
953
|
-
//
|
|
954
|
-
// corresponds to the MSB of
|
|
943
|
+
// ASN1_BIT_STRING_check returns one if `str` only contains bits that are set in
|
|
944
|
+
// the `flags_len` bytes pointed by `flags`. Otherwise it returns zero. Bits in
|
|
945
|
+
// `flags` are arranged according to the DER representation, so bit 0
|
|
946
|
+
// corresponds to the MSB of `flags[0]`.
|
|
955
947
|
OPENSSL_EXPORT int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *str,
|
|
956
948
|
const unsigned char *flags,
|
|
957
949
|
int flags_len);
|
|
@@ -959,162 +951,162 @@ OPENSSL_EXPORT int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *str,
|
|
|
959
951
|
|
|
960
952
|
// Integers and enumerated values.
|
|
961
953
|
//
|
|
962
|
-
// INTEGER and ENUMERATED values are represented as
|
|
954
|
+
// INTEGER and ENUMERATED values are represented as `ASN1_STRING`s where the
|
|
963
955
|
// data contains the big-endian encoding of the absolute value of the integer.
|
|
964
956
|
// The sign bit is encoded in the type: non-negative values have a type of
|
|
965
|
-
//
|
|
966
|
-
//
|
|
957
|
+
// `V_ASN1_INTEGER` or `V_ASN1_ENUMERATED`, while negative values have a type of
|
|
958
|
+
// `V_ASN1_NEG_INTEGER` or `V_ASN1_NEG_ENUMERATED`. Note this differs from DER's
|
|
967
959
|
// two's complement representation.
|
|
968
960
|
//
|
|
969
|
-
// The data in the
|
|
961
|
+
// The data in the `ASN1_STRING` may not have leading zeros. Note this means
|
|
970
962
|
// zero is represented as the empty string. Parsing functions will never return
|
|
971
963
|
// invalid representations. If an invalid input is constructed, the marshaling
|
|
972
964
|
// functions will skip leading zeros, however other functions, such as
|
|
973
|
-
//
|
|
965
|
+
// `ASN1_INTEGER_cmp` or `ASN1_INTEGER_get`, may not return the correct result.
|
|
974
966
|
|
|
975
967
|
DEFINE_STACK_OF(ASN1_INTEGER)
|
|
976
968
|
|
|
977
|
-
// ASN1_INTEGER_new calls
|
|
969
|
+
// ASN1_INTEGER_new calls `ASN1_STRING_type_new` with `V_ASN1_INTEGER`. The
|
|
978
970
|
// resulting object has value zero.
|
|
979
971
|
OPENSSL_EXPORT ASN1_INTEGER *ASN1_INTEGER_new(void);
|
|
980
972
|
|
|
981
|
-
// ASN1_INTEGER_free calls
|
|
973
|
+
// ASN1_INTEGER_free calls `ASN1_STRING_free`.
|
|
982
974
|
OPENSSL_EXPORT void ASN1_INTEGER_free(ASN1_INTEGER *str);
|
|
983
975
|
|
|
984
|
-
// ASN1_INTEGER_dup calls
|
|
976
|
+
// ASN1_INTEGER_dup calls `ASN1_STRING_dup`.
|
|
985
977
|
OPENSSL_EXPORT ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x);
|
|
986
978
|
|
|
987
|
-
// d2i_ASN1_INTEGER parses up to
|
|
988
|
-
// ASN.1 INTEGER, as described in
|
|
979
|
+
// d2i_ASN1_INTEGER parses up to `len` bytes from `*inp` as a DER-encoded
|
|
980
|
+
// ASN.1 INTEGER, as described in `d2i_SAMPLE`.
|
|
989
981
|
OPENSSL_EXPORT ASN1_INTEGER *d2i_ASN1_INTEGER(ASN1_INTEGER **out,
|
|
990
982
|
const uint8_t **inp, long len);
|
|
991
983
|
|
|
992
|
-
// i2d_ASN1_INTEGER marshals
|
|
993
|
-
// described in
|
|
984
|
+
// i2d_ASN1_INTEGER marshals `in` as a DER-encoded ASN.1 INTEGER, as
|
|
985
|
+
// described in `i2d_SAMPLE`.
|
|
994
986
|
OPENSSL_EXPORT int i2d_ASN1_INTEGER(const ASN1_INTEGER *in, uint8_t **outp);
|
|
995
987
|
|
|
996
|
-
// c2i_ASN1_INTEGER decodes
|
|
988
|
+
// c2i_ASN1_INTEGER decodes `len` bytes from `*inp` as the contents of a
|
|
997
989
|
// DER-encoded INTEGER, excluding the tag and length. It behaves like
|
|
998
|
-
//
|
|
990
|
+
// `d2i_SAMPLE` except, on success, it always consumes all `len` bytes.
|
|
999
991
|
OPENSSL_EXPORT ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **in,
|
|
1000
992
|
const uint8_t **outp, long len);
|
|
1001
993
|
|
|
1002
|
-
// i2c_ASN1_INTEGER encodes
|
|
1003
|
-
// excluding the tag and length. If
|
|
1004
|
-
//
|
|
1005
|
-
// bytes written.
|
|
994
|
+
// i2c_ASN1_INTEGER encodes `in` as the contents of a DER-encoded INTEGER,
|
|
995
|
+
// excluding the tag and length. If `outp` is non-NULL, it writes the result to
|
|
996
|
+
// `*outp`, advances `*outp` just past the output, and returns the number of
|
|
997
|
+
// bytes written. `*outp` must have space available for the result. If `outp` is
|
|
1006
998
|
// NULL, it returns the number of bytes without writing anything. On error, it
|
|
1007
999
|
// returns a value <= 0.
|
|
1008
1000
|
//
|
|
1009
|
-
// Note this function differs slightly from
|
|
1010
|
-
// and
|
|
1001
|
+
// Note this function differs slightly from `i2d_SAMPLE`. If `outp` is non-NULL
|
|
1002
|
+
// and `*outp` is NULL, it does not allocate a new buffer.
|
|
1011
1003
|
//
|
|
1012
1004
|
// TODO(davidben): This function currently returns zero on error instead of -1,
|
|
1013
1005
|
// but it is also mostly infallible. I've currently documented <= 0 to suggest
|
|
1014
1006
|
// callers work with both.
|
|
1015
1007
|
OPENSSL_EXPORT int i2c_ASN1_INTEGER(const ASN1_INTEGER *in, uint8_t **outp);
|
|
1016
1008
|
|
|
1017
|
-
// ASN1_INTEGER is an
|
|
1018
|
-
//
|
|
1009
|
+
// ASN1_INTEGER is an `ASN1_ITEM` with ASN.1 type INTEGER and C type
|
|
1010
|
+
// `ASN1_INTEGER*`.
|
|
1019
1011
|
DECLARE_ASN1_ITEM(ASN1_INTEGER)
|
|
1020
1012
|
|
|
1021
|
-
// ASN1_INTEGER_set_uint64 sets
|
|
1013
|
+
// ASN1_INTEGER_set_uint64 sets `a` to an INTEGER with value `v`. It returns one
|
|
1022
1014
|
// on success and zero on error.
|
|
1023
1015
|
OPENSSL_EXPORT int ASN1_INTEGER_set_uint64(ASN1_INTEGER *out, uint64_t v);
|
|
1024
1016
|
|
|
1025
|
-
// ASN1_INTEGER_set_int64 sets
|
|
1017
|
+
// ASN1_INTEGER_set_int64 sets `a` to an INTEGER with value `v`. It returns one
|
|
1026
1018
|
// on success and zero on error.
|
|
1027
1019
|
OPENSSL_EXPORT int ASN1_INTEGER_set_int64(ASN1_INTEGER *out, int64_t v);
|
|
1028
1020
|
|
|
1029
|
-
// ASN1_INTEGER_get_uint64 converts
|
|
1030
|
-
// one and sets
|
|
1021
|
+
// ASN1_INTEGER_get_uint64 converts `a` to a `uint64_t`. On success, it returns
|
|
1022
|
+
// one and sets `*out` to the result. If `a` did not fit or has the wrong type,
|
|
1031
1023
|
// it returns zero.
|
|
1032
1024
|
OPENSSL_EXPORT int ASN1_INTEGER_get_uint64(uint64_t *out,
|
|
1033
1025
|
const ASN1_INTEGER *a);
|
|
1034
1026
|
|
|
1035
|
-
// ASN1_INTEGER_get_int64 converts
|
|
1036
|
-
// one and sets
|
|
1027
|
+
// ASN1_INTEGER_get_int64 converts `a` to a `int64_t`. On success, it returns
|
|
1028
|
+
// one and sets `*out` to the result. If `a` did not fit or has the wrong type,
|
|
1037
1029
|
// it returns zero.
|
|
1038
1030
|
OPENSSL_EXPORT int ASN1_INTEGER_get_int64(int64_t *out, const ASN1_INTEGER *a);
|
|
1039
1031
|
|
|
1040
|
-
// BN_to_ASN1_INTEGER sets
|
|
1041
|
-
// on success or NULL or error. If
|
|
1042
|
-
//
|
|
1043
|
-
//
|
|
1032
|
+
// BN_to_ASN1_INTEGER sets `ai` to an INTEGER with value `bn` and returns `ai`
|
|
1033
|
+
// on success or NULL or error. If `ai` is NULL, it returns a newly-allocated
|
|
1034
|
+
// `ASN1_INTEGER` on success instead, which the caller must release with
|
|
1035
|
+
// `ASN1_INTEGER_free`.
|
|
1044
1036
|
OPENSSL_EXPORT ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn,
|
|
1045
1037
|
ASN1_INTEGER *ai);
|
|
1046
1038
|
|
|
1047
|
-
// ASN1_INTEGER_to_BN sets
|
|
1048
|
-
// or NULL or error. If
|
|
1049
|
-
// success instead, which the caller must release with
|
|
1039
|
+
// ASN1_INTEGER_to_BN sets `bn` to the value of `ai` and returns `bn` on success
|
|
1040
|
+
// or NULL or error. If `bn` is NULL, it returns a newly-allocated `BIGNUM` on
|
|
1041
|
+
// success instead, which the caller must release with `BN_free`.
|
|
1050
1042
|
OPENSSL_EXPORT BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn);
|
|
1051
1043
|
|
|
1052
|
-
// ASN1_INTEGER_cmp compares the values of
|
|
1053
|
-
// equal to, less than, or greater than zero if
|
|
1054
|
-
// greater than
|
|
1044
|
+
// ASN1_INTEGER_cmp compares the values of `x` and `y`. It returns an integer
|
|
1045
|
+
// equal to, less than, or greater than zero if `x` is equal to, less than, or
|
|
1046
|
+
// greater than `y`, respectively.
|
|
1055
1047
|
OPENSSL_EXPORT int ASN1_INTEGER_cmp(const ASN1_INTEGER *x,
|
|
1056
1048
|
const ASN1_INTEGER *y);
|
|
1057
1049
|
|
|
1058
|
-
// ASN1_ENUMERATED_new calls
|
|
1050
|
+
// ASN1_ENUMERATED_new calls `ASN1_STRING_type_new` with `V_ASN1_ENUMERATED`.
|
|
1059
1051
|
// The resulting object has value zero.
|
|
1060
1052
|
OPENSSL_EXPORT ASN1_ENUMERATED *ASN1_ENUMERATED_new(void);
|
|
1061
1053
|
|
|
1062
|
-
// ASN1_ENUMERATED_free calls
|
|
1054
|
+
// ASN1_ENUMERATED_free calls `ASN1_STRING_free`.
|
|
1063
1055
|
OPENSSL_EXPORT void ASN1_ENUMERATED_free(ASN1_ENUMERATED *str);
|
|
1064
1056
|
|
|
1065
|
-
// d2i_ASN1_ENUMERATED parses up to
|
|
1066
|
-
// ASN.1 ENUMERATED, as described in
|
|
1057
|
+
// d2i_ASN1_ENUMERATED parses up to `len` bytes from `*inp` as a DER-encoded
|
|
1058
|
+
// ASN.1 ENUMERATED, as described in `d2i_SAMPLE`.
|
|
1067
1059
|
OPENSSL_EXPORT ASN1_ENUMERATED *d2i_ASN1_ENUMERATED(ASN1_ENUMERATED **out,
|
|
1068
1060
|
const uint8_t **inp,
|
|
1069
1061
|
long len);
|
|
1070
1062
|
|
|
1071
|
-
// i2d_ASN1_ENUMERATED marshals
|
|
1072
|
-
// described in
|
|
1063
|
+
// i2d_ASN1_ENUMERATED marshals `in` as a DER-encoded ASN.1 ENUMERATED, as
|
|
1064
|
+
// described in `i2d_SAMPLE`.
|
|
1073
1065
|
OPENSSL_EXPORT int i2d_ASN1_ENUMERATED(const ASN1_ENUMERATED *in,
|
|
1074
1066
|
uint8_t **outp);
|
|
1075
1067
|
|
|
1076
|
-
// ASN1_ENUMERATED is an
|
|
1077
|
-
//
|
|
1068
|
+
// ASN1_ENUMERATED is an `ASN1_ITEM` with ASN.1 type ENUMERATED and C type
|
|
1069
|
+
// `ASN1_ENUMERATED*`.
|
|
1078
1070
|
DECLARE_ASN1_ITEM(ASN1_ENUMERATED)
|
|
1079
1071
|
|
|
1080
|
-
// ASN1_ENUMERATED_set_uint64 sets
|
|
1072
|
+
// ASN1_ENUMERATED_set_uint64 sets `a` to an ENUMERATED with value `v`. It
|
|
1081
1073
|
// returns one on success and zero on error.
|
|
1082
1074
|
OPENSSL_EXPORT int ASN1_ENUMERATED_set_uint64(ASN1_ENUMERATED *out, uint64_t v);
|
|
1083
1075
|
|
|
1084
|
-
// ASN1_ENUMERATED_set_int64 sets
|
|
1076
|
+
// ASN1_ENUMERATED_set_int64 sets `a` to an ENUMERATED with value `v`. It
|
|
1085
1077
|
// returns one on success and zero on error.
|
|
1086
1078
|
OPENSSL_EXPORT int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *out, int64_t v);
|
|
1087
1079
|
|
|
1088
|
-
// ASN1_ENUMERATED_get_uint64 converts
|
|
1089
|
-
// returns one and sets
|
|
1080
|
+
// ASN1_ENUMERATED_get_uint64 converts `a` to a `uint64_t`. On success, it
|
|
1081
|
+
// returns one and sets `*out` to the result. If `a` did not fit or has the
|
|
1090
1082
|
// wrong type, it returns zero.
|
|
1091
1083
|
OPENSSL_EXPORT int ASN1_ENUMERATED_get_uint64(uint64_t *out,
|
|
1092
1084
|
const ASN1_ENUMERATED *a);
|
|
1093
1085
|
|
|
1094
|
-
// ASN1_ENUMERATED_get_int64 converts
|
|
1095
|
-
// returns one and sets
|
|
1086
|
+
// ASN1_ENUMERATED_get_int64 converts `a` to a `int64_t`. On success, it
|
|
1087
|
+
// returns one and sets `*out` to the result. If `a` did not fit or has the
|
|
1096
1088
|
// wrong type, it returns zero.
|
|
1097
1089
|
OPENSSL_EXPORT int ASN1_ENUMERATED_get_int64(int64_t *out,
|
|
1098
1090
|
const ASN1_ENUMERATED *a);
|
|
1099
1091
|
|
|
1100
|
-
// BN_to_ASN1_ENUMERATED sets
|
|
1101
|
-
//
|
|
1102
|
-
// newly-allocated
|
|
1103
|
-
// release with
|
|
1092
|
+
// BN_to_ASN1_ENUMERATED sets `ai` to an ENUMERATED with value `bn` and returns
|
|
1093
|
+
// `ai` on success or NULL or error. If `ai` is NULL, it returns a
|
|
1094
|
+
// newly-allocated `ASN1_ENUMERATED` on success instead, which the caller must
|
|
1095
|
+
// release with `ASN1_ENUMERATED_free`.
|
|
1104
1096
|
OPENSSL_EXPORT ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn,
|
|
1105
1097
|
ASN1_ENUMERATED *ai);
|
|
1106
1098
|
|
|
1107
|
-
// ASN1_ENUMERATED_to_BN sets
|
|
1108
|
-
// success or NULL or error. If
|
|
1109
|
-
//
|
|
1099
|
+
// ASN1_ENUMERATED_to_BN sets `bn` to the value of `ai` and returns `bn` on
|
|
1100
|
+
// success or NULL or error. If `bn` is NULL, it returns a newly-allocated
|
|
1101
|
+
// `BIGNUM` on success instead, which the caller must release with `BN_free`.
|
|
1110
1102
|
OPENSSL_EXPORT BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai,
|
|
1111
1103
|
BIGNUM *bn);
|
|
1112
1104
|
|
|
1113
1105
|
|
|
1114
1106
|
// Time.
|
|
1115
1107
|
//
|
|
1116
|
-
// GeneralizedTime and UTCTime values are represented as
|
|
1117
|
-
// type field is
|
|
1108
|
+
// GeneralizedTime and UTCTime values are represented as `ASN1_STRING`s. The
|
|
1109
|
+
// type field is `V_ASN1_GENERALIZEDTIME` or `V_ASN1_UTCTIME`, respectively. The
|
|
1118
1110
|
// data field contains the DER encoding of the value. For example, the UNIX
|
|
1119
1111
|
// epoch would be "19700101000000Z" for a GeneralizedTime and "700101000000Z"
|
|
1120
1112
|
// for a UTCTime.
|
|
@@ -1125,49 +1117,49 @@ OPENSSL_EXPORT BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai,
|
|
|
1125
1117
|
// BER, and the additional restrictions from RFC 5280, but future versions may.
|
|
1126
1118
|
// Callers should not rely on fractional seconds and non-UTC time zones.
|
|
1127
1119
|
//
|
|
1128
|
-
// The
|
|
1120
|
+
// The `ASN1_TIME` typedef is a multi-string representing the X.509 Time type,
|
|
1129
1121
|
// which is a CHOICE of GeneralizedTime and UTCTime, using UTCTime when the
|
|
1130
1122
|
// value is in range.
|
|
1131
1123
|
|
|
1132
|
-
// ASN1_UTCTIME_new calls
|
|
1124
|
+
// ASN1_UTCTIME_new calls `ASN1_STRING_type_new` with `V_ASN1_UTCTIME`. The
|
|
1133
1125
|
// resulting object contains empty contents and must be initialized to be a
|
|
1134
1126
|
// valid UTCTime.
|
|
1135
1127
|
OPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_new(void);
|
|
1136
1128
|
|
|
1137
|
-
// ASN1_UTCTIME_free calls
|
|
1129
|
+
// ASN1_UTCTIME_free calls `ASN1_STRING_free`.
|
|
1138
1130
|
OPENSSL_EXPORT void ASN1_UTCTIME_free(ASN1_UTCTIME *str);
|
|
1139
1131
|
|
|
1140
|
-
// d2i_ASN1_UTCTIME parses up to
|
|
1141
|
-
// ASN.1 UTCTime, as described in
|
|
1132
|
+
// d2i_ASN1_UTCTIME parses up to `len` bytes from `*inp` as a DER-encoded
|
|
1133
|
+
// ASN.1 UTCTime, as described in `d2i_SAMPLE`.
|
|
1142
1134
|
//
|
|
1143
1135
|
// TODO(https://crbug.com/boringssl/354): This function currently also accepts
|
|
1144
1136
|
// BER, but this will be removed in the future.
|
|
1145
1137
|
OPENSSL_EXPORT ASN1_UTCTIME *d2i_ASN1_UTCTIME(ASN1_UTCTIME **out,
|
|
1146
1138
|
const uint8_t **inp, long len);
|
|
1147
1139
|
|
|
1148
|
-
// i2d_ASN1_UTCTIME marshals
|
|
1149
|
-
// described in
|
|
1140
|
+
// i2d_ASN1_UTCTIME marshals `in` as a DER-encoded ASN.1 UTCTime, as
|
|
1141
|
+
// described in `i2d_SAMPLE`.
|
|
1150
1142
|
OPENSSL_EXPORT int i2d_ASN1_UTCTIME(const ASN1_UTCTIME *in, uint8_t **outp);
|
|
1151
1143
|
|
|
1152
|
-
// ASN1_UTCTIME is an
|
|
1153
|
-
//
|
|
1144
|
+
// ASN1_UTCTIME is an `ASN1_ITEM` with ASN.1 type UTCTime and C type
|
|
1145
|
+
// `ASN1_UTCTIME*`.
|
|
1154
1146
|
DECLARE_ASN1_ITEM(ASN1_UTCTIME)
|
|
1155
1147
|
|
|
1156
|
-
// ASN1_UTCTIME_check returns one if
|
|
1148
|
+
// ASN1_UTCTIME_check returns one if `a` is a valid UTCTime and zero otherwise.
|
|
1157
1149
|
OPENSSL_EXPORT int ASN1_UTCTIME_check(const ASN1_UTCTIME *a);
|
|
1158
1150
|
|
|
1159
|
-
// ASN1_UTCTIME_set represents
|
|
1160
|
-
// to
|
|
1161
|
-
// returns a newly-allocated
|
|
1151
|
+
// ASN1_UTCTIME_set represents `posix_time` as a UTCTime and writes the result
|
|
1152
|
+
// to `s`. It returns `s` on success and NULL on error. If `s` is NULL, it
|
|
1153
|
+
// returns a newly-allocated `ASN1_UTCTIME` instead.
|
|
1162
1154
|
//
|
|
1163
1155
|
// Note this function may fail if the time is out of range for UTCTime.
|
|
1164
1156
|
OPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,
|
|
1165
1157
|
int64_t posix_time);
|
|
1166
1158
|
|
|
1167
|
-
// ASN1_UTCTIME_adj adds
|
|
1168
|
-
//
|
|
1169
|
-
// success and NULL on error. If
|
|
1170
|
-
//
|
|
1159
|
+
// ASN1_UTCTIME_adj adds `offset_day` days and `offset_sec` seconds to
|
|
1160
|
+
// `posix_time` and writes the result to `s` as a UTCTime. It returns `s` on
|
|
1161
|
+
// success and NULL on error. If `s` is NULL, it returns a newly-allocated
|
|
1162
|
+
// `ASN1_UTCTIME` instead.
|
|
1171
1163
|
//
|
|
1172
1164
|
// Note this function may fail if the time overflows or is out of range for
|
|
1173
1165
|
// UTCTime.
|
|
@@ -1175,51 +1167,51 @@ OPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s,
|
|
|
1175
1167
|
int64_t posix_time,
|
|
1176
1168
|
int offset_day, long offset_sec);
|
|
1177
1169
|
|
|
1178
|
-
// ASN1_UTCTIME_set_string sets
|
|
1179
|
-
//
|
|
1170
|
+
// ASN1_UTCTIME_set_string sets `s` to a UTCTime whose contents are a copy of
|
|
1171
|
+
// `str`. It returns one on success and zero on error or if `str` is not a valid
|
|
1180
1172
|
// UTCTime.
|
|
1181
1173
|
//
|
|
1182
|
-
// If
|
|
1174
|
+
// If `s` is NULL, this function validates `str` without copying it.
|
|
1183
1175
|
OPENSSL_EXPORT int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str);
|
|
1184
1176
|
|
|
1185
|
-
// ASN1_GENERALIZEDTIME_new calls
|
|
1186
|
-
//
|
|
1177
|
+
// ASN1_GENERALIZEDTIME_new calls `ASN1_STRING_type_new` with
|
|
1178
|
+
// `V_ASN1_GENERALIZEDTIME`. The resulting object contains empty contents and
|
|
1187
1179
|
// must be initialized to be a valid GeneralizedTime.
|
|
1188
1180
|
OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_new(void);
|
|
1189
1181
|
|
|
1190
|
-
// ASN1_GENERALIZEDTIME_free calls
|
|
1182
|
+
// ASN1_GENERALIZEDTIME_free calls `ASN1_STRING_free`.
|
|
1191
1183
|
OPENSSL_EXPORT void ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *str);
|
|
1192
1184
|
|
|
1193
|
-
// d2i_ASN1_GENERALIZEDTIME parses up to
|
|
1194
|
-
// DER-encoded ASN.1 GeneralizedTime, as described in
|
|
1185
|
+
// d2i_ASN1_GENERALIZEDTIME parses up to `len` bytes from `*inp` as a
|
|
1186
|
+
// DER-encoded ASN.1 GeneralizedTime, as described in `d2i_SAMPLE`.
|
|
1195
1187
|
OPENSSL_EXPORT ASN1_GENERALIZEDTIME *d2i_ASN1_GENERALIZEDTIME(
|
|
1196
1188
|
ASN1_GENERALIZEDTIME **out, const uint8_t **inp, long len);
|
|
1197
1189
|
|
|
1198
|
-
// i2d_ASN1_GENERALIZEDTIME marshals
|
|
1199
|
-
// GeneralizedTime, as described in
|
|
1190
|
+
// i2d_ASN1_GENERALIZEDTIME marshals `in` as a DER-encoded ASN.1
|
|
1191
|
+
// GeneralizedTime, as described in `i2d_SAMPLE`.
|
|
1200
1192
|
OPENSSL_EXPORT int i2d_ASN1_GENERALIZEDTIME(const ASN1_GENERALIZEDTIME *in,
|
|
1201
1193
|
uint8_t **outp);
|
|
1202
1194
|
|
|
1203
|
-
// ASN1_GENERALIZEDTIME is an
|
|
1204
|
-
// type
|
|
1195
|
+
// ASN1_GENERALIZEDTIME is an `ASN1_ITEM` with ASN.1 type GeneralizedTime and C
|
|
1196
|
+
// type `ASN1_GENERALIZEDTIME*`.
|
|
1205
1197
|
DECLARE_ASN1_ITEM(ASN1_GENERALIZEDTIME)
|
|
1206
1198
|
|
|
1207
|
-
// ASN1_GENERALIZEDTIME_check returns one if
|
|
1199
|
+
// ASN1_GENERALIZEDTIME_check returns one if `a` is a valid GeneralizedTime and
|
|
1208
1200
|
// zero otherwise.
|
|
1209
1201
|
OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a);
|
|
1210
1202
|
|
|
1211
|
-
// ASN1_GENERALIZEDTIME_set represents
|
|
1212
|
-
// writes the result to
|
|
1213
|
-
// is NULL, it returns a newly-allocated
|
|
1203
|
+
// ASN1_GENERALIZEDTIME_set represents `posix_time` as a GeneralizedTime and
|
|
1204
|
+
// writes the result to `s`. It returns `s` on success and NULL on error. If `s`
|
|
1205
|
+
// is NULL, it returns a newly-allocated `ASN1_GENERALIZEDTIME` instead.
|
|
1214
1206
|
//
|
|
1215
1207
|
// Note this function may fail if the time is out of range for GeneralizedTime.
|
|
1216
1208
|
OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(
|
|
1217
1209
|
ASN1_GENERALIZEDTIME *s, int64_t posix_time);
|
|
1218
1210
|
|
|
1219
|
-
// ASN1_GENERALIZEDTIME_adj adds
|
|
1220
|
-
//
|
|
1221
|
-
//
|
|
1222
|
-
// newly-allocated
|
|
1211
|
+
// ASN1_GENERALIZEDTIME_adj adds `offset_day` days and `offset_sec` seconds to
|
|
1212
|
+
// `posix_time` and writes the result to `s` as a GeneralizedTime. It returns
|
|
1213
|
+
// `s` on success and NULL on error. If `s` is NULL, it returns a
|
|
1214
|
+
// newly-allocated `ASN1_GENERALIZEDTIME` instead.
|
|
1223
1215
|
//
|
|
1224
1216
|
// Note this function may fail if the time overflows or is out of range for
|
|
1225
1217
|
// GeneralizedTime.
|
|
@@ -1227,114 +1219,110 @@ OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(
|
|
|
1227
1219
|
ASN1_GENERALIZEDTIME *s, int64_t posix_time, int offset_day,
|
|
1228
1220
|
long offset_sec);
|
|
1229
1221
|
|
|
1230
|
-
// ASN1_GENERALIZEDTIME_set_string sets
|
|
1231
|
-
// are a copy of
|
|
1222
|
+
// ASN1_GENERALIZEDTIME_set_string sets `s` to a GeneralizedTime whose contents
|
|
1223
|
+
// are a copy of `str`. It returns one on success and zero on error or if `str`
|
|
1232
1224
|
// is not a valid GeneralizedTime.
|
|
1233
1225
|
//
|
|
1234
|
-
// If
|
|
1226
|
+
// If `s` is NULL, this function validates `str` without copying it.
|
|
1235
1227
|
OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s,
|
|
1236
1228
|
const char *str);
|
|
1237
1229
|
|
|
1238
1230
|
// B_ASN1_TIME is a bitmask of types allowed in an X.509 Time.
|
|
1239
1231
|
#define B_ASN1_TIME (B_ASN1_UTCTIME | B_ASN1_GENERALIZEDTIME)
|
|
1240
1232
|
|
|
1241
|
-
// ASN1_TIME_new returns a newly-allocated
|
|
1242
|
-
// error. The resulting
|
|
1233
|
+
// ASN1_TIME_new returns a newly-allocated `ASN1_TIME` with type -1, or NULL on
|
|
1234
|
+
// error. The resulting `ASN1_TIME` is not a valid X.509 Time until initialized
|
|
1243
1235
|
// with a value.
|
|
1244
1236
|
OPENSSL_EXPORT ASN1_TIME *ASN1_TIME_new(void);
|
|
1245
1237
|
|
|
1246
|
-
// ASN1_TIME_free releases memory associated with
|
|
1238
|
+
// ASN1_TIME_free releases memory associated with `str`.
|
|
1247
1239
|
OPENSSL_EXPORT void ASN1_TIME_free(ASN1_TIME *str);
|
|
1248
1240
|
|
|
1249
|
-
// d2i_ASN1_TIME parses up to
|
|
1250
|
-
// Time (RFC 5280), as described in
|
|
1241
|
+
// d2i_ASN1_TIME parses up to `len` bytes from `*inp` as a DER-encoded X.509
|
|
1242
|
+
// Time (RFC 5280), as described in `d2i_SAMPLE`.
|
|
1251
1243
|
//
|
|
1252
1244
|
// TODO(https://crbug.com/boringssl/354): This function currently also accepts
|
|
1253
1245
|
// BER, but this will be removed in the future.
|
|
1254
1246
|
OPENSSL_EXPORT ASN1_TIME *d2i_ASN1_TIME(ASN1_TIME **out, const uint8_t **inp,
|
|
1255
1247
|
long len);
|
|
1256
1248
|
|
|
1257
|
-
// i2d_ASN1_TIME marshals
|
|
1258
|
-
// described in
|
|
1249
|
+
// i2d_ASN1_TIME marshals `in` as a DER-encoded X.509 Time (RFC 5280), as
|
|
1250
|
+
// described in `i2d_SAMPLE`.
|
|
1259
1251
|
OPENSSL_EXPORT int i2d_ASN1_TIME(const ASN1_TIME *in, uint8_t **outp);
|
|
1260
1252
|
|
|
1261
|
-
//
|
|
1262
|
-
//
|
|
1263
|
-
DECLARE_ASN1_ITEM(ASN1_TIME)
|
|
1264
|
-
|
|
1265
|
-
// ASN1_TIME_diff computes |to| - |from|. On success, it sets |*out_days| to the
|
|
1266
|
-
// difference in days, rounded towards zero, sets |*out_seconds| to the
|
|
1253
|
+
// ASN1_TIME_diff computes `to` - `from`. On success, it sets `*out_days` to the
|
|
1254
|
+
// difference in days, rounded towards zero, sets `*out_seconds` to the
|
|
1267
1255
|
// remainder, and returns one. On error, it returns zero.
|
|
1268
1256
|
//
|
|
1269
|
-
// If
|
|
1270
|
-
// negative. If
|
|
1257
|
+
// If `from` is before `to`, both outputs will be <= 0, with at least one
|
|
1258
|
+
// negative. If `from` is after `to`, both will be >= 0, with at least one
|
|
1271
1259
|
// positive. If they are equal, ignoring fractional seconds, both will be zero.
|
|
1272
1260
|
//
|
|
1273
|
-
// Note this function may fail on overflow, or if
|
|
1261
|
+
// Note this function may fail on overflow, or if `from` or `to` cannot be
|
|
1274
1262
|
// decoded.
|
|
1275
1263
|
OPENSSL_EXPORT int ASN1_TIME_diff(int *out_days, int *out_seconds,
|
|
1276
1264
|
const ASN1_TIME *from, const ASN1_TIME *to);
|
|
1277
1265
|
|
|
1278
|
-
// ASN1_TIME_set_posix represents
|
|
1279
|
-
// and writes the result to
|
|
1280
|
-
// UTCTime when the time fits and GeneralizedTime otherwise. It returns
|
|
1281
|
-
// success and NULL on error. If
|
|
1282
|
-
//
|
|
1266
|
+
// ASN1_TIME_set_posix represents `posix_time` as a GeneralizedTime or UTCTime
|
|
1267
|
+
// and writes the result to `s`. As in RFC 5280, section 4.1.2.5, it uses
|
|
1268
|
+
// UTCTime when the time fits and GeneralizedTime otherwise. It returns `s` on
|
|
1269
|
+
// success and NULL on error. If `s` is NULL, it returns a newly-allocated
|
|
1270
|
+
// `ASN1_TIME` instead.
|
|
1283
1271
|
//
|
|
1284
1272
|
// Note this function may fail if the time is out of range for GeneralizedTime.
|
|
1285
1273
|
OPENSSL_EXPORT ASN1_TIME *ASN1_TIME_set_posix(ASN1_TIME *s, int64_t posix_time);
|
|
1286
1274
|
|
|
1287
|
-
// ASN1_TIME_set is exactly the same as
|
|
1275
|
+
// ASN1_TIME_set is exactly the same as `ASN1_TIME_set_posix` but with a
|
|
1288
1276
|
// time_t as input for compatibility.
|
|
1289
1277
|
OPENSSL_EXPORT ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t time);
|
|
1290
1278
|
|
|
1291
|
-
// ASN1_TIME_adj adds
|
|
1292
|
-
//
|
|
1279
|
+
// ASN1_TIME_adj adds `offset_day` days and `offset_sec` seconds to
|
|
1280
|
+
// `posix_time` and writes the result to `s`. As in RFC 5280, section 4.1.2.5,
|
|
1293
1281
|
// it uses UTCTime when the time fits and GeneralizedTime otherwise. It returns
|
|
1294
|
-
//
|
|
1295
|
-
// newly-allocated
|
|
1282
|
+
// `s` on success and NULL on error. If `s` is NULL, it returns a
|
|
1283
|
+
// newly-allocated `ASN1_GENERALIZEDTIME` instead.
|
|
1296
1284
|
//
|
|
1297
1285
|
// Note this function may fail if the time overflows or is out of range for
|
|
1298
1286
|
// GeneralizedTime.
|
|
1299
1287
|
OPENSSL_EXPORT ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, int64_t posix_time,
|
|
1300
1288
|
int offset_day, long offset_sec);
|
|
1301
1289
|
|
|
1302
|
-
// ASN1_TIME_check returns one if
|
|
1303
|
-
// zero otherwise.
|
|
1290
|
+
// ASN1_TIME_check returns one if `t` is a valid UTCTime or GeneralizedTime, and
|
|
1291
|
+
// zero otherwise. `t`'s type determines which check is performed. This
|
|
1304
1292
|
// function does not enforce that UTCTime was used when possible.
|
|
1305
1293
|
OPENSSL_EXPORT int ASN1_TIME_check(const ASN1_TIME *t);
|
|
1306
1294
|
|
|
1307
|
-
// ASN1_TIME_to_generalizedtime converts
|
|
1308
|
-
// NULL, it returns a newly-allocated
|
|
1309
|
-
// on error. If
|
|
1310
|
-
//
|
|
1311
|
-
// the object pointed by
|
|
1295
|
+
// ASN1_TIME_to_generalizedtime converts `t` to a GeneralizedTime. If `out` is
|
|
1296
|
+
// NULL, it returns a newly-allocated `ASN1_GENERALIZEDTIME` on success, or NULL
|
|
1297
|
+
// on error. If `out` is non-NULL and `*out` is NULL, it additionally sets
|
|
1298
|
+
// `*out` to the result. If `out` and `*out` are non-NULL, it instead updates
|
|
1299
|
+
// the object pointed by `*out` and returns `*out` on success or NULL on error.
|
|
1312
1300
|
OPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(
|
|
1313
1301
|
const ASN1_TIME *t, ASN1_GENERALIZEDTIME **out);
|
|
1314
1302
|
|
|
1315
|
-
// ASN1_TIME_set_string behaves like
|
|
1316
|
-
// valid UTCTime, and
|
|
1317
|
-
// GeneralizedTime. If
|
|
1303
|
+
// ASN1_TIME_set_string behaves like `ASN1_UTCTIME_set_string` if `str` is a
|
|
1304
|
+
// valid UTCTime, and `ASN1_GENERALIZEDTIME_set_string` if `str` is a valid
|
|
1305
|
+
// GeneralizedTime. If `str` is neither, it returns zero.
|
|
1318
1306
|
OPENSSL_EXPORT int ASN1_TIME_set_string(ASN1_TIME *s, const char *str);
|
|
1319
1307
|
|
|
1320
|
-
// ASN1_TIME_set_string_X509 behaves like
|
|
1308
|
+
// ASN1_TIME_set_string_X509 behaves like `ASN1_TIME_set_string` except it
|
|
1321
1309
|
// additionally converts GeneralizedTime to UTCTime if it is in the range where
|
|
1322
1310
|
// UTCTime is used. See RFC 5280, section 4.1.2.5.
|
|
1323
1311
|
OPENSSL_EXPORT int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str);
|
|
1324
1312
|
|
|
1325
|
-
// ASN1_TIME_to_time_t converts
|
|
1313
|
+
// ASN1_TIME_to_time_t converts `t` to a time_t value in `out`. On
|
|
1326
1314
|
// success, one is returned. On failure, zero is returned. This function
|
|
1327
1315
|
// will fail if the time can not be represented in a time_t.
|
|
1328
1316
|
OPENSSL_EXPORT int ASN1_TIME_to_time_t(const ASN1_TIME *t, time_t *out);
|
|
1329
1317
|
|
|
1330
|
-
// ASN1_TIME_to_posix converts
|
|
1318
|
+
// ASN1_TIME_to_posix converts `t` to a POSIX time value in `out`. On
|
|
1331
1319
|
// success, one is returned. On failure, zero is returned.
|
|
1332
1320
|
OPENSSL_EXPORT int ASN1_TIME_to_posix(const ASN1_TIME *t, int64_t *out);
|
|
1333
1321
|
|
|
1334
|
-
// ASN1_TIME_to_posix_nonstandard converts
|
|
1335
|
-
//
|
|
1322
|
+
// ASN1_TIME_to_posix_nonstandard converts `t` to a POSIX time value in
|
|
1323
|
+
// `out`. It is exactly the same as `ASN1_TIME_to_posix` but allows for
|
|
1336
1324
|
// non-standard four-digit timezone offsets on UTC times. On success, one is
|
|
1337
|
-
// returned. On failure, zero is returned.
|
|
1325
|
+
// returned. On failure, zero is returned. `ASN1_TIME_to_posix` should normally
|
|
1338
1326
|
// be used instead of this function.
|
|
1339
1327
|
OPENSSL_EXPORT int ASN1_TIME_to_posix_nonstandard(
|
|
1340
1328
|
const ASN1_TIME *t, int64_t *out);
|
|
@@ -1345,120 +1333,120 @@ OPENSSL_EXPORT int ASN1_TIME_to_posix_nonstandard(
|
|
|
1345
1333
|
// NULL values.
|
|
1346
1334
|
//
|
|
1347
1335
|
// This library represents the ASN.1 NULL value by a non-NULL pointer to the
|
|
1348
|
-
// opaque type
|
|
1349
|
-
// pointer. Unlike other pointer types, it is not necessary to free
|
|
1336
|
+
// opaque type `ASN1_NULL`. An omitted OPTIONAL ASN.1 NULL value is a NULL
|
|
1337
|
+
// pointer. Unlike other pointer types, it is not necessary to free `ASN1_NULL`
|
|
1350
1338
|
// pointers, but it is safe to do so.
|
|
1351
1339
|
|
|
1352
1340
|
// ASN1_NULL_new returns an opaque, non-NULL pointer. It is safe to call
|
|
1353
|
-
//
|
|
1341
|
+
// `ASN1_NULL_free` on the result, but not necessary.
|
|
1354
1342
|
OPENSSL_EXPORT ASN1_NULL *ASN1_NULL_new(void);
|
|
1355
1343
|
|
|
1356
1344
|
// ASN1_NULL_free does nothing.
|
|
1357
1345
|
OPENSSL_EXPORT void ASN1_NULL_free(ASN1_NULL *null);
|
|
1358
1346
|
|
|
1359
|
-
// d2i_ASN1_NULL parses a DER-encoded ASN.1 NULL value from up to
|
|
1360
|
-
// at
|
|
1347
|
+
// d2i_ASN1_NULL parses a DER-encoded ASN.1 NULL value from up to `len` bytes
|
|
1348
|
+
// at `*inp`, as described in `d2i_SAMPLE`.
|
|
1361
1349
|
OPENSSL_EXPORT ASN1_NULL *d2i_ASN1_NULL(ASN1_NULL **out, const uint8_t **inp,
|
|
1362
1350
|
long len);
|
|
1363
1351
|
|
|
1364
|
-
// i2d_ASN1_NULL marshals
|
|
1365
|
-
// in
|
|
1352
|
+
// i2d_ASN1_NULL marshals `in` as a DER-encoded ASN.1 NULL value, as described
|
|
1353
|
+
// in `i2d_SAMPLE`.
|
|
1366
1354
|
OPENSSL_EXPORT int i2d_ASN1_NULL(const ASN1_NULL *in, uint8_t **outp);
|
|
1367
1355
|
|
|
1368
|
-
// ASN1_NULL is an
|
|
1356
|
+
// ASN1_NULL is an `ASN1_ITEM` with ASN.1 type NULL and C type `ASN1_NULL*`.
|
|
1369
1357
|
DECLARE_ASN1_ITEM(ASN1_NULL)
|
|
1370
1358
|
|
|
1371
1359
|
|
|
1372
1360
|
// Object identifiers.
|
|
1373
1361
|
//
|
|
1374
|
-
// An
|
|
1375
|
-
// additional functions relating to
|
|
1362
|
+
// An `ASN1_OBJECT` represents a ASN.1 OBJECT IDENTIFIER. See also obj.h for
|
|
1363
|
+
// additional functions relating to `ASN1_OBJECT`.
|
|
1376
1364
|
//
|
|
1377
1365
|
// TODO(davidben): What's the relationship between asn1.h and obj.h? Most of
|
|
1378
|
-
// obj.h deals with the large NID table, but then functions like
|
|
1379
|
-
// or
|
|
1366
|
+
// obj.h deals with the large NID table, but then functions like `OBJ_get0_data`
|
|
1367
|
+
// or `OBJ_dup` are general `ASN1_OBJECT` functions.
|
|
1380
1368
|
|
|
1381
1369
|
DEFINE_STACK_OF(ASN1_OBJECT)
|
|
1382
1370
|
|
|
1383
|
-
// ASN1_OBJECT_create returns a newly-allocated
|
|
1384
|
-
// from
|
|
1371
|
+
// ASN1_OBJECT_create returns a newly-allocated `ASN1_OBJECT` with `len` bytes
|
|
1372
|
+
// from `data` as the encoded OID, or NULL on error. `data` should contain the
|
|
1385
1373
|
// DER-encoded identifier, excluding the tag and length.
|
|
1386
1374
|
//
|
|
1387
|
-
//
|
|
1388
|
-
// will cause some functions to misbehave.
|
|
1375
|
+
// `nid` should be `NID_undef`. Passing a NID value that does not match `data`
|
|
1376
|
+
// will cause some functions to misbehave. `sn` and `ln` should be NULL. If
|
|
1389
1377
|
// non-NULL, they are stored as short and long names, respectively, but these
|
|
1390
|
-
// values have no effect for
|
|
1378
|
+
// values have no effect for `ASN1_OBJECT`s created through this function.
|
|
1391
1379
|
//
|
|
1392
1380
|
// TODO(davidben): Should we just ignore all those parameters? NIDs and names
|
|
1393
|
-
// are only relevant for
|
|
1381
|
+
// are only relevant for `ASN1_OBJECT`s in the obj.h table.
|
|
1394
1382
|
OPENSSL_EXPORT ASN1_OBJECT *ASN1_OBJECT_create(int nid, const uint8_t *data,
|
|
1395
1383
|
size_t len, const char *sn,
|
|
1396
1384
|
const char *ln);
|
|
1397
1385
|
|
|
1398
|
-
// ASN1_OBJECT_free releases memory associated with
|
|
1399
|
-
//
|
|
1386
|
+
// ASN1_OBJECT_free releases memory associated with `a`. If `a` is a static
|
|
1387
|
+
// `ASN1_OBJECT`, returned from `OBJ_nid2obj`, this function does nothing.
|
|
1400
1388
|
OPENSSL_EXPORT void ASN1_OBJECT_free(ASN1_OBJECT *a);
|
|
1401
1389
|
|
|
1402
|
-
// d2i_ASN1_OBJECT parses a DER-encoded ASN.1 OBJECT IDENTIFIER from up to
|
|
1403
|
-
// bytes at
|
|
1390
|
+
// d2i_ASN1_OBJECT parses a DER-encoded ASN.1 OBJECT IDENTIFIER from up to `len`
|
|
1391
|
+
// bytes at `*inp`, as described in `d2i_SAMPLE`.
|
|
1404
1392
|
OPENSSL_EXPORT ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **out,
|
|
1405
1393
|
const uint8_t **inp, long len);
|
|
1406
1394
|
|
|
1407
|
-
// i2d_ASN1_OBJECT marshals
|
|
1408
|
-
// described in
|
|
1395
|
+
// i2d_ASN1_OBJECT marshals `in` as a DER-encoded ASN.1 OBJECT IDENTIFIER, as
|
|
1396
|
+
// described in `i2d_SAMPLE`.
|
|
1409
1397
|
OPENSSL_EXPORT int i2d_ASN1_OBJECT(const ASN1_OBJECT *in, uint8_t **outp);
|
|
1410
1398
|
|
|
1411
|
-
// c2i_ASN1_OBJECT decodes
|
|
1399
|
+
// c2i_ASN1_OBJECT decodes `len` bytes from `*inp` as the contents of a
|
|
1412
1400
|
// DER-encoded OBJECT IDENTIFIER, excluding the tag and length. It behaves like
|
|
1413
|
-
//
|
|
1401
|
+
// `d2i_SAMPLE` except, on success, it always consumes all `len` bytes.
|
|
1414
1402
|
OPENSSL_EXPORT ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **out,
|
|
1415
1403
|
const uint8_t **inp, long len);
|
|
1416
1404
|
|
|
1417
|
-
// ASN1_OBJECT is an
|
|
1418
|
-
//
|
|
1405
|
+
// ASN1_OBJECT is an `ASN1_ITEM` with ASN.1 type OBJECT IDENTIFIER and C type
|
|
1406
|
+
// `ASN1_OBJECT*`.
|
|
1419
1407
|
DECLARE_ASN1_ITEM(ASN1_OBJECT)
|
|
1420
1408
|
|
|
1421
1409
|
|
|
1422
1410
|
// Arbitrary elements.
|
|
1423
1411
|
|
|
1424
|
-
// An asn1_type_st (aka
|
|
1425
|
-
// typically used for ANY types. It contains a
|
|
1426
|
-
// dependent on
|
|
1412
|
+
// An asn1_type_st (aka `ASN1_TYPE`) represents an arbitrary ASN.1 element,
|
|
1413
|
+
// typically used for ANY types. It contains a `type` field and a `value` union
|
|
1414
|
+
// dependent on `type`.
|
|
1427
1415
|
//
|
|
1428
1416
|
// WARNING: This struct has a complex representation. Callers must not construct
|
|
1429
|
-
//
|
|
1417
|
+
// `ASN1_TYPE` values manually. Use `ASN1_TYPE_set` and `ASN1_TYPE_set1`
|
|
1430
1418
|
// instead. Additionally, callers performing non-trivial operations on this type
|
|
1431
|
-
// are encouraged to use
|
|
1432
|
-
// convert to or from
|
|
1419
|
+
// are encouraged to use `CBS` and `CBB` from <openssl/bytestring.h>, and
|
|
1420
|
+
// convert to or from `ASN1_TYPE` with `d2i_ASN1_TYPE` or `i2d_ASN1_TYPE`.
|
|
1433
1421
|
//
|
|
1434
|
-
// The
|
|
1422
|
+
// The `type` field corresponds to the tag of the ASN.1 element being
|
|
1435
1423
|
// represented:
|
|
1436
1424
|
//
|
|
1437
|
-
// If
|
|
1438
|
-
// by
|
|
1439
|
-
//
|
|
1440
|
-
//
|
|
1441
|
-
//
|
|
1442
|
-
// ENUMERATE values. For a negative value, the
|
|
1443
|
-
//
|
|
1444
|
-
// whose
|
|
1425
|
+
// If `type` is a `V_ASN1_*` constant for an ASN.1 string-like type, as defined
|
|
1426
|
+
// by `ASN1_STRING`, the tag matches the constant. `value` contains an
|
|
1427
|
+
// `ASN1_STRING` pointer (equivalently, one of the more specific typedefs). See
|
|
1428
|
+
// `ASN1_STRING` for details on the representation. Unlike `ASN1_STRING`,
|
|
1429
|
+
// `ASN1_TYPE` does not use the `V_ASN1_NEG` flag for negative INTEGER and
|
|
1430
|
+
// ENUMERATE values. For a negative value, the `ASN1_TYPE`'s `type` will be
|
|
1431
|
+
// `V_ASN1_INTEGER` or `V_ASN1_ENUMERATED`, but `value` will an `ASN1_STRING`
|
|
1432
|
+
// whose `type` is `V_ASN1_NEG_INTEGER` or `V_ASN1_NEG_ENUMERATED`.
|
|
1445
1433
|
//
|
|
1446
|
-
// If
|
|
1447
|
-
// contains an
|
|
1434
|
+
// If `type` is `V_ASN1_OBJECT`, the tag is OBJECT IDENTIFIER and `value`
|
|
1435
|
+
// contains an `ASN1_OBJECT` pointer.
|
|
1448
1436
|
//
|
|
1449
|
-
// If
|
|
1437
|
+
// If `type` is `V_ASN1_NULL`, the tag is NULL. `value` contains a NULL pointer.
|
|
1450
1438
|
//
|
|
1451
|
-
// If
|
|
1452
|
-
//
|
|
1439
|
+
// If `type` is `V_ASN1_BOOLEAN`, the tag is BOOLEAN. `value` contains an
|
|
1440
|
+
// `ASN1_BOOLEAN`.
|
|
1453
1441
|
//
|
|
1454
|
-
// If
|
|
1455
|
-
// SEQUENCE, SET, or some arbitrary tag, respectively.
|
|
1456
|
-
// corresponding
|
|
1457
|
-
// represented in
|
|
1442
|
+
// If `type` is `V_ASN1_SEQUENCE`, `V_ASN1_SET`, or `V_ASN1_OTHER`, the tag is
|
|
1443
|
+
// SEQUENCE, SET, or some arbitrary tag, respectively. `value` uses the
|
|
1444
|
+
// corresponding `ASN1_STRING` representation. Although any type may be
|
|
1445
|
+
// represented in `V_ASN1_OTHER`, the parser will always return the more
|
|
1458
1446
|
// specific encoding when available.
|
|
1459
1447
|
//
|
|
1460
|
-
// Other values of
|
|
1461
|
-
// default-constructed objects may set
|
|
1448
|
+
// Other values of `type` do not represent a valid ASN.1 value, though
|
|
1449
|
+
// default-constructed objects may set `type` to -1. Such objects cannot be
|
|
1462
1450
|
// serialized.
|
|
1463
1451
|
struct asn1_type_st {
|
|
1464
1452
|
int type;
|
|
@@ -1490,18 +1478,18 @@ struct asn1_type_st {
|
|
|
1490
1478
|
|
|
1491
1479
|
DEFINE_STACK_OF(ASN1_TYPE)
|
|
1492
1480
|
|
|
1493
|
-
// ASN1_TYPE_new returns a newly-allocated
|
|
1481
|
+
// ASN1_TYPE_new returns a newly-allocated `ASN1_TYPE`, or NULL on allocation
|
|
1494
1482
|
// failure. The resulting object has type -1 and must be initialized to be
|
|
1495
1483
|
// a valid ANY value.
|
|
1496
1484
|
OPENSSL_EXPORT ASN1_TYPE *ASN1_TYPE_new(void);
|
|
1497
1485
|
|
|
1498
|
-
// ASN1_TYPE_free releases memory associated with
|
|
1486
|
+
// ASN1_TYPE_free releases memory associated with `a`.
|
|
1499
1487
|
OPENSSL_EXPORT void ASN1_TYPE_free(ASN1_TYPE *a);
|
|
1500
1488
|
|
|
1501
|
-
// d2i_ASN1_TYPE parses up to
|
|
1502
|
-
// type, as described in
|
|
1489
|
+
// d2i_ASN1_TYPE parses up to `len` bytes from `*inp` as an ASN.1 value of any
|
|
1490
|
+
// type, as described in `d2i_SAMPLE`. Note this function only validates
|
|
1503
1491
|
// primitive, universal types supported by this library. Values of type
|
|
1504
|
-
//
|
|
1492
|
+
// `V_ASN1_SEQUENCE`, `V_ASN1_SET`, `V_ASN1_OTHER`, or an unsupported primitive
|
|
1505
1493
|
// type must be validated by the caller when interpreting.
|
|
1506
1494
|
//
|
|
1507
1495
|
// TODO(https://crbug.com/boringssl/354): This function currently also accepts
|
|
@@ -1509,46 +1497,46 @@ OPENSSL_EXPORT void ASN1_TYPE_free(ASN1_TYPE *a);
|
|
|
1509
1497
|
OPENSSL_EXPORT ASN1_TYPE *d2i_ASN1_TYPE(ASN1_TYPE **out, const uint8_t **inp,
|
|
1510
1498
|
long len);
|
|
1511
1499
|
|
|
1512
|
-
// i2d_ASN1_TYPE marshals
|
|
1500
|
+
// i2d_ASN1_TYPE marshals `in` as DER, as described in `i2d_SAMPLE`.
|
|
1513
1501
|
OPENSSL_EXPORT int i2d_ASN1_TYPE(const ASN1_TYPE *in, uint8_t **outp);
|
|
1514
1502
|
|
|
1515
|
-
// ASN1_ANY is an
|
|
1516
|
-
// the
|
|
1503
|
+
// ASN1_ANY is an `ASN1_ITEM` with ASN.1 type ANY and C type `ASN1_TYPE*`. Note
|
|
1504
|
+
// the `ASN1_ITEM` name and C type do not match.
|
|
1517
1505
|
DECLARE_ASN1_ITEM(ASN1_ANY)
|
|
1518
1506
|
|
|
1519
|
-
// ASN1_TYPE_get returns the type of
|
|
1520
|
-
// constants, or zero if
|
|
1507
|
+
// ASN1_TYPE_get returns the type of `a`, which will be one of the `V_ASN1_*`
|
|
1508
|
+
// constants, or zero if `a` is not fully initialized.
|
|
1521
1509
|
OPENSSL_EXPORT int ASN1_TYPE_get(const ASN1_TYPE *a);
|
|
1522
1510
|
|
|
1523
|
-
// ASN1_TYPE_set sets
|
|
1524
|
-
// releasing the previous contents of
|
|
1511
|
+
// ASN1_TYPE_set sets `a` to an `ASN1_TYPE` of type `type` and value `value`,
|
|
1512
|
+
// releasing the previous contents of `a`.
|
|
1525
1513
|
//
|
|
1526
|
-
// If
|
|
1527
|
-
// TRUE otherwise. If setting
|
|
1514
|
+
// If `type` is `V_ASN1_BOOLEAN`, `a` is set to FALSE if `value` is NULL and
|
|
1515
|
+
// TRUE otherwise. If setting `a` to TRUE, `value` may be an invalid pointer,
|
|
1528
1516
|
// such as (void*)1.
|
|
1529
1517
|
//
|
|
1530
|
-
// If
|
|
1518
|
+
// If `type` is `V_ASN1_NULL`, `value` must be NULL.
|
|
1531
1519
|
//
|
|
1532
|
-
// For other values of
|
|
1533
|
-
// must point to an object of the corresponding type. See
|
|
1520
|
+
// For other values of `type`, this function takes ownership of `value`, which
|
|
1521
|
+
// must point to an object of the corresponding type. See `ASN1_TYPE` for
|
|
1534
1522
|
// details.
|
|
1535
1523
|
OPENSSL_EXPORT void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
|
|
1536
1524
|
|
|
1537
|
-
// ASN1_TYPE_set1 behaves like
|
|
1538
|
-
// of
|
|
1525
|
+
// ASN1_TYPE_set1 behaves like `ASN1_TYPE_set` except it does not take ownership
|
|
1526
|
+
// of `value`. It returns one on success and zero on error.
|
|
1539
1527
|
OPENSSL_EXPORT int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value);
|
|
1540
1528
|
|
|
1541
|
-
// ASN1_TYPE_cmp returns zero if
|
|
1529
|
+
// ASN1_TYPE_cmp returns zero if `a` and `b` are equal and some non-zero value
|
|
1542
1530
|
// otherwise. Note this function can only be used for equality checks, not an
|
|
1543
1531
|
// ordering.
|
|
1544
1532
|
OPENSSL_EXPORT int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b);
|
|
1545
1533
|
|
|
1546
1534
|
typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY;
|
|
1547
1535
|
|
|
1548
|
-
// d2i_ASN1_SEQUENCE_ANY parses up to
|
|
1549
|
-
// ASN.1 SEQUENCE OF ANY structure, as described in
|
|
1550
|
-
//
|
|
1551
|
-
//
|
|
1536
|
+
// d2i_ASN1_SEQUENCE_ANY parses up to `len` bytes from `*inp` as a DER-encoded
|
|
1537
|
+
// ASN.1 SEQUENCE OF ANY structure, as described in `d2i_SAMPLE`. The resulting
|
|
1538
|
+
// `ASN1_SEQUENCE_ANY` owns its contents and thus must be released with
|
|
1539
|
+
// `sk_ASN1_TYPE_pop_free` and `ASN1_TYPE_free`, not `sk_ASN1_TYPE_free`.
|
|
1552
1540
|
//
|
|
1553
1541
|
// TODO(https://crbug.com/boringssl/354): This function currently also accepts
|
|
1554
1542
|
// BER, but this will be removed in the future.
|
|
@@ -1556,15 +1544,15 @@ OPENSSL_EXPORT ASN1_SEQUENCE_ANY *d2i_ASN1_SEQUENCE_ANY(ASN1_SEQUENCE_ANY **out,
|
|
|
1556
1544
|
const uint8_t **inp,
|
|
1557
1545
|
long len);
|
|
1558
1546
|
|
|
1559
|
-
// i2d_ASN1_SEQUENCE_ANY marshals
|
|
1560
|
-
// structure, as described in
|
|
1547
|
+
// i2d_ASN1_SEQUENCE_ANY marshals `in` as a DER-encoded SEQUENCE OF ANY
|
|
1548
|
+
// structure, as described in `i2d_SAMPLE`.
|
|
1561
1549
|
OPENSSL_EXPORT int i2d_ASN1_SEQUENCE_ANY(const ASN1_SEQUENCE_ANY *in,
|
|
1562
1550
|
uint8_t **outp);
|
|
1563
1551
|
|
|
1564
|
-
// d2i_ASN1_SET_ANY parses up to
|
|
1565
|
-
// SET OF ANY structure, as described in
|
|
1566
|
-
//
|
|
1567
|
-
//
|
|
1552
|
+
// d2i_ASN1_SET_ANY parses up to `len` bytes from `*inp` as a DER-encoded ASN.1
|
|
1553
|
+
// SET OF ANY structure, as described in `d2i_SAMPLE`. The resulting
|
|
1554
|
+
// `ASN1_SEQUENCE_ANY` owns its contents and thus must be released with
|
|
1555
|
+
// `sk_ASN1_TYPE_pop_free` and `ASN1_TYPE_free`, not `sk_ASN1_TYPE_free`.
|
|
1568
1556
|
//
|
|
1569
1557
|
// TODO(https://crbug.com/boringssl/354): This function currently also accepts
|
|
1570
1558
|
// BER, but this will be removed in the future.
|
|
@@ -1572,8 +1560,8 @@ OPENSSL_EXPORT ASN1_SEQUENCE_ANY *d2i_ASN1_SET_ANY(ASN1_SEQUENCE_ANY **out,
|
|
|
1572
1560
|
const uint8_t **inp,
|
|
1573
1561
|
long len);
|
|
1574
1562
|
|
|
1575
|
-
// i2d_ASN1_SET_ANY marshals
|
|
1576
|
-
// described in
|
|
1563
|
+
// i2d_ASN1_SET_ANY marshals `in` as a DER-encoded SET OF ANY structure, as
|
|
1564
|
+
// described in `i2d_SAMPLE`.
|
|
1577
1565
|
OPENSSL_EXPORT int i2d_ASN1_SET_ANY(const ASN1_SEQUENCE_ANY *in,
|
|
1578
1566
|
uint8_t **outp);
|
|
1579
1567
|
|
|
@@ -1584,25 +1572,25 @@ OPENSSL_EXPORT int i2d_ASN1_SET_ANY(const ASN1_SEQUENCE_ANY *in,
|
|
|
1584
1572
|
// functions may be used for debugging and logging. However, the output should
|
|
1585
1573
|
// not be consumed programmatically. They may be ambiguous or lose information.
|
|
1586
1574
|
|
|
1587
|
-
// ASN1_UTCTIME_print writes a human-readable representation of
|
|
1575
|
+
// ASN1_UTCTIME_print writes a human-readable representation of `a` to `out`. It
|
|
1588
1576
|
// returns one on success and zero on error.
|
|
1589
1577
|
OPENSSL_EXPORT int ASN1_UTCTIME_print(BIO *out, const ASN1_UTCTIME *a);
|
|
1590
1578
|
|
|
1591
|
-
// ASN1_GENERALIZEDTIME_print writes a human-readable representation of
|
|
1592
|
-
//
|
|
1579
|
+
// ASN1_GENERALIZEDTIME_print writes a human-readable representation of `a` to
|
|
1580
|
+
// `out`. It returns one on success and zero on error.
|
|
1593
1581
|
OPENSSL_EXPORT int ASN1_GENERALIZEDTIME_print(BIO *out,
|
|
1594
1582
|
const ASN1_GENERALIZEDTIME *a);
|
|
1595
1583
|
|
|
1596
|
-
// ASN1_TIME_print writes a human-readable representation of
|
|
1584
|
+
// ASN1_TIME_print writes a human-readable representation of `a` to `out`. It
|
|
1597
1585
|
// returns one on success and zero on error.
|
|
1598
1586
|
OPENSSL_EXPORT int ASN1_TIME_print(BIO *out, const ASN1_TIME *a);
|
|
1599
1587
|
|
|
1600
|
-
// ASN1_STRING_print writes a human-readable representation of
|
|
1588
|
+
// ASN1_STRING_print writes a human-readable representation of `str` to `out`.
|
|
1601
1589
|
// It returns one on success and zero on error. Unprintable characters are
|
|
1602
1590
|
// replaced with '.'.
|
|
1603
1591
|
OPENSSL_EXPORT int ASN1_STRING_print(BIO *out, const ASN1_STRING *str);
|
|
1604
1592
|
|
|
1605
|
-
// The following flags must not collide with
|
|
1593
|
+
// The following flags must not collide with `XN_FLAG_*`.
|
|
1606
1594
|
|
|
1607
1595
|
// ASN1_STRFLGS_ESC_2253 causes characters to be escaped as in RFC 2253, section
|
|
1608
1596
|
// 2.4.
|
|
@@ -1623,12 +1611,12 @@ OPENSSL_EXPORT int ASN1_STRING_print(BIO *out, const ASN1_STRING *str);
|
|
|
1623
1611
|
// byte in the UTF-8 encoding treated as an individual character for purposes of
|
|
1624
1612
|
// escape sequences. If not set, each Unicode codepoint in the string is treated
|
|
1625
1613
|
// as a character, with wide characters escaped as "\Uxxxx" or "\Wxxxxxxxx".
|
|
1626
|
-
// Note this can be ambiguous if
|
|
1614
|
+
// Note this can be ambiguous if `ASN1_STRFLGS_ESC_*` are all unset. In that
|
|
1627
1615
|
// case, backslashes are not escaped, but wide characters are.
|
|
1628
1616
|
#define ASN1_STRFLGS_UTF8_CONVERT 0x10ul
|
|
1629
1617
|
|
|
1630
1618
|
// ASN1_STRFLGS_IGNORE_TYPE causes the string type to be ignored. The
|
|
1631
|
-
//
|
|
1619
|
+
// `ASN1_STRING` in-memory representation will be printed directly.
|
|
1632
1620
|
#define ASN1_STRFLGS_IGNORE_TYPE 0x20ul
|
|
1633
1621
|
|
|
1634
1622
|
// ASN1_STRFLGS_SHOW_TYPE causes the string type to be included in the output.
|
|
@@ -1638,15 +1626,15 @@ OPENSSL_EXPORT int ASN1_STRING_print(BIO *out, const ASN1_STRING *str);
|
|
|
1638
1626
|
// RFC 2253 hexstring notation, such as "#0123456789ABCDEF".
|
|
1639
1627
|
#define ASN1_STRFLGS_DUMP_ALL 0x80ul
|
|
1640
1628
|
|
|
1641
|
-
// ASN1_STRFLGS_DUMP_UNKNOWN behaves like
|
|
1629
|
+
// ASN1_STRFLGS_DUMP_UNKNOWN behaves like `ASN1_STRFLGS_DUMP_ALL` but only
|
|
1642
1630
|
// applies to values of unknown type. If unset, unknown values will print
|
|
1643
1631
|
// their contents as single-byte characters with escape sequences.
|
|
1644
1632
|
#define ASN1_STRFLGS_DUMP_UNKNOWN 0x100ul
|
|
1645
1633
|
|
|
1646
1634
|
// ASN1_STRFLGS_DUMP_DER causes hexdumped strings (as determined by
|
|
1647
|
-
//
|
|
1635
|
+
// `ASN1_STRFLGS_DUMP_ALL` or `ASN1_STRFLGS_DUMP_UNKNOWN`) to print the entire
|
|
1648
1636
|
// DER element as in RFC 2253, rather than only the contents of the
|
|
1649
|
-
//
|
|
1637
|
+
// `ASN1_STRING`.
|
|
1650
1638
|
#define ASN1_STRFLGS_DUMP_DER 0x200ul
|
|
1651
1639
|
|
|
1652
1640
|
// ASN1_STRFLGS_RFC2253 causes the string to be escaped as in RFC 2253,
|
|
@@ -1656,103 +1644,103 @@ OPENSSL_EXPORT int ASN1_STRING_print(BIO *out, const ASN1_STRING *str);
|
|
|
1656
1644
|
ASN1_STRFLGS_UTF8_CONVERT | ASN1_STRFLGS_DUMP_UNKNOWN | \
|
|
1657
1645
|
ASN1_STRFLGS_DUMP_DER)
|
|
1658
1646
|
|
|
1659
|
-
// ASN1_STRING_print_ex writes a human-readable representation of
|
|
1660
|
-
//
|
|
1661
|
-
//
|
|
1647
|
+
// ASN1_STRING_print_ex writes a human-readable representation of `str` to
|
|
1648
|
+
// `out`. It returns the number of bytes written on success and -1 on error. If
|
|
1649
|
+
// `out` is NULL, it returns the number of bytes it would have written, without
|
|
1662
1650
|
// writing anything.
|
|
1663
1651
|
//
|
|
1664
|
-
// The
|
|
1652
|
+
// The `flags` should be a combination of combination of `ASN1_STRFLGS_*`
|
|
1665
1653
|
// constants. See the documentation for each flag for how it controls the
|
|
1666
|
-
// output. If unsure, use
|
|
1654
|
+
// output. If unsure, use `ASN1_STRFLGS_RFC2253`.
|
|
1667
1655
|
OPENSSL_EXPORT int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str,
|
|
1668
1656
|
unsigned long flags);
|
|
1669
1657
|
|
|
1670
|
-
// ASN1_STRING_print_ex_fp behaves like
|
|
1671
|
-
//
|
|
1658
|
+
// ASN1_STRING_print_ex_fp behaves like `ASN1_STRING_print_ex` but writes to a
|
|
1659
|
+
// `FILE` rather than a `BIO`.
|
|
1672
1660
|
OPENSSL_EXPORT int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str,
|
|
1673
1661
|
unsigned long flags);
|
|
1674
1662
|
|
|
1675
|
-
// i2a_ASN1_INTEGER writes a human-readable representation of
|
|
1663
|
+
// i2a_ASN1_INTEGER writes a human-readable representation of `a` to `bp`. It
|
|
1676
1664
|
// returns the number of bytes written on success, or a negative number on
|
|
1677
|
-
// error. On error, this function may have written a partial output to
|
|
1665
|
+
// error. On error, this function may have written a partial output to `bp`.
|
|
1678
1666
|
OPENSSL_EXPORT int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a);
|
|
1679
1667
|
|
|
1680
|
-
// i2a_ASN1_ENUMERATED writes a human-readable representation of
|
|
1668
|
+
// i2a_ASN1_ENUMERATED writes a human-readable representation of `a` to `bp`. It
|
|
1681
1669
|
// returns the number of bytes written on success, or a negative number on
|
|
1682
|
-
// error. On error, this function may have written a partial output to
|
|
1670
|
+
// error. On error, this function may have written a partial output to `bp`.
|
|
1683
1671
|
OPENSSL_EXPORT int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a);
|
|
1684
1672
|
|
|
1685
|
-
// i2a_ASN1_OBJECT writes a human-readable representation of
|
|
1673
|
+
// i2a_ASN1_OBJECT writes a human-readable representation of `a` to `bp`. It
|
|
1686
1674
|
// returns the number of bytes written on success, or a negative number on
|
|
1687
|
-
// error. On error, this function may have written a partial output to
|
|
1675
|
+
// error. On error, this function may have written a partial output to `bp`.
|
|
1688
1676
|
OPENSSL_EXPORT int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a);
|
|
1689
1677
|
|
|
1690
|
-
// i2a_ASN1_STRING writes a text representation of
|
|
1678
|
+
// i2a_ASN1_STRING writes a text representation of `a`'s contents to `bp`. It
|
|
1691
1679
|
// returns the number of bytes written on success, or a negative number on
|
|
1692
|
-
// error. On error, this function may have written a partial output to
|
|
1693
|
-
//
|
|
1680
|
+
// error. On error, this function may have written a partial output to `bp`.
|
|
1681
|
+
// `type` is ignored.
|
|
1694
1682
|
//
|
|
1695
|
-
// This function does not decode
|
|
1696
|
-
// the internal representation of
|
|
1683
|
+
// This function does not decode `a` into a Unicode string. It only hex-encodes
|
|
1684
|
+
// the internal representation of `a`. This is suitable for printing an OCTET
|
|
1697
1685
|
// STRING, but may not be human-readable for any other string type.
|
|
1698
1686
|
OPENSSL_EXPORT int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type);
|
|
1699
1687
|
|
|
1700
|
-
// i2t_ASN1_OBJECT calls
|
|
1688
|
+
// i2t_ASN1_OBJECT calls `OBJ_obj2txt` with `always_return_oid` set to zero.
|
|
1701
1689
|
OPENSSL_EXPORT int i2t_ASN1_OBJECT(char *buf, int buf_len,
|
|
1702
1690
|
const ASN1_OBJECT *a);
|
|
1703
1691
|
|
|
1704
1692
|
|
|
1705
1693
|
// Low-level encoding functions.
|
|
1706
1694
|
|
|
1707
|
-
// ASN1_get_object parses a BER element from up to
|
|
1708
|
-
// returns
|
|
1695
|
+
// ASN1_get_object parses a BER element from up to `max_len` bytes at `*inp`. It
|
|
1696
|
+
// returns `V_ASN1_CONSTRUCTED` if it successfully parsed a constructed element,
|
|
1709
1697
|
// zero if it successfully parsed a primitive element, and 0x80 on error. On
|
|
1710
|
-
// success, it additionally advances
|
|
1711
|
-
//
|
|
1698
|
+
// success, it additionally advances `*inp` to the element body, sets
|
|
1699
|
+
// `*out_length`, `*out_tag`, and `*out_class` to the element's length, tag
|
|
1712
1700
|
// number, and tag class, respectively,
|
|
1713
1701
|
//
|
|
1714
1702
|
// Unlike OpenSSL, this function only supports DER. Indefinite and non-minimal
|
|
1715
1703
|
// lengths are rejected.
|
|
1716
1704
|
//
|
|
1717
|
-
// This function is difficult to use correctly. Use
|
|
1705
|
+
// This function is difficult to use correctly. Use `CBS_get_asn1` and related
|
|
1718
1706
|
// functions from bytestring.h.
|
|
1719
1707
|
OPENSSL_EXPORT int ASN1_get_object(const unsigned char **inp, long *out_length,
|
|
1720
1708
|
int *out_tag, int *out_class, long max_len);
|
|
1721
1709
|
|
|
1722
|
-
// ASN1_put_object writes the header for a DER or BER element to
|
|
1723
|
-
// advances
|
|
1724
|
-
// for ensuring
|
|
1725
|
-
// element with length
|
|
1726
|
-
// should be one of the
|
|
1727
|
-
// if
|
|
1728
|
-
//
|
|
1710
|
+
// ASN1_put_object writes the header for a DER or BER element to `*outp` and
|
|
1711
|
+
// advances `*outp` by the number of bytes written. The caller is responsible
|
|
1712
|
+
// for ensuring `*outp` has enough space for the output. The header describes an
|
|
1713
|
+
// element with length `length`, tag number `tag`, and class `xclass`. `xclass`
|
|
1714
|
+
// should be one of the `V_ASN1_*` tag class constants. The element is primitive
|
|
1715
|
+
// if `constructed` is zero and constructed if it is one or two. If
|
|
1716
|
+
// `constructed` is two, `length` is ignored and the element uses
|
|
1729
1717
|
// indefinite-length encoding.
|
|
1730
1718
|
//
|
|
1731
|
-
// Use
|
|
1719
|
+
// Use `CBB_add_asn1` instead.
|
|
1732
1720
|
OPENSSL_EXPORT void ASN1_put_object(unsigned char **outp, int constructed,
|
|
1733
1721
|
int length, int tag, int xclass);
|
|
1734
1722
|
|
|
1735
|
-
// ASN1_put_eoc writes two zero bytes to
|
|
1723
|
+
// ASN1_put_eoc writes two zero bytes to `*outp`, advances `*outp` to point past
|
|
1736
1724
|
// those bytes, and returns two.
|
|
1737
1725
|
//
|
|
1738
1726
|
// Use definite-length encoding instead.
|
|
1739
1727
|
OPENSSL_EXPORT int ASN1_put_eoc(unsigned char **outp);
|
|
1740
1728
|
|
|
1741
1729
|
// ASN1_object_size returns the number of bytes needed to encode a DER or BER
|
|
1742
|
-
// value with length
|
|
1743
|
-
// not include the constructed bit or tag class. If
|
|
1730
|
+
// value with length `length` and tag number `tag`, or -1 on error. `tag` should
|
|
1731
|
+
// not include the constructed bit or tag class. If `constructed` is zero or
|
|
1744
1732
|
// one, the result uses a definite-length encoding with minimally-encoded
|
|
1745
|
-
// length, as in DER. If
|
|
1733
|
+
// length, as in DER. If `constructed` is two, the result uses BER
|
|
1746
1734
|
// indefinite-length encoding.
|
|
1747
1735
|
//
|
|
1748
|
-
// Use
|
|
1736
|
+
// Use `CBB_add_asn1` instead.
|
|
1749
1737
|
OPENSSL_EXPORT int ASN1_object_size(int constructed, int length, int tag);
|
|
1750
1738
|
|
|
1751
1739
|
|
|
1752
1740
|
// Function declaration macros.
|
|
1753
1741
|
//
|
|
1754
1742
|
// The following macros declare functions for ASN.1 types. Prefer writing the
|
|
1755
|
-
// prototypes directly. Particularly when
|
|
1743
|
+
// prototypes directly. Particularly when `type`, `itname`, or `name` differ,
|
|
1756
1744
|
// the macros can be difficult to understand.
|
|
1757
1745
|
|
|
1758
1746
|
#define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type)
|
|
@@ -1791,19 +1779,41 @@ OPENSSL_EXPORT int ASN1_object_size(int constructed, int length, int tag);
|
|
|
1791
1779
|
|
|
1792
1780
|
// Deprecated functions.
|
|
1793
1781
|
|
|
1782
|
+
// ASN1_STRING_FLAG_BITS_LEFT does nothing. Historically, when a BIT STRING
|
|
1783
|
+
// lacked this flag, it enabled an implicit truncation behavior. This has since
|
|
1784
|
+
// been removed.
|
|
1785
|
+
//
|
|
1786
|
+
// TODO(crbug.com/443769299): Remove this when `ASN1_STRING` is opaque. For now,
|
|
1787
|
+
// we continue to set it in various codepaths, in case code is querying `flags`
|
|
1788
|
+
// manually, even though it does nothing.
|
|
1789
|
+
#define ASN1_STRING_FLAG_BITS_LEFT 0x08
|
|
1790
|
+
|
|
1791
|
+
// ASN1_BIT_STRING_num_bytes computes the length of `str` in bytes. If `str`'s
|
|
1792
|
+
// bit length is a multiple of 8, it sets `*out` to the byte length and returns
|
|
1793
|
+
// one. Otherwise, it returns zero.
|
|
1794
|
+
//
|
|
1795
|
+
// This function may be used with `ASN1_STRING_get0_data` to interpret `str` as
|
|
1796
|
+
// a byte string.
|
|
1797
|
+
//
|
|
1798
|
+
// This function is no longer necessary. The byte length is always equal to
|
|
1799
|
+
// `ASN1_STRING_length` and callers can check for a whole number of bytes by
|
|
1800
|
+
// checking if `ASN1_BIT_STRING_unused_bits` is zero.
|
|
1801
|
+
OPENSSL_EXPORT int ASN1_BIT_STRING_num_bytes(const ASN1_BIT_STRING *str,
|
|
1802
|
+
size_t *out);
|
|
1803
|
+
|
|
1794
1804
|
// ASN1_STRING_set_default_mask does nothing.
|
|
1795
1805
|
OPENSSL_EXPORT void ASN1_STRING_set_default_mask(unsigned long mask);
|
|
1796
1806
|
|
|
1797
1807
|
// ASN1_STRING_set_default_mask_asc returns one.
|
|
1798
1808
|
OPENSSL_EXPORT int ASN1_STRING_set_default_mask_asc(const char *p);
|
|
1799
1809
|
|
|
1800
|
-
// ASN1_STRING_get_default_mask returns
|
|
1810
|
+
// ASN1_STRING_get_default_mask returns `B_ASN1_UTF8STRING`.
|
|
1801
1811
|
OPENSSL_EXPORT unsigned long ASN1_STRING_get_default_mask(void);
|
|
1802
1812
|
|
|
1803
1813
|
// ASN1_STRING_TABLE_cleanup does nothing.
|
|
1804
1814
|
OPENSSL_EXPORT void ASN1_STRING_TABLE_cleanup(void);
|
|
1805
1815
|
|
|
1806
|
-
// M_ASN1_* are legacy aliases for various
|
|
1816
|
+
// M_ASN1_* are legacy aliases for various `ASN1_STRING` functions. Use the
|
|
1807
1817
|
// functions themselves.
|
|
1808
1818
|
#define M_ASN1_STRING_length(x) ASN1_STRING_length(x)
|
|
1809
1819
|
#define M_ASN1_STRING_type(x) ASN1_STRING_type(x)
|
|
@@ -1851,30 +1861,30 @@ OPENSSL_EXPORT void ASN1_STRING_TABLE_cleanup(void);
|
|
|
1851
1861
|
#define M_ASN1_UTF8STRING_new() ASN1_UTF8STRING_new()
|
|
1852
1862
|
#define M_ASN1_UTF8STRING_free(a) ASN1_UTF8STRING_free(a)
|
|
1853
1863
|
|
|
1854
|
-
// ASN1_INTEGER_set sets
|
|
1864
|
+
// ASN1_INTEGER_set sets `a` to an INTEGER with value `v`. It returns one on
|
|
1855
1865
|
// success and zero on error.
|
|
1856
1866
|
//
|
|
1857
|
-
// Use
|
|
1867
|
+
// Use `ASN1_INTEGER_set_uint64` and `ASN1_INTEGER_set_int64` instead.
|
|
1858
1868
|
OPENSSL_EXPORT int ASN1_INTEGER_set(ASN1_INTEGER *a, long v);
|
|
1859
1869
|
|
|
1860
|
-
// ASN1_ENUMERATED_set sets
|
|
1870
|
+
// ASN1_ENUMERATED_set sets `a` to an ENUMERATED with value `v`. It returns one
|
|
1861
1871
|
// on success and zero on error.
|
|
1862
1872
|
//
|
|
1863
|
-
// Use
|
|
1873
|
+
// Use `ASN1_ENUMERATED_set_uint64` and `ASN1_ENUMERATED_set_int64` instead.
|
|
1864
1874
|
OPENSSL_EXPORT int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);
|
|
1865
1875
|
|
|
1866
|
-
// ASN1_INTEGER_get returns the value of
|
|
1876
|
+
// ASN1_INTEGER_get returns the value of `a` as a `long`, or -1 if `a` is out of
|
|
1867
1877
|
// range or the wrong type.
|
|
1868
1878
|
//
|
|
1869
1879
|
// WARNING: This function's return value cannot distinguish errors from -1.
|
|
1870
|
-
// Use
|
|
1880
|
+
// Use `ASN1_INTEGER_get_uint64` and `ASN1_INTEGER_get_int64` instead.
|
|
1871
1881
|
OPENSSL_EXPORT long ASN1_INTEGER_get(const ASN1_INTEGER *a);
|
|
1872
1882
|
|
|
1873
|
-
// ASN1_ENUMERATED_get returns the value of
|
|
1883
|
+
// ASN1_ENUMERATED_get returns the value of `a` as a `long`, or -1 if `a` is out
|
|
1874
1884
|
// of range or the wrong type.
|
|
1875
1885
|
//
|
|
1876
1886
|
// WARNING: This function's return value cannot distinguish errors from -1.
|
|
1877
|
-
// Use
|
|
1887
|
+
// Use `ASN1_ENUMERATED_get_uint64` and `ASN1_ENUMERATED_get_int64` instead.
|
|
1878
1888
|
OPENSSL_EXPORT long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a);
|
|
1879
1889
|
|
|
1880
1890
|
|