grpc 1.84.1 → 1.85.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

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