grpc 1.53.1 → 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 (689) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +78 -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/support/port_platform.h +4 -4
  6. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +11 -0
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +6 -0
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -11
  9. data/src/core/ext/filters/client_channel/backup_poller.h +0 -3
  10. data/src/core/ext/filters/client_channel/client_channel.cc +848 -813
  11. data/src/core/ext/filters/client_channel/client_channel.h +131 -173
  12. data/src/core/ext/filters/client_channel/client_channel_internal.h +114 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +4 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +6 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +17 -18
  16. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +134 -151
  17. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2 -16
  18. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +14 -10
  19. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +68 -30
  20. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -5
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +2 -2
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +30 -38
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +4 -4
  26. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -26
  27. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -179
  28. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -2
  29. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -2
  30. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +4 -2
  31. data/src/core/ext/filters/client_channel/retry_filter.cc +95 -102
  32. data/src/core/ext/filters/client_channel/subchannel.cc +2 -4
  33. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +26 -27
  34. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -5
  35. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -3
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -12
  37. data/src/core/ext/filters/http/message_compress/compression_filter.cc +27 -11
  38. data/src/core/ext/filters/message_size/message_size_filter.cc +141 -224
  39. data/src/core/ext/filters/message_size/message_size_filter.h +48 -3
  40. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -6
  41. data/src/core/ext/gcp/metadata_query.cc +142 -0
  42. data/src/core/ext/gcp/metadata_query.h +82 -0
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +70 -55
  44. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +8 -12
  45. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -5
  46. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +116 -58
  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_encoder.cc +222 -118
  51. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +113 -295
  52. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -2
  53. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +0 -2
  54. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +277 -451
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -14
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -9
  58. data/src/core/ext/transport/chttp2/transport/internal.h +16 -3
  59. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  60. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -5
  61. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -14
  62. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +5 -3
  63. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +22 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +5 -3
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +22 -0
  66. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +23 -5
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +94 -3
  68. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -2
  69. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -0
  70. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +6 -3
  71. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  72. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +24 -6
  73. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +111 -12
  74. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +9 -7
  75. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +27 -9
  76. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +0 -1
  77. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +11 -7
  78. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +56 -12
  79. 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
  80. 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
  81. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +5 -3
  82. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  83. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +13 -2
  84. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +49 -0
  85. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +24 -9
  86. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +66 -12
  87. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +139 -136
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +31 -15
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +12 -9
  92. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +15 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +54 -45
  94. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +135 -119
  95. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +100 -97
  97. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +15 -18
  98. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +272 -264
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +117 -117
  100. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +5 -5
  101. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +5 -5
  102. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +5 -5
  103. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +12 -9
  104. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -0
  105. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -2
  106. data/src/core/ext/xds/xds_client_stats.cc +29 -15
  107. data/src/core/ext/xds/xds_client_stats.h +24 -20
  108. data/src/core/ext/xds/xds_endpoint.cc +5 -2
  109. data/src/core/ext/xds/xds_endpoint.h +9 -1
  110. data/src/core/ext/xds/xds_http_rbac_filter.cc +1 -1
  111. data/src/core/ext/xds/xds_lb_policy_registry.cc +13 -0
  112. data/src/core/ext/xds/xds_transport_grpc.cc +1 -1
  113. data/src/core/lib/channel/call_finalization.h +1 -1
  114. data/src/core/lib/channel/call_tracer.cc +51 -0
  115. data/src/core/lib/channel/call_tracer.h +101 -38
  116. data/src/core/lib/channel/connected_channel.cc +483 -1050
  117. data/src/core/lib/channel/context.h +8 -1
  118. data/src/core/lib/channel/promise_based_filter.cc +106 -42
  119. data/src/core/lib/channel/promise_based_filter.h +27 -13
  120. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  121. data/src/core/lib/config/config_vars.cc +151 -0
  122. data/src/core/lib/config/config_vars.h +127 -0
  123. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  124. data/src/core/lib/config/load_config.cc +66 -0
  125. data/src/core/lib/config/load_config.h +49 -0
  126. data/src/core/lib/debug/trace.cc +5 -6
  127. data/src/core/lib/debug/trace.h +0 -5
  128. data/src/core/lib/event_engine/event_engine.cc +37 -2
  129. data/src/core/lib/event_engine/handle_containers.h +7 -22
  130. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  131. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +0 -4
  132. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -9
  133. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +48 -15
  134. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +8 -8
  135. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -5
  136. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +6 -3
  137. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +27 -18
  138. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +0 -3
  139. data/src/core/lib/event_engine/resolved_address.cc +2 -1
  140. data/src/core/lib/event_engine/windows/win_socket.cc +0 -1
  141. data/src/core/lib/event_engine/windows/windows_endpoint.cc +129 -82
  142. data/src/core/lib/event_engine/windows/windows_endpoint.h +21 -5
  143. data/src/core/lib/event_engine/windows/windows_engine.cc +39 -18
  144. data/src/core/lib/event_engine/windows/windows_engine.h +2 -1
  145. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  146. data/src/core/lib/event_engine/windows/windows_listener.h +155 -0
  147. data/src/core/lib/experiments/config.cc +3 -10
  148. data/src/core/lib/experiments/experiments.cc +7 -0
  149. data/src/core/lib/experiments/experiments.h +9 -1
  150. data/src/core/lib/gpr/log.cc +15 -28
  151. data/src/core/lib/gprpp/fork.cc +8 -14
  152. data/src/core/lib/gprpp/orphanable.h +4 -3
  153. data/src/core/lib/gprpp/per_cpu.h +9 -3
  154. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +49 -37
  155. data/src/core/lib/gprpp/ref_counted.h +33 -34
  156. data/src/core/lib/gprpp/thd.h +16 -0
  157. data/src/core/lib/gprpp/time.cc +1 -0
  158. data/src/core/lib/gprpp/time.h +4 -4
  159. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +2 -2
  160. data/src/core/lib/iomgr/call_combiner.h +2 -2
  161. data/src/core/lib/iomgr/endpoint_cfstream.cc +4 -2
  162. data/src/core/lib/iomgr/ev_posix.cc +13 -53
  163. data/src/core/lib/iomgr/ev_posix.h +0 -3
  164. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +103 -76
  165. data/src/core/lib/iomgr/iomgr.cc +4 -8
  166. data/src/core/lib/iomgr/iomgr_windows.cc +8 -2
  167. data/src/core/lib/iomgr/pollset_set_windows.cc +9 -9
  168. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  169. data/src/core/lib/iomgr/socket_utils_common_posix.cc +16 -3
  170. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -2
  171. data/src/core/lib/iomgr/tcp_posix.cc +0 -1
  172. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -16
  173. data/src/core/lib/iomgr/tcp_server_windows.cc +176 -9
  174. data/src/core/lib/iomgr/tcp_windows.cc +12 -8
  175. data/src/core/lib/load_balancing/lb_policy.cc +9 -13
  176. data/src/core/lib/load_balancing/lb_policy.h +4 -2
  177. data/src/core/lib/promise/activity.cc +22 -6
  178. data/src/core/lib/promise/activity.h +61 -24
  179. data/src/core/lib/promise/cancel_callback.h +77 -0
  180. data/src/core/lib/promise/detail/basic_seq.h +1 -1
  181. data/src/core/lib/promise/detail/promise_factory.h +4 -0
  182. data/src/core/lib/promise/for_each.h +176 -0
  183. data/src/core/lib/promise/if.h +9 -0
  184. data/src/core/lib/promise/interceptor_list.h +23 -2
  185. data/src/core/lib/promise/latch.h +89 -3
  186. data/src/core/lib/promise/loop.h +13 -9
  187. data/src/core/lib/promise/map.h +7 -0
  188. data/src/core/lib/promise/party.cc +286 -0
  189. data/src/core/lib/promise/party.h +499 -0
  190. data/src/core/lib/promise/pipe.h +197 -57
  191. data/src/core/lib/promise/poll.h +48 -0
  192. data/src/core/lib/promise/promise.h +2 -2
  193. data/src/core/lib/resource_quota/arena.cc +19 -3
  194. data/src/core/lib/resource_quota/arena.h +119 -5
  195. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  196. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +12 -35
  197. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  198. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +0 -59
  199. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -5
  200. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  201. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -0
  202. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +2 -0
  203. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +5 -9
  204. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -25
  205. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +12 -0
  206. data/src/core/lib/security/transport/secure_endpoint.cc +4 -2
  207. data/src/core/lib/security/transport/server_auth_filter.cc +20 -2
  208. data/src/core/lib/slice/slice.cc +1 -1
  209. data/src/core/lib/surface/builtins.cc +2 -0
  210. data/src/core/lib/surface/call.cc +926 -1024
  211. data/src/core/lib/surface/call.h +10 -0
  212. data/src/core/lib/surface/lame_client.cc +1 -0
  213. data/src/core/lib/surface/validate_metadata.cc +42 -43
  214. data/src/core/lib/surface/validate_metadata.h +0 -9
  215. data/src/core/lib/surface/version.cc +2 -2
  216. data/src/core/lib/transport/batch_builder.cc +179 -0
  217. data/src/core/lib/transport/batch_builder.h +468 -0
  218. data/src/core/lib/transport/bdp_estimator.cc +7 -7
  219. data/src/core/lib/transport/bdp_estimator.h +10 -6
  220. data/src/core/lib/transport/custom_metadata.h +30 -0
  221. data/src/core/lib/transport/metadata_batch.cc +5 -2
  222. data/src/core/lib/transport/metadata_batch.h +17 -113
  223. data/src/core/lib/transport/parsed_metadata.h +6 -16
  224. data/src/core/lib/transport/timeout_encoding.cc +6 -1
  225. data/src/core/lib/transport/transport.cc +30 -2
  226. data/src/core/lib/transport/transport.h +70 -14
  227. data/src/core/lib/transport/transport_impl.h +7 -0
  228. data/src/core/lib/transport/transport_op_string.cc +52 -42
  229. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -2
  230. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -0
  231. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +21 -4
  232. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +5 -0
  233. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  234. data/src/core/tsi/ssl_transport_security.cc +4 -2
  235. data/src/ruby/lib/grpc/version.rb +1 -1
  236. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  237. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  238. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  239. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  240. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  241. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  242. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  243. data/{src/core/lib/gprpp/global_config_custom.h → third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc} +11 -14
  244. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  245. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  246. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  247. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  248. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  249. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  250. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  251. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  252. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  253. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  254. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  255. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  256. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  257. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  258. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  259. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  260. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  261. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +12 -8
  262. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  264. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  265. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  266. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  269. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  270. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +174 -194
  271. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  272. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  273. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  274. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  275. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  276. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  277. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  278. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  279. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  280. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  281. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  282. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  283. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +133 -88
  284. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +791 -791
  286. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +526 -526
  287. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  288. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  289. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  290. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  291. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  292. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +11 -7
  293. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +4 -4
  294. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  295. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -4
  296. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +17 -10
  297. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -3
  298. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  299. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  300. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  301. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +9 -5
  302. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  303. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  304. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  305. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  306. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  307. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  308. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  310. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  311. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  312. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  313. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  314. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  315. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  316. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  317. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  318. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +6 -12
  319. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -11
  320. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  321. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  322. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  323. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  324. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  325. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  326. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  327. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  328. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  329. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  330. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  331. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  332. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  333. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  334. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +16 -27
  335. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  336. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  337. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  338. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  339. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  340. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  341. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +39 -16
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  343. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  344. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  345. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +214 -99
  346. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +21 -5
  347. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  348. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  349. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  350. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  351. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  352. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  353. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  354. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  355. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  356. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  358. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  359. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +5 -5
  360. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  361. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  362. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  363. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  364. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  365. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  366. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  367. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  368. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  369. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  370. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +35 -27
  373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  396. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +21 -6
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  403. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +25 -25
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +91 -17
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +5 -5
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +34 -12
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +54 -23
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +44 -60
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +60 -53
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +48 -36
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +2 -7
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -3
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +0 -1
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +8 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +42 -14
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -15
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +2 -4
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +71 -43
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +14 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -4
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -45
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +22 -0
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +63 -52
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +107 -62
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +58 -31
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +523 -422
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  445. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  447. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  448. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +19 -6
  449. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +32 -14
  450. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  451. data/third_party/boringssl-with-bazel/src/crypto/internal.h +373 -18
  452. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +61 -0
  453. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +205 -0
  454. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  455. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  456. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  457. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +13 -1
  458. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  459. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  460. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +629 -613
  461. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  462. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  463. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  464. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  465. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  467. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  468. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  469. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  470. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  472. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  473. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  474. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  475. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  476. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +3 -4
  477. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  478. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  479. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  480. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  481. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +66 -34
  482. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +190 -77
  483. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +81 -284
  484. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +109 -42
  485. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  486. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +54 -55
  487. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  488. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +284 -331
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +67 -50
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +153 -150
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +786 -0
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +227 -252
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +230 -224
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  504. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  505. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  506. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  507. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +534 -618
  508. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  509. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +116 -182
  510. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  511. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +181 -202
  512. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  513. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  514. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1865 -2050
  515. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +433 -462
  516. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  517. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +267 -263
  518. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  519. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  520. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  521. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  522. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  523. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +326 -415
  524. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  525. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  526. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  527. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  528. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  529. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  530. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  531. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  532. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  533. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  534. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  535. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  536. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +78 -170
  537. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  538. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  539. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  540. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  541. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +309 -346
  543. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +341 -365
  544. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  545. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  546. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  547. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  548. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  549. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +122 -125
  550. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  551. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +247 -253
  552. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  553. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  554. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  555. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  556. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +143 -136
  557. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +664 -707
  558. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +83 -75
  559. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1062 -1146
  560. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +8 -4
  561. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  562. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +211 -187
  563. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  564. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -14
  565. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +21 -2
  566. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  567. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  568. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  569. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  570. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  571. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  572. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  573. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  574. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  575. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  576. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  577. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  578. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  579. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  580. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +22 -30
  581. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  582. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  583. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +41 -16
  584. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  585. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  586. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +13 -0
  587. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  588. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -15
  589. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  591. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +7 -4
  592. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  593. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +13 -21
  594. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +139 -75
  595. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  596. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +384 -286
  597. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +5 -6
  598. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  599. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +18 -7
  600. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +49 -23
  601. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  602. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1592 -1074
  603. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +202 -205
  604. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  605. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  606. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  607. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  608. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  609. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +34 -20
  610. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +65 -34
  611. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  612. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  613. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +32 -28
  614. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  615. data/third_party/boringssl-with-bazel/src/ssl/internal.h +130 -98
  616. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +27 -11
  617. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  618. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  619. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  620. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +39 -65
  621. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  622. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  623. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +30 -33
  624. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +77 -100
  625. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +120 -107
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +164 -30
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +150 -60
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +22 -11
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  630. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  631. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +5 -43
  632. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  633. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +2 -2
  634. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +22 -34
  635. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  636. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  637. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  638. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  639. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  640. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  641. metadata +103 -70
  642. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +0 -39
  643. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +0 -30
  644. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -29
  645. data/src/core/lib/gprpp/global_config.h +0 -93
  646. data/src/core/lib/gprpp/global_config_env.cc +0 -140
  647. data/src/core/lib/gprpp/global_config_env.h +0 -133
  648. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  649. data/src/core/lib/promise/intra_activity_waiter.h +0 -55
  650. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  651. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -29
  652. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  653. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +0 -83
  654. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  655. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  656. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  657. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +0 -38
  658. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  659. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  660. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  661. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  662. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  663. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  664. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  665. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  667. /data/src/core/lib/gpr/{log_android.cc → android/log.cc} +0 -0
  668. /data/src/core/lib/gpr/{cpu_iphone.cc → iphone/cpu.cc} +0 -0
  669. /data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +0 -0
  670. /data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +0 -0
  671. /data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +0 -0
  672. /data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +0 -0
  673. /data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +0 -0
  674. /data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +0 -0
  675. /data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +0 -0
  676. /data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +0 -0
  677. /data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +0 -0
  678. /data/src/core/lib/gpr/{cpu_windows.cc → windows/cpu.cc} +0 -0
  679. /data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +0 -0
  680. /data/src/core/lib/gpr/{string_windows.cc → windows/string.cc} +0 -0
  681. /data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +0 -0
  682. /data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +0 -0
  683. /data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +0 -0
  684. /data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +0 -0
  685. /data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +0 -0
  686. /data/src/core/lib/gprpp/{env_posix.cc → posix/env.cc} +0 -0
  687. /data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +0 -0
  688. /data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +0 -0
  689. /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
  }