grpc 1.84.1 → 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.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (1005) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/etc/roots.pem +7940 -6467
  4. data/include/grpc/event_engine/memory_allocator.h +1 -0
  5. data/include/grpc/grpc.h +3 -0
  6. data/include/grpc/grpc_security_constants.h +2 -0
  7. data/include/grpc/impl/channel_arg_names.h +4 -0
  8. data/src/core/call/call_filters.h +10 -10
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  10. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  11. data/src/core/call/filter_fusion.h +15 -15
  12. data/src/core/call/interception_chain.h +3 -3
  13. data/src/core/call/metadata_batch.cc +1 -0
  14. data/src/core/call/metadata_batch.h +45 -33
  15. data/src/core/call/parsed_metadata.h +3 -3
  16. data/src/core/call/request_buffer.cc +6 -6
  17. data/src/core/call/request_buffer.h +1 -1
  18. data/src/core/channelz/channel_trace.cc +5 -5
  19. data/src/core/channelz/channel_trace.h +1 -1
  20. data/src/core/channelz/channelz.cc +9 -9
  21. data/src/core/channelz/channelz.h +12 -12
  22. data/src/core/channelz/channelz_registry.cc +10 -10
  23. data/src/core/channelz/ztrace_collector.h +5 -5
  24. data/src/core/client_channel/client_channel.cc +4 -4
  25. data/src/core/client_channel/client_channel_filter.cc +14 -14
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  27. data/src/core/client_channel/subchannel.cc +24 -23
  28. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  29. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  30. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  31. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  32. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  33. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  34. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  35. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  39. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  40. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  41. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  42. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  43. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  44. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  45. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  46. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  48. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  50. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  51. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  53. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  54. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  55. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  56. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  57. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  59. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  61. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  63. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  65. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  66. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  67. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  68. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  70. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  71. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  72. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  73. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  74. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  76. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  85. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  87. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  97. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  98. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  99. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  100. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  101. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  102. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  103. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  104. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  105. data/src/core/handshaker/handshaker.cc +4 -4
  106. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  107. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  108. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  109. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  110. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  111. data/src/core/lib/channel/channel_args.cc +20 -0
  112. data/src/core/lib/channel/channel_args.h +17 -17
  113. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  114. data/src/core/lib/channel/promise_based_filter.h +66 -27
  115. data/src/core/lib/debug/trace_flags.cc +2 -0
  116. data/src/core/lib/debug/trace_flags.h +1 -0
  117. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  118. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  119. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  120. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  121. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  122. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  123. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  124. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  126. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  127. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  128. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  129. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  132. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  134. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  135. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  136. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  137. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  138. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  139. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  141. data/src/core/lib/experiments/experiments.cc +48 -0
  142. data/src/core/lib/experiments/experiments.h +24 -0
  143. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  144. data/src/core/lib/iomgr/buffer_list.h +1 -1
  145. data/src/core/lib/iomgr/combiner.cc +0 -1
  146. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  147. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  148. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  149. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  150. data/src/core/lib/promise/activity.cc +1 -1
  151. data/src/core/lib/promise/activity.h +1 -1
  152. data/src/core/lib/promise/arena_promise.h +7 -7
  153. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  154. data/src/core/lib/promise/detail/promise_like.h +4 -4
  155. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  156. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  157. data/src/core/lib/promise/observable.h +3 -3
  158. data/src/core/lib/promise/party.cc +1 -1
  159. data/src/core/lib/promise/try_seq.h +2 -2
  160. data/src/core/lib/resource_quota/arena.h +3 -3
  161. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  162. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  163. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  164. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  165. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  168. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  169. data/src/core/lib/security/authorization/matchers.h +1 -1
  170. data/src/core/lib/surface/call.cc +8 -7
  171. data/src/core/lib/surface/call.h +3 -3
  172. data/src/core/lib/surface/call_utils.h +4 -0
  173. data/src/core/lib/surface/channel.cc +1 -1
  174. data/src/core/lib/surface/channel.h +1 -1
  175. data/src/core/lib/surface/channel_init.cc +1 -1
  176. data/src/core/lib/surface/init.cc +7 -7
  177. data/src/core/lib/surface/lame_client.cc +1 -1
  178. data/src/core/lib/surface/legacy_channel.cc +2 -2
  179. data/src/core/lib/surface/version.cc +1 -1
  180. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  181. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  182. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  183. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  184. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  185. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  186. data/src/core/load_balancing/health_check_client.cc +7 -7
  187. data/src/core/load_balancing/lb_policy.cc +1 -1
  188. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  189. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  190. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  191. data/src/core/load_balancing/rls/rls.cc +23 -17
  192. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  193. data/src/core/load_balancing/xds/cds.cc +6 -5
  194. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  195. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  196. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  197. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  198. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  199. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  200. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  201. data/src/core/server/server.cc +30 -30
  202. data/src/core/server/server.h +4 -3
  203. data/src/core/server/server_config_selector_filter.cc +3 -3
  204. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  205. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  206. data/src/core/telemetry/instrument.cc +30 -16
  207. data/src/core/telemetry/instrument.h +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  210. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  211. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  212. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  213. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  214. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  215. data/src/core/tsi/ssl_transport_security.cc +46 -13
  216. data/src/core/tsi/ssl_transport_security.h +7 -0
  217. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  218. data/src/core/util/event_log.cc +3 -3
  219. data/src/core/util/http_client/httpcli.cc +5 -5
  220. data/src/core/util/http_client/httpcli.h +1 -1
  221. data/src/core/util/json/json_object_loader.cc +7 -0
  222. data/src/core/util/json/json_object_loader.h +17 -2
  223. data/src/core/util/latent_see.cc +123 -36
  224. data/src/core/util/latent_see.h +14 -1
  225. data/src/core/util/mpscq.cc +1 -1
  226. data/src/core/util/notification.h +4 -4
  227. data/src/core/util/sync.h +20 -6
  228. data/src/core/util/table.h +20 -22
  229. data/src/core/util/work_serializer.cc +2 -2
  230. data/src/core/xds/grpc/blackboard.cc +4 -3
  231. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  233. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  234. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  235. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  236. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  237. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  238. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  239. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  240. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  241. data/src/core/xds/grpc/xds_matcher.h +2 -2
  242. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  243. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  244. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  245. data/src/core/xds/xds_client/xds_client.cc +19 -16
  246. data/src/core/xds/xds_client/xds_transport.h +49 -3
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  248. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  249. data/src/ruby/lib/grpc/version.rb +1 -1
  250. data/src/ruby/pb/README.md +1 -1
  251. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  252. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  253. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  254. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  255. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  256. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  257. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  258. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  259. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  260. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  261. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  262. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  265. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  266. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  268. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  269. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  270. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  273. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  274. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  275. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  276. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  277. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  278. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  280. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  281. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  282. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  283. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  284. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  285. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  286. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  287. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  288. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  289. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  290. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  291. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  292. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  293. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  294. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  295. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  296. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  297. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  300. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  301. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  305. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  306. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  308. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  309. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  310. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  313. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  314. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  316. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  317. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  326. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  327. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  328. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  330. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  331. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  335. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  336. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  337. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  338. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  341. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  342. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  343. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  344. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  345. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  346. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  347. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  348. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  349. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  350. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  351. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  352. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  353. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  354. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  356. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  357. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  358. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  360. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  361. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  362. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  364. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  365. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  366. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  367. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  368. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  370. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  372. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  373. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  374. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  375. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  376. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  377. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  378. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  379. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  380. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  381. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  382. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  383. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  384. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  385. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  386. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  387. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  388. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  389. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  390. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  391. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  393. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  395. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  396. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  397. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  398. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  399. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  401. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  402. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  403. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  404. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  405. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  407. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  408. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  409. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  410. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  411. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  412. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  413. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  414. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  415. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  416. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  417. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  418. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  419. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  423. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  427. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  428. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  429. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  433. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  434. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  435. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  436. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  437. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  438. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  439. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  440. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  441. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  442. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  443. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  444. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  445. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  446. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  447. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  448. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  449. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  450. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  451. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  453. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  454. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  455. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  456. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  457. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  458. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  459. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  465. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  466. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  467. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  468. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  469. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  470. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  471. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  472. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  473. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  474. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  475. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  476. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  477. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  478. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  492. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  494. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  497. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  498. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  504. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  505. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  506. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  508. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  509. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  510. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  511. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  512. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  513. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  514. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  515. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  516. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  518. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  519. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  520. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  521. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  522. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  523. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  524. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  525. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  531. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  532. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  533. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  534. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  543. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  544. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  545. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  546. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  547. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  548. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  549. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  555. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  558. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  559. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  560. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  564. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  565. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  566. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  567. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  568. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  569. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  571. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  572. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  574. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  575. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  576. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  577. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  579. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  580. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  581. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  582. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  586. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  587. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  597. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  598. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  599. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  600. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  601. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  602. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  709. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  710. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  711. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  712. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  713. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  714. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  715. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  716. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  717. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  718. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  719. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  720. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  721. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  722. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  723. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  724. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  725. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  728. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  729. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  730. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  736. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  739. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  743. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  747. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  748. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  749. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  750. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  751. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  752. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  753. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  754. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  755. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  756. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  757. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  758. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  759. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  760. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  761. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  765. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  768. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  769. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  770. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  772. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  773. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  774. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  775. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  776. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  777. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  781. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  784. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  785. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  786. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  788. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  789. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  790. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  791. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  792. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  796. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  819. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  837. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  849. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  850. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  853. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  854. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  855. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  856. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  858. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  859. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  860. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  861. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  862. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  863. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  864. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  865. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  866. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  867. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  868. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  869. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  870. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  871. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  872. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  873. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  874. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  875. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  876. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  877. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  878. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  879. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  880. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  881. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  883. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  884. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  885. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  886. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  887. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  888. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  889. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  890. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  891. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  892. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  893. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  894. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  895. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  897. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  898. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  899. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  900. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  901. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  902. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  904. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  906. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  907. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  908. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  909. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  913. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  914. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  915. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  916. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  917. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  918. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  919. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  920. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  921. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  923. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  924. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  925. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  926. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  927. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  928. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  929. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  930. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  931. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  932. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  933. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  934. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  935. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  936. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  937. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  938. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  939. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  940. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  941. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  942. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  943. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  944. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  945. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  946. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  947. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  948. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  949. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  950. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  951. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  952. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  953. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  955. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  956. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  957. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  958. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  959. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  960. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  961. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  962. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  963. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  964. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  965. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  966. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  967. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  968. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  969. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  970. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  971. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  974. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  979. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  980. metadata +77 -52
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  982. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  984. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  985. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  986. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  987. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  989. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  990. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  996. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  1000. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1001. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1002. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1003. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1004. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1005. 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;