grpc 1.10.0 → 1.11.0.pre2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (762) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -501
  3. data/include/grpc/byte_buffer.h +2 -0
  4. data/include/grpc/byte_buffer_reader.h +2 -0
  5. data/include/grpc/census.h +2 -0
  6. data/include/grpc/fork.h +2 -0
  7. data/include/grpc/grpc.h +10 -0
  8. data/include/grpc/grpc_cronet.h +2 -0
  9. data/include/grpc/grpc_posix.h +2 -1
  10. data/include/grpc/grpc_security.h +21 -0
  11. data/include/grpc/grpc_security_constants.h +1 -0
  12. data/include/grpc/impl/codegen/byte_buffer.h +2 -0
  13. data/include/grpc/impl/codegen/grpc_types.h +24 -0
  14. data/include/grpc/impl/codegen/slice.h +1 -1
  15. data/include/grpc/impl/codegen/sync.h +1 -0
  16. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  17. data/include/grpc/impl/codegen/sync_generic.h +2 -0
  18. data/include/grpc/impl/codegen/sync_posix.h +2 -0
  19. data/include/grpc/impl/codegen/sync_windows.h +2 -0
  20. data/include/grpc/slice.h +2 -0
  21. data/include/grpc/slice_buffer.h +2 -0
  22. data/include/grpc/status.h +2 -0
  23. data/include/grpc/support/alloc.h +2 -2
  24. data/include/grpc/support/atm.h +2 -0
  25. data/include/grpc/support/atm_gcc_atomic.h +2 -0
  26. data/include/grpc/support/atm_gcc_sync.h +2 -0
  27. data/include/grpc/support/atm_windows.h +2 -0
  28. data/include/grpc/support/log.h +1 -1
  29. data/include/grpc/support/sync.h +2 -0
  30. data/include/grpc/support/sync_custom.h +2 -0
  31. data/include/grpc/support/sync_generic.h +2 -0
  32. data/include/grpc/support/sync_posix.h +2 -0
  33. data/include/grpc/support/sync_windows.h +2 -0
  34. data/include/grpc/support/time.h +2 -0
  35. data/src/boringssl/err_data.c +444 -438
  36. data/src/core/ext/census/grpc_context.cc +2 -0
  37. data/src/core/ext/filters/client_channel/backup_poller.cc +13 -8
  38. data/src/core/ext/filters/client_channel/backup_poller.h +3 -2
  39. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -0
  40. data/src/core/ext/filters/client_channel/client_channel.cc +1988 -433
  41. data/src/core/ext/filters/client_channel/client_channel.h +2 -0
  42. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -0
  43. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -0
  44. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +2 -27
  45. data/src/core/ext/filters/client_channel/connector.cc +2 -0
  46. data/src/core/ext/filters/client_channel/connector.h +2 -0
  47. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -0
  48. data/src/core/ext/filters/client_channel/http_proxy.cc +2 -0
  49. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -0
  50. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -0
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +2 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +96 -78
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -17
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +70 -62
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +2 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +4 -2
  61. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -2
  62. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +2 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +2 -0
  64. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +3 -1
  65. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
  66. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.h +2 -1
  68. data/src/core/ext/filters/client_channel/method_params.cc +178 -0
  69. data/src/core/ext/filters/client_channel/method_params.h +74 -0
  70. data/src/core/ext/filters/client_channel/parse_address.cc +17 -13
  71. data/src/core/ext/filters/client_channel/parse_address.h +2 -0
  72. data/src/core/ext/filters/client_channel/proxy_mapper.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper.h +2 -0
  74. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  75. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -0
  76. data/src/core/ext/filters/client_channel/resolver.cc +2 -0
  77. data/src/core/ext/filters/client_channel/resolver.h +6 -0
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -5
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -1
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -0
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +55 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +8 -1
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +1 -0
  84. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +30 -3
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -0
  86. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -1
  87. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  88. data/src/core/ext/filters/client_channel/resolver_registry.cc +2 -0
  89. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -0
  90. data/src/core/ext/filters/client_channel/retry_throttle.cc +102 -120
  91. data/src/core/ext/filters/client_channel/retry_throttle.h +52 -25
  92. data/src/core/ext/filters/client_channel/subchannel.cc +14 -4
  93. data/src/core/ext/filters/client_channel/subchannel.h +10 -1
  94. data/src/core/ext/filters/client_channel/subchannel_index.cc +2 -0
  95. data/src/core/ext/filters/client_channel/subchannel_index.h +2 -0
  96. data/src/core/ext/filters/client_channel/uri_parser.cc +2 -1
  97. data/src/core/ext/filters/client_channel/uri_parser.h +2 -1
  98. data/src/core/ext/filters/deadline/deadline_filter.cc +2 -1
  99. data/src/core/ext/filters/deadline/deadline_filter.h +2 -0
  100. data/src/core/ext/filters/http/client/http_client_filter.cc +27 -25
  101. data/src/core/ext/filters/http/client/http_client_filter.h +2 -0
  102. data/src/core/ext/filters/http/client_authority_filter.cc +156 -0
  103. data/src/core/ext/filters/http/client_authority_filter.h +34 -0
  104. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -0
  105. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +21 -22
  106. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +2 -0
  107. data/src/core/ext/filters/http/server/http_server_filter.cc +11 -8
  108. data/src/core/ext/filters/http/server/http_server_filter.h +2 -0
  109. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +2 -0
  110. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +2 -0
  111. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +2 -0
  112. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -0
  113. data/src/core/ext/filters/max_age/max_age_filter.h +2 -0
  114. data/src/core/ext/filters/message_size/message_size_filter.cc +52 -49
  115. data/src/core/ext/filters/message_size/message_size_filter.h +2 -0
  116. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -1
  117. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +2 -0
  118. data/src/core/ext/filters/workarounds/workaround_utils.cc +2 -0
  119. data/src/core/ext/filters/workarounds/workaround_utils.h +2 -0
  120. data/src/core/ext/transport/chttp2/alpn/alpn.cc +3 -1
  121. data/src/core/ext/transport/chttp2/alpn/alpn.h +2 -0
  122. data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
  123. data/src/core/ext/transport/chttp2/client/authority.h +36 -0
  124. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -0
  125. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -0
  126. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +10 -3
  127. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
  128. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +37 -25
  129. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +2 -0
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.h +3 -1
  131. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -1
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -1
  133. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +2 -0
  134. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -1
  135. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -0
  136. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -0
  137. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +2 -0
  138. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +2 -0
  139. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +152 -182
  140. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  141. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
  142. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  143. data/src/core/ext/transport/chttp2/transport/frame.h +2 -1
  144. data/src/core/ext/transport/chttp2/transport/frame_data.cc +15 -19
  145. data/src/core/ext/transport/chttp2/transport/frame_data.h +7 -5
  146. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -0
  147. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -2
  148. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -0
  149. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -1
  150. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -0
  151. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
  152. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
  153. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -2
  154. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +2 -0
  155. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -1
  156. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -0
  157. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -1
  158. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -1
  159. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -2
  160. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -0
  161. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -1
  162. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -0
  163. data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -0
  164. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +2 -0
  165. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +3 -2
  166. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -0
  167. data/src/core/ext/transport/chttp2/transport/internal.h +60 -24
  168. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  169. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
  170. data/src/core/ext/transport/chttp2/transport/stream_map.cc +2 -0
  171. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -0
  172. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -6
  173. data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -0
  174. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -23
  175. data/src/core/ext/transport/inproc/inproc_transport.h +2 -0
  176. data/src/core/lib/avl/avl.cc +2 -0
  177. data/src/core/lib/avl/avl.h +2 -0
  178. data/src/core/lib/backoff/backoff.cc +2 -0
  179. data/src/core/lib/backoff/backoff.h +2 -0
  180. data/src/core/lib/channel/channel_args.h +2 -0
  181. data/src/core/lib/channel/channel_stack.cc +3 -1
  182. data/src/core/lib/channel/channel_stack.h +2 -0
  183. data/src/core/lib/channel/channel_stack_builder.cc +2 -0
  184. data/src/core/lib/channel/channel_stack_builder.h +2 -0
  185. data/src/core/lib/channel/channel_trace.cc +239 -0
  186. data/src/core/lib/channel/channel_trace.h +133 -0
  187. data/src/core/lib/channel/channel_trace_registry.cc +80 -0
  188. data/src/core/lib/channel/channel_trace_registry.h +43 -0
  189. data/src/core/lib/channel/connected_channel.cc +2 -0
  190. data/src/core/lib/channel/connected_channel.h +2 -0
  191. data/src/core/lib/channel/handshaker.cc +2 -0
  192. data/src/core/lib/channel/handshaker.h +2 -0
  193. data/src/core/lib/channel/handshaker_factory.cc +2 -0
  194. data/src/core/lib/channel/handshaker_factory.h +2 -1
  195. data/src/core/lib/channel/handshaker_registry.cc +2 -0
  196. data/src/core/lib/channel/handshaker_registry.h +2 -1
  197. data/src/core/lib/channel/status_util.cc +100 -0
  198. data/src/core/lib/channel/status_util.h +58 -0
  199. data/src/core/lib/compression/algorithm_metadata.h +2 -0
  200. data/src/core/lib/compression/compression.cc +2 -0
  201. data/src/core/lib/compression/compression_internal.cc +2 -0
  202. data/src/core/lib/compression/compression_internal.h +2 -0
  203. data/src/core/lib/compression/message_compress.cc +2 -0
  204. data/src/core/lib/compression/message_compress.h +2 -0
  205. data/src/core/lib/compression/stream_compression.cc +2 -0
  206. data/src/core/lib/compression/stream_compression.h +2 -0
  207. data/src/core/lib/compression/stream_compression_gzip.cc +2 -0
  208. data/src/core/lib/compression/stream_compression_gzip.h +2 -0
  209. data/src/core/lib/compression/stream_compression_identity.cc +2 -1
  210. data/src/core/lib/compression/stream_compression_identity.h +2 -0
  211. data/src/core/lib/debug/stats.cc +2 -0
  212. data/src/core/lib/debug/stats.h +2 -0
  213. data/src/core/lib/debug/stats_data.cc +3 -1
  214. data/src/core/lib/debug/stats_data.h +2 -0
  215. data/src/core/lib/debug/trace.cc +2 -0
  216. data/src/core/lib/debug/trace.h +2 -1
  217. data/src/core/lib/gpr/alloc.cc +2 -1
  218. data/src/core/lib/gpr/arena.cc +47 -0
  219. data/src/core/lib/gpr/arena.h +2 -0
  220. data/src/core/lib/gpr/atm.cc +2 -0
  221. data/src/core/lib/gpr/cpu_linux.cc +5 -1
  222. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  223. data/src/core/lib/gpr/env.h +2 -0
  224. data/src/core/lib/gpr/fork.cc +2 -0
  225. data/src/core/lib/gpr/host_port.cc +2 -0
  226. data/src/core/lib/gpr/log.cc +2 -1
  227. data/src/core/lib/gpr/log_linux.cc +1 -0
  228. data/src/core/lib/gpr/mpscq.cc +2 -0
  229. data/src/core/lib/gpr/mpscq.h +2 -0
  230. data/src/core/lib/gpr/murmur_hash.cc +2 -0
  231. data/src/core/lib/gpr/spinlock.h +2 -0
  232. data/src/core/lib/gpr/string.cc +2 -1
  233. data/src/core/lib/gpr/string.h +2 -2
  234. data/src/core/lib/gpr/sync.cc +2 -0
  235. data/src/core/lib/gpr/time.cc +2 -0
  236. data/src/core/lib/gpr/time_posix.cc +1 -0
  237. data/src/core/lib/gpr/time_precise.cc +2 -0
  238. data/src/core/lib/gpr/time_precise.h +2 -0
  239. data/src/core/lib/gpr/tls_gcc.h +2 -0
  240. data/src/core/lib/gpr/tls_msvc.h +2 -0
  241. data/src/core/lib/gpr/tls_pthread.h +2 -0
  242. data/src/core/lib/gpr/tmpfile.h +2 -0
  243. data/src/core/lib/gprpp/atomic_with_atm.h +2 -0
  244. data/src/core/lib/gprpp/atomic_with_std.h +2 -0
  245. data/src/core/lib/gprpp/inlined_vector.h +2 -0
  246. data/src/core/lib/gprpp/manual_constructor.h +3 -1
  247. data/src/core/lib/gprpp/memory.h +5 -3
  248. data/src/core/lib/gprpp/orphanable.h +3 -0
  249. data/src/core/lib/gprpp/ref_counted.h +4 -0
  250. data/src/core/lib/gprpp/ref_counted_ptr.h +3 -0
  251. data/src/core/lib/gprpp/thd.h +135 -0
  252. data/src/core/lib/gprpp/thd_posix.cc +209 -0
  253. data/src/core/lib/gprpp/thd_windows.cc +162 -0
  254. data/src/core/lib/http/format_request.cc +2 -0
  255. data/src/core/lib/http/format_request.h +2 -0
  256. data/src/core/lib/http/httpcli.cc +2 -0
  257. data/src/core/lib/http/httpcli.h +2 -0
  258. data/src/core/lib/http/httpcli_security_connector.cc +16 -7
  259. data/src/core/lib/http/parser.cc +2 -0
  260. data/src/core/lib/http/parser.h +2 -1
  261. data/src/core/lib/iomgr/call_combiner.cc +2 -0
  262. data/src/core/lib/iomgr/call_combiner.h +2 -1
  263. data/src/core/lib/iomgr/combiner.cc +2 -0
  264. data/src/core/lib/iomgr/combiner.h +2 -0
  265. data/src/core/lib/iomgr/endpoint.cc +4 -0
  266. data/src/core/lib/iomgr/endpoint.h +2 -0
  267. data/src/core/lib/iomgr/endpoint_pair.h +2 -0
  268. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -0
  269. data/src/core/lib/iomgr/endpoint_pair_uv.cc +2 -0
  270. data/src/core/lib/iomgr/endpoint_pair_windows.cc +7 -4
  271. data/src/core/lib/iomgr/error.h +2 -0
  272. data/src/core/lib/iomgr/error_internal.h +2 -0
  273. data/src/core/lib/iomgr/ev_epoll1_linux.cc +2 -0
  274. data/src/core/lib/iomgr/ev_epoll1_linux.h +2 -0
  275. data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -18
  276. data/src/core/lib/iomgr/ev_epollex_linux.h +2 -0
  277. data/src/core/lib/iomgr/ev_epollsig_linux.cc +2 -0
  278. data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -0
  279. data/src/core/lib/iomgr/ev_poll_posix.cc +61 -31
  280. data/src/core/lib/iomgr/ev_poll_posix.h +2 -0
  281. data/src/core/lib/iomgr/ev_posix.cc +35 -19
  282. data/src/core/lib/iomgr/ev_posix.h +2 -0
  283. data/src/core/lib/iomgr/ev_windows.cc +2 -0
  284. data/src/core/lib/iomgr/exec_ctx.cc +3 -1
  285. data/src/core/lib/iomgr/exec_ctx.h +21 -9
  286. data/src/core/lib/iomgr/executor.cc +13 -11
  287. data/src/core/lib/iomgr/executor.h +2 -0
  288. data/src/core/lib/iomgr/fork_posix.cc +4 -2
  289. data/src/core/lib/iomgr/fork_windows.cc +2 -0
  290. data/src/core/lib/iomgr/gethostname_fallback.cc +2 -0
  291. data/src/core/lib/iomgr/gethostname_host_name_max.cc +2 -0
  292. data/src/core/lib/iomgr/gethostname_sysconf.cc +2 -0
  293. data/src/core/lib/iomgr/iocp_windows.cc +3 -1
  294. data/src/core/lib/iomgr/iocp_windows.h +3 -0
  295. data/src/core/lib/iomgr/iomgr.cc +2 -1
  296. data/src/core/lib/iomgr/iomgr.h +2 -0
  297. data/src/core/lib/iomgr/iomgr_custom.cc +63 -0
  298. data/src/core/lib/iomgr/iomgr_custom.h +47 -0
  299. data/src/core/lib/iomgr/iomgr_internal.cc +43 -0
  300. data/src/core/lib/iomgr/iomgr_internal.h +14 -0
  301. data/src/core/lib/iomgr/iomgr_posix.cc +30 -3
  302. data/src/core/lib/iomgr/iomgr_posix.h +2 -0
  303. data/src/core/lib/iomgr/iomgr_uv.cc +17 -20
  304. data/src/core/lib/iomgr/iomgr_windows.cc +29 -3
  305. data/src/core/lib/iomgr/is_epollexclusive_available.cc +2 -0
  306. data/src/core/lib/iomgr/is_epollexclusive_available.h +2 -0
  307. data/src/core/lib/iomgr/load_file.cc +2 -0
  308. data/src/core/lib/iomgr/load_file.h +2 -0
  309. data/src/core/lib/iomgr/lockfree_event.cc +2 -0
  310. data/src/core/lib/iomgr/lockfree_event.h +14 -1
  311. data/src/core/lib/iomgr/nameser.h +2 -0
  312. data/src/core/lib/iomgr/network_status_tracker.cc +3 -1
  313. data/src/core/lib/iomgr/network_status_tracker.h +2 -0
  314. data/src/core/lib/iomgr/polling_entity.cc +2 -0
  315. data/src/core/lib/iomgr/polling_entity.h +2 -0
  316. data/src/core/lib/iomgr/pollset.cc +56 -0
  317. data/src/core/lib/iomgr/pollset.h +19 -0
  318. data/src/core/lib/iomgr/pollset_custom.cc +106 -0
  319. data/src/core/lib/iomgr/{timer_generic.h → pollset_custom.h} +15 -17
  320. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  321. data/src/core/lib/iomgr/pollset_set.h +13 -0
  322. data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
  323. data/src/core/lib/iomgr/{pollset_uv.h → pollset_set_custom.h} +6 -7
  324. data/src/core/lib/iomgr/pollset_set_windows.cc +17 -10
  325. data/src/core/lib/iomgr/pollset_set_windows.h +2 -0
  326. data/src/core/lib/iomgr/pollset_uv.cc +42 -105
  327. data/src/core/lib/iomgr/pollset_windows.cc +20 -12
  328. data/src/core/lib/iomgr/pollset_windows.h +2 -0
  329. data/src/core/lib/iomgr/port.h +10 -19
  330. data/src/core/lib/iomgr/resolve_address.cc +50 -0
  331. data/src/core/lib/iomgr/resolve_address.h +39 -10
  332. data/src/core/lib/iomgr/resolve_address_custom.cc +187 -0
  333. data/src/core/lib/iomgr/resolve_address_custom.h +43 -0
  334. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -22
  335. data/src/core/lib/iomgr/resolve_address_windows.cc +10 -22
  336. data/src/core/lib/iomgr/resource_quota.cc +2 -0
  337. data/src/core/lib/iomgr/resource_quota.h +3 -5
  338. data/src/core/lib/iomgr/sockaddr.h +3 -11
  339. data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
  340. data/src/core/lib/iomgr/sockaddr_posix.h +26 -0
  341. data/src/core/lib/iomgr/sockaddr_utils.cc +91 -71
  342. data/src/core/lib/iomgr/sockaddr_utils.h +4 -0
  343. data/src/core/lib/iomgr/sockaddr_windows.h +21 -0
  344. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -0
  345. data/src/core/lib/iomgr/socket_factory_posix.h +2 -0
  346. data/src/core/lib/iomgr/socket_mutator.cc +2 -0
  347. data/src/core/lib/iomgr/socket_mutator.h +2 -0
  348. data/src/core/lib/iomgr/socket_utils.h +11 -0
  349. data/src/core/lib/iomgr/socket_utils_common_posix.cc +15 -6
  350. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  351. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -2
  352. data/src/core/lib/iomgr/socket_utils_posix.h +2 -0
  353. data/src/core/lib/iomgr/socket_utils_uv.cc +13 -2
  354. data/src/core/lib/iomgr/socket_utils_windows.cc +10 -0
  355. data/src/core/lib/iomgr/socket_windows.cc +2 -0
  356. data/src/core/lib/iomgr/socket_windows.h +2 -1
  357. data/src/core/lib/iomgr/sys_epoll_wrapper.h +2 -0
  358. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  359. data/src/core/lib/iomgr/tcp_client.h +13 -0
  360. data/src/core/lib/iomgr/tcp_client_custom.cc +151 -0
  361. data/src/core/lib/iomgr/tcp_client_posix.cc +11 -24
  362. data/src/core/lib/iomgr/tcp_client_posix.h +2 -0
  363. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -23
  364. data/src/core/lib/iomgr/tcp_custom.cc +365 -0
  365. data/src/core/lib/iomgr/tcp_custom.h +81 -0
  366. data/src/core/lib/iomgr/tcp_posix.cc +3 -1
  367. data/src/core/lib/iomgr/tcp_posix.h +2 -0
  368. data/src/core/lib/iomgr/tcp_server.cc +73 -0
  369. data/src/core/lib/iomgr/tcp_server.h +24 -0
  370. data/src/core/lib/iomgr/tcp_server_custom.cc +472 -0
  371. data/src/core/lib/iomgr/tcp_server_posix.cc +41 -23
  372. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -0
  373. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
  374. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -6
  375. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +2 -0
  376. data/src/core/lib/iomgr/tcp_server_windows.cc +43 -21
  377. data/src/core/lib/iomgr/tcp_uv.cc +308 -314
  378. data/src/core/lib/iomgr/tcp_windows.cc +3 -1
  379. data/src/core/lib/iomgr/tcp_windows.h +2 -0
  380. data/src/core/lib/iomgr/time_averaged_stats.cc +2 -0
  381. data/src/core/lib/iomgr/timer.cc +45 -0
  382. data/src/core/lib/iomgr/timer.h +36 -15
  383. data/src/core/lib/iomgr/timer_custom.cc +93 -0
  384. data/src/core/lib/iomgr/timer_custom.h +43 -0
  385. data/src/core/lib/iomgr/timer_generic.cc +12 -10
  386. data/src/core/lib/iomgr/timer_heap.cc +2 -4
  387. data/src/core/lib/iomgr/timer_heap.h +2 -0
  388. data/src/core/lib/iomgr/timer_manager.cc +12 -20
  389. data/src/core/lib/iomgr/timer_manager.h +2 -0
  390. data/src/core/lib/iomgr/timer_uv.cc +15 -49
  391. data/src/core/lib/iomgr/udp_server.cc +271 -230
  392. data/src/core/lib/iomgr/udp_server.h +44 -20
  393. data/src/core/lib/iomgr/unix_sockets_posix.cc +10 -7
  394. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -0
  395. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -0
  396. data/src/core/lib/iomgr/wakeup_fd_cv.cc +3 -1
  397. data/src/core/lib/iomgr/wakeup_fd_cv.h +2 -0
  398. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +2 -0
  399. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -0
  400. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -0
  401. data/src/core/lib/iomgr/wakeup_fd_pipe.h +2 -0
  402. data/src/core/lib/iomgr/wakeup_fd_posix.cc +2 -0
  403. data/src/core/lib/iomgr/wakeup_fd_posix.h +2 -0
  404. data/src/core/lib/json/json.cc +38 -0
  405. data/src/core/lib/json/json.h +22 -1
  406. data/src/core/lib/json/json_reader.cc +2 -2
  407. data/src/core/lib/json/json_reader.h +1 -0
  408. data/src/core/lib/json/json_string.cc +2 -0
  409. data/src/core/lib/json/json_writer.cc +2 -2
  410. data/src/core/lib/json/json_writer.h +2 -0
  411. data/src/core/lib/profiling/basic_timers.cc +11 -9
  412. data/src/core/lib/profiling/timers.h +6 -3
  413. data/src/core/lib/security/context/security_context.cc +2 -0
  414. data/src/core/lib/security/context/security_context.h +2 -0
  415. data/src/core/lib/security/credentials/alts/alts_credentials.cc +119 -0
  416. data/src/core/lib/security/credentials/alts/alts_credentials.h +102 -0
  417. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  418. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  419. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +67 -0
  420. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  421. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +114 -0
  422. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +126 -0
  423. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  424. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +112 -0
  425. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +58 -0
  426. data/src/core/lib/security/credentials/composite/composite_credentials.cc +2 -0
  427. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -0
  428. data/src/core/lib/security/credentials/credentials.cc +2 -0
  429. data/src/core/lib/security/credentials/credentials.h +2 -0
  430. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -0
  431. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -3
  432. data/src/core/lib/security/credentials/fake/fake_credentials.h +5 -0
  433. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +2 -0
  434. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -0
  435. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -0
  436. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -0
  437. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -0
  438. data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
  439. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -0
  440. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
  441. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -0
  442. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -0
  443. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +2 -0
  444. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -0
  445. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  446. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +11 -2
  447. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -0
  448. data/src/core/lib/security/security_connector/alts_security_connector.cc +287 -0
  449. data/src/core/lib/security/security_connector/alts_security_connector.h +69 -0
  450. data/src/core/lib/security/security_connector/security_connector.cc +174 -74
  451. data/src/core/lib/security/security_connector/security_connector.h +41 -7
  452. data/src/core/lib/security/transport/auth_filters.h +2 -0
  453. data/src/core/lib/security/transport/client_auth_filter.cc +14 -28
  454. data/src/core/lib/security/transport/secure_endpoint.cc +2 -0
  455. data/src/core/lib/security/transport/secure_endpoint.h +2 -0
  456. data/src/core/lib/security/transport/security_handshaker.cc +2 -0
  457. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  458. data/src/core/lib/security/transport/server_auth_filter.cc +2 -0
  459. data/src/core/lib/security/transport/target_authority_table.cc +75 -0
  460. data/src/core/lib/security/transport/{lb_targets_info.h → target_authority_table.h} +16 -8
  461. data/src/core/lib/security/transport/tsi_error.cc +2 -0
  462. data/src/core/lib/security/transport/tsi_error.h +2 -0
  463. data/src/core/lib/security/util/json_util.cc +2 -0
  464. data/src/core/lib/security/util/json_util.h +2 -0
  465. data/src/core/lib/slice/b64.cc +2 -0
  466. data/src/core/lib/slice/b64.h +2 -0
  467. data/src/core/lib/slice/percent_encoding.cc +2 -0
  468. data/src/core/lib/slice/percent_encoding.h +2 -0
  469. data/src/core/lib/slice/slice.cc +2 -0
  470. data/src/core/lib/slice/slice_buffer.cc +3 -1
  471. data/src/core/lib/slice/slice_hash_table.h +178 -45
  472. data/src/core/lib/slice/slice_intern.cc +2 -0
  473. data/src/core/lib/slice/slice_internal.h +2 -2
  474. data/src/core/lib/slice/slice_string_helpers.cc +2 -0
  475. data/src/core/lib/slice/slice_string_helpers.h +2 -1
  476. data/src/core/lib/slice/slice_weak_hash_table.h +105 -0
  477. data/src/core/lib/surface/api_trace.cc +3 -1
  478. data/src/core/lib/surface/api_trace.h +2 -0
  479. data/src/core/lib/surface/byte_buffer.cc +3 -0
  480. data/src/core/lib/surface/byte_buffer_reader.cc +3 -0
  481. data/src/core/lib/surface/call.cc +46 -80
  482. data/src/core/lib/surface/call.h +2 -0
  483. data/src/core/lib/surface/call_details.cc +2 -0
  484. data/src/core/lib/surface/call_log_batch.cc +2 -0
  485. data/src/core/lib/surface/call_test_only.h +2 -0
  486. data/src/core/lib/surface/channel.cc +72 -41
  487. data/src/core/lib/surface/channel.h +2 -0
  488. data/src/core/lib/surface/channel_init.cc +2 -0
  489. data/src/core/lib/surface/channel_init.h +2 -0
  490. data/src/core/lib/surface/channel_ping.cc +2 -0
  491. data/src/core/lib/surface/channel_stack_type.cc +3 -2
  492. data/src/core/lib/surface/channel_stack_type.h +2 -0
  493. data/src/core/lib/surface/completion_queue.h +2 -0
  494. data/src/core/lib/surface/completion_queue_factory.cc +3 -1
  495. data/src/core/lib/surface/completion_queue_factory.h +2 -0
  496. data/src/core/lib/surface/event_string.cc +2 -0
  497. data/src/core/lib/surface/event_string.h +2 -0
  498. data/src/core/lib/surface/init.cc +5 -2
  499. data/src/core/lib/surface/init_secure.cc +5 -2
  500. data/src/core/lib/surface/lame_client.cc +7 -5
  501. data/src/core/lib/surface/lame_client.h +2 -0
  502. data/src/core/lib/surface/metadata_array.cc +2 -0
  503. data/src/core/lib/surface/server.cc +2 -0
  504. data/src/core/lib/surface/server.h +2 -0
  505. data/src/core/lib/surface/validate_metadata.cc +2 -1
  506. data/src/core/lib/surface/validate_metadata.h +2 -0
  507. data/src/core/lib/surface/version.cc +4 -2
  508. data/src/core/lib/transport/bdp_estimator.cc +2 -0
  509. data/src/core/lib/transport/byte_stream.cc +94 -116
  510. data/src/core/lib/transport/byte_stream.h +111 -78
  511. data/src/core/lib/transport/connectivity_state.cc +2 -0
  512. data/src/core/lib/transport/connectivity_state.h +3 -1
  513. data/src/core/lib/transport/error_utils.cc +2 -0
  514. data/src/core/lib/transport/error_utils.h +2 -0
  515. data/src/core/lib/transport/metadata.cc +2 -0
  516. data/src/core/lib/transport/metadata.h +3 -1
  517. data/src/core/lib/transport/metadata_batch.cc +26 -0
  518. data/src/core/lib/transport/metadata_batch.h +12 -1
  519. data/src/core/lib/transport/pid_controller.cc +2 -0
  520. data/src/core/lib/transport/pid_controller.h +2 -0
  521. data/src/core/lib/transport/service_config.cc +21 -175
  522. data/src/core/lib/transport/service_config.h +223 -35
  523. data/src/core/lib/transport/static_metadata.cc +310 -294
  524. data/src/core/lib/transport/static_metadata.h +96 -82
  525. data/src/core/lib/transport/status_conversion.cc +2 -0
  526. data/src/core/lib/transport/status_conversion.h +3 -0
  527. data/src/core/lib/transport/status_metadata.cc +54 -0
  528. data/src/core/lib/{iomgr/timer_uv.h → transport/status_metadata.h} +10 -12
  529. data/src/core/lib/transport/timeout_encoding.cc +2 -1
  530. data/src/core/lib/transport/timeout_encoding.h +2 -0
  531. data/src/core/lib/transport/transport.cc +3 -1
  532. data/src/core/lib/transport/transport.h +33 -7
  533. data/src/core/lib/transport/transport_impl.h +2 -0
  534. data/src/core/lib/transport/transport_op_string.cc +10 -3
  535. data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
  536. data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
  537. data/src/core/tsi/alts/crypt/gsec.cc +189 -0
  538. data/src/core/tsi/alts/crypt/gsec.h +454 -0
  539. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  540. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  541. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  542. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  543. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
  544. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  545. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  546. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  547. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  548. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  549. data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
  550. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  551. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +316 -0
  552. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +137 -0
  553. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +520 -0
  554. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +323 -0
  555. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +143 -0
  556. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +149 -0
  557. data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +73 -0
  558. data/src/core/tsi/alts/handshaker/alts_tsi_event.h +93 -0
  559. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +483 -0
  560. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +83 -0
  561. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +52 -0
  562. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +58 -0
  563. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +52 -0
  564. data/src/core/tsi/alts/handshaker/altscontext.pb.c +48 -0
  565. data/src/core/tsi/alts/handshaker/altscontext.pb.h +64 -0
  566. data/src/core/tsi/alts/handshaker/handshaker.pb.c +123 -0
  567. data/src/core/tsi/alts/handshaker/handshaker.pb.h +255 -0
  568. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +50 -0
  569. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +78 -0
  570. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +196 -0
  571. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +163 -0
  572. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +180 -0
  573. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +52 -0
  574. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  575. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  576. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  577. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  578. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +100 -0
  579. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
  580. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  581. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +296 -0
  582. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +52 -0
  583. data/src/core/tsi/alts_transport_security.cc +3 -1
  584. data/src/core/tsi/alts_transport_security.h +4 -2
  585. data/src/core/tsi/fake_transport_security.cc +2 -1
  586. data/src/core/tsi/fake_transport_security.h +2 -0
  587. data/src/core/tsi/ssl/session_cache/ssl_session.h +73 -0
  588. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +58 -0
  589. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +211 -0
  590. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +93 -0
  591. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +76 -0
  592. data/src/core/tsi/ssl_transport_security.cc +266 -62
  593. data/src/core/tsi/ssl_transport_security.h +128 -6
  594. data/src/core/tsi/ssl_types.h +2 -0
  595. data/src/core/tsi/transport_security.cc +2 -0
  596. data/src/core/tsi/transport_security.h +2 -0
  597. data/src/core/tsi/transport_security_adapter.cc +2 -0
  598. data/src/core/tsi/transport_security_adapter.h +2 -0
  599. data/src/core/tsi/transport_security_grpc.cc +2 -0
  600. data/src/core/tsi/transport_security_grpc.h +2 -0
  601. data/src/core/tsi/transport_security_interface.h +2 -0
  602. data/src/ruby/ext/grpc/extconf.rb +1 -2
  603. data/src/ruby/ext/grpc/rb_call.c +1 -13
  604. data/src/ruby/ext/grpc/rb_channel.c +6 -6
  605. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  606. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -0
  607. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +15 -0
  608. data/src/ruby/lib/grpc/core/time_consts.rb +1 -1
  609. data/src/ruby/lib/grpc/generic/bidi_call.rb +19 -8
  610. data/src/ruby/lib/grpc/generic/client_stub.rb +6 -10
  611. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  612. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
  613. data/src/ruby/lib/grpc/version.rb +1 -1
  614. data/src/ruby/spec/generic/client_stub_spec.rb +133 -0
  615. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +54 -0
  616. data/src/ruby/spec/pb/package_with_underscore/data.proto +23 -0
  617. data/src/ruby/spec/pb/package_with_underscore/service.proto +23 -0
  618. data/third_party/address_sorting/address_sorting.c +369 -0
  619. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  620. data/third_party/address_sorting/address_sorting_posix.c +97 -0
  621. data/third_party/address_sorting/address_sorting_windows.c +55 -0
  622. data/third_party/address_sorting/include/address_sorting/address_sorting.h +110 -0
  623. data/third_party/boringssl/crypto/asn1/a_enum.c +20 -9
  624. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +3 -0
  625. data/third_party/boringssl/crypto/asn1/a_int.c +19 -8
  626. data/third_party/boringssl/crypto/asn1/a_object.c +0 -128
  627. data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
  628. data/third_party/boringssl/crypto/asn1/tasn_fre.c +2 -4
  629. data/third_party/boringssl/crypto/asn1/tasn_new.c +3 -2
  630. data/third_party/boringssl/crypto/bn_extra/bn_asn1.c +0 -16
  631. data/third_party/boringssl/crypto/buf/buf.c +14 -0
  632. data/third_party/boringssl/crypto/bytestring/cbb.c +93 -0
  633. data/third_party/boringssl/crypto/conf/conf.c +2 -2
  634. data/third_party/boringssl/crypto/cpu-intel.c +17 -17
  635. data/third_party/boringssl/crypto/crypto.c +16 -4
  636. data/third_party/boringssl/crypto/curve25519/spake25519.c +11 -11
  637. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +1 -1
  638. data/third_party/boringssl/crypto/dsa/dsa.c +9 -21
  639. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +2 -2
  640. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -8
  641. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +2 -23
  642. data/third_party/boringssl/crypto/ex_data.c +0 -1
  643. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +7 -11
  644. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +19 -16
  645. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +15 -0
  646. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +53 -46
  647. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +242 -85
  648. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +42 -47
  649. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +176 -34
  650. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +118 -65
  651. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +94 -61
  652. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +79 -63
  653. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +26 -28
  654. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +2 -0
  655. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +250 -149
  656. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -27
  657. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +54 -20
  658. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +3 -3
  659. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +7 -41
  660. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +6 -40
  661. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -122
  662. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +3 -64
  663. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +27 -9
  664. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +203 -205
  665. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +14 -15
  666. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +12 -8
  667. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +4 -3
  668. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +25 -36
  669. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +10 -0
  670. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -4
  671. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +2 -0
  672. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +9 -19
  673. data/third_party/boringssl/crypto/lhash/lhash.c +19 -0
  674. data/third_party/boringssl/crypto/obj/obj.c +29 -69
  675. data/third_party/boringssl/crypto/pem/pem_lib.c +2 -2
  676. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +4 -55
  677. data/third_party/boringssl/crypto/rsa_extra/rsa_asn1.c +3 -22
  678. data/third_party/boringssl/crypto/x509/by_dir.c +1 -3
  679. data/third_party/boringssl/crypto/x509/by_file.c +0 -1
  680. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -1
  681. data/third_party/boringssl/crypto/x509/x509_obj.c +1 -3
  682. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -6
  683. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -1
  684. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -1
  685. data/third_party/boringssl/crypto/x509/x_algor.c +2 -2
  686. data/third_party/boringssl/crypto/x509v3/v3_alt.c +3 -4
  687. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -0
  688. data/third_party/boringssl/crypto/x509v3/v3_info.c +1 -2
  689. data/third_party/boringssl/crypto/x509v3/v3_lib.c +15 -7
  690. data/third_party/boringssl/crypto/x509v3/v3_utl.c +41 -2
  691. data/third_party/boringssl/include/openssl/asn1.h +0 -1
  692. data/third_party/boringssl/include/openssl/base.h +1 -1
  693. data/third_party/boringssl/include/openssl/bio.h +5 -2
  694. data/third_party/boringssl/include/openssl/bn.h +2 -17
  695. data/third_party/boringssl/include/openssl/buf.h +4 -0
  696. data/third_party/boringssl/include/openssl/bytestring.h +11 -0
  697. data/third_party/boringssl/include/openssl/chacha.h +5 -1
  698. data/third_party/boringssl/include/openssl/cipher.h +10 -0
  699. data/third_party/boringssl/include/openssl/conf.h +4 -8
  700. data/third_party/boringssl/include/openssl/dsa.h +2 -18
  701. data/third_party/boringssl/include/openssl/ec.h +5 -5
  702. data/third_party/boringssl/include/openssl/ecdsa.h +10 -28
  703. data/third_party/boringssl/include/openssl/evp.h +0 -4
  704. data/third_party/boringssl/include/openssl/lhash.h +1 -18
  705. data/third_party/boringssl/include/openssl/obj.h +1 -0
  706. data/third_party/boringssl/include/openssl/rsa.h +3 -4
  707. data/third_party/boringssl/include/openssl/ssl.h +35 -54
  708. data/third_party/boringssl/include/openssl/ssl3.h +2 -0
  709. data/third_party/boringssl/include/openssl/stack.h +1 -1
  710. data/third_party/boringssl/include/openssl/tls1.h +1 -16
  711. data/third_party/boringssl/include/openssl/x509.h +3 -2
  712. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -2
  713. data/third_party/boringssl/include/openssl/x509v3.h +1 -0
  714. data/third_party/boringssl/ssl/custom_extensions.cc +1 -1
  715. data/third_party/boringssl/ssl/d1_both.cc +120 -129
  716. data/third_party/boringssl/ssl/d1_lib.cc +23 -21
  717. data/third_party/boringssl/ssl/d1_pkt.cc +39 -143
  718. data/third_party/boringssl/ssl/dtls_method.cc +16 -23
  719. data/third_party/boringssl/ssl/dtls_record.cc +11 -4
  720. data/third_party/boringssl/ssl/handshake.cc +109 -40
  721. data/third_party/boringssl/ssl/handshake_client.cc +104 -96
  722. data/third_party/boringssl/ssl/handshake_server.cc +62 -72
  723. data/third_party/boringssl/ssl/internal.h +397 -318
  724. data/third_party/boringssl/ssl/s3_both.cc +173 -191
  725. data/third_party/boringssl/ssl/s3_lib.cc +26 -34
  726. data/third_party/boringssl/ssl/s3_pkt.cc +105 -247
  727. data/third_party/boringssl/ssl/ssl_asn1.cc +22 -22
  728. data/third_party/boringssl/ssl/ssl_buffer.cc +98 -108
  729. data/third_party/boringssl/ssl/ssl_cert.cc +12 -1
  730. data/third_party/boringssl/ssl/ssl_cipher.cc +23 -28
  731. data/third_party/boringssl/ssl/ssl_key_share.cc +11 -6
  732. data/third_party/boringssl/ssl/ssl_lib.cc +190 -113
  733. data/third_party/boringssl/ssl/ssl_privkey.cc +76 -106
  734. data/third_party/boringssl/ssl/ssl_session.cc +3 -3
  735. data/third_party/boringssl/ssl/ssl_stat.cc +3 -3
  736. data/third_party/boringssl/ssl/ssl_transcript.cc +38 -22
  737. data/third_party/boringssl/ssl/ssl_versions.cc +64 -31
  738. data/third_party/boringssl/ssl/t1_enc.cc +137 -154
  739. data/third_party/boringssl/ssl/t1_lib.cc +463 -478
  740. data/third_party/boringssl/ssl/tls13_both.cc +57 -58
  741. data/third_party/boringssl/ssl/tls13_client.cc +256 -121
  742. data/third_party/boringssl/ssl/tls13_enc.cc +187 -72
  743. data/third_party/boringssl/ssl/tls13_server.cc +187 -86
  744. data/third_party/boringssl/ssl/tls_method.cc +20 -30
  745. data/third_party/boringssl/ssl/tls_record.cc +77 -40
  746. data/third_party/boringssl/third_party/fiat/curve25519.c +5062 -0
  747. data/third_party/boringssl/{crypto/curve25519 → third_party/fiat}/internal.h +40 -27
  748. data/third_party/nanopb/pb.h +1 -1
  749. metadata +147 -45
  750. data/src/core/lib/gpr/thd.cc +0 -49
  751. data/src/core/lib/gpr/thd.h +0 -71
  752. data/src/core/lib/gpr/thd_posix.cc +0 -154
  753. data/src/core/lib/gpr/thd_windows.cc +0 -107
  754. data/src/core/lib/iomgr/iomgr_uv.h +0 -37
  755. data/src/core/lib/iomgr/pollset_set_uv.cc +0 -43
  756. data/src/core/lib/iomgr/resolve_address_uv.cc +0 -284
  757. data/src/core/lib/iomgr/tcp_client_uv.cc +0 -175
  758. data/src/core/lib/iomgr/tcp_server_uv.cc +0 -471
  759. data/src/core/lib/iomgr/tcp_uv.h +0 -51
  760. data/src/core/lib/security/transport/lb_targets_info.cc +0 -59
  761. data/src/core/lib/slice/slice_hash_table.cc +0 -145
  762. data/third_party/boringssl/crypto/curve25519/curve25519.c +0 -4938
@@ -0,0 +1,189 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/tsi/alts/crypt/gsec.h"
22
+
23
+ #include <stdio.h>
24
+ #include <string.h>
25
+
26
+ #include <grpc/support/alloc.h>
27
+
28
+ static const char vtable_error_msg[] =
29
+ "crypter or crypter->vtable has not been initialized properly";
30
+
31
+ static void maybe_copy_error_msg(const char* src, char** dst) {
32
+ if (dst != nullptr && src != nullptr) {
33
+ *dst = static_cast<char*>(gpr_malloc(strlen(src) + 1));
34
+ memcpy(*dst, src, strlen(src) + 1);
35
+ }
36
+ }
37
+
38
+ grpc_status_code gsec_aead_crypter_encrypt(
39
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
40
+ const uint8_t* aad, size_t aad_length, const uint8_t* plaintext,
41
+ size_t plaintext_length, uint8_t* ciphertext_and_tag,
42
+ size_t ciphertext_and_tag_length, size_t* bytes_written,
43
+ char** error_details) {
44
+ if (crypter != nullptr && crypter->vtable != nullptr &&
45
+ crypter->vtable->encrypt_iovec != nullptr) {
46
+ struct iovec aad_vec = {(void*)aad, aad_length};
47
+ struct iovec plaintext_vec = {(void*)plaintext, plaintext_length};
48
+ struct iovec ciphertext_vec = {ciphertext_and_tag,
49
+ ciphertext_and_tag_length};
50
+ return crypter->vtable->encrypt_iovec(
51
+ crypter, nonce, nonce_length, &aad_vec, 1, &plaintext_vec, 1,
52
+ ciphertext_vec, bytes_written, error_details);
53
+ }
54
+ /* An error occurred. */
55
+ maybe_copy_error_msg(vtable_error_msg, error_details);
56
+ return GRPC_STATUS_INVALID_ARGUMENT;
57
+ }
58
+
59
+ grpc_status_code gsec_aead_crypter_encrypt_iovec(
60
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
61
+ const struct iovec* aad_vec, size_t aad_vec_length,
62
+ const struct iovec* plaintext_vec, size_t plaintext_vec_length,
63
+ struct iovec ciphertext_vec, size_t* ciphertext_bytes_written,
64
+ char** error_details) {
65
+ if (crypter != nullptr && crypter->vtable != nullptr &&
66
+ crypter->vtable->encrypt_iovec != nullptr) {
67
+ return crypter->vtable->encrypt_iovec(
68
+ crypter, nonce, nonce_length, aad_vec, aad_vec_length, plaintext_vec,
69
+ plaintext_vec_length, ciphertext_vec, ciphertext_bytes_written,
70
+ error_details);
71
+ }
72
+ /* An error occurred. */
73
+ maybe_copy_error_msg(vtable_error_msg, error_details);
74
+ return GRPC_STATUS_INVALID_ARGUMENT;
75
+ }
76
+
77
+ grpc_status_code gsec_aead_crypter_decrypt(
78
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
79
+ const uint8_t* aad, size_t aad_length, const uint8_t* ciphertext_and_tag,
80
+ size_t ciphertext_and_tag_length, uint8_t* plaintext,
81
+ size_t plaintext_length, size_t* bytes_written, char** error_details) {
82
+ if (crypter != nullptr && crypter->vtable != nullptr &&
83
+ crypter->vtable->decrypt_iovec != nullptr) {
84
+ struct iovec aad_vec = {(void*)aad, aad_length};
85
+ struct iovec ciphertext_vec = {(void*)ciphertext_and_tag,
86
+ ciphertext_and_tag_length};
87
+ struct iovec plaintext_vec = {plaintext, plaintext_length};
88
+ return crypter->vtable->decrypt_iovec(
89
+ crypter, nonce, nonce_length, &aad_vec, 1, &ciphertext_vec, 1,
90
+ plaintext_vec, bytes_written, error_details);
91
+ }
92
+ /* An error occurred. */
93
+ maybe_copy_error_msg(vtable_error_msg, error_details);
94
+ return GRPC_STATUS_INVALID_ARGUMENT;
95
+ }
96
+
97
+ grpc_status_code gsec_aead_crypter_decrypt_iovec(
98
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
99
+ const struct iovec* aad_vec, size_t aad_vec_length,
100
+ const struct iovec* ciphertext_vec, size_t ciphertext_vec_length,
101
+ struct iovec plaintext_vec, size_t* plaintext_bytes_written,
102
+ char** error_details) {
103
+ if (crypter != nullptr && crypter->vtable != nullptr &&
104
+ crypter->vtable->encrypt_iovec != nullptr) {
105
+ return crypter->vtable->decrypt_iovec(
106
+ crypter, nonce, nonce_length, aad_vec, aad_vec_length, ciphertext_vec,
107
+ ciphertext_vec_length, plaintext_vec, plaintext_bytes_written,
108
+ error_details);
109
+ }
110
+ /* An error occurred. */
111
+ maybe_copy_error_msg(vtable_error_msg, error_details);
112
+ return GRPC_STATUS_INVALID_ARGUMENT;
113
+ }
114
+
115
+ grpc_status_code gsec_aead_crypter_max_ciphertext_and_tag_length(
116
+ const gsec_aead_crypter* crypter, size_t plaintext_length,
117
+ size_t* max_ciphertext_and_tag_length_to_return, char** error_details) {
118
+ if (crypter != nullptr && crypter->vtable != nullptr &&
119
+ crypter->vtable->max_ciphertext_and_tag_length != nullptr) {
120
+ return crypter->vtable->max_ciphertext_and_tag_length(
121
+ crypter, plaintext_length, max_ciphertext_and_tag_length_to_return,
122
+ error_details);
123
+ }
124
+ /* An error occurred. */
125
+ maybe_copy_error_msg(vtable_error_msg, error_details);
126
+ return GRPC_STATUS_INVALID_ARGUMENT;
127
+ }
128
+
129
+ grpc_status_code gsec_aead_crypter_max_plaintext_length(
130
+ const gsec_aead_crypter* crypter, size_t ciphertext_and_tag_length,
131
+ size_t* max_plaintext_length_to_return, char** error_details) {
132
+ if (crypter != nullptr && crypter->vtable != nullptr &&
133
+ crypter->vtable->max_plaintext_length != nullptr) {
134
+ return crypter->vtable->max_plaintext_length(
135
+ crypter, ciphertext_and_tag_length, max_plaintext_length_to_return,
136
+ error_details);
137
+ }
138
+ /* An error occurred. */
139
+ maybe_copy_error_msg(vtable_error_msg, error_details);
140
+ return GRPC_STATUS_INVALID_ARGUMENT;
141
+ }
142
+
143
+ grpc_status_code gsec_aead_crypter_nonce_length(
144
+ const gsec_aead_crypter* crypter, size_t* nonce_length_to_return,
145
+ char** error_details) {
146
+ if (crypter != nullptr && crypter->vtable != nullptr &&
147
+ crypter->vtable->nonce_length != nullptr) {
148
+ return crypter->vtable->nonce_length(crypter, nonce_length_to_return,
149
+ error_details);
150
+ }
151
+ /* An error occurred. */
152
+ maybe_copy_error_msg(vtable_error_msg, error_details);
153
+ return GRPC_STATUS_INVALID_ARGUMENT;
154
+ }
155
+
156
+ grpc_status_code gsec_aead_crypter_key_length(const gsec_aead_crypter* crypter,
157
+ size_t* key_length_to_return,
158
+ char** error_details) {
159
+ if (crypter != nullptr && crypter->vtable != nullptr &&
160
+ crypter->vtable->key_length != nullptr) {
161
+ return crypter->vtable->key_length(crypter, key_length_to_return,
162
+ error_details);
163
+ }
164
+ /* An error occurred */
165
+ maybe_copy_error_msg(vtable_error_msg, error_details);
166
+ return GRPC_STATUS_INVALID_ARGUMENT;
167
+ }
168
+
169
+ grpc_status_code gsec_aead_crypter_tag_length(const gsec_aead_crypter* crypter,
170
+ size_t* tag_length_to_return,
171
+ char** error_details) {
172
+ if (crypter != nullptr && crypter->vtable != nullptr &&
173
+ crypter->vtable->tag_length != nullptr) {
174
+ return crypter->vtable->tag_length(crypter, tag_length_to_return,
175
+ error_details);
176
+ }
177
+ /* An error occurred. */
178
+ maybe_copy_error_msg(vtable_error_msg, error_details);
179
+ return GRPC_STATUS_INVALID_ARGUMENT;
180
+ }
181
+
182
+ void gsec_aead_crypter_destroy(gsec_aead_crypter* crypter) {
183
+ if (crypter != nullptr) {
184
+ if (crypter->vtable != nullptr && crypter->vtable->destruct != nullptr) {
185
+ crypter->vtable->destruct(crypter);
186
+ }
187
+ gpr_free(crypter);
188
+ }
189
+ }
@@ -0,0 +1,454 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_TSI_ALTS_CRYPT_GSEC_H
20
+ #define GRPC_CORE_TSI_ALTS_CRYPT_GSEC_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <assert.h>
25
+ #include <stdint.h>
26
+ #include <stdlib.h>
27
+
28
+ #include <grpc/grpc.h>
29
+
30
+ struct iovec {
31
+ void* iov_base;
32
+ size_t iov_len;
33
+ };
34
+
35
+ /**
36
+ * A gsec interface for AEAD encryption schemes. The API is thread-compatible.
37
+ * Each implementation of this interface should specify supported values for
38
+ * key, nonce, and tag lengths.
39
+ */
40
+
41
+ /* Key, nonce, and tag length in bytes */
42
+ const size_t kAesGcmNonceLength = 12;
43
+ const size_t kAesGcmTagLength = 16;
44
+ const size_t kAes128GcmKeyLength = 16;
45
+ const size_t kAes256GcmKeyLength = 32;
46
+
47
+ // The first 32 bytes are used as a KDF key and the remaining 12 bytes are used
48
+ // to mask the nonce.
49
+ const size_t kAes128GcmRekeyKeyLength = 44;
50
+
51
+ typedef struct gsec_aead_crypter gsec_aead_crypter;
52
+
53
+ /**
54
+ * The gsec_aead_crypter is an API for different AEAD implementations such as
55
+ * AES_GCM. It encapsulates all AEAD-related operations in the format of
56
+ * V-table that stores pointers to functions implementing those operations.
57
+ * It also provides helper functions to wrap each of those function pointers.
58
+ *
59
+ * A typical usage of this object would be:
60
+ *
61
+ *------------------------------------------------------------------------------
62
+ * // Declare a gsec_aead_crypter object, and create and assign an instance
63
+ * // of specific AEAD implementation e.g., AES_GCM to it. We assume both
64
+ * // key and nonce contain cryptographically secure random bytes, and the key
65
+ * // can be derived from an upper-layer application.
66
+ * gsec_aead_crypter* crypter;
67
+ * char* error_in_creation;
68
+ * // User can populate the message with any 100 bytes data.
69
+ * uint8_t* message = gpr_malloc(100);
70
+ * grpc_status_code creation_status = gsec_aes_gcm_aead_crypter_create(key,
71
+ * kAes128GcmKeyLength,
72
+ * kAesGcmNonceLength,
73
+ * kAesGcmTagLength,
74
+ * &crypter,
75
+ * false,
76
+ * 0
77
+ * &error_in_creation);
78
+ *
79
+ * if (creation_status == GRPC_STATUS_OK) {
80
+ * // Allocate a correct amount of memory to hold a ciphertext.
81
+ * size_t clength = 0;
82
+ * gsec_aead_crypter_max_ciphertext_and_tag_length(crypter, 100, &clength,
83
+ * nullptr);
84
+ * uint8_t* ciphertext = gpr_malloc(clength);
85
+ *
86
+ * // Perform encryption
87
+ * size_t num_encrypted_bytes = 0;
88
+ * char* error_in_encryption = nullptr;
89
+ * grpc_status_code status = gsec_aead_crypter_encrypt(crypter, nonce,
90
+ * kAesGcmNonceLength,
91
+ * nullptr, 0, message,
92
+ * 100, ciphertext,
93
+ * clength,
94
+ * &num_encrypted_bytes,
95
+ * &error_in_encryption);
96
+ * if (status == GRPC_STATUS_OK) {
97
+ * // Allocate a correct amount of memory to hold a plaintext.
98
+ * size_t plength = 0;
99
+ * gsec_aead_crypter_max_plaintext_length(crypter, num_encrypted_bytes,
100
+ * &plength, nullptr);
101
+ * uint8_t* plaintext = gpr_malloc(plength);
102
+ *
103
+ * // Perform decryption.
104
+ * size_t num_decrypted_bytes = 0;
105
+ * char* error_in_decryption = nullptr;
106
+ * status = gsec_aead_crypter_decrypt(crypter, nonce,
107
+ * kAesGcmNonceLength, nullptr, 0,
108
+ * ciphertext, num_encrypted_bytes,
109
+ * plaintext, plength,
110
+ * &num_decrypted_bytes,
111
+ * &error_in_decryption);
112
+ * if (status != GRPC_STATUS_OK) {
113
+ * fprintf(stderr, "AEAD decrypt operation failed with error code:"
114
+ * "%d, message: %s\n", status, error_in_decryption);
115
+ * }
116
+ * ...
117
+ * gpr_free(plaintext);
118
+ * gpr_free(error_in_decryption);
119
+ * } else {
120
+ * fprintf(stderr, "AEAD encrypt operation failed with error code:"
121
+ * "%d, message: %s\n", status, error_in_encryption);
122
+ * }
123
+ * ...
124
+ * gpr_free(ciphertext);
125
+ * gpr_free(error_in_encryption);
126
+ * } else {
127
+ * fprintf(stderr, "Creation of AEAD crypter instance failed with error code:"
128
+ * "%d, message: %s\n", creation_status, error_in_creation);
129
+ * }
130
+ *
131
+ * // Destruct AEAD crypter instance.
132
+ * if (creation_status == GRPC_STATUS_OK) {
133
+ * gsec_aead_crypter_destroy(crypter);
134
+ * }
135
+ * gpr_free(error_in_creation);
136
+ * gpr_free(message);
137
+ * -----------------------------------------------------------------------------
138
+ */
139
+
140
+ /* V-table for gsec AEAD operations */
141
+ typedef struct gsec_aead_crypter_vtable {
142
+ grpc_status_code (*encrypt_iovec)(
143
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
144
+ const struct iovec* aad_vec, size_t aad_vec_length,
145
+ const struct iovec* plaintext_vec, size_t plaintext_vec_length,
146
+ struct iovec ciphertext_vec, size_t* ciphertext_bytes_written,
147
+ char** error_details);
148
+ grpc_status_code (*decrypt_iovec)(
149
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
150
+ const struct iovec* aad_vec, size_t aad_vec_length,
151
+ const struct iovec* ciphertext_vec, size_t ciphertext_vec_length,
152
+ struct iovec plaintext_vec, size_t* plaintext_bytes_written,
153
+ char** error_details);
154
+ grpc_status_code (*max_ciphertext_and_tag_length)(
155
+ const gsec_aead_crypter* crypter, size_t plaintext_length,
156
+ size_t* max_ciphertext_and_tag_length_to_return, char** error_details);
157
+ grpc_status_code (*max_plaintext_length)(
158
+ const gsec_aead_crypter* crypter, size_t ciphertext_and_tag_length,
159
+ size_t* max_plaintext_length_to_return, char** error_details);
160
+ grpc_status_code (*nonce_length)(const gsec_aead_crypter* crypter,
161
+ size_t* nonce_length_to_return,
162
+ char** error_details);
163
+ grpc_status_code (*key_length)(const gsec_aead_crypter* crypter,
164
+ size_t* key_length_to_return,
165
+ char** error_details);
166
+ grpc_status_code (*tag_length)(const gsec_aead_crypter* crypter,
167
+ size_t* tag_length_to_return,
168
+ char** error_details);
169
+ void (*destruct)(gsec_aead_crypter* crypter);
170
+ } gsec_aead_crypter_vtable;
171
+
172
+ /* Main struct for gsec interface */
173
+ struct gsec_aead_crypter {
174
+ const struct gsec_aead_crypter_vtable* vtable;
175
+ };
176
+
177
+ /**
178
+ * This method performs an AEAD encrypt operation.
179
+ *
180
+ * - crypter: AEAD crypter instance.
181
+ * - nonce: buffer containing a nonce with its size equal to nonce_length.
182
+ * - nonce_length: size of nonce buffer, and must be equal to the value returned
183
+ * from method gsec_aead_crypter_nonce_length.
184
+ * - aad: buffer containing data that needs to be authenticated but not
185
+ * encrypted with its size equal to aad_length.
186
+ * - aad_length: size of aad buffer, which should be zero if the buffer is
187
+ * nullptr.
188
+ * - plaintext: buffer containing data that needs to be both encrypted and
189
+ * authenticated with its size equal to plaintext_length.
190
+ * - plaintext_length: size of plaintext buffer, which should be zero if
191
+ * plaintext is nullptr.
192
+ * - ciphertext_and_tag: buffer that will contain ciphertext and tags the method
193
+ * produced. The buffer should not overlap the plaintext buffer, and pointers
194
+ * to those buffers should not be equal. Also if the ciphertext+tag buffer is
195
+ * nullptr, the plaintext_length should be zero.
196
+ * - ciphertext_and_tag_length: size of ciphertext+tag buffer, which should be
197
+ * at least as long as the one returned from method
198
+ * gsec_aead_crypter_max_ciphertext_and_tag_length.
199
+ * - bytes_written: the actual number of bytes written to the ciphertext+tag
200
+ * buffer. If bytes_written is nullptr, the plaintext_length should be zero.
201
+ * - error_details: a buffer containing an error message if the method does not
202
+ * function correctly. It is legal to pass nullptr into error_details, and
203
+ * otherwise, the parameter should be freed with gpr_free.
204
+ *
205
+ * On the success of encryption, the method returns GRPC_STATUS_OK. Otherwise,
206
+ * it returns an error status code along with its details specified in
207
+ * error_details (if error_details is not nullptr).
208
+ *
209
+ */
210
+ grpc_status_code gsec_aead_crypter_encrypt(
211
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
212
+ const uint8_t* aad, size_t aad_length, const uint8_t* plaintext,
213
+ size_t plaintext_length, uint8_t* ciphertext_and_tag,
214
+ size_t ciphertext_and_tag_length, size_t* bytes_written,
215
+ char** error_details);
216
+
217
+ /**
218
+ * This method performs an AEAD encrypt operation.
219
+ *
220
+ * - crypter: AEAD crypter instance.
221
+ * - nonce: buffer containing a nonce with its size equal to nonce_length.
222
+ * - nonce_length: size of nonce buffer, and must be equal to the value returned
223
+ * from method gsec_aead_crypter_nonce_length.
224
+ * - aad_vec: an iovec array containing data that needs to be authenticated but
225
+ * not encrypted.
226
+ * - aad_vec_length: the array length of aad_vec.
227
+ * - plaintext_vec: an iovec array containing data that needs to be both
228
+ * encrypted and authenticated.
229
+ * - plaintext_vec_length: the array length of plaintext_vec.
230
+ * - ciphertext_vec: an iovec containing a ciphertext buffer. The buffer should
231
+ * not overlap the plaintext buffer.
232
+ * - ciphertext_bytes_written: the actual number of bytes written to
233
+ * ciphertext_vec.
234
+ * - error_details: a buffer containing an error message if the method does not
235
+ * function correctly. It is legal to pass nullptr into error_details, and
236
+ * otherwise, the parameter should be freed with gpr_free.
237
+ *
238
+ * On the success of encryption, the method returns GRPC_STATUS_OK. Otherwise,
239
+ * it returns an error status code along with its details specified in
240
+ * error_details (if error_details is not nullptr).
241
+ *
242
+ */
243
+ grpc_status_code gsec_aead_crypter_encrypt_iovec(
244
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
245
+ const struct iovec* aad_vec, size_t aad_vec_length,
246
+ const struct iovec* plaintext_vec, size_t plaintext_vec_length,
247
+ struct iovec ciphertext_vec, size_t* ciphertext_bytes_written,
248
+ char** error_details);
249
+
250
+ /**
251
+ * This method performs an AEAD decrypt operation.
252
+ *
253
+ * - crypter: AEAD crypter instance.
254
+ * - nonce: buffer containing a nonce with its size equal to nonce_length.
255
+ * - nonce_length: size of nonce buffer, and must be equal to the value returned
256
+ * from method gsec_aead_crypter_nonce_length.
257
+ * - aad: buffer containing data that needs to be authenticated only.
258
+ * - aad_length: size of aad buffer, which should be zero if the buffer is
259
+ * nullptr.
260
+ * - ciphertext_and_tag: buffer containing ciphertext and tag.
261
+ * - ciphertext_and_tag_length: length of ciphertext and tag. It should be zero
262
+ * if any of plaintext, ciphertext_and_tag, or bytes_written is nullptr. Also,
263
+ * ciphertext_and_tag_length should be at least as large as the tag length set
264
+ * at AEAD crypter instance construction time.
265
+ * - plaintext: buffer containing decrypted and authenticated data the method
266
+ * produced. The buffer should not overlap with the ciphertext+tag buffer, and
267
+ * pointers to those buffers should not be equal.
268
+ * - plaintext_length: size of plaintext buffer, which should be at least as
269
+ * long as the one returned from gsec_aead_crypter_max_plaintext_length
270
+ * method.
271
+ * - bytes_written: the actual number of bytes written to the plaintext
272
+ * buffer.
273
+ * - error_details: a buffer containing an error message if the method does not
274
+ * function correctly. It is legal to pass nullptr into error_details, and
275
+ * otherwise, the parameter should be freed with gpr_free.
276
+ *
277
+ * On the success of decryption, the method returns GRPC_STATUS_OK. Otherwise,
278
+ * it returns an error status code along with its details specified in
279
+ * error_details (if error_details is not nullptr).
280
+ */
281
+ grpc_status_code gsec_aead_crypter_decrypt(
282
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
283
+ const uint8_t* aad, size_t aad_length, const uint8_t* ciphertext_and_tag,
284
+ size_t ciphertext_and_tag_length, uint8_t* plaintext,
285
+ size_t plaintext_length, size_t* bytes_written, char** error_details);
286
+
287
+ /**
288
+ * This method performs an AEAD decrypt operation.
289
+ *
290
+ * - crypter: AEAD crypter instance.
291
+ * - nonce: buffer containing a nonce with its size equal to nonce_length.
292
+ * - nonce_length: size of nonce buffer, and must be equal to the value returned
293
+ * from method gsec_aead_crypter_nonce_length.
294
+ * - aad_vec: an iovec array containing data that needs to be authenticated but
295
+ * not encrypted.
296
+ * - aad_vec_length: the array length of aad_vec.
297
+ * - ciphertext_vec: an iovec array containing the ciphertext and tag.
298
+ * - ciphertext_vec_length: the array length of ciphertext_vec.
299
+ * - plaintext_vec: an iovec containing a plaintext buffer. The buffer should
300
+ * not overlap the ciphertext buffer.
301
+ * - plaintext_bytes_written: the actual number of bytes written to
302
+ * plaintext_vec.
303
+ * - error_details: a buffer containing an error message if the method does not
304
+ * function correctly. It is legal to pass nullptr into error_details, and
305
+ * otherwise, the parameter should be freed with gpr_free.
306
+ *
307
+ * On the success of decryption, the method returns GRPC_STATUS_OK. Otherwise,
308
+ * it returns an error status code along with its details specified in
309
+ * error_details (if error_details is not nullptr).
310
+ */
311
+ grpc_status_code gsec_aead_crypter_decrypt_iovec(
312
+ gsec_aead_crypter* crypter, const uint8_t* nonce, size_t nonce_length,
313
+ const struct iovec* aad_vec, size_t aad_vec_length,
314
+ const struct iovec* ciphertext_vec, size_t ciphertext_vec_length,
315
+ struct iovec plaintext_vec, size_t* plaintext_bytes_written,
316
+ char** error_details);
317
+
318
+ /**
319
+ * This method computes the size of ciphertext+tag buffer that must be passed to
320
+ * gsec_aead_crypter_encrypt function to ensure correct encryption of a
321
+ * plaintext. The actual size of ciphertext+tag written to the buffer could be
322
+ * smaller.
323
+ *
324
+ * - crypter: AEAD crypter instance.
325
+ * - plaintext_length: length of plaintext.
326
+ * - max_ciphertext_and_tag_length_to_return: the size of ciphertext+tag buffer
327
+ * the method returns.
328
+ * - error_details: a buffer containing an error message if the method does not
329
+ * function correctly. It is legal to pass nullptr into error_details, and
330
+ * otherwise, the parameter should be freed with gpr_free.
331
+ *
332
+ * On the success of execution, the method returns GRPC_STATUS_OK. Otherwise,
333
+ * it returns an error status code along with its details specified in
334
+ * error_details (if error_details is not nullptr).
335
+ */
336
+ grpc_status_code gsec_aead_crypter_max_ciphertext_and_tag_length(
337
+ const gsec_aead_crypter* crypter, size_t plaintext_length,
338
+ size_t* max_ciphertext_and_tag_length_to_return, char** error_details);
339
+
340
+ /**
341
+ * This method computes the size of plaintext buffer that must be passed to
342
+ * gsec_aead_crypter_decrypt function to ensure correct decryption of a
343
+ * ciphertext. The actual size of plaintext written to the buffer could be
344
+ * smaller.
345
+ *
346
+ * - crypter: AEAD crypter instance.
347
+ * - ciphertext_and_tag_length: length of ciphertext and tag.
348
+ * - max_plaintext_length_to_return: the size of plaintext buffer the method
349
+ * returns.
350
+ * - error_details: a buffer containing an error message if the method does not
351
+ * function correctly. It is legal to pass nullptr into error_details, and
352
+ * otherwise, the parameter should be freed with gpr_free.
353
+ *
354
+ * On the success of execution, the method returns GRPC_STATUS_OK. Otherwise,
355
+ * it returns an error status code along with its details specified in
356
+ * error_details (if error_details is not nullptr).
357
+ */
358
+ grpc_status_code gsec_aead_crypter_max_plaintext_length(
359
+ const gsec_aead_crypter* crypter, size_t ciphertext_and_tag_length,
360
+ size_t* max_plaintext_length_to_return, char** error_details);
361
+
362
+ /**
363
+ * This method returns a valid size of nonce array used at the construction of
364
+ * AEAD crypter instance. It is also the size that should be passed to encrypt
365
+ * and decrypt methods executed on the instance.
366
+ *
367
+ * - crypter: AEAD crypter instance.
368
+ * - nonce_length_to_return: the length of nonce array the method returns.
369
+ * - error_details: a buffer containing an error message if the method does not
370
+ * function correctly. It is legal to pass nullptr into error_details, and
371
+ * otherwise, the parameter should be freed with gpr_free.
372
+ *
373
+ * On the success of execution, the method returns GRPC_STATUS_OK. Otherwise,
374
+ * it returns an error status code along with its details specified in
375
+ * error_details (if error_details is not nullptr).
376
+ */
377
+ grpc_status_code gsec_aead_crypter_nonce_length(
378
+ const gsec_aead_crypter* crypter, size_t* nonce_length_to_return,
379
+ char** error_details);
380
+
381
+ /**
382
+ * This method returns a valid size of key array used at the construction of
383
+ * AEAD crypter instance. It is also the size that should be passed to encrypt
384
+ * and decrypt methods executed on the instance.
385
+ *
386
+ * - crypter: AEAD crypter instance.
387
+ * - key_length_to_return: the length of key array the method returns.
388
+ * - error_details: a buffer containing an error message if the method does not
389
+ * function correctly. It is legal to pass nullptr into error_details, and
390
+ * otherwise, the parameter should be freed with gpr_free.
391
+ *
392
+ * On the success of execution, the method returns GRPC_STATUS_OK. Otherwise,
393
+ * it returns an error status code along with its details specified in
394
+ * error_details (if error_details is not nullptr).
395
+ */
396
+ grpc_status_code gsec_aead_crypter_key_length(const gsec_aead_crypter* crypter,
397
+ size_t* key_length_to_return,
398
+ char** error_details);
399
+ /**
400
+ * This method returns a valid size of tag array used at the construction of
401
+ * AEAD crypter instance. It is also the size that should be passed to encrypt
402
+ * and decrypt methods executed on the instance.
403
+ *
404
+ * - crypter: AEAD crypter instance.
405
+ * - tag_length_to_return: the length of tag array the method returns.
406
+ * - error_details: a buffer containing an error message if the method does not
407
+ * function correctly. It is legal to pass nullptr into error_details, and
408
+ * otherwise, the parameter should be freed with gpr_free.
409
+ *
410
+ * On the success of execution, the method returns GRPC_STATUS_OK. Otherwise,
411
+ * it returns an error status code along with its details specified in
412
+ * error_details (if error_details is not nullptr).
413
+ */
414
+ grpc_status_code gsec_aead_crypter_tag_length(const gsec_aead_crypter* crypter,
415
+ size_t* tag_length_to_return,
416
+ char** error_details);
417
+
418
+ /**
419
+ * This method destroys an AEAD crypter instance by de-allocating all of its
420
+ * occupied memory.
421
+ *
422
+ * - crypter: AEAD crypter instance that needs to be destroyed.
423
+ */
424
+ void gsec_aead_crypter_destroy(gsec_aead_crypter* crypter);
425
+
426
+ /**
427
+ * This method creates an AEAD crypter instance of AES-GCM encryption scheme
428
+ * which supports 16 and 32 bytes long keys, 12 and 16 bytes long nonces, and
429
+ * 16 bytes long tags. It should be noted that once the lengths of key, nonce,
430
+ * and tag are determined at construction time, they cannot be modified later.
431
+ *
432
+ * - key: buffer containing a key which is binded with AEAD crypter instance.
433
+ * - key_length: length of a key in bytes, which should be 44 if rekeying is
434
+ * enabled and 16 or 32 otherwise.
435
+ * - nonce_length: length of a nonce in bytes, which should be either 12 or 16.
436
+ * - tag_length: length of a tag in bytes, which should be always 16.
437
+ * - rekey: enable nonce-based rekeying and nonce-masking.
438
+ * - crypter: address of AES_GCM crypter instance returned from the method.
439
+ * - error_details: a buffer containing an error message if the method does not
440
+ * function correctly. It is legal to pass nullptr into error_details, and
441
+ * otherwise, the parameter should be freed with gpr_free.
442
+ *
443
+ * On success of instance creation, it stores the address of instance at
444
+ * crypter. Otherwise, it returns an error status code together with its details
445
+ * specified in error_details.
446
+ */
447
+ grpc_status_code gsec_aes_gcm_aead_crypter_create(const uint8_t* key,
448
+ size_t key_length,
449
+ size_t nonce_length,
450
+ size_t tag_length, bool rekey,
451
+ gsec_aead_crypter** crypter,
452
+ char** error_details);
453
+
454
+ #endif /* GRPC_CORE_TSI_ALTS_CRYPT_GSEC_H */