grpc-z 1.11.1

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 (1318) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/Makefile +23896 -0
  4. data/etc/roots.pem +4475 -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 +469 -0
  11. data/include/grpc/grpc_cronet.h +38 -0
  12. data/include/grpc/grpc_posix.h +67 -0
  13. data/include/grpc/grpc_security.h +495 -0
  14. data/include/grpc/grpc_security_constants.h +107 -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 +83 -0
  18. data/include/grpc/impl/codegen/atm_windows.h +126 -0
  19. data/include/grpc/impl/codegen/byte_buffer.h +88 -0
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +42 -0
  21. data/include/grpc/impl/codegen/compression_types.h +107 -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 +669 -0
  27. data/include/grpc/impl/codegen/port_platform.h +507 -0
  28. data/include/grpc/impl/codegen/propagation_bits.h +52 -0
  29. data/include/grpc/impl/codegen/slice.h +147 -0
  30. data/include/grpc/impl/codegen/status.h +153 -0
  31. data/include/grpc/impl/codegen/sync.h +63 -0
  32. data/include/grpc/impl/codegen/sync_custom.h +38 -0
  33. data/include/grpc/impl/codegen/sync_generic.h +48 -0
  34. data/include/grpc/impl/codegen/sync_posix.h +34 -0
  35. data/include/grpc/impl/codegen/sync_windows.h +36 -0
  36. data/include/grpc/load_reporting.h +48 -0
  37. data/include/grpc/module.modulemap +74 -0
  38. data/include/grpc/slice.h +172 -0
  39. data/include/grpc/slice_buffer.h +84 -0
  40. data/include/grpc/status.h +26 -0
  41. data/include/grpc/support/alloc.h +68 -0
  42. data/include/grpc/support/atm.h +26 -0
  43. data/include/grpc/support/atm_gcc_atomic.h +26 -0
  44. data/include/grpc/support/atm_gcc_sync.h +26 -0
  45. data/include/grpc/support/atm_windows.h +26 -0
  46. data/include/grpc/support/cpu.h +44 -0
  47. data/include/grpc/support/log.h +104 -0
  48. data/include/grpc/support/log_windows.h +38 -0
  49. data/include/grpc/support/port_platform.h +24 -0
  50. data/include/grpc/support/string_util.h +49 -0
  51. data/include/grpc/support/sync.h +298 -0
  52. data/include/grpc/support/sync_custom.h +26 -0
  53. data/include/grpc/support/sync_generic.h +26 -0
  54. data/include/grpc/support/sync_posix.h +26 -0
  55. data/include/grpc/support/sync_windows.h +26 -0
  56. data/include/grpc/support/thd_id.h +44 -0
  57. data/include/grpc/support/time.h +92 -0
  58. data/include/grpc/support/workaround_list.h +31 -0
  59. data/src/boringssl/err_data.c +1348 -0
  60. data/src/core/ext/census/grpc_context.cc +38 -0
  61. data/src/core/ext/filters/client_channel/backup_poller.cc +174 -0
  62. data/src/core/ext/filters/client_channel/backup_poller.h +35 -0
  63. data/src/core/ext/filters/client_channel/channel_connectivity.cc +248 -0
  64. data/src/core/ext/filters/client_channel/client_channel.cc +3209 -0
  65. data/src/core/ext/filters/client_channel/client_channel.h +57 -0
  66. data/src/core/ext/filters/client_channel/client_channel_factory.cc +67 -0
  67. data/src/core/ext/filters/client_channel/client_channel_factory.h +74 -0
  68. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +62 -0
  69. data/src/core/ext/filters/client_channel/connector.cc +41 -0
  70. data/src/core/ext/filters/client_channel/connector.h +73 -0
  71. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +370 -0
  72. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +34 -0
  73. data/src/core/ext/filters/client_channel/http_proxy.cc +195 -0
  74. data/src/core/ext/filters/client_channel/http_proxy.h +24 -0
  75. data/src/core/ext/filters/client_channel/lb_policy.cc +59 -0
  76. data/src/core/ext/filters/client_channel/lb_policy.h +201 -0
  77. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +138 -0
  78. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +29 -0
  79. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1906 -0
  80. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +36 -0
  81. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +108 -0
  82. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +152 -0
  83. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +67 -0
  84. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +304 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +88 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +102 -0
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +190 -0
  88. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +591 -0
  89. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +687 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +253 -0
  91. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +136 -0
  92. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +155 -0
  93. data/src/core/ext/filters/client_channel/lb_policy_factory.h +127 -0
  94. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +97 -0
  95. data/src/core/ext/filters/client_channel/lb_policy_registry.h +54 -0
  96. data/src/core/ext/filters/client_channel/method_params.cc +178 -0
  97. data/src/core/ext/filters/client_channel/method_params.h +74 -0
  98. data/src/core/ext/filters/client_channel/parse_address.cc +192 -0
  99. data/src/core/ext/filters/client_channel/parse_address.h +50 -0
  100. data/src/core/ext/filters/client_channel/proxy_mapper.cc +48 -0
  101. data/src/core/ext/filters/client_channel/proxy_mapper.h +74 -0
  102. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +122 -0
  103. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +44 -0
  104. data/src/core/ext/filters/client_channel/resolver.cc +35 -0
  105. data/src/core/ext/filters/client_channel/resolver.h +134 -0
  106. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +493 -0
  107. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +53 -0
  108. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +351 -0
  109. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +593 -0
  110. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +74 -0
  111. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +59 -0
  112. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +340 -0
  113. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +297 -0
  114. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +83 -0
  115. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +214 -0
  116. data/src/core/ext/filters/client_channel/resolver_factory.h +71 -0
  117. data/src/core/ext/filters/client_channel/resolver_registry.cc +178 -0
  118. data/src/core/ext/filters/client_channel/resolver_registry.h +83 -0
  119. data/src/core/ext/filters/client_channel/retry_throttle.cc +191 -0
  120. data/src/core/ext/filters/client_channel/retry_throttle.h +77 -0
  121. data/src/core/ext/filters/client_channel/subchannel.cc +815 -0
  122. data/src/core/ext/filters/client_channel/subchannel.h +183 -0
  123. data/src/core/ext/filters/client_channel/subchannel_index.cc +254 -0
  124. data/src/core/ext/filters/client_channel/subchannel_index.h +79 -0
  125. data/src/core/ext/filters/client_channel/uri_parser.cc +314 -0
  126. data/src/core/ext/filters/client_channel/uri_parser.h +50 -0
  127. data/src/core/ext/filters/deadline/deadline_filter.cc +386 -0
  128. data/src/core/ext/filters/deadline/deadline_filter.h +93 -0
  129. data/src/core/ext/filters/http/client/http_client_filter.cc +558 -0
  130. data/src/core/ext/filters/http/client/http_client_filter.h +31 -0
  131. data/src/core/ext/filters/http/client_authority_filter.cc +156 -0
  132. data/src/core/ext/filters/http/client_authority_filter.h +34 -0
  133. data/src/core/ext/filters/http/http_filters_plugin.cc +89 -0
  134. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +499 -0
  135. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +53 -0
  136. data/src/core/ext/filters/http/server/http_server_filter.cc +434 -0
  137. data/src/core/ext/filters/http/server/http_server_filter.h +29 -0
  138. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +222 -0
  139. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +30 -0
  140. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +71 -0
  141. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +61 -0
  142. data/src/core/ext/filters/max_age/max_age_filter.cc +543 -0
  143. data/src/core/ext/filters/max_age/max_age_filter.h +26 -0
  144. data/src/core/ext/filters/message_size/message_size_filter.cc +324 -0
  145. data/src/core/ext/filters/message_size/message_size_filter.h +26 -0
  146. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +208 -0
  147. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +27 -0
  148. data/src/core/ext/filters/workarounds/workaround_utils.cc +53 -0
  149. data/src/core/ext/filters/workarounds/workaround_utils.h +39 -0
  150. data/src/core/ext/transport/chttp2/alpn/alpn.cc +44 -0
  151. data/src/core/ext/transport/chttp2/alpn/alpn.h +36 -0
  152. data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
  153. data/src/core/ext/transport/chttp2/client/authority.h +36 -0
  154. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +229 -0
  155. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -0
  156. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +110 -0
  157. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +79 -0
  158. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +230 -0
  159. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +353 -0
  160. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  161. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +45 -0
  162. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +74 -0
  163. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +89 -0
  164. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +249 -0
  165. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +56 -0
  166. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +231 -0
  167. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +41 -0
  168. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +35 -0
  169. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3102 -0
  170. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +45 -0
  171. data/src/core/ext/transport/chttp2/transport/flow_control.cc +405 -0
  172. data/src/core/ext/transport/chttp2/transport/flow_control.h +482 -0
  173. data/src/core/ext/transport/chttp2/transport/frame.h +47 -0
  174. data/src/core/ext/transport/chttp2/transport/frame_data.cc +314 -0
  175. data/src/core/ext/transport/chttp2/transport/frame_data.h +84 -0
  176. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +186 -0
  177. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +62 -0
  178. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +131 -0
  179. data/src/core/ext/transport/chttp2/transport/frame_ping.h +45 -0
  180. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +112 -0
  181. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +43 -0
  182. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +238 -0
  183. data/src/core/ext/transport/chttp2/transport/frame_settings.h +60 -0
  184. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +122 -0
  185. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +45 -0
  186. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +699 -0
  187. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
  188. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1680 -0
  189. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +109 -0
  190. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +368 -0
  191. data/src/core/ext/transport/chttp2/transport/hpack_table.h +95 -0
  192. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +62 -0
  193. data/src/core/ext/transport/chttp2/transport/http2_settings.h +62 -0
  194. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +92 -0
  195. data/src/core/ext/transport/chttp2/transport/huffsyms.h +33 -0
  196. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +73 -0
  197. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +49 -0
  198. data/src/core/ext/transport/chttp2/transport/internal.h +799 -0
  199. data/src/core/ext/transport/chttp2/transport/parsing.cc +745 -0
  200. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +216 -0
  201. data/src/core/ext/transport/chttp2/transport/stream_map.cc +167 -0
  202. data/src/core/ext/transport/chttp2/transport/stream_map.h +68 -0
  203. data/src/core/ext/transport/chttp2/transport/varint.cc +56 -0
  204. data/src/core/ext/transport/chttp2/transport/varint.h +60 -0
  205. data/src/core/ext/transport/chttp2/transport/writing.cc +641 -0
  206. data/src/core/ext/transport/inproc/inproc_plugin.cc +28 -0
  207. data/src/core/ext/transport/inproc/inproc_transport.cc +1240 -0
  208. data/src/core/ext/transport/inproc/inproc_transport.h +35 -0
  209. data/src/core/lib/avl/avl.cc +306 -0
  210. data/src/core/lib/avl/avl.h +94 -0
  211. data/src/core/lib/backoff/backoff.cc +78 -0
  212. data/src/core/lib/backoff/backoff.h +89 -0
  213. data/src/core/lib/channel/channel_args.cc +413 -0
  214. data/src/core/lib/channel/channel_args.h +127 -0
  215. data/src/core/lib/channel/channel_stack.cc +258 -0
  216. data/src/core/lib/channel/channel_stack.h +280 -0
  217. data/src/core/lib/channel/channel_stack_builder.cc +314 -0
  218. data/src/core/lib/channel/channel_stack_builder.h +160 -0
  219. data/src/core/lib/channel/channel_trace.cc +239 -0
  220. data/src/core/lib/channel/channel_trace.h +133 -0
  221. data/src/core/lib/channel/channel_trace_registry.cc +80 -0
  222. data/src/core/lib/channel/channel_trace_registry.h +43 -0
  223. data/src/core/lib/channel/connected_channel.cc +236 -0
  224. data/src/core/lib/channel/connected_channel.h +34 -0
  225. data/src/core/lib/channel/context.h +49 -0
  226. data/src/core/lib/channel/handshaker.cc +259 -0
  227. data/src/core/lib/channel/handshaker.h +166 -0
  228. data/src/core/lib/channel/handshaker_factory.cc +41 -0
  229. data/src/core/lib/channel/handshaker_factory.h +50 -0
  230. data/src/core/lib/channel/handshaker_registry.cc +97 -0
  231. data/src/core/lib/channel/handshaker_registry.h +48 -0
  232. data/src/core/lib/channel/status_util.cc +100 -0
  233. data/src/core/lib/channel/status_util.h +58 -0
  234. data/src/core/lib/compression/algorithm_metadata.h +61 -0
  235. data/src/core/lib/compression/compression.cc +174 -0
  236. data/src/core/lib/compression/compression_internal.cc +276 -0
  237. data/src/core/lib/compression/compression_internal.h +88 -0
  238. data/src/core/lib/compression/message_compress.cc +187 -0
  239. data/src/core/lib/compression/message_compress.h +40 -0
  240. data/src/core/lib/compression/stream_compression.cc +79 -0
  241. data/src/core/lib/compression/stream_compression.h +116 -0
  242. data/src/core/lib/compression/stream_compression_gzip.cc +230 -0
  243. data/src/core/lib/compression/stream_compression_gzip.h +28 -0
  244. data/src/core/lib/compression/stream_compression_identity.cc +94 -0
  245. data/src/core/lib/compression/stream_compression_identity.h +29 -0
  246. data/src/core/lib/debug/stats.cc +178 -0
  247. data/src/core/lib/debug/stats.h +61 -0
  248. data/src/core/lib/debug/stats_data.cc +682 -0
  249. data/src/core/lib/debug/stats_data.h +435 -0
  250. data/src/core/lib/debug/trace.cc +144 -0
  251. data/src/core/lib/debug/trace.h +104 -0
  252. data/src/core/lib/gpr/alloc.cc +99 -0
  253. data/src/core/lib/gpr/arena.cc +152 -0
  254. data/src/core/lib/gpr/arena.h +41 -0
  255. data/src/core/lib/gpr/atm.cc +35 -0
  256. data/src/core/lib/gpr/cpu_iphone.cc +36 -0
  257. data/src/core/lib/gpr/cpu_linux.cc +82 -0
  258. data/src/core/lib/gpr/cpu_posix.cc +81 -0
  259. data/src/core/lib/gpr/cpu_windows.cc +33 -0
  260. data/src/core/lib/gpr/env.h +43 -0
  261. data/src/core/lib/gpr/env_linux.cc +82 -0
  262. data/src/core/lib/gpr/env_posix.cc +47 -0
  263. data/src/core/lib/gpr/env_windows.cc +72 -0
  264. data/src/core/lib/gpr/fork.cc +78 -0
  265. data/src/core/lib/gpr/fork.h +35 -0
  266. data/src/core/lib/gpr/host_port.cc +98 -0
  267. data/src/core/lib/gpr/host_port.h +43 -0
  268. data/src/core/lib/gpr/log.cc +96 -0
  269. data/src/core/lib/gpr/log_android.cc +72 -0
  270. data/src/core/lib/gpr/log_linux.cc +93 -0
  271. data/src/core/lib/gpr/log_posix.cc +90 -0
  272. data/src/core/lib/gpr/log_windows.cc +97 -0
  273. data/src/core/lib/gpr/mpscq.cc +117 -0
  274. data/src/core/lib/gpr/mpscq.h +86 -0
  275. data/src/core/lib/gpr/murmur_hash.cc +80 -0
  276. data/src/core/lib/gpr/murmur_hash.h +29 -0
  277. data/src/core/lib/gpr/spinlock.h +46 -0
  278. data/src/core/lib/gpr/string.cc +319 -0
  279. data/src/core/lib/gpr/string.h +109 -0
  280. data/src/core/lib/gpr/string_posix.cc +72 -0
  281. data/src/core/lib/gpr/string_util_windows.cc +82 -0
  282. data/src/core/lib/gpr/string_windows.cc +69 -0
  283. data/src/core/lib/gpr/string_windows.h +32 -0
  284. data/src/core/lib/gpr/sync.cc +124 -0
  285. data/src/core/lib/gpr/sync_posix.cc +107 -0
  286. data/src/core/lib/gpr/sync_windows.cc +118 -0
  287. data/src/core/lib/gpr/time.cc +251 -0
  288. data/src/core/lib/gpr/time_posix.cc +167 -0
  289. data/src/core/lib/gpr/time_precise.cc +78 -0
  290. data/src/core/lib/gpr/time_precise.h +29 -0
  291. data/src/core/lib/gpr/time_windows.cc +98 -0
  292. data/src/core/lib/gpr/tls.h +68 -0
  293. data/src/core/lib/gpr/tls_gcc.h +52 -0
  294. data/src/core/lib/gpr/tls_msvc.h +52 -0
  295. data/src/core/lib/gpr/tls_pthread.cc +30 -0
  296. data/src/core/lib/gpr/tls_pthread.h +56 -0
  297. data/src/core/lib/gpr/tmpfile.h +32 -0
  298. data/src/core/lib/gpr/tmpfile_msys.cc +58 -0
  299. data/src/core/lib/gpr/tmpfile_posix.cc +70 -0
  300. data/src/core/lib/gpr/tmpfile_windows.cc +69 -0
  301. data/src/core/lib/gpr/useful.h +65 -0
  302. data/src/core/lib/gpr/wrap_memcpy.cc +42 -0
  303. data/src/core/lib/gprpp/abstract.h +34 -0
  304. data/src/core/lib/gprpp/atomic.h +30 -0
  305. data/src/core/lib/gprpp/atomic_with_atm.h +57 -0
  306. data/src/core/lib/gprpp/atomic_with_std.h +35 -0
  307. data/src/core/lib/gprpp/debug_location.h +52 -0
  308. data/src/core/lib/gprpp/inlined_vector.h +136 -0
  309. data/src/core/lib/gprpp/manual_constructor.h +213 -0
  310. data/src/core/lib/gprpp/memory.h +111 -0
  311. data/src/core/lib/gprpp/orphanable.h +199 -0
  312. data/src/core/lib/gprpp/ref_counted.h +169 -0
  313. data/src/core/lib/gprpp/ref_counted_ptr.h +112 -0
  314. data/src/core/lib/gprpp/thd.h +135 -0
  315. data/src/core/lib/gprpp/thd_posix.cc +209 -0
  316. data/src/core/lib/gprpp/thd_windows.cc +162 -0
  317. data/src/core/lib/http/format_request.cc +122 -0
  318. data/src/core/lib/http/format_request.h +34 -0
  319. data/src/core/lib/http/httpcli.cc +303 -0
  320. data/src/core/lib/http/httpcli.h +127 -0
  321. data/src/core/lib/http/httpcli_security_connector.cc +202 -0
  322. data/src/core/lib/http/parser.cc +371 -0
  323. data/src/core/lib/http/parser.h +113 -0
  324. data/src/core/lib/iomgr/block_annotate.h +57 -0
  325. data/src/core/lib/iomgr/call_combiner.cc +212 -0
  326. data/src/core/lib/iomgr/call_combiner.h +112 -0
  327. data/src/core/lib/iomgr/closure.h +351 -0
  328. data/src/core/lib/iomgr/combiner.cc +358 -0
  329. data/src/core/lib/iomgr/combiner.h +66 -0
  330. data/src/core/lib/iomgr/endpoint.cc +63 -0
  331. data/src/core/lib/iomgr/endpoint.h +98 -0
  332. data/src/core/lib/iomgr/endpoint_pair.h +34 -0
  333. data/src/core/lib/iomgr/endpoint_pair_posix.cc +73 -0
  334. data/src/core/lib/iomgr/endpoint_pair_uv.cc +40 -0
  335. data/src/core/lib/iomgr/endpoint_pair_windows.cc +87 -0
  336. data/src/core/lib/iomgr/error.cc +793 -0
  337. data/src/core/lib/iomgr/error.h +207 -0
  338. data/src/core/lib/iomgr/error_internal.h +63 -0
  339. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1248 -0
  340. data/src/core/lib/iomgr/ev_epoll1_linux.h +31 -0
  341. data/src/core/lib/iomgr/ev_epollex_linux.cc +1494 -0
  342. data/src/core/lib/iomgr/ev_epollex_linux.h +30 -0
  343. data/src/core/lib/iomgr/ev_epollsig_linux.cc +1735 -0
  344. data/src/core/lib/iomgr/ev_epollsig_linux.h +35 -0
  345. data/src/core/lib/iomgr/ev_poll_posix.cc +1758 -0
  346. data/src/core/lib/iomgr/ev_poll_posix.h +29 -0
  347. data/src/core/lib/iomgr/ev_posix.cc +330 -0
  348. data/src/core/lib/iomgr/ev_posix.h +145 -0
  349. data/src/core/lib/iomgr/ev_windows.cc +30 -0
  350. data/src/core/lib/iomgr/exec_ctx.cc +147 -0
  351. data/src/core/lib/iomgr/exec_ctx.h +210 -0
  352. data/src/core/lib/iomgr/executor.cc +301 -0
  353. data/src/core/lib/iomgr/executor.h +50 -0
  354. data/src/core/lib/iomgr/fork_posix.cc +89 -0
  355. data/src/core/lib/iomgr/fork_windows.cc +41 -0
  356. data/src/core/lib/iomgr/gethostname.h +26 -0
  357. data/src/core/lib/iomgr/gethostname_fallback.cc +30 -0
  358. data/src/core/lib/iomgr/gethostname_host_name_max.cc +40 -0
  359. data/src/core/lib/iomgr/gethostname_sysconf.cc +40 -0
  360. data/src/core/lib/iomgr/iocp_windows.cc +152 -0
  361. data/src/core/lib/iomgr/iocp_windows.h +48 -0
  362. data/src/core/lib/iomgr/iomgr.cc +178 -0
  363. data/src/core/lib/iomgr/iomgr.h +36 -0
  364. data/src/core/lib/iomgr/iomgr_custom.cc +63 -0
  365. data/src/core/lib/iomgr/iomgr_custom.h +47 -0
  366. data/src/core/lib/iomgr/iomgr_internal.cc +43 -0
  367. data/src/core/lib/iomgr/iomgr_internal.h +57 -0
  368. data/src/core/lib/iomgr/iomgr_posix.cc +67 -0
  369. data/src/core/lib/iomgr/iomgr_posix.h +26 -0
  370. data/src/core/lib/iomgr/iomgr_uv.cc +40 -0
  371. data/src/core/lib/iomgr/iomgr_windows.cc +87 -0
  372. data/src/core/lib/iomgr/is_epollexclusive_available.cc +104 -0
  373. data/src/core/lib/iomgr/is_epollexclusive_available.h +36 -0
  374. data/src/core/lib/iomgr/load_file.cc +80 -0
  375. data/src/core/lib/iomgr/load_file.h +35 -0
  376. data/src/core/lib/iomgr/lockfree_event.cc +250 -0
  377. data/src/core/lib/iomgr/lockfree_event.h +72 -0
  378. data/src/core/lib/iomgr/nameser.h +106 -0
  379. data/src/core/lib/iomgr/network_status_tracker.cc +36 -0
  380. data/src/core/lib/iomgr/network_status_tracker.h +32 -0
  381. data/src/core/lib/iomgr/polling_entity.cc +87 -0
  382. data/src/core/lib/iomgr/polling_entity.h +68 -0
  383. data/src/core/lib/iomgr/pollset.cc +56 -0
  384. data/src/core/lib/iomgr/pollset.h +99 -0
  385. data/src/core/lib/iomgr/pollset_custom.cc +106 -0
  386. data/src/core/lib/iomgr/pollset_custom.h +35 -0
  387. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  388. data/src/core/lib/iomgr/pollset_set.h +55 -0
  389. data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
  390. data/src/core/lib/iomgr/pollset_set_custom.h +26 -0
  391. data/src/core/lib/iomgr/pollset_set_windows.cc +51 -0
  392. data/src/core/lib/iomgr/pollset_set_windows.h +26 -0
  393. data/src/core/lib/iomgr/pollset_uv.cc +93 -0
  394. data/src/core/lib/iomgr/pollset_windows.cc +229 -0
  395. data/src/core/lib/iomgr/pollset_windows.h +70 -0
  396. data/src/core/lib/iomgr/port.h +147 -0
  397. data/src/core/lib/iomgr/resolve_address.cc +50 -0
  398. data/src/core/lib/iomgr/resolve_address.h +83 -0
  399. data/src/core/lib/iomgr/resolve_address_custom.cc +187 -0
  400. data/src/core/lib/iomgr/resolve_address_custom.h +43 -0
  401. data/src/core/lib/iomgr/resolve_address_posix.cc +180 -0
  402. data/src/core/lib/iomgr/resolve_address_windows.cc +165 -0
  403. data/src/core/lib/iomgr/resource_quota.cc +871 -0
  404. data/src/core/lib/iomgr/resource_quota.h +142 -0
  405. data/src/core/lib/iomgr/sockaddr.h +32 -0
  406. data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
  407. data/src/core/lib/iomgr/sockaddr_posix.h +55 -0
  408. data/src/core/lib/iomgr/sockaddr_utils.cc +298 -0
  409. data/src/core/lib/iomgr/sockaddr_utils.h +84 -0
  410. data/src/core/lib/iomgr/sockaddr_windows.h +55 -0
  411. data/src/core/lib/iomgr/socket_factory_posix.cc +94 -0
  412. data/src/core/lib/iomgr/socket_factory_posix.h +69 -0
  413. data/src/core/lib/iomgr/socket_mutator.cc +83 -0
  414. data/src/core/lib/iomgr/socket_mutator.h +61 -0
  415. data/src/core/lib/iomgr/socket_utils.h +38 -0
  416. data/src/core/lib/iomgr/socket_utils_common_posix.cc +327 -0
  417. data/src/core/lib/iomgr/socket_utils_linux.cc +43 -0
  418. data/src/core/lib/iomgr/socket_utils_posix.cc +59 -0
  419. data/src/core/lib/iomgr/socket_utils_posix.h +134 -0
  420. data/src/core/lib/iomgr/socket_utils_uv.cc +45 -0
  421. data/src/core/lib/iomgr/socket_utils_windows.cc +43 -0
  422. data/src/core/lib/iomgr/socket_windows.cc +151 -0
  423. data/src/core/lib/iomgr/socket_windows.h +113 -0
  424. data/src/core/lib/iomgr/sys_epoll_wrapper.h +30 -0
  425. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  426. data/src/core/lib/iomgr/tcp_client.h +52 -0
  427. data/src/core/lib/iomgr/tcp_client_custom.cc +151 -0
  428. data/src/core/lib/iomgr/tcp_client_posix.cc +359 -0
  429. data/src/core/lib/iomgr/tcp_client_posix.h +68 -0
  430. data/src/core/lib/iomgr/tcp_client_windows.cc +231 -0
  431. data/src/core/lib/iomgr/tcp_custom.cc +365 -0
  432. data/src/core/lib/iomgr/tcp_custom.h +81 -0
  433. data/src/core/lib/iomgr/tcp_posix.cc +814 -0
  434. data/src/core/lib/iomgr/tcp_posix.h +57 -0
  435. data/src/core/lib/iomgr/tcp_server.cc +73 -0
  436. data/src/core/lib/iomgr/tcp_server.h +122 -0
  437. data/src/core/lib/iomgr/tcp_server_custom.cc +472 -0
  438. data/src/core/lib/iomgr/tcp_server_posix.cc +582 -0
  439. data/src/core/lib/iomgr/tcp_server_utils_posix.h +122 -0
  440. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +208 -0
  441. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +184 -0
  442. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +36 -0
  443. data/src/core/lib/iomgr/tcp_server_windows.cc +559 -0
  444. data/src/core/lib/iomgr/tcp_uv.cc +417 -0
  445. data/src/core/lib/iomgr/tcp_windows.cc +455 -0
  446. data/src/core/lib/iomgr/tcp_windows.h +51 -0
  447. data/src/core/lib/iomgr/time_averaged_stats.cc +64 -0
  448. data/src/core/lib/iomgr/time_averaged_stats.h +73 -0
  449. data/src/core/lib/iomgr/timer.cc +45 -0
  450. data/src/core/lib/iomgr/timer.h +125 -0
  451. data/src/core/lib/iomgr/timer_custom.cc +93 -0
  452. data/src/core/lib/iomgr/timer_custom.h +43 -0
  453. data/src/core/lib/iomgr/timer_generic.cc +663 -0
  454. data/src/core/lib/iomgr/timer_heap.cc +135 -0
  455. data/src/core/lib/iomgr/timer_heap.h +44 -0
  456. data/src/core/lib/iomgr/timer_manager.cc +347 -0
  457. data/src/core/lib/iomgr/timer_manager.h +39 -0
  458. data/src/core/lib/iomgr/timer_uv.cc +63 -0
  459. data/src/core/lib/iomgr/udp_server.cc +692 -0
  460. data/src/core/lib/iomgr/udp_server.h +103 -0
  461. data/src/core/lib/iomgr/unix_sockets_posix.cc +104 -0
  462. data/src/core/lib/iomgr/unix_sockets_posix.h +43 -0
  463. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +49 -0
  464. data/src/core/lib/iomgr/wakeup_fd_cv.cc +107 -0
  465. data/src/core/lib/iomgr/wakeup_fd_cv.h +69 -0
  466. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +83 -0
  467. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +38 -0
  468. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +100 -0
  469. data/src/core/lib/iomgr/wakeup_fd_pipe.h +28 -0
  470. data/src/core/lib/iomgr/wakeup_fd_posix.cc +87 -0
  471. data/src/core/lib/iomgr/wakeup_fd_posix.h +96 -0
  472. data/src/core/lib/json/json.cc +86 -0
  473. data/src/core/lib/json/json.h +94 -0
  474. data/src/core/lib/json/json_common.h +34 -0
  475. data/src/core/lib/json/json_reader.cc +663 -0
  476. data/src/core/lib/json/json_reader.h +146 -0
  477. data/src/core/lib/json/json_string.cc +367 -0
  478. data/src/core/lib/json/json_writer.cc +245 -0
  479. data/src/core/lib/json/json_writer.h +84 -0
  480. data/src/core/lib/profiling/basic_timers.cc +286 -0
  481. data/src/core/lib/profiling/stap_timers.cc +50 -0
  482. data/src/core/lib/profiling/timers.h +94 -0
  483. data/src/core/lib/security/context/security_context.cc +348 -0
  484. data/src/core/lib/security/context/security_context.h +115 -0
  485. data/src/core/lib/security/credentials/alts/alts_credentials.cc +119 -0
  486. data/src/core/lib/security/credentials/alts/alts_credentials.h +102 -0
  487. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  488. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  489. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +67 -0
  490. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  491. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +114 -0
  492. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +126 -0
  493. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  494. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +112 -0
  495. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +58 -0
  496. data/src/core/lib/security/credentials/composite/composite_credentials.cc +269 -0
  497. data/src/core/lib/security/credentials/composite/composite_credentials.h +59 -0
  498. data/src/core/lib/security/credentials/credentials.cc +286 -0
  499. data/src/core/lib/security/credentials/credentials.h +246 -0
  500. data/src/core/lib/security/credentials/credentials_metadata.cc +62 -0
  501. data/src/core/lib/security/credentials/fake/fake_credentials.cc +136 -0
  502. data/src/core/lib/security/credentials/fake/fake_credentials.h +64 -0
  503. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +41 -0
  504. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +322 -0
  505. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +45 -0
  506. data/src/core/lib/security/credentials/iam/iam_credentials.cc +86 -0
  507. data/src/core/lib/security/credentials/iam/iam_credentials.h +31 -0
  508. data/src/core/lib/security/credentials/jwt/json_token.cc +314 -0
  509. data/src/core/lib/security/credentials/jwt/json_token.h +75 -0
  510. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +190 -0
  511. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +49 -0
  512. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +934 -0
  513. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +123 -0
  514. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +532 -0
  515. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +106 -0
  516. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +271 -0
  517. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +46 -0
  518. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +349 -0
  519. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +54 -0
  520. data/src/core/lib/security/security_connector/alts_security_connector.cc +287 -0
  521. data/src/core/lib/security/security_connector/alts_security_connector.h +69 -0
  522. data/src/core/lib/security/security_connector/security_connector.cc +1200 -0
  523. data/src/core/lib/security/security_connector/security_connector.h +283 -0
  524. data/src/core/lib/security/transport/auth_filters.h +37 -0
  525. data/src/core/lib/security/transport/client_auth_filter.cc +418 -0
  526. data/src/core/lib/security/transport/secure_endpoint.cc +429 -0
  527. data/src/core/lib/security/transport/secure_endpoint.h +41 -0
  528. data/src/core/lib/security/transport/security_handshaker.cc +526 -0
  529. data/src/core/lib/security/transport/security_handshaker.h +34 -0
  530. data/src/core/lib/security/transport/server_auth_filter.cc +269 -0
  531. data/src/core/lib/security/transport/target_authority_table.cc +75 -0
  532. data/src/core/lib/security/transport/target_authority_table.h +40 -0
  533. data/src/core/lib/security/transport/tsi_error.cc +29 -0
  534. data/src/core/lib/security/transport/tsi_error.h +29 -0
  535. data/src/core/lib/security/util/json_util.cc +48 -0
  536. data/src/core/lib/security/util/json_util.h +42 -0
  537. data/src/core/lib/slice/b64.cc +240 -0
  538. data/src/core/lib/slice/b64.h +51 -0
  539. data/src/core/lib/slice/percent_encoding.cc +169 -0
  540. data/src/core/lib/slice/percent_encoding.h +65 -0
  541. data/src/core/lib/slice/slice.cc +489 -0
  542. data/src/core/lib/slice/slice_buffer.cc +359 -0
  543. data/src/core/lib/slice/slice_hash_table.h +201 -0
  544. data/src/core/lib/slice/slice_intern.cc +332 -0
  545. data/src/core/lib/slice/slice_internal.h +49 -0
  546. data/src/core/lib/slice/slice_string_helpers.cc +118 -0
  547. data/src/core/lib/slice/slice_string_helpers.h +47 -0
  548. data/src/core/lib/slice/slice_weak_hash_table.h +105 -0
  549. data/src/core/lib/surface/api_trace.cc +24 -0
  550. data/src/core/lib/surface/api_trace.h +52 -0
  551. data/src/core/lib/surface/byte_buffer.cc +92 -0
  552. data/src/core/lib/surface/byte_buffer_reader.cc +129 -0
  553. data/src/core/lib/surface/call.cc +2002 -0
  554. data/src/core/lib/surface/call.h +109 -0
  555. data/src/core/lib/surface/call_details.cc +42 -0
  556. data/src/core/lib/surface/call_log_batch.cc +120 -0
  557. data/src/core/lib/surface/call_test_only.h +43 -0
  558. data/src/core/lib/surface/channel.cc +450 -0
  559. data/src/core/lib/surface/channel.h +83 -0
  560. data/src/core/lib/surface/channel_init.cc +109 -0
  561. data/src/core/lib/surface/channel_init.h +73 -0
  562. data/src/core/lib/surface/channel_ping.cc +65 -0
  563. data/src/core/lib/surface/channel_stack_type.cc +58 -0
  564. data/src/core/lib/surface/channel_stack_type.h +47 -0
  565. data/src/core/lib/surface/completion_queue.cc +1262 -0
  566. data/src/core/lib/surface/completion_queue.h +93 -0
  567. data/src/core/lib/surface/completion_queue_factory.cc +79 -0
  568. data/src/core/lib/surface/completion_queue_factory.h +38 -0
  569. data/src/core/lib/surface/event_string.cc +68 -0
  570. data/src/core/lib/surface/event_string.h +29 -0
  571. data/src/core/lib/surface/init.cc +196 -0
  572. data/src/core/lib/surface/init.h +27 -0
  573. data/src/core/lib/surface/init_secure.cc +81 -0
  574. data/src/core/lib/surface/lame_client.cc +180 -0
  575. data/src/core/lib/surface/lame_client.h +28 -0
  576. data/src/core/lib/surface/metadata_array.cc +36 -0
  577. data/src/core/lib/surface/server.cc +1445 -0
  578. data/src/core/lib/surface/server.h +58 -0
  579. data/src/core/lib/surface/validate_metadata.cc +95 -0
  580. data/src/core/lib/surface/validate_metadata.h +30 -0
  581. data/src/core/lib/surface/version.cc +28 -0
  582. data/src/core/lib/transport/bdp_estimator.cc +87 -0
  583. data/src/core/lib/transport/bdp_estimator.h +94 -0
  584. data/src/core/lib/transport/byte_stream.cc +160 -0
  585. data/src/core/lib/transport/byte_stream.h +164 -0
  586. data/src/core/lib/transport/connectivity_state.cc +196 -0
  587. data/src/core/lib/transport/connectivity_state.h +87 -0
  588. data/src/core/lib/transport/error_utils.cc +118 -0
  589. data/src/core/lib/transport/error_utils.h +46 -0
  590. data/src/core/lib/transport/http2_errors.h +41 -0
  591. data/src/core/lib/transport/metadata.cc +539 -0
  592. data/src/core/lib/transport/metadata.h +165 -0
  593. data/src/core/lib/transport/metadata_batch.cc +329 -0
  594. data/src/core/lib/transport/metadata_batch.h +150 -0
  595. data/src/core/lib/transport/pid_controller.cc +51 -0
  596. data/src/core/lib/transport/pid_controller.h +116 -0
  597. data/src/core/lib/transport/service_config.cc +106 -0
  598. data/src/core/lib/transport/service_config.h +249 -0
  599. data/src/core/lib/transport/static_metadata.cc +601 -0
  600. data/src/core/lib/transport/static_metadata.h +603 -0
  601. data/src/core/lib/transport/status_conversion.cc +100 -0
  602. data/src/core/lib/transport/status_conversion.h +38 -0
  603. data/src/core/lib/transport/status_metadata.cc +54 -0
  604. data/src/core/lib/transport/status_metadata.h +30 -0
  605. data/src/core/lib/transport/timeout_encoding.cc +144 -0
  606. data/src/core/lib/transport/timeout_encoding.h +37 -0
  607. data/src/core/lib/transport/transport.cc +278 -0
  608. data/src/core/lib/transport/transport.h +378 -0
  609. data/src/core/lib/transport/transport_impl.h +71 -0
  610. data/src/core/lib/transport/transport_op_string.cc +214 -0
  611. data/src/core/plugin_registry/grpc_plugin_registry.cc +97 -0
  612. data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
  613. data/src/core/tsi/alts/crypt/gsec.cc +189 -0
  614. data/src/core/tsi/alts/crypt/gsec.h +454 -0
  615. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  616. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  617. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  618. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  619. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
  620. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  621. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  622. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  623. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  624. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  625. data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
  626. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  627. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +316 -0
  628. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +137 -0
  629. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +520 -0
  630. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +323 -0
  631. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +143 -0
  632. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +149 -0
  633. data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +73 -0
  634. data/src/core/tsi/alts/handshaker/alts_tsi_event.h +93 -0
  635. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +483 -0
  636. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +83 -0
  637. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +52 -0
  638. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +58 -0
  639. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +52 -0
  640. data/src/core/tsi/alts/handshaker/altscontext.pb.c +48 -0
  641. data/src/core/tsi/alts/handshaker/altscontext.pb.h +64 -0
  642. data/src/core/tsi/alts/handshaker/handshaker.pb.c +123 -0
  643. data/src/core/tsi/alts/handshaker/handshaker.pb.h +255 -0
  644. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +50 -0
  645. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +78 -0
  646. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +196 -0
  647. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +163 -0
  648. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +180 -0
  649. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +52 -0
  650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  652. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  653. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  654. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +100 -0
  655. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
  656. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  657. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +296 -0
  658. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +52 -0
  659. data/src/core/tsi/alts_transport_security.cc +63 -0
  660. data/src/core/tsi/alts_transport_security.h +47 -0
  661. data/src/core/tsi/fake_transport_security.cc +787 -0
  662. data/src/core/tsi/fake_transport_security.h +45 -0
  663. data/src/core/tsi/ssl/session_cache/ssl_session.h +73 -0
  664. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +58 -0
  665. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +211 -0
  666. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +93 -0
  667. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +76 -0
  668. data/src/core/tsi/ssl_transport_security.cc +1831 -0
  669. data/src/core/tsi/ssl_transport_security.h +314 -0
  670. data/src/core/tsi/ssl_types.h +42 -0
  671. data/src/core/tsi/transport_security.cc +326 -0
  672. data/src/core/tsi/transport_security.h +127 -0
  673. data/src/core/tsi/transport_security_adapter.cc +235 -0
  674. data/src/core/tsi/transport_security_adapter.h +41 -0
  675. data/src/core/tsi/transport_security_grpc.cc +66 -0
  676. data/src/core/tsi/transport_security_grpc.h +74 -0
  677. data/src/core/tsi/transport_security_interface.h +454 -0
  678. data/src/ruby/bin/apis/google/protobuf/empty.rb +29 -0
  679. data/src/ruby/bin/apis/pubsub_demo.rb +241 -0
  680. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +159 -0
  681. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +88 -0
  682. data/src/ruby/bin/math_client.rb +132 -0
  683. data/src/ruby/bin/math_pb.rb +32 -0
  684. data/src/ruby/bin/math_server.rb +191 -0
  685. data/src/ruby/bin/math_services_pb.rb +51 -0
  686. data/src/ruby/bin/noproto_client.rb +93 -0
  687. data/src/ruby/bin/noproto_server.rb +97 -0
  688. data/src/ruby/ext/grpc/extconf.rb +118 -0
  689. data/src/ruby/ext/grpc/rb_byte_buffer.c +64 -0
  690. data/src/ruby/ext/grpc/rb_byte_buffer.h +35 -0
  691. data/src/ruby/ext/grpc/rb_call.c +1041 -0
  692. data/src/ruby/ext/grpc/rb_call.h +53 -0
  693. data/src/ruby/ext/grpc/rb_call_credentials.c +290 -0
  694. data/src/ruby/ext/grpc/rb_call_credentials.h +31 -0
  695. data/src/ruby/ext/grpc/rb_channel.c +828 -0
  696. data/src/ruby/ext/grpc/rb_channel.h +34 -0
  697. data/src/ruby/ext/grpc/rb_channel_args.c +155 -0
  698. data/src/ruby/ext/grpc/rb_channel_args.h +38 -0
  699. data/src/ruby/ext/grpc/rb_channel_credentials.c +263 -0
  700. data/src/ruby/ext/grpc/rb_channel_credentials.h +32 -0
  701. data/src/ruby/ext/grpc/rb_completion_queue.c +100 -0
  702. data/src/ruby/ext/grpc/rb_completion_queue.h +36 -0
  703. data/src/ruby/ext/grpc/rb_compression_options.c +468 -0
  704. data/src/ruby/ext/grpc/rb_compression_options.h +29 -0
  705. data/src/ruby/ext/grpc/rb_event_thread.c +141 -0
  706. data/src/ruby/ext/grpc/rb_event_thread.h +21 -0
  707. data/src/ruby/ext/grpc/rb_grpc.c +340 -0
  708. data/src/ruby/ext/grpc/rb_grpc.h +72 -0
  709. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +507 -0
  710. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +766 -0
  711. data/src/ruby/ext/grpc/rb_loader.c +57 -0
  712. data/src/ruby/ext/grpc/rb_loader.h +25 -0
  713. data/src/ruby/ext/grpc/rb_server.c +366 -0
  714. data/src/ruby/ext/grpc/rb_server.h +32 -0
  715. data/src/ruby/ext/grpc/rb_server_credentials.c +243 -0
  716. data/src/ruby/ext/grpc/rb_server_credentials.h +32 -0
  717. data/src/ruby/lib/grpc.rb +35 -0
  718. data/src/ruby/lib/grpc/core/time_consts.rb +56 -0
  719. data/src/ruby/lib/grpc/errors.rb +201 -0
  720. data/src/ruby/lib/grpc/generic/active_call.rb +674 -0
  721. data/src/ruby/lib/grpc/generic/bidi_call.rb +233 -0
  722. data/src/ruby/lib/grpc/generic/client_stub.rb +501 -0
  723. data/src/ruby/lib/grpc/generic/interceptor_registry.rb +53 -0
  724. data/src/ruby/lib/grpc/generic/interceptors.rb +186 -0
  725. data/src/ruby/lib/grpc/generic/rpc_desc.rb +204 -0
  726. data/src/ruby/lib/grpc/generic/rpc_server.rb +490 -0
  727. data/src/ruby/lib/grpc/generic/service.rb +210 -0
  728. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +35 -0
  729. data/src/ruby/lib/grpc/grpc.rb +24 -0
  730. data/src/ruby/lib/grpc/logconfig.rb +44 -0
  731. data/src/ruby/lib/grpc/notifier.rb +45 -0
  732. data/src/ruby/lib/grpc/version.rb +18 -0
  733. data/src/ruby/pb/README.md +42 -0
  734. data/src/ruby/pb/generate_proto_ruby.sh +43 -0
  735. data/src/ruby/pb/grpc/health/checker.rb +76 -0
  736. data/src/ruby/pb/grpc/health/v1/health_pb.rb +28 -0
  737. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +41 -0
  738. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +44 -0
  739. data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
  740. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +49 -0
  741. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +15 -0
  742. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +82 -0
  743. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +14 -0
  744. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +102 -0
  745. data/src/ruby/pb/test/client.rb +764 -0
  746. data/src/ruby/pb/test/server.rb +252 -0
  747. data/src/ruby/spec/call_credentials_spec.rb +42 -0
  748. data/src/ruby/spec/call_spec.rb +180 -0
  749. data/src/ruby/spec/channel_connection_spec.rb +126 -0
  750. data/src/ruby/spec/channel_credentials_spec.rb +82 -0
  751. data/src/ruby/spec/channel_spec.rb +190 -0
  752. data/src/ruby/spec/client_auth_spec.rb +137 -0
  753. data/src/ruby/spec/client_server_spec.rb +664 -0
  754. data/src/ruby/spec/compression_options_spec.rb +149 -0
  755. data/src/ruby/spec/error_sanity_spec.rb +49 -0
  756. data/src/ruby/spec/generic/active_call_spec.rb +672 -0
  757. data/src/ruby/spec/generic/client_interceptors_spec.rb +153 -0
  758. data/src/ruby/spec/generic/client_stub_spec.rb +1067 -0
  759. data/src/ruby/spec/generic/interceptor_registry_spec.rb +65 -0
  760. data/src/ruby/spec/generic/rpc_desc_spec.rb +374 -0
  761. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +127 -0
  762. data/src/ruby/spec/generic/rpc_server_spec.rb +726 -0
  763. data/src/ruby/spec/generic/server_interceptors_spec.rb +218 -0
  764. data/src/ruby/spec/generic/service_spec.rb +261 -0
  765. data/src/ruby/spec/google_rpc_status_utils_spec.rb +293 -0
  766. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +56 -0
  767. data/src/ruby/spec/pb/health/checker_spec.rb +236 -0
  768. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +54 -0
  769. data/src/ruby/spec/pb/package_with_underscore/data.proto +23 -0
  770. data/src/ruby/spec/pb/package_with_underscore/service.proto +23 -0
  771. data/src/ruby/spec/server_credentials_spec.rb +79 -0
  772. data/src/ruby/spec/server_spec.rb +209 -0
  773. data/src/ruby/spec/spec_helper.rb +60 -0
  774. data/src/ruby/spec/support/helpers.rb +107 -0
  775. data/src/ruby/spec/support/services.rb +147 -0
  776. data/src/ruby/spec/testdata/README +1 -0
  777. data/src/ruby/spec/testdata/ca.pem +15 -0
  778. data/src/ruby/spec/testdata/client.key +16 -0
  779. data/src/ruby/spec/testdata/client.pem +14 -0
  780. data/src/ruby/spec/testdata/server1.key +16 -0
  781. data/src/ruby/spec/testdata/server1.pem +16 -0
  782. data/src/ruby/spec/time_consts_spec.rb +74 -0
  783. data/third_party/address_sorting/address_sorting.c +369 -0
  784. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  785. data/third_party/address_sorting/address_sorting_posix.c +97 -0
  786. data/third_party/address_sorting/address_sorting_windows.c +55 -0
  787. data/third_party/address_sorting/include/address_sorting/address_sorting.h +110 -0
  788. data/third_party/boringssl/crypto/asn1/a_bitstr.c +271 -0
  789. data/third_party/boringssl/crypto/asn1/a_bool.c +110 -0
  790. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +297 -0
  791. data/third_party/boringssl/crypto/asn1/a_dup.c +111 -0
  792. data/third_party/boringssl/crypto/asn1/a_enum.c +195 -0
  793. data/third_party/boringssl/crypto/asn1/a_gentm.c +261 -0
  794. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +150 -0
  795. data/third_party/boringssl/crypto/asn1/a_int.c +474 -0
  796. data/third_party/boringssl/crypto/asn1/a_mbstr.c +409 -0
  797. data/third_party/boringssl/crypto/asn1/a_object.c +275 -0
  798. data/third_party/boringssl/crypto/asn1/a_octet.c +77 -0
  799. data/third_party/boringssl/crypto/asn1/a_print.c +93 -0
  800. data/third_party/boringssl/crypto/asn1/a_strnid.c +312 -0
  801. data/third_party/boringssl/crypto/asn1/a_time.c +213 -0
  802. data/third_party/boringssl/crypto/asn1/a_type.c +151 -0
  803. data/third_party/boringssl/crypto/asn1/a_utctm.c +303 -0
  804. data/third_party/boringssl/crypto/asn1/a_utf8.c +234 -0
  805. data/third_party/boringssl/crypto/asn1/asn1_lib.c +442 -0
  806. data/third_party/boringssl/crypto/asn1/asn1_locl.h +101 -0
  807. data/third_party/boringssl/crypto/asn1/asn1_par.c +80 -0
  808. data/third_party/boringssl/crypto/asn1/asn_pack.c +105 -0
  809. data/third_party/boringssl/crypto/asn1/f_enum.c +93 -0
  810. data/third_party/boringssl/crypto/asn1/f_int.c +97 -0
  811. data/third_party/boringssl/crypto/asn1/f_string.c +91 -0
  812. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1223 -0
  813. data/third_party/boringssl/crypto/asn1/tasn_enc.c +662 -0
  814. data/third_party/boringssl/crypto/asn1/tasn_fre.c +244 -0
  815. data/third_party/boringssl/crypto/asn1/tasn_new.c +387 -0
  816. data/third_party/boringssl/crypto/asn1/tasn_typ.c +131 -0
  817. data/third_party/boringssl/crypto/asn1/tasn_utl.c +280 -0
  818. data/third_party/boringssl/crypto/asn1/time_support.c +206 -0
  819. data/third_party/boringssl/crypto/base64/base64.c +466 -0
  820. data/third_party/boringssl/crypto/bio/bio.c +636 -0
  821. data/third_party/boringssl/crypto/bio/bio_mem.c +330 -0
  822. data/third_party/boringssl/crypto/bio/connect.c +542 -0
  823. data/third_party/boringssl/crypto/bio/fd.c +275 -0
  824. data/third_party/boringssl/crypto/bio/file.c +313 -0
  825. data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
  826. data/third_party/boringssl/crypto/bio/internal.h +111 -0
  827. data/third_party/boringssl/crypto/bio/pair.c +489 -0
  828. data/third_party/boringssl/crypto/bio/printf.c +115 -0
  829. data/third_party/boringssl/crypto/bio/socket.c +202 -0
  830. data/third_party/boringssl/crypto/bio/socket_helper.c +114 -0
  831. data/third_party/boringssl/crypto/bn_extra/bn_asn1.c +64 -0
  832. data/third_party/boringssl/crypto/bn_extra/convert.c +465 -0
  833. data/third_party/boringssl/crypto/buf/buf.c +231 -0
  834. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +52 -0
  835. data/third_party/boringssl/crypto/bytestring/ber.c +264 -0
  836. data/third_party/boringssl/crypto/bytestring/cbb.c +568 -0
  837. data/third_party/boringssl/crypto/bytestring/cbs.c +487 -0
  838. data/third_party/boringssl/crypto/bytestring/internal.h +75 -0
  839. data/third_party/boringssl/crypto/chacha/chacha.c +167 -0
  840. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +114 -0
  841. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +152 -0
  842. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
  843. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
  844. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
  845. data/third_party/boringssl/crypto/cipher_extra/e_null.c +85 -0
  846. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +460 -0
  847. data/third_party/boringssl/crypto/cipher_extra/e_rc4.c +87 -0
  848. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +460 -0
  849. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +681 -0
  850. data/third_party/boringssl/crypto/cipher_extra/internal.h +128 -0
  851. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
  852. data/third_party/boringssl/crypto/cmac/cmac.c +241 -0
  853. data/third_party/boringssl/crypto/conf/conf.c +803 -0
  854. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  855. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  856. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  857. data/third_party/boringssl/crypto/cpu-arm-linux.c +363 -0
  858. data/third_party/boringssl/crypto/cpu-arm.c +38 -0
  859. data/third_party/boringssl/crypto/cpu-intel.c +288 -0
  860. data/third_party/boringssl/crypto/cpu-ppc64le.c +38 -0
  861. data/third_party/boringssl/crypto/crypto.c +198 -0
  862. data/third_party/boringssl/crypto/curve25519/spake25519.c +539 -0
  863. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +247 -0
  864. data/third_party/boringssl/crypto/dh/check.c +217 -0
  865. data/third_party/boringssl/crypto/dh/dh.c +519 -0
  866. data/third_party/boringssl/crypto/dh/dh_asn1.c +160 -0
  867. data/third_party/boringssl/crypto/dh/params.c +93 -0
  868. data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
  869. data/third_party/boringssl/crypto/dsa/dsa.c +984 -0
  870. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +339 -0
  871. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +563 -0
  872. data/third_party/boringssl/crypto/ecdh/ecdh.c +161 -0
  873. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +275 -0
  874. data/third_party/boringssl/crypto/engine/engine.c +98 -0
  875. data/third_party/boringssl/crypto/err/err.c +847 -0
  876. data/third_party/boringssl/crypto/err/internal.h +58 -0
  877. data/third_party/boringssl/crypto/evp/digestsign.c +231 -0
  878. data/third_party/boringssl/crypto/evp/evp.c +362 -0
  879. data/third_party/boringssl/crypto/evp/evp_asn1.c +337 -0
  880. data/third_party/boringssl/crypto/evp/evp_ctx.c +446 -0
  881. data/third_party/boringssl/crypto/evp/internal.h +252 -0
  882. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +268 -0
  883. data/third_party/boringssl/crypto/evp/p_ec.c +239 -0
  884. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +256 -0
  885. data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
  886. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
  887. data/third_party/boringssl/crypto/evp/p_rsa.c +634 -0
  888. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +189 -0
  889. data/third_party/boringssl/crypto/evp/pbkdf.c +146 -0
  890. data/third_party/boringssl/crypto/evp/print.c +489 -0
  891. data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
  892. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  893. data/third_party/boringssl/crypto/ex_data.c +261 -0
  894. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +1100 -0
  895. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
  896. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +138 -0
  897. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +112 -0
  898. data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
  899. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +371 -0
  900. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +540 -0
  901. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +370 -0
  902. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +269 -0
  903. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +254 -0
  904. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +303 -0
  905. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +733 -0
  906. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +1390 -0
  907. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +627 -0
  908. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +710 -0
  909. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +413 -0
  910. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +146 -0
  911. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +483 -0
  912. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +207 -0
  913. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +902 -0
  914. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +894 -0
  915. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +299 -0
  916. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +254 -0
  917. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +53 -0
  918. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +305 -0
  919. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +502 -0
  920. data/third_party/boringssl/crypto/fipsmodule/cipher/aead.c +284 -0
  921. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +615 -0
  922. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +1437 -0
  923. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +233 -0
  924. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +129 -0
  925. data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
  926. data/third_party/boringssl/crypto/fipsmodule/des/des.c +785 -0
  927. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +238 -0
  928. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +256 -0
  929. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +280 -0
  930. data/third_party/boringssl/crypto/fipsmodule/digest/internal.h +112 -0
  931. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +268 -0
  932. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +943 -0
  933. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +517 -0
  934. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +277 -0
  935. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +316 -0
  936. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +404 -0
  937. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +1131 -0
  938. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +1674 -0
  939. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9543 -0
  940. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +456 -0
  941. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +113 -0
  942. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +1052 -0
  943. data/third_party/boringssl/crypto/fipsmodule/ec/util-64.c +109 -0
  944. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +474 -0
  945. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +442 -0
  946. data/third_party/boringssl/crypto/fipsmodule/hmac/hmac.c +228 -0
  947. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +27 -0
  948. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +254 -0
  949. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +298 -0
  950. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +211 -0
  951. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +234 -0
  952. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +220 -0
  953. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +1063 -0
  954. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +384 -0
  955. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +95 -0
  956. data/third_party/boringssl/crypto/fipsmodule/modes/polyval.c +91 -0
  957. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +200 -0
  958. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
  959. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +358 -0
  960. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +302 -0
  961. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +263 -0
  962. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +131 -0
  963. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +692 -0
  964. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +857 -0
  965. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +1051 -0
  966. data/third_party/boringssl/crypto/fipsmodule/sha/sha1-altivec.c +361 -0
  967. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +375 -0
  968. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +337 -0
  969. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +608 -0
  970. data/third_party/boringssl/crypto/hkdf/hkdf.c +112 -0
  971. data/third_party/boringssl/crypto/internal.h +676 -0
  972. data/third_party/boringssl/crypto/lhash/lhash.c +336 -0
  973. data/third_party/boringssl/crypto/mem.c +237 -0
  974. data/third_party/boringssl/crypto/obj/obj.c +621 -0
  975. data/third_party/boringssl/crypto/obj/obj_dat.h +6244 -0
  976. data/third_party/boringssl/crypto/obj/obj_xref.c +122 -0
  977. data/third_party/boringssl/crypto/pem/pem_all.c +262 -0
  978. data/third_party/boringssl/crypto/pem/pem_info.c +379 -0
  979. data/third_party/boringssl/crypto/pem/pem_lib.c +776 -0
  980. data/third_party/boringssl/crypto/pem/pem_oth.c +88 -0
  981. data/third_party/boringssl/crypto/pem/pem_pk8.c +258 -0
  982. data/third_party/boringssl/crypto/pem/pem_pkey.c +227 -0
  983. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  984. data/third_party/boringssl/crypto/pem/pem_xaux.c +65 -0
  985. data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
  986. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
  987. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +233 -0
  988. data/third_party/boringssl/crypto/pkcs8/internal.h +120 -0
  989. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +307 -0
  990. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +513 -0
  991. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
  992. data/third_party/boringssl/crypto/poly1305/internal.h +41 -0
  993. data/third_party/boringssl/crypto/poly1305/poly1305.c +318 -0
  994. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +304 -0
  995. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +839 -0
  996. data/third_party/boringssl/crypto/pool/internal.h +45 -0
  997. data/third_party/boringssl/crypto/pool/pool.c +200 -0
  998. data/third_party/boringssl/crypto/rand_extra/deterministic.c +48 -0
  999. data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
  1000. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +43 -0
  1001. data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
  1002. data/third_party/boringssl/crypto/rand_extra/windows.c +53 -0
  1003. data/third_party/boringssl/crypto/rc4/rc4.c +98 -0
  1004. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  1005. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  1006. data/third_party/boringssl/crypto/rsa_extra/rsa_asn1.c +325 -0
  1007. data/third_party/boringssl/crypto/stack/stack.c +380 -0
  1008. data/third_party/boringssl/crypto/thread.c +110 -0
  1009. data/third_party/boringssl/crypto/thread_none.c +59 -0
  1010. data/third_party/boringssl/crypto/thread_pthread.c +176 -0
  1011. data/third_party/boringssl/crypto/thread_win.c +237 -0
  1012. data/third_party/boringssl/crypto/x509/a_digest.c +96 -0
  1013. data/third_party/boringssl/crypto/x509/a_sign.c +128 -0
  1014. data/third_party/boringssl/crypto/x509/a_strex.c +633 -0
  1015. data/third_party/boringssl/crypto/x509/a_verify.c +115 -0
  1016. data/third_party/boringssl/crypto/x509/algorithm.c +153 -0
  1017. data/third_party/boringssl/crypto/x509/asn1_gen.c +841 -0
  1018. data/third_party/boringssl/crypto/x509/by_dir.c +451 -0
  1019. data/third_party/boringssl/crypto/x509/by_file.c +274 -0
  1020. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  1021. data/third_party/boringssl/crypto/x509/i2d_pr.c +83 -0
  1022. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  1023. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  1024. data/third_party/boringssl/crypto/x509/t_crl.c +128 -0
  1025. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  1026. data/third_party/boringssl/crypto/x509/t_x509.c +547 -0
  1027. data/third_party/boringssl/crypto/x509/t_x509a.c +111 -0
  1028. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  1029. data/third_party/boringssl/crypto/x509/x509.c +157 -0
  1030. data/third_party/boringssl/crypto/x509/x509_att.c +381 -0
  1031. data/third_party/boringssl/crypto/x509/x509_cmp.c +477 -0
  1032. data/third_party/boringssl/crypto/x509/x509_d2.c +106 -0
  1033. data/third_party/boringssl/crypto/x509/x509_def.c +103 -0
  1034. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  1035. data/third_party/boringssl/crypto/x509/x509_lu.c +725 -0
  1036. data/third_party/boringssl/crypto/x509/x509_obj.c +198 -0
  1037. data/third_party/boringssl/crypto/x509/x509_r2x.c +117 -0
  1038. data/third_party/boringssl/crypto/x509/x509_req.c +322 -0
  1039. data/third_party/boringssl/crypto/x509/x509_set.c +164 -0
  1040. data/third_party/boringssl/crypto/x509/x509_trs.c +326 -0
  1041. data/third_party/boringssl/crypto/x509/x509_txt.c +205 -0
  1042. data/third_party/boringssl/crypto/x509/x509_v3.c +278 -0
  1043. data/third_party/boringssl/crypto/x509/x509_vfy.c +2472 -0
  1044. data/third_party/boringssl/crypto/x509/x509_vpm.c +648 -0
  1045. data/third_party/boringssl/crypto/x509/x509cset.c +170 -0
  1046. data/third_party/boringssl/crypto/x509/x509name.c +389 -0
  1047. data/third_party/boringssl/crypto/x509/x509rset.c +81 -0
  1048. data/third_party/boringssl/crypto/x509/x509spki.c +137 -0
  1049. data/third_party/boringssl/crypto/x509/x_algor.c +151 -0
  1050. data/third_party/boringssl/crypto/x509/x_all.c +501 -0
  1051. data/third_party/boringssl/crypto/x509/x_attrib.c +111 -0
  1052. data/third_party/boringssl/crypto/x509/x_crl.c +541 -0
  1053. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  1054. data/third_party/boringssl/crypto/x509/x_info.c +98 -0
  1055. data/third_party/boringssl/crypto/x509/x_name.c +541 -0
  1056. data/third_party/boringssl/crypto/x509/x_pkey.c +106 -0
  1057. data/third_party/boringssl/crypto/x509/x_pubkey.c +368 -0
  1058. data/third_party/boringssl/crypto/x509/x_req.c +109 -0
  1059. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  1060. data/third_party/boringssl/crypto/x509/x_spki.c +80 -0
  1061. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  1062. data/third_party/boringssl/crypto/x509/x_x509.c +328 -0
  1063. data/third_party/boringssl/crypto/x509/x_x509a.c +198 -0
  1064. data/third_party/boringssl/crypto/x509v3/ext_dat.h +143 -0
  1065. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +284 -0
  1066. data/third_party/boringssl/crypto/x509v3/pcy_data.c +130 -0
  1067. data/third_party/boringssl/crypto/x509v3/pcy_int.h +217 -0
  1068. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +155 -0
  1069. data/third_party/boringssl/crypto/x509v3/pcy_map.c +130 -0
  1070. data/third_party/boringssl/crypto/x509v3/pcy_node.c +188 -0
  1071. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +840 -0
  1072. data/third_party/boringssl/crypto/x509v3/v3_akey.c +204 -0
  1073. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +72 -0
  1074. data/third_party/boringssl/crypto/x509v3/v3_alt.c +623 -0
  1075. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +133 -0
  1076. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  1077. data/third_party/boringssl/crypto/x509v3/v3_conf.c +462 -0
  1078. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +502 -0
  1079. data/third_party/boringssl/crypto/x509v3/v3_crld.c +561 -0
  1080. data/third_party/boringssl/crypto/x509v3/v3_enum.c +100 -0
  1081. data/third_party/boringssl/crypto/x509v3/v3_extku.c +148 -0
  1082. data/third_party/boringssl/crypto/x509v3/v3_genn.c +251 -0
  1083. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +122 -0
  1084. data/third_party/boringssl/crypto/x509v3/v3_info.c +219 -0
  1085. data/third_party/boringssl/crypto/x509v3/v3_int.c +91 -0
  1086. data/third_party/boringssl/crypto/x509v3/v3_lib.c +370 -0
  1087. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +501 -0
  1088. data/third_party/boringssl/crypto/x509v3/v3_pci.c +287 -0
  1089. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +57 -0
  1090. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +139 -0
  1091. data/third_party/boringssl/crypto/x509v3/v3_pku.c +110 -0
  1092. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +154 -0
  1093. data/third_party/boringssl/crypto/x509v3/v3_prn.c +229 -0
  1094. data/third_party/boringssl/crypto/x509v3/v3_purp.c +866 -0
  1095. data/third_party/boringssl/crypto/x509v3/v3_skey.c +152 -0
  1096. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +274 -0
  1097. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1352 -0
  1098. data/third_party/boringssl/include/openssl/aead.h +423 -0
  1099. data/third_party/boringssl/include/openssl/aes.h +170 -0
  1100. data/third_party/boringssl/include/openssl/arm_arch.h +121 -0
  1101. data/third_party/boringssl/include/openssl/asn1.h +982 -0
  1102. data/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  1103. data/third_party/boringssl/include/openssl/asn1t.h +892 -0
  1104. data/third_party/boringssl/include/openssl/base.h +469 -0
  1105. data/third_party/boringssl/include/openssl/base64.h +187 -0
  1106. data/third_party/boringssl/include/openssl/bio.h +902 -0
  1107. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  1108. data/third_party/boringssl/include/openssl/bn.h +975 -0
  1109. data/third_party/boringssl/include/openssl/buf.h +137 -0
  1110. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  1111. data/third_party/boringssl/include/openssl/bytestring.h +480 -0
  1112. data/third_party/boringssl/include/openssl/cast.h +96 -0
  1113. data/third_party/boringssl/include/openssl/chacha.h +41 -0
  1114. data/third_party/boringssl/include/openssl/cipher.h +608 -0
  1115. data/third_party/boringssl/include/openssl/cmac.h +87 -0
  1116. data/third_party/boringssl/include/openssl/conf.h +183 -0
  1117. data/third_party/boringssl/include/openssl/cpu.h +196 -0
  1118. data/third_party/boringssl/include/openssl/crypto.h +118 -0
  1119. data/third_party/boringssl/include/openssl/curve25519.h +201 -0
  1120. data/third_party/boringssl/include/openssl/des.h +177 -0
  1121. data/third_party/boringssl/include/openssl/dh.h +298 -0
  1122. data/third_party/boringssl/include/openssl/digest.h +316 -0
  1123. data/third_party/boringssl/include/openssl/dsa.h +435 -0
  1124. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  1125. data/third_party/boringssl/include/openssl/ec.h +407 -0
  1126. data/third_party/boringssl/include/openssl/ec_key.h +341 -0
  1127. data/third_party/boringssl/include/openssl/ecdh.h +101 -0
  1128. data/third_party/boringssl/include/openssl/ecdsa.h +199 -0
  1129. data/third_party/boringssl/include/openssl/engine.h +109 -0
  1130. data/third_party/boringssl/include/openssl/err.h +458 -0
  1131. data/third_party/boringssl/include/openssl/evp.h +873 -0
  1132. data/third_party/boringssl/include/openssl/ex_data.h +203 -0
  1133. data/third_party/boringssl/include/openssl/hkdf.h +64 -0
  1134. data/third_party/boringssl/include/openssl/hmac.h +186 -0
  1135. data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  1136. data/third_party/boringssl/include/openssl/lhash.h +174 -0
  1137. data/third_party/boringssl/include/openssl/lhash_macros.h +174 -0
  1138. data/third_party/boringssl/include/openssl/md4.h +106 -0
  1139. data/third_party/boringssl/include/openssl/md5.h +107 -0
  1140. data/third_party/boringssl/include/openssl/mem.h +156 -0
  1141. data/third_party/boringssl/include/openssl/nid.h +4242 -0
  1142. data/third_party/boringssl/include/openssl/obj.h +233 -0
  1143. data/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  1144. data/third_party/boringssl/include/openssl/objects.h +18 -0
  1145. data/third_party/boringssl/include/openssl/opensslconf.h +67 -0
  1146. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  1147. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  1148. data/third_party/boringssl/include/openssl/pem.h +397 -0
  1149. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  1150. data/third_party/boringssl/include/openssl/pkcs7.h +82 -0
  1151. data/third_party/boringssl/include/openssl/pkcs8.h +230 -0
  1152. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  1153. data/third_party/boringssl/include/openssl/pool.h +91 -0
  1154. data/third_party/boringssl/include/openssl/rand.h +125 -0
  1155. data/third_party/boringssl/include/openssl/rc4.h +96 -0
  1156. data/third_party/boringssl/include/openssl/ripemd.h +107 -0
  1157. data/third_party/boringssl/include/openssl/rsa.h +731 -0
  1158. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  1159. data/third_party/boringssl/include/openssl/sha.h +256 -0
  1160. data/third_party/boringssl/include/openssl/span.h +191 -0
  1161. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  1162. data/third_party/boringssl/include/openssl/ssl.h +4592 -0
  1163. data/third_party/boringssl/include/openssl/ssl3.h +333 -0
  1164. data/third_party/boringssl/include/openssl/stack.h +485 -0
  1165. data/third_party/boringssl/include/openssl/thread.h +191 -0
  1166. data/third_party/boringssl/include/openssl/tls1.h +610 -0
  1167. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  1168. data/third_party/boringssl/include/openssl/x509.h +1176 -0
  1169. data/third_party/boringssl/include/openssl/x509_vfy.h +614 -0
  1170. data/third_party/boringssl/include/openssl/x509v3.h +826 -0
  1171. data/third_party/boringssl/ssl/bio_ssl.cc +179 -0
  1172. data/third_party/boringssl/ssl/custom_extensions.cc +265 -0
  1173. data/third_party/boringssl/ssl/d1_both.cc +837 -0
  1174. data/third_party/boringssl/ssl/d1_lib.cc +267 -0
  1175. data/third_party/boringssl/ssl/d1_pkt.cc +274 -0
  1176. data/third_party/boringssl/ssl/d1_srtp.cc +232 -0
  1177. data/third_party/boringssl/ssl/dtls_method.cc +193 -0
  1178. data/third_party/boringssl/ssl/dtls_record.cc +353 -0
  1179. data/third_party/boringssl/ssl/handshake.cc +616 -0
  1180. data/third_party/boringssl/ssl/handshake_client.cc +1836 -0
  1181. data/third_party/boringssl/ssl/handshake_server.cc +1662 -0
  1182. data/third_party/boringssl/ssl/internal.h +3011 -0
  1183. data/third_party/boringssl/ssl/s3_both.cc +585 -0
  1184. data/third_party/boringssl/ssl/s3_lib.cc +224 -0
  1185. data/third_party/boringssl/ssl/s3_pkt.cc +443 -0
  1186. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
  1187. data/third_party/boringssl/ssl/ssl_asn1.cc +840 -0
  1188. data/third_party/boringssl/ssl/ssl_buffer.cc +286 -0
  1189. data/third_party/boringssl/ssl/ssl_cert.cc +913 -0
  1190. data/third_party/boringssl/ssl/ssl_cipher.cc +1777 -0
  1191. data/third_party/boringssl/ssl/ssl_file.cc +583 -0
  1192. data/third_party/boringssl/ssl/ssl_key_share.cc +250 -0
  1193. data/third_party/boringssl/ssl/ssl_lib.cc +2650 -0
  1194. data/third_party/boringssl/ssl/ssl_privkey.cc +488 -0
  1195. data/third_party/boringssl/ssl/ssl_session.cc +1221 -0
  1196. data/third_party/boringssl/ssl/ssl_stat.cc +224 -0
  1197. data/third_party/boringssl/ssl/ssl_transcript.cc +398 -0
  1198. data/third_party/boringssl/ssl/ssl_versions.cc +472 -0
  1199. data/third_party/boringssl/ssl/ssl_x509.cc +1299 -0
  1200. data/third_party/boringssl/ssl/t1_enc.cc +503 -0
  1201. data/third_party/boringssl/ssl/t1_lib.cc +3457 -0
  1202. data/third_party/boringssl/ssl/tls13_both.cc +551 -0
  1203. data/third_party/boringssl/ssl/tls13_client.cc +977 -0
  1204. data/third_party/boringssl/ssl/tls13_enc.cc +563 -0
  1205. data/third_party/boringssl/ssl/tls13_server.cc +1068 -0
  1206. data/third_party/boringssl/ssl/tls_method.cc +291 -0
  1207. data/third_party/boringssl/ssl/tls_record.cc +712 -0
  1208. data/third_party/boringssl/third_party/fiat/curve25519.c +5062 -0
  1209. data/third_party/boringssl/third_party/fiat/internal.h +142 -0
  1210. data/third_party/cares/ares_build.h +223 -0
  1211. data/third_party/cares/cares/ares.h +658 -0
  1212. data/third_party/cares/cares/ares__close_sockets.c +61 -0
  1213. data/third_party/cares/cares/ares__get_hostent.c +261 -0
  1214. data/third_party/cares/cares/ares__read_line.c +73 -0
  1215. data/third_party/cares/cares/ares__timeval.c +111 -0
  1216. data/third_party/cares/cares/ares_cancel.c +63 -0
  1217. data/third_party/cares/cares/ares_create_query.c +202 -0
  1218. data/third_party/cares/cares/ares_data.c +221 -0
  1219. data/third_party/cares/cares/ares_data.h +72 -0
  1220. data/third_party/cares/cares/ares_destroy.c +108 -0
  1221. data/third_party/cares/cares/ares_dns.h +103 -0
  1222. data/third_party/cares/cares/ares_expand_name.c +209 -0
  1223. data/third_party/cares/cares/ares_expand_string.c +70 -0
  1224. data/third_party/cares/cares/ares_fds.c +59 -0
  1225. data/third_party/cares/cares/ares_free_hostent.c +41 -0
  1226. data/third_party/cares/cares/ares_free_string.c +25 -0
  1227. data/third_party/cares/cares/ares_getenv.c +30 -0
  1228. data/third_party/cares/cares/ares_getenv.h +26 -0
  1229. data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
  1230. data/third_party/cares/cares/ares_gethostbyname.c +518 -0
  1231. data/third_party/cares/cares/ares_getnameinfo.c +442 -0
  1232. data/third_party/cares/cares/ares_getopt.c +122 -0
  1233. data/third_party/cares/cares/ares_getopt.h +53 -0
  1234. data/third_party/cares/cares/ares_getsock.c +66 -0
  1235. data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
  1236. data/third_party/cares/cares/ares_init.c +2514 -0
  1237. data/third_party/cares/cares/ares_iphlpapi.h +221 -0
  1238. data/third_party/cares/cares/ares_ipv6.h +78 -0
  1239. data/third_party/cares/cares/ares_library_init.c +177 -0
  1240. data/third_party/cares/cares/ares_library_init.h +43 -0
  1241. data/third_party/cares/cares/ares_llist.c +63 -0
  1242. data/third_party/cares/cares/ares_llist.h +39 -0
  1243. data/third_party/cares/cares/ares_mkquery.c +24 -0
  1244. data/third_party/cares/cares/ares_nowarn.c +260 -0
  1245. data/third_party/cares/cares/ares_nowarn.h +61 -0
  1246. data/third_party/cares/cares/ares_options.c +402 -0
  1247. data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
  1248. data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
  1249. data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
  1250. data/third_party/cares/cares/ares_parse_naptr_reply.c +193 -0
  1251. data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
  1252. data/third_party/cares/cares/ares_parse_ptr_reply.c +219 -0
  1253. data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
  1254. data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
  1255. data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
  1256. data/third_party/cares/cares/ares_platform.c +11035 -0
  1257. data/third_party/cares/cares/ares_platform.h +43 -0
  1258. data/third_party/cares/cares/ares_private.h +374 -0
  1259. data/third_party/cares/cares/ares_process.c +1448 -0
  1260. data/third_party/cares/cares/ares_query.c +186 -0
  1261. data/third_party/cares/cares/ares_rules.h +125 -0
  1262. data/third_party/cares/cares/ares_search.c +316 -0
  1263. data/third_party/cares/cares/ares_send.c +131 -0
  1264. data/third_party/cares/cares/ares_setup.h +217 -0
  1265. data/third_party/cares/cares/ares_strcasecmp.c +66 -0
  1266. data/third_party/cares/cares/ares_strcasecmp.h +30 -0
  1267. data/third_party/cares/cares/ares_strdup.c +49 -0
  1268. data/third_party/cares/cares/ares_strdup.h +24 -0
  1269. data/third_party/cares/cares/ares_strerror.c +56 -0
  1270. data/third_party/cares/cares/ares_timeout.c +88 -0
  1271. data/third_party/cares/cares/ares_version.c +11 -0
  1272. data/third_party/cares/cares/ares_version.h +24 -0
  1273. data/third_party/cares/cares/ares_writev.c +79 -0
  1274. data/third_party/cares/cares/bitncmp.c +59 -0
  1275. data/third_party/cares/cares/bitncmp.h +26 -0
  1276. data/third_party/cares/cares/config-win32.h +351 -0
  1277. data/third_party/cares/cares/inet_net_pton.c +450 -0
  1278. data/third_party/cares/cares/inet_ntop.c +208 -0
  1279. data/third_party/cares/cares/setup_once.h +554 -0
  1280. data/third_party/cares/cares/windows_port.c +22 -0
  1281. data/third_party/cares/config_darwin/ares_config.h +425 -0
  1282. data/third_party/cares/config_freebsd/ares_config.h +502 -0
  1283. data/third_party/cares/config_linux/ares_config.h +458 -0
  1284. data/third_party/cares/config_openbsd/ares_config.h +502 -0
  1285. data/third_party/nanopb/pb.h +579 -0
  1286. data/third_party/nanopb/pb_common.c +97 -0
  1287. data/third_party/nanopb/pb_common.h +42 -0
  1288. data/third_party/nanopb/pb_decode.c +1347 -0
  1289. data/third_party/nanopb/pb_decode.h +149 -0
  1290. data/third_party/nanopb/pb_encode.c +696 -0
  1291. data/third_party/nanopb/pb_encode.h +154 -0
  1292. data/third_party/zlib/adler32.c +186 -0
  1293. data/third_party/zlib/compress.c +86 -0
  1294. data/third_party/zlib/crc32.c +442 -0
  1295. data/third_party/zlib/crc32.h +441 -0
  1296. data/third_party/zlib/deflate.c +2163 -0
  1297. data/third_party/zlib/deflate.h +349 -0
  1298. data/third_party/zlib/gzclose.c +25 -0
  1299. data/third_party/zlib/gzguts.h +218 -0
  1300. data/third_party/zlib/gzlib.c +637 -0
  1301. data/third_party/zlib/gzread.c +654 -0
  1302. data/third_party/zlib/gzwrite.c +665 -0
  1303. data/third_party/zlib/infback.c +640 -0
  1304. data/third_party/zlib/inffast.c +323 -0
  1305. data/third_party/zlib/inffast.h +11 -0
  1306. data/third_party/zlib/inffixed.h +94 -0
  1307. data/third_party/zlib/inflate.c +1561 -0
  1308. data/third_party/zlib/inflate.h +125 -0
  1309. data/third_party/zlib/inftrees.c +304 -0
  1310. data/third_party/zlib/inftrees.h +62 -0
  1311. data/third_party/zlib/trees.c +1203 -0
  1312. data/third_party/zlib/trees.h +128 -0
  1313. data/third_party/zlib/uncompr.c +93 -0
  1314. data/third_party/zlib/zconf.h +534 -0
  1315. data/third_party/zlib/zlib.h +1912 -0
  1316. data/third_party/zlib/zutil.c +325 -0
  1317. data/third_party/zlib/zutil.h +271 -0
  1318. metadata +1586 -0
@@ -0,0 +1,54 @@
1
+ /*
2
+ *
3
+ * Copyright 2016 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
+ #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_SSL_SSL_CREDENTIALS_H
19
+ #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_SSL_SSL_CREDENTIALS_H
20
+
21
+ #include <grpc/support/port_platform.h>
22
+
23
+ #include "src/core/lib/security/credentials/credentials.h"
24
+
25
+ typedef struct {
26
+ grpc_channel_credentials base;
27
+ grpc_ssl_config config;
28
+ } grpc_ssl_credentials;
29
+
30
+ struct grpc_ssl_server_certificate_config {
31
+ grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs;
32
+ size_t num_key_cert_pairs;
33
+ char* pem_root_certs;
34
+ };
35
+
36
+ typedef struct {
37
+ grpc_ssl_server_certificate_config_callback cb;
38
+ void* user_data;
39
+ } grpc_ssl_server_certificate_config_fetcher;
40
+
41
+ typedef struct {
42
+ grpc_server_credentials base;
43
+ grpc_ssl_server_config config;
44
+ grpc_ssl_server_certificate_config_fetcher certificate_config_fetcher;
45
+ } grpc_ssl_server_credentials;
46
+
47
+ tsi_ssl_pem_key_cert_pair* grpc_convert_grpc_to_tsi_cert_pairs(
48
+ const grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs,
49
+ size_t num_key_cert_pairs);
50
+
51
+ void grpc_tsi_ssl_pem_key_cert_pairs_destroy(tsi_ssl_pem_key_cert_pair* kp,
52
+ size_t num_key_cert_pairs);
53
+
54
+ #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_SSL_SSL_CREDENTIALS_H */
@@ -0,0 +1,287 @@
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/lib/security/security_connector/alts_security_connector.h"
22
+
23
+ #include <stdbool.h>
24
+ #include <string.h>
25
+
26
+ #include <grpc/grpc.h>
27
+ #include <grpc/support/alloc.h>
28
+ #include <grpc/support/log.h>
29
+ #include <grpc/support/string_util.h>
30
+
31
+ #include "src/core/lib/security/credentials/alts/alts_credentials.h"
32
+ #include "src/core/lib/security/transport/security_handshaker.h"
33
+ #include "src/core/lib/transport/transport.h"
34
+ #include "src/core/tsi/alts/handshaker/alts_tsi_handshaker.h"
35
+
36
+ typedef struct {
37
+ grpc_channel_security_connector base;
38
+ char* target_name;
39
+ } grpc_alts_channel_security_connector;
40
+
41
+ typedef struct {
42
+ grpc_server_security_connector base;
43
+ } grpc_alts_server_security_connector;
44
+
45
+ static void alts_channel_destroy(grpc_security_connector* sc) {
46
+ if (sc == nullptr) {
47
+ return;
48
+ }
49
+ auto c = reinterpret_cast<grpc_alts_channel_security_connector*>(sc);
50
+ grpc_call_credentials_unref(c->base.request_metadata_creds);
51
+ grpc_channel_credentials_unref(c->base.channel_creds);
52
+ gpr_free(c->target_name);
53
+ gpr_free(sc);
54
+ }
55
+
56
+ static void alts_server_destroy(grpc_security_connector* sc) {
57
+ if (sc == nullptr) {
58
+ return;
59
+ }
60
+ auto c = reinterpret_cast<grpc_alts_server_security_connector*>(sc);
61
+ grpc_server_credentials_unref(c->base.server_creds);
62
+ gpr_free(sc);
63
+ }
64
+
65
+ static void alts_channel_add_handshakers(
66
+ grpc_channel_security_connector* sc,
67
+ grpc_handshake_manager* handshake_manager) {
68
+ tsi_handshaker* handshaker = nullptr;
69
+ auto c = reinterpret_cast<grpc_alts_channel_security_connector*>(sc);
70
+ grpc_alts_credentials* creds =
71
+ reinterpret_cast<grpc_alts_credentials*>(c->base.channel_creds);
72
+ GPR_ASSERT(alts_tsi_handshaker_create(creds->options, c->target_name,
73
+ creds->handshaker_service_url, true,
74
+ &handshaker) == TSI_OK);
75
+ grpc_handshake_manager_add(handshake_manager, grpc_security_handshaker_create(
76
+ handshaker, &sc->base));
77
+ }
78
+
79
+ static void alts_server_add_handshakers(
80
+ grpc_server_security_connector* sc,
81
+ grpc_handshake_manager* handshake_manager) {
82
+ tsi_handshaker* handshaker = nullptr;
83
+ auto c = reinterpret_cast<grpc_alts_server_security_connector*>(sc);
84
+ grpc_alts_server_credentials* creds =
85
+ reinterpret_cast<grpc_alts_server_credentials*>(c->base.server_creds);
86
+ GPR_ASSERT(alts_tsi_handshaker_create(creds->options, nullptr,
87
+ creds->handshaker_service_url, false,
88
+ &handshaker) == TSI_OK);
89
+ grpc_handshake_manager_add(handshake_manager, grpc_security_handshaker_create(
90
+ handshaker, &sc->base));
91
+ }
92
+
93
+ static void alts_set_rpc_protocol_versions(
94
+ grpc_gcp_rpc_protocol_versions* rpc_versions) {
95
+ grpc_gcp_rpc_protocol_versions_set_max(rpc_versions,
96
+ GRPC_PROTOCOL_VERSION_MAX_MAJOR,
97
+ GRPC_PROTOCOL_VERSION_MAX_MINOR);
98
+ grpc_gcp_rpc_protocol_versions_set_min(rpc_versions,
99
+ GRPC_PROTOCOL_VERSION_MIN_MAJOR,
100
+ GRPC_PROTOCOL_VERSION_MIN_MINOR);
101
+ }
102
+
103
+ namespace grpc_core {
104
+ namespace internal {
105
+
106
+ grpc_security_status grpc_alts_auth_context_from_tsi_peer(
107
+ const tsi_peer* peer, grpc_auth_context** ctx) {
108
+ if (peer == nullptr || ctx == nullptr) {
109
+ gpr_log(GPR_ERROR,
110
+ "Invalid arguments to grpc_alts_auth_context_from_tsi_peer()");
111
+ return GRPC_SECURITY_ERROR;
112
+ }
113
+ *ctx = nullptr;
114
+ /* Validate certificate type. */
115
+ const tsi_peer_property* cert_type_prop =
116
+ tsi_peer_get_property_by_name(peer, TSI_CERTIFICATE_TYPE_PEER_PROPERTY);
117
+ if (cert_type_prop == nullptr ||
118
+ strncmp(cert_type_prop->value.data, TSI_ALTS_CERTIFICATE_TYPE,
119
+ cert_type_prop->value.length) != 0) {
120
+ gpr_log(GPR_ERROR, "Invalid or missing certificate type property.");
121
+ return GRPC_SECURITY_ERROR;
122
+ }
123
+ /* Validate RPC protocol versions. */
124
+ const tsi_peer_property* rpc_versions_prop =
125
+ tsi_peer_get_property_by_name(peer, TSI_ALTS_RPC_VERSIONS);
126
+ if (rpc_versions_prop == nullptr) {
127
+ gpr_log(GPR_ERROR, "Missing rpc protocol versions property.");
128
+ return GRPC_SECURITY_ERROR;
129
+ }
130
+ grpc_gcp_rpc_protocol_versions local_versions, peer_versions;
131
+ alts_set_rpc_protocol_versions(&local_versions);
132
+ grpc_slice slice = grpc_slice_from_copied_buffer(
133
+ rpc_versions_prop->value.data, rpc_versions_prop->value.length);
134
+ bool decode_result =
135
+ grpc_gcp_rpc_protocol_versions_decode(slice, &peer_versions);
136
+ grpc_slice_unref(slice);
137
+ if (!decode_result) {
138
+ gpr_log(GPR_ERROR, "Invalid peer rpc protocol versions.");
139
+ return GRPC_SECURITY_ERROR;
140
+ }
141
+ /* TODO: Pass highest common rpc protocol version to grpc caller. */
142
+ bool check_result = grpc_gcp_rpc_protocol_versions_check(
143
+ &local_versions, &peer_versions, nullptr);
144
+ if (!check_result) {
145
+ gpr_log(GPR_ERROR, "Mismatch of local and peer rpc protocol versions.");
146
+ return GRPC_SECURITY_ERROR;
147
+ }
148
+ /* Create auth context. */
149
+ *ctx = grpc_auth_context_create(nullptr);
150
+ grpc_auth_context_add_cstring_property(
151
+ *ctx, GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
152
+ GRPC_ALTS_TRANSPORT_SECURITY_TYPE);
153
+ size_t i = 0;
154
+ for (i = 0; i < peer->property_count; i++) {
155
+ const tsi_peer_property* tsi_prop = &peer->properties[i];
156
+ /* Add service account to auth context. */
157
+ if (strcmp(tsi_prop->name, TSI_ALTS_SERVICE_ACCOUNT_PEER_PROPERTY) == 0) {
158
+ grpc_auth_context_add_property(
159
+ *ctx, TSI_ALTS_SERVICE_ACCOUNT_PEER_PROPERTY, tsi_prop->value.data,
160
+ tsi_prop->value.length);
161
+ GPR_ASSERT(grpc_auth_context_set_peer_identity_property_name(
162
+ *ctx, TSI_ALTS_SERVICE_ACCOUNT_PEER_PROPERTY) == 1);
163
+ }
164
+ }
165
+ if (!grpc_auth_context_peer_is_authenticated(*ctx)) {
166
+ gpr_log(GPR_ERROR, "Invalid unauthenticated peer.");
167
+ GRPC_AUTH_CONTEXT_UNREF(*ctx, "test");
168
+ *ctx = nullptr;
169
+ return GRPC_SECURITY_ERROR;
170
+ }
171
+ return GRPC_SECURITY_OK;
172
+ }
173
+
174
+ } // namespace internal
175
+ } // namespace grpc_core
176
+
177
+ static void alts_check_peer(grpc_security_connector* sc, tsi_peer peer,
178
+ grpc_auth_context** auth_context,
179
+ grpc_closure* on_peer_checked) {
180
+ grpc_security_status status;
181
+ status = grpc_core::internal::grpc_alts_auth_context_from_tsi_peer(
182
+ &peer, auth_context);
183
+ tsi_peer_destruct(&peer);
184
+ grpc_error* error =
185
+ status == GRPC_SECURITY_OK
186
+ ? GRPC_ERROR_NONE
187
+ : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
188
+ "Could not get ALTS auth context from TSI peer");
189
+ GRPC_CLOSURE_SCHED(on_peer_checked, error);
190
+ }
191
+
192
+ static int alts_channel_cmp(grpc_security_connector* sc1,
193
+ grpc_security_connector* sc2) {
194
+ grpc_alts_channel_security_connector* c1 =
195
+ reinterpret_cast<grpc_alts_channel_security_connector*>(sc1);
196
+ grpc_alts_channel_security_connector* c2 =
197
+ reinterpret_cast<grpc_alts_channel_security_connector*>(sc2);
198
+ int c = grpc_channel_security_connector_cmp(&c1->base, &c2->base);
199
+ if (c != 0) return c;
200
+ return strcmp(c1->target_name, c2->target_name);
201
+ }
202
+
203
+ static int alts_server_cmp(grpc_security_connector* sc1,
204
+ grpc_security_connector* sc2) {
205
+ grpc_alts_server_security_connector* c1 =
206
+ reinterpret_cast<grpc_alts_server_security_connector*>(sc1);
207
+ grpc_alts_server_security_connector* c2 =
208
+ reinterpret_cast<grpc_alts_server_security_connector*>(sc2);
209
+ return grpc_server_security_connector_cmp(&c1->base, &c2->base);
210
+ }
211
+
212
+ static grpc_security_connector_vtable alts_channel_vtable = {
213
+ alts_channel_destroy, alts_check_peer, alts_channel_cmp};
214
+
215
+ static grpc_security_connector_vtable alts_server_vtable = {
216
+ alts_server_destroy, alts_check_peer, alts_server_cmp};
217
+
218
+ static bool alts_check_call_host(grpc_channel_security_connector* sc,
219
+ const char* host,
220
+ grpc_auth_context* auth_context,
221
+ grpc_closure* on_call_host_checked,
222
+ grpc_error** error) {
223
+ grpc_alts_channel_security_connector* alts_sc =
224
+ reinterpret_cast<grpc_alts_channel_security_connector*>(sc);
225
+ if (host == nullptr || alts_sc == nullptr ||
226
+ strcmp(host, alts_sc->target_name) != 0) {
227
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
228
+ "ALTS call host does not match target name");
229
+ }
230
+ return true;
231
+ }
232
+
233
+ static void alts_cancel_check_call_host(grpc_channel_security_connector* sc,
234
+ grpc_closure* on_call_host_checked,
235
+ grpc_error* error) {
236
+ GRPC_ERROR_UNREF(error);
237
+ }
238
+
239
+ grpc_security_status grpc_alts_channel_security_connector_create(
240
+ grpc_channel_credentials* channel_creds,
241
+ grpc_call_credentials* request_metadata_creds, const char* target_name,
242
+ grpc_channel_security_connector** sc) {
243
+ if (channel_creds == nullptr || sc == nullptr || target_name == nullptr) {
244
+ gpr_log(
245
+ GPR_ERROR,
246
+ "Invalid arguments to grpc_alts_channel_security_connector_create()");
247
+ return GRPC_SECURITY_ERROR;
248
+ }
249
+ auto c = static_cast<grpc_alts_channel_security_connector*>(
250
+ gpr_zalloc(sizeof(grpc_alts_channel_security_connector)));
251
+ gpr_ref_init(&c->base.base.refcount, 1);
252
+ c->base.base.vtable = &alts_channel_vtable;
253
+ c->base.add_handshakers = alts_channel_add_handshakers;
254
+ c->base.channel_creds = grpc_channel_credentials_ref(channel_creds);
255
+ c->base.request_metadata_creds =
256
+ grpc_call_credentials_ref(request_metadata_creds);
257
+ c->base.check_call_host = alts_check_call_host;
258
+ c->base.cancel_check_call_host = alts_cancel_check_call_host;
259
+ grpc_alts_credentials* creds =
260
+ reinterpret_cast<grpc_alts_credentials*>(c->base.channel_creds);
261
+ alts_set_rpc_protocol_versions(&creds->options->rpc_versions);
262
+ c->target_name = gpr_strdup(target_name);
263
+ *sc = &c->base;
264
+ return GRPC_SECURITY_OK;
265
+ }
266
+
267
+ grpc_security_status grpc_alts_server_security_connector_create(
268
+ grpc_server_credentials* server_creds,
269
+ grpc_server_security_connector** sc) {
270
+ if (server_creds == nullptr || sc == nullptr) {
271
+ gpr_log(
272
+ GPR_ERROR,
273
+ "Invalid arguments to grpc_alts_server_security_connector_create()");
274
+ return GRPC_SECURITY_ERROR;
275
+ }
276
+ auto c = static_cast<grpc_alts_server_security_connector*>(
277
+ gpr_zalloc(sizeof(grpc_alts_server_security_connector)));
278
+ gpr_ref_init(&c->base.base.refcount, 1);
279
+ c->base.base.vtable = &alts_server_vtable;
280
+ c->base.server_creds = grpc_server_credentials_ref(server_creds);
281
+ c->base.add_handshakers = alts_server_add_handshakers;
282
+ grpc_alts_server_credentials* creds =
283
+ reinterpret_cast<grpc_alts_server_credentials*>(c->base.server_creds);
284
+ alts_set_rpc_protocol_versions(&creds->options->rpc_versions);
285
+ *sc = &c->base;
286
+ return GRPC_SECURITY_OK;
287
+ }
@@ -0,0 +1,69 @@
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_LIB_SECURITY_SECURITY_CONNECTOR_ALTS_SECURITY_CONNECTOR_H
20
+ #define GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_ALTS_SECURITY_CONNECTOR_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/security/context/security_context.h"
25
+ #include "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h"
26
+
27
+ #define GRPC_ALTS_TRANSPORT_SECURITY_TYPE "alts"
28
+
29
+ /**
30
+ * This method creates an ALTS channel security connector.
31
+ *
32
+ * - channel_creds: channel credential instance.
33
+ * - request_metadata_creds: credential object which will be sent with each
34
+ * request. This parameter can be nullptr.
35
+ * - target_name: the name of the endpoint that the channel is connecting to.
36
+ * - sc: address of ALTS channel security connector instance to be returned from
37
+ * the method.
38
+ *
39
+ * It returns GRPC_SECURITY_OK on success, and an error stauts code on failure.
40
+ */
41
+ grpc_security_status grpc_alts_channel_security_connector_create(
42
+ grpc_channel_credentials* channel_creds,
43
+ grpc_call_credentials* request_metadata_creds, const char* target_name,
44
+ grpc_channel_security_connector** sc);
45
+
46
+ /**
47
+ * This method creates an ALTS server security connector.
48
+ *
49
+ * - server_creds: server credential instance.
50
+ * - sc: address of ALTS server security connector instance to be returned from
51
+ * the method.
52
+ *
53
+ * It returns GRPC_SECURITY_OK on success, and an error status code on failure.
54
+ */
55
+ grpc_security_status grpc_alts_server_security_connector_create(
56
+ grpc_server_credentials* server_creds, grpc_server_security_connector** sc);
57
+
58
+ namespace grpc_core {
59
+ namespace internal {
60
+
61
+ /* Exposed only for testing. */
62
+ grpc_security_status grpc_alts_auth_context_from_tsi_peer(
63
+ const tsi_peer* peer, grpc_auth_context** ctx);
64
+
65
+ } // namespace internal
66
+ } // namespace grpc_core
67
+
68
+ #endif /* GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_ALTS_SECURITY_CONNECTOR_H \
69
+ */
@@ -0,0 +1,1200 @@
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/lib/security/security_connector/security_connector.h"
22
+
23
+ #include <stdbool.h>
24
+ #include <string.h>
25
+
26
+ #include <grpc/slice_buffer.h>
27
+ #include <grpc/support/alloc.h>
28
+ #include <grpc/support/log.h>
29
+ #include <grpc/support/string_util.h>
30
+
31
+ #include "src/core/ext/transport/chttp2/alpn/alpn.h"
32
+ #include "src/core/lib/channel/channel_args.h"
33
+ #include "src/core/lib/channel/handshaker.h"
34
+ #include "src/core/lib/gpr/env.h"
35
+ #include "src/core/lib/gpr/host_port.h"
36
+ #include "src/core/lib/gpr/string.h"
37
+ #include "src/core/lib/iomgr/load_file.h"
38
+ #include "src/core/lib/security/context/security_context.h"
39
+ #include "src/core/lib/security/credentials/credentials.h"
40
+ #include "src/core/lib/security/credentials/fake/fake_credentials.h"
41
+ #include "src/core/lib/security/credentials/ssl/ssl_credentials.h"
42
+ #include "src/core/lib/security/transport/secure_endpoint.h"
43
+ #include "src/core/lib/security/transport/security_handshaker.h"
44
+ #include "src/core/lib/security/transport/target_authority_table.h"
45
+ #include "src/core/tsi/fake_transport_security.h"
46
+ #include "src/core/tsi/ssl_transport_security.h"
47
+ #include "src/core/tsi/transport_security_adapter.h"
48
+
49
+ grpc_core::DebugOnlyTraceFlag grpc_trace_security_connector_refcount(
50
+ false, "security_connector_refcount");
51
+
52
+ /* -- Constants. -- */
53
+
54
+ #ifndef INSTALL_PREFIX
55
+ static const char* installed_roots_path = "/usr/share/grpc/roots.pem";
56
+ #else
57
+ static const char* installed_roots_path =
58
+ INSTALL_PREFIX "/share/grpc/roots.pem";
59
+ #endif
60
+
61
+ /* -- Overridden default roots. -- */
62
+
63
+ static grpc_ssl_roots_override_callback ssl_roots_override_cb = nullptr;
64
+
65
+ void grpc_set_ssl_roots_override_callback(grpc_ssl_roots_override_callback cb) {
66
+ ssl_roots_override_cb = cb;
67
+ }
68
+
69
+ /* -- Cipher suites. -- */
70
+
71
+ /* Defines the cipher suites that we accept by default. All these cipher suites
72
+ are compliant with HTTP2. */
73
+ #define GRPC_SSL_CIPHER_SUITES \
74
+ "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384"
75
+
76
+ static gpr_once cipher_suites_once = GPR_ONCE_INIT;
77
+ static const char* cipher_suites = nullptr;
78
+
79
+ static void init_cipher_suites(void) {
80
+ char* overridden = gpr_getenv("GRPC_SSL_CIPHER_SUITES");
81
+ cipher_suites = overridden != nullptr ? overridden : GRPC_SSL_CIPHER_SUITES;
82
+ }
83
+
84
+ static const char* ssl_cipher_suites(void) {
85
+ gpr_once_init(&cipher_suites_once, init_cipher_suites);
86
+ return cipher_suites;
87
+ }
88
+
89
+ /* -- Common methods. -- */
90
+
91
+ /* Returns the first property with that name. */
92
+ const tsi_peer_property* tsi_peer_get_property_by_name(const tsi_peer* peer,
93
+ const char* name) {
94
+ size_t i;
95
+ if (peer == nullptr) return nullptr;
96
+ for (i = 0; i < peer->property_count; i++) {
97
+ const tsi_peer_property* property = &peer->properties[i];
98
+ if (name == nullptr && property->name == nullptr) {
99
+ return property;
100
+ }
101
+ if (name != nullptr && property->name != nullptr &&
102
+ strcmp(property->name, name) == 0) {
103
+ return property;
104
+ }
105
+ }
106
+ return nullptr;
107
+ }
108
+
109
+ void grpc_channel_security_connector_add_handshakers(
110
+ grpc_channel_security_connector* connector,
111
+ grpc_handshake_manager* handshake_mgr) {
112
+ if (connector != nullptr) {
113
+ connector->add_handshakers(connector, handshake_mgr);
114
+ }
115
+ }
116
+
117
+ void grpc_server_security_connector_add_handshakers(
118
+ grpc_server_security_connector* connector,
119
+ grpc_handshake_manager* handshake_mgr) {
120
+ if (connector != nullptr) {
121
+ connector->add_handshakers(connector, handshake_mgr);
122
+ }
123
+ }
124
+
125
+ void grpc_security_connector_check_peer(grpc_security_connector* sc,
126
+ tsi_peer peer,
127
+ grpc_auth_context** auth_context,
128
+ grpc_closure* on_peer_checked) {
129
+ if (sc == nullptr) {
130
+ GRPC_CLOSURE_SCHED(on_peer_checked,
131
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
132
+ "cannot check peer -- no security connector"));
133
+ tsi_peer_destruct(&peer);
134
+ } else {
135
+ sc->vtable->check_peer(sc, peer, auth_context, on_peer_checked);
136
+ }
137
+ }
138
+
139
+ int grpc_security_connector_cmp(grpc_security_connector* sc,
140
+ grpc_security_connector* other) {
141
+ if (sc == nullptr || other == nullptr) return GPR_ICMP(sc, other);
142
+ int c = GPR_ICMP(sc->vtable, other->vtable);
143
+ if (c != 0) return c;
144
+ return sc->vtable->cmp(sc, other);
145
+ }
146
+
147
+ int grpc_channel_security_connector_cmp(grpc_channel_security_connector* sc1,
148
+ grpc_channel_security_connector* sc2) {
149
+ GPR_ASSERT(sc1->channel_creds != nullptr);
150
+ GPR_ASSERT(sc2->channel_creds != nullptr);
151
+ int c = GPR_ICMP(sc1->channel_creds, sc2->channel_creds);
152
+ if (c != 0) return c;
153
+ c = GPR_ICMP(sc1->request_metadata_creds, sc2->request_metadata_creds);
154
+ if (c != 0) return c;
155
+ c = GPR_ICMP((void*)sc1->check_call_host, (void*)sc2->check_call_host);
156
+ if (c != 0) return c;
157
+ c = GPR_ICMP((void*)sc1->cancel_check_call_host,
158
+ (void*)sc2->cancel_check_call_host);
159
+ if (c != 0) return c;
160
+ return GPR_ICMP((void*)sc1->add_handshakers, (void*)sc2->add_handshakers);
161
+ }
162
+
163
+ int grpc_server_security_connector_cmp(grpc_server_security_connector* sc1,
164
+ grpc_server_security_connector* sc2) {
165
+ GPR_ASSERT(sc1->server_creds != nullptr);
166
+ GPR_ASSERT(sc2->server_creds != nullptr);
167
+ int c = GPR_ICMP(sc1->server_creds, sc2->server_creds);
168
+ if (c != 0) return c;
169
+ return GPR_ICMP((void*)sc1->add_handshakers, (void*)sc2->add_handshakers);
170
+ }
171
+
172
+ bool grpc_channel_security_connector_check_call_host(
173
+ grpc_channel_security_connector* sc, const char* host,
174
+ grpc_auth_context* auth_context, grpc_closure* on_call_host_checked,
175
+ grpc_error** error) {
176
+ if (sc == nullptr || sc->check_call_host == nullptr) {
177
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
178
+ "cannot check call host -- no security connector");
179
+ return true;
180
+ }
181
+ return sc->check_call_host(sc, host, auth_context, on_call_host_checked,
182
+ error);
183
+ }
184
+
185
+ void grpc_channel_security_connector_cancel_check_call_host(
186
+ grpc_channel_security_connector* sc, grpc_closure* on_call_host_checked,
187
+ grpc_error* error) {
188
+ if (sc == nullptr || sc->cancel_check_call_host == nullptr) {
189
+ GRPC_ERROR_UNREF(error);
190
+ return;
191
+ }
192
+ sc->cancel_check_call_host(sc, on_call_host_checked, error);
193
+ }
194
+
195
+ #ifndef NDEBUG
196
+ grpc_security_connector* grpc_security_connector_ref(
197
+ grpc_security_connector* sc, const char* file, int line,
198
+ const char* reason) {
199
+ if (sc == nullptr) return nullptr;
200
+ if (grpc_trace_security_connector_refcount.enabled()) {
201
+ gpr_atm val = gpr_atm_no_barrier_load(&sc->refcount.count);
202
+ gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
203
+ "SECURITY_CONNECTOR:%p ref %" PRIdPTR " -> %" PRIdPTR " %s", sc,
204
+ val, val + 1, reason);
205
+ }
206
+ #else
207
+ grpc_security_connector* grpc_security_connector_ref(
208
+ grpc_security_connector* sc) {
209
+ if (sc == nullptr) return nullptr;
210
+ #endif
211
+ gpr_ref(&sc->refcount);
212
+ return sc;
213
+ }
214
+
215
+ #ifndef NDEBUG
216
+ void grpc_security_connector_unref(grpc_security_connector* sc,
217
+ const char* file, int line,
218
+ const char* reason) {
219
+ if (sc == nullptr) return;
220
+ if (grpc_trace_security_connector_refcount.enabled()) {
221
+ gpr_atm val = gpr_atm_no_barrier_load(&sc->refcount.count);
222
+ gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
223
+ "SECURITY_CONNECTOR:%p unref %" PRIdPTR " -> %" PRIdPTR " %s", sc,
224
+ val, val - 1, reason);
225
+ }
226
+ #else
227
+ void grpc_security_connector_unref(grpc_security_connector* sc) {
228
+ if (sc == nullptr) return;
229
+ #endif
230
+ if (gpr_unref(&sc->refcount)) sc->vtable->destroy(sc);
231
+ }
232
+
233
+ static void connector_arg_destroy(void* p) {
234
+ GRPC_SECURITY_CONNECTOR_UNREF((grpc_security_connector*)p,
235
+ "connector_arg_destroy");
236
+ }
237
+
238
+ static void* connector_arg_copy(void* p) {
239
+ return GRPC_SECURITY_CONNECTOR_REF((grpc_security_connector*)p,
240
+ "connector_arg_copy");
241
+ }
242
+
243
+ static int connector_cmp(void* a, void* b) {
244
+ return grpc_security_connector_cmp(static_cast<grpc_security_connector*>(a),
245
+ static_cast<grpc_security_connector*>(b));
246
+ }
247
+
248
+ static const grpc_arg_pointer_vtable connector_arg_vtable = {
249
+ connector_arg_copy, connector_arg_destroy, connector_cmp};
250
+
251
+ grpc_arg grpc_security_connector_to_arg(grpc_security_connector* sc) {
252
+ return grpc_channel_arg_pointer_create((char*)GRPC_ARG_SECURITY_CONNECTOR, sc,
253
+ &connector_arg_vtable);
254
+ }
255
+
256
+ grpc_security_connector* grpc_security_connector_from_arg(const grpc_arg* arg) {
257
+ if (strcmp(arg->key, GRPC_ARG_SECURITY_CONNECTOR)) return nullptr;
258
+ if (arg->type != GRPC_ARG_POINTER) {
259
+ gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type,
260
+ GRPC_ARG_SECURITY_CONNECTOR);
261
+ return nullptr;
262
+ }
263
+ return static_cast<grpc_security_connector*>(arg->value.pointer.p);
264
+ }
265
+
266
+ grpc_security_connector* grpc_security_connector_find_in_args(
267
+ const grpc_channel_args* args) {
268
+ size_t i;
269
+ if (args == nullptr) return nullptr;
270
+ for (i = 0; i < args->num_args; i++) {
271
+ grpc_security_connector* sc =
272
+ grpc_security_connector_from_arg(&args->args[i]);
273
+ if (sc != nullptr) return sc;
274
+ }
275
+ return nullptr;
276
+ }
277
+
278
+ static tsi_client_certificate_request_type
279
+ get_tsi_client_certificate_request_type(
280
+ grpc_ssl_client_certificate_request_type grpc_request_type) {
281
+ switch (grpc_request_type) {
282
+ case GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE:
283
+ return TSI_DONT_REQUEST_CLIENT_CERTIFICATE;
284
+
285
+ case GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY:
286
+ return TSI_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY;
287
+
288
+ case GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY:
289
+ return TSI_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY;
290
+
291
+ case GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY:
292
+ return TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY;
293
+
294
+ case GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY:
295
+ return TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY;
296
+
297
+ default:
298
+ return TSI_DONT_REQUEST_CLIENT_CERTIFICATE;
299
+ }
300
+ }
301
+
302
+ /* -- Fake implementation. -- */
303
+
304
+ typedef struct {
305
+ grpc_channel_security_connector base;
306
+ char* target;
307
+ char* expected_targets;
308
+ bool is_lb_channel;
309
+ char* target_name_override;
310
+ } grpc_fake_channel_security_connector;
311
+
312
+ static void fake_channel_destroy(grpc_security_connector* sc) {
313
+ grpc_fake_channel_security_connector* c =
314
+ reinterpret_cast<grpc_fake_channel_security_connector*>(sc);
315
+ grpc_call_credentials_unref(c->base.request_metadata_creds);
316
+ gpr_free(c->target);
317
+ gpr_free(c->expected_targets);
318
+ gpr_free(c->target_name_override);
319
+ gpr_free(c);
320
+ }
321
+
322
+ static void fake_server_destroy(grpc_security_connector* sc) { gpr_free(sc); }
323
+
324
+ static bool fake_check_target(const char* target_type, const char* target,
325
+ const char* set_str) {
326
+ GPR_ASSERT(target_type != nullptr);
327
+ GPR_ASSERT(target != nullptr);
328
+ char** set = nullptr;
329
+ size_t set_size = 0;
330
+ gpr_string_split(set_str, ",", &set, &set_size);
331
+ bool found = false;
332
+ for (size_t i = 0; i < set_size; ++i) {
333
+ if (set[i] != nullptr && strcmp(target, set[i]) == 0) found = true;
334
+ }
335
+ for (size_t i = 0; i < set_size; ++i) {
336
+ gpr_free(set[i]);
337
+ }
338
+ gpr_free(set);
339
+ return found;
340
+ }
341
+
342
+ static void fake_secure_name_check(const char* target,
343
+ const char* expected_targets,
344
+ bool is_lb_channel) {
345
+ if (expected_targets == nullptr) return;
346
+ char** lbs_and_backends = nullptr;
347
+ size_t lbs_and_backends_size = 0;
348
+ bool success = false;
349
+ gpr_string_split(expected_targets, ";", &lbs_and_backends,
350
+ &lbs_and_backends_size);
351
+ if (lbs_and_backends_size > 2 || lbs_and_backends_size == 0) {
352
+ gpr_log(GPR_ERROR, "Invalid expected targets arg value: '%s'",
353
+ expected_targets);
354
+ goto done;
355
+ }
356
+ if (is_lb_channel) {
357
+ if (lbs_and_backends_size != 2) {
358
+ gpr_log(GPR_ERROR,
359
+ "Invalid expected targets arg value: '%s'. Expectations for LB "
360
+ "channels must be of the form 'be1,be2,be3,...;lb1,lb2,...",
361
+ expected_targets);
362
+ goto done;
363
+ }
364
+ if (!fake_check_target("LB", target, lbs_and_backends[1])) {
365
+ gpr_log(GPR_ERROR, "LB target '%s' not found in expected set '%s'",
366
+ target, lbs_and_backends[1]);
367
+ goto done;
368
+ }
369
+ success = true;
370
+ } else {
371
+ if (!fake_check_target("Backend", target, lbs_and_backends[0])) {
372
+ gpr_log(GPR_ERROR, "Backend target '%s' not found in expected set '%s'",
373
+ target, lbs_and_backends[0]);
374
+ goto done;
375
+ }
376
+ success = true;
377
+ }
378
+ done:
379
+ for (size_t i = 0; i < lbs_and_backends_size; ++i) {
380
+ gpr_free(lbs_and_backends[i]);
381
+ }
382
+ gpr_free(lbs_and_backends);
383
+ if (!success) abort();
384
+ }
385
+
386
+ static void fake_check_peer(grpc_security_connector* sc, tsi_peer peer,
387
+ grpc_auth_context** auth_context,
388
+ grpc_closure* on_peer_checked) {
389
+ const char* prop_name;
390
+ grpc_error* error = GRPC_ERROR_NONE;
391
+ *auth_context = nullptr;
392
+ if (peer.property_count != 1) {
393
+ error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
394
+ "Fake peers should only have 1 property.");
395
+ goto end;
396
+ }
397
+ prop_name = peer.properties[0].name;
398
+ if (prop_name == nullptr ||
399
+ strcmp(prop_name, TSI_CERTIFICATE_TYPE_PEER_PROPERTY)) {
400
+ char* msg;
401
+ gpr_asprintf(&msg, "Unexpected property in fake peer: %s.",
402
+ prop_name == nullptr ? "<EMPTY>" : prop_name);
403
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
404
+ gpr_free(msg);
405
+ goto end;
406
+ }
407
+ if (strncmp(peer.properties[0].value.data, TSI_FAKE_CERTIFICATE_TYPE,
408
+ peer.properties[0].value.length)) {
409
+ error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
410
+ "Invalid value for cert type property.");
411
+ goto end;
412
+ }
413
+ *auth_context = grpc_auth_context_create(nullptr);
414
+ grpc_auth_context_add_cstring_property(
415
+ *auth_context, GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
416
+ GRPC_FAKE_TRANSPORT_SECURITY_TYPE);
417
+ end:
418
+ GRPC_CLOSURE_SCHED(on_peer_checked, error);
419
+ tsi_peer_destruct(&peer);
420
+ }
421
+
422
+ static void fake_channel_check_peer(grpc_security_connector* sc, tsi_peer peer,
423
+ grpc_auth_context** auth_context,
424
+ grpc_closure* on_peer_checked) {
425
+ fake_check_peer(sc, peer, auth_context, on_peer_checked);
426
+ grpc_fake_channel_security_connector* c =
427
+ reinterpret_cast<grpc_fake_channel_security_connector*>(sc);
428
+ fake_secure_name_check(c->target, c->expected_targets, c->is_lb_channel);
429
+ }
430
+
431
+ static void fake_server_check_peer(grpc_security_connector* sc, tsi_peer peer,
432
+ grpc_auth_context** auth_context,
433
+ grpc_closure* on_peer_checked) {
434
+ fake_check_peer(sc, peer, auth_context, on_peer_checked);
435
+ }
436
+
437
+ static int fake_channel_cmp(grpc_security_connector* sc1,
438
+ grpc_security_connector* sc2) {
439
+ grpc_fake_channel_security_connector* c1 =
440
+ reinterpret_cast<grpc_fake_channel_security_connector*>(sc1);
441
+ grpc_fake_channel_security_connector* c2 =
442
+ reinterpret_cast<grpc_fake_channel_security_connector*>(sc2);
443
+ int c = grpc_channel_security_connector_cmp(&c1->base, &c2->base);
444
+ if (c != 0) return c;
445
+ c = strcmp(c1->target, c2->target);
446
+ if (c != 0) return c;
447
+ if (c1->expected_targets == nullptr || c2->expected_targets == nullptr) {
448
+ c = GPR_ICMP(c1->expected_targets, c2->expected_targets);
449
+ } else {
450
+ c = strcmp(c1->expected_targets, c2->expected_targets);
451
+ }
452
+ if (c != 0) return c;
453
+ return GPR_ICMP(c1->is_lb_channel, c2->is_lb_channel);
454
+ }
455
+
456
+ static int fake_server_cmp(grpc_security_connector* sc1,
457
+ grpc_security_connector* sc2) {
458
+ return grpc_server_security_connector_cmp(
459
+ reinterpret_cast<grpc_server_security_connector*>(sc1),
460
+ reinterpret_cast<grpc_server_security_connector*>(sc2));
461
+ }
462
+
463
+ static bool fake_channel_check_call_host(grpc_channel_security_connector* sc,
464
+ const char* host,
465
+ grpc_auth_context* auth_context,
466
+ grpc_closure* on_call_host_checked,
467
+ grpc_error** error) {
468
+ grpc_fake_channel_security_connector* c =
469
+ reinterpret_cast<grpc_fake_channel_security_connector*>(sc);
470
+ char* authority_hostname = nullptr;
471
+ char* authority_ignored_port = nullptr;
472
+ char* target_hostname = nullptr;
473
+ char* target_ignored_port = nullptr;
474
+ gpr_split_host_port(host, &authority_hostname, &authority_ignored_port);
475
+ gpr_split_host_port(c->target, &target_hostname, &target_ignored_port);
476
+ if (c->target_name_override != nullptr) {
477
+ char* fake_security_target_name_override_hostname = nullptr;
478
+ char* fake_security_target_name_override_ignored_port = nullptr;
479
+ gpr_split_host_port(c->target_name_override,
480
+ &fake_security_target_name_override_hostname,
481
+ &fake_security_target_name_override_ignored_port);
482
+ if (strcmp(authority_hostname,
483
+ fake_security_target_name_override_hostname) != 0) {
484
+ gpr_log(GPR_ERROR,
485
+ "Authority (host) '%s' != Fake Security Target override '%s'",
486
+ host, fake_security_target_name_override_hostname);
487
+ abort();
488
+ }
489
+ gpr_free(fake_security_target_name_override_hostname);
490
+ gpr_free(fake_security_target_name_override_ignored_port);
491
+ } else if (strcmp(authority_hostname, target_hostname) != 0) {
492
+ gpr_log(GPR_ERROR, "Authority (host) '%s' != Target '%s'",
493
+ authority_hostname, target_hostname);
494
+ abort();
495
+ }
496
+ gpr_free(authority_hostname);
497
+ gpr_free(authority_ignored_port);
498
+ gpr_free(target_hostname);
499
+ gpr_free(target_ignored_port);
500
+ return true;
501
+ }
502
+
503
+ static void fake_channel_cancel_check_call_host(
504
+ grpc_channel_security_connector* sc, grpc_closure* on_call_host_checked,
505
+ grpc_error* error) {
506
+ GRPC_ERROR_UNREF(error);
507
+ }
508
+
509
+ static void fake_channel_add_handshakers(
510
+ grpc_channel_security_connector* sc,
511
+ grpc_handshake_manager* handshake_mgr) {
512
+ grpc_handshake_manager_add(
513
+ handshake_mgr,
514
+ grpc_security_handshaker_create(
515
+ tsi_create_fake_handshaker(true /* is_client */), &sc->base));
516
+ }
517
+
518
+ static void fake_server_add_handshakers(grpc_server_security_connector* sc,
519
+ grpc_handshake_manager* handshake_mgr) {
520
+ grpc_handshake_manager_add(
521
+ handshake_mgr,
522
+ grpc_security_handshaker_create(
523
+ tsi_create_fake_handshaker(false /* is_client */), &sc->base));
524
+ }
525
+
526
+ static grpc_security_connector_vtable fake_channel_vtable = {
527
+ fake_channel_destroy, fake_channel_check_peer, fake_channel_cmp};
528
+
529
+ static grpc_security_connector_vtable fake_server_vtable = {
530
+ fake_server_destroy, fake_server_check_peer, fake_server_cmp};
531
+
532
+ grpc_channel_security_connector* grpc_fake_channel_security_connector_create(
533
+ grpc_channel_credentials* channel_creds,
534
+ grpc_call_credentials* request_metadata_creds, const char* target,
535
+ const grpc_channel_args* args) {
536
+ grpc_fake_channel_security_connector* c =
537
+ static_cast<grpc_fake_channel_security_connector*>(
538
+ gpr_zalloc(sizeof(*c)));
539
+ gpr_ref_init(&c->base.base.refcount, 1);
540
+ c->base.base.url_scheme = GRPC_FAKE_SECURITY_URL_SCHEME;
541
+ c->base.base.vtable = &fake_channel_vtable;
542
+ c->base.channel_creds = channel_creds;
543
+ c->base.request_metadata_creds =
544
+ grpc_call_credentials_ref(request_metadata_creds);
545
+ c->base.check_call_host = fake_channel_check_call_host;
546
+ c->base.cancel_check_call_host = fake_channel_cancel_check_call_host;
547
+ c->base.add_handshakers = fake_channel_add_handshakers;
548
+ c->target = gpr_strdup(target);
549
+ const char* expected_targets = grpc_fake_transport_get_expected_targets(args);
550
+ c->expected_targets = gpr_strdup(expected_targets);
551
+ c->is_lb_channel = grpc_core::FindTargetAuthorityTableInArgs(args) != nullptr;
552
+ const grpc_arg* target_name_override_arg =
553
+ grpc_channel_args_find(args, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG);
554
+ if (target_name_override_arg != nullptr) {
555
+ c->target_name_override =
556
+ gpr_strdup(grpc_channel_arg_get_string(target_name_override_arg));
557
+ }
558
+ return &c->base;
559
+ }
560
+
561
+ grpc_server_security_connector* grpc_fake_server_security_connector_create(
562
+ grpc_server_credentials* server_creds) {
563
+ grpc_server_security_connector* c =
564
+ static_cast<grpc_server_security_connector*>(
565
+ gpr_zalloc(sizeof(grpc_server_security_connector)));
566
+ gpr_ref_init(&c->base.refcount, 1);
567
+ c->base.vtable = &fake_server_vtable;
568
+ c->base.url_scheme = GRPC_FAKE_SECURITY_URL_SCHEME;
569
+ c->server_creds = server_creds;
570
+ c->add_handshakers = fake_server_add_handshakers;
571
+ return c;
572
+ }
573
+
574
+ /* --- Ssl implementation. --- */
575
+
576
+ grpc_ssl_session_cache* grpc_ssl_session_cache_create_lru(size_t capacity) {
577
+ tsi_ssl_session_cache* cache = tsi_ssl_session_cache_create_lru(capacity);
578
+ return reinterpret_cast<grpc_ssl_session_cache*>(cache);
579
+ }
580
+
581
+ void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache* cache) {
582
+ tsi_ssl_session_cache* tsi_cache =
583
+ reinterpret_cast<tsi_ssl_session_cache*>(cache);
584
+ tsi_ssl_session_cache_unref(tsi_cache);
585
+ }
586
+
587
+ static void* grpc_ssl_session_cache_arg_copy(void* p) {
588
+ tsi_ssl_session_cache* tsi_cache =
589
+ reinterpret_cast<tsi_ssl_session_cache*>(p);
590
+ // destroy call below will unref the pointer.
591
+ tsi_ssl_session_cache_ref(tsi_cache);
592
+ return p;
593
+ }
594
+
595
+ static void grpc_ssl_session_cache_arg_destroy(void* p) {
596
+ tsi_ssl_session_cache* tsi_cache =
597
+ reinterpret_cast<tsi_ssl_session_cache*>(p);
598
+ tsi_ssl_session_cache_unref(tsi_cache);
599
+ }
600
+
601
+ static int grpc_ssl_session_cache_arg_cmp(void* p, void* q) {
602
+ return GPR_ICMP(p, q);
603
+ }
604
+
605
+ grpc_arg grpc_ssl_session_cache_create_channel_arg(
606
+ grpc_ssl_session_cache* cache) {
607
+ static const grpc_arg_pointer_vtable vtable = {
608
+ grpc_ssl_session_cache_arg_copy,
609
+ grpc_ssl_session_cache_arg_destroy,
610
+ grpc_ssl_session_cache_arg_cmp,
611
+ };
612
+ return grpc_channel_arg_pointer_create(
613
+ const_cast<char*>(GRPC_SSL_SESSION_CACHE_ARG), cache, &vtable);
614
+ }
615
+
616
+ typedef struct {
617
+ grpc_channel_security_connector base;
618
+ tsi_ssl_client_handshaker_factory* client_handshaker_factory;
619
+ char* target_name;
620
+ char* overridden_target_name;
621
+ } grpc_ssl_channel_security_connector;
622
+
623
+ typedef struct {
624
+ grpc_server_security_connector base;
625
+ tsi_ssl_server_handshaker_factory* server_handshaker_factory;
626
+ } grpc_ssl_server_security_connector;
627
+
628
+ static bool server_connector_has_cert_config_fetcher(
629
+ grpc_ssl_server_security_connector* c) {
630
+ GPR_ASSERT(c != nullptr);
631
+ grpc_ssl_server_credentials* server_creds =
632
+ reinterpret_cast<grpc_ssl_server_credentials*>(c->base.server_creds);
633
+ GPR_ASSERT(server_creds != nullptr);
634
+ return server_creds->certificate_config_fetcher.cb != nullptr;
635
+ }
636
+
637
+ static void ssl_channel_destroy(grpc_security_connector* sc) {
638
+ grpc_ssl_channel_security_connector* c =
639
+ reinterpret_cast<grpc_ssl_channel_security_connector*>(sc);
640
+ grpc_channel_credentials_unref(c->base.channel_creds);
641
+ grpc_call_credentials_unref(c->base.request_metadata_creds);
642
+ tsi_ssl_client_handshaker_factory_unref(c->client_handshaker_factory);
643
+ c->client_handshaker_factory = nullptr;
644
+ if (c->target_name != nullptr) gpr_free(c->target_name);
645
+ if (c->overridden_target_name != nullptr) gpr_free(c->overridden_target_name);
646
+ gpr_free(sc);
647
+ }
648
+
649
+ static void ssl_server_destroy(grpc_security_connector* sc) {
650
+ grpc_ssl_server_security_connector* c =
651
+ reinterpret_cast<grpc_ssl_server_security_connector*>(sc);
652
+ grpc_server_credentials_unref(c->base.server_creds);
653
+ tsi_ssl_server_handshaker_factory_unref(c->server_handshaker_factory);
654
+ c->server_handshaker_factory = nullptr;
655
+ gpr_free(sc);
656
+ }
657
+
658
+ static void ssl_channel_add_handshakers(grpc_channel_security_connector* sc,
659
+ grpc_handshake_manager* handshake_mgr) {
660
+ grpc_ssl_channel_security_connector* c =
661
+ reinterpret_cast<grpc_ssl_channel_security_connector*>(sc);
662
+ // Instantiate TSI handshaker.
663
+ tsi_handshaker* tsi_hs = nullptr;
664
+ tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
665
+ c->client_handshaker_factory,
666
+ c->overridden_target_name != nullptr ? c->overridden_target_name
667
+ : c->target_name,
668
+ &tsi_hs);
669
+ if (result != TSI_OK) {
670
+ gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
671
+ tsi_result_to_string(result));
672
+ return;
673
+ }
674
+ // Create handshakers.
675
+ grpc_handshake_manager_add(
676
+ handshake_mgr, grpc_security_handshaker_create(
677
+ tsi_create_adapter_handshaker(tsi_hs), &sc->base));
678
+ }
679
+
680
+ static const char** fill_alpn_protocol_strings(size_t* num_alpn_protocols) {
681
+ GPR_ASSERT(num_alpn_protocols != nullptr);
682
+ *num_alpn_protocols = grpc_chttp2_num_alpn_versions();
683
+ const char** alpn_protocol_strings = static_cast<const char**>(
684
+ gpr_malloc(sizeof(const char*) * (*num_alpn_protocols)));
685
+ for (size_t i = 0; i < *num_alpn_protocols; i++) {
686
+ alpn_protocol_strings[i] = grpc_chttp2_get_alpn_version_index(i);
687
+ }
688
+ return alpn_protocol_strings;
689
+ }
690
+
691
+ /* Attempts to replace the server_handshaker_factory with a new factory using
692
+ * the provided grpc_ssl_server_certificate_config. Should new factory creation
693
+ * fail, the existing factory will not be replaced. Returns true on success (new
694
+ * factory created). */
695
+ static bool try_replace_server_handshaker_factory(
696
+ grpc_ssl_server_security_connector* sc,
697
+ const grpc_ssl_server_certificate_config* config) {
698
+ if (config == nullptr) {
699
+ gpr_log(GPR_ERROR,
700
+ "Server certificate config callback returned invalid (NULL) "
701
+ "config.");
702
+ return false;
703
+ }
704
+ gpr_log(GPR_DEBUG, "Using new server certificate config (%p).", config);
705
+
706
+ size_t num_alpn_protocols = 0;
707
+ const char** alpn_protocol_strings =
708
+ fill_alpn_protocol_strings(&num_alpn_protocols);
709
+ tsi_ssl_pem_key_cert_pair* cert_pairs = grpc_convert_grpc_to_tsi_cert_pairs(
710
+ config->pem_key_cert_pairs, config->num_key_cert_pairs);
711
+ tsi_ssl_server_handshaker_factory* new_handshaker_factory = nullptr;
712
+ grpc_ssl_server_credentials* server_creds =
713
+ reinterpret_cast<grpc_ssl_server_credentials*>(sc->base.server_creds);
714
+ tsi_result result = tsi_create_ssl_server_handshaker_factory_ex(
715
+ cert_pairs, config->num_key_cert_pairs, config->pem_root_certs,
716
+ get_tsi_client_certificate_request_type(
717
+ server_creds->config.client_certificate_request),
718
+ ssl_cipher_suites(), alpn_protocol_strings,
719
+ static_cast<uint16_t>(num_alpn_protocols), &new_handshaker_factory);
720
+ gpr_free(cert_pairs);
721
+ gpr_free((void*)alpn_protocol_strings);
722
+
723
+ if (result != TSI_OK) {
724
+ gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
725
+ tsi_result_to_string(result));
726
+ return false;
727
+ }
728
+ tsi_ssl_server_handshaker_factory_unref(sc->server_handshaker_factory);
729
+ sc->server_handshaker_factory = new_handshaker_factory;
730
+ return true;
731
+ }
732
+
733
+ /* Attempts to fetch the server certificate config if a callback is available.
734
+ * Current certificate config will continue to be used if the callback returns
735
+ * an error. Returns true if new credentials were sucessfully loaded. */
736
+ static bool try_fetch_ssl_server_credentials(
737
+ grpc_ssl_server_security_connector* sc) {
738
+ grpc_ssl_server_certificate_config* certificate_config = nullptr;
739
+ bool status;
740
+
741
+ GPR_ASSERT(sc != nullptr);
742
+ if (!server_connector_has_cert_config_fetcher(sc)) return false;
743
+
744
+ grpc_ssl_server_credentials* server_creds =
745
+ reinterpret_cast<grpc_ssl_server_credentials*>(sc->base.server_creds);
746
+ grpc_ssl_certificate_config_reload_status cb_result =
747
+ server_creds->certificate_config_fetcher.cb(
748
+ server_creds->certificate_config_fetcher.user_data,
749
+ &certificate_config);
750
+ if (cb_result == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED) {
751
+ gpr_log(GPR_DEBUG, "No change in SSL server credentials.");
752
+ status = false;
753
+ } else if (cb_result == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW) {
754
+ status = try_replace_server_handshaker_factory(sc, certificate_config);
755
+ } else {
756
+ // Log error, continue using previously-loaded credentials.
757
+ gpr_log(GPR_ERROR,
758
+ "Failed fetching new server credentials, continuing to "
759
+ "use previously-loaded credentials.");
760
+ status = false;
761
+ }
762
+
763
+ if (certificate_config != nullptr) {
764
+ grpc_ssl_server_certificate_config_destroy(certificate_config);
765
+ }
766
+ return status;
767
+ }
768
+
769
+ static void ssl_server_add_handshakers(grpc_server_security_connector* sc,
770
+ grpc_handshake_manager* handshake_mgr) {
771
+ grpc_ssl_server_security_connector* c =
772
+ reinterpret_cast<grpc_ssl_server_security_connector*>(sc);
773
+ // Instantiate TSI handshaker.
774
+ try_fetch_ssl_server_credentials(c);
775
+ tsi_handshaker* tsi_hs = nullptr;
776
+ tsi_result result = tsi_ssl_server_handshaker_factory_create_handshaker(
777
+ c->server_handshaker_factory, &tsi_hs);
778
+ if (result != TSI_OK) {
779
+ gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
780
+ tsi_result_to_string(result));
781
+ return;
782
+ }
783
+ // Create handshakers.
784
+ grpc_handshake_manager_add(
785
+ handshake_mgr, grpc_security_handshaker_create(
786
+ tsi_create_adapter_handshaker(tsi_hs), &sc->base));
787
+ }
788
+
789
+ static int ssl_host_matches_name(const tsi_peer* peer, const char* peer_name) {
790
+ char* allocated_name = nullptr;
791
+ int r;
792
+
793
+ if (strchr(peer_name, ':') != nullptr) {
794
+ char* ignored_port;
795
+ gpr_split_host_port(peer_name, &allocated_name, &ignored_port);
796
+ gpr_free(ignored_port);
797
+ peer_name = allocated_name;
798
+ if (!peer_name) return 0;
799
+ }
800
+ r = tsi_ssl_peer_matches_name(peer, peer_name);
801
+ gpr_free(allocated_name);
802
+ return r;
803
+ }
804
+
805
+ grpc_auth_context* tsi_ssl_peer_to_auth_context(const tsi_peer* peer) {
806
+ size_t i;
807
+ grpc_auth_context* ctx = nullptr;
808
+ const char* peer_identity_property_name = nullptr;
809
+
810
+ /* The caller has checked the certificate type property. */
811
+ GPR_ASSERT(peer->property_count >= 1);
812
+ ctx = grpc_auth_context_create(nullptr);
813
+ grpc_auth_context_add_cstring_property(
814
+ ctx, GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
815
+ GRPC_SSL_TRANSPORT_SECURITY_TYPE);
816
+ for (i = 0; i < peer->property_count; i++) {
817
+ const tsi_peer_property* prop = &peer->properties[i];
818
+ if (prop->name == nullptr) continue;
819
+ if (strcmp(prop->name, TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY) == 0) {
820
+ /* If there is no subject alt name, have the CN as the identity. */
821
+ if (peer_identity_property_name == nullptr) {
822
+ peer_identity_property_name = GRPC_X509_CN_PROPERTY_NAME;
823
+ }
824
+ grpc_auth_context_add_property(ctx, GRPC_X509_CN_PROPERTY_NAME,
825
+ prop->value.data, prop->value.length);
826
+ } else if (strcmp(prop->name,
827
+ TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY) == 0) {
828
+ peer_identity_property_name = GRPC_X509_SAN_PROPERTY_NAME;
829
+ grpc_auth_context_add_property(ctx, GRPC_X509_SAN_PROPERTY_NAME,
830
+ prop->value.data, prop->value.length);
831
+ } else if (strcmp(prop->name, TSI_X509_PEM_CERT_PROPERTY) == 0) {
832
+ grpc_auth_context_add_property(ctx, GRPC_X509_PEM_CERT_PROPERTY_NAME,
833
+ prop->value.data, prop->value.length);
834
+ } else if (strcmp(prop->name, TSI_SSL_SESSION_REUSED_PEER_PROPERTY) == 0) {
835
+ grpc_auth_context_add_property(ctx, GRPC_SSL_SESSION_REUSED_PROPERTY,
836
+ prop->value.data, prop->value.length);
837
+ }
838
+ }
839
+ if (peer_identity_property_name != nullptr) {
840
+ GPR_ASSERT(grpc_auth_context_set_peer_identity_property_name(
841
+ ctx, peer_identity_property_name) == 1);
842
+ }
843
+ return ctx;
844
+ }
845
+
846
+ static grpc_error* ssl_check_peer(grpc_security_connector* sc,
847
+ const char* peer_name, const tsi_peer* peer,
848
+ grpc_auth_context** auth_context) {
849
+ /* Check the ALPN. */
850
+ const tsi_peer_property* p =
851
+ tsi_peer_get_property_by_name(peer, TSI_SSL_ALPN_SELECTED_PROTOCOL);
852
+ if (p == nullptr) {
853
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
854
+ "Cannot check peer: missing selected ALPN property.");
855
+ }
856
+ if (!grpc_chttp2_is_alpn_version_supported(p->value.data, p->value.length)) {
857
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
858
+ "Cannot check peer: invalid ALPN value.");
859
+ }
860
+
861
+ /* Check the peer name if specified. */
862
+ if (peer_name != nullptr && !ssl_host_matches_name(peer, peer_name)) {
863
+ char* msg;
864
+ gpr_asprintf(&msg, "Peer name %s is not in peer certificate", peer_name);
865
+ grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
866
+ gpr_free(msg);
867
+ return error;
868
+ }
869
+ *auth_context = tsi_ssl_peer_to_auth_context(peer);
870
+ return GRPC_ERROR_NONE;
871
+ }
872
+
873
+ static void ssl_channel_check_peer(grpc_security_connector* sc, tsi_peer peer,
874
+ grpc_auth_context** auth_context,
875
+ grpc_closure* on_peer_checked) {
876
+ grpc_ssl_channel_security_connector* c =
877
+ reinterpret_cast<grpc_ssl_channel_security_connector*>(sc);
878
+ grpc_error* error = ssl_check_peer(sc,
879
+ c->overridden_target_name != nullptr
880
+ ? c->overridden_target_name
881
+ : c->target_name,
882
+ &peer, auth_context);
883
+ GRPC_CLOSURE_SCHED(on_peer_checked, error);
884
+ tsi_peer_destruct(&peer);
885
+ }
886
+
887
+ static void ssl_server_check_peer(grpc_security_connector* sc, tsi_peer peer,
888
+ grpc_auth_context** auth_context,
889
+ grpc_closure* on_peer_checked) {
890
+ grpc_error* error = ssl_check_peer(sc, nullptr, &peer, auth_context);
891
+ tsi_peer_destruct(&peer);
892
+ GRPC_CLOSURE_SCHED(on_peer_checked, error);
893
+ }
894
+
895
+ static int ssl_channel_cmp(grpc_security_connector* sc1,
896
+ grpc_security_connector* sc2) {
897
+ grpc_ssl_channel_security_connector* c1 =
898
+ reinterpret_cast<grpc_ssl_channel_security_connector*>(sc1);
899
+ grpc_ssl_channel_security_connector* c2 =
900
+ reinterpret_cast<grpc_ssl_channel_security_connector*>(sc2);
901
+ int c = grpc_channel_security_connector_cmp(&c1->base, &c2->base);
902
+ if (c != 0) return c;
903
+ c = strcmp(c1->target_name, c2->target_name);
904
+ if (c != 0) return c;
905
+ return (c1->overridden_target_name == nullptr ||
906
+ c2->overridden_target_name == nullptr)
907
+ ? GPR_ICMP(c1->overridden_target_name, c2->overridden_target_name)
908
+ : strcmp(c1->overridden_target_name, c2->overridden_target_name);
909
+ }
910
+
911
+ static int ssl_server_cmp(grpc_security_connector* sc1,
912
+ grpc_security_connector* sc2) {
913
+ return grpc_server_security_connector_cmp(
914
+ reinterpret_cast<grpc_server_security_connector*>(sc1),
915
+ reinterpret_cast<grpc_server_security_connector*>(sc2));
916
+ }
917
+
918
+ static void add_shallow_auth_property_to_peer(tsi_peer* peer,
919
+ const grpc_auth_property* prop,
920
+ const char* tsi_prop_name) {
921
+ tsi_peer_property* tsi_prop = &peer->properties[peer->property_count++];
922
+ tsi_prop->name = const_cast<char*>(tsi_prop_name);
923
+ tsi_prop->value.data = prop->value;
924
+ tsi_prop->value.length = prop->value_length;
925
+ }
926
+
927
+ tsi_peer tsi_shallow_peer_from_ssl_auth_context(
928
+ const grpc_auth_context* auth_context) {
929
+ size_t max_num_props = 0;
930
+ grpc_auth_property_iterator it;
931
+ const grpc_auth_property* prop;
932
+ tsi_peer peer;
933
+ memset(&peer, 0, sizeof(peer));
934
+
935
+ it = grpc_auth_context_property_iterator(auth_context);
936
+ while (grpc_auth_property_iterator_next(&it) != nullptr) max_num_props++;
937
+
938
+ if (max_num_props > 0) {
939
+ peer.properties = static_cast<tsi_peer_property*>(
940
+ gpr_malloc(max_num_props * sizeof(tsi_peer_property)));
941
+ it = grpc_auth_context_property_iterator(auth_context);
942
+ while ((prop = grpc_auth_property_iterator_next(&it)) != nullptr) {
943
+ if (strcmp(prop->name, GRPC_X509_SAN_PROPERTY_NAME) == 0) {
944
+ add_shallow_auth_property_to_peer(
945
+ &peer, prop, TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY);
946
+ } else if (strcmp(prop->name, GRPC_X509_CN_PROPERTY_NAME) == 0) {
947
+ add_shallow_auth_property_to_peer(
948
+ &peer, prop, TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY);
949
+ } else if (strcmp(prop->name, GRPC_X509_PEM_CERT_PROPERTY_NAME) == 0) {
950
+ add_shallow_auth_property_to_peer(&peer, prop,
951
+ TSI_X509_PEM_CERT_PROPERTY);
952
+ }
953
+ }
954
+ }
955
+ return peer;
956
+ }
957
+
958
+ void tsi_shallow_peer_destruct(tsi_peer* peer) {
959
+ if (peer->properties != nullptr) gpr_free(peer->properties);
960
+ }
961
+
962
+ static bool ssl_channel_check_call_host(grpc_channel_security_connector* sc,
963
+ const char* host,
964
+ grpc_auth_context* auth_context,
965
+ grpc_closure* on_call_host_checked,
966
+ grpc_error** error) {
967
+ grpc_ssl_channel_security_connector* c =
968
+ reinterpret_cast<grpc_ssl_channel_security_connector*>(sc);
969
+ grpc_security_status status = GRPC_SECURITY_ERROR;
970
+ tsi_peer peer = tsi_shallow_peer_from_ssl_auth_context(auth_context);
971
+ if (ssl_host_matches_name(&peer, host)) status = GRPC_SECURITY_OK;
972
+ /* If the target name was overridden, then the original target_name was
973
+ 'checked' transitively during the previous peer check at the end of the
974
+ handshake. */
975
+ if (c->overridden_target_name != nullptr &&
976
+ strcmp(host, c->target_name) == 0) {
977
+ status = GRPC_SECURITY_OK;
978
+ }
979
+ if (status != GRPC_SECURITY_OK) {
980
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
981
+ "call host does not match SSL server name");
982
+ }
983
+ tsi_shallow_peer_destruct(&peer);
984
+ return true;
985
+ }
986
+
987
+ static void ssl_channel_cancel_check_call_host(
988
+ grpc_channel_security_connector* sc, grpc_closure* on_call_host_checked,
989
+ grpc_error* error) {
990
+ GRPC_ERROR_UNREF(error);
991
+ }
992
+
993
+ static grpc_security_connector_vtable ssl_channel_vtable = {
994
+ ssl_channel_destroy, ssl_channel_check_peer, ssl_channel_cmp};
995
+
996
+ static grpc_security_connector_vtable ssl_server_vtable = {
997
+ ssl_server_destroy, ssl_server_check_peer, ssl_server_cmp};
998
+
999
+ grpc_security_status grpc_ssl_channel_security_connector_create(
1000
+ grpc_channel_credentials* channel_creds,
1001
+ grpc_call_credentials* request_metadata_creds,
1002
+ const grpc_ssl_config* config, const char* target_name,
1003
+ const char* overridden_target_name,
1004
+ tsi_ssl_session_cache* ssl_session_cache,
1005
+ grpc_channel_security_connector** sc) {
1006
+ tsi_result result = TSI_OK;
1007
+ grpc_ssl_channel_security_connector* c;
1008
+ char* port;
1009
+ bool has_key_cert_pair;
1010
+ tsi_ssl_client_handshaker_options options;
1011
+ memset(&options, 0, sizeof(options));
1012
+ options.alpn_protocols =
1013
+ fill_alpn_protocol_strings(&options.num_alpn_protocols);
1014
+
1015
+ if (config == nullptr || target_name == nullptr) {
1016
+ gpr_log(GPR_ERROR, "An ssl channel needs a config and a target name.");
1017
+ goto error;
1018
+ }
1019
+ if (config->pem_root_certs == nullptr) {
1020
+ // Use default root certificates.
1021
+ options.pem_root_certs = grpc_core::DefaultSslRootStore::GetPemRootCerts();
1022
+ options.root_store = grpc_core::DefaultSslRootStore::GetRootStore();
1023
+ if (options.pem_root_certs == nullptr) {
1024
+ gpr_log(GPR_ERROR, "Could not get default pem root certs.");
1025
+ goto error;
1026
+ }
1027
+ } else {
1028
+ options.pem_root_certs = config->pem_root_certs;
1029
+ }
1030
+ c = static_cast<grpc_ssl_channel_security_connector*>(
1031
+ gpr_zalloc(sizeof(grpc_ssl_channel_security_connector)));
1032
+
1033
+ gpr_ref_init(&c->base.base.refcount, 1);
1034
+ c->base.base.vtable = &ssl_channel_vtable;
1035
+ c->base.base.url_scheme = GRPC_SSL_URL_SCHEME;
1036
+ c->base.channel_creds = grpc_channel_credentials_ref(channel_creds);
1037
+ c->base.request_metadata_creds =
1038
+ grpc_call_credentials_ref(request_metadata_creds);
1039
+ c->base.check_call_host = ssl_channel_check_call_host;
1040
+ c->base.cancel_check_call_host = ssl_channel_cancel_check_call_host;
1041
+ c->base.add_handshakers = ssl_channel_add_handshakers;
1042
+ gpr_split_host_port(target_name, &c->target_name, &port);
1043
+ gpr_free(port);
1044
+ if (overridden_target_name != nullptr) {
1045
+ c->overridden_target_name = gpr_strdup(overridden_target_name);
1046
+ }
1047
+
1048
+ has_key_cert_pair = config->pem_key_cert_pair != nullptr &&
1049
+ config->pem_key_cert_pair->private_key != nullptr &&
1050
+ config->pem_key_cert_pair->cert_chain != nullptr;
1051
+ if (has_key_cert_pair) {
1052
+ options.pem_key_cert_pair = config->pem_key_cert_pair;
1053
+ }
1054
+ options.cipher_suites = ssl_cipher_suites();
1055
+ options.session_cache = ssl_session_cache;
1056
+ result = tsi_create_ssl_client_handshaker_factory_with_options(
1057
+ &options, &c->client_handshaker_factory);
1058
+ if (result != TSI_OK) {
1059
+ gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
1060
+ tsi_result_to_string(result));
1061
+ ssl_channel_destroy(&c->base.base);
1062
+ *sc = nullptr;
1063
+ goto error;
1064
+ }
1065
+ *sc = &c->base;
1066
+ gpr_free((void*)options.alpn_protocols);
1067
+ return GRPC_SECURITY_OK;
1068
+
1069
+ error:
1070
+ gpr_free((void*)options.alpn_protocols);
1071
+ return GRPC_SECURITY_ERROR;
1072
+ }
1073
+
1074
+ static grpc_ssl_server_security_connector*
1075
+ grpc_ssl_server_security_connector_initialize(
1076
+ grpc_server_credentials* server_creds) {
1077
+ grpc_ssl_server_security_connector* c =
1078
+ static_cast<grpc_ssl_server_security_connector*>(
1079
+ gpr_zalloc(sizeof(grpc_ssl_server_security_connector)));
1080
+ gpr_ref_init(&c->base.base.refcount, 1);
1081
+ c->base.base.url_scheme = GRPC_SSL_URL_SCHEME;
1082
+ c->base.base.vtable = &ssl_server_vtable;
1083
+ c->base.add_handshakers = ssl_server_add_handshakers;
1084
+ c->base.server_creds = grpc_server_credentials_ref(server_creds);
1085
+ return c;
1086
+ }
1087
+
1088
+ grpc_security_status grpc_ssl_server_security_connector_create(
1089
+ grpc_server_credentials* gsc, grpc_server_security_connector** sc) {
1090
+ tsi_result result = TSI_OK;
1091
+ grpc_ssl_server_credentials* server_credentials =
1092
+ reinterpret_cast<grpc_ssl_server_credentials*>(gsc);
1093
+ grpc_security_status retval = GRPC_SECURITY_OK;
1094
+
1095
+ GPR_ASSERT(server_credentials != nullptr);
1096
+ GPR_ASSERT(sc != nullptr);
1097
+
1098
+ grpc_ssl_server_security_connector* c =
1099
+ grpc_ssl_server_security_connector_initialize(gsc);
1100
+ if (server_connector_has_cert_config_fetcher(c)) {
1101
+ // Load initial credentials from certificate_config_fetcher:
1102
+ if (!try_fetch_ssl_server_credentials(c)) {
1103
+ gpr_log(GPR_ERROR, "Failed loading SSL server credentials from fetcher.");
1104
+ retval = GRPC_SECURITY_ERROR;
1105
+ }
1106
+ } else {
1107
+ size_t num_alpn_protocols = 0;
1108
+ const char** alpn_protocol_strings =
1109
+ fill_alpn_protocol_strings(&num_alpn_protocols);
1110
+ result = tsi_create_ssl_server_handshaker_factory_ex(
1111
+ server_credentials->config.pem_key_cert_pairs,
1112
+ server_credentials->config.num_key_cert_pairs,
1113
+ server_credentials->config.pem_root_certs,
1114
+ get_tsi_client_certificate_request_type(
1115
+ server_credentials->config.client_certificate_request),
1116
+ ssl_cipher_suites(), alpn_protocol_strings,
1117
+ static_cast<uint16_t>(num_alpn_protocols),
1118
+ &c->server_handshaker_factory);
1119
+ gpr_free((void*)alpn_protocol_strings);
1120
+ if (result != TSI_OK) {
1121
+ gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
1122
+ tsi_result_to_string(result));
1123
+ retval = GRPC_SECURITY_ERROR;
1124
+ }
1125
+ }
1126
+
1127
+ if (retval == GRPC_SECURITY_OK) {
1128
+ *sc = &c->base;
1129
+ } else {
1130
+ if (c != nullptr) ssl_server_destroy(&c->base.base);
1131
+ if (sc != nullptr) *sc = nullptr;
1132
+ }
1133
+ return retval;
1134
+ }
1135
+
1136
+ namespace grpc_core {
1137
+
1138
+ tsi_ssl_root_certs_store* DefaultSslRootStore::default_root_store_;
1139
+ grpc_slice DefaultSslRootStore::default_pem_root_certs_;
1140
+
1141
+ const tsi_ssl_root_certs_store* DefaultSslRootStore::GetRootStore() {
1142
+ InitRootStore();
1143
+ return default_root_store_;
1144
+ }
1145
+
1146
+ const char* DefaultSslRootStore::GetPemRootCerts() {
1147
+ InitRootStore();
1148
+ return GRPC_SLICE_IS_EMPTY(default_pem_root_certs_)
1149
+ ? nullptr
1150
+ : reinterpret_cast<const char*>
1151
+ GRPC_SLICE_START_PTR(default_pem_root_certs_);
1152
+ }
1153
+
1154
+ grpc_slice DefaultSslRootStore::ComputePemRootCerts() {
1155
+ grpc_slice result = grpc_empty_slice();
1156
+ // First try to load the roots from the environment.
1157
+ char* default_root_certs_path =
1158
+ gpr_getenv(GRPC_DEFAULT_SSL_ROOTS_FILE_PATH_ENV_VAR);
1159
+ if (default_root_certs_path != nullptr) {
1160
+ GRPC_LOG_IF_ERROR("load_file",
1161
+ grpc_load_file(default_root_certs_path, 1, &result));
1162
+ gpr_free(default_root_certs_path);
1163
+ }
1164
+ // Try overridden roots if needed.
1165
+ grpc_ssl_roots_override_result ovrd_res = GRPC_SSL_ROOTS_OVERRIDE_FAIL;
1166
+ if (GRPC_SLICE_IS_EMPTY(result) && ssl_roots_override_cb != nullptr) {
1167
+ char* pem_root_certs = nullptr;
1168
+ ovrd_res = ssl_roots_override_cb(&pem_root_certs);
1169
+ if (ovrd_res == GRPC_SSL_ROOTS_OVERRIDE_OK) {
1170
+ GPR_ASSERT(pem_root_certs != nullptr);
1171
+ result = grpc_slice_from_copied_buffer(
1172
+ pem_root_certs,
1173
+ strlen(pem_root_certs) + 1); // nullptr terminator.
1174
+ }
1175
+ gpr_free(pem_root_certs);
1176
+ }
1177
+ // Fall back to installed certs if needed.
1178
+ if (GRPC_SLICE_IS_EMPTY(result) &&
1179
+ ovrd_res != GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY) {
1180
+ GRPC_LOG_IF_ERROR("load_file",
1181
+ grpc_load_file(installed_roots_path, 1, &result));
1182
+ }
1183
+ return result;
1184
+ }
1185
+
1186
+ void DefaultSslRootStore::InitRootStore() {
1187
+ static gpr_once once = GPR_ONCE_INIT;
1188
+ gpr_once_init(&once, DefaultSslRootStore::InitRootStoreOnce);
1189
+ }
1190
+
1191
+ void DefaultSslRootStore::InitRootStoreOnce() {
1192
+ default_pem_root_certs_ = ComputePemRootCerts();
1193
+ if (!GRPC_SLICE_IS_EMPTY(default_pem_root_certs_)) {
1194
+ default_root_store_ =
1195
+ tsi_ssl_root_certs_store_create(reinterpret_cast<const char*>(
1196
+ GRPC_SLICE_START_PTR(default_pem_root_certs_)));
1197
+ }
1198
+ }
1199
+
1200
+ } // namespace grpc_core