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
|
@@ -17,13 +17,15 @@
|
|
|
17
17
|
#include <assert.h>
|
|
18
18
|
#include <stdio.h>
|
|
19
19
|
#include <stdlib.h>
|
|
20
|
+
|
|
21
|
+
#include <iterator>
|
|
20
22
|
#include <type_traits>
|
|
21
23
|
|
|
22
24
|
#include <openssl/bn.h>
|
|
23
25
|
#include <openssl/hmac.h>
|
|
24
26
|
#include <openssl/mem.h>
|
|
25
27
|
#include <openssl/rand.h>
|
|
26
|
-
#include <openssl/
|
|
28
|
+
#include <openssl/sha2.h>
|
|
27
29
|
|
|
28
30
|
#include "../internal.h"
|
|
29
31
|
#include "internal.h"
|
|
@@ -36,6 +38,9 @@
|
|
|
36
38
|
#include <arm_neon.h>
|
|
37
39
|
#endif
|
|
38
40
|
|
|
41
|
+
|
|
42
|
+
using namespace bssl;
|
|
43
|
+
|
|
39
44
|
// This is an implementation of [HRSS], but with a KEM transformation based on
|
|
40
45
|
// [SXY]. The primary references are:
|
|
41
46
|
|
|
@@ -48,12 +53,11 @@
|
|
|
48
53
|
// NTRUCOMP: https://eprint.iacr.org/2018/1174
|
|
49
54
|
// SAFEGCD: https://gcd.cr.yp.to/papers.html#safegcd
|
|
50
55
|
|
|
51
|
-
|
|
52
56
|
// Vector operations.
|
|
53
57
|
//
|
|
54
58
|
// A couple of functions in this file can use vector operations to meaningful
|
|
55
59
|
// effect. If we're building for a target that has a supported vector unit,
|
|
56
|
-
//
|
|
60
|
+
// `HRSS_HAVE_VECTOR_UNIT` will be defined and `vec_t` will be typedefed to a
|
|
57
61
|
// 128-bit vector. The following functions abstract over the differences between
|
|
58
62
|
// NEON and SSE2 for implementing some vector operations.
|
|
59
63
|
|
|
@@ -62,31 +66,32 @@
|
|
|
62
66
|
#if defined(OPENSSL_SSE2) && (defined(__clang__) || !defined(_MSC_VER))
|
|
63
67
|
|
|
64
68
|
#define HRSS_HAVE_VECTOR_UNIT
|
|
69
|
+
|
|
65
70
|
typedef __m128i vec_t;
|
|
66
71
|
|
|
67
72
|
// vec_capable returns one iff the current platform supports SSE2.
|
|
68
|
-
static int vec_capable(
|
|
73
|
+
static int vec_capable() { return 1; }
|
|
69
74
|
|
|
70
|
-
// vec_add performs a pair-wise addition of four uint16s from
|
|
71
|
-
static
|
|
75
|
+
// vec_add performs a pair-wise addition of four uint16s from `a` and `b`.
|
|
76
|
+
static vec_t vec_add(vec_t a, vec_t b) { return _mm_add_epi16(a, b); }
|
|
72
77
|
|
|
73
|
-
// vec_sub performs a pair-wise subtraction of four uint16s from
|
|
74
|
-
static
|
|
78
|
+
// vec_sub performs a pair-wise subtraction of four uint16s from `a` and `b`.
|
|
79
|
+
static vec_t vec_sub(vec_t a, vec_t b) { return _mm_sub_epi16(a, b); }
|
|
75
80
|
|
|
76
|
-
// vec_mul multiplies each uint16_t in
|
|
81
|
+
// vec_mul multiplies each uint16_t in `a` by `b` and returns the resulting
|
|
77
82
|
// vector.
|
|
78
|
-
static
|
|
83
|
+
static vec_t vec_mul(vec_t a, uint16_t b) {
|
|
79
84
|
return _mm_mullo_epi16(a, _mm_set1_epi16(b));
|
|
80
85
|
}
|
|
81
86
|
|
|
82
|
-
// vec_fma multiplies each uint16_t in
|
|
87
|
+
// vec_fma multiplies each uint16_t in `b` by `c`, adds the result to `a`, and
|
|
83
88
|
// returns the resulting vector.
|
|
84
|
-
static
|
|
89
|
+
static vec_t vec_fma(vec_t a, vec_t b, uint16_t c) {
|
|
85
90
|
return _mm_add_epi16(a, _mm_mullo_epi16(b, _mm_set1_epi16(c)));
|
|
86
91
|
}
|
|
87
92
|
|
|
88
|
-
// vec3_rshift_word right-shifts the 24 uint16_t's in
|
|
89
|
-
static
|
|
93
|
+
// vec3_rshift_word right-shifts the 24 uint16_t's in `v` by one uint16.
|
|
94
|
+
static void vec3_rshift_word(vec_t v[3]) {
|
|
90
95
|
// Intel's left and right shifting is backwards compared to the order in
|
|
91
96
|
// memory because they're based on little-endian order of words (and not just
|
|
92
97
|
// bytes). So the shifts in this function will be backwards from what one
|
|
@@ -102,8 +107,8 @@ static inline void vec3_rshift_word(vec_t v[3]) {
|
|
|
102
107
|
v[2] |= carry1;
|
|
103
108
|
}
|
|
104
109
|
|
|
105
|
-
// vec4_rshift_word right-shifts the 32 uint16_t's in
|
|
106
|
-
static
|
|
110
|
+
// vec4_rshift_word right-shifts the 32 uint16_t's in `v` by one uint16.
|
|
111
|
+
static void vec4_rshift_word(vec_t v[4]) {
|
|
107
112
|
// Intel's left and right shifting is backwards compared to the order in
|
|
108
113
|
// memory because they're based on little-endian order of words (and not just
|
|
109
114
|
// bytes). So the shifts in this function will be backwards from what one
|
|
@@ -123,15 +128,15 @@ static inline void vec4_rshift_word(vec_t v[4]) {
|
|
|
123
128
|
v[3] |= carry2;
|
|
124
129
|
}
|
|
125
130
|
|
|
126
|
-
// vec_merge_3_5 takes the final three uint16_t's from
|
|
127
|
-
// five from
|
|
128
|
-
static
|
|
131
|
+
// vec_merge_3_5 takes the final three uint16_t's from `left`, appends the first
|
|
132
|
+
// five from `right`, and returns the resulting vector.
|
|
133
|
+
static vec_t vec_merge_3_5(vec_t left, vec_t right) {
|
|
129
134
|
return _mm_srli_si128(left, 10) | _mm_slli_si128(right, 6);
|
|
130
135
|
}
|
|
131
136
|
|
|
132
|
-
// poly3_vec_lshift1 left-shifts the 768 bits in
|
|
137
|
+
// poly3_vec_lshift1 left-shifts the 768 bits in `a_s`, and in `a_a`, by one
|
|
133
138
|
// bit.
|
|
134
|
-
static
|
|
139
|
+
static void poly3_vec_lshift1(vec_t a_s[6], vec_t a_a[6]) {
|
|
135
140
|
vec_t carry_s = {0};
|
|
136
141
|
vec_t carry_a = {0};
|
|
137
142
|
|
|
@@ -150,9 +155,9 @@ static inline void poly3_vec_lshift1(vec_t a_s[6], vec_t a_a[6]) {
|
|
|
150
155
|
}
|
|
151
156
|
}
|
|
152
157
|
|
|
153
|
-
// poly3_vec_rshift1 right-shifts the 768 bits in
|
|
158
|
+
// poly3_vec_rshift1 right-shifts the 768 bits in `a_s`, and in `a_a`, by one
|
|
154
159
|
// bit.
|
|
155
|
-
static
|
|
160
|
+
static void poly3_vec_rshift1(vec_t a_s[6], vec_t a_a[6]) {
|
|
156
161
|
vec_t carry_s = {0};
|
|
157
162
|
vec_t carry_a = {0};
|
|
158
163
|
|
|
@@ -171,15 +176,15 @@ static inline void poly3_vec_rshift1(vec_t a_s[6], vec_t a_a[6]) {
|
|
|
171
176
|
}
|
|
172
177
|
}
|
|
173
178
|
|
|
174
|
-
// vec_broadcast_bit duplicates the least-significant bit in
|
|
179
|
+
// vec_broadcast_bit duplicates the least-significant bit in `a` to all bits in
|
|
175
180
|
// a vector and returns the result.
|
|
176
|
-
static
|
|
181
|
+
static vec_t vec_broadcast_bit(vec_t a) {
|
|
177
182
|
return _mm_shuffle_epi32(_mm_srai_epi32(_mm_slli_epi64(a, 63), 31),
|
|
178
183
|
0b01010101);
|
|
179
184
|
}
|
|
180
185
|
|
|
181
|
-
// vec_get_word returns the
|
|
182
|
-
// compiler requires that
|
|
186
|
+
// vec_get_word returns the `i`th uint16_t in `v`. (This is a macro because the
|
|
187
|
+
// compiler requires that `i` be a compile-time constant.)
|
|
183
188
|
#define vec_get_word(v, i) _mm_extract_epi16(v, i)
|
|
184
189
|
|
|
185
190
|
#elif (defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)) && defined(__ARM_NEON)
|
|
@@ -190,26 +195,26 @@ typedef uint16x8_t vec_t;
|
|
|
190
195
|
// These functions perform the same actions as the SSE2 function of the same
|
|
191
196
|
// name, above.
|
|
192
197
|
|
|
193
|
-
static int vec_capable(
|
|
198
|
+
static int vec_capable() { return CRYPTO_is_NEON_capable(); }
|
|
194
199
|
|
|
195
|
-
static
|
|
200
|
+
static vec_t vec_add(vec_t a, vec_t b) { return a + b; }
|
|
196
201
|
|
|
197
|
-
static
|
|
202
|
+
static vec_t vec_sub(vec_t a, vec_t b) { return a - b; }
|
|
198
203
|
|
|
199
|
-
static
|
|
204
|
+
static vec_t vec_mul(vec_t a, uint16_t b) { return vmulq_n_u16(a, b); }
|
|
200
205
|
|
|
201
|
-
static
|
|
206
|
+
static vec_t vec_fma(vec_t a, vec_t b, uint16_t c) {
|
|
202
207
|
return vmlaq_n_u16(a, b, c);
|
|
203
208
|
}
|
|
204
209
|
|
|
205
|
-
static
|
|
210
|
+
static void vec3_rshift_word(vec_t v[3]) {
|
|
206
211
|
const uint16x8_t kZero = {0};
|
|
207
212
|
v[2] = vextq_u16(v[1], v[2], 7);
|
|
208
213
|
v[1] = vextq_u16(v[0], v[1], 7);
|
|
209
214
|
v[0] = vextq_u16(kZero, v[0], 7);
|
|
210
215
|
}
|
|
211
216
|
|
|
212
|
-
static
|
|
217
|
+
static void vec4_rshift_word(vec_t v[4]) {
|
|
213
218
|
const uint16x8_t kZero = {0};
|
|
214
219
|
v[3] = vextq_u16(v[2], v[3], 7);
|
|
215
220
|
v[2] = vextq_u16(v[1], v[2], 7);
|
|
@@ -217,20 +222,20 @@ static inline void vec4_rshift_word(vec_t v[4]) {
|
|
|
217
222
|
v[0] = vextq_u16(kZero, v[0], 7);
|
|
218
223
|
}
|
|
219
224
|
|
|
220
|
-
static
|
|
225
|
+
static vec_t vec_merge_3_5(vec_t left, vec_t right) {
|
|
221
226
|
return vextq_u16(left, right, 5);
|
|
222
227
|
}
|
|
223
228
|
|
|
224
|
-
static
|
|
229
|
+
static uint16_t vec_get_word(vec_t v, unsigned i) { return v[i]; }
|
|
225
230
|
|
|
226
231
|
#if !defined(OPENSSL_AARCH64)
|
|
227
232
|
|
|
228
|
-
static
|
|
233
|
+
static vec_t vec_broadcast_bit(vec_t a) {
|
|
229
234
|
a = (vec_t)vshrq_n_s16(((int16x8_t)a) << 15, 15);
|
|
230
235
|
return vdupq_lane_u16(vget_low_u16(a), 0);
|
|
231
236
|
}
|
|
232
237
|
|
|
233
|
-
static
|
|
238
|
+
static void poly3_vec_lshift1(vec_t a_s[6], vec_t a_a[6]) {
|
|
234
239
|
vec_t carry_s = {0};
|
|
235
240
|
vec_t carry_a = {0};
|
|
236
241
|
const vec_t kZero = {0};
|
|
@@ -250,7 +255,7 @@ static inline void poly3_vec_lshift1(vec_t a_s[6], vec_t a_a[6]) {
|
|
|
250
255
|
}
|
|
251
256
|
}
|
|
252
257
|
|
|
253
|
-
static
|
|
258
|
+
static void poly3_vec_rshift1(vec_t a_s[6], vec_t a_a[6]) {
|
|
254
259
|
vec_t carry_s = {0};
|
|
255
260
|
vec_t carry_a = {0};
|
|
256
261
|
const vec_t kZero = {0};
|
|
@@ -275,7 +280,7 @@ static inline void poly3_vec_rshift1(vec_t a_s[6], vec_t a_a[6]) {
|
|
|
275
280
|
#endif // (ARM || AARCH64) && NEON
|
|
276
281
|
|
|
277
282
|
// Polynomials in this scheme have N terms.
|
|
278
|
-
|
|
283
|
+
#define N HRSS_N
|
|
279
284
|
|
|
280
285
|
// Underlying data types and arithmetic operations.
|
|
281
286
|
// ------------------------------------------------
|
|
@@ -295,7 +300,7 @@ static void poly2_zero(struct poly2 *p) {
|
|
|
295
300
|
OPENSSL_memset(&p->v[0], 0, sizeof(crypto_word_t) * WORDS_PER_POLY);
|
|
296
301
|
}
|
|
297
302
|
|
|
298
|
-
// word_reverse returns
|
|
303
|
+
// word_reverse returns `in` with the bits in reverse order.
|
|
299
304
|
static crypto_word_t word_reverse(crypto_word_t in) {
|
|
300
305
|
#if defined(OPENSSL_64_BIT)
|
|
301
306
|
static const crypto_word_t kMasks[6] = {
|
|
@@ -309,19 +314,19 @@ static crypto_word_t word_reverse(crypto_word_t in) {
|
|
|
309
314
|
};
|
|
310
315
|
#endif
|
|
311
316
|
|
|
312
|
-
for (size_t i = 0; i <
|
|
317
|
+
for (size_t i = 0; i < std::size(kMasks); i++) {
|
|
313
318
|
in = ((in >> (1 << i)) & kMasks[i]) | ((in & kMasks[i]) << (1 << i));
|
|
314
319
|
}
|
|
315
320
|
|
|
316
321
|
return in;
|
|
317
322
|
}
|
|
318
323
|
|
|
319
|
-
// lsb_to_all replicates the least-significant bit of
|
|
324
|
+
// lsb_to_all replicates the least-significant bit of `v` to all bits of the
|
|
320
325
|
// word. This is used in bit-slicing operations to make a vector from a fixed
|
|
321
326
|
// value.
|
|
322
327
|
static crypto_word_t lsb_to_all(crypto_word_t v) { return 0u - (v & 1); }
|
|
323
328
|
|
|
324
|
-
// poly2_mod_phiN reduces
|
|
329
|
+
// poly2_mod_phiN reduces `p` by Φ(N).
|
|
325
330
|
static void poly2_mod_phiN(struct poly2 *p) {
|
|
326
331
|
// m is the term at x^700, replicated to every bit.
|
|
327
332
|
const crypto_word_t m =
|
|
@@ -332,8 +337,8 @@ static void poly2_mod_phiN(struct poly2 *p) {
|
|
|
332
337
|
p->v[WORDS_PER_POLY - 1] &= (UINT64_C(1) << (BITS_IN_LAST_WORD - 1)) - 1;
|
|
333
338
|
}
|
|
334
339
|
|
|
335
|
-
// poly2_reverse_700 reverses the order of the first 700 bits of
|
|
336
|
-
// the result to
|
|
340
|
+
// poly2_reverse_700 reverses the order of the first 700 bits of `in` and writes
|
|
341
|
+
// the result to `out`.
|
|
337
342
|
static void poly2_reverse_700(struct poly2 *out, const struct poly2 *in) {
|
|
338
343
|
struct poly2 t;
|
|
339
344
|
for (size_t i = 0; i < WORDS_PER_POLY; i++) {
|
|
@@ -348,7 +353,7 @@ static void poly2_reverse_700(struct poly2 *out, const struct poly2 *in) {
|
|
|
348
353
|
out->v[WORDS_PER_POLY - 1] = t.v[0] >> shift;
|
|
349
354
|
}
|
|
350
355
|
|
|
351
|
-
// poly2_cswap exchanges the values of
|
|
356
|
+
// poly2_cswap exchanges the values of `a` and `b` if `swap` is all ones.
|
|
352
357
|
static void poly2_cswap(struct poly2 *a, struct poly2 *b, crypto_word_t swap) {
|
|
353
358
|
for (size_t i = 0; i < WORDS_PER_POLY; i++) {
|
|
354
359
|
const crypto_word_t sum = swap & (a->v[i] ^ b->v[i]);
|
|
@@ -357,8 +362,8 @@ static void poly2_cswap(struct poly2 *a, struct poly2 *b, crypto_word_t swap) {
|
|
|
357
362
|
}
|
|
358
363
|
}
|
|
359
364
|
|
|
360
|
-
// poly2_fmadd sets
|
|
361
|
-
//
|
|
365
|
+
// poly2_fmadd sets `out` to `out` + `in` * m, where m is either
|
|
366
|
+
// `CONSTTIME_TRUE_W` or `CONSTTIME_FALSE_W`.
|
|
362
367
|
static void poly2_fmadd(struct poly2 *out, const struct poly2 *in,
|
|
363
368
|
crypto_word_t m) {
|
|
364
369
|
for (size_t i = 0; i < WORDS_PER_POLY; i++) {
|
|
@@ -366,7 +371,7 @@ static void poly2_fmadd(struct poly2 *out, const struct poly2 *in,
|
|
|
366
371
|
}
|
|
367
372
|
}
|
|
368
373
|
|
|
369
|
-
// poly2_lshift1 left-shifts
|
|
374
|
+
// poly2_lshift1 left-shifts `p` by one bit.
|
|
370
375
|
static void poly2_lshift1(struct poly2 *p) {
|
|
371
376
|
crypto_word_t carry = 0;
|
|
372
377
|
for (size_t i = 0; i < WORDS_PER_POLY; i++) {
|
|
@@ -377,7 +382,7 @@ static void poly2_lshift1(struct poly2 *p) {
|
|
|
377
382
|
}
|
|
378
383
|
}
|
|
379
384
|
|
|
380
|
-
// poly2_rshift1 right-shifts
|
|
385
|
+
// poly2_rshift1 right-shifts `p` by one bit.
|
|
381
386
|
static void poly2_rshift1(struct poly2 *p) {
|
|
382
387
|
crypto_word_t carry = 0;
|
|
383
388
|
for (size_t i = WORDS_PER_POLY - 1; i < WORDS_PER_POLY; i--) {
|
|
@@ -397,7 +402,7 @@ static void poly2_clear_top_bits(struct poly2 *p) {
|
|
|
397
402
|
// Ternary polynomials.
|
|
398
403
|
|
|
399
404
|
// poly3 represents a degree-N polynomial over GF(3). Each coefficient is
|
|
400
|
-
// bitsliced across the
|
|
405
|
+
// bitsliced across the `s` and `a` arrays, like this:
|
|
401
406
|
//
|
|
402
407
|
// s | a | value
|
|
403
408
|
// -----------------
|
|
@@ -436,14 +441,14 @@ static void poly3_zero(struct poly3 *p) {
|
|
|
436
441
|
poly2_zero(&p->a);
|
|
437
442
|
}
|
|
438
443
|
|
|
439
|
-
// poly3_reverse_700 reverses the order of the first 700 terms of
|
|
440
|
-
// writes them to
|
|
444
|
+
// poly3_reverse_700 reverses the order of the first 700 terms of `in` and
|
|
445
|
+
// writes them to `out`.
|
|
441
446
|
static void poly3_reverse_700(struct poly3 *out, const struct poly3 *in) {
|
|
442
447
|
poly2_reverse_700(&out->a, &in->a);
|
|
443
448
|
poly2_reverse_700(&out->s, &in->s);
|
|
444
449
|
}
|
|
445
450
|
|
|
446
|
-
// poly3_word_mul sets (
|
|
451
|
+
// poly3_word_mul sets (`out_s`, `out_a`) to (`s1`, `a1`) × (`s2`, `a2`).
|
|
447
452
|
static void poly3_word_mul(crypto_word_t *out_s, crypto_word_t *out_a,
|
|
448
453
|
const crypto_word_t s1, const crypto_word_t a1,
|
|
449
454
|
const crypto_word_t s2, const crypto_word_t a2) {
|
|
@@ -451,7 +456,7 @@ static void poly3_word_mul(crypto_word_t *out_s, crypto_word_t *out_a,
|
|
|
451
456
|
*out_s = (s1 ^ s2) & *out_a;
|
|
452
457
|
}
|
|
453
458
|
|
|
454
|
-
// poly3_word_add sets (
|
|
459
|
+
// poly3_word_add sets (`out_s`, `out_a`) to (`s1`, `a1`) + (`s2`, `a2`).
|
|
455
460
|
static void poly3_word_add(crypto_word_t *out_s, crypto_word_t *out_a,
|
|
456
461
|
const crypto_word_t s1, const crypto_word_t a1,
|
|
457
462
|
const crypto_word_t s2, const crypto_word_t a2) {
|
|
@@ -460,7 +465,7 @@ static void poly3_word_add(crypto_word_t *out_s, crypto_word_t *out_a,
|
|
|
460
465
|
*out_a = (a1 ^ a2) | (t ^ s2);
|
|
461
466
|
}
|
|
462
467
|
|
|
463
|
-
// poly3_word_sub sets (
|
|
468
|
+
// poly3_word_sub sets (`out_s`, `out_a`) to (`s1`, `a1`) - (`s2`, `a2`).
|
|
464
469
|
static void poly3_word_sub(crypto_word_t *out_s, crypto_word_t *out_a,
|
|
465
470
|
const crypto_word_t s1, const crypto_word_t a1,
|
|
466
471
|
const crypto_word_t s2, const crypto_word_t a2) {
|
|
@@ -469,7 +474,7 @@ static void poly3_word_sub(crypto_word_t *out_s, crypto_word_t *out_a,
|
|
|
469
474
|
*out_a = t | (s1 ^ s2);
|
|
470
475
|
}
|
|
471
476
|
|
|
472
|
-
// poly3_mul_const sets
|
|
477
|
+
// poly3_mul_const sets `p` to `p`×m, where m = (ms, ma).
|
|
473
478
|
static void poly3_mul_const(struct poly3 *p, crypto_word_t ms,
|
|
474
479
|
crypto_word_t ma) {
|
|
475
480
|
ms = lsb_to_all(ms);
|
|
@@ -480,7 +485,7 @@ static void poly3_mul_const(struct poly3 *p, crypto_word_t ms,
|
|
|
480
485
|
}
|
|
481
486
|
}
|
|
482
487
|
|
|
483
|
-
// poly3_fmadd sets
|
|
488
|
+
// poly3_fmadd sets `out` to `out` - `in`×m, where m is (ms, ma).
|
|
484
489
|
static void poly3_fmsub(struct poly3 *out, const struct poly3 *in,
|
|
485
490
|
crypto_word_t ms, crypto_word_t ma) {
|
|
486
491
|
crypto_word_t product_s, product_a;
|
|
@@ -497,7 +502,7 @@ static crypto_word_t final_bit_to_all(crypto_word_t v) {
|
|
|
497
502
|
return lsb_to_all(v >> (BITS_IN_LAST_WORD - 1));
|
|
498
503
|
}
|
|
499
504
|
|
|
500
|
-
// poly3_mod_phiN reduces
|
|
505
|
+
// poly3_mod_phiN reduces `p` by Φ(N).
|
|
501
506
|
static void poly3_mod_phiN(struct poly3 *p) {
|
|
502
507
|
// In order to reduce by Φ(N) we subtract by the value of the greatest
|
|
503
508
|
// coefficient.
|
|
@@ -534,8 +539,8 @@ struct poly3_span {
|
|
|
534
539
|
crypto_word_t *a;
|
|
535
540
|
};
|
|
536
541
|
|
|
537
|
-
// poly3_span_add adds
|
|
538
|
-
// result to
|
|
542
|
+
// poly3_span_add adds `n` words of values from `a` and `b` and writes the
|
|
543
|
+
// result to `out`.
|
|
539
544
|
static void poly3_span_add(const struct poly3_span *out,
|
|
540
545
|
const struct poly3_span *a,
|
|
541
546
|
const struct poly3_span *b, size_t n) {
|
|
@@ -544,7 +549,7 @@ static void poly3_span_add(const struct poly3_span *out,
|
|
|
544
549
|
}
|
|
545
550
|
}
|
|
546
551
|
|
|
547
|
-
// poly3_span_sub subtracts
|
|
552
|
+
// poly3_span_sub subtracts `n` words of `b` from `n` words of `a`.
|
|
548
553
|
static void poly3_span_sub(const struct poly3_span *a,
|
|
549
554
|
const struct poly3_span *b, size_t n) {
|
|
550
555
|
for (size_t i = 0; i < n; i++) {
|
|
@@ -552,11 +557,11 @@ static void poly3_span_sub(const struct poly3_span *a,
|
|
|
552
557
|
}
|
|
553
558
|
}
|
|
554
559
|
|
|
555
|
-
// poly3_mul_aux is a recursive function that multiplies
|
|
556
|
-
//
|
|
557
|
-
//
|
|
558
|
-
// used and the recursion stops. For
|
|
559
|
-
// amount of
|
|
560
|
+
// poly3_mul_aux is a recursive function that multiplies `n` words from `a` and
|
|
561
|
+
// `b` and writes 2×`n` words to `out`. Each call uses 2*ceil(n/2) elements of
|
|
562
|
+
// `scratch` and the function recurses, except if `n` == 1, when `scratch` isn't
|
|
563
|
+
// used and the recursion stops. For `n` in {11, 22}, the transitive total
|
|
564
|
+
// amount of `scratch` needed happens to be 2n+2.
|
|
560
565
|
static void poly3_mul_aux(const struct poly3_span *out,
|
|
561
566
|
const struct poly3_span *scratch,
|
|
562
567
|
const struct poly3_span *a,
|
|
@@ -603,14 +608,14 @@ static void poly3_mul_aux(const struct poly3_span *out,
|
|
|
603
608
|
// Karatsuba multiplication.
|
|
604
609
|
// https://en.wikipedia.org/wiki/Karatsuba_algorithm
|
|
605
610
|
|
|
606
|
-
// When
|
|
611
|
+
// When `n` is odd, the two "halves" will have different lengths. The first
|
|
607
612
|
// is always the smaller.
|
|
608
613
|
const size_t low_len = n / 2;
|
|
609
614
|
const size_t high_len = n - low_len;
|
|
610
615
|
const struct poly3_span a_high = {&a->s[low_len], &a->a[low_len]};
|
|
611
616
|
const struct poly3_span b_high = {&b->s[low_len], &b->a[low_len]};
|
|
612
617
|
|
|
613
|
-
// Store a_1 + a_0 in the first half of
|
|
618
|
+
// Store a_1 + a_0 in the first half of `out` and b_1 + b_0 in the second
|
|
614
619
|
// half.
|
|
615
620
|
const struct poly3_span a_cross_sum = *out;
|
|
616
621
|
const struct poly3_span b_cross_sum = {&out->s[high_len], &out->a[high_len]};
|
|
@@ -644,9 +649,9 @@ static void poly3_mul_aux(const struct poly3_span *out,
|
|
|
644
649
|
poly3_span_add(&out_mid, &out_mid, scratch, high_len * 2);
|
|
645
650
|
}
|
|
646
651
|
|
|
647
|
-
// HRSS_poly3_mul sets
|
|
648
|
-
void HRSS_poly3_mul(struct poly3 *out, const struct poly3 *x,
|
|
649
|
-
|
|
652
|
+
// HRSS_poly3_mul sets `*out` to `x`×`y` mod Φ(N).
|
|
653
|
+
void bssl::HRSS_poly3_mul(struct poly3 *out, const struct poly3 *x,
|
|
654
|
+
const struct poly3 *y) {
|
|
650
655
|
crypto_word_t prod_s[WORDS_PER_POLY * 2];
|
|
651
656
|
crypto_word_t prod_a[WORDS_PER_POLY * 2];
|
|
652
657
|
crypto_word_t scratch_s[WORDS_PER_POLY * 2 + 2];
|
|
@@ -660,7 +665,7 @@ void HRSS_poly3_mul(struct poly3 *out, const struct poly3 *x,
|
|
|
660
665
|
|
|
661
666
|
poly3_mul_aux(&prod_span, &scratch_span, &x_span, &y_span, WORDS_PER_POLY);
|
|
662
667
|
|
|
663
|
-
//
|
|
668
|
+
// `prod` needs to be reduced mod (𝑥^n - 1), which just involves adding the
|
|
664
669
|
// upper-half to the lower-half. However, N is 701, which isn't a multiple of
|
|
665
670
|
// BITS_PER_WORD, so the upper-half vectors all have to be shifted before
|
|
666
671
|
// being added to the lower-half.
|
|
@@ -678,10 +683,10 @@ void HRSS_poly3_mul(struct poly3 *out, const struct poly3 *x,
|
|
|
678
683
|
|
|
679
684
|
#if defined(HRSS_HAVE_VECTOR_UNIT) && !defined(OPENSSL_AARCH64)
|
|
680
685
|
|
|
681
|
-
// poly3_vec_cswap swaps (
|
|
682
|
-
//
|
|
683
|
-
static
|
|
684
|
-
|
|
686
|
+
// poly3_vec_cswap swaps (`a_s`, `a_a`) and (`b_s`, `b_a`) if `swap` is
|
|
687
|
+
// `0xff..ff`. Otherwise, `swap` must be zero.
|
|
688
|
+
static void poly3_vec_cswap(vec_t a_s[6], vec_t a_a[6], vec_t b_s[6],
|
|
689
|
+
vec_t b_a[6], const vec_t swap) {
|
|
685
690
|
for (int i = 0; i < 6; i++) {
|
|
686
691
|
const vec_t sum_s = swap & (a_s[i] ^ b_s[i]);
|
|
687
692
|
a_s[i] ^= sum_s;
|
|
@@ -693,10 +698,9 @@ static inline void poly3_vec_cswap(vec_t a_s[6], vec_t a_a[6], vec_t b_s[6],
|
|
|
693
698
|
}
|
|
694
699
|
}
|
|
695
700
|
|
|
696
|
-
// poly3_vec_fmsub subtracts (
|
|
697
|
-
static
|
|
698
|
-
|
|
699
|
-
const vec_t ma) {
|
|
701
|
+
// poly3_vec_fmsub subtracts (`ms`, `ma`) × (`b_s`, `b_a`) from (`a_s`, `a_a`).
|
|
702
|
+
static void poly3_vec_fmsub(vec_t a_s[6], vec_t a_a[6], vec_t b_s[6],
|
|
703
|
+
vec_t b_a[6], const vec_t ms, const vec_t ma) {
|
|
700
704
|
for (int i = 0; i < 6; i++) {
|
|
701
705
|
// See the bitslice formula, above.
|
|
702
706
|
const vec_t s = b_s[i];
|
|
@@ -712,7 +716,7 @@ static inline void poly3_vec_fmsub(vec_t a_s[6], vec_t a_a[6], vec_t b_s[6],
|
|
|
712
716
|
}
|
|
713
717
|
}
|
|
714
718
|
|
|
715
|
-
// poly3_invert_vec sets
|
|
719
|
+
// poly3_invert_vec sets `*out` to `in`^-1, i.e. such that `out`×`in` == 1 mod
|
|
716
720
|
// Φ(N).
|
|
717
721
|
static void poly3_invert_vec(struct poly3 *out, const struct poly3 *in) {
|
|
718
722
|
// This algorithm is taken from section 7.1 of [SAFEGCD].
|
|
@@ -733,7 +737,7 @@ static void poly3_invert_vec(struct poly3 *out, const struct poly3 *in) {
|
|
|
733
737
|
memset(f_s, 0, sizeof(f_s));
|
|
734
738
|
memset(f_a, 0xff, 5 * sizeof(vec_t));
|
|
735
739
|
memcpy(&f_a[5], kBottomSixtyOne, sizeof(kBottomSixtyOne));
|
|
736
|
-
// g is the reversal of
|
|
740
|
+
// g is the reversal of `in`.
|
|
737
741
|
struct poly3 in_reversed;
|
|
738
742
|
poly3_reverse_700(&in_reversed, in);
|
|
739
743
|
g_s[5] = kZero;
|
|
@@ -751,7 +755,7 @@ static void poly3_invert_vec(struct poly3 *out, const struct poly3 *in) {
|
|
|
751
755
|
const crypto_word_t delta_is_non_zero = ~constant_time_is_zero_w(delta);
|
|
752
756
|
const vec_t g_has_constant_term = vec_broadcast_bit(g_a[0]);
|
|
753
757
|
const vec_t mask_w = {
|
|
754
|
-
static_cast<std::
|
|
758
|
+
static_cast<std::remove_reference_t<decltype(mask_w[0])>>(
|
|
755
759
|
delta_is_non_negative & delta_is_non_zero)};
|
|
756
760
|
const vec_t mask = vec_broadcast_bit(mask_w) & g_has_constant_term;
|
|
757
761
|
|
|
@@ -778,9 +782,9 @@ static void poly3_invert_vec(struct poly3 *out, const struct poly3 *in) {
|
|
|
778
782
|
|
|
779
783
|
#endif // HRSS_HAVE_VECTOR_UNIT
|
|
780
784
|
|
|
781
|
-
// HRSS_poly3_invert sets
|
|
785
|
+
// HRSS_poly3_invert sets `*out` to `in`^-1, i.e. such that `out`×`in` == 1 mod
|
|
782
786
|
// Φ(N).
|
|
783
|
-
void HRSS_poly3_invert(struct poly3 *out, const struct poly3 *in) {
|
|
787
|
+
void bssl::HRSS_poly3_invert(struct poly3 *out, const struct poly3 *in) {
|
|
784
788
|
// The vector version of this function seems slightly slower on AArch64, but
|
|
785
789
|
// is useful on ARMv7 and x86-64.
|
|
786
790
|
#if defined(HRSS_HAVE_VECTOR_UNIT) && !defined(OPENSSL_AARCH64)
|
|
@@ -801,7 +805,7 @@ void HRSS_poly3_invert(struct poly3 *out, const struct poly3 *in) {
|
|
|
801
805
|
OPENSSL_memset(&f.s, 0, sizeof(struct poly2));
|
|
802
806
|
OPENSSL_memset(&f.a, 0xff, sizeof(struct poly2));
|
|
803
807
|
f.a.v[WORDS_PER_POLY - 1] >>= BITS_PER_WORD - BITS_IN_LAST_WORD;
|
|
804
|
-
// g is the reversal of
|
|
808
|
+
// g is the reversal of `in`.
|
|
805
809
|
poly3_reverse_700(&g, in);
|
|
806
810
|
int delta = 1;
|
|
807
811
|
|
|
@@ -870,14 +874,14 @@ struct poly {
|
|
|
870
874
|
};
|
|
871
875
|
} // namespace
|
|
872
876
|
|
|
873
|
-
// poly_normalize zeros out the excess elements of
|
|
877
|
+
// poly_normalize zeros out the excess elements of `x` which are included only
|
|
874
878
|
// for alignment.
|
|
875
879
|
static void poly_normalize(struct poly *x) {
|
|
876
880
|
OPENSSL_memset(&x->v[N], 0, 3 * sizeof(uint16_t));
|
|
877
881
|
}
|
|
878
882
|
|
|
879
|
-
// poly_assert_normalized asserts that the excess elements of
|
|
880
|
-
// for the cases that case. (E.g.
|
|
883
|
+
// poly_assert_normalized asserts that the excess elements of `x` are zeroed out
|
|
884
|
+
// for the cases that case. (E.g. `poly_mul_vec`.)
|
|
881
885
|
static void poly_assert_normalized(const struct poly *x) {
|
|
882
886
|
assert(x->v[N] == 0);
|
|
883
887
|
assert(x->v[N + 1] == 0);
|
|
@@ -886,20 +890,20 @@ static void poly_assert_normalized(const struct poly *x) {
|
|
|
886
890
|
|
|
887
891
|
namespace {
|
|
888
892
|
// POLY_MUL_SCRATCH contains space for the working variables needed by
|
|
889
|
-
//
|
|
890
|
-
// be reused with future
|
|
893
|
+
// `poly_mul`. The contents afterwards may be discarded, but the object may also
|
|
894
|
+
// be reused with future `poly_mul` calls to save heap allocations.
|
|
891
895
|
//
|
|
892
896
|
// This object must have 32-byte alignment.
|
|
893
897
|
struct POLY_MUL_SCRATCH {
|
|
894
898
|
union {
|
|
895
|
-
// This is used by
|
|
899
|
+
// This is used by `poly_mul_novec`.
|
|
896
900
|
struct {
|
|
897
901
|
uint16_t prod[2 * N];
|
|
898
902
|
uint16_t scratch[1318];
|
|
899
903
|
} novec;
|
|
900
904
|
|
|
901
905
|
#if defined(HRSS_HAVE_VECTOR_UNIT)
|
|
902
|
-
// This is used by
|
|
906
|
+
// This is used by `poly_mul_vec`.
|
|
903
907
|
struct {
|
|
904
908
|
vec_t prod[VECS_PER_POLY * 2];
|
|
905
909
|
vec_t scratch[172];
|
|
@@ -907,7 +911,7 @@ struct POLY_MUL_SCRATCH {
|
|
|
907
911
|
#endif
|
|
908
912
|
|
|
909
913
|
#if defined(POLY_RQ_MUL_ASM)
|
|
910
|
-
// This is the space used by
|
|
914
|
+
// This is the space used by `poly_Rq_mul`.
|
|
911
915
|
uint8_t rq[POLY_MUL_RQ_SCRATCH_SPACE];
|
|
912
916
|
#endif
|
|
913
917
|
} u;
|
|
@@ -916,10 +920,10 @@ struct POLY_MUL_SCRATCH {
|
|
|
916
920
|
|
|
917
921
|
#if defined(HRSS_HAVE_VECTOR_UNIT)
|
|
918
922
|
|
|
919
|
-
// poly_mul_vec_aux is a recursive function that multiplies
|
|
920
|
-
// and
|
|
921
|
-
// of
|
|
922
|
-
// isn't used and the recursion stops. If
|
|
923
|
+
// poly_mul_vec_aux is a recursive function that multiplies `n` words from `a`
|
|
924
|
+
// and `b` and writes 2×`n` words to `out`. Each call uses 2*ceil(n/2) elements
|
|
925
|
+
// of `scratch` and the function recurses, except if `n` < 3, when `scratch`
|
|
926
|
+
// isn't used and the recursion stops. If `n` == `VECS_PER_POLY` then `scratch`
|
|
923
927
|
// needs 172 elements.
|
|
924
928
|
static void poly_mul_vec_aux(vec_t *out, vec_t *scratch, const vec_t *a,
|
|
925
929
|
const vec_t *b, const size_t n) {
|
|
@@ -1115,14 +1119,14 @@ static void poly_mul_vec_aux(vec_t *out, vec_t *scratch, const vec_t *a,
|
|
|
1115
1119
|
// Karatsuba multiplication.
|
|
1116
1120
|
// https://en.wikipedia.org/wiki/Karatsuba_algorithm
|
|
1117
1121
|
|
|
1118
|
-
// When
|
|
1122
|
+
// When `n` is odd, the two "halves" will have different lengths. The first is
|
|
1119
1123
|
// always the smaller.
|
|
1120
1124
|
const size_t low_len = n / 2;
|
|
1121
1125
|
const size_t high_len = n - low_len;
|
|
1122
1126
|
const vec_t *a_high = &a[low_len];
|
|
1123
1127
|
const vec_t *b_high = &b[low_len];
|
|
1124
1128
|
|
|
1125
|
-
// Store a_1 + a_0 in the first half of
|
|
1129
|
+
// Store a_1 + a_0 in the first half of `out` and b_1 + b_0 in the second
|
|
1126
1130
|
// half.
|
|
1127
1131
|
for (size_t i = 0; i < low_len; i++) {
|
|
1128
1132
|
out[i] = vec_add(a_high[i], a[i]);
|
|
@@ -1157,7 +1161,7 @@ static void poly_mul_vec_aux(vec_t *out, vec_t *scratch, const vec_t *a,
|
|
|
1157
1161
|
}
|
|
1158
1162
|
}
|
|
1159
1163
|
|
|
1160
|
-
// poly_mul_vec sets
|
|
1164
|
+
// poly_mul_vec sets `*out` to `x`×`y` mod (𝑥^n - 1).
|
|
1161
1165
|
static void poly_mul_vec(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
|
|
1162
1166
|
const struct poly *x, const struct poly *y) {
|
|
1163
1167
|
static_assert(sizeof(out->v) == sizeof(vec_t) * VECS_PER_POLY,
|
|
@@ -1171,7 +1175,7 @@ static void poly_mul_vec(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
|
|
|
1171
1175
|
vec_t *const aux_scratch = scratch->u.vec.scratch;
|
|
1172
1176
|
poly_mul_vec_aux(prod, aux_scratch, x->vectors, y->vectors, VECS_PER_POLY);
|
|
1173
1177
|
|
|
1174
|
-
//
|
|
1178
|
+
// `prod` needs to be reduced mod (𝑥^n - 1), which just involves adding the
|
|
1175
1179
|
// upper-half to the lower-half. However, N is 701, which isn't a multiple of
|
|
1176
1180
|
// the vector size, so the upper-half vectors all have to be shifted before
|
|
1177
1181
|
// being added to the lower-half.
|
|
@@ -1188,11 +1192,11 @@ static void poly_mul_vec(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
|
|
|
1188
1192
|
|
|
1189
1193
|
#endif // HRSS_HAVE_VECTOR_UNIT
|
|
1190
1194
|
|
|
1191
|
-
// poly_mul_novec_aux writes the product of
|
|
1192
|
-
//
|
|
1193
|
-
// enough to warrant it. Each call uses 2*ceil(n/2) elements of
|
|
1194
|
-
// the function recurses, except if
|
|
1195
|
-
// recursion stops. If
|
|
1195
|
+
// poly_mul_novec_aux writes the product of `a` and `b` to `out`, using
|
|
1196
|
+
// `scratch` as scratch space. It'll use Karatsuba if the inputs are large
|
|
1197
|
+
// enough to warrant it. Each call uses 2*ceil(n/2) elements of `scratch` and
|
|
1198
|
+
// the function recurses, except if `n` < 64, when `scratch` isn't used and the
|
|
1199
|
+
// recursion stops. If `n` == `N` then `scratch` needs 1318 elements.
|
|
1196
1200
|
static void poly_mul_novec_aux(uint16_t *out, uint16_t *scratch,
|
|
1197
1201
|
const uint16_t *a, const uint16_t *b, size_t n) {
|
|
1198
1202
|
static const size_t kSchoolbookLimit = 64;
|
|
@@ -1210,7 +1214,7 @@ static void poly_mul_novec_aux(uint16_t *out, uint16_t *scratch,
|
|
|
1210
1214
|
// Karatsuba multiplication.
|
|
1211
1215
|
// https://en.wikipedia.org/wiki/Karatsuba_algorithm
|
|
1212
1216
|
|
|
1213
|
-
// When
|
|
1217
|
+
// When `n` is odd, the two "halves" will have different lengths. The
|
|
1214
1218
|
// first is always the smaller.
|
|
1215
1219
|
const size_t low_len = n / 2;
|
|
1216
1220
|
const size_t high_len = n - low_len;
|
|
@@ -1245,7 +1249,7 @@ static void poly_mul_novec_aux(uint16_t *out, uint16_t *scratch,
|
|
|
1245
1249
|
}
|
|
1246
1250
|
}
|
|
1247
1251
|
|
|
1248
|
-
// poly_mul_novec sets
|
|
1252
|
+
// poly_mul_novec sets `*out` to `x`×`y` mod (𝑥^n - 1).
|
|
1249
1253
|
static void poly_mul_novec(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
|
|
1250
1254
|
const struct poly *x, const struct poly *y) {
|
|
1251
1255
|
uint16_t *const prod = scratch->u.novec.prod;
|
|
@@ -1281,7 +1285,7 @@ static void poly_mul(struct POLY_MUL_SCRATCH *scratch, struct poly *r,
|
|
|
1281
1285
|
poly_assert_normalized(r);
|
|
1282
1286
|
}
|
|
1283
1287
|
|
|
1284
|
-
// poly_mul_x_minus_1 sets
|
|
1288
|
+
// poly_mul_x_minus_1 sets `p` to `p`×(𝑥 - 1) mod (𝑥^n - 1).
|
|
1285
1289
|
static void poly_mul_x_minus_1(struct poly *p) {
|
|
1286
1290
|
// Multiplying by (𝑥 - 1) means negating each coefficient and adding in
|
|
1287
1291
|
// the value of the previous one.
|
|
@@ -1293,7 +1297,7 @@ static void poly_mul_x_minus_1(struct poly *p) {
|
|
|
1293
1297
|
p->v[0] = orig_final_coefficient - p->v[0];
|
|
1294
1298
|
}
|
|
1295
1299
|
|
|
1296
|
-
// poly_mod_phiN sets
|
|
1300
|
+
// poly_mod_phiN sets `p` to `p` mod Φ(N).
|
|
1297
1301
|
static void poly_mod_phiN(struct poly *p) {
|
|
1298
1302
|
const uint16_t coeff700 = p->v[N - 1];
|
|
1299
1303
|
|
|
@@ -1313,7 +1317,7 @@ static void poly_clamp(struct poly *p) {
|
|
|
1313
1317
|
// Conversion functions
|
|
1314
1318
|
// --------------------
|
|
1315
1319
|
|
|
1316
|
-
// poly2_from_poly sets
|
|
1320
|
+
// poly2_from_poly sets `*out` to `in` mod 2.
|
|
1317
1321
|
static void poly2_from_poly(struct poly2 *out, const struct poly *in) {
|
|
1318
1322
|
crypto_word_t *words = out->v;
|
|
1319
1323
|
unsigned shift = 0;
|
|
@@ -1336,16 +1340,16 @@ static void poly2_from_poly(struct poly2 *out, const struct poly *in) {
|
|
|
1336
1340
|
*words = word;
|
|
1337
1341
|
}
|
|
1338
1342
|
|
|
1339
|
-
// mod3 treats
|
|
1343
|
+
// mod3 treats `a` as a signed number and returns `a` mod 3.
|
|
1340
1344
|
static uint16_t mod3(int16_t a) {
|
|
1341
1345
|
const int16_t q = ((int32_t)a * 21845) >> 16;
|
|
1342
1346
|
int16_t ret = a - 3 * q;
|
|
1343
|
-
// At this point,
|
|
1347
|
+
// At this point, `ret` is in {0, 1, 2, 3} and that needs to be mapped to {0,
|
|
1344
1348
|
// 1, 2, 0}.
|
|
1345
1349
|
return ret & ((ret & (ret >> 1)) - 1);
|
|
1346
1350
|
}
|
|
1347
1351
|
|
|
1348
|
-
// poly3_from_poly sets
|
|
1352
|
+
// poly3_from_poly sets `*out` to `in`.
|
|
1349
1353
|
static void poly3_from_poly(struct poly3 *out, const struct poly *in) {
|
|
1350
1354
|
crypto_word_t *words_s = out->s.v;
|
|
1351
1355
|
crypto_word_t *words_a = out->a.v;
|
|
@@ -1381,7 +1385,7 @@ static void poly3_from_poly(struct poly3 *out, const struct poly *in) {
|
|
|
1381
1385
|
*words_a = a;
|
|
1382
1386
|
}
|
|
1383
1387
|
|
|
1384
|
-
// poly3_from_poly_checked sets
|
|
1388
|
+
// poly3_from_poly_checked sets `*out` to `in`, which has coefficients in {0, 1,
|
|
1385
1389
|
// Q-1}. It returns a mask indicating whether all coefficients were found to be
|
|
1386
1390
|
// in that set.
|
|
1387
1391
|
static crypto_word_t poly3_from_poly_checked(struct poly3 *out,
|
|
@@ -1476,7 +1480,7 @@ static void poly_from_poly3(struct poly *out, const struct poly3 *in) {
|
|
|
1476
1480
|
// Polynomial inversion
|
|
1477
1481
|
// --------------------
|
|
1478
1482
|
|
|
1479
|
-
// poly_invert_mod2 sets
|
|
1483
|
+
// poly_invert_mod2 sets `*out` to `in^-1` (i.e. such that `*out`×`in` = 1 mod
|
|
1480
1484
|
// Φ(N)), all mod 2. This isn't useful in itself, but is part of doing inversion
|
|
1481
1485
|
// mod Q.
|
|
1482
1486
|
static void poly_invert_mod2(struct poly *out, const struct poly *in) {
|
|
@@ -1491,7 +1495,7 @@ static void poly_invert_mod2(struct poly *out, const struct poly *in) {
|
|
|
1491
1495
|
// f = all ones.
|
|
1492
1496
|
OPENSSL_memset(&f, 0xff, sizeof(struct poly2));
|
|
1493
1497
|
f.v[WORDS_PER_POLY - 1] >>= BITS_PER_WORD - BITS_IN_LAST_WORD;
|
|
1494
|
-
// g is the reversal of
|
|
1498
|
+
// g is the reversal of `in`.
|
|
1495
1499
|
poly2_from_poly(&g, in);
|
|
1496
1500
|
poly2_mod_phiN(&g);
|
|
1497
1501
|
poly2_reverse_700(&g, &g);
|
|
@@ -1527,7 +1531,7 @@ static void poly_invert_mod2(struct poly *out, const struct poly *in) {
|
|
|
1527
1531
|
poly_assert_normalized(out);
|
|
1528
1532
|
}
|
|
1529
1533
|
|
|
1530
|
-
// poly_invert sets
|
|
1534
|
+
// poly_invert sets `*out` to `in^-1` (i.e. such that `*out`×`in` = 1 mod Φ(N)).
|
|
1531
1535
|
static void poly_invert(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
|
|
1532
1536
|
const struct poly *in) {
|
|
1533
1537
|
// Inversion mod Q, which is done based on the result of inverting mod
|
|
@@ -1560,7 +1564,7 @@ static void poly_invert(struct POLY_MUL_SCRATCH *scratch, struct poly *out,
|
|
|
1560
1564
|
|
|
1561
1565
|
#define POLY_BYTES 1138
|
|
1562
1566
|
|
|
1563
|
-
// poly_marshal serialises all but the final coefficient of
|
|
1567
|
+
// poly_marshal serialises all but the final coefficient of `in` to `out`.
|
|
1564
1568
|
static void poly_marshal(uint8_t out[POLY_BYTES], const struct poly *in) {
|
|
1565
1569
|
const uint16_t *p = in->v;
|
|
1566
1570
|
|
|
@@ -1593,10 +1597,10 @@ static void poly_marshal(uint8_t out[POLY_BYTES], const struct poly *in) {
|
|
|
1593
1597
|
out[6] = 0xf & (p[3] >> 9);
|
|
1594
1598
|
}
|
|
1595
1599
|
|
|
1596
|
-
// poly_unmarshal parses the output of
|
|
1600
|
+
// poly_unmarshal parses the output of `poly_marshal` and sets `out` such that
|
|
1597
1601
|
// all but the final coefficients match, and the final coefficient is calculated
|
|
1598
|
-
// such that evaluating
|
|
1599
|
-
// or zero if
|
|
1602
|
+
// such that evaluating `out` at one results in zero. It returns one on success
|
|
1603
|
+
// or zero if `in` is an invalid encoding.
|
|
1600
1604
|
static int poly_unmarshal(struct poly *out, const uint8_t in[POLY_BYTES]) {
|
|
1601
1605
|
uint16_t *p = out->v;
|
|
1602
1606
|
|
|
@@ -1635,7 +1639,7 @@ static int poly_unmarshal(struct poly *out, const uint8_t in[POLY_BYTES]) {
|
|
|
1635
1639
|
return 0;
|
|
1636
1640
|
}
|
|
1637
1641
|
|
|
1638
|
-
// Set the final coefficient as
|
|
1642
|
+
// Set the final coefficient as specified in [HRSSNIST] 1.9.2 step 6.
|
|
1639
1643
|
uint32_t sum = 0;
|
|
1640
1644
|
for (size_t i = 0; i < N - 1; i++) {
|
|
1641
1645
|
sum += out->v[i];
|
|
@@ -1647,15 +1651,15 @@ static int poly_unmarshal(struct poly *out, const uint8_t in[POLY_BYTES]) {
|
|
|
1647
1651
|
return 1;
|
|
1648
1652
|
}
|
|
1649
1653
|
|
|
1650
|
-
// mod3_from_modQ maps {0, 1, Q-1, 65535} -> {0, 1, 2, 2}. Note that
|
|
1654
|
+
// mod3_from_modQ maps {0, 1, Q-1, 65535} -> {0, 1, 2, 2}. Note that `v` may
|
|
1651
1655
|
// have an invalid value when processing attacker-controlled inputs.
|
|
1652
1656
|
static uint16_t mod3_from_modQ(uint16_t v) {
|
|
1653
1657
|
v &= 3;
|
|
1654
1658
|
return v ^ (v >> 1);
|
|
1655
1659
|
}
|
|
1656
1660
|
|
|
1657
|
-
// poly_marshal_mod3 marshals
|
|
1658
|
-
// all in {0, 1, Q-1, 65535} and
|
|
1661
|
+
// poly_marshal_mod3 marshals `in` to `out` where the coefficients of `in` are
|
|
1662
|
+
// all in {0, 1, Q-1, 65535} and `in` is mod Φ(N). (Note that coefficients may
|
|
1659
1663
|
// have invalid values when processing attacker-controlled inputs.)
|
|
1660
1664
|
static void poly_marshal_mod3(uint8_t out[HRSS_POLY3_BYTES],
|
|
1661
1665
|
const struct poly *in) {
|
|
@@ -1703,7 +1707,7 @@ static void poly_short_sample_plus(struct poly *out,
|
|
|
1703
1707
|
poly_short_sample(out, in);
|
|
1704
1708
|
|
|
1705
1709
|
// sum (and the product in the for loop) will overflow. But that's fine
|
|
1706
|
-
// because
|
|
1710
|
+
// because `sum` is bound by +/- (N-2), and N < 2^15 so it works out.
|
|
1707
1711
|
uint16_t sum = 0;
|
|
1708
1712
|
for (unsigned i = 0; i < N - 2; i++) {
|
|
1709
1713
|
sum += (unsigned)out->v[i] * out->v[i + 1];
|
|
@@ -1854,7 +1858,7 @@ struct private_key {
|
|
|
1854
1858
|
// but we need 16-byte alignment. We could annotate the external struct with
|
|
1855
1859
|
// that alignment but we can only assume that malloced pointers are 8-byte
|
|
1856
1860
|
// aligned in any case. (Even if the underlying malloc returns values with
|
|
1857
|
-
// 16-byte alignment,
|
|
1861
|
+
// 16-byte alignment, `OPENSSL_malloc` will store an 8-byte size prefix and mess
|
|
1858
1862
|
// that up.)
|
|
1859
1863
|
static struct public_key *public_key_from_external(
|
|
1860
1864
|
struct HRSS_public_key *ext) {
|
|
@@ -1865,7 +1869,7 @@ static struct public_key *public_key_from_external(
|
|
|
1865
1869
|
return reinterpret_cast<public_key *>(align_pointer(ext->opaque, 16));
|
|
1866
1870
|
}
|
|
1867
1871
|
|
|
1868
|
-
// private_key_from_external does the same thing as
|
|
1872
|
+
// private_key_from_external does the same thing as `public_key_from_external`,
|
|
1869
1873
|
// but for private keys. See the comment on that function about alignment
|
|
1870
1874
|
// issues.
|
|
1871
1875
|
static struct private_key *private_key_from_external(
|
|
@@ -1877,14 +1881,14 @@ static struct private_key *private_key_from_external(
|
|
|
1877
1881
|
return reinterpret_cast<private_key *>(align_pointer(ext->opaque, 16));
|
|
1878
1882
|
}
|
|
1879
1883
|
|
|
1880
|
-
// malloc_align32 returns a pointer to
|
|
1881
|
-
// sets
|
|
1884
|
+
// malloc_align32 returns a pointer to `size` bytes of 32-byte-aligned heap and
|
|
1885
|
+
// sets `*out_ptr` to a value that can be passed to `OPENSSL_free` to release
|
|
1882
1886
|
// it. It returns NULL if out of memory.
|
|
1883
1887
|
static void *malloc_align32(void **out_ptr, size_t size) {
|
|
1884
1888
|
void *ptr = OPENSSL_malloc(size + 31);
|
|
1885
1889
|
if (!ptr) {
|
|
1886
|
-
*out_ptr =
|
|
1887
|
-
return
|
|
1890
|
+
*out_ptr = nullptr;
|
|
1891
|
+
return nullptr;
|
|
1888
1892
|
}
|
|
1889
1893
|
|
|
1890
1894
|
*out_ptr = ptr;
|
|
@@ -1911,7 +1915,7 @@ int HRSS_generate_key(
|
|
|
1911
1915
|
if (!vars) {
|
|
1912
1916
|
// If the caller ignores the return value the output will still be safe.
|
|
1913
1917
|
// The private key output is randomised in case it's later passed to
|
|
1914
|
-
//
|
|
1918
|
+
// `HRSS_encap`.
|
|
1915
1919
|
memset(out_pub, 0, sizeof(struct HRSS_public_key));
|
|
1916
1920
|
RAND_bytes((uint8_t *)out_priv, sizeof(struct HRSS_private_key));
|
|
1917
1921
|
return 0;
|
|
@@ -2056,7 +2060,7 @@ int HRSS_decap(uint8_t out_shared_key[HRSS_KEY_BYTES],
|
|
|
2056
2060
|
OPENSSL_memset(vars, 0xff, sizeof(struct vars));
|
|
2057
2061
|
#endif
|
|
2058
2062
|
|
|
2059
|
-
// This is HMAC, expanded inline rather than using the
|
|
2063
|
+
// This is HMAC, expanded inline rather than using the `HMAC` function so that
|
|
2060
2064
|
// we can avoid dealing with possible allocation failures and so keep this
|
|
2061
2065
|
// function infallible.
|
|
2062
2066
|
static_assert(sizeof(priv->hmac_key) <= sizeof(vars->masked_key),
|
|
@@ -2115,26 +2119,26 @@ int HRSS_decap(uint8_t out_shared_key[HRSS_KEY_BYTES],
|
|
|
2115
2119
|
ok = poly3_from_poly_checked(&vars->r3, &vars->r);
|
|
2116
2120
|
|
|
2117
2121
|
// [NTRUCOMP] section 5.1 includes ReEnc2 and a proof that it's valid. Rather
|
|
2118
|
-
// than do an expensive
|
|
2119
|
-
// (called
|
|
2122
|
+
// than do an expensive `poly_mul`, it rebuilds `c'` from `c - lift(m)`
|
|
2123
|
+
// (called `b`) with:
|
|
2120
2124
|
// t = (−b(1)/N) mod Q
|
|
2121
2125
|
// c' = b + tΦ(N) + lift(m) mod Q
|
|
2122
2126
|
//
|
|
2123
2127
|
// When polynomials are transmitted, the final coefficient is omitted and
|
|
2124
|
-
//
|
|
2125
|
-
//
|
|
2128
|
+
// `poly_unmarshal` sets it such that f(1) == 0. Thus c(1) == 0. Also,
|
|
2129
|
+
// `poly_lift` multiplies the result by (x-1) and therefore evaluating a
|
|
2126
2130
|
// lifted polynomial at 1 is also zero. Thus lift(m)(1) == 0 and so
|
|
2127
2131
|
// (c - lift(m))(1) == 0.
|
|
2128
2132
|
//
|
|
2129
|
-
// Although we defer the reduction above,
|
|
2130
|
-
// Φ(N). In order to do that reduction one subtracts
|
|
2131
|
-
// coefficient. Therefore b(1) = -c[N-1]×N. The value of
|
|
2132
|
-
// just recovering
|
|
2133
|
+
// Although we defer the reduction above, `b` is conceptually reduced mod
|
|
2134
|
+
// Φ(N). In order to do that reduction one subtracts `c[N-1]` from every
|
|
2135
|
+
// coefficient. Therefore b(1) = -c[N-1]×N. The value of `t`, above, then is
|
|
2136
|
+
// just recovering `c[N-1]`, and adding tΦ(N) is simply undoing the reduction.
|
|
2133
2137
|
// Therefore b + tΦ(N) + lift(m) = c by construction and we don't need to
|
|
2134
|
-
// recover
|
|
2135
|
-
//
|
|
2138
|
+
// recover `c` at all so long as we do the checks in
|
|
2139
|
+
// `poly3_from_poly_checked`.
|
|
2136
2140
|
//
|
|
2137
|
-
// The
|
|
2141
|
+
// The `poly_marshal` here then is just confirming that `poly_unmarshal` is
|
|
2138
2142
|
// strict and could be omitted.
|
|
2139
2143
|
|
|
2140
2144
|
static_assert(HRSS_CIPHERTEXT_BYTES == POLY_BYTES,
|