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.
Files changed (1004) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/include/grpc/event_engine/memory_allocator.h +1 -0
  4. data/include/grpc/grpc.h +3 -0
  5. data/include/grpc/grpc_security_constants.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +4 -0
  7. data/src/core/call/call_filters.h +10 -10
  8. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  10. data/src/core/call/filter_fusion.h +15 -15
  11. data/src/core/call/interception_chain.h +3 -3
  12. data/src/core/call/metadata_batch.cc +1 -0
  13. data/src/core/call/metadata_batch.h +45 -33
  14. data/src/core/call/parsed_metadata.h +3 -3
  15. data/src/core/call/request_buffer.cc +6 -6
  16. data/src/core/call/request_buffer.h +1 -1
  17. data/src/core/channelz/channel_trace.cc +5 -5
  18. data/src/core/channelz/channel_trace.h +1 -1
  19. data/src/core/channelz/channelz.cc +9 -9
  20. data/src/core/channelz/channelz.h +12 -12
  21. data/src/core/channelz/channelz_registry.cc +10 -10
  22. data/src/core/channelz/ztrace_collector.h +5 -5
  23. data/src/core/client_channel/client_channel.cc +4 -4
  24. data/src/core/client_channel/client_channel_filter.cc +14 -14
  25. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  26. data/src/core/client_channel/subchannel.cc +24 -23
  27. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  28. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  29. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  30. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  31. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  32. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  33. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  34. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  39. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  40. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  41. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  42. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  43. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  45. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  46. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  48. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  49. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  50. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  51. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  53. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  55. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  56. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  61. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  63. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  65. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  68. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  70. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  72. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  73. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  74. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  76. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  85. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  87. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  97. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  98. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  99. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  100. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  101. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  102. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  103. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  104. data/src/core/handshaker/handshaker.cc +4 -4
  105. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  106. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  107. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  108. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  109. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  110. data/src/core/lib/channel/channel_args.cc +20 -0
  111. data/src/core/lib/channel/channel_args.h +17 -17
  112. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  113. data/src/core/lib/channel/promise_based_filter.h +66 -27
  114. data/src/core/lib/debug/trace_flags.cc +2 -0
  115. data/src/core/lib/debug/trace_flags.h +1 -0
  116. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  117. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  118. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  119. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  120. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  121. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  122. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  123. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  124. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  126. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  127. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  128. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  129. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  132. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  134. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  136. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  137. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  139. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  140. data/src/core/lib/experiments/experiments.cc +48 -0
  141. data/src/core/lib/experiments/experiments.h +24 -0
  142. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  143. data/src/core/lib/iomgr/buffer_list.h +1 -1
  144. data/src/core/lib/iomgr/combiner.cc +0 -1
  145. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  146. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  147. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  148. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  149. data/src/core/lib/promise/activity.cc +1 -1
  150. data/src/core/lib/promise/activity.h +1 -1
  151. data/src/core/lib/promise/arena_promise.h +7 -7
  152. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  153. data/src/core/lib/promise/detail/promise_like.h +4 -4
  154. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  155. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  156. data/src/core/lib/promise/observable.h +3 -3
  157. data/src/core/lib/promise/party.cc +1 -1
  158. data/src/core/lib/promise/try_seq.h +2 -2
  159. data/src/core/lib/resource_quota/arena.h +3 -3
  160. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  161. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  162. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  163. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  164. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  165. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  168. data/src/core/lib/security/authorization/matchers.h +1 -1
  169. data/src/core/lib/surface/call.cc +8 -7
  170. data/src/core/lib/surface/call.h +3 -3
  171. data/src/core/lib/surface/call_utils.h +4 -0
  172. data/src/core/lib/surface/channel.cc +1 -1
  173. data/src/core/lib/surface/channel.h +1 -1
  174. data/src/core/lib/surface/channel_init.cc +1 -1
  175. data/src/core/lib/surface/init.cc +7 -7
  176. data/src/core/lib/surface/lame_client.cc +1 -1
  177. data/src/core/lib/surface/legacy_channel.cc +2 -2
  178. data/src/core/lib/surface/version.cc +1 -1
  179. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  180. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  181. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  182. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  183. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  184. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  185. data/src/core/load_balancing/health_check_client.cc +7 -7
  186. data/src/core/load_balancing/lb_policy.cc +1 -1
  187. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  188. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  189. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  190. data/src/core/load_balancing/rls/rls.cc +23 -17
  191. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  192. data/src/core/load_balancing/xds/cds.cc +6 -5
  193. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  194. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  195. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  196. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  197. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  198. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  199. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  200. data/src/core/server/server.cc +30 -30
  201. data/src/core/server/server.h +4 -3
  202. data/src/core/server/server_config_selector_filter.cc +3 -3
  203. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  204. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  205. data/src/core/telemetry/instrument.cc +30 -16
  206. data/src/core/telemetry/instrument.h +3 -3
  207. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  210. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  211. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  212. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  213. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  214. data/src/core/tsi/ssl_transport_security.cc +46 -13
  215. data/src/core/tsi/ssl_transport_security.h +7 -0
  216. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  217. data/src/core/util/event_log.cc +3 -3
  218. data/src/core/util/http_client/httpcli.cc +5 -5
  219. data/src/core/util/http_client/httpcli.h +1 -1
  220. data/src/core/util/json/json_object_loader.cc +7 -0
  221. data/src/core/util/json/json_object_loader.h +17 -2
  222. data/src/core/util/latent_see.cc +123 -36
  223. data/src/core/util/latent_see.h +14 -1
  224. data/src/core/util/mpscq.cc +1 -1
  225. data/src/core/util/notification.h +4 -4
  226. data/src/core/util/sync.h +20 -6
  227. data/src/core/util/table.h +20 -22
  228. data/src/core/util/work_serializer.cc +2 -2
  229. data/src/core/xds/grpc/blackboard.cc +4 -3
  230. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  231. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  233. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  234. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  235. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  236. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  237. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  238. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  239. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  240. data/src/core/xds/grpc/xds_matcher.h +2 -2
  241. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  242. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  243. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  244. data/src/core/xds/xds_client/xds_client.cc +19 -16
  245. data/src/core/xds/xds_client/xds_transport.h +49 -3
  246. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  248. data/src/ruby/lib/grpc/version.rb +1 -1
  249. data/src/ruby/pb/README.md +1 -1
  250. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  251. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  252. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  253. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  254. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  255. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  256. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  257. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  258. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  259. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  260. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  261. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  262. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  265. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  266. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  268. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  269. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  270. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  273. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  274. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  275. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  276. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  277. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  278. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  280. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  281. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  282. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  283. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  284. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  285. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  286. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  287. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  288. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  289. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  290. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  291. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  292. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  293. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  294. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  295. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  296. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  297. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  300. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  301. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  305. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  306. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  308. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  309. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  310. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  313. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  314. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  316. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  317. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  326. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  327. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  328. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  330. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  331. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  335. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  336. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  337. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  338. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  341. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  342. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  343. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  344. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  345. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  346. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  347. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  348. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  349. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  350. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  351. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  352. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  353. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  354. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  356. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  357. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  358. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  360. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  361. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  362. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  364. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  365. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  366. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  367. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  368. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  370. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  372. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  373. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  374. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  375. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  376. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  377. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  378. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  379. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  380. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  381. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  382. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  383. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  384. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  385. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  386. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  387. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  388. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  389. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  390. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  391. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  393. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  395. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  396. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  397. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  398. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  399. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  401. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  402. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  403. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  404. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  405. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  407. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  408. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  409. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  410. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  411. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  412. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  413. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  414. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  415. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  416. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  417. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  418. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  420. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  423. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  427. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  428. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  429. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  433. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  434. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  435. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  436. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  437. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  438. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  439. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  440. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  441. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  442. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  443. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  444. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  445. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  446. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  447. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  448. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  449. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  450. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  451. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  453. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  454. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  455. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  456. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  457. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  458. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  459. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  465. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  466. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  467. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  468. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  469. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  470. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  471. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  472. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  473. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  474. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  475. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  476. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  477. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  478. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  492. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  494. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  497. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  498. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  504. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  505. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  506. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  508. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  509. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  510. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  511. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  512. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  513. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  514. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  515. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  516. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  518. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  519. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  520. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  521. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  522. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  523. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  524. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  525. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  531. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  532. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  533. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  534. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  543. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  544. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  545. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  546. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  547. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  548. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  549. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  555. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  558. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  559. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  560. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  564. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  565. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  566. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  567. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  568. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  569. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  571. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  572. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  574. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  575. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  576. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  577. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  579. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  580. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  581. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  582. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  586. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  587. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  597. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  598. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  599. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  600. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  601. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  602. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  709. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  710. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  711. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  712. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  713. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  714. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  715. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  716. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  717. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  718. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  719. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  720. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  721. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  722. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  723. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  724. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  725. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  728. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  729. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  730. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  736. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  739. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  743. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  747. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  748. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  749. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  750. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  751. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  752. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  753. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  754. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  755. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  756. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  757. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  758. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  759. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  760. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  761. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  765. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  768. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  769. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  770. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  772. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  773. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  774. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  775. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  776. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  777. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  781. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  784. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  785. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  786. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  788. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  789. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  790. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  791. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  792. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  796. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  819. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  837. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  849. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  850. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  853. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  854. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  855. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  856. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  858. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  859. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  860. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  861. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  862. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  863. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  864. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  865. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  866. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  867. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  868. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  869. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  870. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  871. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  872. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  873. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  874. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  875. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  876. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  877. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  878. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  879. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  880. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  881. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  883. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  884. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  885. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  886. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  887. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  888. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  889. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  890. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  891. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  892. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  893. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  894. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  895. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  897. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  898. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  899. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  900. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  901. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  902. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  904. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  906. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  907. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  908. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  909. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  913. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  914. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  915. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  916. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  917. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  918. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  919. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  920. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  921. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  923. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  924. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  925. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  926. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  927. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  928. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  929. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  930. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  931. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  932. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  933. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  934. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  935. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  936. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  937. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  938. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  939. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  940. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  941. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  942. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  943. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  944. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  945. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  946. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  947. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  948. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  949. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  950. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  951. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  952. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  953. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  955. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  956. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  957. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  958. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  959. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  960. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  961. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  962. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  963. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  964. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  965. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  966. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  967. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  968. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  969. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  970. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  971. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  974. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  979. metadata +77 -52
  980. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  982. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  984. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  985. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  986. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  987. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  989. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  990. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  996. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1000. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1001. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1002. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1003. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1004. data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
@@ -17,6 +17,9 @@
17
17
  #include <assert.h>
18
18
  #include <string.h>
19
19
 
20
+ #include <array>
21
+ #include <string_view>
22
+
20
23
  #include <openssl/aead.h>
21
24
  #include <openssl/bytestring.h>
22
25
  #include <openssl/curve25519.h>
@@ -26,18 +29,27 @@
26
29
  #include <openssl/evp_errors.h>
27
30
  #include <openssl/hkdf.h>
28
31
  #include <openssl/mem.h>
32
+ #include <openssl/mlkem.h>
29
33
  #include <openssl/rand.h>
30
- #include <openssl/sha.h>
34
+ #include <openssl/sha2.h>
35
+ #include <openssl/span.h>
36
+ #include <openssl/xwing.h>
31
37
 
38
+ #include "../fipsmodule/bcm_interface.h"
32
39
  #include "../fipsmodule/ec/internal.h"
40
+ #include "../fipsmodule/keccak/internal.h"
33
41
  #include "../internal.h"
42
+ #include "../mem_internal.h"
43
+
34
44
 
45
+ using namespace bssl;
35
46
 
36
47
  // This file implements RFC 9180.
37
48
 
38
- #define MAX_SEED_LEN X25519_PRIVATE_KEY_LEN
49
+ #define MAX_SEED_LEN XWING_SEED_LEN
39
50
  #define MAX_SHARED_SECRET_LEN SHA256_DIGEST_LENGTH
40
51
 
52
+ // TODO(chlily): Fold this into `EVP_KEM`.
41
53
  struct evp_hpke_kem_st {
42
54
  uint16_t id;
43
55
  size_t public_key_len;
@@ -47,6 +59,7 @@ struct evp_hpke_kem_st {
47
59
  int (*init_key)(EVP_HPKE_KEY *key, const uint8_t *priv_key,
48
60
  size_t priv_key_len);
49
61
  int (*generate_key)(EVP_HPKE_KEY *key);
62
+ int (*derive_key)(EVP_HPKE_KEY *key, Span<const uint8_t> ikm);
50
63
  int (*encap_with_seed)(const EVP_HPKE_KEM *kem, uint8_t *out_shared_secret,
51
64
  size_t *out_shared_secret_len, uint8_t *out_enc,
52
65
  size_t *out_enc_len, size_t max_enc,
@@ -72,12 +85,12 @@ struct evp_hpke_kem_st {
72
85
  struct evp_hpke_kdf_st {
73
86
  uint16_t id;
74
87
  // We only support HKDF-based KDFs.
75
- const EVP_MD *(*hkdf_md_func)(void);
88
+ const EVP_MD *(*hkdf_md_func)();
76
89
  };
77
90
 
78
91
  struct evp_hpke_aead_st {
79
92
  uint16_t id;
80
- const EVP_AEAD *(*aead_func)(void);
93
+ const EVP_AEAD *(*aead_func)();
81
94
  };
82
95
 
83
96
 
@@ -126,9 +139,44 @@ static int hpke_labeled_expand(const EVP_MD *hkdf_md, uint8_t *out_key,
126
139
  return ok;
127
140
  }
128
141
 
142
+ static void absorb_u16(BORINGSSL_keccak_st *ctx, uint16_t n) {
143
+ uint8_t bytes[2];
144
+ CRYPTO_store_u16_be(bytes, n);
145
+ BORINGSSL_keccak_absorb(ctx, bytes, sizeof(bytes));
146
+ }
147
+
148
+ static void hpke_shake256_labeled_derive(Span<uint8_t> out,
149
+ Span<const uint8_t> ikm,
150
+ Span<const uint8_t> suite_id,
151
+ std::string_view label,
152
+ Span<const uint8_t> context) {
153
+ // https://www.ietf.org/archive/id/draft-ietf-hpke-hpke-03.html#name-labeled-derivation-function
154
+ // https://www.ietf.org/archive/id/draft-ietf-hpke-pq-04.html#name-single-stage-kdfs
155
+ BORINGSSL_keccak_st ctx;
156
+ BORINGSSL_keccak_init(&ctx, boringssl_shake256);
157
+ BORINGSSL_keccak_absorb(&ctx, ikm.data(), ikm.size());
158
+ auto hpke_version_id = StringAsBytes(kHpkeVersionId);
159
+ BORINGSSL_keccak_absorb(&ctx, hpke_version_id.data(), hpke_version_id.size());
160
+ BORINGSSL_keccak_absorb(&ctx, suite_id.data(), suite_id.size());
161
+ auto label_bytes = StringAsBytes(label);
162
+ assert(label_bytes.size() < 0xffff);
163
+ absorb_u16(&ctx, static_cast<uint16_t>(label_bytes.size()));
164
+ BORINGSSL_keccak_absorb(&ctx, label_bytes.data(), label_bytes.size());
165
+ assert(out.size() <= 0xffff);
166
+ absorb_u16(&ctx, static_cast<uint16_t>(out.size()));
167
+ BORINGSSL_keccak_absorb(&ctx, context.data(), context.size());
168
+ BORINGSSL_keccak_squeeze(&ctx, out.data(), out.size());
169
+ }
170
+
129
171
 
130
172
  // KEM implementations.
131
173
 
174
+ static std::array<uint8_t, 5> hpke_kem_suite_id(uint16_t kem_id) {
175
+ // concat("KEM", I2OSP(kem_id, 2))
176
+ return {'K', 'E', 'M', static_cast<uint8_t>(kem_id >> 8),
177
+ static_cast<uint8_t>(kem_id)};
178
+ }
179
+
132
180
  // dhkem_extract_and_expand implements the ExtractAndExpand operation in the
133
181
  // DHKEM construction. See section 4.1 of RFC 9180.
134
182
  static int dhkem_extract_and_expand(uint16_t kem_id, const EVP_MD *hkdf_md,
@@ -136,16 +184,15 @@ static int dhkem_extract_and_expand(uint16_t kem_id, const EVP_MD *hkdf_md,
136
184
  const uint8_t *dh, size_t dh_len,
137
185
  const uint8_t *kem_context,
138
186
  size_t kem_context_len) {
139
- // concat("KEM", I2OSP(kem_id, 2))
140
- uint8_t suite_id[5] = {'K', 'E', 'M', static_cast<uint8_t>(kem_id >> 8),
141
- static_cast<uint8_t>(kem_id & 0xff)};
187
+ auto suite_id = hpke_kem_suite_id(kem_id);
142
188
  uint8_t prk[EVP_MAX_MD_SIZE];
143
189
  size_t prk_len;
144
- return hpke_labeled_extract(hkdf_md, prk, &prk_len, NULL, 0, suite_id,
145
- sizeof(suite_id), "eae_prk", dh, dh_len) &&
146
- hpke_labeled_expand(hkdf_md, out_key, out_len, prk, prk_len, suite_id,
147
- sizeof(suite_id), "shared_secret", kem_context,
148
- kem_context_len);
190
+ return hpke_labeled_extract(hkdf_md, prk, &prk_len, nullptr, 0,
191
+ suite_id.data(), suite_id.size(), "eae_prk", dh,
192
+ dh_len) &&
193
+ hpke_labeled_expand(hkdf_md, out_key, out_len, prk, prk_len,
194
+ suite_id.data(), suite_id.size(), "shared_secret",
195
+ kem_context, kem_context_len);
149
196
  }
150
197
 
151
198
  static int x25519_init_key(EVP_HPKE_KEY *key, const uint8_t *priv_key,
@@ -165,6 +212,23 @@ static int x25519_generate_key(EVP_HPKE_KEY *key) {
165
212
  return 1;
166
213
  }
167
214
 
215
+ static int x25519_derive_key(EVP_HPKE_KEY *key, Span<const uint8_t> ikm) {
216
+ // https://www.rfc-editor.org/rfc/rfc9180.html#name-derivekeypair
217
+ auto suite_id = hpke_kem_suite_id(EVP_HPKE_DHKEM_X25519_HKDF_SHA256);
218
+ uint8_t dkp_prk[SHA256_DIGEST_LENGTH];
219
+ size_t dkp_prk_len;
220
+ uint8_t sk[32];
221
+ if (!hpke_labeled_extract(EVP_sha256(), dkp_prk, &dkp_prk_len, nullptr, 0,
222
+ suite_id.data(), suite_id.size(), "dkp_prk",
223
+ ikm.data(), ikm.size()) ||
224
+ !hpke_labeled_expand(EVP_sha256(), sk, sizeof(sk), dkp_prk, dkp_prk_len,
225
+ suite_id.data(), suite_id.size(), "sk",
226
+ /*info=*/nullptr, /*info_len=*/0)) {
227
+ return 0;
228
+ }
229
+ return x25519_init_key(key, sk, sizeof(sk));
230
+ }
231
+
168
232
  static int x25519_encap_with_seed(
169
233
  const EVP_HPKE_KEM *kem, uint8_t *out_shared_secret,
170
234
  size_t *out_shared_secret_len, uint8_t *out_enc, size_t *out_enc_len,
@@ -296,7 +360,7 @@ static int x25519_auth_decap(const EVP_HPKE_KEY *key,
296
360
  return 1;
297
361
  }
298
362
 
299
- const EVP_HPKE_KEM *EVP_hpke_x25519_hkdf_sha256(void) {
363
+ const EVP_HPKE_KEM *EVP_hpke_x25519_hkdf_sha256() {
300
364
  static const EVP_HPKE_KEM kKEM = {
301
365
  /*id=*/EVP_HPKE_DHKEM_X25519_HKDF_SHA256,
302
366
  /*public_key_len=*/X25519_PUBLIC_VALUE_LEN,
@@ -305,6 +369,7 @@ const EVP_HPKE_KEM *EVP_hpke_x25519_hkdf_sha256(void) {
305
369
  /*enc_len=*/X25519_PUBLIC_VALUE_LEN,
306
370
  x25519_init_key,
307
371
  x25519_generate_key,
372
+ x25519_derive_key,
308
373
  x25519_encap_with_seed,
309
374
  x25519_decap,
310
375
  x25519_auth_encap_with_seed,
@@ -362,17 +427,14 @@ static int p256_init_key(EVP_HPKE_KEY *key, const uint8_t *priv_key,
362
427
  }
363
428
 
364
429
  static int p256_private_key_from_seed(uint8_t out_priv[P256_PRIVATE_KEY_LEN],
365
- const uint8_t seed[P256_SEED_LEN]) {
430
+ const uint8_t *seed, size_t seed_len) {
366
431
  // https://www.rfc-editor.org/rfc/rfc9180.html#name-derivekeypair
367
- const uint8_t suite_id[5] = {'K', 'E', 'M',
368
- EVP_HPKE_DHKEM_P256_HKDF_SHA256 >> 8,
369
- EVP_HPKE_DHKEM_P256_HKDF_SHA256 & 0xff};
370
-
432
+ auto suite_id = hpke_kem_suite_id(EVP_HPKE_DHKEM_P256_HKDF_SHA256);
371
433
  uint8_t dkp_prk[32];
372
434
  size_t dkp_prk_len;
373
- if (!hpke_labeled_extract(EVP_sha256(), dkp_prk, &dkp_prk_len, NULL, 0,
374
- suite_id, sizeof(suite_id), "dkp_prk", seed,
375
- P256_SEED_LEN)) {
435
+ if (!hpke_labeled_extract(EVP_sha256(), dkp_prk, &dkp_prk_len, nullptr, 0,
436
+ suite_id.data(), suite_id.size(), "dkp_prk", seed,
437
+ seed_len)) {
376
438
  return 0;
377
439
  }
378
440
  assert(dkp_prk_len == sizeof(dkp_prk));
@@ -383,15 +445,16 @@ static int p256_private_key_from_seed(uint8_t out_priv[P256_PRIVATE_KEY_LEN],
383
445
  for (unsigned counter = 0; counter < 256; counter++) {
384
446
  const uint8_t counter_byte = counter & 0xff;
385
447
  if (!hpke_labeled_expand(EVP_sha256(), out_priv, P256_PRIVATE_KEY_LEN,
386
- dkp_prk, sizeof(dkp_prk), suite_id,
387
- sizeof(suite_id), "candidate", &counter_byte,
448
+ dkp_prk, sizeof(dkp_prk), suite_id.data(),
449
+ suite_id.size(), "candidate", &counter_byte,
388
450
  sizeof(counter_byte))) {
389
451
  return 0;
390
452
  }
391
453
 
392
- // This checks that the scalar is less than the order.
454
+ // `ec_scalar_from_bytes` checks that the scalar is less than the order.
393
455
  if (ec_scalar_from_bytes(group, &private_scalar, out_priv,
394
- P256_PRIVATE_KEY_LEN)) {
456
+ P256_PRIVATE_KEY_LEN) &&
457
+ !ec_scalar_is_zero(group, &private_scalar)) {
395
458
  return 1;
396
459
  }
397
460
  }
@@ -401,16 +464,20 @@ static int p256_private_key_from_seed(uint8_t out_priv[P256_PRIVATE_KEY_LEN],
401
464
  return 0;
402
465
  }
403
466
 
404
- static int p256_generate_key(EVP_HPKE_KEY *key) {
405
- uint8_t seed[P256_SEED_LEN];
406
- RAND_bytes(seed, sizeof(seed));
407
- if (!p256_private_key_from_seed(key->private_key, seed) ||
467
+ static int p256_derive_key(EVP_HPKE_KEY *key, Span<const uint8_t> ikm) {
468
+ if (!p256_private_key_from_seed(key->private_key, ikm.data(), ikm.size()) ||
408
469
  !p256_public_from_private(key->public_key, key->private_key)) {
409
470
  return 0;
410
471
  }
411
472
  return 1;
412
473
  }
413
474
 
475
+ static int p256_generate_key(EVP_HPKE_KEY *key) {
476
+ uint8_t seed[P256_SEED_LEN];
477
+ RAND_bytes(seed, sizeof(seed));
478
+ return p256_derive_key(key, seed);
479
+ }
480
+
414
481
  static int p256(uint8_t out_dh[P256_SHARED_KEY_LEN],
415
482
  const uint8_t my_private[P256_PRIVATE_KEY_LEN],
416
483
  const uint8_t their_public[P256_PUBLIC_VALUE_LEN]) {
@@ -460,10 +527,10 @@ static int p256_encap_with_seed(const EVP_HPKE_KEM *kem,
460
527
  return 0;
461
528
  }
462
529
  uint8_t private_key[P256_PRIVATE_KEY_LEN];
463
- if (!p256_private_key_from_seed(private_key, seed)) {
530
+ if (!p256_private_key_from_seed(private_key, seed, seed_len) ||
531
+ !p256_public_from_private(out_enc, private_key)) {
464
532
  return 0;
465
533
  }
466
- p256_public_from_private(out_enc, private_key);
467
534
 
468
535
  uint8_t dh[P256_SHARED_KEY_LEN];
469
536
  if (peer_public_key_len != P256_PUBLIC_VALUE_LEN ||
@@ -525,10 +592,10 @@ static int p256_auth_encap_with_seed(
525
592
  return 0;
526
593
  }
527
594
  uint8_t private_key[P256_PRIVATE_KEY_LEN];
528
- if (!p256_private_key_from_seed(private_key, seed)) {
595
+ if (!p256_private_key_from_seed(private_key, seed, seed_len) ||
596
+ !p256_public_from_private(out_enc, private_key)) {
529
597
  return 0;
530
598
  }
531
- p256_public_from_private(out_enc, private_key);
532
599
 
533
600
  uint8_t dh[2 * P256_SHARED_KEY_LEN];
534
601
  if (peer_public_key_len != P256_PUBLIC_VALUE_LEN ||
@@ -584,7 +651,7 @@ static int p256_auth_decap(const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
584
651
  return 1;
585
652
  }
586
653
 
587
- const EVP_HPKE_KEM *EVP_hpke_p256_hkdf_sha256(void) {
654
+ const EVP_HPKE_KEM *EVP_hpke_p256_hkdf_sha256() {
588
655
  static const EVP_HPKE_KEM kKEM = {
589
656
  /*id=*/EVP_HPKE_DHKEM_P256_HKDF_SHA256,
590
657
  /*public_key_len=*/P256_PUBLIC_KEY_LEN,
@@ -593,6 +660,7 @@ const EVP_HPKE_KEM *EVP_hpke_p256_hkdf_sha256(void) {
593
660
  /*enc_len=*/P256_PUBLIC_VALUE_LEN,
594
661
  p256_init_key,
595
662
  p256_generate_key,
663
+ p256_derive_key,
596
664
  p256_encap_with_seed,
597
665
  p256_decap,
598
666
  p256_auth_encap_with_seed,
@@ -601,6 +669,293 @@ const EVP_HPKE_KEM *EVP_hpke_p256_hkdf_sha256(void) {
601
669
  return &kKEM;
602
670
  }
603
671
 
672
+ #define XWING_PRIVATE_KEY_LEN XWING_PRIVATE_KEY_BYTES
673
+ #define XWING_PUBLIC_KEY_LEN XWING_PUBLIC_KEY_BYTES
674
+ #define XWING_PUBLIC_VALUE_LEN XWING_CIPHERTEXT_BYTES
675
+ #define XWING_SEED_LEN 64
676
+ #define XWING_SHARED_KEY_LEN XWING_SHARED_SECRET_BYTES
677
+
678
+ static int xwing_init_key(EVP_HPKE_KEY *key, const uint8_t *priv_key,
679
+ size_t priv_key_len) {
680
+ CBS cbs;
681
+ CBS_init(&cbs, priv_key, priv_key_len);
682
+ XWING_private_key private_key;
683
+ if (!XWING_parse_private_key(&private_key, &cbs) || CBS_len(&cbs) != 0) {
684
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
685
+ return 0;
686
+ }
687
+
688
+ if (!XWING_public_from_private(key->public_key, &private_key)) {
689
+ return 0;
690
+ }
691
+
692
+ if (priv_key_len > sizeof(key->private_key)) {
693
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
694
+ return 0;
695
+ }
696
+ OPENSSL_memcpy(key->private_key, priv_key, priv_key_len);
697
+ return 1;
698
+ }
699
+
700
+ static int xwing_generate_key(EVP_HPKE_KEY *key) {
701
+ XWING_private_key private_key;
702
+ if (!XWING_generate_key(key->public_key, &private_key)) {
703
+ return 0;
704
+ }
705
+
706
+ CBB cbb;
707
+ CBB_init_fixed(&cbb, key->private_key, XWING_PRIVATE_KEY_LEN);
708
+ if (!XWING_marshal_private_key(&cbb, &private_key) ||
709
+ CBB_len(&cbb) != XWING_PRIVATE_KEY_LEN) {
710
+ return 0;
711
+ }
712
+
713
+ return 1;
714
+ }
715
+
716
+ static int xwing_derive_key(EVP_HPKE_KEY *key, Span<const uint8_t> ikm) {
717
+ uint8_t seed[32];
718
+ hpke_shake256_labeled_derive(seed, ikm, hpke_kem_suite_id(EVP_HPKE_XWING),
719
+ "DeriveKeyPair", /*context=*/{});
720
+ return xwing_init_key(key, seed, sizeof(seed));
721
+ }
722
+
723
+ static int xwing_encap_with_seed(const EVP_HPKE_KEM *kem,
724
+ uint8_t *out_shared_secret,
725
+ size_t *out_shared_secret_len,
726
+ uint8_t *out_enc, size_t *out_enc_len,
727
+ size_t max_enc, const uint8_t *peer_public_key,
728
+ size_t peer_public_key_len,
729
+ const uint8_t *seed, size_t seed_len) {
730
+ if (max_enc < XWING_PUBLIC_VALUE_LEN) {
731
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
732
+ return 0;
733
+ }
734
+ if (peer_public_key_len != XWING_PUBLIC_KEY_LEN ||
735
+ seed_len != XWING_SEED_LEN) {
736
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
737
+ return 0;
738
+ }
739
+
740
+ if (!XWING_encap_external_entropy(out_enc, out_shared_secret, peer_public_key,
741
+ seed)) {
742
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
743
+ return 0;
744
+ }
745
+
746
+ *out_enc_len = XWING_PUBLIC_VALUE_LEN;
747
+ *out_shared_secret_len = XWING_SHARED_KEY_LEN;
748
+ return 1;
749
+ }
750
+
751
+ static int xwing_decap(const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
752
+ size_t *out_shared_secret_len, const uint8_t *enc,
753
+ size_t enc_len) {
754
+ if (enc_len != XWING_PUBLIC_VALUE_LEN) {
755
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
756
+ return 0;
757
+ }
758
+
759
+ CBS cbs;
760
+ CBS_init(&cbs, key->private_key, XWING_PRIVATE_KEY_LEN);
761
+ XWING_private_key private_key;
762
+ if (!XWING_parse_private_key(&private_key, &cbs)) {
763
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
764
+ return 0;
765
+ }
766
+
767
+ if (!XWING_decap(out_shared_secret, enc, &private_key)) {
768
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
769
+ return 0;
770
+ }
771
+
772
+ *out_shared_secret_len = XWING_SHARED_KEY_LEN;
773
+ return 1;
774
+ }
775
+
776
+ const EVP_HPKE_KEM *EVP_hpke_xwing() {
777
+ static const EVP_HPKE_KEM kKEM = {
778
+ /*id=*/EVP_HPKE_XWING,
779
+ /*public_key_len=*/XWING_PUBLIC_KEY_LEN,
780
+ /*private_key_len=*/XWING_PRIVATE_KEY_LEN,
781
+ /*seed_len=*/XWING_SEED_LEN,
782
+ /*enc_len=*/XWING_PUBLIC_VALUE_LEN,
783
+ xwing_init_key,
784
+ xwing_generate_key,
785
+ xwing_derive_key,
786
+ xwing_encap_with_seed,
787
+ xwing_decap,
788
+ // X-Wing doesn't support authenticated encapsulation/decapsulation:
789
+ // https://datatracker.ietf.org/doc/html/draft-connolly-cfrg-xwing-kem-08#name-use-in-hpke
790
+ /* auth_encap_with_seed= */ nullptr,
791
+ /* auth_decap= */ nullptr,
792
+ };
793
+ return &kKEM;
794
+ }
795
+
796
+ namespace {
797
+
798
+ template <uint16_t KEM_ID, size_t PUBLIC_KEY_BYTES, size_t CIPHERTEXT_BYTES,
799
+ size_t ENCAP_ENTROPY_BYTES,
800
+
801
+ typename PrivateKey, typename PublicKey,
802
+
803
+ int (*PrivateKeyFromSeed)(PrivateKey *, const uint8_t *, size_t),
804
+ void (*PublicFromPrivate)(PublicKey *, const PrivateKey *),
805
+ int (*MarshalPublicKey)(CBB *, const PublicKey *),
806
+ void (*GenerateKey)(uint8_t *, uint8_t *, PrivateKey *),
807
+ int (*ParsePublicKey)(PublicKey *, CBS *),
808
+ bcm_infallible (*BCMEncapExternalEntropy)(
809
+ uint8_t *, uint8_t *, const PublicKey *, const uint8_t *),
810
+ int (*Decap)(uint8_t *, const uint8_t *, size_t, const PrivateKey *)>
811
+ struct MLKEMHPKE {
812
+ // These sizes are common across both ML-KEM-768 and ML-KEM-1024.
813
+ static constexpr size_t PRIVATE_KEY_LEN = MLKEM_SEED_BYTES;
814
+ static constexpr size_t SHARED_KEY_LEN = MLKEM_SHARED_SECRET_BYTES;
815
+
816
+ static constexpr uint16_t ID = KEM_ID;
817
+ static constexpr size_t PUBLIC_KEY_LEN = PUBLIC_KEY_BYTES;
818
+ static constexpr size_t SEED_LEN = ENCAP_ENTROPY_BYTES;
819
+ static constexpr size_t ENC_LEN = CIPHERTEXT_BYTES;
820
+
821
+ static int InitKey(EVP_HPKE_KEY *key, const uint8_t *priv_key,
822
+ size_t priv_key_len) {
823
+ PrivateKey expanded_private_key;
824
+ if (!PrivateKeyFromSeed(&expanded_private_key, priv_key, priv_key_len)) {
825
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
826
+ return 0;
827
+ }
828
+ PublicKey public_key;
829
+ PublicFromPrivate(&public_key, &expanded_private_key);
830
+ CBB cbb;
831
+ static_assert(sizeof(key->public_key) >= PUBLIC_KEY_BYTES,
832
+ "EVP_HPKE_KEY public_key is too small for ML-KEM.");
833
+ if (!CBB_init_fixed(&cbb, key->public_key, PUBLIC_KEY_BYTES) ||
834
+ !MarshalPublicKey(&cbb, &public_key)) {
835
+ return 0;
836
+ }
837
+
838
+ static_assert(sizeof(key->private_key) >= PRIVATE_KEY_LEN,
839
+ "EVP_HPKE_KEY private_key is too small for ML-KEM");
840
+ OPENSSL_memcpy(key->private_key, priv_key, priv_key_len);
841
+ return 1;
842
+ }
843
+
844
+ static int HpkeDeriveKey(EVP_HPKE_KEY *key, Span<const uint8_t> ikm) {
845
+ uint8_t seed[64];
846
+ hpke_shake256_labeled_derive(seed, ikm, hpke_kem_suite_id(ID),
847
+ "DeriveKeyPair",
848
+ /*context=*/{});
849
+ return InitKey(key, seed, sizeof(seed));
850
+ }
851
+
852
+ static int HpkeGenerateKey(EVP_HPKE_KEY *key) {
853
+ static_assert(sizeof(key->public_key) >= PUBLIC_KEY_BYTES,
854
+ "EVP_HPKE_KEY public_key is too small for ML-KEM.");
855
+ static_assert(sizeof(key->private_key) >= PRIVATE_KEY_LEN,
856
+ "EVP_HPKE_KEY private_key is too small for ML-KEM");
857
+ PrivateKey expanded_private_key;
858
+ GenerateKey(key->public_key, key->private_key, &expanded_private_key);
859
+
860
+ return 1;
861
+ }
862
+
863
+ static int EncapWithSeed(const EVP_HPKE_KEM *kem, uint8_t *out_shared_secret,
864
+ size_t *out_shared_secret_len, uint8_t *out_enc,
865
+ size_t *out_enc_len, size_t max_enc,
866
+ const uint8_t *peer_public_key,
867
+ size_t peer_public_key_len, const uint8_t *seed,
868
+ size_t seed_len) {
869
+ if (max_enc < CIPHERTEXT_BYTES) {
870
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_BUFFER_SIZE);
871
+ return 0;
872
+ }
873
+ if (peer_public_key_len != PUBLIC_KEY_BYTES ||
874
+ seed_len != ENCAP_ENTROPY_BYTES) {
875
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
876
+ return 0;
877
+ }
878
+
879
+ CBS cbs;
880
+ CBS_init(&cbs, peer_public_key, peer_public_key_len);
881
+ PublicKey public_key;
882
+ if (!ParsePublicKey(&public_key, &cbs)) {
883
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
884
+ return 0;
885
+ }
886
+ // The public ML-KEM interface doesn't support providing the encap entropy
887
+ // so the BCM function is used here.
888
+ BCMEncapExternalEntropy(out_enc, out_shared_secret, &public_key, seed);
889
+
890
+ *out_enc_len = CIPHERTEXT_BYTES;
891
+ *out_shared_secret_len = SHARED_KEY_LEN;
892
+ return 1;
893
+ }
894
+
895
+ static int HpkeDecap(const EVP_HPKE_KEY *key, uint8_t *out_shared_secret,
896
+ size_t *out_shared_secret_len, const uint8_t *enc,
897
+ size_t enc_len) {
898
+ PrivateKey private_key;
899
+ if (!PrivateKeyFromSeed(&private_key, key->private_key, PRIVATE_KEY_LEN)) {
900
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
901
+ return 0;
902
+ }
903
+
904
+ if (!Decap(out_shared_secret, enc, enc_len, &private_key)) {
905
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
906
+ return 0;
907
+ }
908
+
909
+ *out_shared_secret_len = SHARED_KEY_LEN;
910
+ return 1;
911
+ }
912
+ };
913
+
914
+ using MLKEM768HPKE =
915
+ MLKEMHPKE<EVP_HPKE_MLKEM768, MLKEM768_PUBLIC_KEY_BYTES,
916
+ MLKEM768_CIPHERTEXT_BYTES, BCM_MLKEM_ENCAP_ENTROPY,
917
+
918
+ MLKEM768_private_key, MLKEM768_public_key,
919
+
920
+ MLKEM768_private_key_from_seed, MLKEM768_public_from_private,
921
+ MLKEM768_marshal_public_key, MLKEM768_generate_key,
922
+ MLKEM768_parse_public_key, BCM_mlkem768_encap_external_entropy,
923
+ MLKEM768_decap>;
924
+
925
+ using MLKEM1024HPKE =
926
+ MLKEMHPKE<EVP_HPKE_MLKEM1024, MLKEM1024_PUBLIC_KEY_BYTES,
927
+ MLKEM1024_CIPHERTEXT_BYTES, BCM_MLKEM_ENCAP_ENTROPY,
928
+
929
+ MLKEM1024_private_key, MLKEM1024_public_key,
930
+
931
+ MLKEM1024_private_key_from_seed, MLKEM1024_public_from_private,
932
+ MLKEM1024_marshal_public_key, MLKEM1024_generate_key,
933
+ MLKEM1024_parse_public_key, BCM_mlkem1024_encap_external_entropy,
934
+ MLKEM1024_decap>;
935
+
936
+ template <typename MLKEM>
937
+ static const EVP_HPKE_KEM kMLKEM = {
938
+ /*id=*/MLKEM::ID,
939
+ /*public_key_len=*/MLKEM::PUBLIC_KEY_LEN,
940
+ /*private_key_len=*/MLKEM::PRIVATE_KEY_LEN,
941
+ /*seed_len=*/MLKEM::SEED_LEN,
942
+ /*enc_len=*/MLKEM::ENC_LEN,
943
+ MLKEM::InitKey,
944
+ MLKEM::HpkeGenerateKey,
945
+ MLKEM::HpkeDeriveKey,
946
+ MLKEM::EncapWithSeed,
947
+ MLKEM::HpkeDecap,
948
+ // ML-KEM doesn't support authenticated encapsulation/decapsulation:
949
+ // https://datatracker.ietf.org/doc/draft-ietf-hpke-pq/01/
950
+ /*auth_encap_with_seed=*/nullptr,
951
+ /*auth_decap=*/nullptr,
952
+ };
953
+
954
+ } // namespace
955
+
956
+ const EVP_HPKE_KEM *EVP_hpke_mlkem768() { return &kMLKEM<MLKEM768HPKE>; }
957
+ const EVP_HPKE_KEM *EVP_hpke_mlkem1024() { return &kMLKEM<MLKEM1024HPKE>; }
958
+
604
959
  uint16_t EVP_HPKE_KEM_id(const EVP_HPKE_KEM *kem) { return kem->id; }
605
960
 
606
961
  size_t EVP_HPKE_KEM_public_key_len(const EVP_HPKE_KEM *kem) {
@@ -622,32 +977,31 @@ void EVP_HPKE_KEY_cleanup(EVP_HPKE_KEY *key) {
622
977
  // future.
623
978
  }
624
979
 
625
- EVP_HPKE_KEY *EVP_HPKE_KEY_new(void) {
626
- EVP_HPKE_KEY *key =
627
- reinterpret_cast<EVP_HPKE_KEY *>(OPENSSL_malloc(sizeof(EVP_HPKE_KEY)));
628
- if (key == NULL) {
629
- return NULL;
980
+ EVP_HPKE_KEY *EVP_HPKE_KEY_new() {
981
+ EVP_HPKE_KEY *key = New<EVP_HPKE_KEY>();
982
+ if (key == nullptr) {
983
+ return nullptr;
630
984
  }
631
985
  EVP_HPKE_KEY_zero(key);
632
986
  return key;
633
987
  }
634
988
 
635
989
  void EVP_HPKE_KEY_free(EVP_HPKE_KEY *key) {
636
- if (key != NULL) {
990
+ if (key != nullptr) {
637
991
  EVP_HPKE_KEY_cleanup(key);
638
- OPENSSL_free(key);
992
+ Delete(key);
639
993
  }
640
994
  }
641
995
 
642
996
  int EVP_HPKE_KEY_copy(EVP_HPKE_KEY *dst, const EVP_HPKE_KEY *src) {
643
- // For now, |EVP_HPKE_KEY| is trivially copyable.
997
+ // For now, `EVP_HPKE_KEY` is trivially copyable.
644
998
  OPENSSL_memcpy(dst, src, sizeof(EVP_HPKE_KEY));
645
999
  return 1;
646
1000
  }
647
1001
 
648
1002
  void EVP_HPKE_KEY_move(EVP_HPKE_KEY *out, EVP_HPKE_KEY *in) {
649
1003
  EVP_HPKE_KEY_cleanup(out);
650
- // For now, |EVP_HPKE_KEY| is trivially movable.
1004
+ // For now, `EVP_HPKE_KEY` is trivially movable.
651
1005
  // Note that Rust may move this structure. See
652
1006
  // bssl-crypto/src/scoped.rs:EvpHpkeKey.
653
1007
  OPENSSL_memcpy(out, in, sizeof(EVP_HPKE_KEY));
@@ -659,7 +1013,7 @@ int EVP_HPKE_KEY_init(EVP_HPKE_KEY *key, const EVP_HPKE_KEM *kem,
659
1013
  EVP_HPKE_KEY_zero(key);
660
1014
  key->kem = kem;
661
1015
  if (!kem->init_key(key, priv_key, priv_key_len)) {
662
- key->kem = NULL;
1016
+ key->kem = nullptr;
663
1017
  return 0;
664
1018
  }
665
1019
  return 1;
@@ -669,7 +1023,18 @@ int EVP_HPKE_KEY_generate(EVP_HPKE_KEY *key, const EVP_HPKE_KEM *kem) {
669
1023
  EVP_HPKE_KEY_zero(key);
670
1024
  key->kem = kem;
671
1025
  if (!kem->generate_key(key)) {
672
- key->kem = NULL;
1026
+ key->kem = nullptr;
1027
+ return 0;
1028
+ }
1029
+ return 1;
1030
+ }
1031
+
1032
+ int EVP_HPKE_KEY_derive(EVP_HPKE_KEY *key, const EVP_HPKE_KEM *kem,
1033
+ const uint8_t *ikm, size_t ikm_len) {
1034
+ EVP_HPKE_KEY_zero(key);
1035
+ key->kem = kem;
1036
+ if (!kem->derive_key(key, Span(ikm, ikm_len))) {
1037
+ key->kem = nullptr;
673
1038
  return 0;
674
1039
  }
675
1040
  return 1;
@@ -704,30 +1069,35 @@ int EVP_HPKE_KEY_private_key(const EVP_HPKE_KEY *key, uint8_t *out,
704
1069
 
705
1070
  // Supported KDFs and AEADs.
706
1071
 
707
- const EVP_HPKE_KDF *EVP_hpke_hkdf_sha256(void) {
1072
+ const EVP_HPKE_KDF *EVP_hpke_hkdf_sha256() {
708
1073
  static const EVP_HPKE_KDF kKDF = {EVP_HPKE_HKDF_SHA256, &EVP_sha256};
709
1074
  return &kKDF;
710
1075
  }
711
1076
 
1077
+ const EVP_HPKE_KDF *EVP_hpke_hkdf_sha384() {
1078
+ static const EVP_HPKE_KDF kKDF = {EVP_HPKE_HKDF_SHA384, &EVP_sha384};
1079
+ return &kKDF;
1080
+ }
1081
+
712
1082
  uint16_t EVP_HPKE_KDF_id(const EVP_HPKE_KDF *kdf) { return kdf->id; }
713
1083
 
714
1084
  const EVP_MD *EVP_HPKE_KDF_hkdf_md(const EVP_HPKE_KDF *kdf) {
715
1085
  return kdf->hkdf_md_func();
716
1086
  }
717
1087
 
718
- const EVP_HPKE_AEAD *EVP_hpke_aes_128_gcm(void) {
1088
+ const EVP_HPKE_AEAD *EVP_hpke_aes_128_gcm() {
719
1089
  static const EVP_HPKE_AEAD kAEAD = {EVP_HPKE_AES_128_GCM,
720
1090
  &EVP_aead_aes_128_gcm};
721
1091
  return &kAEAD;
722
1092
  }
723
1093
 
724
- const EVP_HPKE_AEAD *EVP_hpke_aes_256_gcm(void) {
1094
+ const EVP_HPKE_AEAD *EVP_hpke_aes_256_gcm() {
725
1095
  static const EVP_HPKE_AEAD kAEAD = {EVP_HPKE_AES_256_GCM,
726
1096
  &EVP_aead_aes_256_gcm};
727
1097
  return &kAEAD;
728
1098
  }
729
1099
 
730
- const EVP_HPKE_AEAD *EVP_hpke_chacha20_poly1305(void) {
1100
+ const EVP_HPKE_AEAD *EVP_hpke_chacha20_poly1305() {
731
1101
  static const EVP_HPKE_AEAD kAEAD = {EVP_HPKE_CHACHA20_POLY1305,
732
1102
  &EVP_aead_chacha20_poly1305};
733
1103
  return &kAEAD;
@@ -742,19 +1112,19 @@ const EVP_AEAD *EVP_HPKE_AEAD_aead(const EVP_HPKE_AEAD *aead) {
742
1112
 
743
1113
  // HPKE implementation.
744
1114
 
745
- // This is strlen("HPKE") + 3 * sizeof(uint16_t).
746
- #define HPKE_SUITE_ID_LEN 10
747
-
748
- // The suite_id for non-KEM pieces of HPKE is defined as concat("HPKE",
749
- // I2OSP(kem_id, 2), I2OSP(kdf_id, 2), I2OSP(aead_id, 2)).
750
- static int hpke_build_suite_id(const EVP_HPKE_CTX *ctx,
751
- uint8_t out[HPKE_SUITE_ID_LEN]) {
752
- CBB cbb;
753
- CBB_init_fixed(&cbb, out, HPKE_SUITE_ID_LEN);
754
- return add_label_string(&cbb, "HPKE") && //
755
- CBB_add_u16(&cbb, ctx->kem->id) && //
756
- CBB_add_u16(&cbb, ctx->kdf->id) && //
757
- CBB_add_u16(&cbb, ctx->aead->id);
1115
+ static std::array<uint8_t, 10> hpke_full_suite_id(const EVP_HPKE_CTX *ctx) {
1116
+ return {
1117
+ 'H',
1118
+ 'P',
1119
+ 'K',
1120
+ 'E',
1121
+ static_cast<uint8_t>(ctx->kem->id >> 8),
1122
+ static_cast<uint8_t>(ctx->kem->id),
1123
+ static_cast<uint8_t>(ctx->kdf->id >> 8),
1124
+ static_cast<uint8_t>(ctx->kdf->id),
1125
+ static_cast<uint8_t>(ctx->aead->id >> 8),
1126
+ static_cast<uint8_t>(ctx->aead->id),
1127
+ };
758
1128
  }
759
1129
 
760
1130
  #define HPKE_MODE_BASE 0
@@ -764,27 +1134,24 @@ static int hpke_key_schedule(EVP_HPKE_CTX *ctx, uint8_t mode,
764
1134
  const uint8_t *shared_secret,
765
1135
  size_t shared_secret_len, const uint8_t *info,
766
1136
  size_t info_len) {
767
- uint8_t suite_id[HPKE_SUITE_ID_LEN];
768
- if (!hpke_build_suite_id(ctx, suite_id)) {
769
- return 0;
770
- }
1137
+ auto suite_id = hpke_full_suite_id(ctx);
771
1138
 
772
1139
  // psk_id_hash = LabeledExtract("", "psk_id_hash", psk_id)
773
1140
  // TODO(davidben): Precompute this value and store it with the EVP_HPKE_KDF.
774
1141
  const EVP_MD *hkdf_md = ctx->kdf->hkdf_md_func();
775
1142
  uint8_t psk_id_hash[EVP_MAX_MD_SIZE];
776
1143
  size_t psk_id_hash_len;
777
- if (!hpke_labeled_extract(hkdf_md, psk_id_hash, &psk_id_hash_len, NULL, 0,
778
- suite_id, sizeof(suite_id), "psk_id_hash", NULL,
779
- 0)) {
1144
+ if (!hpke_labeled_extract(hkdf_md, psk_id_hash, &psk_id_hash_len, nullptr, 0,
1145
+ suite_id.data(), suite_id.size(), "psk_id_hash",
1146
+ nullptr, 0)) {
780
1147
  return 0;
781
1148
  }
782
1149
 
783
1150
  // info_hash = LabeledExtract("", "info_hash", info)
784
1151
  uint8_t info_hash[EVP_MAX_MD_SIZE];
785
1152
  size_t info_hash_len;
786
- if (!hpke_labeled_extract(hkdf_md, info_hash, &info_hash_len, NULL, 0,
787
- suite_id, sizeof(suite_id), "info_hash", info,
1153
+ if (!hpke_labeled_extract(hkdf_md, info_hash, &info_hash_len, nullptr, 0,
1154
+ suite_id.data(), suite_id.size(), "info_hash", info,
788
1155
  info_len)) {
789
1156
  return 0;
790
1157
  }
@@ -797,7 +1164,7 @@ static int hpke_key_schedule(EVP_HPKE_CTX *ctx, uint8_t mode,
797
1164
  if (!CBB_add_u8(&context_cbb, mode) ||
798
1165
  !CBB_add_bytes(&context_cbb, psk_id_hash, psk_id_hash_len) ||
799
1166
  !CBB_add_bytes(&context_cbb, info_hash, info_hash_len) ||
800
- !CBB_finish(&context_cbb, NULL, &context_len)) {
1167
+ !CBB_finish(&context_cbb, nullptr, &context_len)) {
801
1168
  return 0;
802
1169
  }
803
1170
 
@@ -805,8 +1172,8 @@ static int hpke_key_schedule(EVP_HPKE_CTX *ctx, uint8_t mode,
805
1172
  uint8_t secret[EVP_MAX_MD_SIZE];
806
1173
  size_t secret_len;
807
1174
  if (!hpke_labeled_extract(hkdf_md, secret, &secret_len, shared_secret,
808
- shared_secret_len, suite_id, sizeof(suite_id),
809
- "secret", NULL, 0)) {
1175
+ shared_secret_len, suite_id.data(), suite_id.size(),
1176
+ "secret", nullptr, 0)) {
810
1177
  return 0;
811
1178
  }
812
1179
 
@@ -814,24 +1181,25 @@ static int hpke_key_schedule(EVP_HPKE_CTX *ctx, uint8_t mode,
814
1181
  const EVP_AEAD *aead = EVP_HPKE_AEAD_aead(ctx->aead);
815
1182
  uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
816
1183
  const size_t kKeyLen = EVP_AEAD_key_length(aead);
817
- if (!hpke_labeled_expand(hkdf_md, key, kKeyLen, secret, secret_len, suite_id,
818
- sizeof(suite_id), "key", context, context_len) ||
1184
+ if (!hpke_labeled_expand(hkdf_md, key, kKeyLen, secret, secret_len,
1185
+ suite_id.data(), suite_id.size(), "key", context,
1186
+ context_len) ||
819
1187
  !EVP_AEAD_CTX_init(&ctx->aead_ctx, aead, key, kKeyLen,
820
- EVP_AEAD_DEFAULT_TAG_LENGTH, NULL)) {
1188
+ EVP_AEAD_DEFAULT_TAG_LENGTH, nullptr)) {
821
1189
  return 0;
822
1190
  }
823
1191
 
824
1192
  // base_nonce = LabeledExpand(secret, "base_nonce", key_schedule_context, Nn)
825
1193
  if (!hpke_labeled_expand(hkdf_md, ctx->base_nonce,
826
1194
  EVP_AEAD_nonce_length(aead), secret, secret_len,
827
- suite_id, sizeof(suite_id), "base_nonce", context,
828
- context_len)) {
1195
+ suite_id.data(), suite_id.size(), "base_nonce",
1196
+ context, context_len)) {
829
1197
  return 0;
830
1198
  }
831
1199
 
832
1200
  // exporter_secret = LabeledExpand(secret, "exp", key_schedule_context, Nh)
833
1201
  if (!hpke_labeled_expand(hkdf_md, ctx->exporter_secret, EVP_MD_size(hkdf_md),
834
- secret, secret_len, suite_id, sizeof(suite_id),
1202
+ secret, secret_len, suite_id.data(), suite_id.size(),
835
1203
  "exp", context, context_len)) {
836
1204
  return 0;
837
1205
  }
@@ -848,20 +1216,19 @@ void EVP_HPKE_CTX_cleanup(EVP_HPKE_CTX *ctx) {
848
1216
  EVP_AEAD_CTX_cleanup(&ctx->aead_ctx);
849
1217
  }
850
1218
 
851
- EVP_HPKE_CTX *EVP_HPKE_CTX_new(void) {
852
- EVP_HPKE_CTX *ctx =
853
- reinterpret_cast<EVP_HPKE_CTX *>(OPENSSL_malloc(sizeof(EVP_HPKE_CTX)));
854
- if (ctx == NULL) {
855
- return NULL;
1219
+ EVP_HPKE_CTX *EVP_HPKE_CTX_new() {
1220
+ EVP_HPKE_CTX *ctx = New<EVP_HPKE_CTX>();
1221
+ if (ctx == nullptr) {
1222
+ return nullptr;
856
1223
  }
857
1224
  EVP_HPKE_CTX_zero(ctx);
858
1225
  return ctx;
859
1226
  }
860
1227
 
861
1228
  void EVP_HPKE_CTX_free(EVP_HPKE_CTX *ctx) {
862
- if (ctx != NULL) {
1229
+ if (ctx != nullptr) {
863
1230
  EVP_HPKE_CTX_cleanup(ctx);
864
- OPENSSL_free(ctx);
1231
+ Delete(ctx);
865
1232
  }
866
1233
  }
867
1234
 
@@ -943,7 +1310,7 @@ int EVP_HPKE_CTX_setup_auth_sender_with_seed_for_testing(
943
1310
  const uint8_t *peer_public_key, size_t peer_public_key_len,
944
1311
  const uint8_t *info, size_t info_len, const uint8_t *seed,
945
1312
  size_t seed_len) {
946
- if (key->kem->auth_encap_with_seed == NULL) {
1313
+ if (key->kem->auth_encap_with_seed == nullptr) {
947
1314
  // Not all HPKE KEMs support AuthEncap.
948
1315
  OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
949
1316
  return 0;
@@ -972,7 +1339,7 @@ int EVP_HPKE_CTX_setup_auth_recipient(
972
1339
  const EVP_HPKE_AEAD *aead, const uint8_t *enc, size_t enc_len,
973
1340
  const uint8_t *info, size_t info_len, const uint8_t *peer_public_key,
974
1341
  size_t peer_public_key_len) {
975
- if (key->kem->auth_decap == NULL) {
1342
+ if (key->kem->auth_decap == nullptr) {
976
1343
  // Not all HPKE KEMs support AuthDecap.
977
1344
  OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
978
1345
  return 0;
@@ -999,7 +1366,7 @@ static void hpke_nonce(const EVP_HPKE_CTX *ctx, uint8_t *out_nonce,
999
1366
  size_t nonce_len) {
1000
1367
  assert(nonce_len >= 8);
1001
1368
 
1002
- // Write padded big-endian bytes of |ctx->seq| to |out_nonce|.
1369
+ // Write padded big-endian bytes of `ctx->seq` to `out_nonce`.
1003
1370
  OPENSSL_memset(out_nonce, 0, nonce_len);
1004
1371
  uint64_t seq_copy = ctx->seq;
1005
1372
  for (size_t i = 0; i < 8; i++) {
@@ -1007,7 +1374,7 @@ static void hpke_nonce(const EVP_HPKE_CTX *ctx, uint8_t *out_nonce,
1007
1374
  seq_copy >>= 8;
1008
1375
  }
1009
1376
 
1010
- // XOR the encoded sequence with the |ctx->base_nonce|.
1377
+ // XOR the encoded sequence with the `ctx->base_nonce`.
1011
1378
  for (size_t i = 0; i < nonce_len; i++) {
1012
1379
  out_nonce[i] ^= ctx->base_nonce[i];
1013
1380
  }
@@ -1064,14 +1431,11 @@ int EVP_HPKE_CTX_seal(EVP_HPKE_CTX *ctx, uint8_t *out, size_t *out_len,
1064
1431
  int EVP_HPKE_CTX_export(const EVP_HPKE_CTX *ctx, uint8_t *out,
1065
1432
  size_t secret_len, const uint8_t *context,
1066
1433
  size_t context_len) {
1067
- uint8_t suite_id[HPKE_SUITE_ID_LEN];
1068
- if (!hpke_build_suite_id(ctx, suite_id)) {
1069
- return 0;
1070
- }
1434
+ auto suite_id = hpke_full_suite_id(ctx);
1071
1435
  const EVP_MD *hkdf_md = ctx->kdf->hkdf_md_func();
1072
1436
  if (!hpke_labeled_expand(hkdf_md, out, secret_len, ctx->exporter_secret,
1073
- EVP_MD_size(hkdf_md), suite_id, sizeof(suite_id),
1074
- "sec", context, context_len)) {
1437
+ EVP_MD_size(hkdf_md), suite_id.data(),
1438
+ suite_id.size(), "sec", context, context_len)) {
1075
1439
  return 0;
1076
1440
  }
1077
1441
  return 1;