grpc 1.84.0 → 1.85.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1004) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/include/grpc/event_engine/memory_allocator.h +1 -0
  4. data/include/grpc/grpc.h +3 -0
  5. data/include/grpc/grpc_security_constants.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +4 -0
  7. data/src/core/call/call_filters.h +10 -10
  8. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  10. data/src/core/call/filter_fusion.h +15 -15
  11. data/src/core/call/interception_chain.h +3 -3
  12. data/src/core/call/metadata_batch.cc +1 -0
  13. data/src/core/call/metadata_batch.h +45 -33
  14. data/src/core/call/parsed_metadata.h +3 -3
  15. data/src/core/call/request_buffer.cc +6 -6
  16. data/src/core/call/request_buffer.h +1 -1
  17. data/src/core/channelz/channel_trace.cc +5 -5
  18. data/src/core/channelz/channel_trace.h +1 -1
  19. data/src/core/channelz/channelz.cc +9 -9
  20. data/src/core/channelz/channelz.h +12 -12
  21. data/src/core/channelz/channelz_registry.cc +10 -10
  22. data/src/core/channelz/ztrace_collector.h +5 -5
  23. data/src/core/client_channel/client_channel.cc +4 -4
  24. data/src/core/client_channel/client_channel_filter.cc +14 -14
  25. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  26. data/src/core/client_channel/subchannel.cc +24 -23
  27. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  28. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  29. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  30. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  31. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  32. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  33. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  34. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  39. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  40. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  41. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  42. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  43. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  45. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  46. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  48. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  49. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  50. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  51. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  53. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  55. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  56. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  61. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  63. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  65. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  68. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  70. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  72. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  73. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  74. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  76. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  85. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  87. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  97. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  98. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  99. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  100. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  101. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  102. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  103. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  104. data/src/core/handshaker/handshaker.cc +4 -4
  105. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  106. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  107. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  108. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  109. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  110. data/src/core/lib/channel/channel_args.cc +20 -0
  111. data/src/core/lib/channel/channel_args.h +17 -17
  112. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  113. data/src/core/lib/channel/promise_based_filter.h +66 -27
  114. data/src/core/lib/debug/trace_flags.cc +2 -0
  115. data/src/core/lib/debug/trace_flags.h +1 -0
  116. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  117. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  118. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  119. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  120. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  121. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  122. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  123. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  124. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  126. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  127. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  128. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  129. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  132. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  134. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  136. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  137. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  139. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  140. data/src/core/lib/experiments/experiments.cc +48 -0
  141. data/src/core/lib/experiments/experiments.h +24 -0
  142. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  143. data/src/core/lib/iomgr/buffer_list.h +1 -1
  144. data/src/core/lib/iomgr/combiner.cc +0 -1
  145. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  146. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  147. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  148. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  149. data/src/core/lib/promise/activity.cc +1 -1
  150. data/src/core/lib/promise/activity.h +1 -1
  151. data/src/core/lib/promise/arena_promise.h +7 -7
  152. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  153. data/src/core/lib/promise/detail/promise_like.h +4 -4
  154. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  155. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  156. data/src/core/lib/promise/observable.h +3 -3
  157. data/src/core/lib/promise/party.cc +1 -1
  158. data/src/core/lib/promise/try_seq.h +2 -2
  159. data/src/core/lib/resource_quota/arena.h +3 -3
  160. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  161. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  162. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  163. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  164. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  165. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  168. data/src/core/lib/security/authorization/matchers.h +1 -1
  169. data/src/core/lib/surface/call.cc +8 -7
  170. data/src/core/lib/surface/call.h +3 -3
  171. data/src/core/lib/surface/call_utils.h +4 -0
  172. data/src/core/lib/surface/channel.cc +1 -1
  173. data/src/core/lib/surface/channel.h +1 -1
  174. data/src/core/lib/surface/channel_init.cc +1 -1
  175. data/src/core/lib/surface/init.cc +7 -7
  176. data/src/core/lib/surface/lame_client.cc +1 -1
  177. data/src/core/lib/surface/legacy_channel.cc +2 -2
  178. data/src/core/lib/surface/version.cc +1 -1
  179. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  180. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  181. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  182. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  183. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  184. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  185. data/src/core/load_balancing/health_check_client.cc +7 -7
  186. data/src/core/load_balancing/lb_policy.cc +1 -1
  187. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  188. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  189. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  190. data/src/core/load_balancing/rls/rls.cc +23 -17
  191. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  192. data/src/core/load_balancing/xds/cds.cc +6 -5
  193. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  194. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  195. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  196. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  197. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  198. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  199. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  200. data/src/core/server/server.cc +30 -30
  201. data/src/core/server/server.h +4 -3
  202. data/src/core/server/server_config_selector_filter.cc +3 -3
  203. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  204. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  205. data/src/core/telemetry/instrument.cc +30 -16
  206. data/src/core/telemetry/instrument.h +3 -3
  207. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  210. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  211. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  212. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  213. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  214. data/src/core/tsi/ssl_transport_security.cc +46 -13
  215. data/src/core/tsi/ssl_transport_security.h +7 -0
  216. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  217. data/src/core/util/event_log.cc +3 -3
  218. data/src/core/util/http_client/httpcli.cc +5 -5
  219. data/src/core/util/http_client/httpcli.h +1 -1
  220. data/src/core/util/json/json_object_loader.cc +7 -0
  221. data/src/core/util/json/json_object_loader.h +17 -2
  222. data/src/core/util/latent_see.cc +123 -36
  223. data/src/core/util/latent_see.h +14 -1
  224. data/src/core/util/mpscq.cc +1 -1
  225. data/src/core/util/notification.h +4 -4
  226. data/src/core/util/sync.h +20 -6
  227. data/src/core/util/table.h +20 -22
  228. data/src/core/util/work_serializer.cc +2 -2
  229. data/src/core/xds/grpc/blackboard.cc +4 -3
  230. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  231. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  233. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  234. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  235. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  236. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  237. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  238. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  239. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  240. data/src/core/xds/grpc/xds_matcher.h +2 -2
  241. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  242. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  243. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  244. data/src/core/xds/xds_client/xds_client.cc +19 -16
  245. data/src/core/xds/xds_client/xds_transport.h +49 -3
  246. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  248. data/src/ruby/lib/grpc/version.rb +1 -1
  249. data/src/ruby/pb/README.md +1 -1
  250. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  251. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  252. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  253. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  254. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  255. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  256. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  257. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  258. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  259. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  260. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  261. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  262. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  265. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  266. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  268. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  269. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  270. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  273. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  274. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  275. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  276. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  277. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  278. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  280. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  281. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  282. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  283. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  284. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  285. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  286. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  287. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  288. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  289. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  290. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  291. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  292. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  293. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  294. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  295. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  296. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  297. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  300. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  301. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  305. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  306. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  308. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  309. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  310. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  313. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  314. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  316. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  317. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  326. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  327. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  328. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  330. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  331. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  335. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  336. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  337. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  338. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  341. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  342. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  343. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  344. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  345. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  346. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  347. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  348. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  349. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  350. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  351. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  352. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  353. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  354. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  356. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  357. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  358. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  360. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  361. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  362. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  364. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  365. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  366. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  367. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  368. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  370. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  372. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  373. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  374. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  375. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  376. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  377. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  378. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  379. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  380. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  381. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  382. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  383. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  384. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  385. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  386. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  387. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  388. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  389. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  390. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  391. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  393. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  395. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  396. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  397. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  398. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  399. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  401. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  402. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  403. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  404. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  405. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  407. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  408. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  409. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  410. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  411. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  412. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  413. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  414. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  415. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  416. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  417. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  418. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  420. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  423. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  427. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  428. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  429. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  433. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  434. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  435. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  436. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  437. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  438. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  439. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  440. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  441. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  442. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  443. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  444. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  445. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  446. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  447. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  448. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  449. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  450. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  451. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  453. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  454. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  455. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  456. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  457. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  458. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  459. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  465. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  466. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  467. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  468. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  469. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  470. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  471. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  472. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  473. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  474. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  475. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  476. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  477. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  478. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  492. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  494. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  497. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  498. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  504. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  505. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  506. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  508. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  509. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  510. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  511. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  512. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  513. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  514. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  515. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  516. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  518. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  519. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  520. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  521. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  522. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  523. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  524. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  525. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  531. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  532. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  533. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  534. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  543. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  544. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  545. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  546. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  547. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  548. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  549. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  555. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  558. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  559. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  560. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  564. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  565. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  566. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  567. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  568. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  569. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  571. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  572. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  574. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  575. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  576. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  577. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  579. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  580. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  581. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  582. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  586. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  587. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  597. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  598. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  599. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  600. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  601. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  602. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  709. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  710. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  711. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  712. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  713. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  714. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  715. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  716. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  717. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  718. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  719. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  720. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  721. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  722. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  723. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  724. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  725. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  728. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  729. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  730. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  736. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  739. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  743. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  747. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  748. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  749. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  750. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  751. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  752. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  753. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  754. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  755. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  756. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  757. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  758. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  759. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  760. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  761. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  765. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  768. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  769. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  770. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  772. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  773. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  774. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  775. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  776. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  777. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  781. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  784. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  785. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  786. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  788. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  789. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  790. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  791. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  792. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  796. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  819. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  837. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  849. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  850. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  853. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  854. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  855. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  856. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  858. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  859. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  860. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  861. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  862. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  863. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  864. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  865. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  866. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  867. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  868. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  869. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  870. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  871. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  872. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  873. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  874. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  875. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  876. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  877. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  878. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  879. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  880. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  881. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  883. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  884. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  885. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  886. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  887. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  888. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  889. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  890. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  891. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  892. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  893. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  894. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  895. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  897. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  898. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  899. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  900. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  901. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  902. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  904. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  906. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  907. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  908. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  909. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  913. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  914. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  915. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  916. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  917. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  918. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  919. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  920. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  921. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  923. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  924. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  925. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  926. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  927. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  928. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  929. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  930. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  931. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  932. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  933. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  934. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  935. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  936. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  937. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  938. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  939. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  940. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  941. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  942. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  943. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  944. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  945. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  946. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  947. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  948. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  949. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  950. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  951. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  952. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  953. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  955. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  956. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  957. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  958. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  959. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  960. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  961. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  962. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  963. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  964. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  965. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  966. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  967. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  968. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  969. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  970. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  971. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  974. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  979. metadata +77 -52
  980. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  982. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  984. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  985. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  986. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  987. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  989. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  990. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  996. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1000. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1001. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1002. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1003. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1004. data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
@@ -24,63 +24,450 @@
24
24
  #include <openssl/mem.h>
25
25
  #include <openssl/nid.h>
26
26
  #include <openssl/rsa.h>
27
+ #include <openssl/span.h>
27
28
 
29
+ #include "../fipsmodule/rsa/internal.h"
28
30
  #include "../internal.h"
31
+ #include "../mem_internal.h"
29
32
  #include "../rsa/internal.h"
30
33
  #include "internal.h"
31
34
 
32
35
 
33
- typedef struct {
36
+ using namespace bssl;
37
+
38
+ namespace {
39
+
40
+ struct EVP_PKEY_ALG_RSA_PSS : public EVP_PKEY_ALG {
41
+ rsa_pss_params_t pss_params;
42
+ };
43
+
44
+ extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meth;
45
+ extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth;
46
+ extern const EVP_PKEY_CTX_METHOD rsa_pkey_meth;
47
+ extern const EVP_PKEY_CTX_METHOD rsa_pss_pkey_meth;
48
+
49
+ static int rsa_pub_encode(CBB *out, const EvpPkey *key) {
50
+ // See RFC 3279, section 2.3.1.
51
+ const RSA *rsa = reinterpret_cast<const RSA *>(key->pkey);
52
+ CBB spki, algorithm, null, key_bitstring;
53
+ if (!CBB_add_asn1(out, &spki, CBS_ASN1_SEQUENCE) ||
54
+ !CBB_add_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
55
+ !CBB_add_asn1_element(&algorithm, CBS_ASN1_OBJECT, rsa_asn1_meth.oid,
56
+ rsa_asn1_meth.oid_len) ||
57
+ !CBB_add_asn1(&algorithm, &null, CBS_ASN1_NULL) ||
58
+ !CBB_add_asn1(&spki, &key_bitstring, CBS_ASN1_BITSTRING) ||
59
+ !CBB_add_u8(&key_bitstring, 0 /* padding */) ||
60
+ !RSA_marshal_public_key(&key_bitstring, rsa) || //
61
+ !CBB_flush(out)) {
62
+ OPENSSL_PUT_ERROR(EVP, EVP_R_ENCODE_ERROR);
63
+ return 0;
64
+ }
65
+
66
+ return 1;
67
+ }
68
+
69
+ static bssl::evp_decode_result_t rsa_pub_decode(const EVP_PKEY_ALG *alg,
70
+ EvpPkey *out, CBS *params,
71
+ CBS *key) {
72
+ // See RFC 3279, section 2.3.1.
73
+
74
+ // The parameters must be NULL.
75
+ CBS null;
76
+ if (!CBS_get_asn1(params, &null, CBS_ASN1_NULL) || CBS_len(&null) != 0 ||
77
+ CBS_len(params) != 0) {
78
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
79
+ return evp_decode_error;
80
+ }
81
+
82
+ UniquePtr<RSA> rsa(RSA_public_key_from_bytes(CBS_data(key), CBS_len(key)));
83
+ if (rsa == nullptr) {
84
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
85
+ return evp_decode_error;
86
+ }
87
+
88
+ EVP_PKEY_assign_RSA(out, rsa.release());
89
+ return evp_decode_ok;
90
+ }
91
+
92
+ static bool rsa_pub_equal(const EvpPkey *a, const EvpPkey *b) {
93
+ // We currently assume that all `EVP_PKEY_RSA_PSS` keys have the same
94
+ // parameters, so this vacuously compares parameters. If we ever support
95
+ // multiple PSS parameter sets, we probably should compare them too. Note,
96
+ // however, that OpenSSL does not compare parameters here.
97
+ const RSA *a_rsa = reinterpret_cast<const RSA *>(a->pkey);
98
+ const RSA *b_rsa = reinterpret_cast<const RSA *>(b->pkey);
99
+ return BN_cmp(RSA_get0_n(b_rsa), RSA_get0_n(a_rsa)) == 0 &&
100
+ BN_cmp(RSA_get0_e(b_rsa), RSA_get0_e(a_rsa)) == 0;
101
+ }
102
+
103
+ static bool rsa_pub_present(const EvpPkey *pk) {
104
+ const RSA *pk_rsa = reinterpret_cast<const RSA *>(pk->pkey);
105
+ // An RSA public key should always have n and e. It's possible for a (private)
106
+ // key to have n and d, but not e, so we must explicitly check for the
107
+ // presence of e.
108
+ return RSA_get0_n(pk_rsa) != nullptr && RSA_get0_e(pk_rsa) != nullptr;
109
+ }
110
+
111
+ static bool rsa_pub_copy(EvpPkey *out, const EvpPkey *pkey) {
112
+ const RSAImpl *pk_rsa = reinterpret_cast<const RSAImpl *>(pkey->pkey);
113
+ const BIGNUM *pk_n = RSA_get0_n(pk_rsa);
114
+ const BIGNUM *pk_e = RSA_get0_e(pk_rsa);
115
+ if (pk_n == nullptr || pk_e == nullptr) {
116
+ OPENSSL_PUT_ERROR(EVP, EVP_R_MISSING_PUBLIC_KEY);
117
+ return false;
118
+ }
119
+ UniquePtr<RSA> public_copy_rsa(RSA_new_public_key(pk_n, pk_e));
120
+ if (!public_copy_rsa) {
121
+ OPENSSL_PUT_ERROR(EVP, ERR_R_INTERNAL_ERROR);
122
+ return false;
123
+ }
124
+ FromOpaque(public_copy_rsa.get())->pss_params = pk_rsa->pss_params;
125
+ evp_pkey_set0(out, pkey->ameth, public_copy_rsa.release());
126
+ return true;
127
+ }
128
+
129
+ static int rsa_priv_encode(CBB *out, const EvpPkey *key) {
130
+ const RSA *rsa = reinterpret_cast<const RSA *>(key->pkey);
131
+ CBB pkcs8, algorithm, null, private_key;
132
+ if (!CBB_add_asn1(out, &pkcs8, CBS_ASN1_SEQUENCE) ||
133
+ !CBB_add_asn1_uint64(&pkcs8, 0 /* version */) ||
134
+ !CBB_add_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) ||
135
+ !CBB_add_asn1_element(&algorithm, CBS_ASN1_OBJECT, rsa_asn1_meth.oid,
136
+ rsa_asn1_meth.oid_len) ||
137
+ !CBB_add_asn1(&algorithm, &null, CBS_ASN1_NULL) ||
138
+ !CBB_add_asn1(&pkcs8, &private_key, CBS_ASN1_OCTETSTRING) ||
139
+ !RSA_marshal_private_key(&private_key, rsa) || //
140
+ !CBB_flush(out)) {
141
+ OPENSSL_PUT_ERROR(EVP, EVP_R_ENCODE_ERROR);
142
+ return 0;
143
+ }
144
+
145
+ return 1;
146
+ }
147
+
148
+ static bssl::evp_decode_result_t rsa_priv_decode(const EVP_PKEY_ALG *alg,
149
+ EvpPkey *out, CBS *params,
150
+ CBS *key) {
151
+ // Per RFC 8017, A.1, the parameters have type NULL.
152
+ CBS null;
153
+ if (!CBS_get_asn1(params, &null, CBS_ASN1_NULL) || CBS_len(&null) != 0 ||
154
+ CBS_len(params) != 0) {
155
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
156
+ return evp_decode_error;
157
+ }
158
+
159
+ UniquePtr<RSA> rsa(RSA_private_key_from_bytes(CBS_data(key), CBS_len(key)));
160
+ if (rsa == nullptr) {
161
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
162
+ return evp_decode_error;
163
+ }
164
+
165
+ EVP_PKEY_assign_RSA(out, rsa.release());
166
+ return evp_decode_ok;
167
+ }
168
+
169
+ static bool rsa_priv_present(const EvpPkey *pk) {
170
+ const RSA *pk_rsa = reinterpret_cast<const RSA *>(pk->pkey);
171
+ return RSA_get0_n(pk_rsa) != nullptr && RSA_get0_d(pk_rsa) != nullptr;
172
+ }
173
+
174
+ static bssl::evp_decode_result_t rsa_decode_pss_params(
175
+ rsa_pss_params_t expected, CBS *params) {
176
+ if (CBS_len(params) == 0) {
177
+ return evp_decode_unsupported;
178
+ }
179
+ rsa_pss_params_t pss_params;
180
+ if (!rsa_parse_pss_params(params, &pss_params,
181
+ /*allow_explicit_trailer=*/false) ||
182
+ CBS_len(params) != 0) {
183
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
184
+ return evp_decode_error;
185
+ }
186
+ return pss_params == expected ? evp_decode_ok : evp_decode_unsupported;
187
+ }
188
+
189
+ static int rsa_pub_encode_pss(CBB *out, const EvpPkey *key) {
190
+ const RSAImpl *rsa = reinterpret_cast<const RSAImpl *>(key->pkey);
191
+ CBB spki, algorithm, key_bitstring;
192
+ if (!CBB_add_asn1(out, &spki, CBS_ASN1_SEQUENCE) ||
193
+ !CBB_add_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
194
+ !CBB_add_asn1_element(&algorithm, CBS_ASN1_OBJECT, rsa_pss_asn1_meth.oid,
195
+ rsa_pss_asn1_meth.oid_len) ||
196
+ !rsa_marshal_pss_params(&algorithm, rsa->pss_params) ||
197
+ !CBB_add_asn1(&spki, &key_bitstring, CBS_ASN1_BITSTRING) ||
198
+ !CBB_add_u8(&key_bitstring, 0 /* padding */) ||
199
+ !RSA_marshal_public_key(&key_bitstring, rsa) || //
200
+ !CBB_flush(out)) {
201
+ OPENSSL_PUT_ERROR(EVP, EVP_R_ENCODE_ERROR);
202
+ return 0;
203
+ }
204
+
205
+ return 1;
206
+ }
207
+
208
+ static bssl::evp_decode_result_t rsa_pub_decode_pss(const EVP_PKEY_ALG *alg,
209
+ EvpPkey *out, CBS *params,
210
+ CBS *key) {
211
+ const auto *alg_pss = static_cast<const EVP_PKEY_ALG_RSA_PSS *>(alg);
212
+ evp_decode_result_t ret = rsa_decode_pss_params(alg_pss->pss_params, params);
213
+ if (ret != evp_decode_ok) {
214
+ return ret;
215
+ }
216
+
217
+ UniquePtr<RSAImpl> rsa(
218
+ FromOpaque(RSA_public_key_from_bytes(CBS_data(key), CBS_len(key))));
219
+ if (rsa == nullptr) {
220
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
221
+ return evp_decode_error;
222
+ }
223
+
224
+ rsa->pss_params = alg_pss->pss_params;
225
+ evp_pkey_set0(out, &rsa_pss_asn1_meth, rsa.release());
226
+ return evp_decode_ok;
227
+ }
228
+
229
+ static int rsa_priv_encode_pss(CBB *out, const EvpPkey *key) {
230
+ const RSAImpl *rsa = reinterpret_cast<const RSAImpl *>(key->pkey);
231
+ CBB pkcs8, algorithm, private_key;
232
+ if (!CBB_add_asn1(out, &pkcs8, CBS_ASN1_SEQUENCE) ||
233
+ !CBB_add_asn1_uint64(&pkcs8, 0 /* version */) ||
234
+ !CBB_add_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) ||
235
+ !CBB_add_asn1_element(&algorithm, CBS_ASN1_OBJECT, rsa_pss_asn1_meth.oid,
236
+ rsa_pss_asn1_meth.oid_len) ||
237
+ !rsa_marshal_pss_params(&algorithm, rsa->pss_params) ||
238
+ !CBB_add_asn1(&pkcs8, &private_key, CBS_ASN1_OCTETSTRING) ||
239
+ !RSA_marshal_private_key(&private_key, rsa) || //
240
+ !CBB_flush(out)) {
241
+ OPENSSL_PUT_ERROR(EVP, EVP_R_ENCODE_ERROR);
242
+ return 0;
243
+ }
244
+
245
+ return 1;
246
+ }
247
+
248
+ static bssl::evp_decode_result_t rsa_priv_decode_pss(const EVP_PKEY_ALG *alg,
249
+ EvpPkey *out, CBS *params,
250
+ CBS *key) {
251
+ const auto *alg_pss = static_cast<const EVP_PKEY_ALG_RSA_PSS *>(alg);
252
+ evp_decode_result_t ret = rsa_decode_pss_params(alg_pss->pss_params, params);
253
+ if (ret != evp_decode_ok) {
254
+ return ret;
255
+ }
256
+
257
+ UniquePtr<RSAImpl> rsa(
258
+ FromOpaque(RSA_private_key_from_bytes(CBS_data(key), CBS_len(key))));
259
+ if (rsa == nullptr) {
260
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
261
+ return evp_decode_error;
262
+ }
263
+
264
+ rsa->pss_params = alg_pss->pss_params;
265
+ evp_pkey_set0(out, &rsa_pss_asn1_meth, rsa.release());
266
+ return evp_decode_ok;
267
+ }
268
+
269
+ static int rsa_opaque(const EvpPkey *pkey) {
270
+ const RSA *rsa = reinterpret_cast<const RSA *>(pkey->pkey);
271
+ return RSA_is_opaque(rsa);
272
+ }
273
+
274
+ static int int_rsa_size(const EvpPkey *pkey) {
275
+ const RSA *rsa = reinterpret_cast<const RSA *>(pkey->pkey);
276
+ return RSA_size(rsa);
277
+ }
278
+
279
+ static int rsa_bits(const EvpPkey *pkey) {
280
+ const RSA *rsa = reinterpret_cast<const RSA *>(pkey->pkey);
281
+ return RSA_bits(rsa);
282
+ }
283
+
284
+ static void int_rsa_free(EvpPkey *pkey) {
285
+ RSA_free(reinterpret_cast<RSA *>(pkey->pkey));
286
+ pkey->pkey = nullptr;
287
+ }
288
+
289
+ static int rsa_pss_params_missing(const EvpPkey *pkey) {
290
+ const RSA *rsa = reinterpret_cast<const RSA *>(pkey->pkey);
291
+ return rsa == nullptr || FromOpaque(rsa)->pss_params == rsa_pss_none;
292
+ }
293
+
294
+ static int rsa_pss_params_copy(EvpPkey *to, const EvpPkey *from) {
295
+ const RSA *from_key = reinterpret_cast<const RSA *>(from->pkey);
296
+ if (from_key == nullptr) {
297
+ OPENSSL_PUT_ERROR(EVP, EVP_R_NO_KEY_SET);
298
+ return 0;
299
+ }
300
+ rsa_pss_params_t pss_params = FromOpaque(from_key)->pss_params;
301
+ if (pss_params == rsa_pss_none) {
302
+ OPENSSL_PUT_ERROR(EVP, EVP_R_MISSING_PARAMETERS);
303
+ return 0;
304
+ }
305
+ if (to->pkey == nullptr) {
306
+ to->pkey = RSA_new();
307
+ if (to->pkey == nullptr) {
308
+ return 0;
309
+ }
310
+ }
311
+ FromOpaque(reinterpret_cast<RSA *>(to->pkey))->pss_params = pss_params;
312
+ return 1;
313
+ }
314
+
315
+ static bool rsa_pss_params_equal(const EvpPkey *a, const EvpPkey *b) {
316
+ const RSA *a_rsa = reinterpret_cast<const RSA *>(a->pkey);
317
+ const RSA *b_rsa = reinterpret_cast<const RSA *>(b->pkey);
318
+ if (a_rsa == nullptr || b_rsa == nullptr) {
319
+ return false;
320
+ }
321
+ rsa_pss_params_t a_pss_params = FromOpaque(a_rsa)->pss_params;
322
+ rsa_pss_params_t b_pss_params = FromOpaque(b_rsa)->pss_params;
323
+ if (a_pss_params == rsa_pss_none || b_pss_params == rsa_pss_none) {
324
+ return false;
325
+ }
326
+ return a_pss_params == b_pss_params;
327
+ }
328
+
329
+ const EVP_PKEY_ASN1_METHOD rsa_asn1_meth = {
330
+ EVP_PKEY_RSA,
331
+ // 1.2.840.113549.1.1.1
332
+ {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01},
333
+ 9,
334
+
335
+ &rsa_pkey_meth,
336
+
337
+ rsa_pub_decode,
338
+ rsa_pub_encode,
339
+ rsa_pub_equal,
340
+ rsa_pub_present,
341
+ rsa_pub_copy,
342
+
343
+ rsa_priv_decode,
344
+ rsa_priv_encode,
345
+ rsa_priv_present,
346
+
347
+ /*set_priv_raw=*/nullptr,
348
+ /*set_priv_seed=*/nullptr,
349
+ /*set_pub_raw=*/nullptr,
350
+ /*get_priv_raw=*/nullptr,
351
+ /*get_priv_seed=*/nullptr,
352
+ /*get_pub_raw=*/nullptr,
353
+ /*set1_tls_encodedpoint=*/nullptr,
354
+ /*get1_tls_encodedpoint=*/nullptr,
355
+
356
+ rsa_opaque,
357
+
358
+ int_rsa_size,
359
+ rsa_bits,
360
+
361
+ /*param_missing=*/nullptr,
362
+ /*param_copy=*/nullptr,
363
+ /*param_equal=*/nullptr,
364
+
365
+ int_rsa_free,
366
+ };
367
+
368
+ const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = {
369
+ EVP_PKEY_RSA_PSS,
370
+ // 1.2.840.113549.1.1.10
371
+ {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0a},
372
+ 9,
373
+
374
+ &rsa_pss_pkey_meth,
375
+
376
+ rsa_pub_decode_pss,
377
+ rsa_pub_encode_pss,
378
+ rsa_pub_equal,
379
+ rsa_pub_present,
380
+ rsa_pub_copy,
381
+
382
+ rsa_priv_decode_pss,
383
+ rsa_priv_encode_pss,
384
+ rsa_priv_present,
385
+
386
+ /*set_priv_raw=*/nullptr,
387
+ /*set_priv_seed=*/nullptr,
388
+ /*set_pub_raw=*/nullptr,
389
+ /*get_priv_raw=*/nullptr,
390
+ /*get_priv_seed=*/nullptr,
391
+ /*get_pub_raw=*/nullptr,
392
+ /*set1_tls_encodedpoint=*/nullptr,
393
+ /*get1_tls_encodedpoint=*/nullptr,
394
+
395
+ rsa_opaque,
396
+
397
+ int_rsa_size,
398
+ rsa_bits,
399
+
400
+ rsa_pss_params_missing,
401
+ rsa_pss_params_copy,
402
+ rsa_pss_params_equal,
403
+
404
+ int_rsa_free,
405
+ };
406
+
407
+
408
+ struct RSA_PKEY_CTX {
34
409
  // Key gen parameters
35
- int nbits;
36
- BIGNUM *pub_exp;
410
+ int nbits = 2048;
411
+ UniquePtr<BIGNUM> pub_exp;
37
412
  // RSA padding mode
38
- int pad_mode;
413
+ int pad_mode = RSA_PKCS1_PADDING;
39
414
  // message digest
40
- const EVP_MD *md;
415
+ const EVP_MD *md = nullptr;
41
416
  // message digest for MGF1
42
- const EVP_MD *mgf1md;
417
+ const EVP_MD *mgf1md = nullptr;
43
418
  // PSS salt length
44
- int saltlen;
45
- // tbuf is a buffer which is either NULL, or is the size of the RSA modulus.
46
- // It's used to store the output of RSA operations.
47
- uint8_t *tbuf;
48
- // OAEP label
49
- uint8_t *oaep_label;
50
- size_t oaep_labellen;
51
- } RSA_PKEY_CTX;
52
-
53
- typedef struct {
54
- uint8_t *data;
55
- size_t len;
56
- } RSA_OAEP_LABEL_PARAMS;
57
-
58
- static int pkey_rsa_init(EVP_PKEY_CTX *ctx) {
59
- RSA_PKEY_CTX *rctx =
60
- reinterpret_cast<RSA_PKEY_CTX *>(OPENSSL_zalloc(sizeof(RSA_PKEY_CTX)));
419
+ int saltlen = RSA_PSS_SALTLEN_DIGEST;
420
+ // restrict_pss_params, if true, indicates that the PSS signing/verifying
421
+ // parameters are restricted by the key's parameters. `md` and `mgf1md` may
422
+ // not change, and `saltlen` must be at least `md`'s hash length.
423
+ bool restrict_pss_params = false;
424
+ Array<uint8_t> oaep_label;
425
+ };
426
+
427
+ static bool is_pss_only(const EvpPkeyCtx *ctx) {
428
+ return ctx->pmeth->pkey_id == EVP_PKEY_RSA_PSS;
429
+ }
430
+
431
+ static int pkey_rsa_init(EvpPkeyCtx *ctx, const EVP_PKEY_ALG *alg) {
432
+ RSA_PKEY_CTX *rctx = New<RSA_PKEY_CTX>();
61
433
  if (!rctx) {
62
434
  return 0;
63
435
  }
64
436
 
65
- rctx->nbits = 2048;
66
- rctx->pad_mode = RSA_PKCS1_PADDING;
67
- rctx->saltlen = -2;
437
+ if (is_pss_only(ctx)) {
438
+ rctx->pad_mode = RSA_PKCS1_PSS_PADDING;
439
+ // Pick up PSS parameters from the key or algorithm. We don't currently
440
+ // support keygen from PSS, so the algorithm does not currently do anything.
441
+ rsa_pss_params_t pss_params = rsa_pss_none;
442
+ const auto *alg_pss = static_cast<const EVP_PKEY_ALG_RSA_PSS *>(alg);
443
+ if (alg_pss != nullptr) {
444
+ pss_params = alg_pss->pss_params;
445
+ } else if (ctx->pkey != nullptr && ctx->pkey->pkey != nullptr) {
446
+ pss_params = static_cast<const RSAImpl *>(ctx->pkey->pkey)->pss_params;
447
+ }
448
+ const EVP_MD *md = rsa_pss_params_get_md(pss_params);
449
+ if (md != nullptr) {
450
+ rctx->md = rctx->mgf1md = md;
451
+ // All our supported modes use the digest length as the salt length.
452
+ rctx->saltlen = EVP_MD_size(rctx->md);
453
+ rctx->restrict_pss_params = true;
454
+ }
455
+ }
68
456
 
69
457
  ctx->data = rctx;
70
-
71
458
  return 1;
72
459
  }
73
460
 
74
- static int pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) {
461
+ static int pkey_rsa_copy(EvpPkeyCtx *dst, EvpPkeyCtx *src) {
75
462
  RSA_PKEY_CTX *dctx, *sctx;
76
- if (!pkey_rsa_init(dst)) {
463
+ if (!pkey_rsa_init(dst, nullptr)) {
77
464
  return 0;
78
465
  }
79
466
  sctx = reinterpret_cast<RSA_PKEY_CTX *>(src->data);
80
467
  dctx = reinterpret_cast<RSA_PKEY_CTX *>(dst->data);
81
468
  dctx->nbits = sctx->nbits;
82
469
  if (sctx->pub_exp) {
83
- dctx->pub_exp = BN_dup(sctx->pub_exp);
470
+ dctx->pub_exp.reset(BN_dup(sctx->pub_exp.get()));
84
471
  if (!dctx->pub_exp) {
85
472
  return 0;
86
473
  }
@@ -90,49 +477,23 @@ static int pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) {
90
477
  dctx->md = sctx->md;
91
478
  dctx->mgf1md = sctx->mgf1md;
92
479
  dctx->saltlen = sctx->saltlen;
93
- if (sctx->oaep_label) {
94
- OPENSSL_free(dctx->oaep_label);
95
- dctx->oaep_label = reinterpret_cast<uint8_t *>(
96
- OPENSSL_memdup(sctx->oaep_label, sctx->oaep_labellen));
97
- if (!dctx->oaep_label) {
98
- return 0;
99
- }
100
- dctx->oaep_labellen = sctx->oaep_labellen;
480
+ dctx->restrict_pss_params = sctx->restrict_pss_params;
481
+ if (!dctx->oaep_label.CopyFrom(sctx->oaep_label)) {
482
+ return 0;
101
483
  }
102
484
 
103
485
  return 1;
104
486
  }
105
487
 
106
- static void pkey_rsa_cleanup(EVP_PKEY_CTX *ctx) {
107
- RSA_PKEY_CTX *rctx = reinterpret_cast<RSA_PKEY_CTX *>(ctx->data);
108
-
109
- if (rctx == NULL) {
110
- return;
111
- }
112
-
113
- BN_free(rctx->pub_exp);
114
- OPENSSL_free(rctx->tbuf);
115
- OPENSSL_free(rctx->oaep_label);
116
- OPENSSL_free(rctx);
488
+ static void pkey_rsa_cleanup(EvpPkeyCtx *ctx) {
489
+ Delete(reinterpret_cast<RSA_PKEY_CTX *>(ctx->data));
117
490
  }
118
491
 
119
- static int setup_tbuf(RSA_PKEY_CTX *ctx, EVP_PKEY_CTX *pk) {
120
- if (ctx->tbuf) {
121
- return 1;
122
- }
123
- ctx->tbuf =
124
- reinterpret_cast<uint8_t *>(OPENSSL_malloc(EVP_PKEY_size(pk->pkey)));
125
- if (!ctx->tbuf) {
126
- return 0;
127
- }
128
- return 1;
129
- }
130
-
131
- static int pkey_rsa_sign(EVP_PKEY_CTX *ctx, uint8_t *sig, size_t *siglen,
492
+ static int pkey_rsa_sign(EvpPkeyCtx *ctx, uint8_t *sig, size_t *siglen,
132
493
  const uint8_t *tbs, size_t tbslen) {
133
494
  RSA_PKEY_CTX *rctx = reinterpret_cast<RSA_PKEY_CTX *>(ctx->data);
134
495
  RSA *rsa = reinterpret_cast<RSA *>(ctx->pkey->pkey);
135
- const size_t key_len = EVP_PKEY_size(ctx->pkey);
496
+ const size_t key_len = EVP_PKEY_size(ctx->pkey.get());
136
497
 
137
498
  if (!sig) {
138
499
  *siglen = key_len;
@@ -166,7 +527,7 @@ static int pkey_rsa_sign(EVP_PKEY_CTX *ctx, uint8_t *sig, size_t *siglen,
166
527
  return RSA_sign_raw(rsa, siglen, sig, *siglen, tbs, tbslen, rctx->pad_mode);
167
528
  }
168
529
 
169
- static int pkey_rsa_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig, size_t siglen,
530
+ static int pkey_rsa_verify(EvpPkeyCtx *ctx, const uint8_t *sig, size_t siglen,
170
531
  const uint8_t *tbs, size_t tbslen) {
171
532
  RSA_PKEY_CTX *rctx = reinterpret_cast<RSA_PKEY_CTX *>(ctx->data);
172
533
  RSA *rsa = reinterpret_cast<RSA *>(ctx->pkey->pkey);
@@ -186,13 +547,14 @@ static int pkey_rsa_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig, size_t siglen,
186
547
  }
187
548
 
188
549
  size_t rslen;
189
- const size_t key_len = EVP_PKEY_size(ctx->pkey);
190
- if (!setup_tbuf(rctx, ctx) ||
191
- !RSA_verify_raw(rsa, &rslen, rctx->tbuf, key_len, sig, siglen,
550
+ const size_t key_len = EVP_PKEY_size(ctx->pkey.get());
551
+ Array<uint8_t> tbuf;
552
+ if (!tbuf.InitForOverwrite(key_len) ||
553
+ !RSA_verify_raw(rsa, &rslen, tbuf.data(), tbuf.size(), sig, siglen,
192
554
  rctx->pad_mode)) {
193
555
  return 0;
194
556
  }
195
- if (rslen != tbslen || CRYPTO_memcmp(tbs, rctx->tbuf, rslen) != 0) {
557
+ if (rslen != tbslen || CRYPTO_memcmp(tbs, tbuf.data(), rslen) != 0) {
196
558
  OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_SIGNATURE);
197
559
  return 0;
198
560
  }
@@ -200,14 +562,14 @@ static int pkey_rsa_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig, size_t siglen,
200
562
  return 1;
201
563
  }
202
564
 
203
- static int pkey_rsa_verify_recover(EVP_PKEY_CTX *ctx, uint8_t *out,
565
+ static int pkey_rsa_verify_recover(EvpPkeyCtx *ctx, uint8_t *out,
204
566
  size_t *out_len, const uint8_t *sig,
205
567
  size_t sig_len) {
206
568
  RSA_PKEY_CTX *rctx = reinterpret_cast<RSA_PKEY_CTX *>(ctx->data);
207
569
  RSA *rsa = reinterpret_cast<RSA *>(ctx->pkey->pkey);
208
- const size_t key_len = EVP_PKEY_size(ctx->pkey);
570
+ const size_t key_len = EVP_PKEY_size(ctx->pkey.get());
209
571
 
210
- if (out == NULL) {
572
+ if (out == nullptr) {
211
573
  *out_len = key_len;
212
574
  return 1;
213
575
  }
@@ -217,7 +579,7 @@ static int pkey_rsa_verify_recover(EVP_PKEY_CTX *ctx, uint8_t *out,
217
579
  return 0;
218
580
  }
219
581
 
220
- if (rctx->md == NULL) {
582
+ if (rctx->md == nullptr) {
221
583
  return RSA_verify_raw(rsa, out_len, out, *out_len, sig, sig_len,
222
584
  rctx->pad_mode);
223
585
  }
@@ -232,44 +594,39 @@ static int pkey_rsa_verify_recover(EVP_PKEY_CTX *ctx, uint8_t *out,
232
594
  uint8_t *asn1_prefix;
233
595
  size_t asn1_prefix_len;
234
596
  int asn1_prefix_allocated;
235
- if (!setup_tbuf(rctx, ctx) ||
236
- !RSA_add_pkcs1_prefix(&asn1_prefix, &asn1_prefix_len,
597
+ if (!RSA_add_pkcs1_prefix(&asn1_prefix, &asn1_prefix_len,
237
598
  &asn1_prefix_allocated, EVP_MD_type(rctx->md),
238
599
  kDummyHash, hash_len)) {
239
600
  return 0;
240
601
  }
602
+ UniquePtr<uint8_t> free_asn1_prefix(asn1_prefix_allocated ? asn1_prefix
603
+ : nullptr);
241
604
 
605
+ Array<uint8_t> tbuf;
242
606
  size_t rslen;
243
- int ok = 1;
244
- if (!RSA_verify_raw(rsa, &rslen, rctx->tbuf, key_len, sig, sig_len,
607
+ if (!tbuf.InitForOverwrite(key_len) ||
608
+ !RSA_verify_raw(rsa, &rslen, tbuf.data(), tbuf.size(), sig, sig_len,
245
609
  RSA_PKCS1_PADDING) ||
246
610
  rslen != asn1_prefix_len ||
247
611
  // Compare all but the hash suffix.
248
- CRYPTO_memcmp(rctx->tbuf, asn1_prefix, asn1_prefix_len - hash_len) != 0) {
249
- ok = 0;
250
- }
251
-
252
- if (asn1_prefix_allocated) {
253
- OPENSSL_free(asn1_prefix);
254
- }
255
-
256
- if (!ok) {
612
+ CRYPTO_memcmp(tbuf.data(), asn1_prefix, asn1_prefix_len - hash_len) !=
613
+ 0) {
257
614
  return 0;
258
615
  }
259
616
 
260
- if (out != NULL) {
261
- OPENSSL_memcpy(out, rctx->tbuf + rslen - hash_len, hash_len);
617
+ if (out != nullptr) {
618
+ OPENSSL_memcpy(out, tbuf.data() + rslen - hash_len, hash_len);
262
619
  }
263
620
  *out_len = hash_len;
264
621
 
265
622
  return 1;
266
623
  }
267
624
 
268
- static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen,
625
+ static int pkey_rsa_encrypt(EvpPkeyCtx *ctx, uint8_t *out, size_t *outlen,
269
626
  const uint8_t *in, size_t inlen) {
270
627
  RSA_PKEY_CTX *rctx = reinterpret_cast<RSA_PKEY_CTX *>(ctx->data);
271
628
  RSA *rsa = reinterpret_cast<RSA *>(ctx->pkey->pkey);
272
- const size_t key_len = EVP_PKEY_size(ctx->pkey);
629
+ const size_t key_len = EVP_PKEY_size(ctx->pkey.get());
273
630
 
274
631
  if (!out) {
275
632
  *outlen = key_len;
@@ -282,11 +639,12 @@ static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen,
282
639
  }
283
640
 
284
641
  if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
285
- if (!setup_tbuf(rctx, ctx) ||
286
- !RSA_padding_add_PKCS1_OAEP_mgf1(rctx->tbuf, key_len, in, inlen,
287
- rctx->oaep_label, rctx->oaep_labellen,
288
- rctx->md, rctx->mgf1md) ||
289
- !RSA_encrypt(rsa, outlen, out, *outlen, rctx->tbuf, key_len,
642
+ Array<uint8_t> tbuf;
643
+ if (!tbuf.InitForOverwrite(key_len) ||
644
+ !RSA_padding_add_PKCS1_OAEP_mgf1(
645
+ tbuf.data(), tbuf.size(), in, inlen, rctx->oaep_label.data(),
646
+ rctx->oaep_label.size(), rctx->md, rctx->mgf1md) ||
647
+ !RSA_encrypt(rsa, outlen, out, *outlen, tbuf.data(), tbuf.size(),
290
648
  RSA_NO_PADDING)) {
291
649
  return 0;
292
650
  }
@@ -296,11 +654,11 @@ static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen,
296
654
  return RSA_encrypt(rsa, outlen, out, *outlen, in, inlen, rctx->pad_mode);
297
655
  }
298
656
 
299
- static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen,
657
+ static int pkey_rsa_decrypt(EvpPkeyCtx *ctx, uint8_t *out, size_t *outlen,
300
658
  const uint8_t *in, size_t inlen) {
301
659
  RSA_PKEY_CTX *rctx = reinterpret_cast<RSA_PKEY_CTX *>(ctx->data);
302
660
  RSA *rsa = reinterpret_cast<RSA *>(ctx->pkey->pkey);
303
- const size_t key_len = EVP_PKEY_size(ctx->pkey);
661
+ const size_t key_len = EVP_PKEY_size(ctx->pkey.get());
304
662
 
305
663
  if (!out) {
306
664
  *outlen = key_len;
@@ -313,13 +671,15 @@ static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen,
313
671
  }
314
672
 
315
673
  if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
674
+ Array<uint8_t> tbuf;
316
675
  size_t padded_len;
317
- if (!setup_tbuf(rctx, ctx) ||
318
- !RSA_decrypt(rsa, &padded_len, rctx->tbuf, key_len, in, inlen,
676
+ if (!tbuf.InitForOverwrite(key_len) ||
677
+ !RSA_decrypt(rsa, &padded_len, tbuf.data(), tbuf.size(), in, inlen,
319
678
  RSA_NO_PADDING) ||
320
- !RSA_padding_check_PKCS1_OAEP_mgf1(
321
- out, outlen, key_len, rctx->tbuf, padded_len, rctx->oaep_label,
322
- rctx->oaep_labellen, rctx->md, rctx->mgf1md)) {
679
+ !RSA_padding_check_PKCS1_OAEP_mgf1(out, outlen, key_len, tbuf.data(),
680
+ padded_len, rctx->oaep_label.data(),
681
+ rctx->oaep_label.size(), rctx->md,
682
+ rctx->mgf1md)) {
323
683
  return 0;
324
684
  }
325
685
  return 1;
@@ -353,10 +713,15 @@ static int is_known_padding(int padding_mode) {
353
713
  }
354
714
  }
355
715
 
356
- static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
716
+ static int pkey_rsa_ctrl(EvpPkeyCtx *ctx, int type, int p1, void *p2) {
357
717
  RSA_PKEY_CTX *rctx = reinterpret_cast<RSA_PKEY_CTX *>(ctx->data);
358
718
  switch (type) {
359
719
  case EVP_PKEY_CTRL_RSA_PADDING:
720
+ // PSS keys cannot be switched to other padding types.
721
+ if (is_pss_only(ctx) && p1 != RSA_PKCS1_PSS_PADDING) {
722
+ OPENSSL_PUT_ERROR(EVP, EVP_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE);
723
+ return 0;
724
+ }
360
725
  if (!is_known_padding(p1) || !check_padding_md(rctx->md, p1) ||
361
726
  (p1 == RSA_PKCS1_PSS_PADDING &&
362
727
  0 == (ctx->operation & (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY))) ||
@@ -365,8 +730,7 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
365
730
  OPENSSL_PUT_ERROR(EVP, EVP_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE);
366
731
  return 0;
367
732
  }
368
- if ((p1 == RSA_PKCS1_PSS_PADDING || p1 == RSA_PKCS1_OAEP_PADDING) &&
369
- rctx->md == NULL) {
733
+ if (p1 == RSA_PKCS1_OAEP_PADDING && rctx->md == nullptr) {
370
734
  rctx->md = EVP_sha1();
371
735
  }
372
736
  rctx->pad_mode = p1;
@@ -385,7 +749,21 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
385
749
  if (type == EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN) {
386
750
  *(int *)p2 = rctx->saltlen;
387
751
  } else {
388
- if (p1 < -2) {
752
+ // Negative salt lengths are special values.
753
+ if (p1 < 0) {
754
+ if (p1 != RSA_PSS_SALTLEN_DIGEST && p1 != RSA_PSS_SALTLEN_AUTO) {
755
+ return 0;
756
+ }
757
+ // All our PSS restrictions accept saltlen == hashlen, so allow
758
+ // `RSA_PSS_SALTLEN_DIGEST`. Reject `RSA_PSS_SALTLEN_AUTO` for
759
+ // simplicity.
760
+ if (rctx->restrict_pss_params && p1 != RSA_PSS_SALTLEN_DIGEST) {
761
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PSS_SALTLEN);
762
+ return 0;
763
+ }
764
+ } else if (rctx->restrict_pss_params &&
765
+ static_cast<size_t>(p1) < EVP_MD_size(rctx->md)) {
766
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PSS_SALTLEN);
389
767
  return 0;
390
768
  }
391
769
  rctx->saltlen = p1;
@@ -404,8 +782,7 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
404
782
  if (!p2) {
405
783
  return 0;
406
784
  }
407
- BN_free(rctx->pub_exp);
408
- rctx->pub_exp = reinterpret_cast<BIGNUM *>(p2);
785
+ rctx->pub_exp.reset(reinterpret_cast<BIGNUM *>(p2));
409
786
  return 1;
410
787
 
411
788
  case EVP_PKEY_CTRL_RSA_OAEP_MD:
@@ -421,12 +798,19 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
421
798
  }
422
799
  return 1;
423
800
 
424
- case EVP_PKEY_CTRL_MD:
425
- if (!check_padding_md(reinterpret_cast<EVP_MD *>(p2), rctx->pad_mode)) {
801
+ case EVP_PKEY_CTRL_MD: {
802
+ const EVP_MD *md = reinterpret_cast<EVP_MD *>(p2);
803
+ if (!check_padding_md(md, rctx->pad_mode)) {
804
+ return 0;
805
+ }
806
+ if (rctx->restrict_pss_params &&
807
+ EVP_MD_type(rctx->md) != EVP_MD_type(md)) {
808
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_DIGEST_TYPE);
426
809
  return 0;
427
810
  }
428
- rctx->md = reinterpret_cast<EVP_MD *>(p2);
811
+ rctx->md = md;
429
812
  return 1;
813
+ }
430
814
 
431
815
  case EVP_PKEY_CTRL_GET_MD:
432
816
  *(const EVP_MD **)p2 = rctx->md;
@@ -446,7 +830,13 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
446
830
  *(const EVP_MD **)p2 = rctx->md;
447
831
  }
448
832
  } else {
449
- rctx->mgf1md = reinterpret_cast<EVP_MD *>(p2);
833
+ const EVP_MD *md = reinterpret_cast<EVP_MD *>(p2);
834
+ if (rctx->restrict_pss_params &&
835
+ EVP_MD_type(rctx->mgf1md) != EVP_MD_type(md)) {
836
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_MGF1_MD);
837
+ return 0;
838
+ }
839
+ rctx->mgf1md = md;
450
840
  }
451
841
  return 1;
452
842
 
@@ -455,11 +845,10 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
455
845
  OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PADDING_MODE);
456
846
  return 0;
457
847
  }
458
- OPENSSL_free(rctx->oaep_label);
459
- RSA_OAEP_LABEL_PARAMS *params =
460
- reinterpret_cast<RSA_OAEP_LABEL_PARAMS *>(p2);
461
- rctx->oaep_label = params->data;
462
- rctx->oaep_labellen = params->len;
848
+ // `EVP_PKEY_CTRL_RSA_OAEP_LABEL` takes ownership of `label`'s underlying
849
+ // buffer (via `Reset`), but only on success.
850
+ auto *label = reinterpret_cast<Span<uint8_t> *>(p2);
851
+ rctx->oaep_label.Reset(label->data(), label->size());
463
852
  return 1;
464
853
  }
465
854
 
@@ -468,7 +857,7 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
468
857
  OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PADDING_MODE);
469
858
  return 0;
470
859
  }
471
- CBS_init((CBS *)p2, rctx->oaep_label, rctx->oaep_labellen);
860
+ *reinterpret_cast<CBS *>(p2) = CBS(rctx->oaep_label);
472
861
  return 1;
473
862
 
474
863
  default:
@@ -477,126 +866,245 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
477
866
  }
478
867
  }
479
868
 
480
- static int pkey_rsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) {
481
- RSA *rsa = NULL;
869
+ static int pkey_rsa_keygen(EvpPkeyCtx *ctx, EvpPkey *pkey) {
482
870
  RSA_PKEY_CTX *rctx = reinterpret_cast<RSA_PKEY_CTX *>(ctx->data);
483
-
484
871
  if (!rctx->pub_exp) {
485
- rctx->pub_exp = BN_new();
486
- if (!rctx->pub_exp || !BN_set_word(rctx->pub_exp, RSA_F4)) {
872
+ rctx->pub_exp.reset(BN_new());
873
+ if (!rctx->pub_exp || !BN_set_word(rctx->pub_exp.get(), RSA_F4)) {
487
874
  return 0;
488
875
  }
489
876
  }
490
- rsa = RSA_new();
877
+ UniquePtr<RSA> rsa(RSA_new());
491
878
  if (!rsa) {
492
879
  return 0;
493
880
  }
494
881
 
495
- if (!RSA_generate_key_ex(rsa, rctx->nbits, rctx->pub_exp, NULL)) {
496
- RSA_free(rsa);
882
+ if (!RSA_generate_key_ex(rsa.get(), rctx->nbits, rctx->pub_exp.get(),
883
+ nullptr)) {
497
884
  return 0;
498
885
  }
499
886
 
500
- EVP_PKEY_assign_RSA(pkey, rsa);
887
+ EVP_PKEY_assign_RSA(pkey, rsa.release());
501
888
  return 1;
502
889
  }
503
890
 
504
- const EVP_PKEY_METHOD rsa_pkey_meth = {
891
+ const EVP_PKEY_CTX_METHOD rsa_pkey_meth = {
505
892
  EVP_PKEY_RSA,
506
893
  pkey_rsa_init,
507
894
  pkey_rsa_copy,
508
895
  pkey_rsa_cleanup,
509
896
  pkey_rsa_keygen,
510
897
  pkey_rsa_sign,
511
- NULL /* sign_message */,
898
+ /*sign_message=*/nullptr,
512
899
  pkey_rsa_verify,
513
- NULL /* verify_message */,
900
+ /*verify_message=*/nullptr,
514
901
  pkey_rsa_verify_recover,
515
902
  pkey_rsa_encrypt,
516
903
  pkey_rsa_decrypt,
517
- NULL /* derive */,
518
- NULL /* paramgen */,
904
+ /*derive=*/nullptr,
905
+ /*paramgen=*/nullptr,
906
+ /*encap=*/nullptr,
907
+ /*decap=*/nullptr,
908
+ pkey_rsa_ctrl,
909
+ };
910
+
911
+ const EVP_PKEY_CTX_METHOD rsa_pss_pkey_meth = {
912
+ EVP_PKEY_RSA_PSS,
913
+ pkey_rsa_init,
914
+ pkey_rsa_copy,
915
+ pkey_rsa_cleanup,
916
+ // In OpenSSL, `EVP_PKEY_RSA_PSS` supports key generation and fills in PSS
917
+ // parameters based on a separate set of keygen-targetted setters:
918
+ // `EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen`,
919
+ // `EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md`, and
920
+ // `EVP_PKEY_CTX_rsa_pss_key_digest`. We do not currently implement this
921
+ // because we only support one parameter set.
922
+ /*keygen=*/nullptr,
923
+ pkey_rsa_sign,
924
+ /*sign_message=*/nullptr,
925
+ pkey_rsa_verify,
926
+ /*verify_message=*/nullptr,
927
+ /*verify_recover=*/nullptr,
928
+ /*encrypt=*/nullptr,
929
+ /*decrypt=*/nullptr,
930
+ /*derive=*/nullptr,
931
+ /*paramgen=*/nullptr,
932
+ /*encap=*/nullptr,
933
+ /*decap=*/nullptr,
519
934
  pkey_rsa_ctrl,
520
935
  };
521
936
 
937
+ } // namespace
938
+
939
+ const EVP_PKEY_ALG *EVP_pkey_rsa() {
940
+ static const EVP_PKEY_ALG kAlg = {&rsa_asn1_meth, &rsa_pkey_meth};
941
+ return &kAlg;
942
+ }
943
+
944
+ const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha256() {
945
+ static const EVP_PKEY_ALG_RSA_PSS kAlg = {
946
+ {&rsa_pss_asn1_meth, &rsa_pss_pkey_meth}, rsa_pss_sha256};
947
+ return &kAlg;
948
+ }
949
+
950
+ const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha384() {
951
+ static const EVP_PKEY_ALG_RSA_PSS kAlg = {
952
+ {&rsa_pss_asn1_meth, &rsa_pss_pkey_meth}, rsa_pss_sha384};
953
+ return &kAlg;
954
+ }
955
+
956
+ const EVP_PKEY_ALG *EVP_pkey_rsa_pss_sha512() {
957
+ static const EVP_PKEY_ALG_RSA_PSS kAlg = {
958
+ {&rsa_pss_asn1_meth, &rsa_pss_pkey_meth}, rsa_pss_sha512};
959
+ return &kAlg;
960
+ }
961
+
962
+ EVP_PKEY *EVP_RSA_gen(unsigned bits) {
963
+ // TODO(crbug.com/487376811): After EVP_PKEY_CTX is switched to C++
964
+ // subclassing, it should be possible to stack-allocate enough the
965
+ // RSA-specific subclass.
966
+ UniquePtr<EvpPkeyCtx> ctx = evp_pkey_ctx_new_alg(EVP_pkey_rsa());
967
+ EVP_PKEY *pkey = nullptr;
968
+ if (ctx == nullptr || //
969
+ !EVP_PKEY_keygen_init(ctx.get()) ||
970
+ !EVP_PKEY_CTX_set_rsa_keygen_bits(ctx.get(), bits) ||
971
+ !EVP_PKEY_keygen(ctx.get(), &pkey)) {
972
+ return nullptr;
973
+ }
974
+ return pkey;
975
+ }
976
+
977
+ int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key) {
978
+ if (EVP_PKEY_assign_RSA(pkey, key)) {
979
+ RSA_up_ref(key);
980
+ return 1;
981
+ }
982
+ return 0;
983
+ }
984
+
985
+ int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key) {
986
+ if (key == nullptr) {
987
+ return 0;
988
+ }
989
+ evp_pkey_set0(FromOpaque(pkey), &rsa_asn1_meth, key);
990
+ return 1;
991
+ }
992
+
993
+ RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey) {
994
+ int pkey_id = EVP_PKEY_id(pkey);
995
+ if (pkey_id != EVP_PKEY_RSA && pkey_id != EVP_PKEY_RSA_PSS) {
996
+ OPENSSL_PUT_ERROR(EVP, EVP_R_EXPECTING_AN_RSA_KEY);
997
+ return nullptr;
998
+ }
999
+ return reinterpret_cast<RSA *>(FromOpaque(pkey)->pkey);
1000
+ }
1001
+
1002
+ RSA *EVP_PKEY_get1_RSA(const EVP_PKEY *pkey) {
1003
+ RSA *rsa = EVP_PKEY_get0_RSA(pkey);
1004
+ if (rsa != nullptr) {
1005
+ RSA_up_ref(rsa);
1006
+ }
1007
+ return rsa;
1008
+ }
1009
+
1010
+ static int rsa_or_rsa_pss_ctrl(EvpPkeyCtx *ctx, int optype, int cmd, int p1,
1011
+ void *p2) {
1012
+ if (!ctx || !ctx->pmeth || !ctx->pmeth->ctrl) {
1013
+ OPENSSL_PUT_ERROR(EVP, EVP_R_COMMAND_NOT_SUPPORTED);
1014
+ return 0;
1015
+ }
1016
+ if (ctx->pmeth->pkey_id != EVP_PKEY_RSA &&
1017
+ ctx->pmeth->pkey_id != EVP_PKEY_RSA_PSS) {
1018
+ OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
1019
+ return 0;
1020
+ }
1021
+ return EVP_PKEY_CTX_ctrl(ctx, /*keytype=*/-1, optype, cmd, p1, p2);
1022
+ }
1023
+
522
1024
  int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int padding) {
523
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING,
524
- padding, NULL);
1025
+ return rsa_or_rsa_pss_ctrl(FromOpaque(ctx), -1, EVP_PKEY_CTRL_RSA_PADDING,
1026
+ padding, nullptr);
525
1027
  }
526
1028
 
527
1029
  int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *out_padding) {
528
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_GET_RSA_PADDING,
529
- 0, out_padding);
1030
+ return rsa_or_rsa_pss_ctrl(FromOpaque(ctx), -1, EVP_PKEY_CTRL_GET_RSA_PADDING,
1031
+ 0, out_padding);
530
1032
  }
531
1033
 
532
1034
  int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md) {
1035
+ // We currently do not support keygen with `EVP_PKEY_RSA_PSS`.
533
1036
  return 0;
534
1037
  }
535
1038
 
536
1039
  int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int salt_len) {
1040
+ // We currently do not support keygen with `EVP_PKEY_RSA_PSS`.
537
1041
  return 0;
538
1042
  }
539
1043
 
540
1044
  int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx,
541
1045
  const EVP_MD *md) {
1046
+ // We currently do not support keygen with `EVP_PKEY_RSA_PSS`.
542
1047
  return 0;
543
1048
  }
544
1049
 
545
1050
  int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int salt_len) {
546
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA,
547
- (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY),
548
- EVP_PKEY_CTRL_RSA_PSS_SALTLEN, salt_len, NULL);
1051
+ return rsa_or_rsa_pss_ctrl(FromOpaque(ctx),
1052
+ (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY),
1053
+ EVP_PKEY_CTRL_RSA_PSS_SALTLEN, salt_len, nullptr);
549
1054
  }
550
1055
 
551
1056
  int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *out_salt_len) {
552
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA,
553
- (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY),
554
- EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, out_salt_len);
1057
+ return rsa_or_rsa_pss_ctrl(
1058
+ FromOpaque(ctx), (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY),
1059
+ EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, out_salt_len);
555
1060
  }
556
1061
 
557
1062
  int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits) {
558
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN,
559
- EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL);
1063
+ return rsa_or_rsa_pss_ctrl(FromOpaque(ctx), EVP_PKEY_OP_KEYGEN,
1064
+ EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, nullptr);
560
1065
  }
561
1066
 
562
1067
  int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *e) {
563
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN,
564
- EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, e);
1068
+ return rsa_or_rsa_pss_ctrl(FromOpaque(ctx), EVP_PKEY_OP_KEYGEN,
1069
+ EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, e);
565
1070
  }
566
1071
 
567
1072
  int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md) {
568
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
569
- EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md);
1073
+ return EVP_PKEY_CTX_ctrl(FromOpaque(ctx), EVP_PKEY_RSA,
1074
+ EVP_PKEY_OP_TYPE_CRYPT, EVP_PKEY_CTRL_RSA_OAEP_MD, 0,
1075
+ (void *)md);
570
1076
  }
571
1077
 
572
1078
  int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **out_md) {
573
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
1079
+ return EVP_PKEY_CTX_ctrl(FromOpaque(ctx), EVP_PKEY_RSA,
1080
+ EVP_PKEY_OP_TYPE_CRYPT,
574
1081
  EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)out_md);
575
1082
  }
576
1083
 
577
1084
  int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md) {
578
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA,
579
- EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT,
580
- EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md);
1085
+ return rsa_or_rsa_pss_ctrl(FromOpaque(ctx),
1086
+ EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT,
1087
+ EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md);
581
1088
  }
582
1089
 
583
1090
  int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **out_md) {
584
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA,
585
- EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT,
586
- EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)out_md);
1091
+ return rsa_or_rsa_pss_ctrl(FromOpaque(ctx),
1092
+ EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT,
1093
+ EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)out_md);
587
1094
  }
588
1095
 
589
1096
  int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, uint8_t *label,
590
1097
  size_t label_len) {
591
- RSA_OAEP_LABEL_PARAMS params = {label, label_len};
592
- return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
593
- EVP_PKEY_CTRL_RSA_OAEP_LABEL, 0, &params);
1098
+ Span span(label, label_len);
1099
+ return EVP_PKEY_CTX_ctrl(FromOpaque(ctx), EVP_PKEY_RSA,
1100
+ EVP_PKEY_OP_TYPE_CRYPT, EVP_PKEY_CTRL_RSA_OAEP_LABEL,
1101
+ 0, &span);
594
1102
  }
595
1103
 
596
1104
  int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
597
1105
  const uint8_t **out_label) {
598
1106
  CBS label;
599
- if (!EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
1107
+ if (!EVP_PKEY_CTX_ctrl(FromOpaque(ctx), EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
600
1108
  EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, &label)) {
601
1109
  return -1;
602
1110
  }