grpc 1.64.0 → 1.65.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (622) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -58
  3. data/include/grpc/event_engine/event_engine.h +13 -6
  4. data/include/grpc/impl/channel_arg_names.h +7 -3
  5. data/include/grpc/module.modulemap +1 -0
  6. data/include/grpc/passive_listener.h +62 -0
  7. data/include/grpc/support/log.h +1 -6
  8. data/include/grpc/support/port_platform.h +3 -0
  9. data/src/core/channelz/channel_trace.cc +1 -1
  10. data/src/core/channelz/channel_trace.h +1 -1
  11. data/src/core/channelz/channelz.cc +3 -3
  12. data/src/core/channelz/channelz.h +7 -7
  13. data/src/core/channelz/channelz_registry.cc +4 -3
  14. data/src/core/client_channel/backup_poller.cc +4 -5
  15. data/src/core/client_channel/client_channel.cc +1324 -0
  16. data/src/core/client_channel/client_channel.h +243 -0
  17. data/src/core/client_channel/client_channel_filter.cc +266 -709
  18. data/src/core/client_channel/client_channel_filter.h +11 -64
  19. data/src/core/client_channel/client_channel_internal.h +16 -5
  20. data/src/core/client_channel/client_channel_plugin.cc +1 -14
  21. data/src/core/client_channel/client_channel_service_config.h +3 -3
  22. data/src/core/client_channel/config_selector.cc +1 -1
  23. data/src/core/client_channel/config_selector.h +1 -1
  24. data/src/core/client_channel/dynamic_filters.cc +3 -3
  25. data/src/core/client_channel/dynamic_filters.h +1 -3
  26. data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
  27. data/src/core/client_channel/load_balanced_call_destination.h +49 -0
  28. data/src/core/client_channel/retry_filter.cc +2 -9
  29. data/src/core/client_channel/retry_filter.h +2 -7
  30. data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
  31. data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
  32. data/src/core/client_channel/retry_service_config.cc +4 -5
  33. data/src/core/client_channel/retry_service_config.h +3 -3
  34. data/src/core/client_channel/subchannel.cc +220 -112
  35. data/src/core/client_channel/subchannel.h +31 -18
  36. data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
  37. data/src/core/client_channel/subchannel_pool_interface.h +2 -4
  38. data/src/core/client_channel/subchannel_stream_client.cc +36 -49
  39. data/src/core/client_channel/subchannel_stream_client.h +2 -4
  40. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
  41. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
  42. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
  43. data/src/core/ext/filters/census/grpc_context.cc +2 -4
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
  45. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
  46. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
  48. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
  49. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
  50. data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
  51. data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
  52. data/src/core/ext/filters/http/client_authority_filter.h +1 -0
  53. data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
  54. data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
  55. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
  56. data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
  57. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
  58. data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
  59. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
  60. data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
  61. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  62. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  63. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
  64. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
  65. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
  66. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  67. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
  68. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
  70. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  71. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
  73. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
  74. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
  75. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
  76. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
  77. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
  78. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
  79. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
  80. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
  81. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +5 -7
  82. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -1
  83. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
  84. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  85. data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
  86. data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
  87. data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
  88. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
  89. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
  95. data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
  96. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
  97. data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
  98. data/src/core/handshaker/handshaker.cc +6 -14
  99. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
  100. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
  101. data/src/core/handshaker/security/secure_endpoint.cc +38 -32
  102. data/src/core/handshaker/security/secure_endpoint.h +0 -2
  103. data/src/core/handshaker/security/security_handshaker.cc +25 -37
  104. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
  105. data/src/core/lib/address_utils/parse_address.cc +27 -39
  106. data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
  107. data/src/core/lib/avl/avl.h +1 -1
  108. data/src/core/lib/channel/channel_args.cc +13 -17
  109. data/src/core/lib/channel/channel_args.h +19 -8
  110. data/src/core/lib/channel/channel_stack.cc +5 -63
  111. data/src/core/lib/channel/channel_stack.h +13 -37
  112. data/src/core/lib/channel/channel_stack_builder.h +0 -5
  113. data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
  114. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
  115. data/src/core/lib/channel/connected_channel.cc +37 -676
  116. data/src/core/lib/channel/promise_based_filter.cc +41 -47
  117. data/src/core/lib/channel/promise_based_filter.h +124 -477
  118. data/src/core/lib/channel/status_util.cc +1 -1
  119. data/src/core/lib/compression/compression.cc +1 -1
  120. data/src/core/lib/compression/message_compress.cc +6 -6
  121. data/src/core/lib/config/config_vars.cc +2 -7
  122. data/src/core/lib/config/config_vars.h +1 -5
  123. data/src/core/lib/debug/event_log.h +1 -1
  124. data/src/core/lib/debug/trace.cc +43 -59
  125. data/src/core/lib/debug/trace.h +2 -97
  126. data/src/core/lib/debug/trace_flags.cc +255 -0
  127. data/src/core/lib/debug/trace_flags.h +133 -0
  128. data/src/core/lib/debug/trace_impl.h +115 -0
  129. data/src/core/lib/event_engine/ares_resolver.cc +5 -7
  130. data/src/core/lib/event_engine/ares_resolver.h +1 -3
  131. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
  132. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
  133. data/src/core/lib/event_engine/event_engine.cc +29 -4
  134. data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
  135. data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
  136. data/src/core/lib/event_engine/forkable.cc +4 -5
  137. data/src/core/lib/event_engine/forkable.h +0 -11
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
  139. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
  140. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
  141. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
  142. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
  143. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
  144. data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
  145. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
  146. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
  147. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
  148. data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
  149. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
  150. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
  151. data/src/core/lib/event_engine/shim.cc +1 -1
  152. data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
  153. data/src/core/lib/event_engine/thread_local.h +1 -1
  154. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  155. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
  156. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
  157. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
  158. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
  159. data/src/core/lib/event_engine/trace.h +6 -17
  160. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  161. data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
  162. data/src/core/lib/event_engine/windows/win_socket.h +4 -5
  163. data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
  164. data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
  165. data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
  166. data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
  167. data/src/core/lib/experiments/experiments.cc +35 -151
  168. data/src/core/lib/experiments/experiments.h +12 -45
  169. data/src/core/lib/gprpp/bitset.h +1 -1
  170. data/src/core/lib/gprpp/crash.cc +2 -3
  171. data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
  172. data/src/core/lib/gprpp/dump_args.cc +54 -0
  173. data/src/core/lib/gprpp/dump_args.h +69 -0
  174. data/src/core/lib/gprpp/glob.cc +70 -0
  175. data/src/core/lib/gprpp/glob.h +29 -0
  176. data/src/core/lib/gprpp/per_cpu.cc +1 -1
  177. data/src/core/lib/gprpp/posix/stat.cc +3 -4
  178. data/src/core/lib/gprpp/posix/thd.cc +8 -9
  179. data/src/core/lib/gprpp/ref_counted.h +30 -22
  180. data/src/core/lib/gprpp/single_set_ptr.h +5 -3
  181. data/src/core/lib/gprpp/status_helper.cc +11 -30
  182. data/src/core/lib/gprpp/status_helper.h +3 -31
  183. data/src/core/lib/gprpp/time.cc +3 -4
  184. data/src/core/lib/gprpp/time.h +3 -2
  185. data/src/core/lib/gprpp/unique_type_name.h +1 -1
  186. data/src/core/lib/gprpp/validation_errors.cc +10 -1
  187. data/src/core/lib/gprpp/validation_errors.h +11 -0
  188. data/src/core/lib/gprpp/windows/stat.cc +3 -4
  189. data/src/core/lib/gprpp/windows/thd.cc +3 -2
  190. data/src/core/lib/gprpp/work_serializer.cc +48 -57
  191. data/src/core/lib/iomgr/buffer_list.cc +4 -2
  192. data/src/core/lib/iomgr/call_combiner.cc +18 -27
  193. data/src/core/lib/iomgr/call_combiner.h +1 -3
  194. data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
  195. data/src/core/lib/iomgr/closure.h +2 -4
  196. data/src/core/lib/iomgr/combiner.cc +6 -8
  197. data/src/core/lib/iomgr/combiner.h +0 -2
  198. data/src/core/lib/iomgr/endpoint.cc +0 -6
  199. data/src/core/lib/iomgr/endpoint.h +0 -2
  200. data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
  201. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  202. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  203. data/src/core/lib/iomgr/error.cc +13 -21
  204. data/src/core/lib/iomgr/error.h +1 -1
  205. data/src/core/lib/iomgr/ev_apple.cc +3 -5
  206. data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
  207. data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
  208. data/src/core/lib/iomgr/ev_posix.cc +8 -9
  209. data/src/core/lib/iomgr/ev_posix.h +10 -7
  210. data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
  211. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
  212. data/src/core/lib/iomgr/exec_ctx.cc +2 -2
  213. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  214. data/src/core/lib/iomgr/executor.cc +6 -15
  215. data/src/core/lib/iomgr/executor.h +1 -1
  216. data/src/core/lib/iomgr/fork_posix.cc +8 -10
  217. data/src/core/lib/iomgr/fork_windows.cc +3 -1
  218. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
  219. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
  220. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  221. data/src/core/lib/iomgr/iocp_windows.cc +4 -3
  222. data/src/core/lib/iomgr/iomgr.cc +13 -17
  223. data/src/core/lib/iomgr/lockfree_event.cc +3 -5
  224. data/src/core/lib/iomgr/pollset.h +0 -2
  225. data/src/core/lib/iomgr/pollset_windows.cc +0 -2
  226. data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
  227. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  228. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  229. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  230. data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
  231. data/src/core/lib/iomgr/socket_windows.cc +4 -6
  232. data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
  233. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
  234. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
  235. data/src/core/lib/iomgr/tcp_posix.cc +57 -84
  236. data/src/core/lib/iomgr/tcp_posix.h +0 -2
  237. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  238. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
  239. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
  240. data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
  241. data/src/core/lib/iomgr/tcp_windows.cc +25 -41
  242. data/src/core/lib/iomgr/timer_generic.cc +17 -20
  243. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  244. data/src/core/lib/iomgr/timer_manager.cc +17 -30
  245. data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
  246. data/src/core/lib/iomgr/vsock.cc +1 -1
  247. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
  248. data/src/core/lib/promise/activity.h +27 -4
  249. data/src/core/lib/promise/cancel_callback.h +24 -0
  250. data/src/core/lib/promise/context.h +11 -0
  251. data/src/core/lib/promise/detail/basic_seq.h +1 -2
  252. data/src/core/lib/promise/detail/join_state.h +354 -398
  253. data/src/core/lib/promise/detail/promise_like.h +13 -6
  254. data/src/core/lib/promise/detail/seq_state.h +1178 -1178
  255. data/src/core/lib/promise/for_each.h +6 -6
  256. data/src/core/lib/promise/interceptor_list.h +6 -7
  257. data/src/core/lib/promise/latch.h +9 -9
  258. data/src/core/lib/promise/map.h +17 -0
  259. data/src/core/lib/promise/observable.h +182 -0
  260. data/src/core/lib/promise/party.cc +7 -8
  261. data/src/core/lib/promise/party.h +10 -8
  262. data/src/core/lib/promise/pipe.h +16 -35
  263. data/src/core/lib/promise/promise.h +1 -0
  264. data/src/core/lib/promise/status_flag.h +2 -0
  265. data/src/core/lib/resource_quota/arena.cc +56 -79
  266. data/src/core/lib/resource_quota/arena.h +118 -209
  267. data/src/core/lib/resource_quota/memory_quota.cc +12 -13
  268. data/src/core/lib/resource_quota/memory_quota.h +2 -3
  269. data/src/core/lib/resource_quota/periodic_update.cc +1 -1
  270. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  271. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  272. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  273. data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
  274. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
  275. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
  276. data/src/core/lib/security/authorization/matchers.cc +3 -3
  277. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
  278. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
  279. data/src/core/lib/security/context/security_context.cc +12 -13
  280. data/src/core/lib/security/context/security_context.h +31 -8
  281. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  282. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
  283. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
  284. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
  285. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
  286. data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
  287. data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
  288. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
  289. data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
  290. data/src/core/lib/security/credentials/credentials.cc +6 -6
  291. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
  292. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
  293. data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
  294. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  295. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
  296. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
  297. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
  298. data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
  299. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
  300. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
  301. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
  302. data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
  303. data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
  304. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  305. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
  306. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
  307. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
  308. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  309. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  310. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  312. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  313. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
  314. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
  315. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  316. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
  317. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
  318. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
  319. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
  320. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
  321. data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
  322. data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
  323. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
  324. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
  325. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
  326. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
  327. data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
  328. data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
  329. data/src/core/lib/security/security_connector/security_connector.cc +1 -4
  330. data/src/core/lib/security/security_connector/security_connector.h +1 -3
  331. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
  332. data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
  333. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
  334. data/src/core/lib/security/transport/auth_filters.h +1 -0
  335. data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
  336. data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
  337. data/src/core/lib/security/util/json_util.h +1 -1
  338. data/src/core/lib/slice/slice.h +1 -1
  339. data/src/core/lib/slice/slice_refcount.h +2 -4
  340. data/src/core/lib/slice/slice_string_helpers.cc +1 -1
  341. data/src/core/lib/surface/api_trace.h +1 -3
  342. data/src/core/lib/surface/call.cc +64 -3739
  343. data/src/core/lib/surface/call.h +41 -143
  344. data/src/core/lib/surface/call_log_batch.cc +1 -1
  345. data/src/core/lib/surface/call_utils.cc +276 -0
  346. data/src/core/lib/surface/call_utils.h +449 -0
  347. data/src/core/lib/surface/channel.cc +8 -3
  348. data/src/core/lib/surface/channel.h +10 -7
  349. data/src/core/lib/surface/channel_create.cc +14 -6
  350. data/src/core/lib/surface/channel_create.h +3 -2
  351. data/src/core/lib/surface/channel_init.cc +21 -77
  352. data/src/core/lib/surface/channel_init.h +19 -97
  353. data/src/core/lib/surface/client_call.cc +419 -0
  354. data/src/core/lib/surface/client_call.h +180 -0
  355. data/src/core/lib/surface/completion_queue.cc +28 -33
  356. data/src/core/lib/surface/completion_queue.h +0 -8
  357. data/src/core/lib/surface/filter_stack_call.cc +1157 -0
  358. data/src/core/lib/surface/filter_stack_call.h +369 -0
  359. data/src/core/lib/surface/init.cc +7 -6
  360. data/src/core/lib/surface/lame_client.cc +1 -1
  361. data/src/core/lib/surface/legacy_channel.cc +43 -30
  362. data/src/core/lib/surface/legacy_channel.h +9 -18
  363. data/src/core/lib/surface/server_call.cc +222 -0
  364. data/src/core/lib/surface/server_call.h +167 -0
  365. data/src/core/lib/surface/version.cc +2 -2
  366. data/src/core/lib/transport/bdp_estimator.cc +3 -5
  367. data/src/core/lib/transport/bdp_estimator.h +2 -4
  368. data/src/core/lib/transport/call_arena_allocator.h +9 -7
  369. data/src/core/lib/transport/call_destination.h +76 -0
  370. data/src/core/lib/transport/call_filters.cc +28 -10
  371. data/src/core/lib/transport/call_filters.h +128 -22
  372. data/src/core/lib/transport/call_spine.cc +5 -6
  373. data/src/core/lib/transport/call_spine.h +159 -334
  374. data/src/core/lib/transport/connectivity_state.cc +8 -10
  375. data/src/core/lib/transport/connectivity_state.h +0 -2
  376. data/src/core/lib/transport/interception_chain.cc +155 -0
  377. data/src/core/lib/transport/interception_chain.h +236 -0
  378. data/src/core/lib/transport/metadata_batch.h +10 -1
  379. data/src/core/lib/transport/metadata_info.h +1 -1
  380. data/src/core/lib/transport/transport.cc +3 -6
  381. data/src/core/lib/transport/transport.h +43 -40
  382. data/src/core/load_balancing/child_policy_handler.cc +8 -8
  383. data/src/core/load_balancing/endpoint_list.cc +5 -5
  384. data/src/core/load_balancing/endpoint_list.h +1 -1
  385. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
  386. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
  387. data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
  388. data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
  389. data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
  390. data/src/core/load_balancing/health_check_client.cc +10 -13
  391. data/src/core/load_balancing/lb_policy.cc +5 -8
  392. data/src/core/load_balancing/lb_policy.h +19 -3
  393. data/src/core/load_balancing/lb_policy_factory.h +1 -1
  394. data/src/core/load_balancing/lb_policy_registry.cc +2 -3
  395. data/src/core/load_balancing/lb_policy_registry.h +1 -1
  396. data/src/core/load_balancing/oob_backend_metric.cc +2 -4
  397. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
  398. data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
  399. data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
  400. data/src/core/load_balancing/priority/priority.cc +26 -28
  401. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
  402. data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
  403. data/src/core/load_balancing/rls/rls.cc +82 -82
  404. data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
  405. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
  406. data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
  407. data/src/core/load_balancing/xds/cds.cc +14 -16
  408. data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
  409. data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
  410. data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
  411. data/src/core/load_balancing/xds/xds_override_host.h +3 -3
  412. data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
  413. data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
  414. data/src/core/resolver/binder/binder_resolver.cc +3 -2
  415. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
  416. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  417. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
  418. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
  419. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  420. data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
  421. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
  422. data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
  423. data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
  424. data/src/core/resolver/endpoint_addresses.cc +1 -1
  425. data/src/core/resolver/fake/fake_resolver.cc +1 -1
  426. data/src/core/resolver/fake/fake_resolver.h +1 -1
  427. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
  428. data/src/core/resolver/polling_resolver.cc +30 -35
  429. data/src/core/resolver/resolver.cc +2 -6
  430. data/src/core/resolver/resolver.h +0 -2
  431. data/src/core/resolver/resolver_registry.cc +6 -8
  432. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
  433. data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
  434. data/src/core/resolver/xds/xds_resolver.cc +13 -15
  435. data/src/core/server/server.cc +269 -389
  436. data/src/core/server/server.h +37 -19
  437. data/src/core/server/server_call_tracer_filter.cc +7 -14
  438. data/src/core/server/server_config_selector.h +1 -1
  439. data/src/core/server/server_config_selector_filter.cc +3 -3
  440. data/src/core/server/server_interface.h +2 -0
  441. data/src/core/server/xds_channel_stack_modifier.cc +1 -1
  442. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  443. data/src/core/server/xds_server_config_fetcher.cc +1 -4
  444. data/src/core/service_config/service_config.h +1 -1
  445. data/src/core/service_config/service_config_call_data.h +13 -11
  446. data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
  447. data/src/core/service_config/service_config_impl.cc +5 -5
  448. data/src/core/service_config/service_config_impl.h +1 -1
  449. data/src/core/service_config/service_config_parser.cc +3 -6
  450. data/src/core/service_config/service_config_parser.h +1 -1
  451. data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
  452. data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
  453. data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
  454. data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
  455. data/src/core/telemetry/metrics.cc +178 -0
  456. data/src/core/telemetry/metrics.h +562 -0
  457. data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
  458. data/src/core/{lib/debug → telemetry}/stats.h +5 -5
  459. data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
  460. data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
  461. data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
  462. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
  463. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
  464. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
  465. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  466. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
  467. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
  468. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
  469. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  470. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
  471. data/src/core/tsi/fake_transport_security.cc +14 -17
  472. data/src/core/tsi/local_transport_security.cc +6 -5
  473. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
  474. data/src/core/tsi/ssl_transport_security.cc +76 -81
  475. data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
  476. data/src/core/tsi/ssl_transport_security_utils.h +11 -0
  477. data/src/core/tsi/transport_security.cc +0 -4
  478. data/src/core/tsi/transport_security.h +0 -2
  479. data/src/core/tsi/transport_security_interface.h +0 -4
  480. data/src/core/{lib/gpr → util}/alloc.h +3 -3
  481. data/src/core/{lib/gpr → util}/android/log.cc +0 -19
  482. data/src/core/{lib/gpr → util}/atm.cc +1 -1
  483. data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
  484. data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
  485. data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
  486. data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
  487. data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
  488. data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
  489. data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
  490. data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
  491. data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
  492. data/src/core/{lib/http → util/http_client}/parser.h +5 -6
  493. data/src/core/{lib → util}/json/json.h +5 -4
  494. data/src/core/{lib → util}/json/json_args.h +5 -5
  495. data/src/core/{lib → util}/json/json_channel_args.h +6 -6
  496. data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
  497. data/src/core/{lib → util}/json/json_object_loader.h +7 -7
  498. data/src/core/{lib → util}/json/json_reader.cc +3 -2
  499. data/src/core/{lib → util}/json/json_reader.h +6 -6
  500. data/src/core/{lib → util}/json/json_util.cc +4 -4
  501. data/src/core/{lib → util}/json/json_util.h +6 -6
  502. data/src/core/{lib → util}/json/json_writer.cc +3 -3
  503. data/src/core/{lib → util}/json/json_writer.h +6 -6
  504. data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
  505. data/src/core/{lib/gpr → util}/log.cc +45 -12
  506. data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
  507. data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
  508. data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
  509. data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
  510. data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
  511. data/src/core/{lib/gpr → util}/spinlock.h +3 -3
  512. data/src/core/{lib/gpr → util}/string.cc +2 -2
  513. data/src/core/{lib/gpr → util}/string.h +3 -3
  514. data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
  515. data/src/core/{lib/gpr → util}/time_precise.h +3 -3
  516. data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
  517. data/src/core/{lib/gpr → util}/useful.h +3 -3
  518. data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
  519. data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
  520. data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
  521. data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
  522. data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
  523. data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
  524. data/src/core/xds/grpc/certificate_provider_store.h +4 -4
  525. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  526. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
  527. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  528. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
  529. data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
  530. data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
  531. data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
  532. data/src/core/xds/grpc/xds_client_grpc.h +2 -2
  533. data/src/core/xds/grpc/xds_cluster.cc +4 -5
  534. data/src/core/xds/grpc/xds_cluster.h +1 -1
  535. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  536. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  537. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  538. data/src/core/xds/grpc/xds_common_types.h +1 -1
  539. data/src/core/xds/grpc/xds_endpoint.cc +4 -5
  540. data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
  541. data/src/core/xds/grpc/xds_http_filters.h +2 -2
  542. data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
  543. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
  544. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  545. data/src/core/xds/grpc/xds_listener.cc +4 -6
  546. data/src/core/xds/grpc/xds_route_config.cc +7 -8
  547. data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
  548. data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
  549. data/src/core/xds/xds_client/xds_api.cc +5 -9
  550. data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
  551. data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
  552. data/src/core/xds/xds_client/xds_client.cc +39 -45
  553. data/src/core/xds/xds_client/xds_client.h +0 -3
  554. data/src/core/xds/xds_client/xds_client_stats.cc +20 -18
  555. data/src/core/xds/xds_client/xds_client_stats.h +2 -2
  556. data/src/ruby/ext/grpc/rb_call.c +8 -1
  557. data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
  558. data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
  559. data/src/ruby/ext/grpc/rb_server.c +39 -22
  560. data/src/ruby/lib/grpc/version.rb +1 -1
  561. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
  562. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
  563. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
  564. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
  566. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
  567. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
  568. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
  569. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
  570. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
  571. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
  572. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
  573. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
  574. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
  576. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
  577. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
  578. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
  579. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
  580. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
  581. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
  582. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
  583. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
  584. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
  585. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
  586. metadata +95 -91
  587. data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
  588. data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
  589. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
  590. data/src/core/handshaker/security/tsi_error.cc +0 -31
  591. data/src/core/handshaker/security/tsi_error.h +0 -30
  592. data/src/core/lib/channel/channel_stack_trace.cc +0 -19
  593. data/src/core/lib/channel/channel_stack_trace.h +0 -24
  594. data/src/core/lib/channel/context.h +0 -105
  595. data/src/core/lib/channel/metrics.cc +0 -334
  596. data/src/core/lib/channel/metrics.h +0 -365
  597. data/src/core/lib/event_engine/trace.cc +0 -25
  598. data/src/core/lib/iomgr/ev_windows.cc +0 -30
  599. data/src/core/lib/promise/trace.cc +0 -20
  600. data/src/core/lib/promise/trace.h +0 -24
  601. data/src/core/lib/resource_quota/trace.cc +0 -19
  602. data/src/core/lib/resource_quota/trace.h +0 -24
  603. data/src/core/lib/slice/slice_refcount.cc +0 -20
  604. data/src/core/lib/surface/api_trace.cc +0 -25
  605. data/src/core/lib/surface/call_trace.h +0 -24
  606. data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
  607. data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
  608. data/src/core/lib/transport/batch_builder.cc +0 -172
  609. data/src/core/lib/transport/batch_builder.h +0 -474
  610. data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
  611. data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
  612. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
  613. /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
  614. /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
  615. /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
  616. /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
  617. /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
  618. /data/src/core/{lib/gpr → util}/sync.cc +0 -0
  619. /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
  620. /data/src/core/{lib/gpr → util}/time.cc +0 -0
  621. /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
  622. /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -0,0 +1,58 @@
1
+ /* Copyright (c) 2023, Google LLC
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #ifndef OPENSSL_HEADER_CRYPTO_DILITHIUM_INTERNAL_H
16
+ #define OPENSSL_HEADER_CRYPTO_DILITHIUM_INTERNAL_H
17
+
18
+ #include <openssl/base.h>
19
+ #include <openssl/experimental/dilithium.h>
20
+
21
+ #if defined(__cplusplus)
22
+ extern "C" {
23
+ #endif
24
+
25
+
26
+ // DILITHIUM_GENERATE_KEY_ENTROPY is the number of bytes of uniformly random
27
+ // entropy necessary to generate a key pair.
28
+ #define DILITHIUM_GENERATE_KEY_ENTROPY 32
29
+
30
+ // DILITHIUM_SIGNATURE_RANDOMIZER_BYTES is the number of bytes of uniformly
31
+ // random entropy necessary to generate a signature in randomized mode.
32
+ #define DILITHIUM_SIGNATURE_RANDOMIZER_BYTES 32
33
+
34
+ // DILITHIUM_generate_key_external_entropy generates a public/private key pair
35
+ // using the given seed, writes the encoded public key to
36
+ // |out_encoded_public_key| and sets |out_private_key| to the private key,
37
+ // returning 1 on success and 0 on failure. Returns 1 on success and 0 on
38
+ // failure.
39
+ OPENSSL_EXPORT int DILITHIUM_generate_key_external_entropy(
40
+ uint8_t out_encoded_public_key[DILITHIUM_PUBLIC_KEY_BYTES],
41
+ struct DILITHIUM_private_key *out_private_key,
42
+ const uint8_t entropy[DILITHIUM_GENERATE_KEY_ENTROPY]);
43
+
44
+ // DILITHIUM_sign_deterministic generates a signature for the message |msg| of
45
+ // length |msg_len| using |private_key| following the deterministic algorithm,
46
+ // and writes the encoded signature to |out_encoded_signature|. Returns 1 on
47
+ // success and 0 on failure.
48
+ OPENSSL_EXPORT int DILITHIUM_sign_deterministic(
49
+ uint8_t out_encoded_signature[DILITHIUM_SIGNATURE_BYTES],
50
+ const struct DILITHIUM_private_key *private_key, const uint8_t *msg,
51
+ size_t msg_len);
52
+
53
+
54
+ #if defined(__cplusplus)
55
+ } // extern C
56
+ #endif
57
+
58
+ #endif // OPENSSL_HEADER_CRYPTO_DILITHIUM_INTERNAL_H
@@ -208,6 +208,11 @@ int DSA_set0_pqg(DSA *dsa, BIGNUM *p, BIGNUM *q, BIGNUM *g) {
208
208
  int DSA_generate_parameters_ex(DSA *dsa, unsigned bits, const uint8_t *seed_in,
209
209
  size_t seed_len, int *out_counter,
210
210
  unsigned long *out_h, BN_GENCB *cb) {
211
+ if (bits > OPENSSL_DSA_MAX_MODULUS_BITS) {
212
+ OPENSSL_PUT_ERROR(DSA, DSA_R_INVALID_PARAMETERS);
213
+ return 0;
214
+ }
215
+
211
216
  int ok = 0;
212
217
  unsigned char seed[SHA256_DIGEST_LENGTH];
213
218
  unsigned char md[SHA256_DIGEST_LENGTH];
@@ -479,11 +484,13 @@ DSA *DSAparams_dup(const DSA *dsa) {
479
484
  }
480
485
 
481
486
  int DSA_generate_key(DSA *dsa) {
487
+ if (!dsa_check_key(dsa)) {
488
+ return 0;
489
+ }
490
+
482
491
  int ok = 0;
483
- BN_CTX *ctx = NULL;
484
492
  BIGNUM *pub_key = NULL, *priv_key = NULL;
485
-
486
- ctx = BN_CTX_new();
493
+ BN_CTX *ctx = BN_CTX_new();
487
494
  if (ctx == NULL) {
488
495
  goto err;
489
496
  }
@@ -65,8 +65,6 @@
65
65
  #include "../bytestring/internal.h"
66
66
 
67
67
 
68
- #define OPENSSL_DSA_MAX_MODULUS_BITS 10000
69
-
70
68
  // This function is in dsa_asn1.c rather than dsa.c because it is reachable from
71
69
  // |EVP_PKEY| parsers. This makes it easier for the static linker to drop most
72
70
  // of the DSA implementation.
@@ -42,6 +42,8 @@ struct dsa_st {
42
42
  CRYPTO_EX_DATA ex_data;
43
43
  };
44
44
 
45
+ #define OPENSSL_DSA_MAX_MODULUS_BITS 10000
46
+
45
47
  // dsa_check_key performs cheap self-checks on |dsa|, and ensures it is within
46
48
  // DoS bounds. It returns one on success and zero on error.
47
49
  int dsa_check_key(const DSA *dsa);
@@ -263,6 +263,11 @@ int BORINGSSL_integrity_test(void) {
263
263
  OPENSSL_cleanse(result, sizeof(result)); // FIPS 140-3, AS05.10.
264
264
  return 1;
265
265
  }
266
+
267
+ const uint8_t* FIPS_module_hash(void) {
268
+ return BORINGSSL_bcm_text_hash;
269
+ }
270
+
266
271
  #endif // OPENSSL_ASAN
267
272
 
268
273
  void BORINGSSL_FIPS_abort(void) {
@@ -119,6 +119,50 @@
119
119
  #include "internal.h"
120
120
  #include "rsaz_exp.h"
121
121
 
122
+ #if defined(OPENSSL_BN_ASM_MONT5)
123
+
124
+ // bn_mul_mont_gather5 multiples loads index |power| of |table|, multiplies it
125
+ // by |ap| modulo |np|, and stores the result in |rp|. The values are |num|
126
+ // words long and represented in Montgomery form. |n0| is a pointer to the
127
+ // corresponding field in |BN_MONT_CTX|. |table| must be aligned to at least
128
+ // 16 bytes. |power| must be less than 32 and is treated as secret.
129
+ //
130
+ // WARNING: This function implements Almost Montgomery Multiplication from
131
+ // https://eprint.iacr.org/2011/239. The inputs do not need to be fully reduced.
132
+ // However, even if they are fully reduced, the output may not be.
133
+ static void bn_mul_mont_gather5(
134
+ BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *table, const BN_ULONG *np,
135
+ const BN_ULONG *n0, int num, int power) {
136
+ if (bn_mulx4x_mont_gather5_capable(num)) {
137
+ bn_mulx4x_mont_gather5(rp, ap, table, np, n0, num, power);
138
+ } else if (bn_mul4x_mont_gather5_capable(num)) {
139
+ bn_mul4x_mont_gather5(rp, ap, table, np, n0, num, power);
140
+ } else {
141
+ bn_mul_mont_gather5_nohw(rp, ap, table, np, n0, num, power);
142
+ }
143
+ }
144
+
145
+ // bn_power5 squares |ap| five times and multiplies it by the value stored at
146
+ // index |power| of |table|, modulo |np|. It stores the result in |rp|. The
147
+ // values are |num| words long and represented in Montgomery form. |n0| is a
148
+ // pointer to the corresponding field in |BN_MONT_CTX|. |num| must be divisible
149
+ // by 8. |power| must be less than 32 and is treated as secret.
150
+ //
151
+ // WARNING: This function implements Almost Montgomery Multiplication from
152
+ // https://eprint.iacr.org/2011/239. The inputs do not need to be fully reduced.
153
+ // However, even if they are fully reduced, the output may not be.
154
+ static void bn_power5(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *table,
155
+ const BN_ULONG *np, const BN_ULONG *n0, int num,
156
+ int power) {
157
+ assert(bn_power5_capable(num));
158
+ if (bn_powerx5_capable(num)) {
159
+ bn_powerx5(rp, ap, table, np, n0, num, power);
160
+ } else {
161
+ bn_power5_nohw(rp, ap, table, np, n0, num, power);
162
+ }
163
+ }
164
+
165
+ #endif // defined(OPENSSL_BN_ASM_MONT5)
122
166
 
123
167
  int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) {
124
168
  int i, bits, ret = 0;
@@ -1079,7 +1123,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1079
1123
 
1080
1124
  // Scan the exponent one window at a time starting from the most
1081
1125
  // significant bits.
1082
- if (top & 7) {
1126
+ if (!bn_power5_capable(top)) {
1083
1127
  while (bits >= 0) {
1084
1128
  for (wvalue = 0, i = 0; i < 5; i++, bits--) {
1085
1129
  wvalue = (wvalue << 1) + BN_is_bit_set(p, bits);
@@ -438,18 +438,26 @@ int bn_mul_mont_nohw(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
438
438
  #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64)
439
439
  #define OPENSSL_BN_ASM_MONT5
440
440
 
441
- // bn_mul_mont_gather5 multiples loads index |power| of |table|, multiplies it
442
- // by |ap| modulo |np|, and stores the result in |rp|. The values are |num|
443
- // words long and represented in Montgomery form. |n0| is a pointer to the
444
- // corresponding field in |BN_MONT_CTX|. |table| must be aligned to at least
445
- // 16 bytes. |power| must be less than 32 and is treated as secret.
446
- //
447
- // WARNING: This function implements Almost Montgomery Multiplication from
448
- // https://eprint.iacr.org/2011/239. The inputs do not need to be fully reduced.
449
- // However, even if they are fully reduced, the output may not be.
450
- void bn_mul_mont_gather5(BN_ULONG *rp, const BN_ULONG *ap,
451
- const BN_ULONG *table, const BN_ULONG *np,
452
- const BN_ULONG *n0, int num, int power);
441
+ // The following functions implement |bn_mul_mont_gather5|. See
442
+ // |bn_mul_mont_gather5| for details.
443
+ OPENSSL_INLINE int bn_mul4x_mont_gather5_capable(int num) {
444
+ return (num & 7) == 0;
445
+ }
446
+ void bn_mul4x_mont_gather5(BN_ULONG *rp, const BN_ULONG *ap,
447
+ const BN_ULONG *table, const BN_ULONG *np,
448
+ const BN_ULONG *n0, int num, int power);
449
+
450
+ OPENSSL_INLINE int bn_mulx4x_mont_gather5_capable(int num) {
451
+ return bn_mul4x_mont_gather5_capable(num) && CRYPTO_is_ADX_capable() &&
452
+ CRYPTO_is_BMI1_capable() && CRYPTO_is_BMI2_capable();
453
+ }
454
+ void bn_mulx4x_mont_gather5(BN_ULONG *rp, const BN_ULONG *ap,
455
+ const BN_ULONG *table, const BN_ULONG *np,
456
+ const BN_ULONG *n0, int num, int power);
457
+
458
+ void bn_mul_mont_gather5_nohw(BN_ULONG *rp, const BN_ULONG *ap,
459
+ const BN_ULONG *table, const BN_ULONG *np,
460
+ const BN_ULONG *n0, int num, int power);
453
461
 
454
462
  // bn_scatter5 stores |inp| to index |power| of |table|. |inp| and each entry of
455
463
  // |table| are |num| words long. |power| must be less than 32 and is treated as
@@ -463,17 +471,19 @@ void bn_scatter5(const BN_ULONG *inp, size_t num, BN_ULONG *table,
463
471
  // is treated as secret. |table| must be aligned to at least 16 bytes.
464
472
  void bn_gather5(BN_ULONG *out, size_t num, const BN_ULONG *table, size_t power);
465
473
 
466
- // bn_power5 squares |ap| five times and multiplies it by the value stored at
467
- // index |power| of |table|, modulo |np|. It stores the result in |rp|. The
468
- // values are |num| words long and represented in Montgomery form. |n0| is a
469
- // pointer to the corresponding field in |BN_MONT_CTX|. |num| must be divisible
470
- // by 8. |power| must be less than 32 and is treated as secret.
471
- //
472
- // WARNING: This function implements Almost Montgomery Multiplication from
473
- // https://eprint.iacr.org/2011/239. The inputs do not need to be fully reduced.
474
- // However, even if they are fully reduced, the output may not be.
475
- void bn_power5(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *table,
476
- const BN_ULONG *np, const BN_ULONG *n0, int num, int power);
474
+ // The following functions implement |bn_power5|. See |bn_power5| for details.
475
+ void bn_power5_nohw(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *table,
476
+ const BN_ULONG *np, const BN_ULONG *n0, int num, int power);
477
+
478
+ OPENSSL_INLINE int bn_power5_capable(int num) { return (num & 7) == 0; }
479
+
480
+ OPENSSL_INLINE int bn_powerx5_capable(int num) {
481
+ return bn_power5_capable(num) && CRYPTO_is_ADX_capable() &&
482
+ CRYPTO_is_BMI1_capable() && CRYPTO_is_BMI2_capable();
483
+ }
484
+ void bn_powerx5(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *table,
485
+ const BN_ULONG *np, const BN_ULONG *n0, int num, int power);
486
+
477
487
  #endif // !OPENSSL_NO_ASM && OPENSSL_X86_64
478
488
 
479
489
  uint64_t bn_mont_n0(const BIGNUM *n);
@@ -20,13 +20,10 @@
20
20
  // that must be replaced with the real value during the build process. This
21
21
  // value need only be distinct, i.e. so that we can safely search-and-replace it
22
22
  // in an object file.
23
- const uint8_t BORINGSSL_bcm_text_hash[64];
24
- const uint8_t BORINGSSL_bcm_text_hash[64] = {
23
+ const uint8_t BORINGSSL_bcm_text_hash[32];
24
+ const uint8_t BORINGSSL_bcm_text_hash[32] = {
25
25
  0xae, 0x2c, 0xea, 0x2a, 0xbd, 0xa6, 0xf3, 0xec, 0x97, 0x7f, 0x9b,
26
26
  0xf6, 0x94, 0x9a, 0xfc, 0x83, 0x68, 0x27, 0xcb, 0xa0, 0xa0, 0x9f,
27
- 0x6b, 0x6f, 0xde, 0x52, 0xcd, 0xe2, 0xcd, 0xff, 0x31, 0x80, 0xa2,
28
- 0xd4, 0xc3, 0x66, 0x0f, 0xc2, 0x6a, 0x7b, 0xf4, 0xbe, 0x39, 0xa2,
29
- 0xd7, 0x25, 0xdb, 0x21, 0x98, 0xe9, 0xd5, 0x53, 0xbf, 0x5c, 0x32,
30
- 0x06, 0x83, 0x34, 0x0c, 0x65, 0x89, 0x52, 0xbd, 0x1f,
27
+ 0x6b, 0x6f, 0xde, 0x52, 0xcd, 0xe2, 0xcd, 0xff, 0x31, 0x80,
31
28
  };
32
29
  #endif // FIPS && SHARED_LIBRARY
@@ -80,6 +80,7 @@ OPENSSL_INLINE int sha512_hw_capable(void) {
80
80
 
81
81
  #define SHA1_ASM_NOHW
82
82
  #define SHA256_ASM_NOHW
83
+ #define SHA512_ASM_NOHW
83
84
 
84
85
  #define SHA1_ASM_SSSE3
85
86
  OPENSSL_INLINE int sha1_ssse3_capable(void) {
@@ -127,10 +128,14 @@ OPENSSL_INLINE int sha256_avx_capable(void) {
127
128
  void sha256_block_data_order_avx(uint32_t state[8], const uint8_t *data,
128
129
  size_t num);
129
130
 
130
- // TODO(crbug.com/boringssl/673): Move the remaining CPU dispatch to C.
131
- #define SHA512_ASM
132
- void sha512_block_data_order(uint64_t state[8], const uint8_t *data,
133
- size_t num_blocks);
131
+ #define SHA512_ASM_SSSE3
132
+ OPENSSL_INLINE int sha512_ssse3_capable(void) {
133
+ // TODO(davidben): Do we need to check the FXSR bit? The Intel manual does not
134
+ // say to.
135
+ return CRYPTO_is_SSSE3_capable() && CRYPTO_is_FXSR_capable();
136
+ }
137
+ void sha512_block_data_order_ssse3(uint64_t state[8], const uint8_t *data,
138
+ size_t num);
134
139
 
135
140
  #elif !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64)
136
141
 
@@ -516,6 +516,12 @@ static void sha512_block_data_order(uint64_t state[8], const uint8_t *data,
516
516
  return;
517
517
  }
518
518
  #endif
519
+ #if defined(SHA512_ASM_SSSE3)
520
+ if (sha512_ssse3_capable()) {
521
+ sha512_block_data_order_ssse3(state, data, num);
522
+ return;
523
+ }
524
+ #endif
519
525
  #if defined(SHA512_ASM_NEON)
520
526
  if (CRYPTO_is_NEON_capable()) {
521
527
  sha512_block_data_order_neon(state, data, num);
@@ -1174,6 +1174,11 @@ static inline uint64_t CRYPTO_rotr_u64(uint64_t value, int shift) {
1174
1174
 
1175
1175
  // Arithmetic functions.
1176
1176
 
1177
+ // The most efficient versions of these functions on GCC and Clang depend on C11
1178
+ // |_Generic|. If we ever need to call these from C++, we'll need to add a
1179
+ // variant that uses C++ overloads instead.
1180
+ #if !defined(__cplusplus)
1181
+
1177
1182
  // CRYPTO_addc_* returns |x + y + carry|, and sets |*out_carry| to the carry
1178
1183
  // bit. |carry| must be zero or one.
1179
1184
  #if OPENSSL_HAS_BUILTIN(__builtin_addc)
@@ -1275,6 +1280,8 @@ static inline uint64_t CRYPTO_subc_u64(uint64_t x, uint64_t y, uint64_t borrow,
1275
1280
  #define CRYPTO_subc_w CRYPTO_subc_u32
1276
1281
  #endif
1277
1282
 
1283
+ #endif // !__cplusplus
1284
+
1278
1285
 
1279
1286
  // FIPS functions.
1280
1287
 
@@ -341,8 +341,6 @@ struct x509_store_st {
341
341
 
342
342
  // Callbacks for various operations
343
343
  X509_STORE_CTX_verify_cb verify_cb; // error callback
344
- X509_STORE_CTX_get_crl_fn get_crl; // retrieve CRL
345
- X509_STORE_CTX_check_crl_fn check_crl; // Check CRL validity
346
344
 
347
345
  CRYPTO_refcount_t references;
348
346
  } /* X509_STORE */;
@@ -374,8 +372,6 @@ struct x509_store_ctx_st {
374
372
 
375
373
  // Callbacks for various operations
376
374
  X509_STORE_CTX_verify_cb verify_cb; // error callback
377
- X509_STORE_CTX_get_crl_fn get_crl; // retrieve CRL
378
- X509_STORE_CTX_check_crl_fn check_crl; // Check CRL validity
379
375
 
380
376
  // The following is built up
381
377
  int last_untrusted; // index of last untrusted cert
@@ -82,10 +82,10 @@ static void str_free(OPENSSL_STRING str);
82
82
  static int append_ia5(STACK_OF(OPENSSL_STRING) **sk,
83
83
  const ASN1_IA5STRING *email);
84
84
 
85
- static int ipv4_from_asc(unsigned char v4[4], const char *in);
86
- static int ipv6_from_asc(unsigned char v6[16], const char *in);
85
+ static int ipv4_from_asc(uint8_t v4[4], const char *in);
86
+ static int ipv6_from_asc(uint8_t v6[16], const char *in);
87
87
  static int ipv6_cb(const char *elem, size_t len, void *usr);
88
- static int ipv6_hex(unsigned char *out, const char *in, size_t inlen);
88
+ static int ipv6_hex(uint8_t *out, const char *in, size_t inlen);
89
89
 
90
90
  // Add a CONF_VALUE name value pair to stack
91
91
 
@@ -1154,7 +1154,7 @@ err:
1154
1154
  return NULL;
1155
1155
  }
1156
1156
 
1157
- int x509v3_a2i_ipadd(unsigned char ipout[16], const char *ipasc) {
1157
+ int x509v3_a2i_ipadd(uint8_t ipout[16], const char *ipasc) {
1158
1158
  // If string contains a ':' assume IPv6
1159
1159
 
1160
1160
  if (strchr(ipasc, ':')) {
@@ -1170,25 +1170,58 @@ int x509v3_a2i_ipadd(unsigned char ipout[16], const char *ipasc) {
1170
1170
  }
1171
1171
  }
1172
1172
 
1173
- static int ipv4_from_asc(unsigned char v4[4], const char *in) {
1174
- int a0, a1, a2, a3;
1175
- if (sscanf(in, "%d.%d.%d.%d", &a0, &a1, &a2, &a3) != 4) {
1173
+ // get_ipv4_component consumes one IPv4 component, terminated by either '.' or
1174
+ // the end of the string, from |*str|. On success, it returns one, sets |*out|
1175
+ // to the component, and advances |*str| to the first unconsumed character. On
1176
+ // invalid input, it returns zero.
1177
+ static int get_ipv4_component(uint8_t *out_byte, const char **str) {
1178
+ // Store a slightly larger intermediary so the overflow check is easier.
1179
+ uint32_t out = 0;
1180
+ for (;;) {
1181
+ if (!OPENSSL_isdigit(**str)) {
1182
+ return 0;
1183
+ }
1184
+ out = (out * 10) + (**str - '0');
1185
+ if (out > 255) {
1186
+ // Components must be 8-bit.
1187
+ return 0;
1188
+ }
1189
+ (*str)++;
1190
+ if ((**str) == '.' || (**str) == '\0') {
1191
+ *out_byte = (uint8_t)out;
1192
+ return 1;
1193
+ }
1194
+ if (out == 0) {
1195
+ // Reject extra leading zeros. Parsers sometimes treat them as octal, so
1196
+ // accepting them would misinterpret input.
1197
+ return 0;
1198
+ }
1199
+ }
1200
+ }
1201
+
1202
+ // get_ipv4_dot consumes a '.' from |*str| and advances it. It returns one on
1203
+ // success and zero if |*str| does not point to a '.'.
1204
+ static int get_ipv4_dot(const char **str) {
1205
+ if (**str != '.') {
1176
1206
  return 0;
1177
1207
  }
1178
- if ((a0 < 0) || (a0 > 255) || (a1 < 0) || (a1 > 255) || (a2 < 0) ||
1179
- (a2 > 255) || (a3 < 0) || (a3 > 255)) {
1208
+ (*str)++;
1209
+ return 1;
1210
+ }
1211
+
1212
+ static int ipv4_from_asc(uint8_t v4[4], const char *in) {
1213
+ if (!get_ipv4_component(&v4[0], &in) || !get_ipv4_dot(&in) ||
1214
+ !get_ipv4_component(&v4[1], &in) || !get_ipv4_dot(&in) ||
1215
+ !get_ipv4_component(&v4[2], &in) || !get_ipv4_dot(&in) ||
1216
+ !get_ipv4_component(&v4[3], &in) || *in != '\0') {
1180
1217
  return 0;
1181
1218
  }
1182
- v4[0] = a0;
1183
- v4[1] = a1;
1184
- v4[2] = a2;
1185
- v4[3] = a3;
1186
1219
  return 1;
1187
1220
  }
1188
1221
 
1189
1222
  typedef struct {
1190
1223
  // Temporary store for IPV6 output
1191
- unsigned char tmp[16];
1224
+ uint8_t tmp[16];
1192
1225
  // Total number of bytes in tmp
1193
1226
  int total;
1194
1227
  // The position of a zero (corresponding to '::')
@@ -1197,7 +1230,7 @@ typedef struct {
1197
1230
  int zero_cnt;
1198
1231
  } IPV6_STAT;
1199
1232
 
1200
- static int ipv6_from_asc(unsigned char v6[16], const char *in) {
1233
+ static int ipv6_from_asc(uint8_t v6[16], const char *in) {
1201
1234
  IPV6_STAT v6stat;
1202
1235
  v6stat.total = 0;
1203
1236
  v6stat.zero_pos = -1;
@@ -1305,7 +1338,7 @@ static int ipv6_cb(const char *elem, size_t len, void *usr) {
1305
1338
 
1306
1339
  // Convert a string of up to 4 hex digits into the corresponding IPv6 form.
1307
1340
 
1308
- static int ipv6_hex(unsigned char *out, const char *in, size_t inlen) {
1341
+ static int ipv6_hex(uint8_t *out, const char *in, size_t inlen) {
1309
1342
  if (inlen > 4) {
1310
1343
  return 0;
1311
1344
  }
@@ -594,16 +594,6 @@ void X509_STORE_set_verify_cb(X509_STORE *ctx,
594
594
  ctx->verify_cb = verify_cb;
595
595
  }
596
596
 
597
- void X509_STORE_set_get_crl(X509_STORE *ctx,
598
- X509_STORE_CTX_get_crl_fn get_crl) {
599
- ctx->get_crl = get_crl;
600
- }
601
-
602
- void X509_STORE_set_check_crl(X509_STORE *ctx,
603
- X509_STORE_CTX_check_crl_fn check_crl) {
604
- ctx->check_crl = check_crl;
605
- }
606
-
607
597
  X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx) {
608
598
  return ctx->ctx;
609
599
  }
@@ -117,6 +117,7 @@ static int get_crl(X509_STORE_CTX *ctx, X509_CRL **pcrl, X509 *x);
117
117
  static int crl_akid_check(X509_STORE_CTX *ctx, X509_CRL *crl, X509 **pissuer,
118
118
  int *pcrl_score);
119
119
  static int crl_crldp_check(X509 *x, X509_CRL *crl, int crl_score);
120
+ static int check_crl(X509_STORE_CTX *ctx, X509_CRL *crl);
120
121
  static int cert_crl(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x);
121
122
 
122
123
  static int internal_verify(X509_STORE_CTX *ctx);
@@ -769,17 +770,18 @@ static int check_cert(X509_STORE_CTX *ctx) {
769
770
  // Try to retrieve the relevant CRL. Note that |get_crl| sets
770
771
  // |current_crl_issuer| and |current_crl_score|, which |check_crl| then reads.
771
772
  //
772
- // TODO(davidben): Remove these callbacks. gRPC currently sets them, but
773
- // implements them incorrectly. It is not actually possible to implement
774
- // |get_crl| from outside the library.
775
- if (!ctx->get_crl(ctx, &crl, x)) {
773
+ // TODO(davidben): The awkward internal calling convention is a historical
774
+ // artifact of when these functions were user-overridable callbacks, even
775
+ // though there was no way to set them correctly. These callbacks have since
776
+ // been removed, so we can pass input and output parameters more directly.
777
+ if (!get_crl(ctx, &crl, x)) {
776
778
  ctx->error = X509_V_ERR_UNABLE_TO_GET_CRL;
777
779
  ok = call_verify_cb(0, ctx);
778
780
  goto err;
779
781
  }
780
782
 
781
783
  ctx->current_crl = crl;
782
- if (!ctx->check_crl(ctx, crl) || //
784
+ if (!check_crl(ctx, crl) || //
783
785
  !cert_crl(ctx, crl, x)) {
784
786
  goto err;
785
787
  }
@@ -1560,18 +1562,6 @@ int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509,
1560
1562
  ctx->verify_cb = null_callback;
1561
1563
  }
1562
1564
 
1563
- if (store->get_crl) {
1564
- ctx->get_crl = store->get_crl;
1565
- } else {
1566
- ctx->get_crl = get_crl;
1567
- }
1568
-
1569
- if (store->check_crl) {
1570
- ctx->check_crl = store->check_crl;
1571
- } else {
1572
- ctx->check_crl = check_crl;
1573
- }
1574
-
1575
1565
  return 1;
1576
1566
 
1577
1567
  err:
@@ -714,33 +714,35 @@ OPENSSL_EXPORT void BIO_meth_free(BIO_METHOD *method);
714
714
  // and returns one. The function should return one on success and zero on
715
715
  // error.
716
716
  OPENSSL_EXPORT int BIO_meth_set_create(BIO_METHOD *method,
717
- int (*create)(BIO *));
717
+ int (*create_func)(BIO *));
718
718
 
719
719
  // BIO_meth_set_destroy sets a function to release data associated with a |BIO|
720
720
  // and returns one. The function's return value is ignored.
721
721
  OPENSSL_EXPORT int BIO_meth_set_destroy(BIO_METHOD *method,
722
- int (*destroy)(BIO *));
722
+ int (*destroy_func)(BIO *));
723
723
 
724
724
  // BIO_meth_set_write sets the implementation of |BIO_write| for |method| and
725
725
  // returns one. |BIO_METHOD|s which implement |BIO_write| should also implement
726
726
  // |BIO_CTRL_FLUSH|. (See |BIO_meth_set_ctrl|.)
727
727
  OPENSSL_EXPORT int BIO_meth_set_write(BIO_METHOD *method,
728
- int (*write)(BIO *, const char *, int));
728
+ int (*write_func)(BIO *, const char *,
729
+ int));
729
730
 
730
731
  // BIO_meth_set_read sets the implementation of |BIO_read| for |method| and
731
732
  // returns one.
732
733
  OPENSSL_EXPORT int BIO_meth_set_read(BIO_METHOD *method,
733
- int (*read)(BIO *, char *, int));
734
+ int (*read_func)(BIO *, char *, int));
734
735
 
735
736
  // BIO_meth_set_gets sets the implementation of |BIO_gets| for |method| and
736
737
  // returns one.
737
738
  OPENSSL_EXPORT int BIO_meth_set_gets(BIO_METHOD *method,
738
- int (*gets)(BIO *, char *, int));
739
+ int (*gets_func)(BIO *, char *, int));
739
740
 
740
741
  // BIO_meth_set_ctrl sets the implementation of |BIO_ctrl| for |method| and
741
742
  // returns one.
742
743
  OPENSSL_EXPORT int BIO_meth_set_ctrl(BIO_METHOD *method,
743
- long (*ctrl)(BIO *, int, long, void *));
744
+ long (*ctrl_func)(BIO *, int, long,
745
+ void *));
744
746
 
745
747
  // BIO_set_data sets custom data on |bio|. It may be retried with
746
748
  // |BIO_get_data|.
@@ -178,6 +178,9 @@ OPENSSL_EXPORT int FIPS_mode_set(int on);
178
178
  // FIPS_module_name returns the name of the FIPS module.
179
179
  OPENSSL_EXPORT const char *FIPS_module_name(void);
180
180
 
181
+ // FIPS_module_hash returns the 32-byte hash of the FIPS module.
182
+ OPENSSL_EXPORT const uint8_t* FIPS_module_hash(void);
183
+
181
184
  // FIPS_version returns the version of the FIPS module, or zero if the build
182
185
  // isn't exactly at a verified version. The version, expressed in base 10, will
183
186
  // be a date in the form yyyymmddXX where XX is often "00", but can be