grpc 1.37.0.pre1 → 1.39.0.pre1

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 (636) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +96 -59
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/endpoint_config.h +48 -0
  5. data/include/grpc/event_engine/event_engine.h +334 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +91 -0
  8. data/include/grpc/grpc.h +11 -4
  9. data/include/grpc/grpc_security.h +32 -0
  10. data/include/grpc/grpc_security_constants.h +15 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +28 -13
  12. data/include/grpc/impl/codegen/port_platform.h +22 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
  17. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  28. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  35. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  36. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +755 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  39. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  46. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  48. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  60. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  62. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  63. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
  64. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  65. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  68. data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
  69. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  70. data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
  71. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  72. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  73. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  74. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  75. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  76. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  77. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  78. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  79. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  80. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  81. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  82. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +46 -34
  83. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  84. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  85. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  86. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  89. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  90. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  91. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  92. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  93. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  96. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  98. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  99. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  101. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  103. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  104. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
  105. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  106. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  107. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  108. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  109. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  110. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  111. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  112. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  114. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  115. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  116. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  118. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  120. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  121. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  122. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  123. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  124. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  125. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  126. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  127. data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
  128. data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
  129. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  130. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  131. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  132. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  133. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  134. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  135. data/src/core/ext/xds/xds_api.cc +349 -200
  136. data/src/core/ext/xds/xds_api.h +21 -12
  137. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  138. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  139. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  140. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  141. data/src/core/ext/xds/xds_channel_args.h +5 -2
  142. data/src/core/ext/xds/xds_client.cc +310 -178
  143. data/src/core/ext/xds/xds_client.h +41 -27
  144. data/src/core/ext/xds/xds_client_stats.h +3 -2
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  146. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  147. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  148. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  149. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  150. data/src/core/lib/channel/channel_stack.cc +10 -9
  151. data/src/core/lib/channel/channel_stack.h +10 -9
  152. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  153. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  154. data/src/core/lib/channel/channelz.cc +21 -13
  155. data/src/core/lib/channel/channelz.h +3 -0
  156. data/src/core/lib/channel/connected_channel.cc +4 -4
  157. data/src/core/lib/channel/handshaker.cc +7 -6
  158. data/src/core/lib/channel/handshaker.h +5 -5
  159. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  160. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  161. data/src/core/lib/event_engine/event_engine.cc +50 -0
  162. data/src/core/lib/event_engine/slice_allocator.cc +89 -0
  163. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  164. data/src/core/lib/event_engine/sockaddr.h +44 -0
  165. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  166. data/src/core/lib/gprpp/ref_counted.h +28 -14
  167. data/src/core/lib/gprpp/status_helper.cc +407 -0
  168. data/src/core/lib/gprpp/status_helper.h +183 -0
  169. data/src/core/lib/http/httpcli.cc +11 -11
  170. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  171. data/src/core/lib/http/parser.cc +16 -16
  172. data/src/core/lib/http/parser.h +4 -4
  173. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  174. data/src/core/lib/iomgr/buffer_list.h +4 -5
  175. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  176. data/src/core/lib/iomgr/call_combiner.h +12 -14
  177. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  178. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  179. data/src/core/lib/iomgr/closure.h +7 -6
  180. data/src/core/lib/iomgr/combiner.cc +14 -12
  181. data/src/core/lib/iomgr/combiner.h +2 -2
  182. data/src/core/lib/iomgr/endpoint.cc +1 -1
  183. data/src/core/lib/iomgr/endpoint.h +2 -2
  184. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  185. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  186. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  187. data/src/core/lib/iomgr/error.cc +168 -61
  188. data/src/core/lib/iomgr/error.h +217 -106
  189. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  190. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  191. data/src/core/lib/iomgr/error_internal.h +5 -1
  192. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  193. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  194. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  195. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  196. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  197. data/src/core/lib/iomgr/ev_posix.h +9 -9
  198. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  199. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  200. data/src/core/lib/iomgr/event_engine/endpoint.cc +194 -0
  201. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  202. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  203. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  204. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  205. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  206. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  207. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  208. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  209. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  210. data/src/core/lib/iomgr/event_engine/tcp.cc +243 -0
  211. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  212. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  213. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  214. data/src/core/lib/iomgr/executor.cc +8 -8
  215. data/src/core/lib/iomgr/executor.h +2 -2
  216. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  217. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  218. data/src/core/lib/iomgr/iomgr.cc +2 -2
  219. data/src/core/lib/iomgr/iomgr.h +1 -1
  220. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  221. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  222. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  223. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  224. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  225. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  226. data/src/core/lib/iomgr/load_file.cc +4 -4
  227. data/src/core/lib/iomgr/load_file.h +2 -2
  228. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  229. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  230. data/src/core/lib/iomgr/pollset.cc +5 -5
  231. data/src/core/lib/iomgr/pollset.h +9 -9
  232. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  233. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  234. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  235. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  236. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  237. data/src/core/lib/iomgr/port.h +7 -5
  238. data/src/core/lib/iomgr/python_util.h +1 -1
  239. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  240. data/src/core/lib/iomgr/resolve_address.h +12 -6
  241. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  242. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  243. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  244. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  245. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  246. data/src/core/lib/iomgr/sockaddr.h +1 -0
  247. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  248. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  250. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  251. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  252. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  253. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  254. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  257. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  258. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  259. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  260. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  261. data/src/core/lib/iomgr/tcp_server.h +12 -11
  262. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  263. data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
  264. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  265. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  266. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  267. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  268. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  269. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  270. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  271. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  272. data/src/core/lib/iomgr/timer.h +6 -1
  273. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  274. data/src/core/lib/iomgr/timer_custom.h +1 -1
  275. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  276. data/src/core/lib/iomgr/udp_server.cc +21 -20
  277. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  278. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  279. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  280. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  281. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  282. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  283. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  284. data/src/core/lib/iomgr/work_serializer.h +17 -1
  285. data/src/core/lib/json/json.h +1 -1
  286. data/src/core/lib/json/json_reader.cc +4 -4
  287. data/src/core/lib/matchers/matchers.cc +39 -39
  288. data/src/core/lib/matchers/matchers.h +28 -28
  289. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  290. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  291. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  292. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  293. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  294. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  295. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  296. data/src/core/lib/security/credentials/credentials.h +2 -2
  297. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  298. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  307. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  308. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  309. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  310. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  311. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  312. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  313. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  314. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  315. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  316. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  317. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  318. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  319. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  320. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  321. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  322. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  323. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  324. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  325. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  326. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  327. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  328. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  329. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  330. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  331. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  332. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  333. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  334. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  335. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  336. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  337. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  338. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  339. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  340. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  341. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  342. data/src/core/lib/security/transport/server_auth_filter.cc +24 -11
  343. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  344. data/src/core/lib/security/transport/tsi_error.h +2 -1
  345. data/src/core/lib/security/util/json_util.cc +2 -2
  346. data/src/core/lib/security/util/json_util.h +1 -1
  347. data/src/core/lib/surface/call.cc +67 -46
  348. data/src/core/lib/surface/call.h +13 -2
  349. data/src/core/lib/surface/channel.cc +6 -6
  350. data/src/core/lib/surface/channel.h +3 -2
  351. data/src/core/lib/surface/channel_ping.cc +1 -1
  352. data/src/core/lib/surface/completion_queue.cc +68 -69
  353. data/src/core/lib/surface/completion_queue.h +3 -2
  354. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  355. data/src/core/lib/surface/init.cc +1 -3
  356. data/src/core/lib/surface/init.h +10 -1
  357. data/src/core/lib/surface/lame_client.cc +11 -11
  358. data/src/core/lib/surface/lame_client.h +1 -1
  359. data/src/core/lib/surface/server.cc +28 -22
  360. data/src/core/lib/surface/server.h +16 -15
  361. data/src/core/lib/surface/validate_metadata.cc +7 -7
  362. data/src/core/lib/surface/validate_metadata.h +3 -2
  363. data/src/core/lib/surface/version.cc +4 -2
  364. data/src/core/lib/transport/byte_stream.cc +5 -5
  365. data/src/core/lib/transport/byte_stream.h +8 -8
  366. data/src/core/lib/transport/connectivity_state.cc +1 -1
  367. data/src/core/lib/transport/error_utils.cc +21 -10
  368. data/src/core/lib/transport/error_utils.h +11 -5
  369. data/src/core/lib/transport/metadata_batch.cc +37 -37
  370. data/src/core/lib/transport/metadata_batch.h +19 -18
  371. data/src/core/lib/transport/transport.cc +4 -3
  372. data/src/core/lib/transport/transport.h +6 -4
  373. data/src/core/lib/transport/transport_op_string.cc +6 -6
  374. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  375. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  376. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  377. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  378. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  379. data/src/core/tsi/ssl_transport_security.cc +32 -14
  380. data/src/core/tsi/ssl_transport_security.h +3 -4
  381. data/src/ruby/bin/math_services_pb.rb +1 -1
  382. data/src/ruby/ext/grpc/extconf.rb +2 -0
  383. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  384. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  385. data/src/ruby/lib/grpc/version.rb +1 -1
  386. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  388. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  389. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  390. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  391. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  392. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  393. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  394. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  395. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  396. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  397. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  398. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  399. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  400. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  401. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  402. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  403. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  404. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  405. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  406. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  407. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  408. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  409. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  410. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  411. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  412. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  413. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  414. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  415. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  416. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  417. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  418. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  419. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  420. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  421. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  422. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  423. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  424. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  425. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  426. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  427. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  428. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  429. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  430. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  431. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  432. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  433. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  434. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  435. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  436. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  437. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  438. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  439. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  440. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  441. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  442. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  443. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  444. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  445. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  446. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  447. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  448. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  449. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  450. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  451. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  452. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  453. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  455. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  456. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  457. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  458. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  459. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  460. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  461. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  462. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  463. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  464. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  465. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  466. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  467. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  468. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  469. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  470. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  471. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  472. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  473. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  474. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  475. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  476. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  477. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  478. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  479. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  480. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  481. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  482. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  483. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  484. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  485. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  486. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  487. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  488. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  492. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  493. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  494. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  495. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  496. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  497. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  498. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  499. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  500. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  501. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  503. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  505. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  506. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  507. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  508. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  509. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  511. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  512. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  513. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  515. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  516. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  517. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  518. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  519. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  520. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  521. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  522. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  543. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  544. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  545. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  546. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  547. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  548. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  549. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  550. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  551. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  552. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  553. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  554. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  555. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  556. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  557. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  558. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  559. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  560. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  561. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  562. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  563. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  566. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  567. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  568. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  569. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  571. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  573. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  576. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  577. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  579. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  580. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  581. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  582. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  583. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  584. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  585. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  586. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  587. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  588. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  589. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  591. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  592. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  593. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  595. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  596. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  597. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  598. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  599. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  600. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  601. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  602. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  603. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  604. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  605. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  606. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  607. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  608. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  609. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  610. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  611. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  612. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  613. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  614. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  615. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  616. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  617. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  618. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  619. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  620. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  621. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  622. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  623. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  624. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  625. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  626. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  627. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  628. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  629. metadata +93 -45
  630. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  631. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  632. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  633. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  635. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  636. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -820,7 +820,7 @@ static void table_select(ge_precomp *t, int pos, signed char b) {
820
820
  //
821
821
  // Preconditions:
822
822
  // a[31] <= 127
823
- void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
823
+ void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]) {
824
824
  signed char e[64];
825
825
  signed char carry;
826
826
  ge_p1p1 r;
@@ -106,7 +106,7 @@ typedef struct {
106
106
  } ge_cached;
107
107
 
108
108
  void x25519_ge_tobytes(uint8_t s[32], const ge_p2 *h);
109
- int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t *s);
109
+ int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t s[32]);
110
110
  void x25519_ge_p3_to_cached(ge_cached *r, const ge_p3 *p);
111
111
  void x25519_ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p);
112
112
  void x25519_ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p);
@@ -368,84 +368,6 @@ void ERR_clear_system_error(void) {
368
368
  errno = 0;
369
369
  }
370
370
 
371
- char *ERR_error_string(uint32_t packed_error, char *ret) {
372
- static char buf[ERR_ERROR_STRING_BUF_LEN];
373
-
374
- if (ret == NULL) {
375
- // TODO(fork): remove this.
376
- ret = buf;
377
- }
378
-
379
- #if !defined(NDEBUG)
380
- // This is aimed to help catch callers who don't provide
381
- // |ERR_ERROR_STRING_BUF_LEN| bytes of space.
382
- OPENSSL_memset(ret, 0, ERR_ERROR_STRING_BUF_LEN);
383
- #endif
384
-
385
- return ERR_error_string_n(packed_error, ret, ERR_ERROR_STRING_BUF_LEN);
386
- }
387
-
388
- char *ERR_error_string_n(uint32_t packed_error, char *buf, size_t len) {
389
- char lib_buf[64], reason_buf[64];
390
- const char *lib_str, *reason_str;
391
- unsigned lib, reason;
392
-
393
- if (len == 0) {
394
- return NULL;
395
- }
396
-
397
- lib = ERR_GET_LIB(packed_error);
398
- reason = ERR_GET_REASON(packed_error);
399
-
400
- lib_str = ERR_lib_error_string(packed_error);
401
- reason_str = ERR_reason_error_string(packed_error);
402
-
403
- if (lib_str == NULL) {
404
- BIO_snprintf(lib_buf, sizeof(lib_buf), "lib(%u)", lib);
405
- lib_str = lib_buf;
406
- }
407
-
408
- if (reason_str == NULL) {
409
- BIO_snprintf(reason_buf, sizeof(reason_buf), "reason(%u)", reason);
410
- reason_str = reason_buf;
411
- }
412
-
413
- BIO_snprintf(buf, len, "error:%08" PRIx32 ":%s:OPENSSL_internal:%s",
414
- packed_error, lib_str, reason_str);
415
-
416
- if (strlen(buf) == len - 1) {
417
- // output may be truncated; make sure we always have 5 colon-separated
418
- // fields, i.e. 4 colons.
419
- static const unsigned num_colons = 4;
420
- unsigned i;
421
- char *s = buf;
422
-
423
- if (len <= num_colons) {
424
- // In this situation it's not possible to ensure that the correct number
425
- // of colons are included in the output.
426
- return buf;
427
- }
428
-
429
- for (i = 0; i < num_colons; i++) {
430
- char *colon = strchr(s, ':');
431
- char *last_pos = &buf[len - 1] - num_colons + i;
432
-
433
- if (colon == NULL || colon > last_pos) {
434
- // set colon |i| at last possible position (buf[len-1] is the
435
- // terminating 0). If we're setting this colon, then all whole of the
436
- // rest of the string must be colons in order to have the correct
437
- // number.
438
- OPENSSL_memset(last_pos, ':', num_colons - i);
439
- break;
440
- }
441
-
442
- s = colon + 1;
443
- }
444
- }
445
-
446
- return buf;
447
- }
448
-
449
371
  // err_string_cmp is a compare function for searching error values with
450
372
  // |bsearch| in |err_string_lookup|.
451
373
  static int err_string_cmp(const void *a, const void *b) {
@@ -530,7 +452,7 @@ static const char *const kLibraryNames[ERR_NUM_LIBS] = {
530
452
  "User defined functions", // ERR_LIB_USER
531
453
  };
532
454
 
533
- const char *ERR_lib_error_string(uint32_t packed_error) {
455
+ static const char *err_lib_error_string(uint32_t packed_error) {
534
456
  const uint32_t lib = ERR_GET_LIB(packed_error);
535
457
 
536
458
  if (lib >= ERR_NUM_LIBS) {
@@ -539,11 +461,16 @@ const char *ERR_lib_error_string(uint32_t packed_error) {
539
461
  return kLibraryNames[lib];
540
462
  }
541
463
 
464
+ const char *ERR_lib_error_string(uint32_t packed_error) {
465
+ const char *ret = err_lib_error_string(packed_error);
466
+ return ret == NULL ? "unknown library" : ret;
467
+ }
468
+
542
469
  const char *ERR_func_error_string(uint32_t packed_error) {
543
470
  return "OPENSSL_internal";
544
471
  }
545
472
 
546
- const char *ERR_reason_error_string(uint32_t packed_error) {
473
+ static const char *err_reason_error_string(uint32_t packed_error) {
547
474
  const uint32_t lib = ERR_GET_LIB(packed_error);
548
475
  const uint32_t reason = ERR_GET_REASON(packed_error);
549
476
 
@@ -579,6 +506,86 @@ const char *ERR_reason_error_string(uint32_t packed_error) {
579
506
  kOpenSSLReasonValuesLen, kOpenSSLReasonStringData);
580
507
  }
581
508
 
509
+ const char *ERR_reason_error_string(uint32_t packed_error) {
510
+ const char *ret = err_reason_error_string(packed_error);
511
+ return ret == NULL ? "unknown error" : ret;
512
+ }
513
+
514
+ char *ERR_error_string(uint32_t packed_error, char *ret) {
515
+ static char buf[ERR_ERROR_STRING_BUF_LEN];
516
+
517
+ if (ret == NULL) {
518
+ // TODO(fork): remove this.
519
+ ret = buf;
520
+ }
521
+
522
+ #if !defined(NDEBUG)
523
+ // This is aimed to help catch callers who don't provide
524
+ // |ERR_ERROR_STRING_BUF_LEN| bytes of space.
525
+ OPENSSL_memset(ret, 0, ERR_ERROR_STRING_BUF_LEN);
526
+ #endif
527
+
528
+ return ERR_error_string_n(packed_error, ret, ERR_ERROR_STRING_BUF_LEN);
529
+ }
530
+
531
+ char *ERR_error_string_n(uint32_t packed_error, char *buf, size_t len) {
532
+ if (len == 0) {
533
+ return NULL;
534
+ }
535
+
536
+ unsigned lib = ERR_GET_LIB(packed_error);
537
+ unsigned reason = ERR_GET_REASON(packed_error);
538
+
539
+ const char *lib_str = err_lib_error_string(packed_error);
540
+ const char *reason_str = err_reason_error_string(packed_error);
541
+
542
+ char lib_buf[64], reason_buf[64];
543
+ if (lib_str == NULL) {
544
+ BIO_snprintf(lib_buf, sizeof(lib_buf), "lib(%u)", lib);
545
+ lib_str = lib_buf;
546
+ }
547
+
548
+ if (reason_str == NULL) {
549
+ BIO_snprintf(reason_buf, sizeof(reason_buf), "reason(%u)", reason);
550
+ reason_str = reason_buf;
551
+ }
552
+
553
+ BIO_snprintf(buf, len, "error:%08" PRIx32 ":%s:OPENSSL_internal:%s",
554
+ packed_error, lib_str, reason_str);
555
+
556
+ if (strlen(buf) == len - 1) {
557
+ // output may be truncated; make sure we always have 5 colon-separated
558
+ // fields, i.e. 4 colons.
559
+ static const unsigned num_colons = 4;
560
+ unsigned i;
561
+ char *s = buf;
562
+
563
+ if (len <= num_colons) {
564
+ // In this situation it's not possible to ensure that the correct number
565
+ // of colons are included in the output.
566
+ return buf;
567
+ }
568
+
569
+ for (i = 0; i < num_colons; i++) {
570
+ char *colon = strchr(s, ':');
571
+ char *last_pos = &buf[len - 1] - num_colons + i;
572
+
573
+ if (colon == NULL || colon > last_pos) {
574
+ // set colon |i| at last possible position (buf[len-1] is the
575
+ // terminating 0). If we're setting this colon, then all whole of the
576
+ // rest of the string must be colons in order to have the correct
577
+ // number.
578
+ OPENSSL_memset(last_pos, ':', num_colons - i);
579
+ break;
580
+ }
581
+
582
+ s = colon + 1;
583
+ }
584
+ }
585
+
586
+ return buf;
587
+ }
588
+
582
589
  void ERR_print_errors_cb(ERR_print_errors_callback_t callback, void *ctx) {
583
590
  char buf[ERR_ERROR_STRING_BUF_LEN];
584
591
  char buf2[1024];
@@ -429,6 +429,15 @@ int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **out_md) {
429
429
  0, (void *)out_md);
430
430
  }
431
431
 
432
+ void *EVP_PKEY_get0(const EVP_PKEY *pkey) {
433
+ // Node references, but never calls this function, so for now we return NULL.
434
+ // If other projects require complete support, call |EVP_PKEY_get0_RSA|, etc.,
435
+ // rather than reading |pkey->pkey.ptr| directly. This avoids problems if our
436
+ // internal representation does not match the type the caller expects from
437
+ // OpenSSL.
438
+ return NULL;
439
+ }
440
+
432
441
  void OpenSSL_add_all_algorithms(void) {}
433
442
 
434
443
  void OPENSSL_add_all_algorithms_conf(void) {}
@@ -97,6 +97,7 @@
97
97
  #include "rsa/padding.c"
98
98
  #include "rsa/rsa.c"
99
99
  #include "rsa/rsa_impl.c"
100
+ #include "self_check/fips.c"
100
101
  #include "self_check/self_check.c"
101
102
  #include "sha/sha1-altivec.c"
102
103
  #include "sha/sha1.c"
@@ -297,7 +297,7 @@ void bn_mul_comba4(BN_ULONG r[8], const BN_ULONG a[4], const BN_ULONG b[4]);
297
297
  void bn_mul_comba8(BN_ULONG r[16], const BN_ULONG a[8], const BN_ULONG b[8]);
298
298
 
299
299
  // bn_sqr_comba8 sets |r| to |a|^2.
300
- void bn_sqr_comba8(BN_ULONG r[16], const BN_ULONG a[4]);
300
+ void bn_sqr_comba8(BN_ULONG r[16], const BN_ULONG a[8]);
301
301
 
302
302
  // bn_sqr_comba4 sets |r| to |a|^2.
303
303
  void bn_sqr_comba4(BN_ULONG r[8], const BN_ULONG a[4]);
@@ -115,10 +115,6 @@
115
115
  #include "../../internal.h"
116
116
 
117
117
 
118
- // The quick sieve algorithm approach to weeding out primes is Philip
119
- // Zimmermann's, as implemented in PGP. I have had a read of his comments and
120
- // implemented my own version.
121
-
122
118
  // kPrimes contains the first 1024 primes.
123
119
  static const uint16_t kPrimes[] = {
124
120
  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
@@ -225,7 +225,6 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
225
225
 
226
226
  ctx->buf_len = 0;
227
227
  ctx->final_used = 0;
228
- ctx->block_mask = ctx->cipher->block_size - 1;
229
228
  return 1;
230
229
  }
231
230
 
@@ -239,6 +238,15 @@ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
239
238
  return EVP_CipherInit_ex(ctx, cipher, impl, key, iv, 0);
240
239
  }
241
240
 
241
+ // block_remainder returns the number of bytes to remove from |len| to get a
242
+ // multiple of |ctx|'s block size.
243
+ static int block_remainder(const EVP_CIPHER_CTX *ctx, int len) {
244
+ // |block_size| must be a power of two.
245
+ assert(ctx->cipher->block_size != 0);
246
+ assert((ctx->cipher->block_size & (ctx->cipher->block_size - 1)) == 0);
247
+ return len & (ctx->cipher->block_size - 1);
248
+ }
249
+
242
250
  int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
243
251
  const uint8_t *in, int in_len) {
244
252
  // Ciphers that use blocks may write up to |bl| extra bytes. Ensure the output
@@ -264,7 +272,7 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
264
272
  return in_len == 0;
265
273
  }
266
274
 
267
- if (ctx->buf_len == 0 && (in_len & ctx->block_mask) == 0) {
275
+ if (ctx->buf_len == 0 && block_remainder(ctx, in_len) == 0) {
268
276
  if (ctx->cipher->cipher(ctx, out, in, in_len)) {
269
277
  *out_len = in_len;
270
278
  return 1;
@@ -297,7 +305,7 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
297
305
  *out_len = 0;
298
306
  }
299
307
 
300
- i = in_len & ctx->block_mask;
308
+ i = block_remainder(ctx, in_len);
301
309
  in_len -= i;
302
310
  if (in_len > 0) {
303
311
  if (!ctx->cipher->cipher(ctx, out, in, in_len)) {
@@ -141,10 +141,22 @@ typedef struct {
141
141
 
142
142
  static int aes_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
143
143
  const uint8_t *iv, int enc) {
144
- int ret, mode;
144
+ int ret;
145
145
  EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
146
+ const int mode = ctx->cipher->flags & EVP_CIPH_MODE_MASK;
147
+
148
+ if (mode == EVP_CIPH_CTR_MODE) {
149
+ switch (ctx->key_len) {
150
+ case 16:
151
+ boringssl_fips_inc_counter(fips_counter_evp_aes_128_ctr);
152
+ break;
153
+
154
+ case 32:
155
+ boringssl_fips_inc_counter(fips_counter_evp_aes_256_ctr);
156
+ break;
157
+ }
158
+ }
146
159
 
147
- mode = ctx->cipher->flags & EVP_CIPH_MODE_MASK;
148
160
  if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE) && !enc) {
149
161
  if (hwaes_capable()) {
150
162
  ret = aes_hw_set_decrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
@@ -353,6 +365,17 @@ static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
353
365
  if (!iv && !key) {
354
366
  return 1;
355
367
  }
368
+
369
+ switch (ctx->key_len) {
370
+ case 16:
371
+ boringssl_fips_inc_counter(fips_counter_evp_aes_128_gcm);
372
+ break;
373
+
374
+ case 32:
375
+ boringssl_fips_inc_counter(fips_counter_evp_aes_256_gcm);
376
+ break;
377
+ }
378
+
356
379
  if (key) {
357
380
  OPENSSL_memset(&gctx->gcm, 0, sizeof(gctx->gcm));
358
381
  gctx->ctr = aes_ctr_set_key(&gctx->ks.ks, &gctx->gcm.gcm_key, NULL, key,
@@ -177,6 +177,13 @@ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in) {
177
177
  return 1;
178
178
  }
179
179
 
180
+ void EVP_MD_CTX_move(EVP_MD_CTX *out, EVP_MD_CTX *in) {
181
+ EVP_MD_CTX_cleanup(out);
182
+ // While not guaranteed, |EVP_MD_CTX| is currently safe to move with |memcpy|.
183
+ OPENSSL_memcpy(out, in, sizeof(EVP_MD_CTX));
184
+ EVP_MD_CTX_init(in);
185
+ }
186
+
180
187
  int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in) {
181
188
  EVP_MD_CTX_init(out);
182
189
  return EVP_MD_CTX_copy_ex(out, in);
@@ -247,13 +247,21 @@ static void sha512_256_init(EVP_MD_CTX *ctx) {
247
247
  CHECK(SHA512_256_Init(ctx->md_data));
248
248
  }
249
249
 
250
+ static void sha512_256_update(EVP_MD_CTX *ctx, const void *data, size_t count) {
251
+ CHECK(SHA512_256_Update(ctx->md_data, data, count));
252
+ }
253
+
254
+ static void sha512_256_final(EVP_MD_CTX *ctx, uint8_t *md) {
255
+ CHECK(SHA512_256_Final(md, ctx->md_data));
256
+ }
257
+
250
258
  DEFINE_METHOD_FUNCTION(EVP_MD, EVP_sha512_256) {
251
259
  out->type = NID_sha512_256;
252
260
  out->md_size = SHA512_256_DIGEST_LENGTH;
253
261
  out->flags = 0;
254
262
  out->init = sha512_256_init;
255
- out->update = sha512_update;
256
- out->final = sha512_final;
263
+ out->update = sha512_256_update;
264
+ out->final = sha512_256_final;
257
265
  out->block_size = 128;
258
266
  out->ctx_size = sizeof(SHA512_CTX);
259
267
  }
@@ -46,6 +46,9 @@
46
46
  * OF THE POSSIBILITY OF SUCH DAMAGE.
47
47
  * ==================================================================== */
48
48
 
49
+ #ifndef OPENSSL_HEADER_DIGEST_MD32_COMMON_H
50
+ #define OPENSSL_HEADER_DIGEST_MD32_COMMON_H
51
+
49
52
  #include <openssl/base.h>
50
53
 
51
54
  #include <assert.h>
@@ -59,22 +62,15 @@ extern "C" {
59
62
 
60
63
  // This is a generic 32-bit "collector" for message digest algorithms. It
61
64
  // collects input character stream into chunks of 32-bit values and invokes the
62
- // block function that performs the actual hash calculations. To make use of
63
- // this mechanism, the following macros must be defined before including
64
- // md32_common.h.
65
- //
66
- // One of |DATA_ORDER_IS_BIG_ENDIAN| or |DATA_ORDER_IS_LITTLE_ENDIAN| must be
67
- // defined to specify the byte order of the input stream.
68
- //
69
- // |HASH_CBLOCK| must be defined as the integer block size, in bytes.
65
+ // block function that performs the actual hash calculations.
70
66
  //
71
- // |HASH_CTX| must be defined as the name of the context structure, which must
72
- // have at least the following members:
67
+ // To make use of this mechanism, the hash context should be defined with the
68
+ // following parameters.
73
69
  //
74
70
  // typedef struct <name>_state_st {
75
71
  // uint32_t h[<chaining length> / sizeof(uint32_t)];
76
72
  // uint32_t Nl, Nh;
77
- // uint8_t data[HASH_CBLOCK];
73
+ // uint8_t data[<block size>];
78
74
  // unsigned num;
79
75
  // ...
80
76
  // } <NAME>_CTX;
@@ -83,186 +79,117 @@ extern "C" {
83
79
  // any truncation (e.g. 64 for SHA-224 and SHA-256, 128 for SHA-384 and
84
80
  // SHA-512).
85
81
  //
86
- // |HASH_UPDATE| must be defined as the name of the "Update" function to
87
- // generate.
88
- //
89
- // |HASH_TRANSFORM| must be defined as the the name of the "Transform"
90
- // function to generate.
91
- //
92
- // |HASH_FINAL| must be defined as the name of "Final" function to generate.
93
- //
94
- // |HASH_BLOCK_DATA_ORDER| must be defined as the name of the "Block" function.
95
- // That function must be implemented manually. It must be capable of operating
96
- // on *unaligned* input data in its original (data) byte order. It must have
97
- // this signature:
98
- //
99
- // void HASH_BLOCK_DATA_ORDER(uint32_t *state, const uint8_t *data,
100
- // size_t num);
101
- //
102
- // It must update the hash state |state| with |num| blocks of data from |data|,
103
- // where each block is |HASH_CBLOCK| bytes; i.e. |data| points to a array of
104
- // |HASH_CBLOCK * num| bytes. |state| points to the |h| member of a |HASH_CTX|,
105
- // and so will have |<chaining length> / sizeof(uint32_t)| elements.
106
- //
107
- // |HASH_MAKE_STRING(c, s)| must be defined as a block statement that converts
108
- // the hash state |c->h| into the output byte order, storing the result in |s|.
109
-
110
- #if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
111
- #error "DATA_ORDER must be defined!"
112
- #endif
113
-
114
- #ifndef HASH_CBLOCK
115
- #error "HASH_CBLOCK must be defined!"
116
- #endif
117
- #ifndef HASH_CTX
118
- #error "HASH_CTX must be defined!"
119
- #endif
120
-
121
- #ifndef HASH_UPDATE
122
- #error "HASH_UPDATE must be defined!"
123
- #endif
124
- #ifndef HASH_TRANSFORM
125
- #error "HASH_TRANSFORM must be defined!"
126
- #endif
127
- #ifndef HASH_FINAL
128
- #error "HASH_FINAL must be defined!"
129
- #endif
130
-
131
- #ifndef HASH_BLOCK_DATA_ORDER
132
- #error "HASH_BLOCK_DATA_ORDER must be defined!"
133
- #endif
134
-
135
- #ifndef HASH_MAKE_STRING
136
- #error "HASH_MAKE_STRING must be defined!"
137
- #endif
138
-
139
- #if defined(DATA_ORDER_IS_BIG_ENDIAN)
140
-
141
- #define HOST_c2l(c, l) \
142
- do { \
143
- (l) = (((uint32_t)(*((c)++))) << 24); \
144
- (l) |= (((uint32_t)(*((c)++))) << 16); \
145
- (l) |= (((uint32_t)(*((c)++))) << 8); \
146
- (l) |= (((uint32_t)(*((c)++)))); \
147
- } while (0)
148
-
149
- #define HOST_l2c(l, c) \
150
- do { \
151
- *((c)++) = (uint8_t)(((l) >> 24) & 0xff); \
152
- *((c)++) = (uint8_t)(((l) >> 16) & 0xff); \
153
- *((c)++) = (uint8_t)(((l) >> 8) & 0xff); \
154
- *((c)++) = (uint8_t)(((l)) & 0xff); \
155
- } while (0)
156
-
157
- #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
158
-
159
- #define HOST_c2l(c, l) \
160
- do { \
161
- (l) = (((uint32_t)(*((c)++)))); \
162
- (l) |= (((uint32_t)(*((c)++))) << 8); \
163
- (l) |= (((uint32_t)(*((c)++))) << 16); \
164
- (l) |= (((uint32_t)(*((c)++))) << 24); \
165
- } while (0)
166
-
167
- #define HOST_l2c(l, c) \
168
- do { \
169
- *((c)++) = (uint8_t)(((l)) & 0xff); \
170
- *((c)++) = (uint8_t)(((l) >> 8) & 0xff); \
171
- *((c)++) = (uint8_t)(((l) >> 16) & 0xff); \
172
- *((c)++) = (uint8_t)(((l) >> 24) & 0xff); \
173
- } while (0)
174
-
175
- #endif // DATA_ORDER
176
-
177
- int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) {
178
- const uint8_t *data = data_;
179
-
82
+ // |h| is the hash state and is updated by a function of type
83
+ // |crypto_md32_block_func|. |data| is the partial unprocessed block and has
84
+ // |num| bytes. |Nl| and |Nh| maintain the number of bits processed so far.
85
+
86
+ // A crypto_md32_block_func should incorporate |num_blocks| of input from |data|
87
+ // into |state|. It is assumed the caller has sized |state| and |data| for the
88
+ // hash function.
89
+ typedef void (*crypto_md32_block_func)(uint32_t *state, const uint8_t *data,
90
+ size_t num_blocks);
91
+
92
+ // crypto_md32_update adds |len| bytes from |in| to the digest. |data| must be a
93
+ // buffer of length |block_size| with the first |*num| bytes containing a
94
+ // partial block. This function combines the partial block with |in| and
95
+ // incorporates any complete blocks into the digest state |h|. It then updates
96
+ // |data| and |*num| with the new partial block and updates |*Nh| and |*Nl| with
97
+ // the data consumed.
98
+ static inline void crypto_md32_update(crypto_md32_block_func block_func,
99
+ uint32_t *h, uint8_t *data,
100
+ size_t block_size, unsigned *num,
101
+ uint32_t *Nh, uint32_t *Nl,
102
+ const uint8_t *in, size_t len) {
180
103
  if (len == 0) {
181
- return 1;
104
+ return;
182
105
  }
183
106
 
184
- uint32_t l = c->Nl + (((uint32_t)len) << 3);
185
- if (l < c->Nl) {
107
+ uint32_t l = *Nl + (((uint32_t)len) << 3);
108
+ if (l < *Nl) {
186
109
  // Handle carries.
187
- c->Nh++;
110
+ (*Nh)++;
188
111
  }
189
- c->Nh += (uint32_t)(len >> 29);
190
- c->Nl = l;
112
+ *Nh += (uint32_t)(len >> 29);
113
+ *Nl = l;
191
114
 
192
- size_t n = c->num;
115
+ size_t n = *num;
193
116
  if (n != 0) {
194
- if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) {
195
- OPENSSL_memcpy(c->data + n, data, HASH_CBLOCK - n);
196
- HASH_BLOCK_DATA_ORDER(c->h, c->data, 1);
197
- n = HASH_CBLOCK - n;
198
- data += n;
117
+ if (len >= block_size || len + n >= block_size) {
118
+ OPENSSL_memcpy(data + n, in, block_size - n);
119
+ block_func(h, data, 1);
120
+ n = block_size - n;
121
+ in += n;
199
122
  len -= n;
200
- c->num = 0;
201
- // Keep |c->data| zeroed when unused.
202
- OPENSSL_memset(c->data, 0, HASH_CBLOCK);
123
+ *num = 0;
124
+ // Keep |data| zeroed when unused.
125
+ OPENSSL_memset(data, 0, block_size);
203
126
  } else {
204
- OPENSSL_memcpy(c->data + n, data, len);
205
- c->num += (unsigned)len;
206
- return 1;
127
+ OPENSSL_memcpy(data + n, in, len);
128
+ *num += (unsigned)len;
129
+ return;
207
130
  }
208
131
  }
209
132
 
210
- n = len / HASH_CBLOCK;
133
+ n = len / block_size;
211
134
  if (n > 0) {
212
- HASH_BLOCK_DATA_ORDER(c->h, data, n);
213
- n *= HASH_CBLOCK;
214
- data += n;
135
+ block_func(h, in, n);
136
+ n *= block_size;
137
+ in += n;
215
138
  len -= n;
216
139
  }
217
140
 
218
141
  if (len != 0) {
219
- c->num = (unsigned)len;
220
- OPENSSL_memcpy(c->data, data, len);
142
+ *num = (unsigned)len;
143
+ OPENSSL_memcpy(data, in, len);
221
144
  }
222
- return 1;
223
145
  }
224
146
 
225
-
226
- void HASH_TRANSFORM(HASH_CTX *c, const uint8_t data[HASH_CBLOCK]) {
227
- HASH_BLOCK_DATA_ORDER(c->h, data, 1);
228
- }
229
-
230
-
231
- int HASH_FINAL(uint8_t out[HASH_DIGEST_LENGTH], HASH_CTX *c) {
232
- // |c->data| always has room for at least one byte. A full block would have
147
+ // crypto_md32_final incorporates the partial block and trailing length into the
148
+ // digest state |h|. The trailing length is encoded in little-endian if
149
+ // |is_big_endian| is zero and big-endian otherwise. |data| must be a buffer of
150
+ // length |block_size| with the first |*num| bytes containing a partial block.
151
+ // |Nh| and |Nl| contain the total number of bits processed. On return, this
152
+ // function clears the partial block in |data| and
153
+ // |*num|.
154
+ //
155
+ // This function does not serialize |h| into a final digest. This is the
156
+ // responsibility of the caller.
157
+ static inline void crypto_md32_final(crypto_md32_block_func block_func,
158
+ uint32_t *h, uint8_t *data,
159
+ size_t block_size, unsigned *num,
160
+ uint32_t Nh, uint32_t Nl,
161
+ int is_big_endian) {
162
+ // |data| always has room for at least one byte. A full block would have
233
163
  // been consumed.
234
- size_t n = c->num;
235
- assert(n < HASH_CBLOCK);
236
- c->data[n] = 0x80;
164
+ size_t n = *num;
165
+ assert(n < block_size);
166
+ data[n] = 0x80;
237
167
  n++;
238
168
 
239
169
  // Fill the block with zeros if there isn't room for a 64-bit length.
240
- if (n > (HASH_CBLOCK - 8)) {
241
- OPENSSL_memset(c->data + n, 0, HASH_CBLOCK - n);
170
+ if (n > block_size - 8) {
171
+ OPENSSL_memset(data + n, 0, block_size - n);
242
172
  n = 0;
243
- HASH_BLOCK_DATA_ORDER(c->h, c->data, 1);
173
+ block_func(h, data, 1);
244
174
  }
245
- OPENSSL_memset(c->data + n, 0, HASH_CBLOCK - 8 - n);
175
+ OPENSSL_memset(data + n, 0, block_size - 8 - n);
246
176
 
247
177
  // Append a 64-bit length to the block and process it.
248
- uint8_t *p = c->data + HASH_CBLOCK - 8;
249
- #if defined(DATA_ORDER_IS_BIG_ENDIAN)
250
- HOST_l2c(c->Nh, p);
251
- HOST_l2c(c->Nl, p);
252
- #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
253
- HOST_l2c(c->Nl, p);
254
- HOST_l2c(c->Nh, p);
255
- #endif
256
- assert(p == c->data + HASH_CBLOCK);
257
- HASH_BLOCK_DATA_ORDER(c->h, c->data, 1);
258
- c->num = 0;
259
- OPENSSL_memset(c->data, 0, HASH_CBLOCK);
260
-
261
- HASH_MAKE_STRING(c, out);
262
- return 1;
178
+ if (is_big_endian) {
179
+ CRYPTO_store_u32_be(data + block_size - 8, Nh);
180
+ CRYPTO_store_u32_be(data + block_size - 4, Nl);
181
+ } else {
182
+ CRYPTO_store_u32_le(data + block_size - 8, Nl);
183
+ CRYPTO_store_u32_le(data + block_size - 4, Nh);
184
+ }
185
+ block_func(h, data, 1);
186
+ *num = 0;
187
+ OPENSSL_memset(data, 0, block_size);
263
188
  }
264
189
 
265
190
 
266
191
  #if defined(__cplusplus)
267
192
  } // extern C
268
193
  #endif
194
+
195
+ #endif // OPENSSL_HEADER_DIGEST_MD32_COMMON_H