grpc 1.53.0.pre2 → 1.54.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (685) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +80 -66
  3. data/include/grpc/event_engine/event_engine.h +30 -14
  4. data/include/grpc/grpc_security.h +4 -0
  5. data/include/grpc/impl/grpc_types.h +11 -2
  6. data/include/grpc/support/port_platform.h +4 -4
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +11 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +6 -0
  9. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -11
  10. data/src/core/ext/filters/client_channel/backup_poller.h +0 -3
  11. data/src/core/ext/filters/client_channel/client_channel.cc +848 -813
  12. data/src/core/ext/filters/client_channel/client_channel.h +131 -173
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +114 -0
  14. data/src/core/ext/filters/client_channel/config_selector.h +4 -3
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +6 -1
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +17 -18
  18. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +134 -151
  19. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -15
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +14 -10
  21. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +68 -30
  22. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +13 -5
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +2 -2
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +30 -38
  27. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +4 -4
  28. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -26
  29. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -179
  30. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -2
  31. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -2
  32. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +4 -2
  33. data/src/core/ext/filters/client_channel/retry_filter.cc +95 -102
  34. data/src/core/ext/filters/client_channel/subchannel.cc +2 -4
  35. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +26 -27
  36. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -5
  37. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -3
  38. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -12
  39. data/src/core/ext/filters/http/message_compress/compression_filter.cc +27 -11
  40. data/src/core/ext/filters/message_size/message_size_filter.cc +141 -224
  41. data/src/core/ext/filters/message_size/message_size_filter.h +48 -3
  42. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -6
  43. data/src/core/ext/gcp/metadata_query.cc +142 -0
  44. data/src/core/ext/gcp/metadata_query.h +82 -0
  45. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +70 -55
  46. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +149 -60
  47. data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -2
  48. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  50. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +42 -23
  51. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +5 -3
  52. data/src/core/ext/transport/chttp2/transport/internal.h +18 -3
  53. data/src/core/ext/transport/chttp2/transport/parsing.cc +9 -2
  54. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -5
  55. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -14
  56. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +5 -3
  57. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +22 -0
  58. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +5 -3
  59. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +22 -0
  60. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +23 -5
  61. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +94 -3
  62. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -2
  63. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -0
  64. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +6 -3
  65. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  66. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +24 -6
  67. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +111 -12
  68. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +9 -7
  69. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +27 -9
  70. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +0 -1
  71. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +11 -7
  72. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +56 -12
  73. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +5 -3
  74. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +24 -0
  75. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +5 -3
  76. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  77. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +13 -2
  78. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +49 -0
  79. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +24 -9
  80. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +66 -12
  81. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  82. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +139 -136
  83. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +31 -15
  84. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -0
  85. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +12 -9
  86. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +15 -0
  87. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +54 -45
  88. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +135 -119
  89. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  90. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +100 -97
  91. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +15 -18
  92. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +272 -264
  93. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +117 -117
  94. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +5 -5
  95. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +5 -5
  96. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +5 -5
  97. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +12 -9
  98. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -0
  99. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -2
  100. data/src/core/ext/xds/xds_client_stats.cc +29 -15
  101. data/src/core/ext/xds/xds_client_stats.h +24 -20
  102. data/src/core/ext/xds/xds_endpoint.cc +5 -2
  103. data/src/core/ext/xds/xds_endpoint.h +9 -1
  104. data/src/core/ext/xds/xds_http_rbac_filter.cc +1 -1
  105. data/src/core/ext/xds/xds_lb_policy_registry.cc +13 -0
  106. data/src/core/ext/xds/xds_transport_grpc.cc +1 -1
  107. data/src/core/{ext/filters/client_channel/resolver/dns/dns_resolver_selection.h → lib/backoff/random_early_detection.cc} +14 -12
  108. data/src/core/lib/backoff/random_early_detection.h +59 -0
  109. data/src/core/lib/channel/call_finalization.h +1 -1
  110. data/src/core/lib/channel/call_tracer.cc +51 -0
  111. data/src/core/lib/channel/call_tracer.h +101 -38
  112. data/src/core/lib/channel/connected_channel.cc +483 -1050
  113. data/src/core/lib/channel/context.h +8 -1
  114. data/src/core/lib/channel/promise_based_filter.cc +106 -42
  115. data/src/core/lib/channel/promise_based_filter.h +27 -13
  116. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  117. data/src/core/lib/config/config_vars.cc +151 -0
  118. data/src/core/lib/config/config_vars.h +127 -0
  119. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  120. data/src/core/lib/config/load_config.cc +66 -0
  121. data/src/core/lib/config/load_config.h +49 -0
  122. data/src/core/lib/debug/trace.cc +5 -6
  123. data/src/core/lib/debug/trace.h +0 -5
  124. data/src/core/lib/event_engine/event_engine.cc +37 -2
  125. data/src/core/lib/event_engine/handle_containers.h +7 -22
  126. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  127. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +0 -4
  128. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -9
  129. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +48 -15
  130. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +8 -8
  131. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -5
  132. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +6 -3
  133. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +27 -18
  134. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +0 -3
  135. data/src/core/lib/event_engine/resolved_address.cc +2 -1
  136. data/src/core/lib/event_engine/windows/win_socket.cc +0 -1
  137. data/src/core/lib/event_engine/windows/windows_endpoint.cc +129 -82
  138. data/src/core/lib/event_engine/windows/windows_endpoint.h +21 -5
  139. data/src/core/lib/event_engine/windows/windows_engine.cc +39 -18
  140. data/src/core/lib/event_engine/windows/windows_engine.h +2 -1
  141. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  142. data/src/core/lib/event_engine/windows/windows_listener.h +155 -0
  143. data/src/core/lib/experiments/config.cc +3 -10
  144. data/src/core/lib/experiments/experiments.cc +7 -0
  145. data/src/core/lib/experiments/experiments.h +9 -1
  146. data/src/core/lib/gpr/log.cc +15 -28
  147. data/src/core/lib/gprpp/fork.cc +8 -14
  148. data/src/core/lib/gprpp/orphanable.h +4 -3
  149. data/src/core/lib/gprpp/per_cpu.h +9 -3
  150. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +49 -37
  151. data/src/core/lib/gprpp/ref_counted.h +33 -34
  152. data/src/core/lib/gprpp/thd.h +16 -0
  153. data/src/core/lib/gprpp/time.cc +1 -0
  154. data/src/core/lib/gprpp/time.h +4 -4
  155. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +2 -2
  156. data/src/core/lib/iomgr/call_combiner.h +2 -2
  157. data/src/core/lib/iomgr/endpoint_cfstream.cc +4 -2
  158. data/src/core/lib/iomgr/endpoint_pair.h +2 -2
  159. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  160. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  161. data/src/core/lib/iomgr/ev_posix.cc +13 -53
  162. data/src/core/lib/iomgr/ev_posix.h +0 -3
  163. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +103 -76
  164. data/src/core/lib/iomgr/iomgr.cc +4 -8
  165. data/src/core/lib/iomgr/iomgr_windows.cc +8 -2
  166. data/src/core/lib/iomgr/pollset_set_windows.cc +9 -9
  167. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  168. data/src/core/lib/iomgr/socket_utils_common_posix.cc +16 -3
  169. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -2
  170. data/src/core/lib/iomgr/tcp_posix.cc +0 -1
  171. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -16
  172. data/src/core/lib/iomgr/tcp_server_windows.cc +176 -9
  173. data/src/core/lib/iomgr/tcp_windows.cc +12 -8
  174. data/src/core/lib/load_balancing/lb_policy.cc +9 -13
  175. data/src/core/lib/load_balancing/lb_policy.h +4 -2
  176. data/src/core/lib/promise/activity.cc +22 -6
  177. data/src/core/lib/promise/activity.h +61 -24
  178. data/src/core/lib/promise/cancel_callback.h +77 -0
  179. data/src/core/lib/promise/detail/basic_seq.h +1 -1
  180. data/src/core/lib/promise/detail/promise_factory.h +4 -0
  181. data/src/core/lib/promise/for_each.h +176 -0
  182. data/src/core/lib/promise/if.h +9 -0
  183. data/src/core/lib/promise/interceptor_list.h +23 -2
  184. data/src/core/lib/promise/latch.h +89 -3
  185. data/src/core/lib/promise/loop.h +13 -9
  186. data/src/core/lib/promise/map.h +7 -0
  187. data/src/core/lib/promise/party.cc +286 -0
  188. data/src/core/lib/promise/party.h +499 -0
  189. data/src/core/lib/promise/pipe.h +197 -57
  190. data/src/core/lib/promise/poll.h +48 -0
  191. data/src/core/lib/promise/promise.h +2 -2
  192. data/src/core/lib/resource_quota/arena.cc +19 -3
  193. data/src/core/lib/resource_quota/arena.h +119 -5
  194. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  195. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +12 -35
  196. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  197. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +0 -59
  198. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -5
  199. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  200. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -0
  201. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +2 -0
  202. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +5 -9
  203. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -25
  204. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +12 -0
  205. data/src/core/lib/security/transport/secure_endpoint.cc +4 -2
  206. data/src/core/lib/security/transport/server_auth_filter.cc +20 -2
  207. data/src/core/lib/slice/slice.cc +1 -1
  208. data/src/core/lib/surface/builtins.cc +2 -0
  209. data/src/core/lib/surface/call.cc +926 -1024
  210. data/src/core/lib/surface/call.h +10 -0
  211. data/src/core/lib/surface/lame_client.cc +1 -0
  212. data/src/core/lib/surface/version.cc +2 -2
  213. data/src/core/lib/transport/batch_builder.cc +179 -0
  214. data/src/core/lib/transport/batch_builder.h +468 -0
  215. data/src/core/lib/transport/bdp_estimator.cc +7 -7
  216. data/src/core/lib/transport/bdp_estimator.h +10 -6
  217. data/src/core/lib/transport/custom_metadata.h +30 -0
  218. data/src/core/lib/transport/metadata_batch.cc +9 -6
  219. data/src/core/lib/transport/metadata_batch.h +58 -16
  220. data/src/core/lib/transport/parsed_metadata.h +3 -3
  221. data/src/core/lib/transport/timeout_encoding.cc +6 -1
  222. data/src/core/lib/transport/transport.cc +30 -2
  223. data/src/core/lib/transport/transport.h +70 -14
  224. data/src/core/lib/transport/transport_impl.h +7 -0
  225. data/src/core/lib/transport/transport_op_string.cc +52 -42
  226. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -2
  227. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -0
  228. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +21 -4
  229. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +5 -0
  230. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  231. data/src/core/tsi/ssl_transport_security.cc +4 -2
  232. data/src/ruby/lib/grpc/version.rb +1 -1
  233. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  234. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  235. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  236. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  237. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  238. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  239. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  240. data/{src/core/lib/gprpp/global_config_custom.h → third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc} +11 -14
  241. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  242. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  243. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  244. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  245. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  246. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  247. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  248. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  249. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  250. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  251. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  252. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  253. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  254. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  255. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  256. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  257. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  258. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +12 -8
  259. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  260. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  261. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  262. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  264. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  265. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  266. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +174 -194
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  269. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  270. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  271. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  272. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  273. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  274. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  275. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  276. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  277. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  278. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  279. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  280. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +133 -88
  281. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  282. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +791 -791
  283. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +526 -526
  284. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  285. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  286. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  287. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  288. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  289. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +11 -7
  290. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +4 -4
  291. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  292. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -4
  293. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +17 -10
  294. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -3
  295. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  296. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  297. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  298. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +9 -5
  299. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  300. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  301. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  302. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  303. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  304. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  305. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  306. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  307. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  308. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  309. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  310. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  311. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  312. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  313. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  314. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  315. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +6 -12
  316. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -11
  317. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  318. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  319. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  320. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  321. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  323. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  324. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  325. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  326. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  327. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  328. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  329. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  330. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  331. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +16 -27
  332. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  333. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  334. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  335. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  336. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  337. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  338. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +39 -16
  339. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  340. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  341. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  342. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +214 -99
  343. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +21 -5
  344. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  345. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  346. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  347. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  348. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  349. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  350. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  351. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  352. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  353. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  354. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  355. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  356. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +5 -5
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  358. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  359. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  360. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  361. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  362. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  363. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  366. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  367. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  368. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  369. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +35 -27
  370. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  393. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  395. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +21 -6
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  400. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +25 -25
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +91 -17
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +5 -5
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +34 -12
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +54 -23
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +44 -60
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +60 -53
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +48 -36
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +2 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -3
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +0 -1
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +8 -0
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +42 -14
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -15
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +2 -4
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +71 -43
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +14 -16
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -4
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -45
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +22 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +63 -52
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +107 -62
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +58 -31
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +523 -422
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  444. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  445. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +19 -6
  446. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +32 -14
  447. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  448. data/third_party/boringssl-with-bazel/src/crypto/internal.h +373 -18
  449. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +61 -0
  450. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +205 -0
  451. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  452. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  453. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  454. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +13 -1
  455. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  456. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  457. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +629 -613
  458. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  459. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  460. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  461. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  463. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  464. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  465. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  466. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  467. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  468. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  469. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  470. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  472. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  473. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +3 -4
  474. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  475. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  476. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  477. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  478. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +66 -34
  479. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +190 -77
  480. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +81 -284
  481. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +109 -42
  482. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  483. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +54 -55
  484. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  485. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  486. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  487. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +284 -331
  488. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +67 -50
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +153 -150
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +786 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +227 -252
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +230 -224
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  504. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +534 -618
  505. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  506. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +116 -182
  507. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  508. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +181 -202
  509. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  510. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  511. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1865 -2050
  512. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +433 -462
  513. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  514. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +267 -263
  515. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  516. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  517. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  518. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  519. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  520. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +326 -415
  521. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  522. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  523. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  524. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  525. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  526. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  527. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  528. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  529. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  530. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  531. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  532. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  533. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +78 -170
  534. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  535. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  536. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  537. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  538. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  539. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +309 -346
  540. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +341 -365
  541. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  543. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  544. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  545. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  546. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +122 -125
  547. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  548. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +247 -253
  549. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  550. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  551. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  552. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  553. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +143 -136
  554. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +664 -707
  555. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +83 -75
  556. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1062 -1146
  557. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +8 -4
  558. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  559. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +211 -187
  560. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  561. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -14
  562. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +21 -2
  563. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  564. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  565. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  566. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  567. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  568. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  569. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  570. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  571. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  572. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  573. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  574. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  575. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  576. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  577. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +22 -30
  578. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  579. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  580. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +41 -16
  581. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  582. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  583. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +13 -0
  584. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  585. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -15
  586. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  587. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  588. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +7 -4
  589. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +13 -21
  591. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +139 -75
  592. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  593. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +384 -286
  594. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +5 -6
  595. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  596. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +18 -7
  597. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +49 -23
  598. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  599. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1592 -1074
  600. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +202 -205
  601. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  602. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  603. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  604. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  605. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  606. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +34 -20
  607. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +65 -34
  608. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  609. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  610. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +32 -28
  611. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  612. data/third_party/boringssl-with-bazel/src/ssl/internal.h +130 -98
  613. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +27 -11
  614. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  615. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  616. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  617. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +39 -65
  618. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  619. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  620. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +30 -33
  621. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +77 -100
  622. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +120 -107
  623. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +164 -30
  624. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +150 -60
  625. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +22 -11
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  627. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  628. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +5 -43
  629. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  630. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +2 -2
  631. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +22 -34
  632. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  633. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  634. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  635. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  636. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  637. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  638. metadata +107 -72
  639. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +0 -39
  640. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +0 -30
  641. data/src/core/lib/gprpp/global_config.h +0 -93
  642. data/src/core/lib/gprpp/global_config_env.cc +0 -140
  643. data/src/core/lib/gprpp/global_config_env.h +0 -133
  644. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  645. data/src/core/lib/promise/intra_activity_waiter.h +0 -55
  646. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  647. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -29
  648. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  649. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +0 -83
  650. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  651. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  652. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  653. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +0 -38
  654. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  655. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  656. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  657. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  658. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  659. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  660. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  661. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  662. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  663. /data/src/core/lib/gpr/{log_android.cc → android/log.cc} +0 -0
  664. /data/src/core/lib/gpr/{cpu_iphone.cc → iphone/cpu.cc} +0 -0
  665. /data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +0 -0
  666. /data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +0 -0
  667. /data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +0 -0
  668. /data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +0 -0
  669. /data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +0 -0
  670. /data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +0 -0
  671. /data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +0 -0
  672. /data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +0 -0
  673. /data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +0 -0
  674. /data/src/core/lib/gpr/{cpu_windows.cc → windows/cpu.cc} +0 -0
  675. /data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +0 -0
  676. /data/src/core/lib/gpr/{string_windows.cc → windows/string.cc} +0 -0
  677. /data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +0 -0
  678. /data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +0 -0
  679. /data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +0 -0
  680. /data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +0 -0
  681. /data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +0 -0
  682. /data/src/core/lib/gprpp/{env_posix.cc → posix/env.cc} +0 -0
  683. /data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +0 -0
  684. /data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +0 -0
  685. /data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +0 -0
@@ -59,8 +59,6 @@
59
59
 
60
60
  #include <openssl/base.h>
61
61
 
62
- #include <openssl/type_check.h>
63
-
64
62
  #if defined(__cplusplus)
65
63
  extern "C" {
66
64
  #endif
@@ -69,41 +67,224 @@ extern "C" {
69
67
  // A stack, in OpenSSL, is an array of pointers. They are the most commonly
70
68
  // used collection object.
71
69
  //
72
- // This file defines macros for type safe use of the stack functions. A stack
73
- // of a specific type of object has type |STACK_OF(type)|. This can be defined
74
- // (once) with |DEFINE_STACK_OF(type)| and declared where needed with
75
- // |DECLARE_STACK_OF(type)|. For example:
70
+ // This file defines macros for type-safe use of the stack functions. A stack
71
+ // type is named like |STACK_OF(FOO)| and is accessed with functions named
72
+ // like |sk_FOO_*|. Note the stack will typically contain /pointers/ to |FOO|.
73
+ //
74
+ // The |DECLARE_STACK_OF| macro makes |STACK_OF(FOO)| available, and
75
+ // |DEFINE_STACK_OF| makes the corresponding functions available.
76
+
77
+
78
+ // Defining stacks.
79
+
80
+ // STACK_OF expands to the stack type for |type|.
81
+ #define STACK_OF(type) struct stack_st_##type
82
+
83
+ // DECLARE_STACK_OF declares the |STACK_OF(type)| type. It does not make the
84
+ // corresponding |sk_type_*| functions available. This macro should be used in
85
+ // files which only need the type.
86
+ #define DECLARE_STACK_OF(type) STACK_OF(type);
87
+
88
+ // DEFINE_NAMED_STACK_OF defines |STACK_OF(name)| to be a stack whose elements
89
+ // are |type| *. This macro makes the |sk_name_*| functions available.
76
90
  //
77
- // typedef struct foo_st {
78
- // int bar;
79
- // } FOO;
91
+ // It is not necessary to use |DECLARE_STACK_OF| in files which use this macro.
92
+ #define DEFINE_NAMED_STACK_OF(name, type) \
93
+ BORINGSSL_DEFINE_STACK_OF_IMPL(name, type *, const type *) \
94
+ BORINGSSL_DEFINE_STACK_TRAITS(name, type, false)
95
+
96
+ // DEFINE_STACK_OF defines |STACK_OF(type)| to be a stack whose elements are
97
+ // |type| *. This macro makes the |sk_type_*| functions available.
80
98
  //
81
- // DEFINE_STACK_OF(FOO)
99
+ // It is not necessary to use |DECLARE_STACK_OF| in files which use this macro.
100
+ #define DEFINE_STACK_OF(type) DEFINE_NAMED_STACK_OF(type, type)
101
+
102
+ // DEFINE_CONST_STACK_OF defines |STACK_OF(type)| to be a stack whose elements
103
+ // are const |type| *. This macro makes the |sk_type_*| functions available.
104
+ //
105
+ // It is not necessary to use |DECLARE_STACK_OF| in files which use this macro.
106
+ #define DEFINE_CONST_STACK_OF(type) \
107
+ BORINGSSL_DEFINE_STACK_OF_IMPL(type, const type *, const type *) \
108
+ BORINGSSL_DEFINE_STACK_TRAITS(type, const type, true)
109
+
110
+
111
+ // Using stacks.
112
+ //
113
+ // After the |DEFINE_STACK_OF| macro is used, the following functions are
114
+ // available.
115
+
116
+ #if 0 // Sample
117
+
118
+ // sk_SAMPLE_free_func is a callback to free an element in a stack.
119
+ typedef void (*sk_SAMPLE_free_func)(SAMPLE *);
120
+
121
+ // sk_SAMPLE_copy_func is a callback to copy an element in a stack. It should
122
+ // return the copy or NULL on error.
123
+ typedef SAMPLE *(*sk_SAMPLE_copy_func)(const SAMPLE *);
124
+
125
+ // sk_SAMPLE_cmp_func is a callback to compare |*a| to |*b|. It should return a
126
+ // value < 0, 0, or > 0 if |*a| is less than, equal to, or greater than |*b|,
127
+ // respectively. Note the extra indirection - the function is given a pointer
128
+ // to a pointer to the element. This is the |qsort|/|bsearch| comparison
129
+ // function applied to an array of |SAMPLE*|.
130
+ //
131
+ // TODO(https://crbug.com/boringssl/498): The parameters should be
132
+ // |const SAMPLE *const *|.
133
+ typedef int (*sk_SAMPLE_cmp_func)(const SAMPLE **a, const SAMPLE **b);
134
+
135
+ // sk_SAMPLE_new creates a new, empty stack with the given comparison function,
136
+ // which may be NULL. It returns the new stack or NULL on allocation failure.
137
+ STACK_OF(SAMPLE) *sk_SAMPLE_new(sk_SAMPLE_cmp_func comp);
138
+
139
+ // sk_SAMPLE_new_null creates a new, empty stack. It returns the new stack or
140
+ // NULL on allocation failure.
141
+ STACK_OF(SAMPLE) *sk_SAMPLE_new_null(void);
142
+
143
+ // sk_SAMPLE_num returns the number of elements in |sk|.
144
+ size_t sk_SAMPLE_num(const STACK_OF(SAMPLE) *sk);
145
+
146
+ // sk_SAMPLE_zero resets |sk| to the empty state but does nothing to free the
147
+ // individual elements themselves.
148
+ void sk_SAMPLE_zero(STACK_OF(SAMPLE) *sk);
149
+
150
+ // sk_SAMPLE_value returns the |i|th pointer in |sk|, or NULL if |i| is out of
151
+ // range.
152
+ SAMPLE *sk_SAMPLE_value(const STACK_OF(SAMPLE) *sk, size_t i);
153
+
154
+ // sk_SAMPLE_set sets the |i|th pointer in |sk| to |p| and returns |p|. If |i|
155
+ // is out of range, it returns NULL.
156
+ SAMPLE *sk_SAMPLE_set(STACK_OF(SAMPLE) *sk, size_t i, SAMPLE *p);
157
+
158
+ // sk_SAMPLE_free frees |sk|, but does nothing to free the individual elements.
159
+ // Use |sk_SAMPLE_pop_free| to also free the elements.
160
+ void sk_SAMPLE_free(STACK_OF(SAMPLE) *sk);
161
+
162
+ // sk_SAMPLE_pop_free calls |free_func| on each element in |sk| and then
163
+ // frees the stack itself.
164
+ void sk_SAMPLE_pop_free(STACK_OF(SAMPLE) *sk, sk_SAMPLE_free_func free_func);
165
+
166
+ // sk_SAMPLE_insert inserts |p| into the stack at index |where|, moving existing
167
+ // elements if needed. It returns the length of the new stack, or zero on
168
+ // error.
169
+ size_t sk_SAMPLE_insert(STACK_OF(SAMPLE) *sk, SAMPLE *p, size_t where);
170
+
171
+ // sk_SAMPLE_delete removes the pointer at index |where|, moving other elements
172
+ // down if needed. It returns the removed pointer, or NULL if |where| is out of
173
+ // range.
174
+ SAMPLE *sk_SAMPLE_delete(STACK_OF(SAMPLE) *sk, size_t where);
175
+
176
+ // sk_SAMPLE_delete_ptr removes, at most, one instance of |p| from |sk| based on
177
+ // pointer equality. If an instance of |p| is found then |p| is returned,
178
+ // otherwise it returns NULL.
179
+ SAMPLE *sk_SAMPLE_delete_ptr(STACK_OF(SAMPLE) *sk, const SAMPLE *p);
180
+
181
+ // sk_SAMPLE_delete_if_func is the callback function for |sk_SAMPLE_delete_if|.
182
+ // It should return one to remove |p| and zero to keep it.
183
+ typedef int (*sk_SAMPLE_delete_if_func)(SAMPLE *p, void *data);
184
+
185
+ // sk_SAMPLE_delete_if calls |func| with each element of |sk| and removes the
186
+ // entries where |func| returned one. This function does not free or return
187
+ // removed pointers so, if |sk| owns its contents, |func| should release the
188
+ // pointers prior to returning one.
189
+ void sk_SAMPLE_delete_if(STACK_OF(SAMPLE) *sk, sk_SAMPLE_delete_if_func func,
190
+ void *data);
191
+
192
+ // sk_SAMPLE_find find the first value in |sk| equal to |p|. |sk|'s comparison
193
+ // function determines equality, or pointer equality if |sk| has no comparison
194
+ // function.
82
195
  //
83
- // Although note that the stack will contain /pointers/ to |FOO|.
196
+ // If the stack is sorted (see |sk_SAMPLE_sort|), this function uses a binary
197
+ // search. Otherwise it performs a linear search. If it finds a matching
198
+ // element, it writes the index to |*out_index| (if |out_index| is not NULL) and
199
+ // returns one. Otherwise, it returns zero.
84
200
  //
85
- // A macro will be defined for each of the sk_* functions below. For
86
- // STACK_OF(FOO), the macros would be sk_FOO_new, sk_FOO_pop etc.
201
+ // Note this differs from OpenSSL. The type signature is slightly different, and
202
+ // OpenSSL's version will implicitly sort |sk| if it has a comparison function
203
+ // defined.
204
+ int sk_SAMPLE_find(const STACK_OF(SAMPLE) *sk, size_t *out_index,
205
+ const SAMPLE *p);
206
+
207
+ // sk_SAMPLE_shift removes and returns the first element in |sk|, or NULL if
208
+ // |sk| is empty.
209
+ SAMPLE *sk_SAMPLE_shift(STACK_OF(SAMPLE) *sk);
210
+
211
+ // sk_SAMPLE_push appends |p| to |sk| and returns the length of the new stack,
212
+ // or 0 on allocation failure.
213
+ size_t sk_SAMPLE_push(STACK_OF(SAMPLE) *sk, SAMPLE *p);
214
+
215
+ // sk_SAMPLE_pop removes and returns the last element of |sk|, or NULL if |sk|
216
+ // is empty.
217
+ SAMPLE *sk_SAMPLE_pop(STACK_OF(SAMPLE) *sk);
218
+
219
+ // sk_SAMPLE_dup performs a shallow copy of a stack and returns the new stack,
220
+ // or NULL on error. Use |sk_SAMPLE_deep_copy| to also copy the elements.
221
+ STACK_OF(SAMPLE) *sk_SAMPLE_dup(const STACK_OF(SAMPLE) *sk);
222
+
223
+ // sk_SAMPLE_sort sorts the elements of |sk| into ascending order based on the
224
+ // comparison function. The stack maintains a "sorted" flag and sorting an
225
+ // already sorted stack is a no-op.
226
+ void sk_SAMPLE_sort(STACK_OF(SAMPLE) *sk);
227
+
228
+ // sk_SAMPLE_is_sorted returns one if |sk| is known to be sorted and zero
229
+ // otherwise.
230
+ int sk_SAMPLE_is_sorted(const STACK_OF(SAMPLE) *sk);
231
+
232
+ // sk_SAMPLE_set_cmp_func sets the comparison function to be used by |sk| and
233
+ // returns the previous one.
234
+ sk_SAMPLE_cmp_func sk_SAMPLE_set_cmp_func(STACK_OF(SAMPLE) *sk,
235
+ sk_SAMPLE_cmp_func comp);
236
+
237
+ // sk_SAMPLE_deep_copy performs a copy of |sk| and of each of the non-NULL
238
+ // elements in |sk| by using |copy_func|. If an error occurs, it calls
239
+ // |free_func| to free any copies already made and returns NULL.
240
+ STACK_OF(SAMPLE) *sk_SAMPLE_deep_copy(const STACK_OF(SAMPLE) *sk,
241
+ sk_SAMPLE_copy_func copy_func,
242
+ sk_SAMPLE_free_func free_func);
243
+
244
+ #endif // Sample
245
+
87
246
 
247
+ // Private functions.
248
+ //
249
+ // TODO(https://crbug.com/boringssl/499): Rename to |OPENSSL_sk_foo|, after
250
+ // external code that calls them is fixed.
88
251
 
89
- // stack_free_func is a function that frees an element in a stack. Note its
252
+ // OPENSSL_sk_free_func is a function that frees an element in a stack. Note its
90
253
  // actual type is void (*)(T *) for some T. Low-level |sk_*| functions will be
91
254
  // passed a type-specific wrapper to call it correctly.
92
- typedef void (*stack_free_func)(void *ptr);
255
+ typedef void (*OPENSSL_sk_free_func)(void *ptr);
93
256
 
94
- // stack_copy_func is a function that copies an element in a stack. Note its
95
- // actual type is T *(*)(T *) for some T. Low-level |sk_*| functions will be
96
- // passed a type-specific wrapper to call it correctly.
97
- typedef void *(*stack_copy_func)(void *ptr);
257
+ // OPENSSL_sk_copy_func is a function that copies an element in a stack. Note
258
+ // its actual type is T *(*)(const T *) for some T. Low-level |sk_*| functions
259
+ // will be passed a type-specific wrapper to call it correctly.
260
+ typedef void *(*OPENSSL_sk_copy_func)(const void *ptr);
98
261
 
99
- // stack_cmp_func is a comparison function that returns a value < 0, 0 or > 0
100
- // if |*a| is less than, equal to or greater than |*b|, respectively. Note the
101
- // extra indirection - the function is given a pointer to a pointer to the
262
+ // OPENSSL_sk_cmp_func is a comparison function that returns a value < 0, 0 or >
263
+ // 0 if |*a| is less than, equal to or greater than |*b|, respectively. Note
264
+ // the extra indirection - the function is given a pointer to a pointer to the
102
265
  // element. This differs from the usual qsort/bsearch comparison function.
103
266
  //
104
- // Note its actual type is int (*)(const T **, const T **). Low-level |sk_*|
267
+ // Note its actual type is |int (*)(const T **a, const T **b)|. Low-level |sk_*|
105
268
  // functions will be passed a type-specific wrapper to call it correctly.
106
- typedef int (*stack_cmp_func)(const void **a, const void **b);
269
+ //
270
+ // TODO(https://crbug.com/boringssl/498): This type should be
271
+ // |const T *const *|. It is already fixed in OpenSSL 1.1.1, so hopefully we can
272
+ // fix this compatibly.
273
+ typedef int (*OPENSSL_sk_cmp_func)(const void **a, const void **b);
274
+
275
+ // OPENSSL_sk_delete_if_func is the generic version of
276
+ // |sk_SAMPLE_delete_if_func|.
277
+ typedef int (*OPENSSL_sk_delete_if_func)(void *obj, void *data);
278
+
279
+ // The following function types call the above type-erased signatures with the
280
+ // true types.
281
+ typedef void (*OPENSSL_sk_call_free_func)(OPENSSL_sk_free_func, void *);
282
+ typedef void *(*OPENSSL_sk_call_copy_func)(OPENSSL_sk_copy_func, const void *);
283
+ typedef int (*OPENSSL_sk_call_cmp_func)(OPENSSL_sk_cmp_func,
284
+ const void *const *,
285
+ const void *const *);
286
+ typedef int (*OPENSSL_sk_call_delete_if_func)(OPENSSL_sk_delete_if_func, void *,
287
+ void *);
107
288
 
108
289
  // stack_st contains an array of pointers. It is not designed to be used
109
290
  // directly, rather the wrapper macros should be used.
@@ -118,135 +299,50 @@ typedef struct stack_st {
118
299
  // to by |data|, which may be larger than |num|.
119
300
  size_t num_alloc;
120
301
  // comp is an optional comparison function.
121
- stack_cmp_func comp;
302
+ OPENSSL_sk_cmp_func comp;
122
303
  } _STACK;
123
304
 
124
-
125
- #define STACK_OF(type) struct stack_st_##type
126
-
127
- #define DECLARE_STACK_OF(type) STACK_OF(type);
128
-
129
- // These are the raw stack functions, you shouldn't be using them. Rather you
130
- // should be using the type stack macros implemented above.
131
-
132
- // sk_new creates a new, empty stack with the given comparison function, which
133
- // may be zero. It returns the new stack or NULL on allocation failure.
134
- OPENSSL_EXPORT _STACK *sk_new(stack_cmp_func comp);
135
-
136
- // sk_new_null creates a new, empty stack. It returns the new stack or NULL on
137
- // allocation failure.
305
+ // The following are raw stack functions. They implement the corresponding typed
306
+ // |sk_SAMPLE_*| functions generated by |DEFINE_STACK_OF|. Callers shouldn't be
307
+ // using them. Rather, callers should use the typed functions.
308
+ OPENSSL_EXPORT _STACK *sk_new(OPENSSL_sk_cmp_func comp);
138
309
  OPENSSL_EXPORT _STACK *sk_new_null(void);
139
-
140
- // sk_num returns the number of elements in |s|.
141
310
  OPENSSL_EXPORT size_t sk_num(const _STACK *sk);
142
-
143
- // sk_zero resets |sk| to the empty state but does nothing to free the
144
- // individual elements themselves.
145
311
  OPENSSL_EXPORT void sk_zero(_STACK *sk);
146
-
147
- // sk_value returns the |i|th pointer in |sk|, or NULL if |i| is out of
148
- // range.
149
312
  OPENSSL_EXPORT void *sk_value(const _STACK *sk, size_t i);
150
-
151
- // sk_set sets the |i|th pointer in |sk| to |p| and returns |p|. If |i| is out
152
- // of range, it returns NULL.
153
313
  OPENSSL_EXPORT void *sk_set(_STACK *sk, size_t i, void *p);
154
-
155
- // sk_free frees the given stack and array of pointers, but does nothing to
156
- // free the individual elements. Also see |sk_pop_free_ex|.
157
314
  OPENSSL_EXPORT void sk_free(_STACK *sk);
158
-
159
- // sk_pop_free_ex calls |free_func| on each element in the stack and then frees
160
- // the stack itself. Note this corresponds to |sk_FOO_pop_free|. It is named
161
- // |sk_pop_free_ex| as a workaround for existing code calling an older version
162
- // of |sk_pop_free|.
163
315
  OPENSSL_EXPORT void sk_pop_free_ex(_STACK *sk,
164
- void (*call_free_func)(stack_free_func,
165
- void *),
166
- stack_free_func free_func);
167
-
168
- // sk_insert inserts |p| into the stack at index |where|, moving existing
169
- // elements if needed. It returns the length of the new stack, or zero on
170
- // error.
316
+ OPENSSL_sk_call_free_func call_free_func,
317
+ OPENSSL_sk_free_func free_func);
171
318
  OPENSSL_EXPORT size_t sk_insert(_STACK *sk, void *p, size_t where);
172
-
173
- // sk_delete removes the pointer at index |where|, moving other elements down
174
- // if needed. It returns the removed pointer, or NULL if |where| is out of
175
- // range.
176
319
  OPENSSL_EXPORT void *sk_delete(_STACK *sk, size_t where);
177
-
178
- // sk_delete_ptr removes, at most, one instance of |p| from the stack based on
179
- // pointer equality. If an instance of |p| is found then |p| is returned,
180
- // otherwise it returns NULL.
181
320
  OPENSSL_EXPORT void *sk_delete_ptr(_STACK *sk, const void *p);
182
-
183
- // sk_find returns the first value in the stack equal to |p|. If a comparison
184
- // function has been set on the stack, equality is defined by it, otherwise
185
- // pointer equality is used. If the stack is sorted, then a binary search is
186
- // used, otherwise a linear search is performed. If a matching element is found,
187
- // its index is written to
188
- // |*out_index| (if |out_index| is not NULL) and one is returned. Otherwise zero
189
- // is returned.
190
- //
191
- // Note this differs from OpenSSL. The type signature is slightly different, and
192
- // OpenSSL's sk_find will implicitly sort |sk| if it has a comparison function
193
- // defined.
321
+ OPENSSL_EXPORT void sk_delete_if(_STACK *sk,
322
+ OPENSSL_sk_call_delete_if_func call_func,
323
+ OPENSSL_sk_delete_if_func func, void *data);
194
324
  OPENSSL_EXPORT int sk_find(const _STACK *sk, size_t *out_index, const void *p,
195
- int (*call_cmp_func)(stack_cmp_func, const void **,
196
- const void **));
197
-
198
- // sk_shift removes and returns the first element in the stack, or returns NULL
199
- // if the stack is empty.
325
+ OPENSSL_sk_call_cmp_func call_cmp_func);
200
326
  OPENSSL_EXPORT void *sk_shift(_STACK *sk);
201
-
202
- // sk_push appends |p| to the stack and returns the length of the new stack, or
203
- // 0 on allocation failure.
204
327
  OPENSSL_EXPORT size_t sk_push(_STACK *sk, void *p);
205
-
206
- // sk_pop returns and removes the last element on the stack, or NULL if the
207
- // stack is empty.
208
328
  OPENSSL_EXPORT void *sk_pop(_STACK *sk);
209
-
210
- // sk_dup performs a shallow copy of a stack and returns the new stack, or NULL
211
- // on error.
212
329
  OPENSSL_EXPORT _STACK *sk_dup(const _STACK *sk);
213
-
214
- // sk_sort sorts the elements of |sk| into ascending order based on the
215
- // comparison function. The stack maintains a |sorted| flag and sorting an
216
- // already sorted stack is a no-op.
217
- OPENSSL_EXPORT void sk_sort(_STACK *sk);
218
-
219
- // sk_is_sorted returns one if |sk| is known to be sorted and zero
220
- // otherwise.
330
+ OPENSSL_EXPORT void sk_sort(_STACK *sk, OPENSSL_sk_call_cmp_func call_cmp_func);
221
331
  OPENSSL_EXPORT int sk_is_sorted(const _STACK *sk);
222
-
223
- // sk_set_cmp_func sets the comparison function to be used by |sk| and returns
224
- // the previous one.
225
- OPENSSL_EXPORT stack_cmp_func sk_set_cmp_func(_STACK *sk, stack_cmp_func comp);
226
-
227
- // sk_deep_copy performs a copy of |sk| and of each of the non-NULL elements in
228
- // |sk| by using |copy_func|. If an error occurs, |free_func| is used to free
229
- // any copies already made and NULL is returned.
230
- OPENSSL_EXPORT _STACK *sk_deep_copy(
231
- const _STACK *sk, void *(*call_copy_func)(stack_copy_func, void *),
232
- stack_copy_func copy_func, void (*call_free_func)(stack_free_func, void *),
233
- stack_free_func free_func);
234
-
235
-
236
- // Deprecated functions.
332
+ OPENSSL_EXPORT OPENSSL_sk_cmp_func sk_set_cmp_func(_STACK *sk,
333
+ OPENSSL_sk_cmp_func comp);
334
+ OPENSSL_EXPORT _STACK *sk_deep_copy(const _STACK *sk,
335
+ OPENSSL_sk_call_copy_func call_copy_func,
336
+ OPENSSL_sk_copy_func copy_func,
337
+ OPENSSL_sk_call_free_func call_free_func,
338
+ OPENSSL_sk_free_func free_func);
237
339
 
238
340
  // sk_pop_free behaves like |sk_pop_free_ex| but performs an invalid function
239
341
  // pointer cast. It exists because some existing callers called |sk_pop_free|
240
342
  // directly.
241
343
  //
242
344
  // TODO(davidben): Migrate callers to bssl::UniquePtr and remove this.
243
- OPENSSL_EXPORT void sk_pop_free(_STACK *sk, stack_free_func free_func);
244
-
245
-
246
- // Defining stack types.
247
- //
248
- // This set of macros is used to emit the typed functions that act on a
249
- // |STACK_OF(T)|.
345
+ OPENSSL_EXPORT void sk_pop_free(_STACK *sk, OPENSSL_sk_free_func free_func);
250
346
 
251
347
  #if !defined(BORINGSSL_NO_CXX)
252
348
  extern "C++" {
@@ -276,156 +372,161 @@ BSSL_NAMESPACE_END
276
372
  #define BORINGSSL_DEFINE_STACK_TRAITS(name, type, is_const)
277
373
  #endif
278
374
 
279
- #define BORINGSSL_DEFINE_STACK_OF_IMPL(name, ptrtype, constptrtype) \
280
- DECLARE_STACK_OF(name) \
281
- \
282
- typedef void (*stack_##name##_free_func)(ptrtype); \
283
- typedef ptrtype (*stack_##name##_copy_func)(ptrtype); \
284
- typedef int (*stack_##name##_cmp_func)(constptrtype *a, constptrtype *b); \
285
- \
286
- OPENSSL_INLINE void sk_##name##_call_free_func(stack_free_func free_func, \
287
- void *ptr) { \
288
- ((stack_##name##_free_func)free_func)((ptrtype)ptr); \
289
- } \
290
- \
291
- OPENSSL_INLINE void *sk_##name##_call_copy_func(stack_copy_func copy_func, \
292
- void *ptr) { \
293
- return (void *)((stack_##name##_copy_func)copy_func)((ptrtype)ptr); \
294
- } \
295
- \
296
- OPENSSL_INLINE int sk_##name##_call_cmp_func( \
297
- stack_cmp_func cmp_func, const void **a, const void **b) { \
298
- constptrtype a_ptr = (constptrtype)*a; \
299
- constptrtype b_ptr = (constptrtype)*b; \
300
- return ((stack_##name##_cmp_func)cmp_func)(&a_ptr, &b_ptr); \
301
- } \
302
- \
303
- OPENSSL_INLINE STACK_OF(name) * \
304
- sk_##name##_new(stack_##name##_cmp_func comp) { \
305
- return (STACK_OF(name) *)sk_new((stack_cmp_func)comp); \
306
- } \
307
- \
308
- OPENSSL_INLINE STACK_OF(name) *sk_##name##_new_null(void) { \
309
- return (STACK_OF(name) *)sk_new_null(); \
310
- } \
311
- \
312
- OPENSSL_INLINE size_t sk_##name##_num(const STACK_OF(name) *sk) { \
313
- return sk_num((const _STACK *)sk); \
314
- } \
315
- \
316
- OPENSSL_INLINE void sk_##name##_zero(STACK_OF(name) *sk) { \
317
- sk_zero((_STACK *)sk); \
318
- } \
319
- \
320
- OPENSSL_INLINE ptrtype sk_##name##_value(const STACK_OF(name) *sk, \
321
- size_t i) { \
322
- return (ptrtype)sk_value((const _STACK *)sk, i); \
323
- } \
324
- \
325
- OPENSSL_INLINE ptrtype sk_##name##_set(STACK_OF(name) *sk, size_t i, \
326
- ptrtype p) { \
327
- return (ptrtype)sk_set((_STACK *)sk, i, (void *)p); \
328
- } \
329
- \
330
- OPENSSL_INLINE void sk_##name##_free(STACK_OF(name) * sk) { \
331
- sk_free((_STACK *)sk); \
332
- } \
333
- \
334
- OPENSSL_INLINE void sk_##name##_pop_free( \
335
- STACK_OF(name) * sk, stack_##name##_free_func free_func) { \
336
- sk_pop_free_ex((_STACK *)sk, sk_##name##_call_free_func, \
337
- (stack_free_func)free_func); \
338
- } \
339
- \
340
- OPENSSL_INLINE size_t sk_##name##_insert(STACK_OF(name) *sk, ptrtype p, \
341
- size_t where) { \
342
- return sk_insert((_STACK *)sk, (void *)p, where); \
343
- } \
344
- \
345
- OPENSSL_INLINE ptrtype sk_##name##_delete(STACK_OF(name) *sk, \
346
- size_t where) { \
347
- return (ptrtype)sk_delete((_STACK *)sk, where); \
348
- } \
349
- \
350
- OPENSSL_INLINE ptrtype sk_##name##_delete_ptr(STACK_OF(name) *sk, \
351
- constptrtype p) { \
352
- return (ptrtype)sk_delete_ptr((_STACK *)sk, (const void *)p); \
353
- } \
354
- \
355
- OPENSSL_INLINE int sk_##name##_find(const STACK_OF(name) *sk, \
356
- size_t * out_index, constptrtype p) { \
357
- return sk_find((const _STACK *)sk, out_index, (const void *)p, \
358
- sk_##name##_call_cmp_func); \
359
- } \
360
- \
361
- OPENSSL_INLINE ptrtype sk_##name##_shift(STACK_OF(name) *sk) { \
362
- return (ptrtype)sk_shift((_STACK *)sk); \
363
- } \
364
- \
365
- OPENSSL_INLINE size_t sk_##name##_push(STACK_OF(name) *sk, ptrtype p) { \
366
- return sk_push((_STACK *)sk, (void *)p); \
367
- } \
368
- \
369
- OPENSSL_INLINE ptrtype sk_##name##_pop(STACK_OF(name) *sk) { \
370
- return (ptrtype)sk_pop((_STACK *)sk); \
371
- } \
372
- \
373
- OPENSSL_INLINE STACK_OF(name) * sk_##name##_dup(const STACK_OF(name) *sk) { \
374
- return (STACK_OF(name) *)sk_dup((const _STACK *)sk); \
375
- } \
376
- \
377
- OPENSSL_INLINE void sk_##name##_sort(STACK_OF(name) *sk) { \
378
- sk_sort((_STACK *)sk); \
379
- } \
380
- \
381
- OPENSSL_INLINE int sk_##name##_is_sorted(const STACK_OF(name) *sk) { \
382
- return sk_is_sorted((const _STACK *)sk); \
383
- } \
384
- \
385
- OPENSSL_INLINE stack_##name##_cmp_func sk_##name##_set_cmp_func( \
386
- STACK_OF(name) *sk, stack_##name##_cmp_func comp) { \
387
- return (stack_##name##_cmp_func)sk_set_cmp_func((_STACK *)sk, \
388
- (stack_cmp_func)comp); \
389
- } \
390
- \
391
- OPENSSL_INLINE STACK_OF(name) * \
392
- sk_##name##_deep_copy(const STACK_OF(name) *sk, \
393
- ptrtype(*copy_func)(ptrtype), \
394
- void (*free_func)(ptrtype)) { \
395
- return (STACK_OF(name) *)sk_deep_copy( \
396
- (const _STACK *)sk, sk_##name##_call_copy_func, \
397
- (stack_copy_func)copy_func, sk_##name##_call_free_func, \
398
- (stack_free_func)free_func); \
399
- }
400
-
401
- // DEFINE_NAMED_STACK_OF defines |STACK_OF(name)| to be a stack whose elements
402
- // are |type| *.
403
- #define DEFINE_NAMED_STACK_OF(name, type) \
404
- BORINGSSL_DEFINE_STACK_OF_IMPL(name, type *, const type *) \
405
- BORINGSSL_DEFINE_STACK_TRAITS(name, type, false)
406
-
407
- // DEFINE_STACK_OF defines |STACK_OF(type)| to be a stack whose elements are
408
- // |type| *.
409
- #define DEFINE_STACK_OF(type) DEFINE_NAMED_STACK_OF(type, type)
410
-
411
- // DEFINE_CONST_STACK_OF defines |STACK_OF(type)| to be a stack whose elements
412
- // are const |type| *.
413
- #define DEFINE_CONST_STACK_OF(type) \
414
- BORINGSSL_DEFINE_STACK_OF_IMPL(type, const type *, const type *) \
415
- BORINGSSL_DEFINE_STACK_TRAITS(type, const type, true)
416
-
417
- // DEFINE_SPECIAL_STACK_OF defines |STACK_OF(type)| to be a stack whose elements
418
- // are |type|, where |type| must be a typedef for a pointer.
419
- #define DEFINE_SPECIAL_STACK_OF(type) \
420
- OPENSSL_STATIC_ASSERT(sizeof(type) == sizeof(void *), \
421
- #type " is not a pointer"); \
422
- BORINGSSL_DEFINE_STACK_OF_IMPL(type, type, const type)
423
-
375
+ #define BORINGSSL_DEFINE_STACK_OF_IMPL(name, ptrtype, constptrtype) \
376
+ /* We disable MSVC C4191 in this macro, which warns when pointers are cast \
377
+ * to the wrong type. While the cast itself is valid, it is often a bug \
378
+ * because calling it through the cast is UB. However, we never actually \
379
+ * call functions as |OPENSSL_sk_cmp_func|. The type is just a type-erased \
380
+ * function pointer. (C does not guarantee function pointers fit in \
381
+ * |void*|, and GCC will warn on this.) Thus we just disable the false \
382
+ * positive warning. */ \
383
+ OPENSSL_MSVC_PRAGMA(warning(push)) \
384
+ OPENSSL_MSVC_PRAGMA(warning(disable : 4191)) \
385
+ \
386
+ DECLARE_STACK_OF(name) \
387
+ \
388
+ typedef void (*sk_##name##_free_func)(ptrtype); \
389
+ typedef ptrtype (*sk_##name##_copy_func)(constptrtype); \
390
+ typedef int (*sk_##name##_cmp_func)(constptrtype *, constptrtype *); \
391
+ typedef int (*sk_##name##_delete_if_func)(ptrtype, void *); \
392
+ \
393
+ OPENSSL_INLINE void sk_##name##_call_free_func( \
394
+ OPENSSL_sk_free_func free_func, void *ptr) { \
395
+ ((sk_##name##_free_func)free_func)((ptrtype)ptr); \
396
+ } \
397
+ \
398
+ OPENSSL_INLINE void *sk_##name##_call_copy_func( \
399
+ OPENSSL_sk_copy_func copy_func, const void *ptr) { \
400
+ return (void *)((sk_##name##_copy_func)copy_func)((constptrtype)ptr); \
401
+ } \
402
+ \
403
+ OPENSSL_INLINE int sk_##name##_call_cmp_func(OPENSSL_sk_cmp_func cmp_func, \
404
+ const void *const *a, \
405
+ const void *const *b) { \
406
+ /* The data is actually stored as |void*| pointers, so read the pointer \
407
+ * as |void*| and then pass the corrected type into the caller-supplied \
408
+ * function, which expects |constptrtype*|. */ \
409
+ constptrtype a_ptr = (constptrtype)*a; \
410
+ constptrtype b_ptr = (constptrtype)*b; \
411
+ return ((sk_##name##_cmp_func)cmp_func)(&a_ptr, &b_ptr); \
412
+ } \
413
+ \
414
+ OPENSSL_INLINE int sk_##name##_call_delete_if_func( \
415
+ OPENSSL_sk_delete_if_func func, void *obj, void *data) { \
416
+ return ((sk_##name##_delete_if_func)func)((ptrtype)obj, data); \
417
+ } \
418
+ \
419
+ OPENSSL_INLINE STACK_OF(name) *sk_##name##_new(sk_##name##_cmp_func comp) { \
420
+ return (STACK_OF(name) *)sk_new((OPENSSL_sk_cmp_func)comp); \
421
+ } \
422
+ \
423
+ OPENSSL_INLINE STACK_OF(name) *sk_##name##_new_null(void) { \
424
+ return (STACK_OF(name) *)sk_new_null(); \
425
+ } \
426
+ \
427
+ OPENSSL_INLINE size_t sk_##name##_num(const STACK_OF(name) *sk) { \
428
+ return sk_num((const _STACK *)sk); \
429
+ } \
430
+ \
431
+ OPENSSL_INLINE void sk_##name##_zero(STACK_OF(name) *sk) { \
432
+ sk_zero((_STACK *)sk); \
433
+ } \
434
+ \
435
+ OPENSSL_INLINE ptrtype sk_##name##_value(const STACK_OF(name) *sk, \
436
+ size_t i) { \
437
+ return (ptrtype)sk_value((const _STACK *)sk, i); \
438
+ } \
439
+ \
440
+ OPENSSL_INLINE ptrtype sk_##name##_set(STACK_OF(name) *sk, size_t i, \
441
+ ptrtype p) { \
442
+ return (ptrtype)sk_set((_STACK *)sk, i, (void *)p); \
443
+ } \
444
+ \
445
+ OPENSSL_INLINE void sk_##name##_free(STACK_OF(name) *sk) { \
446
+ sk_free((_STACK *)sk); \
447
+ } \
448
+ \
449
+ OPENSSL_INLINE void sk_##name##_pop_free(STACK_OF(name) *sk, \
450
+ sk_##name##_free_func free_func) { \
451
+ sk_pop_free_ex((_STACK *)sk, sk_##name##_call_free_func, \
452
+ (OPENSSL_sk_free_func)free_func); \
453
+ } \
454
+ \
455
+ OPENSSL_INLINE size_t sk_##name##_insert(STACK_OF(name) *sk, ptrtype p, \
456
+ size_t where) { \
457
+ return sk_insert((_STACK *)sk, (void *)p, where); \
458
+ } \
459
+ \
460
+ OPENSSL_INLINE ptrtype sk_##name##_delete(STACK_OF(name) *sk, \
461
+ size_t where) { \
462
+ return (ptrtype)sk_delete((_STACK *)sk, where); \
463
+ } \
464
+ \
465
+ OPENSSL_INLINE ptrtype sk_##name##_delete_ptr(STACK_OF(name) *sk, \
466
+ constptrtype p) { \
467
+ return (ptrtype)sk_delete_ptr((_STACK *)sk, (const void *)p); \
468
+ } \
469
+ \
470
+ OPENSSL_INLINE void sk_##name##_delete_if( \
471
+ STACK_OF(name) *sk, sk_##name##_delete_if_func func, void *data) { \
472
+ sk_delete_if((_STACK *)sk, sk_##name##_call_delete_if_func, \
473
+ (OPENSSL_sk_delete_if_func)func, data); \
474
+ } \
475
+ \
476
+ OPENSSL_INLINE int sk_##name##_find(const STACK_OF(name) *sk, \
477
+ size_t *out_index, constptrtype p) { \
478
+ return sk_find((const _STACK *)sk, out_index, (const void *)p, \
479
+ sk_##name##_call_cmp_func); \
480
+ } \
481
+ \
482
+ OPENSSL_INLINE ptrtype sk_##name##_shift(STACK_OF(name) *sk) { \
483
+ return (ptrtype)sk_shift((_STACK *)sk); \
484
+ } \
485
+ \
486
+ OPENSSL_INLINE size_t sk_##name##_push(STACK_OF(name) *sk, ptrtype p) { \
487
+ return sk_push((_STACK *)sk, (void *)p); \
488
+ } \
489
+ \
490
+ OPENSSL_INLINE ptrtype sk_##name##_pop(STACK_OF(name) *sk) { \
491
+ return (ptrtype)sk_pop((_STACK *)sk); \
492
+ } \
493
+ \
494
+ OPENSSL_INLINE STACK_OF(name) *sk_##name##_dup(const STACK_OF(name) *sk) { \
495
+ return (STACK_OF(name) *)sk_dup((const _STACK *)sk); \
496
+ } \
497
+ \
498
+ OPENSSL_INLINE void sk_##name##_sort(STACK_OF(name) *sk) { \
499
+ sk_sort((_STACK *)sk, sk_##name##_call_cmp_func); \
500
+ } \
501
+ \
502
+ OPENSSL_INLINE int sk_##name##_is_sorted(const STACK_OF(name) *sk) { \
503
+ return sk_is_sorted((const _STACK *)sk); \
504
+ } \
505
+ \
506
+ OPENSSL_INLINE sk_##name##_cmp_func sk_##name##_set_cmp_func( \
507
+ STACK_OF(name) *sk, sk_##name##_cmp_func comp) { \
508
+ return (sk_##name##_cmp_func)sk_set_cmp_func((_STACK *)sk, \
509
+ (OPENSSL_sk_cmp_func)comp); \
510
+ } \
511
+ \
512
+ OPENSSL_INLINE STACK_OF(name) *sk_##name##_deep_copy( \
513
+ const STACK_OF(name) *sk, sk_##name##_copy_func copy_func, \
514
+ sk_##name##_free_func free_func) { \
515
+ return (STACK_OF(name) *)sk_deep_copy( \
516
+ (const _STACK *)sk, sk_##name##_call_copy_func, \
517
+ (OPENSSL_sk_copy_func)copy_func, sk_##name##_call_free_func, \
518
+ (OPENSSL_sk_free_func)free_func); \
519
+ } \
520
+ \
521
+ OPENSSL_MSVC_PRAGMA(warning(pop))
522
+
523
+
524
+ // Built-in stacks.
424
525
 
425
526
  typedef char *OPENSSL_STRING;
426
527
 
427
528
  DEFINE_STACK_OF(void)
428
- DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING)
529
+ DEFINE_NAMED_STACK_OF(OPENSSL_STRING, char)
429
530
 
430
531
 
431
532
  #if defined(__cplusplus)
@@ -443,22 +544,20 @@ namespace internal {
443
544
 
444
545
  // Stacks defined with |DEFINE_CONST_STACK_OF| are freed with |sk_free|.
445
546
  template <typename Stack>
446
- struct DeleterImpl<
447
- Stack, typename std::enable_if<StackTraits<Stack>::kIsConst>::type> {
547
+ struct DeleterImpl<Stack, std::enable_if_t<StackTraits<Stack>::kIsConst>> {
448
548
  static void Free(Stack *sk) { sk_free(reinterpret_cast<_STACK *>(sk)); }
449
549
  };
450
550
 
451
551
  // Stacks defined with |DEFINE_STACK_OF| are freed with |sk_pop_free| and the
452
552
  // corresponding type's deleter.
453
553
  template <typename Stack>
454
- struct DeleterImpl<
455
- Stack, typename std::enable_if<!StackTraits<Stack>::kIsConst>::type> {
554
+ struct DeleterImpl<Stack, std::enable_if_t<!StackTraits<Stack>::kIsConst>> {
456
555
  static void Free(Stack *sk) {
457
556
  // sk_FOO_pop_free is defined by macros and bound by name, so we cannot
458
557
  // access it from C++ here.
459
558
  using Type = typename StackTraits<Stack>::Type;
460
559
  sk_pop_free_ex(reinterpret_cast<_STACK *>(sk),
461
- [](stack_free_func /* unused */, void *ptr) {
560
+ [](OPENSSL_sk_free_func /* unused */, void *ptr) {
462
561
  DeleterImpl<Type>::Free(reinterpret_cast<Type *>(ptr));
463
562
  },
464
563
  nullptr);
@@ -502,18 +601,17 @@ class StackIteratorImpl {
502
601
  };
503
602
 
504
603
  template <typename Stack>
505
- using StackIterator = typename std::enable_if<StackTraits<Stack>::kIsStack,
506
- StackIteratorImpl<Stack>>::type;
604
+ using StackIterator =
605
+ std::enable_if_t<StackTraits<Stack>::kIsStack, StackIteratorImpl<Stack>>;
507
606
 
508
607
  } // namespace internal
509
608
 
510
609
  // PushToStack pushes |elem| to |sk|. It returns true on success and false on
511
610
  // allocation failure.
512
611
  template <typename Stack>
513
- inline
514
- typename std::enable_if<!internal::StackTraits<Stack>::kIsConst, bool>::type
515
- PushToStack(Stack *sk,
516
- UniquePtr<typename internal::StackTraits<Stack>::Type> elem) {
612
+ inline std::enable_if_t<!internal::StackTraits<Stack>::kIsConst, bool>
613
+ PushToStack(Stack *sk,
614
+ UniquePtr<typename internal::StackTraits<Stack>::Type> elem) {
517
615
  if (!sk_push(reinterpret_cast<_STACK *>(sk), elem.get())) {
518
616
  return false;
519
617
  }