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
|
@@ -15,15 +15,12 @@
|
|
|
15
15
|
#ifndef OPENSSL_HEADER_EVP_H
|
|
16
16
|
#define OPENSSL_HEADER_EVP_H
|
|
17
17
|
|
|
18
|
-
#include <openssl/base.h>
|
|
18
|
+
#include <openssl/base.h> // IWYU pragma: export
|
|
19
19
|
|
|
20
20
|
#include <openssl/evp_errors.h> // IWYU pragma: export
|
|
21
|
-
#include <openssl/thread.h>
|
|
22
21
|
|
|
23
22
|
// OpenSSL included digest and cipher functions in this header so we include
|
|
24
23
|
// them for users that still expect that.
|
|
25
|
-
//
|
|
26
|
-
// TODO(fork): clean up callers so that they include what they use.
|
|
27
24
|
#include <openssl/aead.h>
|
|
28
25
|
#include <openssl/base64.h>
|
|
29
26
|
#include <openssl/cipher.h>
|
|
@@ -38,77 +35,263 @@ extern "C" {
|
|
|
38
35
|
// EVP abstracts over public/private key algorithms.
|
|
39
36
|
|
|
40
37
|
|
|
41
|
-
// Public key objects.
|
|
38
|
+
// Public/private key objects.
|
|
42
39
|
//
|
|
43
|
-
// An
|
|
40
|
+
// An `EVP_PKEY` object represents a public or private key. A given object may
|
|
44
41
|
// be used concurrently on multiple threads by non-mutating functions, provided
|
|
45
42
|
// no other thread is concurrently calling a mutating function. Unless otherwise
|
|
46
|
-
// documented, functions which take a
|
|
47
|
-
// functions which take a non
|
|
43
|
+
// documented, functions which take a `const` pointer are non-mutating and
|
|
44
|
+
// functions which take a non-`const` pointer are mutating.
|
|
48
45
|
|
|
49
46
|
// EVP_PKEY_new creates a new, empty public-key object and returns it or NULL
|
|
50
47
|
// on allocation failure.
|
|
51
48
|
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new(void);
|
|
52
49
|
|
|
53
|
-
// EVP_PKEY_free
|
|
54
|
-
//
|
|
50
|
+
// EVP_PKEY_free decrements the reference count of `pkey` and frees it if the
|
|
51
|
+
// reference count drops to zero.
|
|
55
52
|
OPENSSL_EXPORT void EVP_PKEY_free(EVP_PKEY *pkey);
|
|
56
53
|
|
|
57
|
-
// EVP_PKEY_up_ref increments the reference count of
|
|
58
|
-
// does not mutate
|
|
54
|
+
// EVP_PKEY_up_ref increments the reference count of `pkey` and returns one. It
|
|
55
|
+
// does not mutate `pkey` for thread-safety purposes and may be used
|
|
59
56
|
// concurrently.
|
|
60
57
|
OPENSSL_EXPORT int EVP_PKEY_up_ref(EVP_PKEY *pkey);
|
|
61
58
|
|
|
62
|
-
//
|
|
59
|
+
// EVP_PKEY_dup_ref increments the reference count of `pkey` and returns `pkey`.
|
|
60
|
+
// The caller must call `EVP_PKEY_free` on the result to release the reference.
|
|
61
|
+
//
|
|
62
|
+
// WARNING: Although the result is non-const for use with `EVP_PKEY_free`, it is
|
|
63
|
+
// still shared with other parts of the application that share the same object.
|
|
64
|
+
// Avoid mutating shared `EVP_PKEY`s.
|
|
65
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_dup_ref(const EVP_PKEY *pkey);
|
|
66
|
+
|
|
67
|
+
// EVP_PKEY_is_opaque returns one if `pkey` is opaque. Opaque keys are backed by
|
|
63
68
|
// custom implementations which do not expose key material and parameters. It is
|
|
64
69
|
// an error to attempt to duplicate, export, or compare an opaque key.
|
|
65
70
|
OPENSSL_EXPORT int EVP_PKEY_is_opaque(const EVP_PKEY *pkey);
|
|
66
71
|
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
// WARNING: this differs from the traditional return value of a "cmp"
|
|
71
|
-
// function.
|
|
72
|
-
OPENSSL_EXPORT int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
|
|
72
|
+
// EVP_PKEY_eq compares `a` and `b` and returns one if their public keys are
|
|
73
|
+
// equal and zero otherwise.
|
|
74
|
+
OPENSSL_EXPORT int EVP_PKEY_eq(const EVP_PKEY *a, const EVP_PKEY *b);
|
|
73
75
|
|
|
74
|
-
// EVP_PKEY_copy_parameters sets the parameters of
|
|
75
|
-
// of
|
|
76
|
+
// EVP_PKEY_copy_parameters sets the parameters of `to` to equal the parameters
|
|
77
|
+
// of `from`. It returns one on success and zero on error.
|
|
76
78
|
OPENSSL_EXPORT int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
|
|
77
79
|
|
|
78
|
-
// EVP_PKEY_missing_parameters returns one if
|
|
80
|
+
// EVP_PKEY_missing_parameters returns one if `pkey` is missing needed
|
|
79
81
|
// parameters or zero if not, or if the algorithm doesn't take parameters.
|
|
80
82
|
OPENSSL_EXPORT int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
|
|
81
83
|
|
|
84
|
+
// EVP_PKEY_parameters_eq compares the parameters of `a` and `b`. It returns one
|
|
85
|
+
// if they match and zero otherwise. In algorithms that do not use parameters,
|
|
86
|
+
// this function returns one; null parameters are vacuously equal.
|
|
87
|
+
OPENSSL_EXPORT int EVP_PKEY_parameters_eq(const EVP_PKEY *a, const EVP_PKEY *b);
|
|
88
|
+
|
|
82
89
|
// EVP_PKEY_size returns the maximum size, in bytes, of a signature signed by
|
|
83
|
-
//
|
|
90
|
+
// `pkey`. For an RSA key, this returns the number of bytes needed to represent
|
|
84
91
|
// the modulus. For an EC key, this returns the maximum size of a DER-encoded
|
|
85
92
|
// ECDSA signature.
|
|
86
93
|
OPENSSL_EXPORT int EVP_PKEY_size(const EVP_PKEY *pkey);
|
|
87
94
|
|
|
88
|
-
// EVP_PKEY_bits returns the "size", in bits, of
|
|
95
|
+
// EVP_PKEY_bits returns the "size", in bits, of `pkey`. For an RSA key, this
|
|
89
96
|
// returns the bit length of the modulus. For an EC key, this returns the bit
|
|
90
97
|
// length of the group order.
|
|
91
98
|
OPENSSL_EXPORT int EVP_PKEY_bits(const EVP_PKEY *pkey);
|
|
92
99
|
|
|
93
|
-
//
|
|
94
|
-
//
|
|
100
|
+
// EVP_PKEY_has_public returns one if `pkey` has a public key, or zero
|
|
101
|
+
// otherwise.
|
|
102
|
+
OPENSSL_EXPORT int EVP_PKEY_has_public(const EVP_PKEY *pkey);
|
|
103
|
+
|
|
104
|
+
// EVP_PKEY_has_private returns one if `pkey` has a private key, or zero
|
|
105
|
+
// otherwise.
|
|
106
|
+
OPENSSL_EXPORT int EVP_PKEY_has_private(const EVP_PKEY *pkey);
|
|
107
|
+
|
|
108
|
+
// EVP_PKEY_copy_public returns a newly-allocated `EVP_PKEY` that contains only
|
|
109
|
+
// the public key of `pkey`, or NULL on error. Parameters, if relevant for the
|
|
110
|
+
// key type, are also copied.
|
|
111
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_copy_public(const EVP_PKEY *pkey);
|
|
112
|
+
|
|
113
|
+
// The following constants are returned by `EVP_PKEY_id` and specify the type of
|
|
114
|
+
// key.
|
|
115
|
+
#define EVP_PKEY_NONE NID_undef
|
|
116
|
+
#define EVP_PKEY_RSA NID_rsaEncryption
|
|
117
|
+
#define EVP_PKEY_RSA_PSS NID_rsassaPss
|
|
118
|
+
#define EVP_PKEY_DSA NID_dsa
|
|
119
|
+
#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
|
|
120
|
+
#define EVP_PKEY_ED25519 NID_ED25519
|
|
121
|
+
#define EVP_PKEY_X25519 NID_X25519
|
|
122
|
+
#define EVP_PKEY_HKDF NID_hkdf
|
|
123
|
+
#define EVP_PKEY_DH NID_dhKeyAgreement
|
|
124
|
+
#define EVP_PKEY_ML_DSA_44 NID_ML_DSA_44
|
|
125
|
+
#define EVP_PKEY_ML_DSA_65 NID_ML_DSA_65
|
|
126
|
+
#define EVP_PKEY_ML_DSA_87 NID_ML_DSA_87
|
|
127
|
+
#define EVP_PKEY_ML_KEM_768 NID_ML_KEM_768
|
|
128
|
+
#define EVP_PKEY_ML_KEM_1024 NID_ML_KEM_1024
|
|
129
|
+
#define EVP_PKEY_XWING NID_X_Wing
|
|
130
|
+
|
|
131
|
+
// EVP_PKEY_id returns the type of `pkey`, which is one of the `EVP_PKEY_*`
|
|
132
|
+
// values above. These type values generally correspond to the algorithm OID,
|
|
133
|
+
// but not the parameters, of a SubjectPublicKeyInfo (RFC 5280) or
|
|
134
|
+
// PrivateKeyInfo (RFC 5208) AlgorithmIdentifier. Algorithm parameters can be
|
|
135
|
+
// inspected with algorithm-specific accessors, e.g.
|
|
136
|
+
// `EVP_PKEY_get_ec_curve_nid`.
|
|
95
137
|
OPENSSL_EXPORT int EVP_PKEY_id(const EVP_PKEY *pkey);
|
|
96
138
|
|
|
97
139
|
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
140
|
+
// Algorithms.
|
|
141
|
+
//
|
|
142
|
+
// An `EVP_PKEY` may carry a key from one of several algorithms, represented by
|
|
143
|
+
// `EVP_PKEY_ALG`. `EVP_PKEY_ALG`s are used by functions that construct
|
|
144
|
+
// `EVP_PKEY`s, such as parsing, so that callers can specify the algorithm(s) to
|
|
145
|
+
// use.
|
|
146
|
+
//
|
|
147
|
+
// Each `EVP_PKEY_ALG` generally corresponds to the AlgorithmIdentifier of a
|
|
148
|
+
// SubjectPublicKeyInfo (RFC 5280) or PrivateKeyInfo (RFC 5208), but some may
|
|
149
|
+
// support multiple sets of AlgorithmIdentifier parameters, while others may be
|
|
150
|
+
// specific to one parameter.
|
|
151
|
+
|
|
152
|
+
// EVP_pkey_rsa implements RSA keys (RFC 8017), encoded as rsaEncryption (RFC
|
|
153
|
+
// 3279, Section 2.3.1). The rsaEncryption encoding is confusingly named: these
|
|
154
|
+
// keys are used for all RSA operations, including signing. The `EVP_PKEY_id`
|
|
155
|
+
// value is `EVP_PKEY_RSA`.
|
|
156
|
+
//
|
|
157
|
+
// WARNING: This `EVP_PKEY_ALG` accepts all RSA key sizes supported by
|
|
158
|
+
// BoringSSL. When parsing RSA keys, callers should check the size is within
|
|
159
|
+
// their desired bounds with `EVP_PKEY_bits`. RSA public key operations scale
|
|
160
|
+
// quadratically and RSA private key operations scale cubicly, so key sizes may
|
|
161
|
+
// be a DoS vector.
|
|
162
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_rsa(void);
|
|
163
|
+
|
|
164
|
+
// EVP_pkey_ec_* implement EC keys, encoded as id-ecPublicKey (RFC 5480,
|
|
165
|
+
// Section 2.1.1). The id-ecPublicKey encoding is confusingly named: it is also
|
|
166
|
+
// used for private keys (RFC 5915). The `EVP_PKEY_id` value is `EVP_PKEY_EC`.
|
|
167
|
+
//
|
|
168
|
+
// Each function only supports the specified curve, but curves are not reflected
|
|
169
|
+
// in `EVP_PKEY_id`. The curve can be inspected with
|
|
170
|
+
// `EVP_PKEY_get_ec_curve_nid`.
|
|
171
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ec_p224(void);
|
|
172
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ec_p256(void);
|
|
173
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ec_p384(void);
|
|
174
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ec_p521(void);
|
|
175
|
+
|
|
176
|
+
// EVP_pkey_x25519 implements X25519 keys (RFC 7748), encoded as in RFC 8410.
|
|
177
|
+
// The `EVP_PKEY_id` value is `EVP_PKEY_X25519`.
|
|
178
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_x25519(void);
|
|
179
|
+
|
|
180
|
+
// EVP_pkey_ed25519 implements Ed25519 keys (RFC 8032), encoded as in RFC 8410.
|
|
181
|
+
// The `EVP_PKEY_id` value is `EVP_PKEY_ED25519`.
|
|
182
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ed25519(void);
|
|
183
|
+
|
|
184
|
+
// EVP_pkey_ml_dsa_* implement ML-DSA keys, encoded as in RFC 9881. The
|
|
185
|
+
// `EVP_PKEY_id` values are `EVP_PKEY_ML_DSA_*`. In the private key
|
|
186
|
+
// representation, only the "seed" form is serialized or parsed.
|
|
187
|
+
//
|
|
188
|
+
// To configure OpenSSL to output the standard "seed" form, configure the
|
|
189
|
+
// "ml-dsa.output_formats" provider parameter so that "seed-only" is first. This
|
|
190
|
+
// can be done programmatically with OpenSSL's
|
|
191
|
+
// `OSSL_PROVIDER_add_conf_parameter` function, or by passing "-provparam" to
|
|
192
|
+
// the command-line tool.
|
|
193
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ml_dsa_44(void);
|
|
194
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ml_dsa_65(void);
|
|
195
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ml_dsa_87(void);
|
|
196
|
+
|
|
197
|
+
// EVP_pkey_ml_kem_* implement ML-KEM keys, encoded as in RFC 9935. The
|
|
198
|
+
// `EVP_PKEY_id` values are `EVP_PKEY_ML_KEM_*`. In the private key
|
|
199
|
+
// representation, only the "seed" form is serialized or parsed.
|
|
200
|
+
//
|
|
201
|
+
// To configure OpenSSL to output the standard "seed" form, configure the
|
|
202
|
+
// "ml-kem.output_formats" provider parameter so that "seed-only" is first. This
|
|
203
|
+
// can be done programmatically with OpenSSL's
|
|
204
|
+
// `OSSL_PROVIDER_add_conf_parameter` function, or by passing "-provparam" to
|
|
205
|
+
// the command-line tool.
|
|
206
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ml_kem_768(void);
|
|
207
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_ml_kem_1024(void);
|
|
208
|
+
|
|
209
|
+
// EVP_pkey_xwing implements the hybrid key encapsulation mechanism (KEM) known
|
|
210
|
+
// as X-Wing or MLKEM768-X25519, defined in
|
|
211
|
+
// draft-irtf-cfrg-concrete-hybrid-kems. Its private key representation is the
|
|
212
|
+
// "seed" form. It does not have public and private key encodings for X.509.
|
|
213
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_xwing(void);
|
|
214
|
+
|
|
215
|
+
// EVP_pkey_dsa implements DSA keys, encoded as in RFC 3279, Section 2.3.2. The
|
|
216
|
+
// `EVP_PKEY_id` value is `EVP_PKEY_DSA`. This `EVP_PKEY_ALG` accepts all DSA
|
|
217
|
+
// parameters supported by BoringSSL.
|
|
218
|
+
//
|
|
219
|
+
// Keys of this type are not usable with any operations, though the underlying
|
|
220
|
+
// `DSA` object can be extracted with `EVP_PKEY_get0_DSA`. This key type is
|
|
221
|
+
// deprecated and only implemented for compatibility with legacy applications.
|
|
222
|
+
//
|
|
223
|
+
// TODO(crbug.com/42290364): We didn't wire up `EVP_PKEY_sign` and
|
|
224
|
+
// `EVP_PKEY_verify` just so it was auditable which callers used DSA. Once DSA
|
|
225
|
+
// is removed from the default SPKI and PKCS#8 parser and DSA users explicitly
|
|
226
|
+
// request `EVP_pkey_dsa`, we could change that.
|
|
227
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_dsa(void);
|
|
228
|
+
|
|
229
|
+
// EVP_pkey_rsa_pss_* implements RSASSA-PSS keys, encoded as id-RSASSA-PSS
|
|
230
|
+
// (RFC 4055, Section 3.1). The `EVP_PKEY_id` value is `EVP_PKEY_RSA_PSS`. Each
|
|
231
|
+
// `EVP_PKEY_ALG` only accepts keys whose parameters specify:
|
|
232
|
+
//
|
|
233
|
+
// - A hashAlgorithm of the specified hash
|
|
234
|
+
// - A maskGenAlgorithm of MGF1 with the specified hash
|
|
235
|
+
// - A minimum saltLength of the specified hash's digest length
|
|
236
|
+
// - A trailerField of one (must be omitted in the encoding)
|
|
237
|
+
//
|
|
238
|
+
// Keys of this type will only be usable with RSASSA-PSS with matching signature
|
|
239
|
+
// parameters.
|
|
240
|
+
//
|
|
241
|
+
// This algorithm type is not recommended. The id-RSASSA-PSS key type is not
|
|
242
|
+
// widely implemented. Using it negates any compatibility benefits of using RSA.
|
|
243
|
+
// More modern algorithms like ECDSA are more performant and more compatible
|
|
244
|
+
// than id-RSASSA-PSS keys. This key type also adds significant complexity to a
|
|
245
|
+
// system. It has a wide range of possible parameter sets, so any uses must
|
|
246
|
+
// ensure all components not only support id-RSASSA-PSS, but also the specific
|
|
247
|
+
// parameters chosen.
|
|
248
|
+
//
|
|
249
|
+
// Note the id-RSASSA-PSS key type is distinct from the RSASSA-PSS signature
|
|
250
|
+
// algorithm. The widely implemented id-rsaEncryption key type (`EVP_pkey_rsa`
|
|
251
|
+
// and `EVP_PKEY_RSA`) also supports RSASSA-PSS signatures.
|
|
252
|
+
//
|
|
253
|
+
// WARNING: Any `EVP_PKEY`s produced by this algorithm will return a non-NULL
|
|
254
|
+
// `RSA` object through `EVP_PKEY_get1_RSA` and `EVP_PKEY_get0_RSA`. This is
|
|
255
|
+
// dangerous as existing code may assume a non-NULL return implies the more
|
|
256
|
+
// common id-rsaEncryption key. Additionally, the operations on the underlying
|
|
257
|
+
// `RSA` object will not capture the RSA-PSS constraints, so callers risk
|
|
258
|
+
// misusing the key by calling these functions. Callers using this algorithm
|
|
259
|
+
// must use `EVP_PKEY_id` to distinguish `EVP_PKEY_RSA` and `EVP_PKEY_RSA_PSS`.
|
|
260
|
+
//
|
|
261
|
+
// WARNING: BoringSSL does not currently implement `RSA_get0_pss_params` with
|
|
262
|
+
// these keys. Callers that require this functionality should contact the
|
|
263
|
+
// BoringSSL team.
|
|
264
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha256(void);
|
|
265
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha384(void);
|
|
266
|
+
OPENSSL_EXPORT const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha512(void);
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
// Getting and setting concrete key types.
|
|
270
|
+
//
|
|
271
|
+
// The following functions get and set the underlying key representation in an
|
|
272
|
+
// `EVP_PKEY` object. The `set1` functions take an additional reference to the
|
|
273
|
+
// underlying key and return one on success or zero if `key` is NULL. The
|
|
274
|
+
// `assign` functions adopt the caller's reference and return one on success or
|
|
275
|
+
// zero if `key` is NULL. The `get1` functions return a fresh reference to the
|
|
276
|
+
// underlying object or NULL if `pkey` is not of the correct type. The `get0`
|
|
106
277
|
// functions behave the same but return a non-owning pointer.
|
|
107
278
|
//
|
|
108
|
-
// The
|
|
279
|
+
// The `get0` and `get1` functions take `const` pointers and are thus
|
|
109
280
|
// non-mutating for thread-safety purposes, but mutating functions on the
|
|
110
|
-
// returned lower-level objects are considered to also mutate the
|
|
111
|
-
// may not be called concurrently with other operations on the
|
|
281
|
+
// returned lower-level objects are considered to also mutate the `EVP_PKEY` and
|
|
282
|
+
// may not be called concurrently with other operations on the `EVP_PKEY`.
|
|
283
|
+
//
|
|
284
|
+
// WARNING: Matching OpenSSL, the RSA functions behave non-uniformly.
|
|
285
|
+
// `EVP_PKEY_set1_RSA` and `EVP_PKEY_assign_RSA` construct an `EVP_PKEY_RSA`
|
|
286
|
+
// key, while the `EVP_PKEY_get0_RSA` and `EVP_PKEY_get1_RSA` will return
|
|
287
|
+
// non-NULL for both `EVP_PKEY_RSA` and `EVP_PKEY_RSA_PSS`.
|
|
288
|
+
//
|
|
289
|
+
// This means callers risk misusing a key if they assume a non-NULL return from
|
|
290
|
+
// `EVP_PKEY_get0_RSA` or `EVP_PKEY_get1_RSA` implies `EVP_PKEY_RSA`. Prefer
|
|
291
|
+
// `EVP_PKEY_id` to check the type of a key. To reduce this risk, BoringSSL does
|
|
292
|
+
// not make `EVP_PKEY_RSA_PSS` available by default, only when callers opt in
|
|
293
|
+
// via `EVP_pkey_rsa_pss_sha256`. This differs from upstream OpenSSL, where
|
|
294
|
+
// callers are exposed to `EVP_PKEY_RSA_PSS` by default.
|
|
112
295
|
|
|
113
296
|
OPENSSL_EXPORT int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
|
|
114
297
|
OPENSSL_EXPORT int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
|
|
@@ -130,158 +313,219 @@ OPENSSL_EXPORT int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
|
|
|
130
313
|
OPENSSL_EXPORT DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
|
|
131
314
|
OPENSSL_EXPORT DH *EVP_PKEY_get1_DH(const EVP_PKEY *pkey);
|
|
132
315
|
|
|
133
|
-
#define EVP_PKEY_NONE NID_undef
|
|
134
|
-
#define EVP_PKEY_RSA NID_rsaEncryption
|
|
135
|
-
#define EVP_PKEY_RSA_PSS NID_rsassaPss
|
|
136
|
-
#define EVP_PKEY_DSA NID_dsa
|
|
137
|
-
#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
|
|
138
|
-
#define EVP_PKEY_ED25519 NID_ED25519
|
|
139
|
-
#define EVP_PKEY_X25519 NID_X25519
|
|
140
|
-
#define EVP_PKEY_HKDF NID_hkdf
|
|
141
|
-
#define EVP_PKEY_DH NID_dhKeyAgreement
|
|
142
|
-
|
|
143
|
-
// EVP_PKEY_set_type sets the type of |pkey| to |type|. It returns one if
|
|
144
|
-
// successful or zero if the |type| argument is not one of the |EVP_PKEY_*|
|
|
145
|
-
// values. If |pkey| is NULL, it simply reports whether the type is known.
|
|
146
|
-
OPENSSL_EXPORT int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
|
|
147
|
-
|
|
148
|
-
// EVP_PKEY_cmp_parameters compares the parameters of |a| and |b|. It returns
|
|
149
|
-
// one if they match, zero if not, or a negative number of on error.
|
|
150
|
-
//
|
|
151
|
-
// WARNING: the return value differs from the usual return value convention.
|
|
152
|
-
OPENSSL_EXPORT int EVP_PKEY_cmp_parameters(const EVP_PKEY *a,
|
|
153
|
-
const EVP_PKEY *b);
|
|
154
|
-
|
|
155
316
|
|
|
156
317
|
// ASN.1 functions
|
|
157
318
|
|
|
319
|
+
// EVP_PKEY_from_subject_public_key_info decodes a DER-encoded
|
|
320
|
+
// SubjectPublicKeyInfo structure (RFC 5280) from `in`. It returns a
|
|
321
|
+
// newly-allocated `EVP_PKEY` or NULL on error. Only the `num_algs` algorithms
|
|
322
|
+
// in `algs` will be considered when parsing.
|
|
323
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_from_subject_public_key_info(
|
|
324
|
+
const uint8_t *in, size_t len, const EVP_PKEY_ALG *const *algs,
|
|
325
|
+
size_t num_algs);
|
|
326
|
+
|
|
158
327
|
// EVP_parse_public_key decodes a DER-encoded SubjectPublicKeyInfo structure
|
|
159
|
-
// (RFC 5280) from
|
|
160
|
-
//
|
|
161
|
-
// to be set.
|
|
328
|
+
// (RFC 5280) from `cbs` and advances `cbs`. It returns a newly-allocated
|
|
329
|
+
// `EVP_PKEY` or NULL on error.
|
|
162
330
|
//
|
|
163
|
-
//
|
|
164
|
-
//
|
|
165
|
-
//
|
|
331
|
+
// Prefer `EVP_PKEY_from_subject_public_key_info` instead. This function has
|
|
332
|
+
// several pitfalls:
|
|
333
|
+
//
|
|
334
|
+
// Callers are expected to handle trailing data returned from `cbs`, making more
|
|
335
|
+
// common cases error-prone.
|
|
336
|
+
//
|
|
337
|
+
// There is also no way to pass in supported algorithms. This function instead
|
|
338
|
+
// supports some default set of algorithms. Future versions of BoringSSL may add
|
|
339
|
+
// to this list, based on the needs of the other callers. Conversely, some
|
|
340
|
+
// algorithms may be intentionally omitted, if they cause too much risk to
|
|
341
|
+
// existing callers.
|
|
342
|
+
//
|
|
343
|
+
// This means callers must check the type of the parsed public key to ensure it
|
|
344
|
+
// is suitable and validate other desired key properties such as RSA modulus
|
|
345
|
+
// size or EC curve.
|
|
166
346
|
OPENSSL_EXPORT EVP_PKEY *EVP_parse_public_key(CBS *cbs);
|
|
167
347
|
|
|
168
|
-
// EVP_marshal_public_key marshals
|
|
169
|
-
// structure (RFC 5280) and appends the result to
|
|
348
|
+
// EVP_marshal_public_key marshals `key` as a DER-encoded SubjectPublicKeyInfo
|
|
349
|
+
// structure (RFC 5280) and appends the result to `cbb`. It returns one on
|
|
170
350
|
// success and zero on error.
|
|
171
351
|
OPENSSL_EXPORT int EVP_marshal_public_key(CBB *cbb, const EVP_PKEY *key);
|
|
172
352
|
|
|
353
|
+
// EVP_PKEY_from_private_key_info decodes a DER-encoded PrivateKeyInfo structure
|
|
354
|
+
// (RFC 5208) from `in`. It returns a newly-allocated `EVP_PKEY` or NULL on
|
|
355
|
+
// error. Only the `num_algs` algorithms in `algs` will be considered when
|
|
356
|
+
// parsing.
|
|
357
|
+
//
|
|
358
|
+
// A PrivateKeyInfo ends with an optional set of attributes. These are silently
|
|
359
|
+
// ignored.
|
|
360
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_from_private_key_info(
|
|
361
|
+
const uint8_t *in, size_t len, const EVP_PKEY_ALG *const *algs,
|
|
362
|
+
size_t num_algs);
|
|
363
|
+
|
|
173
364
|
// EVP_parse_private_key decodes a DER-encoded PrivateKeyInfo structure (RFC
|
|
174
|
-
// 5208) from
|
|
365
|
+
// 5208) from `cbs` and advances `cbs`. It returns a newly-allocated `EVP_PKEY`
|
|
175
366
|
// or NULL on error.
|
|
176
367
|
//
|
|
177
|
-
//
|
|
178
|
-
//
|
|
179
|
-
//
|
|
368
|
+
// Prefer `EVP_PKEY_from_private_key_info` instead. This function has
|
|
369
|
+
// several pitfalls:
|
|
370
|
+
//
|
|
371
|
+
// Callers are expected to handle trailing data returned from `cbs`, making more
|
|
372
|
+
// common cases error-prone.
|
|
373
|
+
//
|
|
374
|
+
// There is also no way to pass in supported algorithms. This function instead
|
|
375
|
+
// supports some default set of algorithms. Future versions of BoringSSL may add
|
|
376
|
+
// to this list, based on the needs of the other callers. Conversely, some
|
|
377
|
+
// algorithms may be intentionally omitted, if they cause too much risk to
|
|
378
|
+
// existing callers.
|
|
379
|
+
//
|
|
380
|
+
// This means the caller must check the type of the parsed private key to ensure
|
|
381
|
+
// it is suitable and validate other desired key properties such as RSA modulus
|
|
382
|
+
// size or EC curve. In particular, RSA private key operations scale cubicly, so
|
|
180
383
|
// applications accepting RSA private keys from external sources may need to
|
|
181
|
-
// bound key sizes (use
|
|
384
|
+
// bound key sizes (use `EVP_PKEY_bits` or `RSA_bits`) to avoid a DoS vector.
|
|
182
385
|
//
|
|
183
|
-
// A PrivateKeyInfo ends with an optional set of attributes. These are
|
|
184
|
-
//
|
|
185
|
-
// structure.
|
|
386
|
+
// A PrivateKeyInfo ends with an optional set of attributes. These are silently
|
|
387
|
+
// ignored.
|
|
186
388
|
OPENSSL_EXPORT EVP_PKEY *EVP_parse_private_key(CBS *cbs);
|
|
187
389
|
|
|
188
|
-
// EVP_marshal_private_key marshals
|
|
189
|
-
// structure (RFC 5208) and appends the result to
|
|
390
|
+
// EVP_marshal_private_key marshals `key` as a DER-encoded PrivateKeyInfo
|
|
391
|
+
// structure (RFC 5208) and appends the result to `cbb`. It returns one on
|
|
190
392
|
// success and zero on error.
|
|
191
393
|
OPENSSL_EXPORT int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key);
|
|
192
394
|
|
|
193
395
|
|
|
194
396
|
// Raw keys
|
|
195
397
|
//
|
|
196
|
-
//
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
//
|
|
398
|
+
// These functions give access to the "raw" type-specific public and private key
|
|
399
|
+
// formats. Algorithms with such formats are:
|
|
400
|
+
//
|
|
401
|
+
// - X25519, using the formats in RFC 7748.
|
|
402
|
+
//
|
|
403
|
+
// - Ed25519, using the formats in RFC 8032. Note the RFC 8032 private key
|
|
404
|
+
// format is the 32-byte prefix of `ED25519_sign`'s 64-byte private key.
|
|
405
|
+
//
|
|
406
|
+
// - ML-DSA, using the formats in FIPS 204. The private key representation
|
|
407
|
+
// supported by BoringSSL is the 32-byte "seed", defined in FIPS 204 as 𝜉, not
|
|
408
|
+
// the larger expanded form. For OpenSSL compatibility, it is not used with
|
|
409
|
+
// the `EVP_PKEY_from_raw_private_key` and `EVP_PKEY_get_raw_private_key`
|
|
410
|
+
// APIs, but instead the `EVP_PKEY_from_private_seed` and
|
|
411
|
+
// `EVP_PKEY_get_private_seed` APIs.
|
|
412
|
+
//
|
|
413
|
+
// - ML-KEM, using the formats in FIPS 203. The private key representation
|
|
414
|
+
// supported by BoringSSL is the 64-byte "seed" resulting from the
|
|
415
|
+
// concatenation of d||z, as each is defined in FIPS 203.
|
|
416
|
+
//
|
|
417
|
+
// These formats are suitable if serializing a key in a context where the
|
|
418
|
+
// algorithm is already known and there is no need to encode it.
|
|
200
419
|
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
|
|
204
|
-
|
|
420
|
+
// EVP_PKEY_from_raw_private_key interprets `in` as a raw private key of type
|
|
421
|
+
// `alg` and returns a newly-allocated `EVP_PKEY`, or nullptr on error.
|
|
422
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_from_raw_private_key(const EVP_PKEY_ALG *alg,
|
|
423
|
+
const uint8_t *in,
|
|
424
|
+
size_t len);
|
|
425
|
+
|
|
426
|
+
// EVP_PKEY_from_private_seed interprets `in` as a private seed of type `alg`
|
|
427
|
+
// and returns a newly-allocated `EVP_PKEY`, or nullptr on error.
|
|
428
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_from_private_seed(const EVP_PKEY_ALG *alg,
|
|
429
|
+
const uint8_t *in,
|
|
430
|
+
size_t len);
|
|
431
|
+
|
|
432
|
+
// EVP_PKEY_from_raw_public_key interprets `in` as a raw public key of type
|
|
433
|
+
// `alg` and returns a newly-allocated `EVP_PKEY`, or nullptr on error.
|
|
434
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_from_raw_public_key(const EVP_PKEY_ALG *alg,
|
|
205
435
|
const uint8_t *in,
|
|
206
436
|
size_t len);
|
|
207
437
|
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
//
|
|
211
|
-
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused,
|
|
212
|
-
const uint8_t *in,
|
|
213
|
-
size_t len);
|
|
214
|
-
|
|
215
|
-
// EVP_PKEY_get_raw_private_key outputs the private key for |pkey| in raw form.
|
|
216
|
-
// If |out| is NULL, it sets |*out_len| to the size of the raw private key.
|
|
217
|
-
// Otherwise, it writes at most |*out_len| bytes to |out| and sets |*out_len| to
|
|
438
|
+
// EVP_PKEY_get_raw_private_key outputs the private key for `pkey` in raw form.
|
|
439
|
+
// If `out` is NULL, it sets `*out_len` to the size of the raw private key.
|
|
440
|
+
// Otherwise, it writes at most `*out_len` bytes to `out` and sets `*out_len` to
|
|
218
441
|
// the number of bytes written.
|
|
219
442
|
//
|
|
220
|
-
// It returns one on success and zero if
|
|
221
|
-
// type does not support
|
|
443
|
+
// It returns one on success and zero if `pkey` has no private key, the key
|
|
444
|
+
// type does not support this format, or the buffer is too small.
|
|
222
445
|
OPENSSL_EXPORT int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey,
|
|
223
446
|
uint8_t *out, size_t *out_len);
|
|
224
447
|
|
|
225
|
-
//
|
|
226
|
-
// If
|
|
227
|
-
// Otherwise, it writes at most
|
|
448
|
+
// EVP_PKEY_get_private_seed outputs the private key for `pkey` as a private
|
|
449
|
+
// seed. If `out` is NULL, it sets `*out_len` to the size of the seed.
|
|
450
|
+
// Otherwise, it writes at most `*out_len` bytes to `out` and sets
|
|
451
|
+
// `*out_len` to the number of bytes written.
|
|
452
|
+
//
|
|
453
|
+
// It returns one on success and zero if `pkey` has no private key, the key
|
|
454
|
+
// type does not support this format, or the buffer is too small.
|
|
455
|
+
OPENSSL_EXPORT int EVP_PKEY_get_private_seed(const EVP_PKEY *pkey, uint8_t *out,
|
|
456
|
+
size_t *out_len);
|
|
457
|
+
|
|
458
|
+
// EVP_PKEY_get_raw_public_key outputs the public key for `pkey` in raw form.
|
|
459
|
+
// If `out` is NULL, it sets `*out_len` to the size of the raw public key.
|
|
460
|
+
// Otherwise, it writes at most `*out_len` bytes to `out` and sets `*out_len` to
|
|
228
461
|
// the number of bytes written.
|
|
229
462
|
//
|
|
230
|
-
// It returns one on success and zero if
|
|
231
|
-
// type does not support
|
|
463
|
+
// It returns one on success and zero if `pkey` has no public key, the key
|
|
464
|
+
// type does not support this format, or the buffer is too small.
|
|
232
465
|
OPENSSL_EXPORT int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey,
|
|
233
466
|
uint8_t *out, size_t *out_len);
|
|
234
467
|
|
|
235
468
|
|
|
469
|
+
// Key generation
|
|
470
|
+
|
|
471
|
+
// EVP_PKEY_generate_from_alg generates a new key of type `alg`. It returns a
|
|
472
|
+
// newly-allocated `EVP_PKEY` or nullptr on error.
|
|
473
|
+
//
|
|
474
|
+
// When passed `EVP_pkey_rsa`, this function generates an RSA-2048 key with the
|
|
475
|
+
// recommended public exponent of 65537, or `RSA_F4`. Use `EVP_RSA_gen` or
|
|
476
|
+
// `EVP_PKEY_keygen` instead to customize these parameters.
|
|
477
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_generate_from_alg(const EVP_PKEY_ALG *alg);
|
|
478
|
+
|
|
479
|
+
|
|
236
480
|
// Signing
|
|
237
481
|
|
|
238
|
-
// EVP_DigestSignInit sets up
|
|
239
|
-
//
|
|
240
|
-
//
|
|
241
|
-
// operation will be written to
|
|
482
|
+
// EVP_DigestSignInit sets up `ctx` for a signing operation with `type` and
|
|
483
|
+
// `pkey`. The `ctx` argument must have been initialised with
|
|
484
|
+
// `EVP_MD_CTX_init`. If `pctx` is not NULL, the `EVP_PKEY_CTX` of the signing
|
|
485
|
+
// operation will be written to `*pctx`; this can be used to set alternative
|
|
242
486
|
// signing options.
|
|
243
487
|
//
|
|
244
488
|
// For single-shot signing algorithms which do not use a pre-hash, such as
|
|
245
|
-
// Ed25519,
|
|
246
|
-
// present so the API is uniform. See
|
|
489
|
+
// Ed25519, `type` should be NULL. The `EVP_MD_CTX` itself is unused but is
|
|
490
|
+
// present so the API is uniform. See `EVP_DigestSign`.
|
|
247
491
|
//
|
|
248
|
-
// This function does not mutate
|
|
249
|
-
// used concurrently with other non-mutating functions on
|
|
492
|
+
// This function does not mutate `pkey` for thread-safety purposes and may be
|
|
493
|
+
// used concurrently with other non-mutating functions on `pkey`.
|
|
250
494
|
//
|
|
251
495
|
// It returns one on success, or zero on error.
|
|
252
496
|
OPENSSL_EXPORT int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
|
|
253
497
|
const EVP_MD *type, ENGINE *e,
|
|
254
498
|
EVP_PKEY *pkey);
|
|
255
499
|
|
|
256
|
-
// EVP_DigestSignUpdate appends
|
|
257
|
-
// be signed in
|
|
500
|
+
// EVP_DigestSignUpdate appends `len` bytes from `data` to the data which will
|
|
501
|
+
// be signed in `EVP_DigestSignFinal`. It returns one.
|
|
258
502
|
//
|
|
259
503
|
// This function performs a streaming signing operation and will fail for
|
|
260
|
-
// signature algorithms which do not support this. Use
|
|
504
|
+
// signature algorithms which do not support this. Use `EVP_DigestSign` for a
|
|
261
505
|
// single-shot operation.
|
|
262
506
|
OPENSSL_EXPORT int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data,
|
|
263
507
|
size_t len);
|
|
264
508
|
|
|
265
509
|
// EVP_DigestSignFinal signs the data that has been included by one or more
|
|
266
|
-
// calls to
|
|
510
|
+
// calls to `EVP_DigestSignUpdate`. If `out_sig` is NULL then `*out_sig_len` is
|
|
267
511
|
// set to the maximum number of output bytes. Otherwise, on entry,
|
|
268
|
-
//
|
|
269
|
-
// is successful, the signature is written to
|
|
512
|
+
// `*out_sig_len` must contain the length of the `out_sig` buffer. If the call
|
|
513
|
+
// is successful, the signature is written to `out_sig` and `*out_sig_len` is
|
|
270
514
|
// set to its length.
|
|
271
515
|
//
|
|
272
516
|
// This function performs a streaming signing operation and will fail for
|
|
273
|
-
// signature algorithms which do not support this. Use
|
|
517
|
+
// signature algorithms which do not support this. Use `EVP_DigestSign` for a
|
|
274
518
|
// single-shot operation.
|
|
275
519
|
//
|
|
276
520
|
// It returns one on success, or zero on error.
|
|
277
521
|
OPENSSL_EXPORT int EVP_DigestSignFinal(EVP_MD_CTX *ctx, uint8_t *out_sig,
|
|
278
522
|
size_t *out_sig_len);
|
|
279
523
|
|
|
280
|
-
// EVP_DigestSign signs
|
|
281
|
-
// is NULL then
|
|
282
|
-
// bytes. Otherwise, on entry,
|
|
283
|
-
//
|
|
284
|
-
//
|
|
524
|
+
// EVP_DigestSign signs `data_len` bytes from `data` using `ctx`. If `out_sig`
|
|
525
|
+
// is NULL then `*out_sig_len` is set to the maximum number of output
|
|
526
|
+
// bytes. Otherwise, on entry, `*out_sig_len` must contain the length of the
|
|
527
|
+
// `out_sig` buffer. If the call is successful, the signature is written to
|
|
528
|
+
// `out_sig` and `*out_sig_len` is set to its length.
|
|
285
529
|
//
|
|
286
530
|
// It returns one on success and zero on error.
|
|
287
531
|
OPENSSL_EXPORT int EVP_DigestSign(EVP_MD_CTX *ctx, uint8_t *out_sig,
|
|
@@ -291,45 +535,45 @@ OPENSSL_EXPORT int EVP_DigestSign(EVP_MD_CTX *ctx, uint8_t *out_sig,
|
|
|
291
535
|
|
|
292
536
|
// Verifying
|
|
293
537
|
|
|
294
|
-
// EVP_DigestVerifyInit sets up
|
|
295
|
-
// with
|
|
296
|
-
//
|
|
297
|
-
// operation will be written to
|
|
538
|
+
// EVP_DigestVerifyInit sets up `ctx` for a signature verification operation
|
|
539
|
+
// with `type` and `pkey`. The `ctx` argument must have been initialised with
|
|
540
|
+
// `EVP_MD_CTX_init`. If `pctx` is not NULL, the `EVP_PKEY_CTX` of the signing
|
|
541
|
+
// operation will be written to `*pctx`; this can be used to set alternative
|
|
298
542
|
// signing options.
|
|
299
543
|
//
|
|
300
544
|
// For single-shot signing algorithms which do not use a pre-hash, such as
|
|
301
|
-
// Ed25519,
|
|
302
|
-
// present so the API is uniform. See
|
|
545
|
+
// Ed25519, `type` should be NULL. The `EVP_MD_CTX` itself is unused but is
|
|
546
|
+
// present so the API is uniform. See `EVP_DigestVerify`.
|
|
303
547
|
//
|
|
304
|
-
// This function does not mutate
|
|
305
|
-
// used concurrently with other non-mutating functions on
|
|
548
|
+
// This function does not mutate `pkey` for thread-safety purposes and may be
|
|
549
|
+
// used concurrently with other non-mutating functions on `pkey`.
|
|
306
550
|
//
|
|
307
551
|
// It returns one on success, or zero on error.
|
|
308
552
|
OPENSSL_EXPORT int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
|
|
309
553
|
const EVP_MD *type, ENGINE *e,
|
|
310
554
|
EVP_PKEY *pkey);
|
|
311
555
|
|
|
312
|
-
// EVP_DigestVerifyUpdate appends
|
|
313
|
-
// will be verified by
|
|
556
|
+
// EVP_DigestVerifyUpdate appends `len` bytes from `data` to the data which
|
|
557
|
+
// will be verified by `EVP_DigestVerifyFinal`. It returns one.
|
|
314
558
|
//
|
|
315
559
|
// This function performs streaming signature verification and will fail for
|
|
316
|
-
// signature algorithms which do not support this. Use
|
|
317
|
-
//
|
|
560
|
+
// signature algorithms which do not support this. Use `EVP_DigestVerify` for a
|
|
561
|
+
// single-shot verification.
|
|
318
562
|
OPENSSL_EXPORT int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data,
|
|
319
563
|
size_t len);
|
|
320
564
|
|
|
321
|
-
// EVP_DigestVerifyFinal verifies that
|
|
565
|
+
// EVP_DigestVerifyFinal verifies that `sig_len` bytes of `sig` are a valid
|
|
322
566
|
// signature for the data that has been included by one or more calls to
|
|
323
|
-
//
|
|
567
|
+
// `EVP_DigestVerifyUpdate`. It returns one on success and zero otherwise.
|
|
324
568
|
//
|
|
325
569
|
// This function performs streaming signature verification and will fail for
|
|
326
|
-
// signature algorithms which do not support this. Use
|
|
327
|
-
//
|
|
570
|
+
// signature algorithms which do not support this. Use `EVP_DigestVerify` for a
|
|
571
|
+
// single-shot verification.
|
|
328
572
|
OPENSSL_EXPORT int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
|
|
329
573
|
size_t sig_len);
|
|
330
574
|
|
|
331
|
-
// EVP_DigestVerify verifies that
|
|
332
|
-
// signature for
|
|
575
|
+
// EVP_DigestVerify verifies that `sig_len` bytes from `sig` are a valid
|
|
576
|
+
// signature for `data`. It returns one on success or zero on error.
|
|
333
577
|
OPENSSL_EXPORT int EVP_DigestVerify(EVP_MD_CTX *ctx, const uint8_t *sig,
|
|
334
578
|
size_t sig_len, const uint8_t *data,
|
|
335
579
|
size_t len);
|
|
@@ -337,71 +581,71 @@ OPENSSL_EXPORT int EVP_DigestVerify(EVP_MD_CTX *ctx, const uint8_t *sig,
|
|
|
337
581
|
|
|
338
582
|
// Signing (old functions)
|
|
339
583
|
|
|
340
|
-
// EVP_SignInit_ex configures
|
|
341
|
-
// for a fresh signing operation using the hash function
|
|
584
|
+
// EVP_SignInit_ex configures `ctx`, which must already have been initialised,
|
|
585
|
+
// for a fresh signing operation using the hash function `type`. It returns one
|
|
342
586
|
// on success and zero otherwise.
|
|
343
587
|
//
|
|
344
|
-
// (In order to initialise
|
|
345
|
-
//
|
|
588
|
+
// (In order to initialise `ctx`, either obtain it initialised with
|
|
589
|
+
// `EVP_MD_CTX_create`, or use `EVP_MD_CTX_init`.)
|
|
346
590
|
OPENSSL_EXPORT int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
|
|
347
591
|
ENGINE *impl);
|
|
348
592
|
|
|
349
|
-
// EVP_SignInit is a deprecated version of
|
|
593
|
+
// EVP_SignInit is a deprecated version of `EVP_SignInit_ex`.
|
|
350
594
|
//
|
|
351
595
|
// TODO(fork): remove.
|
|
352
596
|
OPENSSL_EXPORT int EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type);
|
|
353
597
|
|
|
354
|
-
// EVP_SignUpdate appends
|
|
355
|
-
// signed in
|
|
598
|
+
// EVP_SignUpdate appends `len` bytes from `data` to the data which will be
|
|
599
|
+
// signed in `EVP_SignFinal`.
|
|
356
600
|
OPENSSL_EXPORT int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *data,
|
|
357
601
|
size_t len);
|
|
358
602
|
|
|
359
603
|
// EVP_SignFinal signs the data that has been included by one or more calls to
|
|
360
|
-
//
|
|
361
|
-
//
|
|
362
|
-
// actual size of the signature is written to
|
|
604
|
+
// `EVP_SignUpdate`, using the key `pkey`, and writes it to `sig`. On entry,
|
|
605
|
+
// `sig` must point to at least `EVP_PKEY_size(pkey)` bytes of space. The
|
|
606
|
+
// actual size of the signature is written to `*out_sig_len`.
|
|
363
607
|
//
|
|
364
608
|
// It returns one on success and zero otherwise.
|
|
365
609
|
//
|
|
366
|
-
// It does not modify
|
|
367
|
-
// order to sign a longer message. It also does not mutate
|
|
610
|
+
// It does not modify `ctx`, thus it's possible to continue to use `ctx` in
|
|
611
|
+
// order to sign a longer message. It also does not mutate `pkey` for
|
|
368
612
|
// thread-safety purposes and may be used concurrently with other non-mutating
|
|
369
|
-
// functions on
|
|
613
|
+
// functions on `pkey`.
|
|
370
614
|
OPENSSL_EXPORT int EVP_SignFinal(const EVP_MD_CTX *ctx, uint8_t *sig,
|
|
371
615
|
unsigned int *out_sig_len, EVP_PKEY *pkey);
|
|
372
616
|
|
|
373
617
|
|
|
374
618
|
// Verifying (old functions)
|
|
375
619
|
|
|
376
|
-
// EVP_VerifyInit_ex configures
|
|
620
|
+
// EVP_VerifyInit_ex configures `ctx`, which must already have been
|
|
377
621
|
// initialised, for a fresh signature verification operation using the hash
|
|
378
|
-
// function
|
|
622
|
+
// function `type`. It returns one on success and zero otherwise.
|
|
379
623
|
//
|
|
380
|
-
// (In order to initialise
|
|
381
|
-
//
|
|
624
|
+
// (In order to initialise `ctx`, either obtain it initialised with
|
|
625
|
+
// `EVP_MD_CTX_create`, or use `EVP_MD_CTX_init`.)
|
|
382
626
|
OPENSSL_EXPORT int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
|
|
383
627
|
ENGINE *impl);
|
|
384
628
|
|
|
385
|
-
// EVP_VerifyInit is a deprecated version of
|
|
629
|
+
// EVP_VerifyInit is a deprecated version of `EVP_VerifyInit_ex`.
|
|
386
630
|
//
|
|
387
631
|
// TODO(fork): remove.
|
|
388
632
|
OPENSSL_EXPORT int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type);
|
|
389
633
|
|
|
390
|
-
// EVP_VerifyUpdate appends
|
|
391
|
-
// signed in
|
|
634
|
+
// EVP_VerifyUpdate appends `len` bytes from `data` to the data which will be
|
|
635
|
+
// signed in `EVP_VerifyFinal`.
|
|
392
636
|
OPENSSL_EXPORT int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *data,
|
|
393
637
|
size_t len);
|
|
394
638
|
|
|
395
|
-
// EVP_VerifyFinal verifies that
|
|
396
|
-
// signature, by
|
|
397
|
-
// calls to
|
|
639
|
+
// EVP_VerifyFinal verifies that `sig_len` bytes of `sig` are a valid
|
|
640
|
+
// signature, by `pkey`, for the data that has been included by one or more
|
|
641
|
+
// calls to `EVP_VerifyUpdate`.
|
|
398
642
|
//
|
|
399
643
|
// It returns one on success and zero otherwise.
|
|
400
644
|
//
|
|
401
|
-
// It does not modify
|
|
402
|
-
// order to verify a longer message. It also does not mutate
|
|
645
|
+
// It does not modify `ctx`, thus it's possible to continue to use `ctx` in
|
|
646
|
+
// order to verify a longer message. It also does not mutate `pkey` for
|
|
403
647
|
// thread-safety purposes and may be used concurrently with other non-mutating
|
|
404
|
-
// functions on
|
|
648
|
+
// functions on `pkey`.
|
|
405
649
|
OPENSSL_EXPORT int EVP_VerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
|
|
406
650
|
size_t sig_len, EVP_PKEY *pkey);
|
|
407
651
|
|
|
@@ -409,17 +653,17 @@ OPENSSL_EXPORT int EVP_VerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
|
|
|
409
653
|
// Printing
|
|
410
654
|
|
|
411
655
|
// EVP_PKEY_print_public prints a textual representation of the public key in
|
|
412
|
-
//
|
|
656
|
+
// `pkey` to `out`. Returns one on success or zero otherwise.
|
|
413
657
|
OPENSSL_EXPORT int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
|
|
414
658
|
int indent, ASN1_PCTX *pctx);
|
|
415
659
|
|
|
416
660
|
// EVP_PKEY_print_private prints a textual representation of the private key in
|
|
417
|
-
//
|
|
661
|
+
// `pkey` to `out`. Returns one on success or zero otherwise.
|
|
418
662
|
OPENSSL_EXPORT int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
|
|
419
663
|
int indent, ASN1_PCTX *pctx);
|
|
420
664
|
|
|
421
665
|
// EVP_PKEY_print_params prints a textual representation of the parameters in
|
|
422
|
-
//
|
|
666
|
+
// `pkey` to `out`. Returns one on success or zero otherwise.
|
|
423
667
|
OPENSSL_EXPORT int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
|
|
424
668
|
int indent, ASN1_PCTX *pctx);
|
|
425
669
|
|
|
@@ -430,38 +674,38 @@ OPENSSL_EXPORT int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
|
|
|
430
674
|
// function that results in a key suitable for use in symmetric
|
|
431
675
|
// cryptography.
|
|
432
676
|
|
|
433
|
-
// PKCS5_PBKDF2_HMAC computes
|
|
434
|
-
// and
|
|
677
|
+
// PKCS5_PBKDF2_HMAC computes `iterations` iterations of PBKDF2 of `password`
|
|
678
|
+
// and `salt`, using `digest`, and outputs `key_len` bytes to `out_key`. It
|
|
435
679
|
// returns one on success and zero on allocation failure or if iterations is 0.
|
|
436
680
|
OPENSSL_EXPORT int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len,
|
|
437
681
|
const uint8_t *salt, size_t salt_len,
|
|
438
682
|
uint32_t iterations, const EVP_MD *digest,
|
|
439
683
|
size_t key_len, uint8_t *out_key);
|
|
440
684
|
|
|
441
|
-
// PKCS5_PBKDF2_HMAC_SHA1 is the same as PKCS5_PBKDF2_HMAC, but with
|
|
442
|
-
// fixed to
|
|
685
|
+
// PKCS5_PBKDF2_HMAC_SHA1 is the same as PKCS5_PBKDF2_HMAC, but with `digest`
|
|
686
|
+
// fixed to `EVP_sha1`.
|
|
443
687
|
OPENSSL_EXPORT int PKCS5_PBKDF2_HMAC_SHA1(const char *password,
|
|
444
688
|
size_t password_len,
|
|
445
689
|
const uint8_t *salt, size_t salt_len,
|
|
446
690
|
uint32_t iterations, size_t key_len,
|
|
447
691
|
uint8_t *out_key);
|
|
448
692
|
|
|
449
|
-
// EVP_PBE_scrypt expands
|
|
450
|
-
// scrypt, as described in RFC 7914, and writes the result to
|
|
693
|
+
// EVP_PBE_scrypt expands `password` into a secret key of length `key_len` using
|
|
694
|
+
// scrypt, as described in RFC 7914, and writes the result to `out_key`. It
|
|
451
695
|
// returns one on success and zero on allocation failure, if the memory required
|
|
452
|
-
// for the operation exceeds
|
|
696
|
+
// for the operation exceeds `max_mem`, or if any of the parameters are invalid
|
|
453
697
|
// as described below.
|
|
454
698
|
//
|
|
455
|
-
//
|
|
456
|
-
// cost of the operation. If
|
|
699
|
+
// `N`, `r`, and `p` are as described in RFC 7914 section 6. They determine the
|
|
700
|
+
// cost of the operation. If `max_mem` is zero, a default limit of 65MiB will be
|
|
457
701
|
// used.
|
|
458
702
|
//
|
|
459
703
|
// The parameters are considered invalid under any of the following conditions:
|
|
460
|
-
// -
|
|
461
|
-
// -
|
|
462
|
-
// -
|
|
463
|
-
// -
|
|
464
|
-
// -
|
|
704
|
+
// - `r` or `p` are zero
|
|
705
|
+
// - `p` > (2^30 - 1) / `r`
|
|
706
|
+
// - `N` is not a power of two
|
|
707
|
+
// - `N` > 2^32
|
|
708
|
+
// - `N` > 2^(128 * `r` / 8)
|
|
465
709
|
OPENSSL_EXPORT int EVP_PBE_scrypt(const char *password, size_t password_len,
|
|
466
710
|
const uint8_t *salt, size_t salt_len,
|
|
467
711
|
uint64_t N, uint64_t r, uint64_t p,
|
|
@@ -469,70 +713,95 @@ OPENSSL_EXPORT int EVP_PBE_scrypt(const char *password, size_t password_len,
|
|
|
469
713
|
size_t key_len);
|
|
470
714
|
|
|
471
715
|
|
|
472
|
-
//
|
|
716
|
+
// Operations.
|
|
717
|
+
//
|
|
718
|
+
// `EVP_PKEY_CTX` objects hold the context for an operation (e.g. signing or
|
|
719
|
+
// encrypting) that uses an `EVP_PKEY`. They are used to configure
|
|
720
|
+
// algorithm-specific parameters for the operation before performing the
|
|
721
|
+
// operation. The general pattern for performing an operation in EVP is:
|
|
722
|
+
//
|
|
723
|
+
// 1. Construct an `EVP_PKEY_CTX`, either with `EVP_PKEY_CTX_new` (operations
|
|
724
|
+
// using a key, like signing) or `EVP_PKEY_CTX_new_id` (operations not using
|
|
725
|
+
// an existing key, like key generation).
|
|
473
726
|
//
|
|
474
|
-
//
|
|
475
|
-
//
|
|
727
|
+
// 2. Initialize it for an operation. For example, `EVP_PKEY_sign_init`
|
|
728
|
+
// initializes an `EVP_PKEY_CTX` for signing.
|
|
729
|
+
//
|
|
730
|
+
// 3. Configure algorithm-specific parameters for the operation by calling
|
|
731
|
+
// control functions on the `EVP_PKEY_CTX`. Some functions are generic, such
|
|
732
|
+
// as `EVP_PKEY_CTX_set_signature_md`, and some are specific to an algorithm,
|
|
733
|
+
// such as `EVP_PKEY_CTX_set_rsa_padding`.
|
|
734
|
+
//
|
|
735
|
+
// 4. Perform the operation. For example, `EVP_PKEY_sign` signs with the
|
|
736
|
+
// corresponding parameters.
|
|
737
|
+
//
|
|
738
|
+
// 5. Release the `EVP_PKEY_CTX` with `EVP_PKEY_CTX_free`.
|
|
739
|
+
//
|
|
740
|
+
// Each `EVP_PKEY` algorithm interprets operations and parameters differently.
|
|
741
|
+
// Not all algorithms support all operations. Functions will fail if the
|
|
742
|
+
// algorithm does not support the parameter or operation.
|
|
476
743
|
|
|
477
|
-
// EVP_PKEY_CTX_new allocates a fresh
|
|
744
|
+
// EVP_PKEY_CTX_new allocates a fresh `EVP_PKEY_CTX` for use with `pkey`. It
|
|
478
745
|
// returns the context or NULL on error.
|
|
479
746
|
OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
|
|
480
747
|
|
|
481
|
-
// EVP_PKEY_CTX_new_id allocates a fresh
|
|
482
|
-
// (e.g.
|
|
483
|
-
//
|
|
748
|
+
// EVP_PKEY_CTX_new_id allocates a fresh `EVP_PKEY_CTX` for a key of type `id`
|
|
749
|
+
// (e.g. `EVP_PKEY_HMAC`). This can be used for key generation where
|
|
750
|
+
// `EVP_PKEY_CTX_new` can't be used because there isn't an `EVP_PKEY` to pass
|
|
484
751
|
// it. It returns the context or NULL on error.
|
|
752
|
+
//
|
|
753
|
+
// For key generation, prefer to use `EVP_PKEY_generate_from_alg`.
|
|
485
754
|
OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
|
|
486
755
|
|
|
487
|
-
// EVP_PKEY_CTX_free frees
|
|
756
|
+
// EVP_PKEY_CTX_free frees `ctx` and the data it owns.
|
|
488
757
|
OPENSSL_EXPORT void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
|
|
489
758
|
|
|
490
|
-
// EVP_PKEY_CTX_dup allocates a fresh
|
|
491
|
-
// state of
|
|
759
|
+
// EVP_PKEY_CTX_dup allocates a fresh `EVP_PKEY_CTX` and sets it equal to the
|
|
760
|
+
// state of `ctx`. It returns the fresh `EVP_PKEY_CTX` or NULL on error.
|
|
492
761
|
OPENSSL_EXPORT EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
|
|
493
762
|
|
|
494
|
-
// EVP_PKEY_CTX_get0_pkey returns the
|
|
763
|
+
// EVP_PKEY_CTX_get0_pkey returns the `EVP_PKEY` associated with `ctx`.
|
|
495
764
|
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
|
|
496
765
|
|
|
497
|
-
// EVP_PKEY_sign_init initialises an
|
|
498
|
-
// should be called before
|
|
766
|
+
// EVP_PKEY_sign_init initialises an `EVP_PKEY_CTX` for a signing operation. It
|
|
767
|
+
// should be called before `EVP_PKEY_sign`.
|
|
499
768
|
//
|
|
500
769
|
// It returns one on success or zero on error.
|
|
501
770
|
OPENSSL_EXPORT int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
|
|
502
771
|
|
|
503
|
-
// EVP_PKEY_sign signs
|
|
504
|
-
// NULL, the maximum size of the signature is written to
|
|
505
|
-
// Otherwise,
|
|
506
|
-
//
|
|
772
|
+
// EVP_PKEY_sign signs `digest_len` bytes from `digest` using `ctx`. If `sig` is
|
|
773
|
+
// NULL, the maximum size of the signature is written to `out_sig_len`.
|
|
774
|
+
// Otherwise, `*sig_len` must contain the number of bytes of space available at
|
|
775
|
+
// `sig`. If sufficient, the signature will be written to `sig` and `*sig_len`
|
|
507
776
|
// updated with the true length. This function will fail for signature
|
|
508
777
|
// algorithms like Ed25519 that do not support signing pre-hashed inputs.
|
|
509
778
|
//
|
|
510
|
-
// WARNING:
|
|
779
|
+
// WARNING: `digest` must be the output of some hash function on the data to be
|
|
511
780
|
// signed. Passing unhashed inputs will not result in a secure signature scheme.
|
|
512
|
-
// Use
|
|
781
|
+
// Use `EVP_DigestSignInit` to sign an unhashed input.
|
|
513
782
|
//
|
|
514
|
-
// WARNING: Setting
|
|
783
|
+
// WARNING: Setting `sig` to NULL only gives the maximum size of the
|
|
515
784
|
// signature. The actual signature may be smaller.
|
|
516
785
|
//
|
|
517
786
|
// It returns one on success or zero on error. (Note: this differs from
|
|
518
|
-
// OpenSSL, which can also return negative values to indicate an error.
|
|
787
|
+
// OpenSSL, which can also return negative values to indicate an error.)
|
|
519
788
|
OPENSSL_EXPORT int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, uint8_t *sig,
|
|
520
789
|
size_t *sig_len, const uint8_t *digest,
|
|
521
790
|
size_t digest_len);
|
|
522
791
|
|
|
523
|
-
// EVP_PKEY_verify_init initialises an
|
|
524
|
-
// verification operation. It should be called before
|
|
792
|
+
// EVP_PKEY_verify_init initialises an `EVP_PKEY_CTX` for a signature
|
|
793
|
+
// verification operation. It should be called before `EVP_PKEY_verify`.
|
|
525
794
|
//
|
|
526
795
|
// It returns one on success or zero on error.
|
|
527
796
|
OPENSSL_EXPORT int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
|
|
528
797
|
|
|
529
|
-
// EVP_PKEY_verify verifies that
|
|
530
|
-
// signature for
|
|
798
|
+
// EVP_PKEY_verify verifies that `sig_len` bytes from `sig` are a valid
|
|
799
|
+
// signature for `digest`. This function will fail for signature
|
|
531
800
|
// algorithms like Ed25519 that do not support signing pre-hashed inputs.
|
|
532
801
|
//
|
|
533
|
-
// WARNING:
|
|
802
|
+
// WARNING: `digest` must be the output of some hash function on the data to be
|
|
534
803
|
// verified. Passing unhashed inputs will not result in a secure signature
|
|
535
|
-
// scheme. Use
|
|
804
|
+
// scheme. Use `EVP_DigestVerifyInit` to verify a signature given the unhashed
|
|
536
805
|
// input.
|
|
537
806
|
//
|
|
538
807
|
// It returns one on success or zero on error.
|
|
@@ -540,19 +809,19 @@ OPENSSL_EXPORT int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig,
|
|
|
540
809
|
size_t sig_len, const uint8_t *digest,
|
|
541
810
|
size_t digest_len);
|
|
542
811
|
|
|
543
|
-
// EVP_PKEY_encrypt_init initialises an
|
|
544
|
-
// operation. It should be called before
|
|
812
|
+
// EVP_PKEY_encrypt_init initialises an `EVP_PKEY_CTX` for an encryption
|
|
813
|
+
// operation. It should be called before `EVP_PKEY_encrypt`.
|
|
545
814
|
//
|
|
546
815
|
// It returns one on success or zero on error.
|
|
547
816
|
OPENSSL_EXPORT int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
|
|
548
817
|
|
|
549
|
-
// EVP_PKEY_encrypt encrypts
|
|
550
|
-
// maximum size of the ciphertext is written to
|
|
551
|
-
// must contain the number of bytes of space available at
|
|
552
|
-
// the ciphertext will be written to
|
|
818
|
+
// EVP_PKEY_encrypt encrypts `in_len` bytes from `in`. If `out` is NULL, the
|
|
819
|
+
// maximum size of the ciphertext is written to `out_len`. Otherwise, `*out_len`
|
|
820
|
+
// must contain the number of bytes of space available at `out`. If sufficient,
|
|
821
|
+
// the ciphertext will be written to `out` and `*out_len` updated with the true
|
|
553
822
|
// length.
|
|
554
823
|
//
|
|
555
|
-
// WARNING: Setting
|
|
824
|
+
// WARNING: Setting `out` to NULL only gives the maximum size of the
|
|
556
825
|
// ciphertext. The actual ciphertext may be smaller.
|
|
557
826
|
//
|
|
558
827
|
// It returns one on success or zero on error.
|
|
@@ -560,19 +829,19 @@ OPENSSL_EXPORT int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
|
|
|
560
829
|
size_t *out_len, const uint8_t *in,
|
|
561
830
|
size_t in_len);
|
|
562
831
|
|
|
563
|
-
// EVP_PKEY_decrypt_init initialises an
|
|
564
|
-
// operation. It should be called before
|
|
832
|
+
// EVP_PKEY_decrypt_init initialises an `EVP_PKEY_CTX` for a decryption
|
|
833
|
+
// operation. It should be called before `EVP_PKEY_decrypt`.
|
|
565
834
|
//
|
|
566
835
|
// It returns one on success or zero on error.
|
|
567
836
|
OPENSSL_EXPORT int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
|
|
568
837
|
|
|
569
|
-
// EVP_PKEY_decrypt decrypts
|
|
570
|
-
// maximum size of the plaintext is written to
|
|
571
|
-
// must contain the number of bytes of space available at
|
|
572
|
-
// the ciphertext will be written to
|
|
838
|
+
// EVP_PKEY_decrypt decrypts `in_len` bytes from `in`. If `out` is NULL, the
|
|
839
|
+
// maximum size of the plaintext is written to `out_len`. Otherwise, `*out_len`
|
|
840
|
+
// must contain the number of bytes of space available at `out`. If sufficient,
|
|
841
|
+
// the ciphertext will be written to `out` and `*out_len` updated with the true
|
|
573
842
|
// length.
|
|
574
843
|
//
|
|
575
|
-
// WARNING: Setting
|
|
844
|
+
// WARNING: Setting `out` to NULL only gives the maximum size of the
|
|
576
845
|
// plaintext. The actual plaintext may be smaller.
|
|
577
846
|
//
|
|
578
847
|
// It returns one on success or zero on error.
|
|
@@ -580,8 +849,8 @@ OPENSSL_EXPORT int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
|
|
|
580
849
|
size_t *out_len, const uint8_t *in,
|
|
581
850
|
size_t in_len);
|
|
582
851
|
|
|
583
|
-
// EVP_PKEY_verify_recover_init initialises an
|
|
584
|
-
// decryption operation. It should be called before
|
|
852
|
+
// EVP_PKEY_verify_recover_init initialises an `EVP_PKEY_CTX` for a public-key
|
|
853
|
+
// decryption operation. It should be called before `EVP_PKEY_verify_recover`.
|
|
585
854
|
//
|
|
586
855
|
// Public-key decryption is a very obscure operation that is only implemented
|
|
587
856
|
// by RSA keys. It is effectively a signature verification operation that
|
|
@@ -591,16 +860,16 @@ OPENSSL_EXPORT int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out,
|
|
|
591
860
|
// It returns one on success or zero on error.
|
|
592
861
|
OPENSSL_EXPORT int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
|
|
593
862
|
|
|
594
|
-
// EVP_PKEY_verify_recover decrypts
|
|
595
|
-
// NULL, the maximum size of the plaintext is written to
|
|
596
|
-
//
|
|
597
|
-
// sufficient, the ciphertext will be written to
|
|
863
|
+
// EVP_PKEY_verify_recover decrypts `sig_len` bytes from `sig`. If `out` is
|
|
864
|
+
// NULL, the maximum size of the plaintext is written to `out_len`. Otherwise,
|
|
865
|
+
// `*out_len` must contain the number of bytes of space available at `out`. If
|
|
866
|
+
// sufficient, the ciphertext will be written to `out` and `*out_len` updated
|
|
598
867
|
// with the true length.
|
|
599
868
|
//
|
|
600
|
-
// WARNING: Setting
|
|
869
|
+
// WARNING: Setting `out` to NULL only gives the maximum size of the
|
|
601
870
|
// plaintext. The actual plaintext may be smaller.
|
|
602
871
|
//
|
|
603
|
-
// See the warning about this operation in
|
|
872
|
+
// See the warning about this operation in `EVP_PKEY_verify_recover_init`. It
|
|
604
873
|
// is probably not what you want.
|
|
605
874
|
//
|
|
606
875
|
// It returns one on success or zero on error.
|
|
@@ -608,101 +877,182 @@ OPENSSL_EXPORT int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, uint8_t *out,
|
|
|
608
877
|
size_t *out_len, const uint8_t *sig,
|
|
609
878
|
size_t siglen);
|
|
610
879
|
|
|
611
|
-
// EVP_PKEY_derive_init initialises an
|
|
612
|
-
// operation. It should be called before
|
|
613
|
-
//
|
|
880
|
+
// EVP_PKEY_derive_init initialises an `EVP_PKEY_CTX` for a key derivation
|
|
881
|
+
// operation. It should be called before `EVP_PKEY_derive_set_peer` and
|
|
882
|
+
// `EVP_PKEY_derive`.
|
|
614
883
|
//
|
|
615
884
|
// It returns one on success or zero on error.
|
|
616
885
|
OPENSSL_EXPORT int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
|
|
617
886
|
|
|
618
887
|
// EVP_PKEY_derive_set_peer sets the peer's key to be used for key derivation
|
|
619
|
-
// by
|
|
888
|
+
// by `ctx` to `peer`. It should be called after `EVP_PKEY_derive_init`. (For
|
|
620
889
|
// example, this is used to set the peer's key in (EC)DH.) It returns one on
|
|
621
890
|
// success and zero on error.
|
|
622
891
|
OPENSSL_EXPORT int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
|
|
623
892
|
|
|
624
|
-
// EVP_PKEY_derive derives a shared key from
|
|
625
|
-
// on entry,
|
|
626
|
-
// sufficient then the shared key will be written to
|
|
627
|
-
// will be set to the length. If
|
|
893
|
+
// EVP_PKEY_derive derives a shared key from `ctx`. If `key` is non-NULL then,
|
|
894
|
+
// on entry, `out_key_len` must contain the amount of space at `key`. If
|
|
895
|
+
// sufficient then the shared key will be written to `key` and `*out_key_len`
|
|
896
|
+
// will be set to the length. If `key` is NULL then `out_key_len` will be set to
|
|
628
897
|
// the maximum length.
|
|
629
898
|
//
|
|
630
|
-
// WARNING: Setting
|
|
899
|
+
// WARNING: Setting `out` to NULL only gives the maximum size of the key. The
|
|
631
900
|
// actual key may be smaller.
|
|
632
901
|
//
|
|
633
902
|
// It returns one on success and zero on error.
|
|
634
903
|
OPENSSL_EXPORT int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, uint8_t *key,
|
|
635
904
|
size_t *out_key_len);
|
|
636
905
|
|
|
637
|
-
// EVP_PKEY_keygen_init initialises an
|
|
638
|
-
// operation. It should be called before
|
|
906
|
+
// EVP_PKEY_keygen_init initialises an `EVP_PKEY_CTX` for a key generation
|
|
907
|
+
// operation. It should be called before `EVP_PKEY_keygen`.
|
|
639
908
|
//
|
|
640
909
|
// It returns one on success or zero on error.
|
|
641
910
|
OPENSSL_EXPORT int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
|
|
642
911
|
|
|
643
912
|
// EVP_PKEY_keygen performs a key generation operation using the values from
|
|
644
|
-
//
|
|
645
|
-
// resulting key. Otherwise, it sets
|
|
913
|
+
// `ctx`. If `*out_pkey` is non-NULL, it overwrites `*out_pkey` with the
|
|
914
|
+
// resulting key. Otherwise, it sets `*out_pkey` to a newly-allocated `EVP_PKEY`
|
|
646
915
|
// containing the result. It returns one on success or zero on error.
|
|
647
916
|
OPENSSL_EXPORT int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **out_pkey);
|
|
648
917
|
|
|
649
|
-
// EVP_PKEY_paramgen_init initialises an
|
|
650
|
-
// generation operation. It should be called before
|
|
918
|
+
// EVP_PKEY_paramgen_init initialises an `EVP_PKEY_CTX` for a parameter
|
|
919
|
+
// generation operation. It should be called before `EVP_PKEY_paramgen`.
|
|
651
920
|
//
|
|
652
921
|
// It returns one on success or zero on error.
|
|
653
922
|
OPENSSL_EXPORT int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
|
|
654
923
|
|
|
655
924
|
// EVP_PKEY_paramgen performs a parameter generation using the values from
|
|
656
|
-
//
|
|
657
|
-
// resulting parameters, but no key. Otherwise, it sets
|
|
658
|
-
// newly-allocated
|
|
925
|
+
// `ctx`. If `*out_pkey` is non-NULL, it overwrites `*out_pkey` with the
|
|
926
|
+
// resulting parameters, but no key. Otherwise, it sets `*out_pkey` to a
|
|
927
|
+
// newly-allocated `EVP_PKEY` containing the result. It returns one on success
|
|
659
928
|
// or zero on error.
|
|
660
929
|
OPENSSL_EXPORT int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **out_pkey);
|
|
661
930
|
|
|
931
|
+
// EVP_PKEY_encapsulate_init initialises an `EVP_PKEY_CTX` for an encapsulate
|
|
932
|
+
// operation. It should be called before `EVP_PKEY_encapsulate`. `params` is
|
|
933
|
+
// included for OpenSSL compatibility, but this parameter should be NULL or have
|
|
934
|
+
// `OSSL_PARAM_END` as its first element.
|
|
935
|
+
//
|
|
936
|
+
// It returns one on success or zero on error.
|
|
937
|
+
OPENSSL_EXPORT int EVP_PKEY_encapsulate_init(EVP_PKEY_CTX *ctx,
|
|
938
|
+
const OSSL_PARAM *params);
|
|
939
|
+
|
|
940
|
+
// EVP_PKEY_encapsulate implements public key encapsulation using `ctx`. It
|
|
941
|
+
// either performs the operation or returns the maximum output sizes, depending
|
|
942
|
+
// on whether `out_ciphertext` is NULL:
|
|
943
|
+
//
|
|
944
|
+
// If `out_ciphertext` is NULL, it writes the maximum ciphertext length to
|
|
945
|
+
// `*out_ciphertext_len` and the maximum shared secret length to
|
|
946
|
+
// `*out_secret_len`. Either of `out_ciphertext_len` or `out_secret_len` may be
|
|
947
|
+
// NULL to ignore the corresponding output.
|
|
948
|
+
//
|
|
949
|
+
// If `out_ciphertext` is non-NULL, it performs the operation and, on success,
|
|
950
|
+
// writes the ciphertext to `out_ciphertext`, the ciphertext size to
|
|
951
|
+
// `out_ciphertext_len`, the shared secret to `out_secret`, and the shared
|
|
952
|
+
// secret length to `out_secret_len`. On input, `*out_ciphertext_len` and
|
|
953
|
+
// `*out_secret_len` must contain the amount of space available in
|
|
954
|
+
// `out_ciphertext` and `out_secret`, respectively. If there is insufficient
|
|
955
|
+
// space to write the output, the operation will fail.
|
|
956
|
+
//
|
|
957
|
+
// In both modes, this function returns one on success or zero on error.
|
|
958
|
+
OPENSSL_EXPORT int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx,
|
|
959
|
+
uint8_t *out_ciphertext,
|
|
960
|
+
size_t *out_ciphertext_len,
|
|
961
|
+
uint8_t *out_secret,
|
|
962
|
+
size_t *out_secret_len);
|
|
963
|
+
|
|
964
|
+
// EVP_PKEY_decapsulate_init initialises an `EVP_PKEY_CTX` for a decapsulate
|
|
965
|
+
// operation. It should be called before `EVP_PKEY_decapsulate`. `params` is
|
|
966
|
+
// included for OpenSSL compatibility, but this parameter should be NULL or have
|
|
967
|
+
// `OSSL_PARAM_END` as its first element.
|
|
968
|
+
//
|
|
969
|
+
// It returns one on success or zero on error.
|
|
970
|
+
OPENSSL_EXPORT int EVP_PKEY_decapsulate_init(EVP_PKEY_CTX *ctx,
|
|
971
|
+
const OSSL_PARAM *params);
|
|
972
|
+
|
|
973
|
+
// EVP_PKEY_decapsulate implements private key decapsulation using `ctx`.
|
|
974
|
+
// `ciphertext` and `ciphertext_len` specify the ciphertext to be decapsulated.
|
|
975
|
+
// If `out_secret` is NULL, it writes the maximum size of the shared secret
|
|
976
|
+
// output to `*out_secret_len` and returns one. Otherwise, `*out_secret_len`
|
|
977
|
+
// must contain the number of bytes of space available at `out_secret`. If the
|
|
978
|
+
// space is insufficient, this function returns zero. If the space is
|
|
979
|
+
// sufficient, the decapsulated shared secret will be written to `out_secret`
|
|
980
|
+
// and the size of the output to `out_secret_len`, and this function will return
|
|
981
|
+
// one. If `ciphertext` has been corrupted, the function may fail or it may
|
|
982
|
+
// output a shared secret that appears to be random. Any subsequent symmetric
|
|
983
|
+
// encryption using `out_secret` must use an authenticated encryption scheme to
|
|
984
|
+
// discover the decapsulation failure.
|
|
985
|
+
OPENSSL_EXPORT int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx, uint8_t *out_secret,
|
|
986
|
+
size_t *out_secret_len,
|
|
987
|
+
const uint8_t *ciphertext,
|
|
988
|
+
size_t ciphertext_len);
|
|
989
|
+
|
|
662
990
|
|
|
663
991
|
// Generic control functions.
|
|
664
992
|
|
|
665
|
-
// EVP_PKEY_CTX_set_signature_md sets
|
|
993
|
+
// EVP_PKEY_CTX_set_signature_md sets `md` as the digest to be used in a
|
|
666
994
|
// signature operation. It returns one on success or zero on error.
|
|
667
995
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx,
|
|
668
996
|
const EVP_MD *md);
|
|
669
997
|
|
|
670
|
-
// EVP_PKEY_CTX_get_signature_md sets
|
|
998
|
+
// EVP_PKEY_CTX_get_signature_md sets `*out_md` to the digest to be used in a
|
|
671
999
|
// signature operation. It returns one on success or zero on error.
|
|
672
1000
|
OPENSSL_EXPORT int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx,
|
|
673
1001
|
const EVP_MD **out_md);
|
|
674
1002
|
|
|
1003
|
+
// EVP_PKEY_CTX_set1_signature_context_string sets the context string for a
|
|
1004
|
+
// signature or verification operation to `context`. It returns one success and
|
|
1005
|
+
// zero on error. The context string is an additional input to some signature
|
|
1006
|
+
// algorithms, such as ML-DSA, to separate different uses of the same key. This
|
|
1007
|
+
// is known as domain separation. Section 8.3 of RFC 8032 provides some
|
|
1008
|
+
// additional guidance on context strings.
|
|
1009
|
+
//
|
|
1010
|
+
// Not all signature algorithms support context strings. Callers that support
|
|
1011
|
+
// a mix of algorithms, with and without context string support, can instead
|
|
1012
|
+
// separate the signature input itself. For example, callers can prepend
|
|
1013
|
+
// context-specific prefixes to signature inputs.
|
|
1014
|
+
OPENSSL_EXPORT int EVP_PKEY_CTX_set1_signature_context_string(
|
|
1015
|
+
EVP_PKEY_CTX *ctx, const uint8_t *context, size_t context_len);
|
|
1016
|
+
|
|
675
1017
|
|
|
676
1018
|
// RSA specific control functions.
|
|
677
1019
|
|
|
1020
|
+
// EVP_RSA_gen generates a new RSA key with the specified number of bits. It
|
|
1021
|
+
// returns a newly-allocated `EVP_PKEY` or nullptr on error.
|
|
1022
|
+
//
|
|
1023
|
+
// This function sets the public exponent to the recommended value of 65537, or
|
|
1024
|
+
// `RSA_F4`. To use a less common value, instead use
|
|
1025
|
+
// `EVP_PKEY_CTX_set_rsa_keygen_pubexp` and `EVP_PKEY_keygen`.
|
|
1026
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_RSA_gen(unsigned bits);
|
|
1027
|
+
|
|
678
1028
|
// EVP_PKEY_CTX_set_rsa_padding sets the padding type to use. It should be one
|
|
679
|
-
// of the
|
|
680
|
-
// default, the padding is
|
|
1029
|
+
// of the `RSA_*_PADDING` values. Returns one on success or zero on error. By
|
|
1030
|
+
// default, the padding is `RSA_PKCS1_PADDING`.
|
|
681
1031
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int padding);
|
|
682
1032
|
|
|
683
|
-
// EVP_PKEY_CTX_get_rsa_padding sets
|
|
684
|
-
// value, which is one of the
|
|
1033
|
+
// EVP_PKEY_CTX_get_rsa_padding sets `*out_padding` to the current padding
|
|
1034
|
+
// value, which is one of the `RSA_*_PADDING` values. Returns one on success or
|
|
685
1035
|
// zero on error.
|
|
686
1036
|
OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx,
|
|
687
1037
|
int *out_padding);
|
|
688
1038
|
|
|
689
1039
|
// EVP_PKEY_CTX_set_rsa_pss_saltlen sets the length of the salt in a PSS-padded
|
|
690
|
-
// signature. A value of
|
|
691
|
-
// in the signature. A value of
|
|
692
|
-
//
|
|
693
|
-
//
|
|
1040
|
+
// signature. A value of `RSA_PSS_SALTLEN_DIGEST` causes the salt to be the same
|
|
1041
|
+
// length as the digest in the signature. A value of `RSA_PSS_SALTLEN_AUTO`
|
|
1042
|
+
// causes the salt to be the maximum length that will fit when signing and
|
|
1043
|
+
// recovered from the signature when verifying. Otherwise the value gives the
|
|
1044
|
+
// size of the salt in bytes.
|
|
694
1045
|
//
|
|
695
|
-
// If unsure, use
|
|
1046
|
+
// If unsure, use `RSA_PSS_SALTLEN_DIGEST`, which is the default. Note this
|
|
1047
|
+
// differs from OpenSSL, which defaults to `RSA_PSS_SALTLEN_AUTO`.
|
|
696
1048
|
//
|
|
697
1049
|
// Returns one on success or zero on error.
|
|
698
|
-
//
|
|
699
|
-
// TODO(davidben): The default is currently -2. Switch it to -1.
|
|
700
1050
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx,
|
|
701
1051
|
int salt_len);
|
|
702
1052
|
|
|
703
|
-
// EVP_PKEY_CTX_get_rsa_pss_saltlen sets
|
|
1053
|
+
// EVP_PKEY_CTX_get_rsa_pss_saltlen sets `*out_salt_len` to the salt length of
|
|
704
1054
|
// a PSS-padded signature. See the documentation for
|
|
705
|
-
//
|
|
1055
|
+
// `EVP_PKEY_CTX_set_rsa_pss_saltlen` for details of the special values that it
|
|
706
1056
|
// can take.
|
|
707
1057
|
//
|
|
708
1058
|
// Returns one on success or zero on error.
|
|
@@ -715,12 +1065,14 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx,
|
|
|
715
1065
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx,
|
|
716
1066
|
int bits);
|
|
717
1067
|
|
|
718
|
-
// EVP_PKEY_CTX_set_rsa_keygen_pubexp sets
|
|
719
|
-
// generation. Returns one on success or zero on error.
|
|
1068
|
+
// EVP_PKEY_CTX_set_rsa_keygen_pubexp sets `e` as the public exponent for key
|
|
1069
|
+
// generation. Returns one on success or zero on error. On success, `ctx` takes
|
|
1070
|
+
// ownership of `e`. The library will then call `BN_free` on `e` when `ctx` is
|
|
1071
|
+
// destroyed.
|
|
720
1072
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx,
|
|
721
1073
|
BIGNUM *e);
|
|
722
1074
|
|
|
723
|
-
// EVP_PKEY_CTX_set_rsa_oaep_md sets
|
|
1075
|
+
// EVP_PKEY_CTX_set_rsa_oaep_md sets `md` as the digest used in OAEP padding.
|
|
724
1076
|
// Returns one on success or zero on error. If unset, the default is SHA-1.
|
|
725
1077
|
// Callers are recommended to overwrite this default.
|
|
726
1078
|
//
|
|
@@ -728,35 +1080,35 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx,
|
|
|
728
1080
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx,
|
|
729
1081
|
const EVP_MD *md);
|
|
730
1082
|
|
|
731
|
-
// EVP_PKEY_CTX_get_rsa_oaep_md sets
|
|
1083
|
+
// EVP_PKEY_CTX_get_rsa_oaep_md sets `*out_md` to the digest function used in
|
|
732
1084
|
// OAEP padding. Returns one on success or zero on error.
|
|
733
1085
|
OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx,
|
|
734
1086
|
const EVP_MD **out_md);
|
|
735
1087
|
|
|
736
|
-
// EVP_PKEY_CTX_set_rsa_mgf1_md sets
|
|
1088
|
+
// EVP_PKEY_CTX_set_rsa_mgf1_md sets `md` as the digest used in MGF1. Returns
|
|
737
1089
|
// one on success or zero on error.
|
|
738
1090
|
//
|
|
739
|
-
// If unset, the default is the signing hash for
|
|
740
|
-
// OAEP hash for
|
|
1091
|
+
// If unset, the default is the signing hash for `RSA_PKCS1_PSS_PADDING` and the
|
|
1092
|
+
// OAEP hash for `RSA_PKCS1_OAEP_PADDING`. Callers are recommended to use this
|
|
741
1093
|
// default and not call this function.
|
|
742
1094
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx,
|
|
743
1095
|
const EVP_MD *md);
|
|
744
1096
|
|
|
745
|
-
// EVP_PKEY_CTX_get_rsa_mgf1_md sets
|
|
1097
|
+
// EVP_PKEY_CTX_get_rsa_mgf1_md sets `*out_md` to the digest function used in
|
|
746
1098
|
// MGF1. Returns one on success or zero on error.
|
|
747
1099
|
OPENSSL_EXPORT int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx,
|
|
748
1100
|
const EVP_MD **out_md);
|
|
749
1101
|
|
|
750
|
-
// EVP_PKEY_CTX_set0_rsa_oaep_label sets
|
|
751
|
-
// label used in OAEP. DANGER: On success, this call takes ownership of
|
|
752
|
-
// and will call
|
|
1102
|
+
// EVP_PKEY_CTX_set0_rsa_oaep_label sets `label_len` bytes from `label` as the
|
|
1103
|
+
// label used in OAEP. DANGER: On success, this call takes ownership of `label`
|
|
1104
|
+
// and will call `OPENSSL_free` on it when `ctx` is destroyed.
|
|
753
1105
|
//
|
|
754
1106
|
// Returns one on success or zero on error.
|
|
755
1107
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
|
|
756
1108
|
uint8_t *label,
|
|
757
1109
|
size_t label_len);
|
|
758
1110
|
|
|
759
|
-
// EVP_PKEY_CTX_get0_rsa_oaep_label sets
|
|
1111
|
+
// EVP_PKEY_CTX_get0_rsa_oaep_label sets `*out_label` to point to the internal
|
|
760
1112
|
// buffer containing the OAEP label (which may be NULL) and returns the length
|
|
761
1113
|
// of the label or a negative value on error.
|
|
762
1114
|
//
|
|
@@ -767,8 +1119,16 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
|
|
|
767
1119
|
|
|
768
1120
|
// EC specific control functions.
|
|
769
1121
|
|
|
1122
|
+
// EVP_PKEY_get_ec_curve_nid returns `pkey`'s curve as a NID constant, such as
|
|
1123
|
+
// `NID_X9_62_prime256v1`, or `NID_undef` if `pkey` is not an EC key.
|
|
1124
|
+
OPENSSL_EXPORT int EVP_PKEY_get_ec_curve_nid(const EVP_PKEY *pkey);
|
|
1125
|
+
|
|
1126
|
+
// EVP_PKEY_get_ec_point_conv_form returns `pkey`'s point conversion form as a
|
|
1127
|
+
// `POINT_CONVERSION_*` constant, or zero if `pkey` is not an EC key.
|
|
1128
|
+
OPENSSL_EXPORT int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey);
|
|
1129
|
+
|
|
770
1130
|
// EVP_PKEY_CTX_set_ec_paramgen_curve_nid sets the curve used for
|
|
771
|
-
//
|
|
1131
|
+
// `EVP_PKEY_keygen` or `EVP_PKEY_paramgen` operations to `nid`. It returns one
|
|
772
1132
|
// on success and zero on error.
|
|
773
1133
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx,
|
|
774
1134
|
int nid);
|
|
@@ -776,20 +1136,79 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx,
|
|
|
776
1136
|
|
|
777
1137
|
// Diffie-Hellman-specific control functions.
|
|
778
1138
|
|
|
779
|
-
// EVP_PKEY_CTX_set_dh_pad configures configures whether
|
|
780
|
-
//
|
|
781
|
-
// Diffie-Hellman shared secret. If
|
|
782
|
-
// from the secret. If
|
|
1139
|
+
// EVP_PKEY_CTX_set_dh_pad configures configures whether `ctx`, which must be an
|
|
1140
|
+
// `EVP_PKEY_derive` operation, configures the handling of leading zeros in the
|
|
1141
|
+
// Diffie-Hellman shared secret. If `pad` is zero, leading zeros are removed
|
|
1142
|
+
// from the secret. If `pad` is non-zero, the fixed-width shared secret is used
|
|
783
1143
|
// unmodified, as in PKCS #3. If this function is not called, the default is to
|
|
784
1144
|
// remove leading zeros.
|
|
785
1145
|
//
|
|
786
|
-
// WARNING: The behavior when
|
|
1146
|
+
// WARNING: The behavior when `pad` is zero leaks information about the shared
|
|
787
1147
|
// secret. This may result in side channel attacks such as
|
|
788
1148
|
// https://raccoon-attack.com/, particularly when the same private key is used
|
|
789
1149
|
// for multiple operations.
|
|
790
1150
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad);
|
|
791
1151
|
|
|
792
1152
|
|
|
1153
|
+
// Key encapsulation mechanism algorithms.
|
|
1154
|
+
//
|
|
1155
|
+
// Two APIs for working with key encapsulation mechanism (KEM) algorithms are
|
|
1156
|
+
// provided:
|
|
1157
|
+
//
|
|
1158
|
+
// 1. Create an `EVP_PKEY_CTX`, initialize it for the appropriate KEM operation
|
|
1159
|
+
// (see `EVP_PKEY_encapsulate_init` and `EVP_PKEY_decapsulate_init`), then
|
|
1160
|
+
// run the operation. This matches the OpenSSL API.
|
|
1161
|
+
//
|
|
1162
|
+
// 2. Pass an appropriate `EVP_KEM` object to the functions below to use it
|
|
1163
|
+
// for encapsulation and decapsulation operations with compatible `EVP_PKEY`
|
|
1164
|
+
// objects. This API requires fewer steps.
|
|
1165
|
+
//
|
|
1166
|
+
// The `EVP_KEM` API is only compatible with KEMs that use fixed-length
|
|
1167
|
+
// ciphertexts and secrets.
|
|
1168
|
+
|
|
1169
|
+
// EVP_kem_ml_kem_* implement ML-KEM, defined in FIPS 203.
|
|
1170
|
+
OPENSSL_EXPORT const EVP_KEM *EVP_kem_ml_kem_768(void);
|
|
1171
|
+
OPENSSL_EXPORT const EVP_KEM *EVP_kem_ml_kem_1024(void);
|
|
1172
|
+
|
|
1173
|
+
// EVP_kem_xwing implements the hybrid KEM known as X-Wing or MLKEM768-X25519,
|
|
1174
|
+
// defined in draft-irtf-cfrg-concrete-hybrid-kems.
|
|
1175
|
+
OPENSSL_EXPORT const EVP_KEM *EVP_kem_xwing(void);
|
|
1176
|
+
|
|
1177
|
+
// TODO(crbug.com/449751916): Add more supported KEMs.
|
|
1178
|
+
|
|
1179
|
+
// EVP_KEM_ciphertext_len returns the fixed length, in bytes, of a ciphertext
|
|
1180
|
+
// produced and consumed by `kem`.
|
|
1181
|
+
OPENSSL_EXPORT size_t EVP_KEM_ciphertext_len(const EVP_KEM *kem);
|
|
1182
|
+
|
|
1183
|
+
// EVP_KEM_secret_len returns the fixed length, in bytes, of the shared
|
|
1184
|
+
// secret produced and consumed by `kem`.
|
|
1185
|
+
OPENSSL_EXPORT size_t EVP_KEM_secret_len(const EVP_KEM *kem);
|
|
1186
|
+
|
|
1187
|
+
// EVP_KEM_encap uses `kem` to encapsulate a `peer_key`. It outputs a
|
|
1188
|
+
// ciphertext of length `ciphertext_len` into `*out_ciphertext` and outputs a
|
|
1189
|
+
// shared secret of length `secret_len` into `*out_secret`. `peer_key` must be
|
|
1190
|
+
// a public key of the type expected by `kem`. `ciphertext_len` and
|
|
1191
|
+
// `secret_len` must match the output of `EVP_KEM_ciphertext_len` and
|
|
1192
|
+
// `EVP_KEM_secret_len`, respectively, when called with `kem`. This function
|
|
1193
|
+
// returns one on success or zero on failure.
|
|
1194
|
+
OPENSSL_EXPORT int EVP_KEM_encap(const EVP_KEM *kem, uint8_t *out_ciphertext,
|
|
1195
|
+
size_t ciphertext_len, uint8_t *out_secret,
|
|
1196
|
+
size_t secret_len, const EVP_PKEY *peer_key);
|
|
1197
|
+
|
|
1198
|
+
// EVP_KEM_decap uses `kem` to decapsulate a `ciphertext` of length
|
|
1199
|
+
// `ciphertext_len`, using `key` as a decapsulation key. It outputs a shared
|
|
1200
|
+
// secret of length `secret_len` into `*out_secret`. `key` must be a private key
|
|
1201
|
+
// of the type expected by `kem`. `secret_len` must match the output of
|
|
1202
|
+
// `EVP_KEM_secret_len` when called with `kem`. This function returns one on
|
|
1203
|
+
// success or zero on failure. If `ciphertext` has been corrupted, the function
|
|
1204
|
+
// may fail or it may output a shared secret that appears to be random. Any
|
|
1205
|
+
// subsequent symmetric encryption using `*out_secret` must use an authenticated
|
|
1206
|
+
// encryption scheme in order to discover the decapsulation failure.
|
|
1207
|
+
OPENSSL_EXPORT int EVP_KEM_decap(const EVP_KEM *kem, uint8_t *out_secret,
|
|
1208
|
+
size_t secret_len, const uint8_t *ciphertext,
|
|
1209
|
+
size_t ciphertext_len, const EVP_PKEY *key);
|
|
1210
|
+
|
|
1211
|
+
|
|
793
1212
|
// Deprecated functions.
|
|
794
1213
|
|
|
795
1214
|
// EVP_PKEY_RSA2 was historically an alternate form for RSA public keys (OID
|
|
@@ -805,7 +1224,7 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad);
|
|
|
805
1224
|
#define EVP_PKEY_ED448 NID_ED448
|
|
806
1225
|
|
|
807
1226
|
// EVP_PKEY_get0 returns NULL. This function is provided for compatibility with
|
|
808
|
-
// OpenSSL but does not return anything. Use the typed
|
|
1227
|
+
// OpenSSL but does not return anything. Use the typed `EVP_PKEY_get0_*`
|
|
809
1228
|
// functions instead.
|
|
810
1229
|
OPENSSL_EXPORT void *EVP_PKEY_get0(const EVP_PKEY *pkey);
|
|
811
1230
|
|
|
@@ -824,80 +1243,105 @@ OPENSSL_EXPORT void OpenSSL_add_all_digests(void);
|
|
|
824
1243
|
// EVP_cleanup does nothing.
|
|
825
1244
|
OPENSSL_EXPORT void EVP_cleanup(void);
|
|
826
1245
|
|
|
1246
|
+
// EVP_default_properties_is_fips_enabled calls `FIPS_mode`.
|
|
1247
|
+
OPENSSL_EXPORT int EVP_default_properties_is_fips_enabled(OSSL_LIB_CTX *libctx);
|
|
1248
|
+
|
|
827
1249
|
OPENSSL_EXPORT void EVP_CIPHER_do_all_sorted(
|
|
828
1250
|
void (*callback)(const EVP_CIPHER *cipher, const char *name,
|
|
829
1251
|
const char *unused, void *arg),
|
|
830
1252
|
void *arg);
|
|
831
1253
|
|
|
832
|
-
OPENSSL_EXPORT void EVP_MD_do_all_sorted(void (*callback)(const EVP_MD *
|
|
1254
|
+
OPENSSL_EXPORT void EVP_MD_do_all_sorted(void (*callback)(const EVP_MD *md,
|
|
833
1255
|
const char *name,
|
|
834
1256
|
const char *unused,
|
|
835
1257
|
void *arg),
|
|
836
1258
|
void *arg);
|
|
837
1259
|
|
|
838
|
-
OPENSSL_EXPORT void EVP_MD_do_all(void (*callback)(const EVP_MD *
|
|
1260
|
+
OPENSSL_EXPORT void EVP_MD_do_all(void (*callback)(const EVP_MD *md,
|
|
839
1261
|
const char *name,
|
|
840
1262
|
const char *unused,
|
|
841
1263
|
void *arg),
|
|
842
1264
|
void *arg);
|
|
843
1265
|
|
|
844
|
-
|
|
845
|
-
|
|
1266
|
+
OPENSSL_EXPORT void EVP_MD_do_all_provided(
|
|
1267
|
+
OSSL_LIB_CTX *libctx, void (*callback)(EVP_MD *md, void *arg), void *arg);
|
|
1268
|
+
|
|
1269
|
+
// i2d_PrivateKey marshals a private key from `key` to type-specific format, as
|
|
1270
|
+
// described in `i2d_SAMPLE`.
|
|
846
1271
|
//
|
|
847
1272
|
// RSA keys are serialized as a DER-encoded RSAPublicKey (RFC 8017) structure.
|
|
848
1273
|
// EC keys are serialized as a DER-encoded ECPrivateKey (RFC 5915) structure.
|
|
849
1274
|
//
|
|
850
|
-
// Use
|
|
1275
|
+
// Use `RSA_marshal_private_key` or `EC_KEY_marshal_private_key` instead.
|
|
851
1276
|
OPENSSL_EXPORT int i2d_PrivateKey(const EVP_PKEY *key, uint8_t **outp);
|
|
852
1277
|
|
|
853
|
-
// i2d_PublicKey marshals a public key from
|
|
854
|
-
// described in
|
|
1278
|
+
// i2d_PublicKey marshals a public key from `key` to a type-specific format, as
|
|
1279
|
+
// described in `i2d_SAMPLE`.
|
|
855
1280
|
//
|
|
856
1281
|
// RSA keys are serialized as a DER-encoded RSAPublicKey (RFC 8017) structure.
|
|
857
1282
|
// EC keys are serialized as an EC point per SEC 1.
|
|
858
1283
|
//
|
|
859
|
-
// Use
|
|
1284
|
+
// Use `RSA_marshal_public_key` or `EC_POINT_point2cbb` instead.
|
|
860
1285
|
OPENSSL_EXPORT int i2d_PublicKey(const EVP_PKEY *key, uint8_t **outp);
|
|
861
1286
|
|
|
862
|
-
// d2i_PrivateKey parses a DER-encoded private key from
|
|
863
|
-
// as described in
|
|
1287
|
+
// d2i_PrivateKey parses a DER-encoded private key from `len` bytes at `*inp`,
|
|
1288
|
+
// as described in `d2i_SAMPLE`. The private key must have type `type`,
|
|
864
1289
|
// otherwise it will be rejected.
|
|
865
1290
|
//
|
|
866
1291
|
// This function tries to detect one of several formats. Instead, use
|
|
867
|
-
//
|
|
868
|
-
// RSAPrivateKey, and
|
|
1292
|
+
// `EVP_parse_private_key` for a PrivateKeyInfo, `RSA_parse_private_key` for an
|
|
1293
|
+
// RSAPrivateKey, and `EC_parse_private_key` for an ECPrivateKey.
|
|
869
1294
|
OPENSSL_EXPORT EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out,
|
|
870
1295
|
const uint8_t **inp, long len);
|
|
871
1296
|
|
|
872
|
-
// d2i_AutoPrivateKey acts the same as
|
|
1297
|
+
// d2i_AutoPrivateKey acts the same as `d2i_PrivateKey`, but detects the type
|
|
873
1298
|
// of the private key.
|
|
874
1299
|
//
|
|
875
1300
|
// This function tries to detect one of several formats. Instead, use
|
|
876
|
-
//
|
|
877
|
-
// RSAPrivateKey, and
|
|
1301
|
+
// `EVP_parse_private_key` for a PrivateKeyInfo, `RSA_parse_private_key` for an
|
|
1302
|
+
// RSAPrivateKey, and `EC_parse_private_key` for an ECPrivateKey.
|
|
878
1303
|
OPENSSL_EXPORT EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp,
|
|
879
1304
|
long len);
|
|
880
1305
|
|
|
881
|
-
// d2i_PublicKey parses a public key from
|
|
882
|
-
// specific format specified by
|
|
1306
|
+
// d2i_PublicKey parses a public key from `len` bytes at `*inp` in a type-
|
|
1307
|
+
// specific format specified by `type`, as described in `d2i_SAMPLE`.
|
|
883
1308
|
//
|
|
884
|
-
// The only supported value for
|
|
1309
|
+
// The only supported value for `type` is `EVP_PKEY_RSA`, which parses a
|
|
885
1310
|
// DER-encoded RSAPublicKey (RFC 8017) structure. Parsing EC keys is not
|
|
886
1311
|
// supported by this function.
|
|
887
1312
|
//
|
|
888
|
-
// Use
|
|
1313
|
+
// Use `RSA_parse_public_key` instead.
|
|
889
1314
|
OPENSSL_EXPORT EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **out,
|
|
890
1315
|
const uint8_t **inp, long len);
|
|
891
1316
|
|
|
892
|
-
// EVP_PKEY_CTX_set_ec_param_enc returns one if
|
|
893
|
-
//
|
|
1317
|
+
// EVP_PKEY_CTX_set_ec_param_enc returns one if `encoding` is
|
|
1318
|
+
// `OPENSSL_EC_NAMED_CURVE` or zero with an error otherwise.
|
|
894
1319
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx,
|
|
895
1320
|
int encoding);
|
|
896
1321
|
|
|
897
|
-
//
|
|
898
|
-
//
|
|
1322
|
+
// EVP_PKEY_set_type sets the type of `pkey` to `type`. It returns one if
|
|
1323
|
+
// successful or zero if the `type` argument is not one of the `EVP_PKEY_*`
|
|
1324
|
+
// values supported for use with this function. If `pkey` is NULL, it simply
|
|
1325
|
+
// reports whether the type is known.
|
|
1326
|
+
//
|
|
1327
|
+
// There are very few cases where this function is useful. Changing `pkey`'s
|
|
1328
|
+
// type clears any previously stored keys, so there is no benefit to loading a
|
|
1329
|
+
// key and then changing its type. Although `pkey` is left with a type
|
|
1330
|
+
// configured, it has no key, and functions which set a key, such as
|
|
1331
|
+
// `EVP_PKEY_set1_RSA`, will configure a type anyway. If writing unit tests that
|
|
1332
|
+
// are only sensitive to the type of a key, it is preferable to construct a real
|
|
1333
|
+
// key, so that tests are more representative of production code.
|
|
1334
|
+
//
|
|
1335
|
+
// The only API pattern which requires this function is
|
|
1336
|
+
// `EVP_PKEY_set1_tls_encodedpoint` with X25519, which requires a half-empty
|
|
1337
|
+
// `EVP_PKEY` that was first configured with `EVP_PKEY_X25519`. Currently, all
|
|
1338
|
+
// other values of `type` will result in an error.
|
|
1339
|
+
OPENSSL_EXPORT int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
|
|
1340
|
+
|
|
1341
|
+
// EVP_PKEY_set1_tls_encodedpoint replaces `pkey` with a public key encoded by
|
|
1342
|
+
// `in`. It returns one on success and zero on error.
|
|
899
1343
|
//
|
|
900
|
-
// If
|
|
1344
|
+
// If `pkey` is an EC key, the format is an X9.62 point and `pkey` must already
|
|
901
1345
|
// have an EC group configured. If it is an X25519 key, it is the 32-byte X25519
|
|
902
1346
|
// public key representation. This function is not supported for other key types
|
|
903
1347
|
// and will fail.
|
|
@@ -905,19 +1349,19 @@ OPENSSL_EXPORT int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey,
|
|
|
905
1349
|
const uint8_t *in,
|
|
906
1350
|
size_t len);
|
|
907
1351
|
|
|
908
|
-
// EVP_PKEY_get1_tls_encodedpoint sets
|
|
909
|
-
// containing the raw encoded public key for
|
|
910
|
-
//
|
|
1352
|
+
// EVP_PKEY_get1_tls_encodedpoint sets `*out_ptr` to a newly-allocated buffer
|
|
1353
|
+
// containing the raw encoded public key for `pkey`. The caller must call
|
|
1354
|
+
// `OPENSSL_free` to release this buffer. The function returns the length of the
|
|
911
1355
|
// buffer on success and zero on error.
|
|
912
1356
|
//
|
|
913
|
-
// If
|
|
1357
|
+
// If `pkey` is an EC key, the format is an X9.62 point with uncompressed
|
|
914
1358
|
// coordinates. If it is an X25519 key, it is the 32-byte X25519 public key
|
|
915
1359
|
// representation. This function is not supported for other key types and will
|
|
916
1360
|
// fail.
|
|
917
1361
|
OPENSSL_EXPORT size_t EVP_PKEY_get1_tls_encodedpoint(const EVP_PKEY *pkey,
|
|
918
1362
|
uint8_t **out_ptr);
|
|
919
1363
|
|
|
920
|
-
// EVP_PKEY_base_id calls
|
|
1364
|
+
// EVP_PKEY_base_id calls `EVP_PKEY_id`.
|
|
921
1365
|
OPENSSL_EXPORT int EVP_PKEY_base_id(const EVP_PKEY *pkey);
|
|
922
1366
|
|
|
923
1367
|
// EVP_PKEY_CTX_set_rsa_pss_keygen_md returns 0.
|
|
@@ -932,56 +1376,56 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx,
|
|
|
932
1376
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx,
|
|
933
1377
|
const EVP_MD *md);
|
|
934
1378
|
|
|
935
|
-
// i2d_PUBKEY marshals
|
|
936
|
-
// described in
|
|
1379
|
+
// i2d_PUBKEY marshals `pkey` as a DER-encoded SubjectPublicKeyInfo, as
|
|
1380
|
+
// described in `i2d_SAMPLE`.
|
|
937
1381
|
//
|
|
938
|
-
// Use
|
|
1382
|
+
// Use `EVP_marshal_public_key` instead.
|
|
939
1383
|
OPENSSL_EXPORT int i2d_PUBKEY(const EVP_PKEY *pkey, uint8_t **outp);
|
|
940
1384
|
|
|
941
|
-
// d2i_PUBKEY parses a DER-encoded SubjectPublicKeyInfo from
|
|
942
|
-
//
|
|
1385
|
+
// d2i_PUBKEY parses a DER-encoded SubjectPublicKeyInfo from `len` bytes at
|
|
1386
|
+
// `*inp`, as described in `d2i_SAMPLE`.
|
|
943
1387
|
//
|
|
944
|
-
// Use
|
|
1388
|
+
// Use `EVP_parse_public_key` instead.
|
|
945
1389
|
OPENSSL_EXPORT EVP_PKEY *d2i_PUBKEY(EVP_PKEY **out, const uint8_t **inp,
|
|
946
1390
|
long len);
|
|
947
1391
|
|
|
948
|
-
// i2d_RSA_PUBKEY marshals
|
|
949
|
-
// structure, as described in
|
|
1392
|
+
// i2d_RSA_PUBKEY marshals `rsa` as a DER-encoded SubjectPublicKeyInfo
|
|
1393
|
+
// structure, as described in `i2d_SAMPLE`.
|
|
950
1394
|
//
|
|
951
|
-
// Use
|
|
1395
|
+
// Use `EVP_marshal_public_key` instead.
|
|
952
1396
|
OPENSSL_EXPORT int i2d_RSA_PUBKEY(const RSA *rsa, uint8_t **outp);
|
|
953
1397
|
|
|
954
1398
|
// d2i_RSA_PUBKEY parses an RSA public key as a DER-encoded SubjectPublicKeyInfo
|
|
955
|
-
// from
|
|
1399
|
+
// from `len` bytes at `*inp`, as described in `d2i_SAMPLE`.
|
|
956
1400
|
// SubjectPublicKeyInfo structures containing other key types are rejected.
|
|
957
1401
|
//
|
|
958
|
-
// Use
|
|
1402
|
+
// Use `EVP_parse_public_key` instead.
|
|
959
1403
|
OPENSSL_EXPORT RSA *d2i_RSA_PUBKEY(RSA **out, const uint8_t **inp, long len);
|
|
960
1404
|
|
|
961
|
-
// i2d_DSA_PUBKEY marshals
|
|
962
|
-
// described in
|
|
1405
|
+
// i2d_DSA_PUBKEY marshals `dsa` as a DER-encoded SubjectPublicKeyInfo, as
|
|
1406
|
+
// described in `i2d_SAMPLE`.
|
|
963
1407
|
//
|
|
964
|
-
// Use
|
|
1408
|
+
// Use `EVP_marshal_public_key` instead.
|
|
965
1409
|
OPENSSL_EXPORT int i2d_DSA_PUBKEY(const DSA *dsa, uint8_t **outp);
|
|
966
1410
|
|
|
967
1411
|
// d2i_DSA_PUBKEY parses a DSA public key as a DER-encoded SubjectPublicKeyInfo
|
|
968
|
-
// from
|
|
1412
|
+
// from `len` bytes at `*inp`, as described in `d2i_SAMPLE`.
|
|
969
1413
|
// SubjectPublicKeyInfo structures containing other key types are rejected.
|
|
970
1414
|
//
|
|
971
|
-
// Use
|
|
1415
|
+
// Use `EVP_parse_public_key` instead.
|
|
972
1416
|
OPENSSL_EXPORT DSA *d2i_DSA_PUBKEY(DSA **out, const uint8_t **inp, long len);
|
|
973
1417
|
|
|
974
|
-
// i2d_EC_PUBKEY marshals
|
|
975
|
-
// described in
|
|
1418
|
+
// i2d_EC_PUBKEY marshals `ec_key` as a DER-encoded SubjectPublicKeyInfo, as
|
|
1419
|
+
// described in `i2d_SAMPLE`.
|
|
976
1420
|
//
|
|
977
|
-
// Use
|
|
1421
|
+
// Use `EVP_marshal_public_key` instead.
|
|
978
1422
|
OPENSSL_EXPORT int i2d_EC_PUBKEY(const EC_KEY *ec_key, uint8_t **outp);
|
|
979
1423
|
|
|
980
1424
|
// d2i_EC_PUBKEY parses an EC public key as a DER-encoded SubjectPublicKeyInfo
|
|
981
|
-
// from
|
|
1425
|
+
// from `len` bytes at `*inp`, as described in `d2i_SAMPLE`.
|
|
982
1426
|
// SubjectPublicKeyInfo structures containing other key types are rejected.
|
|
983
1427
|
//
|
|
984
|
-
// Use
|
|
1428
|
+
// Use `EVP_parse_public_key` instead.
|
|
985
1429
|
OPENSSL_EXPORT EC_KEY *d2i_EC_PUBKEY(EC_KEY **out, const uint8_t **inp,
|
|
986
1430
|
long len);
|
|
987
1431
|
|
|
@@ -993,18 +1437,51 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx,
|
|
|
993
1437
|
OPENSSL_EXPORT int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx,
|
|
994
1438
|
int qbits);
|
|
995
1439
|
|
|
996
|
-
// EVP_PKEY_assign sets the underlying key of
|
|
997
|
-
// the given type. If successful, it returns one. If the
|
|
998
|
-
// is not one of
|
|
999
|
-
//
|
|
1000
|
-
//
|
|
1440
|
+
// EVP_PKEY_assign sets the underlying key of `pkey` to `key`, which must be of
|
|
1441
|
+
// the given type. If successful, it returns one. If the `type` argument
|
|
1442
|
+
// is not one of `EVP_PKEY_RSA`, `EVP_PKEY_DSA`, or `EVP_PKEY_EC` values or if
|
|
1443
|
+
// `key` is NULL, it returns zero. This function may not be used with other
|
|
1444
|
+
// `EVP_PKEY_*` types.
|
|
1001
1445
|
//
|
|
1002
|
-
// Use the
|
|
1446
|
+
// Use the `EVP_PKEY_assign_*` functions instead.
|
|
1003
1447
|
OPENSSL_EXPORT int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);
|
|
1004
1448
|
|
|
1005
|
-
// EVP_PKEY_type returns
|
|
1449
|
+
// EVP_PKEY_type returns `nid`.
|
|
1006
1450
|
OPENSSL_EXPORT int EVP_PKEY_type(int nid);
|
|
1007
1451
|
|
|
1452
|
+
// EVP_PKEY_new_raw_private_key interprets `in` as a raw private key of type
|
|
1453
|
+
// `type`, which must be an `EVP_PKEY_*` constant, such as `EVP_PKEY_X25519`,
|
|
1454
|
+
// and returns a newly-allocated `EVP_PKEY`, or nullptr on error.
|
|
1455
|
+
//
|
|
1456
|
+
// Prefer `EVP_PKEY_from_raw_private_key`, which allows dead code elimination to
|
|
1457
|
+
// discard algorithms that aren't reachable from the caller.
|
|
1458
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *unused,
|
|
1459
|
+
const uint8_t *in,
|
|
1460
|
+
size_t len);
|
|
1461
|
+
|
|
1462
|
+
// EVP_PKEY_new_raw_public_key interprets `in` as a raw public key of type
|
|
1463
|
+
// `type`, which must be an `EVP_PKEY_*` constant, such as `EVP_PKEY_X25519`,
|
|
1464
|
+
// and returns a newly-allocated `EVP_PKEY`, or nullptr on error.
|
|
1465
|
+
//
|
|
1466
|
+
// Prefer `EVP_PKEY_from_raw_private_key`, which allows dead code elimination to
|
|
1467
|
+
// discard algorithms that aren't reachable from the caller.
|
|
1468
|
+
OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused,
|
|
1469
|
+
const uint8_t *in,
|
|
1470
|
+
size_t len);
|
|
1471
|
+
|
|
1472
|
+
// EVP_PKEY_cmp calls `EVP_PKEY_eq`. It returns one if public keys are equal and
|
|
1473
|
+
// zero otherwise.
|
|
1474
|
+
//
|
|
1475
|
+
// WARNING: This differs from the traditional return value of a "cmp" function.
|
|
1476
|
+
OPENSSL_EXPORT int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
|
|
1477
|
+
|
|
1478
|
+
// EVP_PKEY_cmp_parameters calls `EVP_PKEY_parameters_eq`. It returns one if
|
|
1479
|
+
// parameters are equal and zero otherwise.
|
|
1480
|
+
//
|
|
1481
|
+
// WARNING: This differs from the traditional return value of a "cmp" function.
|
|
1482
|
+
OPENSSL_EXPORT int EVP_PKEY_cmp_parameters(const EVP_PKEY *a,
|
|
1483
|
+
const EVP_PKEY *b);
|
|
1484
|
+
|
|
1008
1485
|
|
|
1009
1486
|
// Preprocessor compatibility section (hidden).
|
|
1010
1487
|
//
|
|
@@ -1012,10 +1489,13 @@ OPENSSL_EXPORT int EVP_PKEY_type(int nid);
|
|
|
1012
1489
|
// constants to 'ctrl' functions. To avoid breaking #ifdefs in consumers, this
|
|
1013
1490
|
// section defines a number of legacy macros.
|
|
1014
1491
|
|
|
1015
|
-
//
|
|
1016
|
-
// is no need to define conflicting macros
|
|
1017
|
-
|
|
1492
|
+
// `BORINGSSL_PREFIX` already makes some of these symbols into macros, so there
|
|
1493
|
+
// is no need to define conflicting macros; however it is compiler specific
|
|
1494
|
+
// which ones become macros.
|
|
1495
|
+
#if !defined(EVP_PKEY_CTX_set_rsa_oaep_md)
|
|
1018
1496
|
#define EVP_PKEY_CTX_set_rsa_oaep_md EVP_PKEY_CTX_set_rsa_oaep_md
|
|
1497
|
+
#endif
|
|
1498
|
+
#if !defined(EVP_PKEY_CTX_set0_rsa_oaep_label)
|
|
1019
1499
|
#define EVP_PKEY_CTX_set0_rsa_oaep_label EVP_PKEY_CTX_set0_rsa_oaep_label
|
|
1020
1500
|
#endif
|
|
1021
1501
|
|