grpc 1.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1758) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/Makefile +20074 -0
  4. data/etc/roots.pem +4644 -0
  5. data/include/grpc/byte_buffer.h +27 -0
  6. data/include/grpc/byte_buffer_reader.h +26 -0
  7. data/include/grpc/census.h +40 -0
  8. data/include/grpc/compression.h +75 -0
  9. data/include/grpc/fork.h +26 -0
  10. data/include/grpc/grpc.h +540 -0
  11. data/include/grpc/grpc_cronet.h +38 -0
  12. data/include/grpc/grpc_posix.h +59 -0
  13. data/include/grpc/grpc_security.h +1019 -0
  14. data/include/grpc/grpc_security_constants.h +146 -0
  15. data/include/grpc/impl/codegen/atm.h +95 -0
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +91 -0
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +85 -0
  18. data/include/grpc/impl/codegen/atm_windows.h +128 -0
  19. data/include/grpc/impl/codegen/byte_buffer.h +101 -0
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +42 -0
  21. data/include/grpc/impl/codegen/compression_types.h +108 -0
  22. data/include/grpc/impl/codegen/connectivity_state.h +44 -0
  23. data/include/grpc/impl/codegen/fork.h +48 -0
  24. data/include/grpc/impl/codegen/gpr_slice.h +69 -0
  25. data/include/grpc/impl/codegen/gpr_types.h +59 -0
  26. data/include/grpc/impl/codegen/grpc_types.h +785 -0
  27. data/include/grpc/impl/codegen/log.h +112 -0
  28. data/include/grpc/impl/codegen/port_platform.h +720 -0
  29. data/include/grpc/impl/codegen/propagation_bits.h +52 -0
  30. data/include/grpc/impl/codegen/slice.h +127 -0
  31. data/include/grpc/impl/codegen/status.h +154 -0
  32. data/include/grpc/impl/codegen/sync.h +65 -0
  33. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  34. data/include/grpc/impl/codegen/sync_custom.h +38 -0
  35. data/include/grpc/impl/codegen/sync_generic.h +48 -0
  36. data/include/grpc/impl/codegen/sync_posix.h +52 -0
  37. data/include/grpc/impl/codegen/sync_windows.h +36 -0
  38. data/include/grpc/load_reporting.h +48 -0
  39. data/include/grpc/module.modulemap +64 -0
  40. data/include/grpc/slice.h +172 -0
  41. data/include/grpc/slice_buffer.h +84 -0
  42. data/include/grpc/status.h +26 -0
  43. data/include/grpc/support/alloc.h +52 -0
  44. data/include/grpc/support/atm.h +26 -0
  45. data/include/grpc/support/atm_gcc_atomic.h +26 -0
  46. data/include/grpc/support/atm_gcc_sync.h +26 -0
  47. data/include/grpc/support/atm_windows.h +26 -0
  48. data/include/grpc/support/cpu.h +44 -0
  49. data/include/grpc/support/log.h +26 -0
  50. data/include/grpc/support/log_windows.h +38 -0
  51. data/include/grpc/support/port_platform.h +24 -0
  52. data/include/grpc/support/string_util.h +51 -0
  53. data/include/grpc/support/sync.h +282 -0
  54. data/include/grpc/support/sync_abseil.h +26 -0
  55. data/include/grpc/support/sync_custom.h +26 -0
  56. data/include/grpc/support/sync_generic.h +26 -0
  57. data/include/grpc/support/sync_posix.h +26 -0
  58. data/include/grpc/support/sync_windows.h +26 -0
  59. data/include/grpc/support/thd_id.h +44 -0
  60. data/include/grpc/support/time.h +92 -0
  61. data/include/grpc/support/workaround_list.h +31 -0
  62. data/src/core/ext/filters/census/grpc_context.cc +38 -0
  63. data/src/core/ext/filters/client_channel/backend_metric.cc +81 -0
  64. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  65. data/src/core/ext/filters/client_channel/backup_poller.cc +181 -0
  66. data/src/core/ext/filters/client_channel/backup_poller.h +41 -0
  67. data/src/core/ext/filters/client_channel/channel_connectivity.cc +264 -0
  68. data/src/core/ext/filters/client_channel/client_channel.cc +4059 -0
  69. data/src/core/ext/filters/client_channel/client_channel.h +82 -0
  70. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +95 -0
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.h +78 -0
  72. data/src/core/ext/filters/client_channel/client_channel_factory.cc +55 -0
  73. data/src/core/ext/filters/client_channel/client_channel_factory.h +47 -0
  74. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +70 -0
  75. data/src/core/ext/filters/client_channel/connector.h +79 -0
  76. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  78. data/src/core/ext/filters/client_channel/health/health_check_client.cc +606 -0
  79. data/src/core/ext/filters/client_channel/health/health_check_client.h +175 -0
  80. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +389 -0
  81. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +34 -0
  82. data/src/core/ext/filters/client_channel/http_proxy.cc +216 -0
  83. data/src/core/ext/filters/client_channel/http_proxy.h +28 -0
  84. data/src/core/ext/filters/client_channel/lb_policy.cc +138 -0
  85. data/src/core/ext/filters/client_channel/lb_policy.h +421 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  87. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  88. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  89. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +157 -0
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +29 -0
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1754 -0
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +43 -0
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +45 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +121 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +91 -0
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +75 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +193 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +74 -0
  102. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +509 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  104. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +504 -0
  105. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +448 -0
  106. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +417 -0
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +32 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  112. data/src/core/ext/filters/client_channel/lb_policy_factory.h +47 -0
  113. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +182 -0
  114. data/src/core/ext/filters/client_channel/lb_policy_registry.h +65 -0
  115. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  116. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +57 -0
  117. data/src/core/ext/filters/client_channel/parse_address.cc +238 -0
  118. data/src/core/ext/filters/client_channel/parse_address.h +53 -0
  119. data/src/core/ext/filters/client_channel/proxy_mapper.h +54 -0
  120. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +89 -0
  121. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +50 -0
  122. data/src/core/ext/filters/client_channel/resolver.cc +85 -0
  123. data/src/core/ext/filters/client_channel/resolver.h +144 -0
  124. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +535 -0
  125. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +484 -0
  126. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +104 -0
  127. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +177 -0
  128. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +107 -0
  129. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +897 -0
  130. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +819 -0
  131. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +97 -0
  132. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +68 -0
  133. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +38 -0
  134. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +29 -0
  135. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +34 -0
  136. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  137. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +29 -0
  138. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +318 -0
  139. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +383 -0
  140. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +93 -0
  141. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +188 -0
  142. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +184 -0
  143. data/src/core/ext/filters/client_channel/resolver_factory.h +73 -0
  144. data/src/core/ext/filters/client_channel/resolver_registry.cc +197 -0
  145. data/src/core/ext/filters/client_channel/resolver_registry.h +89 -0
  146. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +443 -0
  147. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +127 -0
  148. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +348 -0
  149. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +123 -0
  150. data/src/core/ext/filters/client_channel/retry_throttle.cc +191 -0
  151. data/src/core/ext/filters/client_channel/retry_throttle.h +77 -0
  152. data/src/core/ext/filters/client_channel/server_address.cc +48 -0
  153. data/src/core/ext/filters/client_channel/server_address.h +90 -0
  154. data/src/core/ext/filters/client_channel/service_config.cc +221 -0
  155. data/src/core/ext/filters/client_channel/service_config.h +123 -0
  156. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  157. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  158. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  159. data/src/core/ext/filters/client_channel/subchannel.cc +1127 -0
  160. data/src/core/ext/filters/client_channel/subchannel.h +427 -0
  161. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  162. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  163. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +91 -0
  164. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1906 -0
  165. data/src/core/ext/filters/client_channel/xds/xds_api.h +280 -0
  166. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +342 -0
  167. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +88 -0
  168. data/src/core/ext/filters/client_channel/xds/xds_channel.h +46 -0
  169. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  170. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +106 -0
  171. data/src/core/ext/filters/client_channel/xds/xds_client.cc +2367 -0
  172. data/src/core/ext/filters/client_channel/xds/xds_client.h +309 -0
  173. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +115 -0
  174. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +211 -0
  175. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  176. data/src/core/ext/filters/deadline/deadline_filter.cc +386 -0
  177. data/src/core/ext/filters/deadline/deadline_filter.h +90 -0
  178. data/src/core/ext/filters/http/client/http_client_filter.cc +596 -0
  179. data/src/core/ext/filters/http/client/http_client_filter.h +31 -0
  180. data/src/core/ext/filters/http/client_authority_filter.cc +159 -0
  181. data/src/core/ext/filters/http/client_authority_filter.h +34 -0
  182. data/src/core/ext/filters/http/http_filters_plugin.cc +104 -0
  183. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +546 -0
  184. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +53 -0
  185. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  186. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  187. data/src/core/ext/filters/http/server/http_server_filter.cc +528 -0
  188. data/src/core/ext/filters/http/server/http_server_filter.h +29 -0
  189. data/src/core/ext/filters/max_age/max_age_filter.cc +556 -0
  190. data/src/core/ext/filters/max_age/max_age_filter.h +26 -0
  191. data/src/core/ext/filters/message_size/message_size_filter.cc +423 -0
  192. data/src/core/ext/filters/message_size/message_size_filter.h +59 -0
  193. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +210 -0
  194. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +27 -0
  195. data/src/core/ext/filters/workarounds/workaround_utils.cc +53 -0
  196. data/src/core/ext/filters/workarounds/workaround_utils.h +39 -0
  197. data/src/core/ext/transport/chttp2/alpn/alpn.cc +44 -0
  198. data/src/core/ext/transport/chttp2/alpn/alpn.h +36 -0
  199. data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
  200. data/src/core/ext/transport/chttp2/client/authority.h +36 -0
  201. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +206 -0
  202. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +58 -0
  203. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +112 -0
  204. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +79 -0
  205. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +225 -0
  206. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +451 -0
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  208. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +45 -0
  209. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +75 -0
  210. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +86 -0
  211. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +250 -0
  212. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +56 -0
  213. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +230 -0
  214. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +42 -0
  215. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +37 -0
  216. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3346 -0
  217. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +52 -0
  218. data/src/core/ext/transport/chttp2/transport/context_list.cc +69 -0
  219. data/src/core/ext/transport/chttp2/transport/context_list.h +53 -0
  220. data/src/core/ext/transport/chttp2/transport/flow_control.cc +408 -0
  221. data/src/core/ext/transport/chttp2/transport/flow_control.h +474 -0
  222. data/src/core/ext/transport/chttp2/transport/frame.h +47 -0
  223. data/src/core/ext/transport/chttp2/transport/frame_data.cc +307 -0
  224. data/src/core/ext/transport/chttp2/transport/frame_data.h +82 -0
  225. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +187 -0
  226. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +62 -0
  227. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +133 -0
  228. data/src/core/ext/transport/chttp2/transport/frame_ping.h +44 -0
  229. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +122 -0
  230. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +50 -0
  231. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +242 -0
  232. data/src/core/ext/transport/chttp2/transport/frame_settings.h +60 -0
  233. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +123 -0
  234. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +44 -0
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +900 -0
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +107 -0
  237. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1761 -0
  238. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +117 -0
  239. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +246 -0
  240. data/src/core/ext/transport/chttp2/transport/hpack_table.h +148 -0
  241. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +62 -0
  242. data/src/core/ext/transport/chttp2/transport/http2_settings.h +61 -0
  243. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +92 -0
  244. data/src/core/ext/transport/chttp2/transport/huffsyms.h +32 -0
  245. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +66 -0
  246. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +58 -0
  247. data/src/core/ext/transport/chttp2/transport/internal.h +864 -0
  248. data/src/core/ext/transport/chttp2/transport/parsing.cc +803 -0
  249. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +216 -0
  250. data/src/core/ext/transport/chttp2/transport/stream_map.cc +177 -0
  251. data/src/core/ext/transport/chttp2/transport/stream_map.h +67 -0
  252. data/src/core/ext/transport/chttp2/transport/varint.cc +56 -0
  253. data/src/core/ext/transport/chttp2/transport/varint.h +60 -0
  254. data/src/core/ext/transport/chttp2/transport/writing.cc +706 -0
  255. data/src/core/ext/transport/inproc/inproc_plugin.cc +28 -0
  256. data/src/core/ext/transport/inproc/inproc_transport.cc +1296 -0
  257. data/src/core/ext/transport/inproc/inproc_transport.h +35 -0
  258. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  259. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
  260. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  261. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
  262. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +21 -0
  263. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +35 -0
  264. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  265. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  266. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  267. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  268. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  269. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  270. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +28 -0
  271. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +53 -0
  272. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
  273. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
  274. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +74 -0
  275. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +218 -0
  276. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +35 -0
  277. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +69 -0
  278. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +55 -0
  279. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +305 -0
  280. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +112 -0
  281. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +328 -0
  282. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  283. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  284. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +313 -0
  285. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +897 -0
  286. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +96 -0
  287. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +322 -0
  288. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  289. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  290. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +197 -0
  291. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +642 -0
  292. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +172 -0
  293. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +673 -0
  294. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +36 -0
  295. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +80 -0
  296. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +152 -0
  297. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +518 -0
  298. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  299. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  300. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +129 -0
  301. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +392 -0
  302. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +31 -0
  303. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +53 -0
  304. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
  305. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
  306. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +18 -0
  307. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +33 -0
  308. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
  309. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
  310. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +112 -0
  311. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +324 -0
  312. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
  313. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
  314. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
  315. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
  316. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
  317. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
  318. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
  319. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
  320. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
  321. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
  322. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
  323. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
  324. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
  325. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
  326. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
  327. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
  328. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
  329. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
  330. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
  331. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
  332. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
  333. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
  334. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
  335. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
  336. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
  337. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
  338. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
  339. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
  340. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  341. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  342. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +24 -0
  343. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +50 -0
  344. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +54 -0
  345. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +134 -0
  346. data/src/core/ext/upb-generated/envoy/type/http.upb.c +17 -0
  347. data/src/core/ext/upb-generated/envoy/type/http.upb.h +36 -0
  348. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
  349. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
  350. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
  351. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
  352. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
  353. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
  354. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +39 -0
  355. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +87 -0
  356. data/src/core/ext/upb-generated/envoy/type/range.upb.c +50 -0
  357. data/src/core/ext/upb-generated/envoy/type/range.upb.h +112 -0
  358. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
  359. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
  360. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
  361. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
  362. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  363. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +30 -0
  364. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  365. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -0
  366. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  367. data/src/core/ext/upb-generated/google/api/http.upb.h +190 -0
  368. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  369. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +58 -0
  370. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  371. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1696 -0
  372. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  373. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +58 -0
  374. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  375. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +50 -0
  376. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  377. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +215 -0
  378. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  379. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +58 -0
  380. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  381. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +238 -0
  382. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  383. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  384. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  385. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +126 -0
  386. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  387. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +693 -0
  388. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  389. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +109 -0
  390. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  391. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +84 -0
  392. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  393. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +393 -0
  394. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  395. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
  396. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  397. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
  398. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  399. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  400. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  401. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +144 -0
  402. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  403. data/src/core/ext/upb-generated/validate/validate.upb.h +2073 -0
  404. data/src/core/lib/avl/avl.cc +306 -0
  405. data/src/core/lib/avl/avl.h +94 -0
  406. data/src/core/lib/backoff/backoff.cc +78 -0
  407. data/src/core/lib/backoff/backoff.h +89 -0
  408. data/src/core/lib/channel/channel_args.cc +380 -0
  409. data/src/core/lib/channel/channel_args.h +135 -0
  410. data/src/core/lib/channel/channel_stack.cc +252 -0
  411. data/src/core/lib/channel/channel_stack.h +304 -0
  412. data/src/core/lib/channel/channel_stack_builder.cc +323 -0
  413. data/src/core/lib/channel/channel_stack_builder.h +166 -0
  414. data/src/core/lib/channel/channel_trace.cc +194 -0
  415. data/src/core/lib/channel/channel_trace.h +134 -0
  416. data/src/core/lib/channel/channelz.cc +543 -0
  417. data/src/core/lib/channel/channelz.h +334 -0
  418. data/src/core/lib/channel/channelz_registry.cc +267 -0
  419. data/src/core/lib/channel/channelz_registry.h +97 -0
  420. data/src/core/lib/channel/connected_channel.cc +246 -0
  421. data/src/core/lib/channel/connected_channel.h +34 -0
  422. data/src/core/lib/channel/context.h +49 -0
  423. data/src/core/lib/channel/handshaker.cc +262 -0
  424. data/src/core/lib/channel/handshaker.h +179 -0
  425. data/src/core/lib/channel/handshaker_factory.h +42 -0
  426. data/src/core/lib/channel/handshaker_registry.cc +105 -0
  427. data/src/core/lib/channel/handshaker_registry.h +54 -0
  428. data/src/core/lib/channel/status_util.cc +99 -0
  429. data/src/core/lib/channel/status_util.h +58 -0
  430. data/src/core/lib/compression/algorithm_metadata.h +61 -0
  431. data/src/core/lib/compression/compression.cc +179 -0
  432. data/src/core/lib/compression/compression_args.cc +134 -0
  433. data/src/core/lib/compression/compression_args.h +56 -0
  434. data/src/core/lib/compression/compression_internal.cc +280 -0
  435. data/src/core/lib/compression/compression_internal.h +96 -0
  436. data/src/core/lib/compression/message_compress.cc +192 -0
  437. data/src/core/lib/compression/message_compress.h +40 -0
  438. data/src/core/lib/compression/stream_compression.cc +80 -0
  439. data/src/core/lib/compression/stream_compression.h +116 -0
  440. data/src/core/lib/compression/stream_compression_gzip.cc +230 -0
  441. data/src/core/lib/compression/stream_compression_gzip.h +28 -0
  442. data/src/core/lib/compression/stream_compression_identity.cc +92 -0
  443. data/src/core/lib/compression/stream_compression_identity.h +29 -0
  444. data/src/core/lib/debug/stats.cc +172 -0
  445. data/src/core/lib/debug/stats.h +70 -0
  446. data/src/core/lib/debug/stats_data.cc +687 -0
  447. data/src/core/lib/debug/stats_data.h +555 -0
  448. data/src/core/lib/debug/trace.cc +154 -0
  449. data/src/core/lib/debug/trace.h +131 -0
  450. data/src/core/lib/gpr/alloc.cc +74 -0
  451. data/src/core/lib/gpr/alloc.h +28 -0
  452. data/src/core/lib/gpr/arena.h +47 -0
  453. data/src/core/lib/gpr/atm.cc +35 -0
  454. data/src/core/lib/gpr/cpu_iphone.cc +36 -0
  455. data/src/core/lib/gpr/cpu_linux.cc +82 -0
  456. data/src/core/lib/gpr/cpu_posix.cc +83 -0
  457. data/src/core/lib/gpr/cpu_windows.cc +33 -0
  458. data/src/core/lib/gpr/env.h +40 -0
  459. data/src/core/lib/gpr/env_linux.cc +76 -0
  460. data/src/core/lib/gpr/env_posix.cc +47 -0
  461. data/src/core/lib/gpr/env_windows.cc +74 -0
  462. data/src/core/lib/gpr/log.cc +98 -0
  463. data/src/core/lib/gpr/log_android.cc +76 -0
  464. data/src/core/lib/gpr/log_linux.cc +97 -0
  465. data/src/core/lib/gpr/log_posix.cc +95 -0
  466. data/src/core/lib/gpr/log_windows.cc +102 -0
  467. data/src/core/lib/gpr/murmur_hash.cc +80 -0
  468. data/src/core/lib/gpr/murmur_hash.h +29 -0
  469. data/src/core/lib/gpr/spinlock.h +45 -0
  470. data/src/core/lib/gpr/string.cc +341 -0
  471. data/src/core/lib/gpr/string.h +111 -0
  472. data/src/core/lib/gpr/string_posix.cc +72 -0
  473. data/src/core/lib/gpr/string_util_windows.cc +82 -0
  474. data/src/core/lib/gpr/string_windows.cc +69 -0
  475. data/src/core/lib/gpr/string_windows.h +32 -0
  476. data/src/core/lib/gpr/sync.cc +124 -0
  477. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  478. data/src/core/lib/gpr/sync_posix.cc +176 -0
  479. data/src/core/lib/gpr/sync_windows.cc +120 -0
  480. data/src/core/lib/gpr/time.cc +263 -0
  481. data/src/core/lib/gpr/time_posix.cc +186 -0
  482. data/src/core/lib/gpr/time_precise.cc +165 -0
  483. data/src/core/lib/gpr/time_precise.h +66 -0
  484. data/src/core/lib/gpr/time_windows.cc +98 -0
  485. data/src/core/lib/gpr/tls.h +68 -0
  486. data/src/core/lib/gpr/tls_gcc.h +52 -0
  487. data/src/core/lib/gpr/tls_msvc.h +52 -0
  488. data/src/core/lib/gpr/tls_pthread.cc +30 -0
  489. data/src/core/lib/gpr/tls_pthread.h +56 -0
  490. data/src/core/lib/gpr/tmpfile.h +32 -0
  491. data/src/core/lib/gpr/tmpfile_msys.cc +58 -0
  492. data/src/core/lib/gpr/tmpfile_posix.cc +70 -0
  493. data/src/core/lib/gpr/tmpfile_windows.cc +69 -0
  494. data/src/core/lib/gpr/useful.h +65 -0
  495. data/src/core/lib/gpr/wrap_memcpy.cc +42 -0
  496. data/src/core/lib/gprpp/arena.cc +103 -0
  497. data/src/core/lib/gprpp/arena.h +120 -0
  498. data/src/core/lib/gprpp/atomic.h +104 -0
  499. data/src/core/lib/gprpp/debug_location.h +53 -0
  500. data/src/core/lib/gprpp/fork.cc +242 -0
  501. data/src/core/lib/gprpp/fork.h +103 -0
  502. data/src/core/lib/gprpp/global_config.h +96 -0
  503. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  504. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  505. data/src/core/lib/gprpp/global_config_env.h +131 -0
  506. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  507. data/src/core/lib/gprpp/host_port.cc +112 -0
  508. data/src/core/lib/gprpp/host_port.h +56 -0
  509. data/src/core/lib/gprpp/manual_constructor.h +213 -0
  510. data/src/core/lib/gprpp/map.h +53 -0
  511. data/src/core/lib/gprpp/memory.h +51 -0
  512. data/src/core/lib/gprpp/mpscq.cc +108 -0
  513. data/src/core/lib/gprpp/mpscq.h +98 -0
  514. data/src/core/lib/gprpp/orphanable.h +129 -0
  515. data/src/core/lib/gprpp/ref_counted.h +312 -0
  516. data/src/core/lib/gprpp/ref_counted_ptr.h +192 -0
  517. data/src/core/lib/gprpp/sync.h +135 -0
  518. data/src/core/lib/gprpp/thd.h +174 -0
  519. data/src/core/lib/gprpp/thd_posix.cc +204 -0
  520. data/src/core/lib/gprpp/thd_windows.cc +176 -0
  521. data/src/core/lib/http/format_request.cc +103 -0
  522. data/src/core/lib/http/format_request.h +34 -0
  523. data/src/core/lib/http/httpcli.cc +303 -0
  524. data/src/core/lib/http/httpcli.h +126 -0
  525. data/src/core/lib/http/httpcli_security_connector.cc +214 -0
  526. data/src/core/lib/http/parser.cc +372 -0
  527. data/src/core/lib/http/parser.h +113 -0
  528. data/src/core/lib/iomgr/block_annotate.h +57 -0
  529. data/src/core/lib/iomgr/buffer_list.cc +308 -0
  530. data/src/core/lib/iomgr/buffer_list.h +165 -0
  531. data/src/core/lib/iomgr/call_combiner.cc +256 -0
  532. data/src/core/lib/iomgr/call_combiner.h +217 -0
  533. data/src/core/lib/iomgr/cfstream_handle.cc +209 -0
  534. data/src/core/lib/iomgr/cfstream_handle.h +90 -0
  535. data/src/core/lib/iomgr/closure.h +255 -0
  536. data/src/core/lib/iomgr/combiner.cc +339 -0
  537. data/src/core/lib/iomgr/combiner.h +88 -0
  538. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  539. data/src/core/lib/iomgr/dynamic_annotations.h +67 -0
  540. data/src/core/lib/iomgr/endpoint.cc +67 -0
  541. data/src/core/lib/iomgr/endpoint.h +106 -0
  542. data/src/core/lib/iomgr/endpoint_cfstream.cc +376 -0
  543. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  544. data/src/core/lib/iomgr/endpoint_pair.h +33 -0
  545. data/src/core/lib/iomgr/endpoint_pair_posix.cc +73 -0
  546. data/src/core/lib/iomgr/endpoint_pair_uv.cc +40 -0
  547. data/src/core/lib/iomgr/endpoint_pair_windows.cc +87 -0
  548. data/src/core/lib/iomgr/error.cc +812 -0
  549. data/src/core/lib/iomgr/error.h +276 -0
  550. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  551. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  552. data/src/core/lib/iomgr/error_internal.h +61 -0
  553. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  554. data/src/core/lib/iomgr/ev_apple.h +43 -0
  555. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1365 -0
  556. data/src/core/lib/iomgr/ev_epoll1_linux.h +31 -0
  557. data/src/core/lib/iomgr/ev_epollex_linux.cc +1656 -0
  558. data/src/core/lib/iomgr/ev_epollex_linux.h +30 -0
  559. data/src/core/lib/iomgr/ev_poll_posix.cc +1427 -0
  560. data/src/core/lib/iomgr/ev_poll_posix.h +29 -0
  561. data/src/core/lib/iomgr/ev_posix.cc +417 -0
  562. data/src/core/lib/iomgr/ev_posix.h +207 -0
  563. data/src/core/lib/iomgr/ev_windows.cc +30 -0
  564. data/src/core/lib/iomgr/exec_ctx.cc +224 -0
  565. data/src/core/lib/iomgr/exec_ctx.h +380 -0
  566. data/src/core/lib/iomgr/executor.cc +469 -0
  567. data/src/core/lib/iomgr/executor.h +122 -0
  568. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  569. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  570. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  571. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  572. data/src/core/lib/iomgr/fork_posix.cc +119 -0
  573. data/src/core/lib/iomgr/fork_windows.cc +41 -0
  574. data/src/core/lib/iomgr/gethostname.h +26 -0
  575. data/src/core/lib/iomgr/gethostname_fallback.cc +30 -0
  576. data/src/core/lib/iomgr/gethostname_host_name_max.cc +40 -0
  577. data/src/core/lib/iomgr/gethostname_sysconf.cc +40 -0
  578. data/src/core/lib/iomgr/grpc_if_nametoindex.h +30 -0
  579. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  580. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +38 -0
  581. data/src/core/lib/iomgr/internal_errqueue.cc +67 -0
  582. data/src/core/lib/iomgr/internal_errqueue.h +191 -0
  583. data/src/core/lib/iomgr/iocp_windows.cc +157 -0
  584. data/src/core/lib/iomgr/iocp_windows.h +48 -0
  585. data/src/core/lib/iomgr/iomgr.cc +194 -0
  586. data/src/core/lib/iomgr/iomgr.h +60 -0
  587. data/src/core/lib/iomgr/iomgr_custom.cc +79 -0
  588. data/src/core/lib/iomgr/iomgr_custom.h +49 -0
  589. data/src/core/lib/iomgr/iomgr_internal.cc +57 -0
  590. data/src/core/lib/iomgr/iomgr_internal.h +73 -0
  591. data/src/core/lib/iomgr/iomgr_posix.cc +89 -0
  592. data/src/core/lib/iomgr/iomgr_posix.h +26 -0
  593. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +171 -0
  594. data/src/core/lib/iomgr/iomgr_uv.cc +43 -0
  595. data/src/core/lib/iomgr/iomgr_windows.cc +106 -0
  596. data/src/core/lib/iomgr/is_epollexclusive_available.cc +105 -0
  597. data/src/core/lib/iomgr/is_epollexclusive_available.h +36 -0
  598. data/src/core/lib/iomgr/load_file.cc +81 -0
  599. data/src/core/lib/iomgr/load_file.h +35 -0
  600. data/src/core/lib/iomgr/lockfree_event.cc +255 -0
  601. data/src/core/lib/iomgr/lockfree_event.h +72 -0
  602. data/src/core/lib/iomgr/nameser.h +106 -0
  603. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  604. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  605. data/src/core/lib/iomgr/polling_entity.cc +96 -0
  606. data/src/core/lib/iomgr/polling_entity.h +68 -0
  607. data/src/core/lib/iomgr/pollset.cc +56 -0
  608. data/src/core/lib/iomgr/pollset.h +99 -0
  609. data/src/core/lib/iomgr/pollset_custom.cc +106 -0
  610. data/src/core/lib/iomgr/pollset_custom.h +35 -0
  611. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  612. data/src/core/lib/iomgr/pollset_set.h +55 -0
  613. data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
  614. data/src/core/lib/iomgr/pollset_set_custom.h +26 -0
  615. data/src/core/lib/iomgr/pollset_set_windows.cc +51 -0
  616. data/src/core/lib/iomgr/pollset_set_windows.h +26 -0
  617. data/src/core/lib/iomgr/pollset_uv.cc +93 -0
  618. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  619. data/src/core/lib/iomgr/pollset_windows.cc +243 -0
  620. data/src/core/lib/iomgr/pollset_windows.h +70 -0
  621. data/src/core/lib/iomgr/port.h +244 -0
  622. data/src/core/lib/iomgr/python_util.h +46 -0
  623. data/src/core/lib/iomgr/resolve_address.cc +50 -0
  624. data/src/core/lib/iomgr/resolve_address.h +81 -0
  625. data/src/core/lib/iomgr/resolve_address_custom.cc +173 -0
  626. data/src/core/lib/iomgr/resolve_address_custom.h +45 -0
  627. data/src/core/lib/iomgr/resolve_address_posix.cc +178 -0
  628. data/src/core/lib/iomgr/resolve_address_windows.cc +154 -0
  629. data/src/core/lib/iomgr/resource_quota.cc +1013 -0
  630. data/src/core/lib/iomgr/resource_quota.h +177 -0
  631. data/src/core/lib/iomgr/sockaddr.h +32 -0
  632. data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
  633. data/src/core/lib/iomgr/sockaddr_posix.h +55 -0
  634. data/src/core/lib/iomgr/sockaddr_utils.cc +293 -0
  635. data/src/core/lib/iomgr/sockaddr_utils.h +79 -0
  636. data/src/core/lib/iomgr/sockaddr_windows.h +55 -0
  637. data/src/core/lib/iomgr/socket_factory_posix.cc +94 -0
  638. data/src/core/lib/iomgr/socket_factory_posix.h +68 -0
  639. data/src/core/lib/iomgr/socket_mutator.cc +83 -0
  640. data/src/core/lib/iomgr/socket_mutator.h +60 -0
  641. data/src/core/lib/iomgr/socket_utils.h +47 -0
  642. data/src/core/lib/iomgr/socket_utils_common_posix.cc +473 -0
  643. data/src/core/lib/iomgr/socket_utils_linux.cc +42 -0
  644. data/src/core/lib/iomgr/socket_utils_posix.cc +58 -0
  645. data/src/core/lib/iomgr/socket_utils_posix.h +163 -0
  646. data/src/core/lib/iomgr/socket_utils_uv.cc +49 -0
  647. data/src/core/lib/iomgr/socket_utils_windows.cc +47 -0
  648. data/src/core/lib/iomgr/socket_windows.cc +203 -0
  649. data/src/core/lib/iomgr/socket_windows.h +127 -0
  650. data/src/core/lib/iomgr/sys_epoll_wrapper.h +30 -0
  651. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  652. data/src/core/lib/iomgr/tcp_client.h +52 -0
  653. data/src/core/lib/iomgr/tcp_client_cfstream.cc +215 -0
  654. data/src/core/lib/iomgr/tcp_client_custom.cc +163 -0
  655. data/src/core/lib/iomgr/tcp_client_posix.cc +360 -0
  656. data/src/core/lib/iomgr/tcp_client_posix.h +68 -0
  657. data/src/core/lib/iomgr/tcp_client_windows.cc +232 -0
  658. data/src/core/lib/iomgr/tcp_custom.cc +370 -0
  659. data/src/core/lib/iomgr/tcp_custom.h +84 -0
  660. data/src/core/lib/iomgr/tcp_posix.cc +1855 -0
  661. data/src/core/lib/iomgr/tcp_posix.h +60 -0
  662. data/src/core/lib/iomgr/tcp_server.cc +78 -0
  663. data/src/core/lib/iomgr/tcp_server.h +143 -0
  664. data/src/core/lib/iomgr/tcp_server_custom.cc +485 -0
  665. data/src/core/lib/iomgr/tcp_server_posix.cc +638 -0
  666. data/src/core/lib/iomgr/tcp_server_utils_posix.h +125 -0
  667. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +223 -0
  668. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +181 -0
  669. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +36 -0
  670. data/src/core/lib/iomgr/tcp_server_windows.cc +564 -0
  671. data/src/core/lib/iomgr/tcp_uv.cc +419 -0
  672. data/src/core/lib/iomgr/tcp_windows.cc +533 -0
  673. data/src/core/lib/iomgr/tcp_windows.h +53 -0
  674. data/src/core/lib/iomgr/time_averaged_stats.cc +64 -0
  675. data/src/core/lib/iomgr/time_averaged_stats.h +72 -0
  676. data/src/core/lib/iomgr/timer.cc +45 -0
  677. data/src/core/lib/iomgr/timer.h +127 -0
  678. data/src/core/lib/iomgr/timer_custom.cc +95 -0
  679. data/src/core/lib/iomgr/timer_custom.h +43 -0
  680. data/src/core/lib/iomgr/timer_generic.cc +747 -0
  681. data/src/core/lib/iomgr/timer_generic.h +39 -0
  682. data/src/core/lib/iomgr/timer_heap.cc +135 -0
  683. data/src/core/lib/iomgr/timer_heap.h +43 -0
  684. data/src/core/lib/iomgr/timer_manager.cc +363 -0
  685. data/src/core/lib/iomgr/timer_manager.h +41 -0
  686. data/src/core/lib/iomgr/timer_uv.cc +66 -0
  687. data/src/core/lib/iomgr/udp_server.cc +747 -0
  688. data/src/core/lib/iomgr/udp_server.h +101 -0
  689. data/src/core/lib/iomgr/unix_sockets_posix.cc +104 -0
  690. data/src/core/lib/iomgr/unix_sockets_posix.h +43 -0
  691. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +49 -0
  692. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +82 -0
  693. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +38 -0
  694. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +100 -0
  695. data/src/core/lib/iomgr/wakeup_fd_pipe.h +28 -0
  696. data/src/core/lib/iomgr/wakeup_fd_posix.cc +69 -0
  697. data/src/core/lib/iomgr/wakeup_fd_posix.h +96 -0
  698. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  699. data/src/core/lib/iomgr/work_serializer.h +65 -0
  700. data/src/core/lib/json/json.h +240 -0
  701. data/src/core/lib/json/json_reader.cc +855 -0
  702. data/src/core/lib/json/json_writer.cc +337 -0
  703. data/src/core/lib/profiling/basic_timers.cc +293 -0
  704. data/src/core/lib/profiling/stap_timers.cc +50 -0
  705. data/src/core/lib/profiling/timers.h +94 -0
  706. data/src/core/lib/security/context/security_context.cc +321 -0
  707. data/src/core/lib/security/context/security_context.h +150 -0
  708. data/src/core/lib/security/credentials/alts/alts_credentials.cc +110 -0
  709. data/src/core/lib/security/credentials/alts/alts_credentials.h +109 -0
  710. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  711. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  712. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +68 -0
  713. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  714. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +102 -0
  715. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +127 -0
  716. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  717. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +75 -0
  718. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +59 -0
  719. data/src/core/lib/security/credentials/composite/composite_credentials.cc +229 -0
  720. data/src/core/lib/security/credentials/composite/composite_credentials.h +106 -0
  721. data/src/core/lib/security/credentials/credentials.cc +162 -0
  722. data/src/core/lib/security/credentials/credentials.h +283 -0
  723. data/src/core/lib/security/credentials/credentials_metadata.cc +62 -0
  724. data/src/core/lib/security/credentials/fake/fake_credentials.cc +112 -0
  725. data/src/core/lib/security/credentials/fake/fake_credentials.h +87 -0
  726. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +41 -0
  727. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +383 -0
  728. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +87 -0
  729. data/src/core/lib/security/credentials/iam/iam_credentials.cc +80 -0
  730. data/src/core/lib/security/credentials/iam/iam_credentials.h +49 -0
  731. data/src/core/lib/security/credentials/jwt/json_token.cc +288 -0
  732. data/src/core/lib/security/credentials/jwt/json_token.h +75 -0
  733. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +172 -0
  734. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +80 -0
  735. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +925 -0
  736. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +122 -0
  737. data/src/core/lib/security/credentials/local/local_credentials.cc +64 -0
  738. data/src/core/lib/security/credentials/local/local_credentials.h +61 -0
  739. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +771 -0
  740. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +171 -0
  741. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +269 -0
  742. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +72 -0
  743. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +364 -0
  744. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +99 -0
  745. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +245 -0
  746. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +313 -0
  747. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  748. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  749. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +301 -0
  750. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +76 -0
  751. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +324 -0
  752. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +45 -0
  753. data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
  754. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +32 -0
  755. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +171 -0
  756. data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
  757. data/src/core/lib/security/security_connector/local/local_security_connector.cc +281 -0
  758. data/src/core/lib/security/security_connector/local/local_security_connector.h +59 -0
  759. data/src/core/lib/security/security_connector/security_connector.cc +129 -0
  760. data/src/core/lib/security/security_connector/security_connector.h +176 -0
  761. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +439 -0
  762. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +77 -0
  763. data/src/core/lib/security/security_connector/ssl_utils.cc +563 -0
  764. data/src/core/lib/security/security_connector/ssl_utils.h +184 -0
  765. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  766. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  767. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +603 -0
  768. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  769. data/src/core/lib/security/transport/auth_filters.h +35 -0
  770. data/src/core/lib/security/transport/client_auth_filter.cc +466 -0
  771. data/src/core/lib/security/transport/secure_endpoint.cc +446 -0
  772. data/src/core/lib/security/transport/secure_endpoint.h +41 -0
  773. data/src/core/lib/security/transport/security_handshaker.cc +574 -0
  774. data/src/core/lib/security/transport/security_handshaker.h +45 -0
  775. data/src/core/lib/security/transport/server_auth_filter.cc +326 -0
  776. data/src/core/lib/security/transport/target_authority_table.cc +75 -0
  777. data/src/core/lib/security/transport/target_authority_table.h +40 -0
  778. data/src/core/lib/security/transport/tsi_error.cc +29 -0
  779. data/src/core/lib/security/transport/tsi_error.h +29 -0
  780. data/src/core/lib/security/util/json_util.cc +73 -0
  781. data/src/core/lib/security/util/json_util.h +44 -0
  782. data/src/core/lib/slice/b64.cc +239 -0
  783. data/src/core/lib/slice/b64.h +50 -0
  784. data/src/core/lib/slice/percent_encoding.cc +169 -0
  785. data/src/core/lib/slice/percent_encoding.h +65 -0
  786. data/src/core/lib/slice/slice.cc +559 -0
  787. data/src/core/lib/slice/slice_buffer.cc +413 -0
  788. data/src/core/lib/slice/slice_hash_table.h +199 -0
  789. data/src/core/lib/slice/slice_intern.cc +375 -0
  790. data/src/core/lib/slice/slice_internal.h +364 -0
  791. data/src/core/lib/slice/slice_string_helpers.cc +127 -0
  792. data/src/core/lib/slice/slice_string_helpers.h +49 -0
  793. data/src/core/lib/slice/slice_utils.h +200 -0
  794. data/src/core/lib/slice/slice_weak_hash_table.h +102 -0
  795. data/src/core/lib/surface/api_trace.cc +24 -0
  796. data/src/core/lib/surface/api_trace.h +52 -0
  797. data/src/core/lib/surface/byte_buffer.cc +92 -0
  798. data/src/core/lib/surface/byte_buffer_reader.cc +101 -0
  799. data/src/core/lib/surface/call.cc +2044 -0
  800. data/src/core/lib/surface/call.h +125 -0
  801. data/src/core/lib/surface/call_details.cc +41 -0
  802. data/src/core/lib/surface/call_log_batch.cc +111 -0
  803. data/src/core/lib/surface/call_test_only.h +43 -0
  804. data/src/core/lib/surface/channel.cc +543 -0
  805. data/src/core/lib/surface/channel.h +158 -0
  806. data/src/core/lib/surface/channel_init.cc +109 -0
  807. data/src/core/lib/surface/channel_init.h +78 -0
  808. data/src/core/lib/surface/channel_ping.cc +64 -0
  809. data/src/core/lib/surface/channel_stack_type.cc +58 -0
  810. data/src/core/lib/surface/channel_stack_type.h +47 -0
  811. data/src/core/lib/surface/completion_queue.cc +1438 -0
  812. data/src/core/lib/surface/completion_queue.h +97 -0
  813. data/src/core/lib/surface/completion_queue_factory.cc +88 -0
  814. data/src/core/lib/surface/completion_queue_factory.h +38 -0
  815. data/src/core/lib/surface/event_string.cc +61 -0
  816. data/src/core/lib/surface/event_string.h +31 -0
  817. data/src/core/lib/surface/init.cc +250 -0
  818. data/src/core/lib/surface/init.h +27 -0
  819. data/src/core/lib/surface/init_secure.cc +81 -0
  820. data/src/core/lib/surface/lame_client.cc +191 -0
  821. data/src/core/lib/surface/lame_client.h +28 -0
  822. data/src/core/lib/surface/metadata_array.cc +36 -0
  823. data/src/core/lib/surface/server.cc +1800 -0
  824. data/src/core/lib/surface/server.h +99 -0
  825. data/src/core/lib/surface/validate_metadata.cc +105 -0
  826. data/src/core/lib/surface/validate_metadata.h +41 -0
  827. data/src/core/lib/surface/version.cc +28 -0
  828. data/src/core/lib/transport/bdp_estimator.cc +87 -0
  829. data/src/core/lib/transport/bdp_estimator.h +94 -0
  830. data/src/core/lib/transport/byte_stream.cc +158 -0
  831. data/src/core/lib/transport/byte_stream.h +165 -0
  832. data/src/core/lib/transport/connectivity_state.cc +180 -0
  833. data/src/core/lib/transport/connectivity_state.h +131 -0
  834. data/src/core/lib/transport/error_utils.cc +141 -0
  835. data/src/core/lib/transport/error_utils.h +46 -0
  836. data/src/core/lib/transport/http2_errors.h +41 -0
  837. data/src/core/lib/transport/metadata.cc +679 -0
  838. data/src/core/lib/transport/metadata.h +446 -0
  839. data/src/core/lib/transport/metadata_batch.cc +392 -0
  840. data/src/core/lib/transport/metadata_batch.h +191 -0
  841. data/src/core/lib/transport/pid_controller.cc +51 -0
  842. data/src/core/lib/transport/pid_controller.h +116 -0
  843. data/src/core/lib/transport/static_metadata.cc +1230 -0
  844. data/src/core/lib/transport/static_metadata.h +597 -0
  845. data/src/core/lib/transport/status_conversion.cc +92 -0
  846. data/src/core/lib/transport/status_conversion.h +38 -0
  847. data/src/core/lib/transport/status_metadata.cc +61 -0
  848. data/src/core/lib/transport/status_metadata.h +48 -0
  849. data/src/core/lib/transport/timeout_encoding.cc +151 -0
  850. data/src/core/lib/transport/timeout_encoding.h +38 -0
  851. data/src/core/lib/transport/transport.cc +259 -0
  852. data/src/core/lib/transport/transport.h +456 -0
  853. data/src/core/lib/transport/transport_impl.h +71 -0
  854. data/src/core/lib/transport/transport_op_string.cc +169 -0
  855. data/src/core/lib/uri/uri_parser.cc +314 -0
  856. data/src/core/lib/uri/uri_parser.h +49 -0
  857. data/src/core/plugin_registry/grpc_plugin_registry.cc +121 -0
  858. data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
  859. data/src/core/tsi/alts/crypt/gsec.cc +189 -0
  860. data/src/core/tsi/alts/crypt/gsec.h +454 -0
  861. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  862. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  863. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  864. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  865. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
  866. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  867. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  868. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  869. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  870. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  871. data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
  872. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  873. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +899 -0
  874. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +161 -0
  875. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +83 -0
  876. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +73 -0
  877. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +674 -0
  878. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +104 -0
  879. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +88 -0
  880. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +64 -0
  881. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +53 -0
  882. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +223 -0
  883. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +171 -0
  884. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +226 -0
  885. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +54 -0
  886. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  887. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  888. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  889. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  890. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +99 -0
  891. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
  892. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  893. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +307 -0
  894. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +57 -0
  895. data/src/core/tsi/fake_transport_security.cc +789 -0
  896. data/src/core/tsi/fake_transport_security.h +47 -0
  897. data/src/core/tsi/local_transport_security.cc +211 -0
  898. data/src/core/tsi/local_transport_security.h +51 -0
  899. data/src/core/tsi/ssl/session_cache/ssl_session.h +71 -0
  900. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +57 -0
  901. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +214 -0
  902. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +90 -0
  903. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +75 -0
  904. data/src/core/tsi/ssl_transport_security.cc +2124 -0
  905. data/src/core/tsi/ssl_transport_security.h +353 -0
  906. data/src/core/tsi/ssl_types.h +42 -0
  907. data/src/core/tsi/transport_security.cc +370 -0
  908. data/src/core/tsi/transport_security.h +127 -0
  909. data/src/core/tsi/transport_security_grpc.cc +73 -0
  910. data/src/core/tsi/transport_security_grpc.h +79 -0
  911. data/src/core/tsi/transport_security_interface.h +476 -0
  912. data/src/ruby/bin/math_client.rb +140 -0
  913. data/src/ruby/bin/math_pb.rb +34 -0
  914. data/src/ruby/bin/math_server.rb +191 -0
  915. data/src/ruby/bin/math_services_pb.rb +51 -0
  916. data/src/ruby/bin/noproto_client.rb +93 -0
  917. data/src/ruby/bin/noproto_server.rb +97 -0
  918. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  919. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  920. data/src/ruby/ext/grpc/extconf.rb +107 -0
  921. data/src/ruby/ext/grpc/rb_byte_buffer.c +64 -0
  922. data/src/ruby/ext/grpc/rb_byte_buffer.h +35 -0
  923. data/src/ruby/ext/grpc/rb_call.c +1050 -0
  924. data/src/ruby/ext/grpc/rb_call.h +53 -0
  925. data/src/ruby/ext/grpc/rb_call_credentials.c +297 -0
  926. data/src/ruby/ext/grpc/rb_call_credentials.h +31 -0
  927. data/src/ruby/ext/grpc/rb_channel.c +835 -0
  928. data/src/ruby/ext/grpc/rb_channel.h +34 -0
  929. data/src/ruby/ext/grpc/rb_channel_args.c +155 -0
  930. data/src/ruby/ext/grpc/rb_channel_args.h +38 -0
  931. data/src/ruby/ext/grpc/rb_channel_credentials.c +267 -0
  932. data/src/ruby/ext/grpc/rb_channel_credentials.h +32 -0
  933. data/src/ruby/ext/grpc/rb_completion_queue.c +100 -0
  934. data/src/ruby/ext/grpc/rb_completion_queue.h +36 -0
  935. data/src/ruby/ext/grpc/rb_compression_options.c +470 -0
  936. data/src/ruby/ext/grpc/rb_compression_options.h +29 -0
  937. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  938. data/src/ruby/ext/grpc/rb_event_thread.c +143 -0
  939. data/src/ruby/ext/grpc/rb_event_thread.h +21 -0
  940. data/src/ruby/ext/grpc/rb_grpc.c +328 -0
  941. data/src/ruby/ext/grpc/rb_grpc.h +76 -0
  942. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +573 -0
  943. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +865 -0
  944. data/src/ruby/ext/grpc/rb_loader.c +57 -0
  945. data/src/ruby/ext/grpc/rb_loader.h +25 -0
  946. data/src/ruby/ext/grpc/rb_server.c +372 -0
  947. data/src/ruby/ext/grpc/rb_server.h +32 -0
  948. data/src/ruby/ext/grpc/rb_server_credentials.c +243 -0
  949. data/src/ruby/ext/grpc/rb_server_credentials.h +32 -0
  950. data/src/ruby/lib/grpc.rb +37 -0
  951. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  952. data/src/ruby/lib/grpc/core/time_consts.rb +56 -0
  953. data/src/ruby/lib/grpc/errors.rb +277 -0
  954. data/src/ruby/lib/grpc/generic/active_call.rb +669 -0
  955. data/src/ruby/lib/grpc/generic/bidi_call.rb +233 -0
  956. data/src/ruby/lib/grpc/generic/client_stub.rb +501 -0
  957. data/src/ruby/lib/grpc/generic/interceptor_registry.rb +53 -0
  958. data/src/ruby/lib/grpc/generic/interceptors.rb +186 -0
  959. data/src/ruby/lib/grpc/generic/rpc_desc.rb +204 -0
  960. data/src/ruby/lib/grpc/generic/rpc_server.rb +551 -0
  961. data/src/ruby/lib/grpc/generic/service.rb +211 -0
  962. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +40 -0
  963. data/src/ruby/lib/grpc/grpc.rb +24 -0
  964. data/src/ruby/lib/grpc/logconfig.rb +44 -0
  965. data/src/ruby/lib/grpc/notifier.rb +45 -0
  966. data/src/ruby/lib/grpc/structs.rb +15 -0
  967. data/src/ruby/lib/grpc/version.rb +18 -0
  968. data/src/ruby/pb/README.md +42 -0
  969. data/src/ruby/pb/generate_proto_ruby.sh +51 -0
  970. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  971. data/src/ruby/pb/grpc/health/v1/health_pb.rb +31 -0
  972. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +62 -0
  973. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +44 -0
  974. data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
  975. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +49 -0
  976. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +17 -0
  977. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +105 -0
  978. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +16 -0
  979. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +118 -0
  980. data/src/ruby/spec/call_credentials_spec.rb +42 -0
  981. data/src/ruby/spec/call_spec.rb +180 -0
  982. data/src/ruby/spec/channel_connection_spec.rb +126 -0
  983. data/src/ruby/spec/channel_credentials_spec.rb +82 -0
  984. data/src/ruby/spec/channel_spec.rb +234 -0
  985. data/src/ruby/spec/client_auth_spec.rb +126 -0
  986. data/src/ruby/spec/client_server_spec.rb +664 -0
  987. data/src/ruby/spec/compression_options_spec.rb +149 -0
  988. data/src/ruby/spec/debug_message_spec.rb +134 -0
  989. data/src/ruby/spec/error_sanity_spec.rb +49 -0
  990. data/src/ruby/spec/errors_spec.rb +142 -0
  991. data/src/ruby/spec/generic/active_call_spec.rb +672 -0
  992. data/src/ruby/spec/generic/client_interceptors_spec.rb +153 -0
  993. data/src/ruby/spec/generic/client_stub_spec.rb +1083 -0
  994. data/src/ruby/spec/generic/interceptor_registry_spec.rb +65 -0
  995. data/src/ruby/spec/generic/rpc_desc_spec.rb +374 -0
  996. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +127 -0
  997. data/src/ruby/spec/generic/rpc_server_spec.rb +748 -0
  998. data/src/ruby/spec/generic/server_interceptors_spec.rb +218 -0
  999. data/src/ruby/spec/generic/service_spec.rb +263 -0
  1000. data/src/ruby/spec/google_rpc_status_utils_spec.rb +282 -0
  1001. data/src/ruby/spec/pb/codegen/grpc/testing/package_options.proto +28 -0
  1002. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  1003. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  1004. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  1005. data/src/ruby/spec/pb/codegen/package_option_spec.rb +82 -0
  1006. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +57 -0
  1007. data/src/ruby/spec/pb/health/checker_spec.rb +236 -0
  1008. data/src/ruby/spec/server_credentials_spec.rb +79 -0
  1009. data/src/ruby/spec/server_spec.rb +209 -0
  1010. data/src/ruby/spec/spec_helper.rb +61 -0
  1011. data/src/ruby/spec/support/helpers.rb +107 -0
  1012. data/src/ruby/spec/support/services.rb +160 -0
  1013. data/src/ruby/spec/testdata/README +1 -0
  1014. data/src/ruby/spec/testdata/ca.pem +20 -0
  1015. data/src/ruby/spec/testdata/client.key +28 -0
  1016. data/src/ruby/spec/testdata/client.pem +20 -0
  1017. data/src/ruby/spec/testdata/server1.key +28 -0
  1018. data/src/ruby/spec/testdata/server1.pem +22 -0
  1019. data/src/ruby/spec/time_consts_spec.rb +74 -0
  1020. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  1021. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  1022. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  1023. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  1024. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  1025. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  1026. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  1027. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  1028. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  1029. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  1030. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  1031. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  1032. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  1033. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  1034. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  1035. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  1036. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  1037. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  1038. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  1039. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  1040. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  1041. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  1042. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  1043. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  1044. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  1045. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  1046. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  1047. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  1048. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  1049. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  1050. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  1051. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  1052. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  1053. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  1054. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  1055. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  1056. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  1057. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  1058. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  1059. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  1060. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  1061. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  1062. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  1063. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  1064. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  1065. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  1066. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  1067. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  1068. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  1069. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  1070. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  1071. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  1072. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  1073. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  1074. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  1075. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  1076. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  1077. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  1078. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  1079. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  1080. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  1081. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  1082. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  1083. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  1084. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  1085. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  1086. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  1087. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  1088. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  1089. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  1090. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  1091. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  1092. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  1093. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  1094. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  1095. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  1096. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  1097. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  1098. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  1099. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  1100. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  1101. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  1102. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  1103. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  1104. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  1105. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  1106. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  1107. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  1108. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  1109. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  1110. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  1111. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  1112. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  1113. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  1114. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  1115. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  1116. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  1117. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  1118. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  1119. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  1120. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  1121. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  1122. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  1123. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  1124. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  1125. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  1126. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  1127. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  1128. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  1129. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  1130. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  1131. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  1132. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  1133. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  1134. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  1135. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  1136. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  1137. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  1138. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  1139. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  1140. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  1141. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  1142. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  1143. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  1144. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  1145. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  1146. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  1147. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  1148. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  1149. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  1150. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  1151. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  1152. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  1153. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  1154. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  1155. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  1156. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  1157. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  1158. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  1159. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1160. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1161. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  1162. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  1163. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  1164. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  1165. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  1166. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  1167. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  1168. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  1169. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  1170. data/third_party/address_sorting/address_sorting.c +375 -0
  1171. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  1172. data/third_party/address_sorting/address_sorting_posix.c +97 -0
  1173. data/third_party/address_sorting/address_sorting_windows.c +95 -0
  1174. data/third_party/address_sorting/include/address_sorting/address_sorting.h +113 -0
  1175. data/third_party/boringssl-with-bazel/err_data.c +1439 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  1179. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  1180. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  1181. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +261 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  1185. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  1186. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +77 -0
  1187. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +93 -0
  1188. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +303 -0
  1192. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +236 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +104 -0
  1195. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +80 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
  1197. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
  1199. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  1200. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +1244 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  1202. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +244 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +387 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +131 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +280 -0
  1206. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +206 -0
  1207. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +330 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  1213. data/third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c +192 -0
  1214. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +111 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +115 -0
  1217. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +64 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  1221. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  1222. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +52 -0
  1223. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  1224. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1228. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  1231. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +85 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +462 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +87 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +128 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +491 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1243. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +127 -0
  1245. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +31 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c +55 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c +62 -0
  1248. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  1249. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1250. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +38 -0
  1251. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1252. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +38 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1254. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1255. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1256. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1257. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1259. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c +160 -0
  1261. data/third_party/boringssl-with-bazel/src/crypto/dh/params.c +93 -0
  1262. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +240 -0
  1263. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1264. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +339 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1267. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  1268. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  1269. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1270. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1271. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1273. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c +231 -0
  1275. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1276. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +388 -0
  1277. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1278. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1280. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1281. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1283. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1285. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1287. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +146 -0
  1289. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +489 -0
  1290. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1291. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +151 -0
  1292. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +261 -0
  1293. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1294. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1295. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1296. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +106 -0
  1298. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1299. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.c +316 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/x86_64-gcc.c +541 -0
  1301. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1302. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +230 -0
  1303. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1304. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1305. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1306. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1307. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1308. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1309. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1310. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +711 -0
  1311. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +694 -0
  1312. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.c +146 -0
  1313. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1314. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1315. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1316. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1317. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1318. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1319. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1320. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1321. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +502 -0
  1322. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +284 -0
  1323. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1324. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1325. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1326. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1327. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1328. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +785 -0
  1329. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +240 -0
  1330. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1331. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1332. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +112 -0
  1333. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1334. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1335. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1336. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1337. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1338. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +775 -0
  1339. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1340. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1178 -0
  1341. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1342. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +632 -0
  1343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  1345. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1346. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1347. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1348. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1349. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1350. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1351. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1352. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1353. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1354. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +228 -0
  1355. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1356. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1357. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1366. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +91 -0
  1367. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1368. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1369. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1370. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +654 -0
  1380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +361 -0
  1382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +39 -0
  1386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +165 -0
  1387. data/third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c +112 -0
  1388. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1389. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1390. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1391. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1392. data/third_party/boringssl-with-bazel/src/crypto/mem.c +359 -0
  1393. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1394. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1395. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c +122 -0
  1396. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1397. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1398. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1399. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1400. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1401. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1402. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +65 -0
  1403. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +65 -0
  1404. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +49 -0
  1405. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1406. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1407. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +131 -0
  1408. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1409. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1410. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1305 -0
  1411. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +41 -0
  1412. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1413. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1414. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1415. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1416. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1417. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1418. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +46 -0
  1419. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1420. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +70 -0
  1421. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1422. data/third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c +98 -0
  1423. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +67 -0
  1424. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1425. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +325 -0
  1426. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1427. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1428. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1429. data/third_party/boringssl-with-bazel/src/crypto/thread.c +110 -0
  1430. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1431. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1432. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1433. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  1434. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  1435. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  1436. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +96 -0
  1437. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +128 -0
  1438. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1439. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1440. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +153 -0
  1441. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1442. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1443. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1444. data/third_party/boringssl-with-bazel/src/crypto/x509/charmap.h +15 -0
  1445. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +83 -0
  1446. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +66 -0
  1447. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +385 -0
  1448. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1449. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1450. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1451. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +111 -0
  1452. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +71 -0
  1453. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +157 -0
  1454. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +381 -0
  1455. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +476 -0
  1456. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +106 -0
  1457. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1458. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +206 -0
  1459. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1460. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1461. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1462. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +341 -0
  1463. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +185 -0
  1464. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +326 -0
  1465. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1466. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +278 -0
  1467. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2487 -0
  1468. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1469. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +210 -0
  1470. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1471. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +81 -0
  1472. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +137 -0
  1473. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +151 -0
  1474. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1475. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +111 -0
  1476. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +541 -0
  1477. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +75 -0
  1478. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +98 -0
  1479. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +554 -0
  1480. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +106 -0
  1481. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +368 -0
  1482. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +109 -0
  1483. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +69 -0
  1484. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +80 -0
  1485. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +69 -0
  1486. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +334 -0
  1487. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +198 -0
  1488. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1489. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +56 -0
  1490. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1491. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +130 -0
  1492. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +217 -0
  1493. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +155 -0
  1494. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +130 -0
  1495. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1496. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1497. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1498. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +72 -0
  1499. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1500. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +133 -0
  1501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +141 -0
  1502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1503. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +561 -0
  1505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +148 -0
  1507. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1508. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +122 -0
  1509. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1510. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +91 -0
  1511. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1512. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +501 -0
  1513. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1514. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1515. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +57 -0
  1516. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +139 -0
  1517. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +110 -0
  1518. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +154 -0
  1519. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +229 -0
  1520. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +843 -0
  1521. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1522. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +274 -0
  1523. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1524. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1525. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +195 -0
  1526. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +121 -0
  1527. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1528. data/third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h +18 -0
  1529. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +892 -0
  1530. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1531. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1532. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1533. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1534. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1535. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1536. data/third_party/boringssl-with-bazel/src/include/openssl/buffer.h +18 -0
  1537. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1538. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1539. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +41 -0
  1540. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1541. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1542. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1543. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1544. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1545. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1546. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +177 -0
  1547. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1548. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1549. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1550. data/third_party/boringssl-with-bazel/src/include/openssl/dtls1.h +16 -0
  1551. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1552. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1553. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1554. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1555. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1556. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1557. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1558. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1050 -0
  1559. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +203 -0
  1560. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +64 -0
  1561. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1562. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1563. data/third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h +16 -0
  1564. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1565. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1566. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1567. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1568. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1569. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1570. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +18 -0
  1571. data/third_party/boringssl-with-bazel/src/include/openssl/objects.h +18 -0
  1572. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +67 -0
  1573. data/third_party/boringssl-with-bazel/src/include/openssl/opensslv.h +18 -0
  1574. data/third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h +18 -0
  1575. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1576. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h +18 -0
  1577. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1578. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1579. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1580. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1581. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1582. data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +96 -0
  1583. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1584. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1585. data/third_party/boringssl-with-bazel/src/include/openssl/safestack.h +16 -0
  1586. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1587. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1588. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1589. data/third_party/boringssl-with-bazel/src/include/openssl/srtp.h +18 -0
  1590. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5198 -0
  1591. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1592. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1593. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1594. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +632 -0
  1595. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  1596. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1597. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1207 -0
  1598. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1599. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1600. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +179 -0
  1601. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1602. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1603. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1604. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1605. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1606. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1607. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1608. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +703 -0
  1609. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1610. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1805 -0
  1611. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3572 -0
  1612. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1613. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1614. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1615. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1616. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1617. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1618. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1019 -0
  1619. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1620. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1621. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1622. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3015 -0
  1623. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1624. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1333 -0
  1625. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1626. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1627. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1628. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1629. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +365 -0
  1630. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3870 -0
  1631. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1632. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1017 -0
  1633. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1634. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1096 -0
  1635. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1636. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +703 -0
  1637. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1638. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1639. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1640. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1641. data/third_party/cares/ares_build.h +223 -0
  1642. data/third_party/cares/cares/ares.h +670 -0
  1643. data/third_party/cares/cares/ares__close_sockets.c +61 -0
  1644. data/third_party/cares/cares/ares__get_hostent.c +261 -0
  1645. data/third_party/cares/cares/ares__read_line.c +73 -0
  1646. data/third_party/cares/cares/ares__timeval.c +111 -0
  1647. data/third_party/cares/cares/ares_cancel.c +63 -0
  1648. data/third_party/cares/cares/ares_create_query.c +206 -0
  1649. data/third_party/cares/cares/ares_data.c +222 -0
  1650. data/third_party/cares/cares/ares_data.h +72 -0
  1651. data/third_party/cares/cares/ares_destroy.c +113 -0
  1652. data/third_party/cares/cares/ares_dns.h +103 -0
  1653. data/third_party/cares/cares/ares_expand_name.c +209 -0
  1654. data/third_party/cares/cares/ares_expand_string.c +70 -0
  1655. data/third_party/cares/cares/ares_fds.c +59 -0
  1656. data/third_party/cares/cares/ares_free_hostent.c +41 -0
  1657. data/third_party/cares/cares/ares_free_string.c +25 -0
  1658. data/third_party/cares/cares/ares_getenv.c +30 -0
  1659. data/third_party/cares/cares/ares_getenv.h +26 -0
  1660. data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
  1661. data/third_party/cares/cares/ares_gethostbyname.c +529 -0
  1662. data/third_party/cares/cares/ares_getnameinfo.c +453 -0
  1663. data/third_party/cares/cares/ares_getopt.c +122 -0
  1664. data/third_party/cares/cares/ares_getopt.h +53 -0
  1665. data/third_party/cares/cares/ares_getsock.c +66 -0
  1666. data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
  1667. data/third_party/cares/cares/ares_init.c +2615 -0
  1668. data/third_party/cares/cares/ares_iphlpapi.h +221 -0
  1669. data/third_party/cares/cares/ares_ipv6.h +78 -0
  1670. data/third_party/cares/cares/ares_library_init.c +195 -0
  1671. data/third_party/cares/cares/ares_library_init.h +43 -0
  1672. data/third_party/cares/cares/ares_llist.c +63 -0
  1673. data/third_party/cares/cares/ares_llist.h +39 -0
  1674. data/third_party/cares/cares/ares_mkquery.c +24 -0
  1675. data/third_party/cares/cares/ares_nowarn.c +260 -0
  1676. data/third_party/cares/cares/ares_nowarn.h +61 -0
  1677. data/third_party/cares/cares/ares_options.c +406 -0
  1678. data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
  1679. data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
  1680. data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
  1681. data/third_party/cares/cares/ares_parse_naptr_reply.c +194 -0
  1682. data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
  1683. data/third_party/cares/cares/ares_parse_ptr_reply.c +221 -0
  1684. data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
  1685. data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
  1686. data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
  1687. data/third_party/cares/cares/ares_platform.c +11042 -0
  1688. data/third_party/cares/cares/ares_platform.h +43 -0
  1689. data/third_party/cares/cares/ares_private.h +382 -0
  1690. data/third_party/cares/cares/ares_process.c +1473 -0
  1691. data/third_party/cares/cares/ares_query.c +186 -0
  1692. data/third_party/cares/cares/ares_rules.h +125 -0
  1693. data/third_party/cares/cares/ares_search.c +323 -0
  1694. data/third_party/cares/cares/ares_send.c +137 -0
  1695. data/third_party/cares/cares/ares_setup.h +217 -0
  1696. data/third_party/cares/cares/ares_strcasecmp.c +66 -0
  1697. data/third_party/cares/cares/ares_strcasecmp.h +30 -0
  1698. data/third_party/cares/cares/ares_strdup.c +49 -0
  1699. data/third_party/cares/cares/ares_strdup.h +24 -0
  1700. data/third_party/cares/cares/ares_strerror.c +56 -0
  1701. data/third_party/cares/cares/ares_strsplit.c +174 -0
  1702. data/third_party/cares/cares/ares_strsplit.h +43 -0
  1703. data/third_party/cares/cares/ares_timeout.c +88 -0
  1704. data/third_party/cares/cares/ares_version.c +11 -0
  1705. data/third_party/cares/cares/ares_version.h +24 -0
  1706. data/third_party/cares/cares/ares_writev.c +79 -0
  1707. data/third_party/cares/cares/bitncmp.c +59 -0
  1708. data/third_party/cares/cares/bitncmp.h +26 -0
  1709. data/third_party/cares/cares/config-win32.h +351 -0
  1710. data/third_party/cares/cares/inet_net_pton.c +450 -0
  1711. data/third_party/cares/cares/inet_ntop.c +207 -0
  1712. data/third_party/cares/cares/setup_once.h +554 -0
  1713. data/third_party/cares/cares/windows_port.c +22 -0
  1714. data/third_party/cares/config_darwin/ares_config.h +428 -0
  1715. data/third_party/cares/config_freebsd/ares_config.h +505 -0
  1716. data/third_party/cares/config_linux/ares_config.h +461 -0
  1717. data/third_party/cares/config_openbsd/ares_config.h +505 -0
  1718. data/third_party/upb/upb/decode.c +609 -0
  1719. data/third_party/upb/upb/decode.h +21 -0
  1720. data/third_party/upb/upb/encode.c +378 -0
  1721. data/third_party/upb/upb/encode.h +21 -0
  1722. data/third_party/upb/upb/generated_util.h +105 -0
  1723. data/third_party/upb/upb/msg.c +111 -0
  1724. data/third_party/upb/upb/msg.h +69 -0
  1725. data/third_party/upb/upb/port.c +26 -0
  1726. data/third_party/upb/upb/port_def.inc +150 -0
  1727. data/third_party/upb/upb/port_undef.inc +21 -0
  1728. data/third_party/upb/upb/table.c +913 -0
  1729. data/third_party/upb/upb/table.int.h +507 -0
  1730. data/third_party/upb/upb/upb.c +261 -0
  1731. data/third_party/upb/upb/upb.h +364 -0
  1732. data/third_party/zlib/adler32.c +186 -0
  1733. data/third_party/zlib/compress.c +86 -0
  1734. data/third_party/zlib/crc32.c +442 -0
  1735. data/third_party/zlib/crc32.h +441 -0
  1736. data/third_party/zlib/deflate.c +2163 -0
  1737. data/third_party/zlib/deflate.h +349 -0
  1738. data/third_party/zlib/gzclose.c +25 -0
  1739. data/third_party/zlib/gzguts.h +218 -0
  1740. data/third_party/zlib/gzlib.c +637 -0
  1741. data/third_party/zlib/gzread.c +654 -0
  1742. data/third_party/zlib/gzwrite.c +665 -0
  1743. data/third_party/zlib/infback.c +640 -0
  1744. data/third_party/zlib/inffast.c +323 -0
  1745. data/third_party/zlib/inffast.h +11 -0
  1746. data/third_party/zlib/inffixed.h +94 -0
  1747. data/third_party/zlib/inflate.c +1561 -0
  1748. data/third_party/zlib/inflate.h +125 -0
  1749. data/third_party/zlib/inftrees.c +304 -0
  1750. data/third_party/zlib/inftrees.h +62 -0
  1751. data/third_party/zlib/trees.c +1203 -0
  1752. data/third_party/zlib/trees.h +128 -0
  1753. data/third_party/zlib/uncompr.c +93 -0
  1754. data/third_party/zlib/zconf.h +534 -0
  1755. data/third_party/zlib/zlib.h +1912 -0
  1756. data/third_party/zlib/zutil.c +325 -0
  1757. data/third_party/zlib/zutil.h +271 -0
  1758. metadata +2029 -0
@@ -0,0 +1,90 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_TSI_SSL_SESSION_CACHE_SSL_SESSION_CACHE_H
20
+ #define GRPC_CORE_TSI_SSL_SESSION_CACHE_SSL_SESSION_CACHE_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <grpc/slice.h>
25
+ #include <grpc/support/sync.h>
26
+
27
+ extern "C" {
28
+ #include <openssl/ssl.h>
29
+ }
30
+
31
+ #include "src/core/lib/avl/avl.h"
32
+ #include "src/core/lib/gprpp/memory.h"
33
+ #include "src/core/lib/gprpp/ref_counted.h"
34
+ #include "src/core/tsi/ssl/session_cache/ssl_session.h"
35
+
36
+ /// Cache for SSL sessions for sessions resumption.
37
+ ///
38
+ /// Older sessions may be evicted from the cache using LRU policy if capacity
39
+ /// limit is hit. All sessions are associated with some key, usually server
40
+ /// name. Note that servers are required to share session ticket encryption keys
41
+ /// in order for cache to be effective.
42
+ ///
43
+ /// This class is thread safe.
44
+
45
+ namespace tsi {
46
+
47
+ class SslSessionLRUCache : public grpc_core::RefCounted<SslSessionLRUCache> {
48
+ public:
49
+ /// Create new LRU cache with the given capacity.
50
+ static grpc_core::RefCountedPtr<SslSessionLRUCache> Create(size_t capacity) {
51
+ return grpc_core::MakeRefCounted<SslSessionLRUCache>(capacity);
52
+ }
53
+
54
+ // Use Create function instead of using this directly.
55
+ explicit SslSessionLRUCache(size_t capacity);
56
+ ~SslSessionLRUCache();
57
+
58
+ // Not copyable nor movable.
59
+ SslSessionLRUCache(const SslSessionLRUCache&) = delete;
60
+ SslSessionLRUCache& operator=(const SslSessionLRUCache&) = delete;
61
+
62
+ /// Returns current number of sessions in the cache.
63
+ size_t Size();
64
+ /// Add \a session in the cache using \a key. This operation may discard older
65
+ /// sessions.
66
+ void Put(const char* key, SslSessionPtr session);
67
+ /// Returns the session from the cache associated with \a key or null if not
68
+ /// found.
69
+ SslSessionPtr Get(const char* key);
70
+
71
+ private:
72
+ class Node;
73
+
74
+ Node* FindLocked(const grpc_slice& key);
75
+ void Remove(Node* node);
76
+ void PushFront(Node* node);
77
+ void AssertInvariants();
78
+
79
+ gpr_mu lock_;
80
+ size_t capacity_;
81
+
82
+ Node* use_order_list_head_ = nullptr;
83
+ Node* use_order_list_tail_ = nullptr;
84
+ size_t use_order_list_size_ = 0;
85
+ grpc_avl entry_by_key_;
86
+ };
87
+
88
+ } // namespace tsi
89
+
90
+ #endif /* GRPC_CORE_TSI_SSL_SESSION_CACHE_SSL_SESSION_CACHE_H */
@@ -0,0 +1,75 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/tsi/ssl/session_cache/ssl_session.h"
22
+
23
+ #include <grpc/support/log.h>
24
+
25
+ #ifndef OPENSSL_IS_BORINGSSL
26
+
27
+ // OpenSSL invalidates SSL_SESSION on SSL destruction making it pointless
28
+ // to cache sessions. The workaround is to serialize (relatively expensive)
29
+ // session into binary blob and re-create it from blob on every handshake.
30
+ // Note that it's safe to keep serialized session outside of SSL lifetime
31
+ // as openssl performs all necessary validation while attempting to use a
32
+ // session and creates a new one if something is wrong (e.g. server changed
33
+ // set of allowed codecs).
34
+
35
+ namespace tsi {
36
+ namespace {
37
+
38
+ class OpenSslCachedSession : public SslCachedSession {
39
+ public:
40
+ OpenSslCachedSession(SslSessionPtr session) {
41
+ int size = i2d_SSL_SESSION(session.get(), nullptr);
42
+ GPR_ASSERT(size > 0);
43
+ grpc_slice slice = grpc_slice_malloc(size_t(size));
44
+ unsigned char* start = GRPC_SLICE_START_PTR(slice);
45
+ int second_size = i2d_SSL_SESSION(session.get(), &start);
46
+ GPR_ASSERT(size == second_size);
47
+ serialized_session_ = slice;
48
+ }
49
+
50
+ virtual ~OpenSslCachedSession() { grpc_slice_unref(serialized_session_); }
51
+
52
+ SslSessionPtr CopySession() const override {
53
+ const unsigned char* data = GRPC_SLICE_START_PTR(serialized_session_);
54
+ size_t length = GRPC_SLICE_LENGTH(serialized_session_);
55
+ SSL_SESSION* session = d2i_SSL_SESSION(nullptr, &data, length);
56
+ if (session == nullptr) {
57
+ return SslSessionPtr();
58
+ }
59
+ return SslSessionPtr(session);
60
+ }
61
+
62
+ private:
63
+ grpc_slice serialized_session_;
64
+ };
65
+
66
+ } // namespace
67
+
68
+ std::unique_ptr<SslCachedSession> SslCachedSession::Create(
69
+ SslSessionPtr session) {
70
+ return absl::make_unique<OpenSslCachedSession>(std::move(session));
71
+ }
72
+
73
+ } // namespace tsi
74
+
75
+ #endif /* OPENSSL_IS_BORINGSSL */
@@ -0,0 +1,2124 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/tsi/ssl_transport_security.h"
22
+
23
+ #include <limits.h>
24
+ #include <string.h>
25
+
26
+ /* TODO(jboeuf): refactor inet_ntop into a portability header. */
27
+ /* Note: for whomever reads this and tries to refactor this, this
28
+ can't be in grpc, it has to be in gpr. */
29
+ #ifdef GPR_WINDOWS
30
+ #include <ws2tcpip.h>
31
+ #else
32
+ #include <arpa/inet.h>
33
+ #include <sys/socket.h>
34
+ #endif
35
+
36
+ #include <grpc/grpc_security.h>
37
+ #include <grpc/support/alloc.h>
38
+ #include <grpc/support/log.h>
39
+ #include <grpc/support/string_util.h>
40
+ #include <grpc/support/sync.h>
41
+ #include <grpc/support/thd_id.h>
42
+
43
+ #include "absl/strings/match.h"
44
+ #include "absl/strings/string_view.h"
45
+
46
+ extern "C" {
47
+ #include <openssl/bio.h>
48
+ #include <openssl/crypto.h> /* For OPENSSL_free */
49
+ #include <openssl/engine.h>
50
+ #include <openssl/err.h>
51
+ #include <openssl/ssl.h>
52
+ #include <openssl/x509.h>
53
+ #include <openssl/x509v3.h>
54
+ }
55
+
56
+ #include "src/core/lib/gpr/useful.h"
57
+ #include "src/core/tsi/ssl/session_cache/ssl_session_cache.h"
58
+ #include "src/core/tsi/ssl_types.h"
59
+ #include "src/core/tsi/transport_security.h"
60
+
61
+ /* --- Constants. ---*/
62
+
63
+ #define TSI_SSL_MAX_PROTECTED_FRAME_SIZE_UPPER_BOUND 16384
64
+ #define TSI_SSL_MAX_PROTECTED_FRAME_SIZE_LOWER_BOUND 1024
65
+ #define TSI_SSL_HANDSHAKER_OUTGOING_BUFFER_INITIAL_SIZE 1024
66
+
67
+ /* Putting a macro like this and littering the source file with #if is really
68
+ bad practice.
69
+ TODO(jboeuf): refactor all the #if / #endif in a separate module. */
70
+ #ifndef TSI_OPENSSL_ALPN_SUPPORT
71
+ #define TSI_OPENSSL_ALPN_SUPPORT 1
72
+ #endif
73
+
74
+ /* TODO(jboeuf): I have not found a way to get this number dynamically from the
75
+ SSL structure. This is what we would ultimately want though... */
76
+ #define TSI_SSL_MAX_PROTECTION_OVERHEAD 100
77
+
78
+ /* --- Structure definitions. ---*/
79
+
80
+ struct tsi_ssl_root_certs_store {
81
+ X509_STORE* store;
82
+ };
83
+
84
+ struct tsi_ssl_handshaker_factory {
85
+ const tsi_ssl_handshaker_factory_vtable* vtable;
86
+ gpr_refcount refcount;
87
+ };
88
+
89
+ struct tsi_ssl_client_handshaker_factory {
90
+ tsi_ssl_handshaker_factory base;
91
+ SSL_CTX* ssl_context;
92
+ unsigned char* alpn_protocol_list;
93
+ size_t alpn_protocol_list_length;
94
+ grpc_core::RefCountedPtr<tsi::SslSessionLRUCache> session_cache;
95
+ };
96
+
97
+ struct tsi_ssl_server_handshaker_factory {
98
+ /* Several contexts to support SNI.
99
+ The tsi_peer array contains the subject names of the server certificates
100
+ associated with the contexts at the same index. */
101
+ tsi_ssl_handshaker_factory base;
102
+ SSL_CTX** ssl_contexts;
103
+ tsi_peer* ssl_context_x509_subject_names;
104
+ size_t ssl_context_count;
105
+ unsigned char* alpn_protocol_list;
106
+ size_t alpn_protocol_list_length;
107
+ };
108
+
109
+ struct tsi_ssl_handshaker {
110
+ tsi_handshaker base;
111
+ SSL* ssl;
112
+ BIO* network_io;
113
+ tsi_result result;
114
+ unsigned char* outgoing_bytes_buffer;
115
+ size_t outgoing_bytes_buffer_size;
116
+ tsi_ssl_handshaker_factory* factory_ref;
117
+ };
118
+ struct tsi_ssl_handshaker_result {
119
+ tsi_handshaker_result base;
120
+ SSL* ssl;
121
+ BIO* network_io;
122
+ unsigned char* unused_bytes;
123
+ size_t unused_bytes_size;
124
+ };
125
+ struct tsi_ssl_frame_protector {
126
+ tsi_frame_protector base;
127
+ SSL* ssl;
128
+ BIO* network_io;
129
+ unsigned char* buffer;
130
+ size_t buffer_size;
131
+ size_t buffer_offset;
132
+ };
133
+ /* --- Library Initialization. ---*/
134
+
135
+ static gpr_once g_init_openssl_once = GPR_ONCE_INIT;
136
+ static int g_ssl_ctx_ex_factory_index = -1;
137
+ static const unsigned char kSslSessionIdContext[] = {'g', 'r', 'p', 'c'};
138
+ #ifndef OPENSSL_IS_BORINGSSL
139
+ static const char kSslEnginePrefix[] = "engine:";
140
+ #endif
141
+
142
+ #if OPENSSL_VERSION_NUMBER < 0x10100000
143
+ static gpr_mu* g_openssl_mutexes = nullptr;
144
+ static void openssl_locking_cb(int mode, int type, const char* file,
145
+ int line) GRPC_UNUSED;
146
+ static unsigned long openssl_thread_id_cb(void) GRPC_UNUSED;
147
+
148
+ static void openssl_locking_cb(int mode, int type, const char* file, int line) {
149
+ if (mode & CRYPTO_LOCK) {
150
+ gpr_mu_lock(&g_openssl_mutexes[type]);
151
+ } else {
152
+ gpr_mu_unlock(&g_openssl_mutexes[type]);
153
+ }
154
+ }
155
+
156
+ static unsigned long openssl_thread_id_cb(void) {
157
+ return static_cast<unsigned long>(gpr_thd_currentid());
158
+ }
159
+ #endif
160
+
161
+ static void init_openssl(void) {
162
+ #if OPENSSL_API_COMPAT >= 0x10100000L
163
+ OPENSSL_init_ssl(0, NULL);
164
+ #else
165
+ SSL_library_init();
166
+ SSL_load_error_strings();
167
+ OpenSSL_add_all_algorithms();
168
+ #endif
169
+ #if OPENSSL_VERSION_NUMBER < 0x10100000
170
+ if (!CRYPTO_get_locking_callback()) {
171
+ int num_locks = CRYPTO_num_locks();
172
+ GPR_ASSERT(num_locks > 0);
173
+ g_openssl_mutexes = static_cast<gpr_mu*>(
174
+ gpr_malloc(static_cast<size_t>(num_locks) * sizeof(gpr_mu)));
175
+ for (int i = 0; i < num_locks; i++) {
176
+ gpr_mu_init(&g_openssl_mutexes[i]);
177
+ }
178
+ CRYPTO_set_locking_callback(openssl_locking_cb);
179
+ CRYPTO_set_id_callback(openssl_thread_id_cb);
180
+ } else {
181
+ gpr_log(GPR_INFO, "OpenSSL callback has already been set.");
182
+ }
183
+ #endif
184
+ g_ssl_ctx_ex_factory_index =
185
+ SSL_CTX_get_ex_new_index(0, nullptr, nullptr, nullptr, nullptr);
186
+ GPR_ASSERT(g_ssl_ctx_ex_factory_index != -1);
187
+ }
188
+
189
+ /* --- Ssl utils. ---*/
190
+
191
+ static const char* ssl_error_string(int error) {
192
+ switch (error) {
193
+ case SSL_ERROR_NONE:
194
+ return "SSL_ERROR_NONE";
195
+ case SSL_ERROR_ZERO_RETURN:
196
+ return "SSL_ERROR_ZERO_RETURN";
197
+ case SSL_ERROR_WANT_READ:
198
+ return "SSL_ERROR_WANT_READ";
199
+ case SSL_ERROR_WANT_WRITE:
200
+ return "SSL_ERROR_WANT_WRITE";
201
+ case SSL_ERROR_WANT_CONNECT:
202
+ return "SSL_ERROR_WANT_CONNECT";
203
+ case SSL_ERROR_WANT_ACCEPT:
204
+ return "SSL_ERROR_WANT_ACCEPT";
205
+ case SSL_ERROR_WANT_X509_LOOKUP:
206
+ return "SSL_ERROR_WANT_X509_LOOKUP";
207
+ case SSL_ERROR_SYSCALL:
208
+ return "SSL_ERROR_SYSCALL";
209
+ case SSL_ERROR_SSL:
210
+ return "SSL_ERROR_SSL";
211
+ default:
212
+ return "Unknown error";
213
+ }
214
+ }
215
+
216
+ /* TODO(jboeuf): Remove when we are past the debugging phase with this code. */
217
+ static void ssl_log_where_info(const SSL* ssl, int where, int flag,
218
+ const char* msg) {
219
+ if ((where & flag) && GRPC_TRACE_FLAG_ENABLED(tsi_tracing_enabled)) {
220
+ gpr_log(GPR_INFO, "%20.20s - %30.30s - %5.10s", msg,
221
+ SSL_state_string_long(ssl), SSL_state_string(ssl));
222
+ }
223
+ }
224
+
225
+ /* Used for debugging. TODO(jboeuf): Remove when code is mature enough. */
226
+ static void ssl_info_callback(const SSL* ssl, int where, int ret) {
227
+ if (ret == 0) {
228
+ gpr_log(GPR_ERROR, "ssl_info_callback: error occurred.\n");
229
+ return;
230
+ }
231
+
232
+ ssl_log_where_info(ssl, where, SSL_CB_LOOP, "LOOP");
233
+ ssl_log_where_info(ssl, where, SSL_CB_HANDSHAKE_START, "HANDSHAKE START");
234
+ ssl_log_where_info(ssl, where, SSL_CB_HANDSHAKE_DONE, "HANDSHAKE DONE");
235
+ }
236
+
237
+ /* Returns 1 if name looks like an IP address, 0 otherwise.
238
+ This is a very rough heuristic, and only handles IPv6 in hexadecimal form. */
239
+ static int looks_like_ip_address(absl::string_view name) {
240
+ size_t dot_count = 0;
241
+ size_t num_size = 0;
242
+ for (size_t i = 0; i < name.size(); ++i) {
243
+ if (name[i] == ':') {
244
+ /* IPv6 Address in hexadecimal form, : is not allowed in DNS names. */
245
+ return 1;
246
+ }
247
+ if (name[i] >= '0' && name[i] <= '9') {
248
+ if (num_size > 3) return 0;
249
+ num_size++;
250
+ } else if (name[i] == '.') {
251
+ if (dot_count > 3 || num_size == 0) return 0;
252
+ dot_count++;
253
+ num_size = 0;
254
+ } else {
255
+ return 0;
256
+ }
257
+ }
258
+ if (dot_count < 3 || num_size == 0) return 0;
259
+ return 1;
260
+ }
261
+
262
+ /* Gets the subject CN from an X509 cert. */
263
+ static tsi_result ssl_get_x509_common_name(X509* cert, unsigned char** utf8,
264
+ size_t* utf8_size) {
265
+ int common_name_index = -1;
266
+ X509_NAME_ENTRY* common_name_entry = nullptr;
267
+ ASN1_STRING* common_name_asn1 = nullptr;
268
+ X509_NAME* subject_name = X509_get_subject_name(cert);
269
+ int utf8_returned_size = 0;
270
+ if (subject_name == nullptr) {
271
+ gpr_log(GPR_INFO, "Could not get subject name from certificate.");
272
+ return TSI_NOT_FOUND;
273
+ }
274
+ common_name_index =
275
+ X509_NAME_get_index_by_NID(subject_name, NID_commonName, -1);
276
+ if (common_name_index == -1) {
277
+ gpr_log(GPR_INFO, "Could not get common name of subject from certificate.");
278
+ return TSI_NOT_FOUND;
279
+ }
280
+ common_name_entry = X509_NAME_get_entry(subject_name, common_name_index);
281
+ if (common_name_entry == nullptr) {
282
+ gpr_log(GPR_ERROR, "Could not get common name entry from certificate.");
283
+ return TSI_INTERNAL_ERROR;
284
+ }
285
+ common_name_asn1 = X509_NAME_ENTRY_get_data(common_name_entry);
286
+ if (common_name_asn1 == nullptr) {
287
+ gpr_log(GPR_ERROR,
288
+ "Could not get common name entry asn1 from certificate.");
289
+ return TSI_INTERNAL_ERROR;
290
+ }
291
+ utf8_returned_size = ASN1_STRING_to_UTF8(utf8, common_name_asn1);
292
+ if (utf8_returned_size < 0) {
293
+ gpr_log(GPR_ERROR, "Could not extract utf8 from asn1 string.");
294
+ return TSI_OUT_OF_RESOURCES;
295
+ }
296
+ *utf8_size = static_cast<size_t>(utf8_returned_size);
297
+ return TSI_OK;
298
+ }
299
+
300
+ /* Gets the subject CN of an X509 cert as a tsi_peer_property. */
301
+ static tsi_result peer_property_from_x509_common_name(
302
+ X509* cert, tsi_peer_property* property) {
303
+ unsigned char* common_name;
304
+ size_t common_name_size;
305
+ tsi_result result =
306
+ ssl_get_x509_common_name(cert, &common_name, &common_name_size);
307
+ if (result != TSI_OK) {
308
+ if (result == TSI_NOT_FOUND) {
309
+ common_name = nullptr;
310
+ common_name_size = 0;
311
+ } else {
312
+ return result;
313
+ }
314
+ }
315
+ result = tsi_construct_string_peer_property(
316
+ TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY,
317
+ common_name == nullptr ? "" : reinterpret_cast<const char*>(common_name),
318
+ common_name_size, property);
319
+ OPENSSL_free(common_name);
320
+ return result;
321
+ }
322
+
323
+ /* Gets the X509 cert in PEM format as a tsi_peer_property. */
324
+ static tsi_result add_pem_certificate(X509* cert, tsi_peer_property* property) {
325
+ BIO* bio = BIO_new(BIO_s_mem());
326
+ if (!PEM_write_bio_X509(bio, cert)) {
327
+ BIO_free(bio);
328
+ return TSI_INTERNAL_ERROR;
329
+ }
330
+ char* contents;
331
+ long len = BIO_get_mem_data(bio, &contents);
332
+ if (len <= 0) {
333
+ BIO_free(bio);
334
+ return TSI_INTERNAL_ERROR;
335
+ }
336
+ tsi_result result = tsi_construct_string_peer_property(
337
+ TSI_X509_PEM_CERT_PROPERTY, (const char*)contents,
338
+ static_cast<size_t>(len), property);
339
+ BIO_free(bio);
340
+ return result;
341
+ }
342
+
343
+ /* Gets the subject SANs from an X509 cert as a tsi_peer_property. */
344
+ static tsi_result add_subject_alt_names_properties_to_peer(
345
+ tsi_peer* peer, GENERAL_NAMES* subject_alt_names,
346
+ size_t subject_alt_name_count, int* current_insert_index) {
347
+ size_t i;
348
+ tsi_result result = TSI_OK;
349
+
350
+ for (i = 0; i < subject_alt_name_count; i++) {
351
+ GENERAL_NAME* subject_alt_name =
352
+ sk_GENERAL_NAME_value(subject_alt_names, TSI_SIZE_AS_SIZE(i));
353
+ if (subject_alt_name->type == GEN_DNS ||
354
+ subject_alt_name->type == GEN_EMAIL ||
355
+ subject_alt_name->type == GEN_URI) {
356
+ unsigned char* name = nullptr;
357
+ int name_size;
358
+ if (subject_alt_name->type == GEN_DNS) {
359
+ name_size = ASN1_STRING_to_UTF8(&name, subject_alt_name->d.dNSName);
360
+ } else if (subject_alt_name->type == GEN_EMAIL) {
361
+ name_size = ASN1_STRING_to_UTF8(&name, subject_alt_name->d.rfc822Name);
362
+ } else {
363
+ name_size = ASN1_STRING_to_UTF8(
364
+ &name, subject_alt_name->d.uniformResourceIdentifier);
365
+ }
366
+ if (name_size < 0) {
367
+ gpr_log(GPR_ERROR, "Could not get utf8 from asn1 string.");
368
+ result = TSI_INTERNAL_ERROR;
369
+ break;
370
+ }
371
+ result = tsi_construct_string_peer_property(
372
+ TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY,
373
+ reinterpret_cast<const char*>(name), static_cast<size_t>(name_size),
374
+ &peer->properties[(*current_insert_index)++]);
375
+ if (result != TSI_OK) {
376
+ OPENSSL_free(name);
377
+ break;
378
+ }
379
+ if (subject_alt_name->type == GEN_URI) {
380
+ result = tsi_construct_string_peer_property(
381
+ TSI_X509_URI_PEER_PROPERTY, reinterpret_cast<const char*>(name),
382
+ static_cast<size_t>(name_size),
383
+ &peer->properties[(*current_insert_index)++]);
384
+ }
385
+ OPENSSL_free(name);
386
+ } else if (subject_alt_name->type == GEN_IPADD) {
387
+ char ntop_buf[INET6_ADDRSTRLEN];
388
+ int af;
389
+
390
+ if (subject_alt_name->d.iPAddress->length == 4) {
391
+ af = AF_INET;
392
+ } else if (subject_alt_name->d.iPAddress->length == 16) {
393
+ af = AF_INET6;
394
+ } else {
395
+ gpr_log(GPR_ERROR, "SAN IP Address contained invalid IP");
396
+ result = TSI_INTERNAL_ERROR;
397
+ break;
398
+ }
399
+ const char* name = inet_ntop(af, subject_alt_name->d.iPAddress->data,
400
+ ntop_buf, INET6_ADDRSTRLEN);
401
+ if (name == nullptr) {
402
+ gpr_log(GPR_ERROR, "Could not get IP string from asn1 octet.");
403
+ result = TSI_INTERNAL_ERROR;
404
+ break;
405
+ }
406
+
407
+ result = tsi_construct_string_peer_property_from_cstring(
408
+ TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY, name,
409
+ &peer->properties[(*current_insert_index)++]);
410
+ }
411
+ if (result != TSI_OK) break;
412
+ }
413
+ return result;
414
+ }
415
+
416
+ /* Gets information about the peer's X509 cert as a tsi_peer object. */
417
+ static tsi_result peer_from_x509(X509* cert, int include_certificate_type,
418
+ tsi_peer* peer) {
419
+ /* TODO(jboeuf): Maybe add more properties. */
420
+ GENERAL_NAMES* subject_alt_names = static_cast<GENERAL_NAMES*>(
421
+ X509_get_ext_d2i(cert, NID_subject_alt_name, nullptr, nullptr));
422
+ int subject_alt_name_count =
423
+ (subject_alt_names != nullptr)
424
+ ? static_cast<int>(sk_GENERAL_NAME_num(subject_alt_names))
425
+ : 0;
426
+ size_t property_count;
427
+ tsi_result result;
428
+ GPR_ASSERT(subject_alt_name_count >= 0);
429
+ property_count = (include_certificate_type ? static_cast<size_t>(1) : 0) +
430
+ 2 /* common name, certificate */ +
431
+ static_cast<size_t>(subject_alt_name_count);
432
+ for (int i = 0; i < subject_alt_name_count; i++) {
433
+ GENERAL_NAME* subject_alt_name =
434
+ sk_GENERAL_NAME_value(subject_alt_names, TSI_SIZE_AS_SIZE(i));
435
+ if (subject_alt_name->type == GEN_URI) {
436
+ property_count += 1;
437
+ }
438
+ }
439
+ result = tsi_construct_peer(property_count, peer);
440
+ if (result != TSI_OK) return result;
441
+ int current_insert_index = 0;
442
+ do {
443
+ if (include_certificate_type) {
444
+ result = tsi_construct_string_peer_property_from_cstring(
445
+ TSI_CERTIFICATE_TYPE_PEER_PROPERTY, TSI_X509_CERTIFICATE_TYPE,
446
+ &peer->properties[current_insert_index++]);
447
+ if (result != TSI_OK) break;
448
+ }
449
+ result = peer_property_from_x509_common_name(
450
+ cert, &peer->properties[current_insert_index++]);
451
+ if (result != TSI_OK) break;
452
+
453
+ result =
454
+ add_pem_certificate(cert, &peer->properties[current_insert_index++]);
455
+ if (result != TSI_OK) break;
456
+
457
+ if (subject_alt_name_count != 0) {
458
+ result = add_subject_alt_names_properties_to_peer(
459
+ peer, subject_alt_names, static_cast<size_t>(subject_alt_name_count),
460
+ &current_insert_index);
461
+ if (result != TSI_OK) break;
462
+ }
463
+ } while (0);
464
+
465
+ if (subject_alt_names != nullptr) {
466
+ sk_GENERAL_NAME_pop_free(subject_alt_names, GENERAL_NAME_free);
467
+ }
468
+ if (result != TSI_OK) tsi_peer_destruct(peer);
469
+
470
+ GPR_ASSERT((int)peer->property_count == current_insert_index);
471
+ return result;
472
+ }
473
+
474
+ /* Logs the SSL error stack. */
475
+ static void log_ssl_error_stack(void) {
476
+ unsigned long err;
477
+ while ((err = ERR_get_error()) != 0) {
478
+ char details[256];
479
+ ERR_error_string_n(static_cast<uint32_t>(err), details, sizeof(details));
480
+ gpr_log(GPR_ERROR, "%s", details);
481
+ }
482
+ }
483
+
484
+ /* Performs an SSL_read and handle errors. */
485
+ static tsi_result do_ssl_read(SSL* ssl, unsigned char* unprotected_bytes,
486
+ size_t* unprotected_bytes_size) {
487
+ int read_from_ssl;
488
+ GPR_ASSERT(*unprotected_bytes_size <= INT_MAX);
489
+ read_from_ssl = SSL_read(ssl, unprotected_bytes,
490
+ static_cast<int>(*unprotected_bytes_size));
491
+ if (read_from_ssl <= 0) {
492
+ read_from_ssl = SSL_get_error(ssl, read_from_ssl);
493
+ switch (read_from_ssl) {
494
+ case SSL_ERROR_ZERO_RETURN: /* Received a close_notify alert. */
495
+ case SSL_ERROR_WANT_READ: /* We need more data to finish the frame. */
496
+ *unprotected_bytes_size = 0;
497
+ return TSI_OK;
498
+ case SSL_ERROR_WANT_WRITE:
499
+ gpr_log(
500
+ GPR_ERROR,
501
+ "Peer tried to renegotiate SSL connection. This is unsupported.");
502
+ return TSI_UNIMPLEMENTED;
503
+ case SSL_ERROR_SSL:
504
+ gpr_log(GPR_ERROR, "Corruption detected.");
505
+ log_ssl_error_stack();
506
+ return TSI_DATA_CORRUPTED;
507
+ default:
508
+ gpr_log(GPR_ERROR, "SSL_read failed with error %s.",
509
+ ssl_error_string(read_from_ssl));
510
+ return TSI_PROTOCOL_FAILURE;
511
+ }
512
+ }
513
+ *unprotected_bytes_size = static_cast<size_t>(read_from_ssl);
514
+ return TSI_OK;
515
+ }
516
+
517
+ /* Performs an SSL_write and handle errors. */
518
+ static tsi_result do_ssl_write(SSL* ssl, unsigned char* unprotected_bytes,
519
+ size_t unprotected_bytes_size) {
520
+ int ssl_write_result;
521
+ GPR_ASSERT(unprotected_bytes_size <= INT_MAX);
522
+ ssl_write_result = SSL_write(ssl, unprotected_bytes,
523
+ static_cast<int>(unprotected_bytes_size));
524
+ if (ssl_write_result < 0) {
525
+ ssl_write_result = SSL_get_error(ssl, ssl_write_result);
526
+ if (ssl_write_result == SSL_ERROR_WANT_READ) {
527
+ gpr_log(GPR_ERROR,
528
+ "Peer tried to renegotiate SSL connection. This is unsupported.");
529
+ return TSI_UNIMPLEMENTED;
530
+ } else {
531
+ gpr_log(GPR_ERROR, "SSL_write failed with error %s.",
532
+ ssl_error_string(ssl_write_result));
533
+ return TSI_INTERNAL_ERROR;
534
+ }
535
+ }
536
+ return TSI_OK;
537
+ }
538
+
539
+ /* Loads an in-memory PEM certificate chain into the SSL context. */
540
+ static tsi_result ssl_ctx_use_certificate_chain(SSL_CTX* context,
541
+ const char* pem_cert_chain,
542
+ size_t pem_cert_chain_size) {
543
+ tsi_result result = TSI_OK;
544
+ X509* certificate = nullptr;
545
+ BIO* pem;
546
+ GPR_ASSERT(pem_cert_chain_size <= INT_MAX);
547
+ pem = BIO_new_mem_buf((void*)pem_cert_chain,
548
+ static_cast<int>(pem_cert_chain_size));
549
+ if (pem == nullptr) return TSI_OUT_OF_RESOURCES;
550
+
551
+ do {
552
+ certificate = PEM_read_bio_X509_AUX(pem, nullptr, nullptr, (void*)"");
553
+ if (certificate == nullptr) {
554
+ result = TSI_INVALID_ARGUMENT;
555
+ break;
556
+ }
557
+ if (!SSL_CTX_use_certificate(context, certificate)) {
558
+ result = TSI_INVALID_ARGUMENT;
559
+ break;
560
+ }
561
+ while (1) {
562
+ X509* certificate_authority =
563
+ PEM_read_bio_X509(pem, nullptr, nullptr, (void*)"");
564
+ if (certificate_authority == nullptr) {
565
+ ERR_clear_error();
566
+ break; /* Done reading. */
567
+ }
568
+ if (!SSL_CTX_add_extra_chain_cert(context, certificate_authority)) {
569
+ X509_free(certificate_authority);
570
+ result = TSI_INVALID_ARGUMENT;
571
+ break;
572
+ }
573
+ /* We don't need to free certificate_authority as its ownership has been
574
+ transferred to the context. That is not the case for certificate
575
+ though.
576
+ */
577
+ }
578
+ } while (0);
579
+
580
+ if (certificate != nullptr) X509_free(certificate);
581
+ BIO_free(pem);
582
+ return result;
583
+ }
584
+
585
+ #ifndef OPENSSL_IS_BORINGSSL
586
+ static tsi_result ssl_ctx_use_engine_private_key(SSL_CTX* context,
587
+ const char* pem_key,
588
+ size_t pem_key_size) {
589
+ tsi_result result = TSI_OK;
590
+ EVP_PKEY* private_key = nullptr;
591
+ ENGINE* engine = nullptr;
592
+ char* engine_name = nullptr;
593
+ // Parse key which is in following format engine:<engine_id>:<key_id>
594
+ do {
595
+ char* engine_start = (char*)pem_key + strlen(kSslEnginePrefix);
596
+ char* engine_end = (char*)strchr(engine_start, ':');
597
+ if (engine_end == nullptr) {
598
+ result = TSI_INVALID_ARGUMENT;
599
+ break;
600
+ }
601
+ char* key_id = engine_end + 1;
602
+ int engine_name_length = engine_end - engine_start;
603
+ if (engine_name_length == 0) {
604
+ result = TSI_INVALID_ARGUMENT;
605
+ break;
606
+ }
607
+ engine_name = static_cast<char*>(gpr_zalloc(engine_name_length + 1));
608
+ memcpy(engine_name, engine_start, engine_name_length);
609
+ gpr_log(GPR_DEBUG, "ENGINE key: %s", engine_name);
610
+ ENGINE_load_dynamic();
611
+ engine = ENGINE_by_id(engine_name);
612
+ if (engine == nullptr) {
613
+ // If not available at ENGINE_DIR, use dynamic to load from
614
+ // current working directory.
615
+ engine = ENGINE_by_id("dynamic");
616
+ if (engine == nullptr) {
617
+ gpr_log(GPR_ERROR, "Cannot load dynamic engine");
618
+ result = TSI_INVALID_ARGUMENT;
619
+ break;
620
+ }
621
+ if (!ENGINE_ctrl_cmd_string(engine, "ID", engine_name, 0) ||
622
+ !ENGINE_ctrl_cmd_string(engine, "DIR_LOAD", "2", 0) ||
623
+ !ENGINE_ctrl_cmd_string(engine, "DIR_ADD", ".", 0) ||
624
+ !ENGINE_ctrl_cmd_string(engine, "LIST_ADD", "1", 0) ||
625
+ !ENGINE_ctrl_cmd_string(engine, "LOAD", NULL, 0)) {
626
+ gpr_log(GPR_ERROR, "Cannot find engine");
627
+ result = TSI_INVALID_ARGUMENT;
628
+ break;
629
+ }
630
+ }
631
+ if (!ENGINE_set_default(engine, ENGINE_METHOD_ALL)) {
632
+ gpr_log(GPR_ERROR, "ENGINE_set_default with ENGINE_METHOD_ALL failed");
633
+ result = TSI_INVALID_ARGUMENT;
634
+ break;
635
+ }
636
+ if (!ENGINE_init(engine)) {
637
+ gpr_log(GPR_ERROR, "ENGINE_init failed");
638
+ result = TSI_INVALID_ARGUMENT;
639
+ break;
640
+ }
641
+ private_key = ENGINE_load_private_key(engine, key_id, 0, 0);
642
+ if (private_key == nullptr) {
643
+ gpr_log(GPR_ERROR, "ENGINE_load_private_key failed");
644
+ result = TSI_INVALID_ARGUMENT;
645
+ break;
646
+ }
647
+ if (!SSL_CTX_use_PrivateKey(context, private_key)) {
648
+ gpr_log(GPR_ERROR, "SSL_CTX_use_PrivateKey failed");
649
+ result = TSI_INVALID_ARGUMENT;
650
+ break;
651
+ }
652
+ } while (0);
653
+ if (engine != nullptr) ENGINE_free(engine);
654
+ if (private_key != nullptr) EVP_PKEY_free(private_key);
655
+ if (engine_name != nullptr) gpr_free(engine_name);
656
+ return result;
657
+ }
658
+ #endif /* OPENSSL_IS_BORINGSSL */
659
+
660
+ static tsi_result ssl_ctx_use_pem_private_key(SSL_CTX* context,
661
+ const char* pem_key,
662
+ size_t pem_key_size) {
663
+ tsi_result result = TSI_OK;
664
+ EVP_PKEY* private_key = nullptr;
665
+ BIO* pem;
666
+ GPR_ASSERT(pem_key_size <= INT_MAX);
667
+ pem = BIO_new_mem_buf((void*)pem_key, static_cast<int>(pem_key_size));
668
+ if (pem == nullptr) return TSI_OUT_OF_RESOURCES;
669
+ do {
670
+ private_key = PEM_read_bio_PrivateKey(pem, nullptr, nullptr, (void*)"");
671
+ if (private_key == nullptr) {
672
+ result = TSI_INVALID_ARGUMENT;
673
+ break;
674
+ }
675
+ if (!SSL_CTX_use_PrivateKey(context, private_key)) {
676
+ result = TSI_INVALID_ARGUMENT;
677
+ break;
678
+ }
679
+ } while (0);
680
+ if (private_key != nullptr) EVP_PKEY_free(private_key);
681
+ BIO_free(pem);
682
+ return result;
683
+ }
684
+
685
+ /* Loads an in-memory PEM private key into the SSL context. */
686
+ static tsi_result ssl_ctx_use_private_key(SSL_CTX* context, const char* pem_key,
687
+ size_t pem_key_size) {
688
+ // BoringSSL does not have ENGINE support
689
+ #ifndef OPENSSL_IS_BORINGSSL
690
+ if (strncmp(pem_key, kSslEnginePrefix, strlen(kSslEnginePrefix)) == 0) {
691
+ return ssl_ctx_use_engine_private_key(context, pem_key, pem_key_size);
692
+ } else
693
+ #endif /* OPENSSL_IS_BORINGSSL */
694
+ {
695
+ return ssl_ctx_use_pem_private_key(context, pem_key, pem_key_size);
696
+ }
697
+ }
698
+
699
+ /* Loads in-memory PEM verification certs into the SSL context and optionally
700
+ returns the verification cert names (root_names can be NULL). */
701
+ static tsi_result x509_store_load_certs(X509_STORE* cert_store,
702
+ const char* pem_roots,
703
+ size_t pem_roots_size,
704
+ STACK_OF(X509_NAME) * *root_names) {
705
+ tsi_result result = TSI_OK;
706
+ size_t num_roots = 0;
707
+ X509* root = nullptr;
708
+ X509_NAME* root_name = nullptr;
709
+ BIO* pem;
710
+ GPR_ASSERT(pem_roots_size <= INT_MAX);
711
+ pem = BIO_new_mem_buf((void*)pem_roots, static_cast<int>(pem_roots_size));
712
+ if (cert_store == nullptr) return TSI_INVALID_ARGUMENT;
713
+ if (pem == nullptr) return TSI_OUT_OF_RESOURCES;
714
+ if (root_names != nullptr) {
715
+ *root_names = sk_X509_NAME_new_null();
716
+ if (*root_names == nullptr) return TSI_OUT_OF_RESOURCES;
717
+ }
718
+
719
+ while (1) {
720
+ root = PEM_read_bio_X509_AUX(pem, nullptr, nullptr, (void*)"");
721
+ if (root == nullptr) {
722
+ ERR_clear_error();
723
+ break; /* We're at the end of stream. */
724
+ }
725
+ if (root_names != nullptr) {
726
+ root_name = X509_get_subject_name(root);
727
+ if (root_name == nullptr) {
728
+ gpr_log(GPR_ERROR, "Could not get name from root certificate.");
729
+ result = TSI_INVALID_ARGUMENT;
730
+ break;
731
+ }
732
+ root_name = X509_NAME_dup(root_name);
733
+ if (root_name == nullptr) {
734
+ result = TSI_OUT_OF_RESOURCES;
735
+ break;
736
+ }
737
+ sk_X509_NAME_push(*root_names, root_name);
738
+ root_name = nullptr;
739
+ }
740
+ ERR_clear_error();
741
+ if (!X509_STORE_add_cert(cert_store, root)) {
742
+ unsigned long error = ERR_get_error();
743
+ if (ERR_GET_LIB(error) != ERR_LIB_X509 ||
744
+ ERR_GET_REASON(error) != X509_R_CERT_ALREADY_IN_HASH_TABLE) {
745
+ gpr_log(GPR_ERROR, "Could not add root certificate to ssl context.");
746
+ result = TSI_INTERNAL_ERROR;
747
+ break;
748
+ }
749
+ }
750
+ X509_free(root);
751
+ num_roots++;
752
+ }
753
+ if (num_roots == 0) {
754
+ gpr_log(GPR_ERROR, "Could not load any root certificate.");
755
+ result = TSI_INVALID_ARGUMENT;
756
+ }
757
+
758
+ if (result != TSI_OK) {
759
+ if (root != nullptr) X509_free(root);
760
+ if (root_names != nullptr) {
761
+ sk_X509_NAME_pop_free(*root_names, X509_NAME_free);
762
+ *root_names = nullptr;
763
+ if (root_name != nullptr) X509_NAME_free(root_name);
764
+ }
765
+ }
766
+ BIO_free(pem);
767
+ return result;
768
+ }
769
+
770
+ static tsi_result ssl_ctx_load_verification_certs(SSL_CTX* context,
771
+ const char* pem_roots,
772
+ size_t pem_roots_size,
773
+ STACK_OF(X509_NAME) *
774
+ *root_name) {
775
+ X509_STORE* cert_store = SSL_CTX_get_cert_store(context);
776
+ X509_STORE_set_flags(cert_store,
777
+ X509_V_FLAG_PARTIAL_CHAIN | X509_V_FLAG_TRUSTED_FIRST);
778
+ return x509_store_load_certs(cert_store, pem_roots, pem_roots_size,
779
+ root_name);
780
+ }
781
+
782
+ /* Populates the SSL context with a private key and a cert chain, and sets the
783
+ cipher list and the ephemeral ECDH key. */
784
+ static tsi_result populate_ssl_context(
785
+ SSL_CTX* context, const tsi_ssl_pem_key_cert_pair* key_cert_pair,
786
+ const char* cipher_list) {
787
+ tsi_result result = TSI_OK;
788
+ if (key_cert_pair != nullptr) {
789
+ if (key_cert_pair->cert_chain != nullptr) {
790
+ result = ssl_ctx_use_certificate_chain(context, key_cert_pair->cert_chain,
791
+ strlen(key_cert_pair->cert_chain));
792
+ if (result != TSI_OK) {
793
+ gpr_log(GPR_ERROR, "Invalid cert chain file.");
794
+ return result;
795
+ }
796
+ }
797
+ if (key_cert_pair->private_key != nullptr) {
798
+ result = ssl_ctx_use_private_key(context, key_cert_pair->private_key,
799
+ strlen(key_cert_pair->private_key));
800
+ if (result != TSI_OK || !SSL_CTX_check_private_key(context)) {
801
+ gpr_log(GPR_ERROR, "Invalid private key.");
802
+ return result != TSI_OK ? result : TSI_INVALID_ARGUMENT;
803
+ }
804
+ }
805
+ }
806
+ if ((cipher_list != nullptr) &&
807
+ !SSL_CTX_set_cipher_list(context, cipher_list)) {
808
+ gpr_log(GPR_ERROR, "Invalid cipher list: %s.", cipher_list);
809
+ return TSI_INVALID_ARGUMENT;
810
+ }
811
+ {
812
+ EC_KEY* ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
813
+ if (!SSL_CTX_set_tmp_ecdh(context, ecdh)) {
814
+ gpr_log(GPR_ERROR, "Could not set ephemeral ECDH key.");
815
+ EC_KEY_free(ecdh);
816
+ return TSI_INTERNAL_ERROR;
817
+ }
818
+ SSL_CTX_set_options(context, SSL_OP_SINGLE_ECDH_USE);
819
+ EC_KEY_free(ecdh);
820
+ }
821
+ return TSI_OK;
822
+ }
823
+
824
+ /* Extracts the CN and the SANs from an X509 cert as a peer object. */
825
+ tsi_result tsi_ssl_extract_x509_subject_names_from_pem_cert(
826
+ const char* pem_cert, tsi_peer* peer) {
827
+ tsi_result result = TSI_OK;
828
+ X509* cert = nullptr;
829
+ BIO* pem;
830
+ pem = BIO_new_mem_buf((void*)pem_cert, static_cast<int>(strlen(pem_cert)));
831
+ if (pem == nullptr) return TSI_OUT_OF_RESOURCES;
832
+
833
+ cert = PEM_read_bio_X509(pem, nullptr, nullptr, (void*)"");
834
+ if (cert == nullptr) {
835
+ gpr_log(GPR_ERROR, "Invalid certificate");
836
+ result = TSI_INVALID_ARGUMENT;
837
+ } else {
838
+ result = peer_from_x509(cert, 0, peer);
839
+ }
840
+ if (cert != nullptr) X509_free(cert);
841
+ BIO_free(pem);
842
+ return result;
843
+ }
844
+
845
+ /* Builds the alpn protocol name list according to rfc 7301. */
846
+ static tsi_result build_alpn_protocol_name_list(
847
+ const char** alpn_protocols, uint16_t num_alpn_protocols,
848
+ unsigned char** protocol_name_list, size_t* protocol_name_list_length) {
849
+ uint16_t i;
850
+ unsigned char* current;
851
+ *protocol_name_list = nullptr;
852
+ *protocol_name_list_length = 0;
853
+ if (num_alpn_protocols == 0) return TSI_INVALID_ARGUMENT;
854
+ for (i = 0; i < num_alpn_protocols; i++) {
855
+ size_t length =
856
+ alpn_protocols[i] == nullptr ? 0 : strlen(alpn_protocols[i]);
857
+ if (length == 0 || length > 255) {
858
+ gpr_log(GPR_ERROR, "Invalid protocol name length: %d.",
859
+ static_cast<int>(length));
860
+ return TSI_INVALID_ARGUMENT;
861
+ }
862
+ *protocol_name_list_length += length + 1;
863
+ }
864
+ *protocol_name_list =
865
+ static_cast<unsigned char*>(gpr_malloc(*protocol_name_list_length));
866
+ if (*protocol_name_list == nullptr) return TSI_OUT_OF_RESOURCES;
867
+ current = *protocol_name_list;
868
+ for (i = 0; i < num_alpn_protocols; i++) {
869
+ size_t length = strlen(alpn_protocols[i]);
870
+ *(current++) = static_cast<uint8_t>(length); /* max checked above. */
871
+ memcpy(current, alpn_protocols[i], length);
872
+ current += length;
873
+ }
874
+ /* Safety check. */
875
+ if ((current < *protocol_name_list) ||
876
+ (static_cast<uintptr_t>(current - *protocol_name_list) !=
877
+ *protocol_name_list_length)) {
878
+ return TSI_INTERNAL_ERROR;
879
+ }
880
+ return TSI_OK;
881
+ }
882
+
883
+ // The verification callback is used for clients that don't really care about
884
+ // the server's certificate, but we need to pull it anyway, in case a higher
885
+ // layer wants to look at it. In this case the verification may fail, but
886
+ // we don't really care.
887
+ static int NullVerifyCallback(int /*preverify_ok*/, X509_STORE_CTX* /*ctx*/) {
888
+ return 1;
889
+ }
890
+
891
+ /* --- tsi_ssl_root_certs_store methods implementation. ---*/
892
+
893
+ tsi_ssl_root_certs_store* tsi_ssl_root_certs_store_create(
894
+ const char* pem_roots) {
895
+ if (pem_roots == nullptr) {
896
+ gpr_log(GPR_ERROR, "The root certificates are empty.");
897
+ return nullptr;
898
+ }
899
+ tsi_ssl_root_certs_store* root_store = static_cast<tsi_ssl_root_certs_store*>(
900
+ gpr_zalloc(sizeof(tsi_ssl_root_certs_store)));
901
+ if (root_store == nullptr) {
902
+ gpr_log(GPR_ERROR, "Could not allocate buffer for ssl_root_certs_store.");
903
+ return nullptr;
904
+ }
905
+ root_store->store = X509_STORE_new();
906
+ if (root_store->store == nullptr) {
907
+ gpr_log(GPR_ERROR, "Could not allocate buffer for X509_STORE.");
908
+ gpr_free(root_store);
909
+ return nullptr;
910
+ }
911
+ tsi_result result = x509_store_load_certs(root_store->store, pem_roots,
912
+ strlen(pem_roots), nullptr);
913
+ if (result != TSI_OK) {
914
+ gpr_log(GPR_ERROR, "Could not load root certificates.");
915
+ X509_STORE_free(root_store->store);
916
+ gpr_free(root_store);
917
+ return nullptr;
918
+ }
919
+ return root_store;
920
+ }
921
+
922
+ void tsi_ssl_root_certs_store_destroy(tsi_ssl_root_certs_store* self) {
923
+ if (self == nullptr) return;
924
+ X509_STORE_free(self->store);
925
+ gpr_free(self);
926
+ }
927
+
928
+ /* --- tsi_ssl_session_cache methods implementation. ---*/
929
+
930
+ tsi_ssl_session_cache* tsi_ssl_session_cache_create_lru(size_t capacity) {
931
+ /* Pointer will be dereferenced by unref call. */
932
+ return reinterpret_cast<tsi_ssl_session_cache*>(
933
+ tsi::SslSessionLRUCache::Create(capacity).release());
934
+ }
935
+
936
+ void tsi_ssl_session_cache_ref(tsi_ssl_session_cache* cache) {
937
+ /* Pointer will be dereferenced by unref call. */
938
+ reinterpret_cast<tsi::SslSessionLRUCache*>(cache)->Ref().release();
939
+ }
940
+
941
+ void tsi_ssl_session_cache_unref(tsi_ssl_session_cache* cache) {
942
+ reinterpret_cast<tsi::SslSessionLRUCache*>(cache)->Unref();
943
+ }
944
+
945
+ /* --- tsi_frame_protector methods implementation. ---*/
946
+
947
+ static tsi_result ssl_protector_protect(tsi_frame_protector* self,
948
+ const unsigned char* unprotected_bytes,
949
+ size_t* unprotected_bytes_size,
950
+ unsigned char* protected_output_frames,
951
+ size_t* protected_output_frames_size) {
952
+ tsi_ssl_frame_protector* impl =
953
+ reinterpret_cast<tsi_ssl_frame_protector*>(self);
954
+ int read_from_ssl;
955
+ size_t available;
956
+ tsi_result result = TSI_OK;
957
+
958
+ /* First see if we have some pending data in the SSL BIO. */
959
+ int pending_in_ssl = static_cast<int>(BIO_pending(impl->network_io));
960
+ if (pending_in_ssl > 0) {
961
+ *unprotected_bytes_size = 0;
962
+ GPR_ASSERT(*protected_output_frames_size <= INT_MAX);
963
+ read_from_ssl = BIO_read(impl->network_io, protected_output_frames,
964
+ static_cast<int>(*protected_output_frames_size));
965
+ if (read_from_ssl < 0) {
966
+ gpr_log(GPR_ERROR,
967
+ "Could not read from BIO even though some data is pending");
968
+ return TSI_INTERNAL_ERROR;
969
+ }
970
+ *protected_output_frames_size = static_cast<size_t>(read_from_ssl);
971
+ return TSI_OK;
972
+ }
973
+
974
+ /* Now see if we can send a complete frame. */
975
+ available = impl->buffer_size - impl->buffer_offset;
976
+ if (available > *unprotected_bytes_size) {
977
+ /* If we cannot, just copy the data in our internal buffer. */
978
+ memcpy(impl->buffer + impl->buffer_offset, unprotected_bytes,
979
+ *unprotected_bytes_size);
980
+ impl->buffer_offset += *unprotected_bytes_size;
981
+ *protected_output_frames_size = 0;
982
+ return TSI_OK;
983
+ }
984
+
985
+ /* If we can, prepare the buffer, send it to SSL_write and read. */
986
+ memcpy(impl->buffer + impl->buffer_offset, unprotected_bytes, available);
987
+ result = do_ssl_write(impl->ssl, impl->buffer, impl->buffer_size);
988
+ if (result != TSI_OK) return result;
989
+
990
+ GPR_ASSERT(*protected_output_frames_size <= INT_MAX);
991
+ read_from_ssl = BIO_read(impl->network_io, protected_output_frames,
992
+ static_cast<int>(*protected_output_frames_size));
993
+ if (read_from_ssl < 0) {
994
+ gpr_log(GPR_ERROR, "Could not read from BIO after SSL_write.");
995
+ return TSI_INTERNAL_ERROR;
996
+ }
997
+ *protected_output_frames_size = static_cast<size_t>(read_from_ssl);
998
+ *unprotected_bytes_size = available;
999
+ impl->buffer_offset = 0;
1000
+ return TSI_OK;
1001
+ }
1002
+
1003
+ static tsi_result ssl_protector_protect_flush(
1004
+ tsi_frame_protector* self, unsigned char* protected_output_frames,
1005
+ size_t* protected_output_frames_size, size_t* still_pending_size) {
1006
+ tsi_result result = TSI_OK;
1007
+ tsi_ssl_frame_protector* impl =
1008
+ reinterpret_cast<tsi_ssl_frame_protector*>(self);
1009
+ int read_from_ssl = 0;
1010
+ int pending;
1011
+
1012
+ if (impl->buffer_offset != 0) {
1013
+ result = do_ssl_write(impl->ssl, impl->buffer, impl->buffer_offset);
1014
+ if (result != TSI_OK) return result;
1015
+ impl->buffer_offset = 0;
1016
+ }
1017
+
1018
+ pending = static_cast<int>(BIO_pending(impl->network_io));
1019
+ GPR_ASSERT(pending >= 0);
1020
+ *still_pending_size = static_cast<size_t>(pending);
1021
+ if (*still_pending_size == 0) return TSI_OK;
1022
+
1023
+ GPR_ASSERT(*protected_output_frames_size <= INT_MAX);
1024
+ read_from_ssl = BIO_read(impl->network_io, protected_output_frames,
1025
+ static_cast<int>(*protected_output_frames_size));
1026
+ if (read_from_ssl <= 0) {
1027
+ gpr_log(GPR_ERROR, "Could not read from BIO after SSL_write.");
1028
+ return TSI_INTERNAL_ERROR;
1029
+ }
1030
+ *protected_output_frames_size = static_cast<size_t>(read_from_ssl);
1031
+ pending = static_cast<int>(BIO_pending(impl->network_io));
1032
+ GPR_ASSERT(pending >= 0);
1033
+ *still_pending_size = static_cast<size_t>(pending);
1034
+ return TSI_OK;
1035
+ }
1036
+
1037
+ static tsi_result ssl_protector_unprotect(
1038
+ tsi_frame_protector* self, const unsigned char* protected_frames_bytes,
1039
+ size_t* protected_frames_bytes_size, unsigned char* unprotected_bytes,
1040
+ size_t* unprotected_bytes_size) {
1041
+ tsi_result result = TSI_OK;
1042
+ int written_into_ssl = 0;
1043
+ size_t output_bytes_size = *unprotected_bytes_size;
1044
+ size_t output_bytes_offset = 0;
1045
+ tsi_ssl_frame_protector* impl =
1046
+ reinterpret_cast<tsi_ssl_frame_protector*>(self);
1047
+
1048
+ /* First, try to read remaining data from ssl. */
1049
+ result = do_ssl_read(impl->ssl, unprotected_bytes, unprotected_bytes_size);
1050
+ if (result != TSI_OK) return result;
1051
+ if (*unprotected_bytes_size == output_bytes_size) {
1052
+ /* We have read everything we could and cannot process any more input. */
1053
+ *protected_frames_bytes_size = 0;
1054
+ return TSI_OK;
1055
+ }
1056
+ output_bytes_offset = *unprotected_bytes_size;
1057
+ unprotected_bytes += output_bytes_offset;
1058
+ *unprotected_bytes_size = output_bytes_size - output_bytes_offset;
1059
+
1060
+ /* Then, try to write some data to ssl. */
1061
+ GPR_ASSERT(*protected_frames_bytes_size <= INT_MAX);
1062
+ written_into_ssl = BIO_write(impl->network_io, protected_frames_bytes,
1063
+ static_cast<int>(*protected_frames_bytes_size));
1064
+ if (written_into_ssl < 0) {
1065
+ gpr_log(GPR_ERROR, "Sending protected frame to ssl failed with %d",
1066
+ written_into_ssl);
1067
+ return TSI_INTERNAL_ERROR;
1068
+ }
1069
+ *protected_frames_bytes_size = static_cast<size_t>(written_into_ssl);
1070
+
1071
+ /* Now try to read some data again. */
1072
+ result = do_ssl_read(impl->ssl, unprotected_bytes, unprotected_bytes_size);
1073
+ if (result == TSI_OK) {
1074
+ /* Don't forget to output the total number of bytes read. */
1075
+ *unprotected_bytes_size += output_bytes_offset;
1076
+ }
1077
+ return result;
1078
+ }
1079
+
1080
+ static void ssl_protector_destroy(tsi_frame_protector* self) {
1081
+ tsi_ssl_frame_protector* impl =
1082
+ reinterpret_cast<tsi_ssl_frame_protector*>(self);
1083
+ if (impl->buffer != nullptr) gpr_free(impl->buffer);
1084
+ if (impl->ssl != nullptr) SSL_free(impl->ssl);
1085
+ if (impl->network_io != nullptr) BIO_free(impl->network_io);
1086
+ gpr_free(self);
1087
+ }
1088
+
1089
+ static const tsi_frame_protector_vtable frame_protector_vtable = {
1090
+ ssl_protector_protect,
1091
+ ssl_protector_protect_flush,
1092
+ ssl_protector_unprotect,
1093
+ ssl_protector_destroy,
1094
+ };
1095
+
1096
+ /* --- tsi_server_handshaker_factory methods implementation. --- */
1097
+
1098
+ static void tsi_ssl_handshaker_factory_destroy(
1099
+ tsi_ssl_handshaker_factory* self) {
1100
+ if (self == nullptr) return;
1101
+
1102
+ if (self->vtable != nullptr && self->vtable->destroy != nullptr) {
1103
+ self->vtable->destroy(self);
1104
+ }
1105
+ /* Note, we don't free(self) here because this object is always directly
1106
+ * embedded in another object. If tsi_ssl_handshaker_factory_init allocates
1107
+ * any memory, it should be free'd here. */
1108
+ }
1109
+
1110
+ static tsi_ssl_handshaker_factory* tsi_ssl_handshaker_factory_ref(
1111
+ tsi_ssl_handshaker_factory* self) {
1112
+ if (self == nullptr) return nullptr;
1113
+ gpr_refn(&self->refcount, 1);
1114
+ return self;
1115
+ }
1116
+
1117
+ static void tsi_ssl_handshaker_factory_unref(tsi_ssl_handshaker_factory* self) {
1118
+ if (self == nullptr) return;
1119
+
1120
+ if (gpr_unref(&self->refcount)) {
1121
+ tsi_ssl_handshaker_factory_destroy(self);
1122
+ }
1123
+ }
1124
+
1125
+ static tsi_ssl_handshaker_factory_vtable handshaker_factory_vtable = {nullptr};
1126
+
1127
+ /* Initializes a tsi_ssl_handshaker_factory object. Caller is responsible for
1128
+ * allocating memory for the factory. */
1129
+ static void tsi_ssl_handshaker_factory_init(
1130
+ tsi_ssl_handshaker_factory* factory) {
1131
+ GPR_ASSERT(factory != nullptr);
1132
+
1133
+ factory->vtable = &handshaker_factory_vtable;
1134
+ gpr_ref_init(&factory->refcount, 1);
1135
+ }
1136
+
1137
+ /* Gets the X509 cert chain in PEM format as a tsi_peer_property. */
1138
+ tsi_result tsi_ssl_get_cert_chain_contents(STACK_OF(X509) * peer_chain,
1139
+ tsi_peer_property* property) {
1140
+ BIO* bio = BIO_new(BIO_s_mem());
1141
+ const auto peer_chain_len = sk_X509_num(peer_chain);
1142
+ for (auto i = decltype(peer_chain_len){0}; i < peer_chain_len; i++) {
1143
+ if (!PEM_write_bio_X509(bio, sk_X509_value(peer_chain, i))) {
1144
+ BIO_free(bio);
1145
+ return TSI_INTERNAL_ERROR;
1146
+ }
1147
+ }
1148
+ char* contents;
1149
+ long len = BIO_get_mem_data(bio, &contents);
1150
+ if (len <= 0) {
1151
+ BIO_free(bio);
1152
+ return TSI_INTERNAL_ERROR;
1153
+ }
1154
+ tsi_result result = tsi_construct_string_peer_property(
1155
+ TSI_X509_PEM_CERT_CHAIN_PROPERTY, (const char*)contents,
1156
+ static_cast<size_t>(len), property);
1157
+ BIO_free(bio);
1158
+ return result;
1159
+ }
1160
+
1161
+ /* --- tsi_handshaker_result methods implementation. ---*/
1162
+ static tsi_result ssl_handshaker_result_extract_peer(
1163
+ const tsi_handshaker_result* self, tsi_peer* peer) {
1164
+ tsi_result result = TSI_OK;
1165
+ const unsigned char* alpn_selected = nullptr;
1166
+ unsigned int alpn_selected_len;
1167
+ const tsi_ssl_handshaker_result* impl =
1168
+ reinterpret_cast<const tsi_ssl_handshaker_result*>(self);
1169
+ X509* peer_cert = SSL_get_peer_certificate(impl->ssl);
1170
+ if (peer_cert != nullptr) {
1171
+ result = peer_from_x509(peer_cert, 1, peer);
1172
+ X509_free(peer_cert);
1173
+ if (result != TSI_OK) return result;
1174
+ }
1175
+ #if TSI_OPENSSL_ALPN_SUPPORT
1176
+ SSL_get0_alpn_selected(impl->ssl, &alpn_selected, &alpn_selected_len);
1177
+ #endif /* TSI_OPENSSL_ALPN_SUPPORT */
1178
+ if (alpn_selected == nullptr) {
1179
+ /* Try npn. */
1180
+ SSL_get0_next_proto_negotiated(impl->ssl, &alpn_selected,
1181
+ &alpn_selected_len);
1182
+ }
1183
+ // When called on the client side, the stack also contains the
1184
+ // peer's certificate; When called on the server side,
1185
+ // the peer's certificate is not present in the stack
1186
+ STACK_OF(X509)* peer_chain = SSL_get_peer_cert_chain(impl->ssl);
1187
+ // 1 is for session reused property.
1188
+ size_t new_property_count = peer->property_count + 3;
1189
+ if (alpn_selected != nullptr) new_property_count++;
1190
+ if (peer_chain != nullptr) new_property_count++;
1191
+ tsi_peer_property* new_properties = static_cast<tsi_peer_property*>(
1192
+ gpr_zalloc(sizeof(*new_properties) * new_property_count));
1193
+ for (size_t i = 0; i < peer->property_count; i++) {
1194
+ new_properties[i] = peer->properties[i];
1195
+ }
1196
+ if (peer->properties != nullptr) gpr_free(peer->properties);
1197
+ peer->properties = new_properties;
1198
+ // Add peer chain if available
1199
+ if (peer_chain != nullptr) {
1200
+ result = tsi_ssl_get_cert_chain_contents(
1201
+ peer_chain, &peer->properties[peer->property_count]);
1202
+ if (result == TSI_OK) peer->property_count++;
1203
+ }
1204
+ if (alpn_selected != nullptr) {
1205
+ result = tsi_construct_string_peer_property(
1206
+ TSI_SSL_ALPN_SELECTED_PROTOCOL,
1207
+ reinterpret_cast<const char*>(alpn_selected), alpn_selected_len,
1208
+ &peer->properties[peer->property_count]);
1209
+ if (result != TSI_OK) return result;
1210
+ peer->property_count++;
1211
+ }
1212
+ // Add security_level peer property.
1213
+ result = tsi_construct_string_peer_property_from_cstring(
1214
+ TSI_SECURITY_LEVEL_PEER_PROPERTY,
1215
+ tsi_security_level_to_string(TSI_PRIVACY_AND_INTEGRITY),
1216
+ &peer->properties[peer->property_count]);
1217
+ if (result != TSI_OK) return result;
1218
+ peer->property_count++;
1219
+
1220
+ const char* session_reused = SSL_session_reused(impl->ssl) ? "true" : "false";
1221
+ result = tsi_construct_string_peer_property_from_cstring(
1222
+ TSI_SSL_SESSION_REUSED_PEER_PROPERTY, session_reused,
1223
+ &peer->properties[peer->property_count]);
1224
+ if (result != TSI_OK) return result;
1225
+ peer->property_count++;
1226
+ return result;
1227
+ }
1228
+
1229
+ static tsi_result ssl_handshaker_result_create_frame_protector(
1230
+ const tsi_handshaker_result* self, size_t* max_output_protected_frame_size,
1231
+ tsi_frame_protector** protector) {
1232
+ size_t actual_max_output_protected_frame_size =
1233
+ TSI_SSL_MAX_PROTECTED_FRAME_SIZE_UPPER_BOUND;
1234
+ tsi_ssl_handshaker_result* impl =
1235
+ reinterpret_cast<tsi_ssl_handshaker_result*>(
1236
+ const_cast<tsi_handshaker_result*>(self));
1237
+ tsi_ssl_frame_protector* protector_impl =
1238
+ static_cast<tsi_ssl_frame_protector*>(
1239
+ gpr_zalloc(sizeof(*protector_impl)));
1240
+
1241
+ if (max_output_protected_frame_size != nullptr) {
1242
+ if (*max_output_protected_frame_size >
1243
+ TSI_SSL_MAX_PROTECTED_FRAME_SIZE_UPPER_BOUND) {
1244
+ *max_output_protected_frame_size =
1245
+ TSI_SSL_MAX_PROTECTED_FRAME_SIZE_UPPER_BOUND;
1246
+ } else if (*max_output_protected_frame_size <
1247
+ TSI_SSL_MAX_PROTECTED_FRAME_SIZE_LOWER_BOUND) {
1248
+ *max_output_protected_frame_size =
1249
+ TSI_SSL_MAX_PROTECTED_FRAME_SIZE_LOWER_BOUND;
1250
+ }
1251
+ actual_max_output_protected_frame_size = *max_output_protected_frame_size;
1252
+ }
1253
+ protector_impl->buffer_size =
1254
+ actual_max_output_protected_frame_size - TSI_SSL_MAX_PROTECTION_OVERHEAD;
1255
+ protector_impl->buffer =
1256
+ static_cast<unsigned char*>(gpr_malloc(protector_impl->buffer_size));
1257
+ if (protector_impl->buffer == nullptr) {
1258
+ gpr_log(GPR_ERROR,
1259
+ "Could not allocated buffer for tsi_ssl_frame_protector.");
1260
+ gpr_free(protector_impl);
1261
+ return TSI_INTERNAL_ERROR;
1262
+ }
1263
+
1264
+ /* Transfer ownership of ssl and network_io to the frame protector. */
1265
+ protector_impl->ssl = impl->ssl;
1266
+ impl->ssl = nullptr;
1267
+ protector_impl->network_io = impl->network_io;
1268
+ impl->network_io = nullptr;
1269
+ protector_impl->base.vtable = &frame_protector_vtable;
1270
+ *protector = &protector_impl->base;
1271
+ return TSI_OK;
1272
+ }
1273
+
1274
+ static tsi_result ssl_handshaker_result_get_unused_bytes(
1275
+ const tsi_handshaker_result* self, const unsigned char** bytes,
1276
+ size_t* bytes_size) {
1277
+ const tsi_ssl_handshaker_result* impl =
1278
+ reinterpret_cast<const tsi_ssl_handshaker_result*>(self);
1279
+ *bytes_size = impl->unused_bytes_size;
1280
+ *bytes = impl->unused_bytes;
1281
+ return TSI_OK;
1282
+ }
1283
+
1284
+ static void ssl_handshaker_result_destroy(tsi_handshaker_result* self) {
1285
+ tsi_ssl_handshaker_result* impl =
1286
+ reinterpret_cast<tsi_ssl_handshaker_result*>(self);
1287
+ SSL_free(impl->ssl);
1288
+ BIO_free(impl->network_io);
1289
+ gpr_free(impl->unused_bytes);
1290
+ gpr_free(impl);
1291
+ }
1292
+
1293
+ static const tsi_handshaker_result_vtable handshaker_result_vtable = {
1294
+ ssl_handshaker_result_extract_peer,
1295
+ nullptr, /* create_zero_copy_grpc_protector */
1296
+ ssl_handshaker_result_create_frame_protector,
1297
+ ssl_handshaker_result_get_unused_bytes,
1298
+ ssl_handshaker_result_destroy,
1299
+ };
1300
+
1301
+ static tsi_result ssl_handshaker_result_create(
1302
+ tsi_ssl_handshaker* handshaker, const unsigned char* unused_bytes,
1303
+ size_t unused_bytes_size, tsi_handshaker_result** handshaker_result) {
1304
+ if (handshaker == nullptr || handshaker_result == nullptr ||
1305
+ (unused_bytes_size > 0 && unused_bytes == nullptr)) {
1306
+ return TSI_INVALID_ARGUMENT;
1307
+ }
1308
+ tsi_ssl_handshaker_result* result =
1309
+ static_cast<tsi_ssl_handshaker_result*>(gpr_zalloc(sizeof(*result)));
1310
+ result->base.vtable = &handshaker_result_vtable;
1311
+ /* Transfer ownership of ssl and network_io to the handshaker result. */
1312
+ result->ssl = handshaker->ssl;
1313
+ handshaker->ssl = nullptr;
1314
+ result->network_io = handshaker->network_io;
1315
+ handshaker->network_io = nullptr;
1316
+ if (unused_bytes_size > 0) {
1317
+ result->unused_bytes =
1318
+ static_cast<unsigned char*>(gpr_malloc(unused_bytes_size));
1319
+ memcpy(result->unused_bytes, unused_bytes, unused_bytes_size);
1320
+ }
1321
+ result->unused_bytes_size = unused_bytes_size;
1322
+ *handshaker_result = &result->base;
1323
+ return TSI_OK;
1324
+ }
1325
+
1326
+ /* --- tsi_handshaker methods implementation. ---*/
1327
+
1328
+ static tsi_result ssl_handshaker_get_bytes_to_send_to_peer(
1329
+ tsi_ssl_handshaker* impl, unsigned char* bytes, size_t* bytes_size) {
1330
+ int bytes_read_from_ssl = 0;
1331
+ if (bytes == nullptr || bytes_size == nullptr || *bytes_size == 0 ||
1332
+ *bytes_size > INT_MAX) {
1333
+ return TSI_INVALID_ARGUMENT;
1334
+ }
1335
+ GPR_ASSERT(*bytes_size <= INT_MAX);
1336
+ bytes_read_from_ssl =
1337
+ BIO_read(impl->network_io, bytes, static_cast<int>(*bytes_size));
1338
+ if (bytes_read_from_ssl < 0) {
1339
+ *bytes_size = 0;
1340
+ if (!BIO_should_retry(impl->network_io)) {
1341
+ impl->result = TSI_INTERNAL_ERROR;
1342
+ return impl->result;
1343
+ } else {
1344
+ return TSI_OK;
1345
+ }
1346
+ }
1347
+ *bytes_size = static_cast<size_t>(bytes_read_from_ssl);
1348
+ return BIO_pending(impl->network_io) == 0 ? TSI_OK : TSI_INCOMPLETE_DATA;
1349
+ }
1350
+
1351
+ static tsi_result ssl_handshaker_get_result(tsi_ssl_handshaker* impl) {
1352
+ if ((impl->result == TSI_HANDSHAKE_IN_PROGRESS) &&
1353
+ SSL_is_init_finished(impl->ssl)) {
1354
+ impl->result = TSI_OK;
1355
+ }
1356
+ return impl->result;
1357
+ }
1358
+
1359
+ static tsi_result ssl_handshaker_process_bytes_from_peer(
1360
+ tsi_ssl_handshaker* impl, const unsigned char* bytes, size_t* bytes_size) {
1361
+ int bytes_written_into_ssl_size = 0;
1362
+ if (bytes == nullptr || bytes_size == nullptr || *bytes_size > INT_MAX) {
1363
+ return TSI_INVALID_ARGUMENT;
1364
+ }
1365
+ GPR_ASSERT(*bytes_size <= INT_MAX);
1366
+ bytes_written_into_ssl_size =
1367
+ BIO_write(impl->network_io, bytes, static_cast<int>(*bytes_size));
1368
+ if (bytes_written_into_ssl_size < 0) {
1369
+ gpr_log(GPR_ERROR, "Could not write to memory BIO.");
1370
+ impl->result = TSI_INTERNAL_ERROR;
1371
+ return impl->result;
1372
+ }
1373
+ *bytes_size = static_cast<size_t>(bytes_written_into_ssl_size);
1374
+
1375
+ if (ssl_handshaker_get_result(impl) != TSI_HANDSHAKE_IN_PROGRESS) {
1376
+ impl->result = TSI_OK;
1377
+ return impl->result;
1378
+ } else {
1379
+ /* Get ready to get some bytes from SSL. */
1380
+ int ssl_result = SSL_do_handshake(impl->ssl);
1381
+ ssl_result = SSL_get_error(impl->ssl, ssl_result);
1382
+ switch (ssl_result) {
1383
+ case SSL_ERROR_WANT_READ:
1384
+ if (BIO_pending(impl->network_io) == 0) {
1385
+ /* We need more data. */
1386
+ return TSI_INCOMPLETE_DATA;
1387
+ } else {
1388
+ return TSI_OK;
1389
+ }
1390
+ case SSL_ERROR_NONE:
1391
+ return TSI_OK;
1392
+ default: {
1393
+ char err_str[256];
1394
+ ERR_error_string_n(ERR_get_error(), err_str, sizeof(err_str));
1395
+ gpr_log(GPR_ERROR, "Handshake failed with fatal error %s: %s.",
1396
+ ssl_error_string(ssl_result), err_str);
1397
+ impl->result = TSI_PROTOCOL_FAILURE;
1398
+ return impl->result;
1399
+ }
1400
+ }
1401
+ }
1402
+ }
1403
+
1404
+ static void ssl_handshaker_destroy(tsi_handshaker* self) {
1405
+ tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1406
+ SSL_free(impl->ssl);
1407
+ BIO_free(impl->network_io);
1408
+ gpr_free(impl->outgoing_bytes_buffer);
1409
+ tsi_ssl_handshaker_factory_unref(impl->factory_ref);
1410
+ gpr_free(impl);
1411
+ }
1412
+
1413
+ static tsi_result ssl_handshaker_next(
1414
+ tsi_handshaker* self, const unsigned char* received_bytes,
1415
+ size_t received_bytes_size, const unsigned char** bytes_to_send,
1416
+ size_t* bytes_to_send_size, tsi_handshaker_result** handshaker_result,
1417
+ tsi_handshaker_on_next_done_cb /*cb*/, void* /*user_data*/) {
1418
+ /* Input sanity check. */
1419
+ if ((received_bytes_size > 0 && received_bytes == nullptr) ||
1420
+ bytes_to_send == nullptr || bytes_to_send_size == nullptr ||
1421
+ handshaker_result == nullptr) {
1422
+ return TSI_INVALID_ARGUMENT;
1423
+ }
1424
+ /* If there are received bytes, process them first. */
1425
+ tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1426
+ tsi_result status = TSI_OK;
1427
+ size_t bytes_consumed = received_bytes_size;
1428
+ if (received_bytes_size > 0) {
1429
+ status = ssl_handshaker_process_bytes_from_peer(impl, received_bytes,
1430
+ &bytes_consumed);
1431
+ if (status != TSI_OK) return status;
1432
+ }
1433
+ /* Get bytes to send to the peer, if available. */
1434
+ size_t offset = 0;
1435
+ do {
1436
+ size_t to_send_size = impl->outgoing_bytes_buffer_size - offset;
1437
+ status = ssl_handshaker_get_bytes_to_send_to_peer(
1438
+ impl, impl->outgoing_bytes_buffer + offset, &to_send_size);
1439
+ offset += to_send_size;
1440
+ if (status == TSI_INCOMPLETE_DATA) {
1441
+ impl->outgoing_bytes_buffer_size *= 2;
1442
+ impl->outgoing_bytes_buffer = static_cast<unsigned char*>(gpr_realloc(
1443
+ impl->outgoing_bytes_buffer, impl->outgoing_bytes_buffer_size));
1444
+ }
1445
+ } while (status == TSI_INCOMPLETE_DATA);
1446
+ if (status != TSI_OK) return status;
1447
+ *bytes_to_send = impl->outgoing_bytes_buffer;
1448
+ *bytes_to_send_size = offset;
1449
+ /* If handshake completes, create tsi_handshaker_result. */
1450
+ if (ssl_handshaker_get_result(impl) == TSI_HANDSHAKE_IN_PROGRESS) {
1451
+ *handshaker_result = nullptr;
1452
+ } else {
1453
+ size_t unused_bytes_size = received_bytes_size - bytes_consumed;
1454
+ const unsigned char* unused_bytes =
1455
+ unused_bytes_size == 0 ? nullptr : received_bytes + bytes_consumed;
1456
+ status = ssl_handshaker_result_create(impl, unused_bytes, unused_bytes_size,
1457
+ handshaker_result);
1458
+ if (status == TSI_OK) {
1459
+ /* Indicates that the handshake has completed and that a handshaker_result
1460
+ * has been created. */
1461
+ self->handshaker_result_created = true;
1462
+ }
1463
+ }
1464
+ return status;
1465
+ }
1466
+
1467
+ static const tsi_handshaker_vtable handshaker_vtable = {
1468
+ nullptr, /* get_bytes_to_send_to_peer -- deprecated */
1469
+ nullptr, /* process_bytes_from_peer -- deprecated */
1470
+ nullptr, /* get_result -- deprecated */
1471
+ nullptr, /* extract_peer -- deprecated */
1472
+ nullptr, /* create_frame_protector -- deprecated */
1473
+ ssl_handshaker_destroy,
1474
+ ssl_handshaker_next,
1475
+ nullptr, /* shutdown */
1476
+ };
1477
+
1478
+ /* --- tsi_ssl_handshaker_factory common methods. --- */
1479
+
1480
+ static void tsi_ssl_handshaker_resume_session(
1481
+ SSL* ssl, tsi::SslSessionLRUCache* session_cache) {
1482
+ const char* server_name = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
1483
+ if (server_name == nullptr) {
1484
+ return;
1485
+ }
1486
+ tsi::SslSessionPtr session = session_cache->Get(server_name);
1487
+ if (session != nullptr) {
1488
+ // SSL_set_session internally increments reference counter.
1489
+ SSL_set_session(ssl, session.get());
1490
+ }
1491
+ }
1492
+
1493
+ static tsi_result create_tsi_ssl_handshaker(SSL_CTX* ctx, int is_client,
1494
+ const char* server_name_indication,
1495
+ tsi_ssl_handshaker_factory* factory,
1496
+ tsi_handshaker** handshaker) {
1497
+ SSL* ssl = SSL_new(ctx);
1498
+ BIO* network_io = nullptr;
1499
+ BIO* ssl_io = nullptr;
1500
+ tsi_ssl_handshaker* impl = nullptr;
1501
+ *handshaker = nullptr;
1502
+ if (ctx == nullptr) {
1503
+ gpr_log(GPR_ERROR, "SSL Context is null. Should never happen.");
1504
+ return TSI_INTERNAL_ERROR;
1505
+ }
1506
+ if (ssl == nullptr) {
1507
+ return TSI_OUT_OF_RESOURCES;
1508
+ }
1509
+ SSL_set_info_callback(ssl, ssl_info_callback);
1510
+
1511
+ if (!BIO_new_bio_pair(&network_io, 0, &ssl_io, 0)) {
1512
+ gpr_log(GPR_ERROR, "BIO_new_bio_pair failed.");
1513
+ SSL_free(ssl);
1514
+ return TSI_OUT_OF_RESOURCES;
1515
+ }
1516
+ SSL_set_bio(ssl, ssl_io, ssl_io);
1517
+ if (is_client) {
1518
+ int ssl_result;
1519
+ SSL_set_connect_state(ssl);
1520
+ if (server_name_indication != nullptr) {
1521
+ if (!SSL_set_tlsext_host_name(ssl, server_name_indication)) {
1522
+ gpr_log(GPR_ERROR, "Invalid server name indication %s.",
1523
+ server_name_indication);
1524
+ SSL_free(ssl);
1525
+ BIO_free(network_io);
1526
+ return TSI_INTERNAL_ERROR;
1527
+ }
1528
+ }
1529
+ tsi_ssl_client_handshaker_factory* client_factory =
1530
+ reinterpret_cast<tsi_ssl_client_handshaker_factory*>(factory);
1531
+ if (client_factory->session_cache != nullptr) {
1532
+ tsi_ssl_handshaker_resume_session(ssl,
1533
+ client_factory->session_cache.get());
1534
+ }
1535
+ ssl_result = SSL_do_handshake(ssl);
1536
+ ssl_result = SSL_get_error(ssl, ssl_result);
1537
+ if (ssl_result != SSL_ERROR_WANT_READ) {
1538
+ gpr_log(GPR_ERROR,
1539
+ "Unexpected error received from first SSL_do_handshake call: %s",
1540
+ ssl_error_string(ssl_result));
1541
+ SSL_free(ssl);
1542
+ BIO_free(network_io);
1543
+ return TSI_INTERNAL_ERROR;
1544
+ }
1545
+ } else {
1546
+ SSL_set_accept_state(ssl);
1547
+ }
1548
+
1549
+ impl = static_cast<tsi_ssl_handshaker*>(gpr_zalloc(sizeof(*impl)));
1550
+ impl->ssl = ssl;
1551
+ impl->network_io = network_io;
1552
+ impl->result = TSI_HANDSHAKE_IN_PROGRESS;
1553
+ impl->outgoing_bytes_buffer_size =
1554
+ TSI_SSL_HANDSHAKER_OUTGOING_BUFFER_INITIAL_SIZE;
1555
+ impl->outgoing_bytes_buffer =
1556
+ static_cast<unsigned char*>(gpr_zalloc(impl->outgoing_bytes_buffer_size));
1557
+ impl->base.vtable = &handshaker_vtable;
1558
+ impl->factory_ref = tsi_ssl_handshaker_factory_ref(factory);
1559
+ *handshaker = &impl->base;
1560
+ return TSI_OK;
1561
+ }
1562
+
1563
+ static int select_protocol_list(const unsigned char** out,
1564
+ unsigned char* outlen,
1565
+ const unsigned char* client_list,
1566
+ size_t client_list_len,
1567
+ const unsigned char* server_list,
1568
+ size_t server_list_len) {
1569
+ const unsigned char* client_current = client_list;
1570
+ while (static_cast<unsigned int>(client_current - client_list) <
1571
+ client_list_len) {
1572
+ unsigned char client_current_len = *(client_current++);
1573
+ const unsigned char* server_current = server_list;
1574
+ while ((server_current >= server_list) &&
1575
+ static_cast<uintptr_t>(server_current - server_list) <
1576
+ server_list_len) {
1577
+ unsigned char server_current_len = *(server_current++);
1578
+ if ((client_current_len == server_current_len) &&
1579
+ !memcmp(client_current, server_current, server_current_len)) {
1580
+ *out = server_current;
1581
+ *outlen = server_current_len;
1582
+ return SSL_TLSEXT_ERR_OK;
1583
+ }
1584
+ server_current += server_current_len;
1585
+ }
1586
+ client_current += client_current_len;
1587
+ }
1588
+ return SSL_TLSEXT_ERR_NOACK;
1589
+ }
1590
+
1591
+ /* --- tsi_ssl_client_handshaker_factory methods implementation. --- */
1592
+
1593
+ tsi_result tsi_ssl_client_handshaker_factory_create_handshaker(
1594
+ tsi_ssl_client_handshaker_factory* self, const char* server_name_indication,
1595
+ tsi_handshaker** handshaker) {
1596
+ return create_tsi_ssl_handshaker(self->ssl_context, 1, server_name_indication,
1597
+ &self->base, handshaker);
1598
+ }
1599
+
1600
+ void tsi_ssl_client_handshaker_factory_unref(
1601
+ tsi_ssl_client_handshaker_factory* self) {
1602
+ if (self == nullptr) return;
1603
+ tsi_ssl_handshaker_factory_unref(&self->base);
1604
+ }
1605
+
1606
+ static void tsi_ssl_client_handshaker_factory_destroy(
1607
+ tsi_ssl_handshaker_factory* factory) {
1608
+ if (factory == nullptr) return;
1609
+ tsi_ssl_client_handshaker_factory* self =
1610
+ reinterpret_cast<tsi_ssl_client_handshaker_factory*>(factory);
1611
+ if (self->ssl_context != nullptr) SSL_CTX_free(self->ssl_context);
1612
+ if (self->alpn_protocol_list != nullptr) gpr_free(self->alpn_protocol_list);
1613
+ self->session_cache.reset();
1614
+ gpr_free(self);
1615
+ }
1616
+
1617
+ static int client_handshaker_factory_npn_callback(
1618
+ SSL* /*ssl*/, unsigned char** out, unsigned char* outlen,
1619
+ const unsigned char* in, unsigned int inlen, void* arg) {
1620
+ tsi_ssl_client_handshaker_factory* factory =
1621
+ static_cast<tsi_ssl_client_handshaker_factory*>(arg);
1622
+ return select_protocol_list((const unsigned char**)out, outlen,
1623
+ factory->alpn_protocol_list,
1624
+ factory->alpn_protocol_list_length, in, inlen);
1625
+ }
1626
+
1627
+ /* --- tsi_ssl_server_handshaker_factory methods implementation. --- */
1628
+
1629
+ tsi_result tsi_ssl_server_handshaker_factory_create_handshaker(
1630
+ tsi_ssl_server_handshaker_factory* self, tsi_handshaker** handshaker) {
1631
+ if (self->ssl_context_count == 0) return TSI_INVALID_ARGUMENT;
1632
+ /* Create the handshaker with the first context. We will switch if needed
1633
+ because of SNI in ssl_server_handshaker_factory_servername_callback. */
1634
+ return create_tsi_ssl_handshaker(self->ssl_contexts[0], 0, nullptr,
1635
+ &self->base, handshaker);
1636
+ }
1637
+
1638
+ void tsi_ssl_server_handshaker_factory_unref(
1639
+ tsi_ssl_server_handshaker_factory* self) {
1640
+ if (self == nullptr) return;
1641
+ tsi_ssl_handshaker_factory_unref(&self->base);
1642
+ }
1643
+
1644
+ static void tsi_ssl_server_handshaker_factory_destroy(
1645
+ tsi_ssl_handshaker_factory* factory) {
1646
+ if (factory == nullptr) return;
1647
+ tsi_ssl_server_handshaker_factory* self =
1648
+ reinterpret_cast<tsi_ssl_server_handshaker_factory*>(factory);
1649
+ size_t i;
1650
+ for (i = 0; i < self->ssl_context_count; i++) {
1651
+ if (self->ssl_contexts[i] != nullptr) {
1652
+ SSL_CTX_free(self->ssl_contexts[i]);
1653
+ tsi_peer_destruct(&self->ssl_context_x509_subject_names[i]);
1654
+ }
1655
+ }
1656
+ if (self->ssl_contexts != nullptr) gpr_free(self->ssl_contexts);
1657
+ if (self->ssl_context_x509_subject_names != nullptr) {
1658
+ gpr_free(self->ssl_context_x509_subject_names);
1659
+ }
1660
+ if (self->alpn_protocol_list != nullptr) gpr_free(self->alpn_protocol_list);
1661
+ gpr_free(self);
1662
+ }
1663
+
1664
+ static int does_entry_match_name(absl::string_view entry,
1665
+ absl::string_view name) {
1666
+ if (entry.empty()) return 0;
1667
+
1668
+ /* Take care of '.' terminations. */
1669
+ if (name.back() == '.') {
1670
+ name.remove_suffix(1);
1671
+ }
1672
+ if (entry.back() == '.') {
1673
+ entry.remove_suffix(1);
1674
+ if (entry.empty()) return 0;
1675
+ }
1676
+
1677
+ if (absl::EqualsIgnoreCase(name, entry)) {
1678
+ return 1; /* Perfect match. */
1679
+ }
1680
+ if (entry.front() != '*') return 0;
1681
+
1682
+ /* Wildchar subdomain matching. */
1683
+ if (entry.size() < 3 || entry[1] != '.') { /* At least *.x */
1684
+ gpr_log(GPR_ERROR, "Invalid wildchar entry.");
1685
+ return 0;
1686
+ }
1687
+ size_t name_subdomain_pos = name.find('.');
1688
+ if (name_subdomain_pos == absl::string_view::npos) return 0;
1689
+ if (name_subdomain_pos >= name.size() - 2) return 0;
1690
+ absl::string_view name_subdomain =
1691
+ name.substr(name_subdomain_pos + 1); /* Starts after the dot. */
1692
+ entry.remove_prefix(2); /* Remove *. */
1693
+ size_t dot = name_subdomain.find('.');
1694
+ if (dot == absl::string_view::npos || dot == name_subdomain.size() - 1) {
1695
+ gpr_log(GPR_ERROR, "Invalid toplevel subdomain: %s",
1696
+ std::string(name_subdomain).c_str());
1697
+ return 0;
1698
+ }
1699
+ if (name_subdomain.back() == '.') {
1700
+ name_subdomain.remove_suffix(1);
1701
+ }
1702
+ return !entry.empty() && absl::EqualsIgnoreCase(name_subdomain, entry);
1703
+ }
1704
+
1705
+ static int ssl_server_handshaker_factory_servername_callback(SSL* ssl,
1706
+ int* /*ap*/,
1707
+ void* arg) {
1708
+ tsi_ssl_server_handshaker_factory* impl =
1709
+ static_cast<tsi_ssl_server_handshaker_factory*>(arg);
1710
+ size_t i = 0;
1711
+ const char* servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
1712
+ if (servername == nullptr || strlen(servername) == 0) {
1713
+ return SSL_TLSEXT_ERR_NOACK;
1714
+ }
1715
+
1716
+ for (i = 0; i < impl->ssl_context_count; i++) {
1717
+ if (tsi_ssl_peer_matches_name(&impl->ssl_context_x509_subject_names[i],
1718
+ servername)) {
1719
+ SSL_set_SSL_CTX(ssl, impl->ssl_contexts[i]);
1720
+ return SSL_TLSEXT_ERR_OK;
1721
+ }
1722
+ }
1723
+ gpr_log(GPR_ERROR, "No match found for server name: %s.", servername);
1724
+ return SSL_TLSEXT_ERR_NOACK;
1725
+ }
1726
+
1727
+ #if TSI_OPENSSL_ALPN_SUPPORT
1728
+ static int server_handshaker_factory_alpn_callback(
1729
+ SSL* /*ssl*/, const unsigned char** out, unsigned char* outlen,
1730
+ const unsigned char* in, unsigned int inlen, void* arg) {
1731
+ tsi_ssl_server_handshaker_factory* factory =
1732
+ static_cast<tsi_ssl_server_handshaker_factory*>(arg);
1733
+ return select_protocol_list(out, outlen, in, inlen,
1734
+ factory->alpn_protocol_list,
1735
+ factory->alpn_protocol_list_length);
1736
+ }
1737
+ #endif /* TSI_OPENSSL_ALPN_SUPPORT */
1738
+
1739
+ static int server_handshaker_factory_npn_advertised_callback(
1740
+ SSL* /*ssl*/, const unsigned char** out, unsigned int* outlen, void* arg) {
1741
+ tsi_ssl_server_handshaker_factory* factory =
1742
+ static_cast<tsi_ssl_server_handshaker_factory*>(arg);
1743
+ *out = factory->alpn_protocol_list;
1744
+ GPR_ASSERT(factory->alpn_protocol_list_length <= UINT_MAX);
1745
+ *outlen = static_cast<unsigned int>(factory->alpn_protocol_list_length);
1746
+ return SSL_TLSEXT_ERR_OK;
1747
+ }
1748
+
1749
+ /// This callback is called when new \a session is established and ready to
1750
+ /// be cached. This session can be reused for new connections to similar
1751
+ /// servers at later point of time.
1752
+ /// It's intended to be used with SSL_CTX_sess_set_new_cb function.
1753
+ ///
1754
+ /// It returns 1 if callback takes ownership over \a session and 0 otherwise.
1755
+ static int server_handshaker_factory_new_session_callback(
1756
+ SSL* ssl, SSL_SESSION* session) {
1757
+ SSL_CTX* ssl_context = SSL_get_SSL_CTX(ssl);
1758
+ if (ssl_context == nullptr) {
1759
+ return 0;
1760
+ }
1761
+ void* arg = SSL_CTX_get_ex_data(ssl_context, g_ssl_ctx_ex_factory_index);
1762
+ tsi_ssl_client_handshaker_factory* factory =
1763
+ static_cast<tsi_ssl_client_handshaker_factory*>(arg);
1764
+ const char* server_name = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
1765
+ if (server_name == nullptr) {
1766
+ return 0;
1767
+ }
1768
+ factory->session_cache->Put(server_name, tsi::SslSessionPtr(session));
1769
+ // Return 1 to indicate transferred ownership over the given session.
1770
+ return 1;
1771
+ }
1772
+
1773
+ /* --- tsi_ssl_handshaker_factory constructors. --- */
1774
+
1775
+ static tsi_ssl_handshaker_factory_vtable client_handshaker_factory_vtable = {
1776
+ tsi_ssl_client_handshaker_factory_destroy};
1777
+
1778
+ tsi_result tsi_create_ssl_client_handshaker_factory(
1779
+ const tsi_ssl_pem_key_cert_pair* pem_key_cert_pair,
1780
+ const char* pem_root_certs, const char* cipher_suites,
1781
+ const char** alpn_protocols, uint16_t num_alpn_protocols,
1782
+ tsi_ssl_client_handshaker_factory** factory) {
1783
+ tsi_ssl_client_handshaker_options options;
1784
+ options.pem_key_cert_pair = pem_key_cert_pair;
1785
+ options.pem_root_certs = pem_root_certs;
1786
+ options.cipher_suites = cipher_suites;
1787
+ options.alpn_protocols = alpn_protocols;
1788
+ options.num_alpn_protocols = num_alpn_protocols;
1789
+ return tsi_create_ssl_client_handshaker_factory_with_options(&options,
1790
+ factory);
1791
+ }
1792
+
1793
+ tsi_result tsi_create_ssl_client_handshaker_factory_with_options(
1794
+ const tsi_ssl_client_handshaker_options* options,
1795
+ tsi_ssl_client_handshaker_factory** factory) {
1796
+ SSL_CTX* ssl_context = nullptr;
1797
+ tsi_ssl_client_handshaker_factory* impl = nullptr;
1798
+ tsi_result result = TSI_OK;
1799
+
1800
+ gpr_once_init(&g_init_openssl_once, init_openssl);
1801
+
1802
+ if (factory == nullptr) return TSI_INVALID_ARGUMENT;
1803
+ *factory = nullptr;
1804
+ if (options->pem_root_certs == nullptr && options->root_store == nullptr) {
1805
+ return TSI_INVALID_ARGUMENT;
1806
+ }
1807
+
1808
+ #if defined(OPENSSL_NO_TLS1_2_METHOD) || OPENSSL_API_COMPAT >= 0x10100000L
1809
+ ssl_context = SSL_CTX_new(TLS_method());
1810
+ #else
1811
+ ssl_context = SSL_CTX_new(TLSv1_2_method());
1812
+ #endif
1813
+ if (ssl_context == nullptr) {
1814
+ gpr_log(GPR_ERROR, "Could not create ssl context.");
1815
+ return TSI_INVALID_ARGUMENT;
1816
+ }
1817
+
1818
+ impl = static_cast<tsi_ssl_client_handshaker_factory*>(
1819
+ gpr_zalloc(sizeof(*impl)));
1820
+ tsi_ssl_handshaker_factory_init(&impl->base);
1821
+ impl->base.vtable = &client_handshaker_factory_vtable;
1822
+ impl->ssl_context = ssl_context;
1823
+ if (options->session_cache != nullptr) {
1824
+ // Unref is called manually on factory destruction.
1825
+ impl->session_cache =
1826
+ reinterpret_cast<tsi::SslSessionLRUCache*>(options->session_cache)
1827
+ ->Ref();
1828
+ SSL_CTX_set_ex_data(ssl_context, g_ssl_ctx_ex_factory_index, impl);
1829
+ SSL_CTX_sess_set_new_cb(ssl_context,
1830
+ server_handshaker_factory_new_session_callback);
1831
+ SSL_CTX_set_session_cache_mode(ssl_context, SSL_SESS_CACHE_CLIENT);
1832
+ }
1833
+
1834
+ do {
1835
+ result = populate_ssl_context(ssl_context, options->pem_key_cert_pair,
1836
+ options->cipher_suites);
1837
+ if (result != TSI_OK) break;
1838
+
1839
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000
1840
+ // X509_STORE_up_ref is only available since OpenSSL 1.1.
1841
+ if (options->root_store != nullptr) {
1842
+ X509_STORE_up_ref(options->root_store->store);
1843
+ SSL_CTX_set_cert_store(ssl_context, options->root_store->store);
1844
+ }
1845
+ #endif
1846
+ if (OPENSSL_VERSION_NUMBER < 0x10100000 || options->root_store == nullptr) {
1847
+ result = ssl_ctx_load_verification_certs(
1848
+ ssl_context, options->pem_root_certs, strlen(options->pem_root_certs),
1849
+ nullptr);
1850
+ if (result != TSI_OK) {
1851
+ gpr_log(GPR_ERROR, "Cannot load server root certificates.");
1852
+ break;
1853
+ }
1854
+ }
1855
+
1856
+ if (options->num_alpn_protocols != 0) {
1857
+ result = build_alpn_protocol_name_list(
1858
+ options->alpn_protocols, options->num_alpn_protocols,
1859
+ &impl->alpn_protocol_list, &impl->alpn_protocol_list_length);
1860
+ if (result != TSI_OK) {
1861
+ gpr_log(GPR_ERROR, "Building alpn list failed with error %s.",
1862
+ tsi_result_to_string(result));
1863
+ break;
1864
+ }
1865
+ #if TSI_OPENSSL_ALPN_SUPPORT
1866
+ GPR_ASSERT(impl->alpn_protocol_list_length < UINT_MAX);
1867
+ if (SSL_CTX_set_alpn_protos(
1868
+ ssl_context, impl->alpn_protocol_list,
1869
+ static_cast<unsigned int>(impl->alpn_protocol_list_length))) {
1870
+ gpr_log(GPR_ERROR, "Could not set alpn protocol list to context.");
1871
+ result = TSI_INVALID_ARGUMENT;
1872
+ break;
1873
+ }
1874
+ #endif /* TSI_OPENSSL_ALPN_SUPPORT */
1875
+ SSL_CTX_set_next_proto_select_cb(
1876
+ ssl_context, client_handshaker_factory_npn_callback, impl);
1877
+ }
1878
+ } while (0);
1879
+ if (result != TSI_OK) {
1880
+ tsi_ssl_handshaker_factory_unref(&impl->base);
1881
+ return result;
1882
+ }
1883
+ if (options->skip_server_certificate_verification) {
1884
+ SSL_CTX_set_verify(ssl_context, SSL_VERIFY_PEER, NullVerifyCallback);
1885
+ } else {
1886
+ SSL_CTX_set_verify(ssl_context, SSL_VERIFY_PEER, nullptr);
1887
+ }
1888
+ /* TODO(jboeuf): Add revocation verification. */
1889
+
1890
+ *factory = impl;
1891
+ return TSI_OK;
1892
+ }
1893
+
1894
+ static tsi_ssl_handshaker_factory_vtable server_handshaker_factory_vtable = {
1895
+ tsi_ssl_server_handshaker_factory_destroy};
1896
+
1897
+ tsi_result tsi_create_ssl_server_handshaker_factory(
1898
+ const tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs,
1899
+ size_t num_key_cert_pairs, const char* pem_client_root_certs,
1900
+ int force_client_auth, const char* cipher_suites,
1901
+ const char** alpn_protocols, uint16_t num_alpn_protocols,
1902
+ tsi_ssl_server_handshaker_factory** factory) {
1903
+ return tsi_create_ssl_server_handshaker_factory_ex(
1904
+ pem_key_cert_pairs, num_key_cert_pairs, pem_client_root_certs,
1905
+ force_client_auth ? TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
1906
+ : TSI_DONT_REQUEST_CLIENT_CERTIFICATE,
1907
+ cipher_suites, alpn_protocols, num_alpn_protocols, factory);
1908
+ }
1909
+
1910
+ tsi_result tsi_create_ssl_server_handshaker_factory_ex(
1911
+ const tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs,
1912
+ size_t num_key_cert_pairs, const char* pem_client_root_certs,
1913
+ tsi_client_certificate_request_type client_certificate_request,
1914
+ const char* cipher_suites, const char** alpn_protocols,
1915
+ uint16_t num_alpn_protocols, tsi_ssl_server_handshaker_factory** factory) {
1916
+ tsi_ssl_server_handshaker_options options;
1917
+ options.pem_key_cert_pairs = pem_key_cert_pairs;
1918
+ options.num_key_cert_pairs = num_key_cert_pairs;
1919
+ options.pem_client_root_certs = pem_client_root_certs;
1920
+ options.client_certificate_request = client_certificate_request;
1921
+ options.cipher_suites = cipher_suites;
1922
+ options.alpn_protocols = alpn_protocols;
1923
+ options.num_alpn_protocols = num_alpn_protocols;
1924
+ return tsi_create_ssl_server_handshaker_factory_with_options(&options,
1925
+ factory);
1926
+ }
1927
+
1928
+ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
1929
+ const tsi_ssl_server_handshaker_options* options,
1930
+ tsi_ssl_server_handshaker_factory** factory) {
1931
+ tsi_ssl_server_handshaker_factory* impl = nullptr;
1932
+ tsi_result result = TSI_OK;
1933
+ size_t i = 0;
1934
+
1935
+ gpr_once_init(&g_init_openssl_once, init_openssl);
1936
+
1937
+ if (factory == nullptr) return TSI_INVALID_ARGUMENT;
1938
+ *factory = nullptr;
1939
+ if (options->num_key_cert_pairs == 0 ||
1940
+ options->pem_key_cert_pairs == nullptr) {
1941
+ return TSI_INVALID_ARGUMENT;
1942
+ }
1943
+
1944
+ impl = static_cast<tsi_ssl_server_handshaker_factory*>(
1945
+ gpr_zalloc(sizeof(*impl)));
1946
+ tsi_ssl_handshaker_factory_init(&impl->base);
1947
+ impl->base.vtable = &server_handshaker_factory_vtable;
1948
+
1949
+ impl->ssl_contexts = static_cast<SSL_CTX**>(
1950
+ gpr_zalloc(options->num_key_cert_pairs * sizeof(SSL_CTX*)));
1951
+ impl->ssl_context_x509_subject_names = static_cast<tsi_peer*>(
1952
+ gpr_zalloc(options->num_key_cert_pairs * sizeof(tsi_peer)));
1953
+ if (impl->ssl_contexts == nullptr ||
1954
+ impl->ssl_context_x509_subject_names == nullptr) {
1955
+ tsi_ssl_handshaker_factory_unref(&impl->base);
1956
+ return TSI_OUT_OF_RESOURCES;
1957
+ }
1958
+ impl->ssl_context_count = options->num_key_cert_pairs;
1959
+
1960
+ if (options->num_alpn_protocols > 0) {
1961
+ result = build_alpn_protocol_name_list(
1962
+ options->alpn_protocols, options->num_alpn_protocols,
1963
+ &impl->alpn_protocol_list, &impl->alpn_protocol_list_length);
1964
+ if (result != TSI_OK) {
1965
+ tsi_ssl_handshaker_factory_unref(&impl->base);
1966
+ return result;
1967
+ }
1968
+ }
1969
+
1970
+ for (i = 0; i < options->num_key_cert_pairs; i++) {
1971
+ do {
1972
+ #if defined(OPENSSL_NO_TLS1_2_METHOD) || OPENSSL_API_COMPAT >= 0x10100000L
1973
+ impl->ssl_contexts[i] = SSL_CTX_new(TLS_method());
1974
+ #else
1975
+ impl->ssl_contexts[i] = SSL_CTX_new(TLSv1_2_method());
1976
+ #endif
1977
+ if (impl->ssl_contexts[i] == nullptr) {
1978
+ gpr_log(GPR_ERROR, "Could not create ssl context.");
1979
+ result = TSI_OUT_OF_RESOURCES;
1980
+ break;
1981
+ }
1982
+ result = populate_ssl_context(impl->ssl_contexts[i],
1983
+ &options->pem_key_cert_pairs[i],
1984
+ options->cipher_suites);
1985
+ if (result != TSI_OK) break;
1986
+
1987
+ // TODO(elessar): Provide ability to disable session ticket keys.
1988
+
1989
+ // Allow client cache sessions (it's needed for OpenSSL only).
1990
+ int set_sid_ctx_result = SSL_CTX_set_session_id_context(
1991
+ impl->ssl_contexts[i], kSslSessionIdContext,
1992
+ GPR_ARRAY_SIZE(kSslSessionIdContext));
1993
+ if (set_sid_ctx_result == 0) {
1994
+ gpr_log(GPR_ERROR, "Failed to set session id context.");
1995
+ result = TSI_INTERNAL_ERROR;
1996
+ break;
1997
+ }
1998
+
1999
+ if (options->session_ticket_key != nullptr) {
2000
+ if (SSL_CTX_set_tlsext_ticket_keys(
2001
+ impl->ssl_contexts[i],
2002
+ const_cast<char*>(options->session_ticket_key),
2003
+ options->session_ticket_key_size) == 0) {
2004
+ gpr_log(GPR_ERROR, "Invalid STEK size.");
2005
+ result = TSI_INVALID_ARGUMENT;
2006
+ break;
2007
+ }
2008
+ }
2009
+
2010
+ if (options->pem_client_root_certs != nullptr) {
2011
+ STACK_OF(X509_NAME)* root_names = nullptr;
2012
+ result = ssl_ctx_load_verification_certs(
2013
+ impl->ssl_contexts[i], options->pem_client_root_certs,
2014
+ strlen(options->pem_client_root_certs), &root_names);
2015
+ if (result != TSI_OK) {
2016
+ gpr_log(GPR_ERROR, "Invalid verification certs.");
2017
+ break;
2018
+ }
2019
+ SSL_CTX_set_client_CA_list(impl->ssl_contexts[i], root_names);
2020
+ }
2021
+ switch (options->client_certificate_request) {
2022
+ case TSI_DONT_REQUEST_CLIENT_CERTIFICATE:
2023
+ SSL_CTX_set_verify(impl->ssl_contexts[i], SSL_VERIFY_NONE, nullptr);
2024
+ break;
2025
+ case TSI_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY:
2026
+ SSL_CTX_set_verify(impl->ssl_contexts[i], SSL_VERIFY_PEER,
2027
+ NullVerifyCallback);
2028
+ break;
2029
+ case TSI_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY:
2030
+ SSL_CTX_set_verify(impl->ssl_contexts[i], SSL_VERIFY_PEER, nullptr);
2031
+ break;
2032
+ case TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY:
2033
+ SSL_CTX_set_verify(impl->ssl_contexts[i],
2034
+ SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
2035
+ NullVerifyCallback);
2036
+ break;
2037
+ case TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY:
2038
+ SSL_CTX_set_verify(impl->ssl_contexts[i],
2039
+ SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
2040
+ nullptr);
2041
+ break;
2042
+ }
2043
+ /* TODO(jboeuf): Add revocation verification. */
2044
+
2045
+ result = tsi_ssl_extract_x509_subject_names_from_pem_cert(
2046
+ options->pem_key_cert_pairs[i].cert_chain,
2047
+ &impl->ssl_context_x509_subject_names[i]);
2048
+ if (result != TSI_OK) break;
2049
+
2050
+ SSL_CTX_set_tlsext_servername_callback(
2051
+ impl->ssl_contexts[i],
2052
+ ssl_server_handshaker_factory_servername_callback);
2053
+ SSL_CTX_set_tlsext_servername_arg(impl->ssl_contexts[i], impl);
2054
+ #if TSI_OPENSSL_ALPN_SUPPORT
2055
+ SSL_CTX_set_alpn_select_cb(impl->ssl_contexts[i],
2056
+ server_handshaker_factory_alpn_callback, impl);
2057
+ #endif /* TSI_OPENSSL_ALPN_SUPPORT */
2058
+ SSL_CTX_set_next_protos_advertised_cb(
2059
+ impl->ssl_contexts[i],
2060
+ server_handshaker_factory_npn_advertised_callback, impl);
2061
+ } while (0);
2062
+
2063
+ if (result != TSI_OK) {
2064
+ tsi_ssl_handshaker_factory_unref(&impl->base);
2065
+ return result;
2066
+ }
2067
+ }
2068
+
2069
+ *factory = impl;
2070
+ return TSI_OK;
2071
+ }
2072
+
2073
+ /* --- tsi_ssl utils. --- */
2074
+
2075
+ int tsi_ssl_peer_matches_name(const tsi_peer* peer, absl::string_view name) {
2076
+ size_t i = 0;
2077
+ size_t san_count = 0;
2078
+ const tsi_peer_property* cn_property = nullptr;
2079
+ int like_ip = looks_like_ip_address(name);
2080
+
2081
+ /* Check the SAN first. */
2082
+ for (i = 0; i < peer->property_count; i++) {
2083
+ const tsi_peer_property* property = &peer->properties[i];
2084
+ if (property->name == nullptr) continue;
2085
+ if (strcmp(property->name,
2086
+ TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY) == 0) {
2087
+ san_count++;
2088
+
2089
+ absl::string_view entry(property->value.data, property->value.length);
2090
+ if (!like_ip && does_entry_match_name(entry, name)) {
2091
+ return 1;
2092
+ } else if (like_ip && name == entry) {
2093
+ /* IP Addresses are exact matches only. */
2094
+ return 1;
2095
+ }
2096
+ } else if (strcmp(property->name,
2097
+ TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY) == 0) {
2098
+ cn_property = property;
2099
+ }
2100
+ }
2101
+
2102
+ /* If there's no SAN, try the CN, but only if its not like an IP Address */
2103
+ if (san_count == 0 && cn_property != nullptr && !like_ip) {
2104
+ if (does_entry_match_name(absl::string_view(cn_property->value.data,
2105
+ cn_property->value.length),
2106
+ name)) {
2107
+ return 1;
2108
+ }
2109
+ }
2110
+
2111
+ return 0; /* Not found. */
2112
+ }
2113
+
2114
+ /* --- Testing support. --- */
2115
+ const tsi_ssl_handshaker_factory_vtable* tsi_ssl_handshaker_factory_swap_vtable(
2116
+ tsi_ssl_handshaker_factory* factory,
2117
+ tsi_ssl_handshaker_factory_vtable* new_vtable) {
2118
+ GPR_ASSERT(factory != nullptr);
2119
+ GPR_ASSERT(factory->vtable != nullptr);
2120
+
2121
+ const tsi_ssl_handshaker_factory_vtable* orig_vtable = factory->vtable;
2122
+ factory->vtable = new_vtable;
2123
+ return orig_vtable;
2124
+ }