grpc 1.28.0 → 1.30.2

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 (503) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +30 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +212 -241
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/auth_filters.h +0 -5
  293. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  294. data/src/core/lib/slice/slice_intern.cc +2 -3
  295. data/src/core/lib/slice/slice_internal.h +14 -0
  296. data/src/core/lib/slice/slice_utils.h +9 -0
  297. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  298. data/src/core/lib/surface/call.cc +2 -3
  299. data/src/core/lib/surface/call_log_batch.cc +50 -58
  300. data/src/core/lib/surface/channel.cc +53 -31
  301. data/src/core/lib/surface/channel.h +35 -4
  302. data/src/core/lib/surface/channel_ping.cc +2 -3
  303. data/src/core/lib/surface/completion_queue.cc +33 -33
  304. data/src/core/lib/surface/event_string.cc +18 -25
  305. data/src/core/lib/surface/event_string.h +3 -1
  306. data/src/core/lib/surface/init_secure.cc +1 -4
  307. data/src/core/lib/surface/server.cc +570 -369
  308. data/src/core/lib/surface/server.h +32 -0
  309. data/src/core/lib/surface/version.cc +2 -2
  310. data/src/core/lib/transport/byte_stream.h +7 -2
  311. data/src/core/lib/transport/connectivity_state.cc +7 -6
  312. data/src/core/lib/transport/connectivity_state.h +5 -3
  313. data/src/core/lib/transport/metadata.cc +3 -3
  314. data/src/core/lib/transport/metadata_batch.h +2 -3
  315. data/src/core/lib/transport/static_metadata.h +1 -1
  316. data/src/core/lib/transport/status_conversion.cc +6 -14
  317. data/src/core/lib/transport/transport.cc +2 -3
  318. data/src/core/lib/transport/transport.h +3 -2
  319. data/src/core/lib/transport/transport_op_string.cc +61 -102
  320. data/src/core/lib/uri/uri_parser.h +2 -3
  321. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  322. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  324. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  326. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  327. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  328. data/src/core/tsi/fake_transport_security.cc +10 -15
  329. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  330. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  331. data/src/core/tsi/ssl_transport_security.cc +52 -39
  332. data/src/core/tsi/ssl_transport_security.h +8 -8
  333. data/src/core/tsi/ssl_types.h +0 -2
  334. data/src/core/tsi/transport_security.h +6 -9
  335. data/src/core/tsi/transport_security_grpc.h +2 -3
  336. data/src/core/tsi/transport_security_interface.h +3 -3
  337. data/src/ruby/ext/grpc/rb_call.c +9 -1
  338. data/src/ruby/ext/grpc/rb_call_credentials.c +3 -2
  339. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  340. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  341. data/src/ruby/lib/grpc/errors.rb +103 -42
  342. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  343. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  344. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  345. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  346. data/src/ruby/lib/grpc/structs.rb +1 -1
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  349. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  350. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  351. data/src/ruby/spec/debug_message_spec.rb +134 -0
  352. data/src/ruby/spec/generic/service_spec.rb +2 -0
  353. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  354. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  355. data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
  356. data/src/ruby/spec/support/services.rb +10 -4
  357. data/src/ruby/spec/testdata/ca.pem +18 -13
  358. data/src/ruby/spec/testdata/client.key +26 -14
  359. data/src/ruby/spec/testdata/client.pem +18 -12
  360. data/src/ruby/spec/testdata/server1.key +26 -14
  361. data/src/ruby/spec/testdata/server1.pem +20 -14
  362. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  363. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  364. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  365. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  366. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  367. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  383. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  384. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  385. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  386. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  387. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  388. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  389. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  390. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  391. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  392. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  393. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  394. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  395. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  396. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  397. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  398. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  399. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  400. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  401. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  402. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  404. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  405. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  406. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  407. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  443. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  444. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  446. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  449. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  450. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  451. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  453. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  454. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  456. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  457. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  461. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  464. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  465. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  466. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  467. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  468. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  469. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  470. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  471. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  473. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  474. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  475. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  476. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  477. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  478. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  479. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  480. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  481. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  482. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  483. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  484. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  486. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  487. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  488. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  489. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  490. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  491. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  492. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  493. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  494. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  495. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  496. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  498. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  499. metadata +115 -39
  500. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  501. data/src/core/lib/gprpp/string_view.h +0 -60
  502. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  503. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -42,6 +42,19 @@ grpc_plugin_credentials::~grpc_plugin_credentials() {
42
42
  }
43
43
  }
44
44
 
45
+ std::string grpc_plugin_credentials::debug_string() {
46
+ char* debug_c_str = nullptr;
47
+ if (plugin_.debug_string != nullptr) {
48
+ debug_c_str = plugin_.debug_string(plugin_.state);
49
+ }
50
+ std::string debug_str(
51
+ debug_c_str != nullptr
52
+ ? debug_c_str
53
+ : "grpc_plugin_credentials did not provide a debug string");
54
+ gpr_free(debug_c_str);
55
+ return debug_str;
56
+ }
57
+
45
58
  void grpc_plugin_credentials::pending_request_remove_locked(
46
59
  pending_request* pending_request) {
47
60
  if (pending_request->prev == nullptr) {
@@ -59,6 +59,8 @@ struct grpc_plugin_credentials final : public grpc_call_credentials {
59
59
  // cancelled before completion.
60
60
  void pending_request_complete(pending_request* r);
61
61
 
62
+ std::string debug_string() override;
63
+
62
64
  private:
63
65
  void pending_request_remove_locked(pending_request* pending_request);
64
66
 
@@ -29,10 +29,28 @@
29
29
 
30
30
  /** -- gRPC TLS key materials config API implementation. -- **/
31
31
  void grpc_tls_key_materials_config::set_key_materials(
32
- grpc_core::UniquePtr<char> pem_root_certs,
33
- PemKeyCertPairList pem_key_cert_pair_list) {
34
- pem_key_cert_pair_list_ = std::move(pem_key_cert_pair_list);
35
- pem_root_certs_ = std::move(pem_root_certs);
32
+ const char* pem_root_certs,
33
+ const grpc_ssl_pem_key_cert_pair** pem_key_cert_pairs,
34
+ size_t num_key_cert_pairs) {
35
+ this->set_pem_root_certs(pem_root_certs);
36
+ grpc_tls_key_materials_config::PemKeyCertPairList cert_pair_list;
37
+ for (size_t i = 0; i < num_key_cert_pairs; i++) {
38
+ auto current_pair = static_cast<grpc_ssl_pem_key_cert_pair*>(
39
+ gpr_zalloc(sizeof(grpc_ssl_pem_key_cert_pair)));
40
+ current_pair->cert_chain = gpr_strdup(pem_key_cert_pairs[i]->cert_chain);
41
+ current_pair->private_key = gpr_strdup(pem_key_cert_pairs[i]->private_key);
42
+ cert_pair_list.emplace_back(grpc_core::PemKeyCertPair(current_pair));
43
+ }
44
+ pem_key_cert_pair_list_ = std::move(cert_pair_list);
45
+ }
46
+
47
+ void grpc_tls_key_materials_config::set_key_materials(
48
+ const char* pem_root_certs,
49
+ const PemKeyCertPairList& pem_key_cert_pair_list) {
50
+ this->set_pem_root_certs(pem_root_certs);
51
+ grpc_tls_key_materials_config::PemKeyCertPairList dup_list(
52
+ pem_key_cert_pair_list);
53
+ pem_key_cert_pair_list_ = std::move(dup_list);
36
54
  }
37
55
 
38
56
  /** -- gRPC TLS credential reload config API implementation. -- **/
@@ -165,15 +183,7 @@ int grpc_tls_key_materials_config_set_key_materials(
165
183
  "grpc_tls_key_materials_config_set_key_materials()");
166
184
  return 0;
167
185
  }
168
- grpc_core::UniquePtr<char> pem_root(const_cast<char*>(root_certs));
169
- grpc_tls_key_materials_config::PemKeyCertPairList cert_pair_list;
170
- for (size_t i = 0; i < num; i++) {
171
- grpc_core::PemKeyCertPair key_cert_pair(
172
- const_cast<grpc_ssl_pem_key_cert_pair*>(key_cert_pairs[i]));
173
- cert_pair_list.emplace_back(std::move(key_cert_pair));
174
- }
175
- config->set_key_materials(std::move(pem_root), std::move(cert_pair_list));
176
- gpr_free(key_cert_pairs);
186
+ config->set_key_materials(root_certs, key_cert_pairs, num);
177
187
  return 1;
178
188
  }
179
189
 
@@ -23,16 +23,29 @@
23
23
 
24
24
  #include <grpc/grpc_security.h>
25
25
 
26
- #include "src/core/lib/gprpp/inlined_vector.h"
26
+ #include "absl/container/inlined_vector.h"
27
+
27
28
  #include "src/core/lib/gprpp/ref_counted.h"
28
29
  #include "src/core/lib/security/security_connector/ssl_utils.h"
29
30
 
31
+ struct grpc_tls_error_details
32
+ : public grpc_core::RefCounted<grpc_tls_error_details> {
33
+ public:
34
+ grpc_tls_error_details() : error_details_("") {}
35
+ void set_error_details(const char* err_details) {
36
+ error_details_ = err_details;
37
+ }
38
+ const std::string& error_details() { return error_details_; }
39
+
40
+ private:
41
+ std::string error_details_;
42
+ };
43
+
30
44
  /** TLS key materials config. **/
31
45
  struct grpc_tls_key_materials_config
32
46
  : public grpc_core::RefCounted<grpc_tls_key_materials_config> {
33
47
  public:
34
- typedef grpc_core::InlinedVector<grpc_core::PemKeyCertPair, 1>
35
- PemKeyCertPairList;
48
+ typedef absl::InlinedVector<grpc_core::PemKeyCertPair, 1> PemKeyCertPairList;
36
49
 
37
50
  /** Getters for member fields. **/
38
51
  const char* pem_root_certs() const { return pem_root_certs_.get(); }
@@ -42,14 +55,28 @@ struct grpc_tls_key_materials_config
42
55
  int version() const { return version_; }
43
56
 
44
57
  /** Setters for member fields. **/
58
+ // TODO(ZhenLian): Remove this function
45
59
  void set_pem_root_certs(grpc_core::UniquePtr<char> pem_root_certs) {
46
60
  pem_root_certs_ = std::move(pem_root_certs);
47
61
  }
62
+ // The ownerships of |pem_root_certs| remain with the caller.
63
+ void set_pem_root_certs(const char* pem_root_certs) {
64
+ // make a copy of pem_root_certs.
65
+ grpc_core::UniquePtr<char> pem_root_ptr(gpr_strdup(pem_root_certs));
66
+ pem_root_certs_ = std::move(pem_root_ptr);
67
+ }
48
68
  void add_pem_key_cert_pair(grpc_core::PemKeyCertPair pem_key_cert_pair) {
49
69
  pem_key_cert_pair_list_.push_back(pem_key_cert_pair);
50
70
  }
51
- void set_key_materials(grpc_core::UniquePtr<char> pem_root_certs,
52
- PemKeyCertPairList pem_key_cert_pair_list);
71
+ // The ownerships of |pem_root_certs| and |pem_key_cert_pairs| remain with the
72
+ // caller.
73
+ void set_key_materials(const char* pem_root_certs,
74
+ const grpc_ssl_pem_key_cert_pair** pem_key_cert_pairs,
75
+ size_t num_key_cert_pairs);
76
+ // The ownerships of |pem_root_certs| and |pem_key_cert_pair_list| remain with
77
+ // the caller.
78
+ void set_key_materials(const char* pem_root_certs,
79
+ const PemKeyCertPairList& pem_key_cert_pair_list);
53
80
  void set_version(int version) { version_ = version; }
54
81
 
55
82
  private:
@@ -79,8 +106,8 @@ struct grpc_tls_credential_reload_config
79
106
  gpr_log(GPR_ERROR, "schedule API is nullptr");
80
107
  if (arg != nullptr) {
81
108
  arg->status = GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL;
82
- arg->error_details =
83
- gpr_strdup("schedule API in credential reload config is nullptr");
109
+ arg->error_details->set_error_details(
110
+ "schedule API in credential reload config is nullptr");
84
111
  }
85
112
  return 1;
86
113
  }
@@ -94,8 +121,8 @@ struct grpc_tls_credential_reload_config
94
121
  gpr_log(GPR_ERROR, "cancel API is nullptr.");
95
122
  if (arg != nullptr) {
96
123
  arg->status = GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL;
97
- arg->error_details =
98
- gpr_strdup("cancel API in credential reload config is nullptr");
124
+ arg->error_details->set_error_details(
125
+ "cancel API in credential reload config is nullptr");
99
126
  }
100
127
  return;
101
128
  }
@@ -155,7 +182,7 @@ struct grpc_tls_server_authorization_check_config
155
182
  gpr_log(GPR_ERROR, "schedule API is nullptr");
156
183
  if (arg != nullptr) {
157
184
  arg->status = GRPC_STATUS_NOT_FOUND;
158
- arg->error_details = gpr_strdup(
185
+ arg->error_details->set_error_details(
159
186
  "schedule API in server authorization check config is nullptr");
160
187
  }
161
188
  return 1;
@@ -171,7 +198,7 @@ struct grpc_tls_server_authorization_check_config
171
198
  gpr_log(GPR_ERROR, "cancel API is nullptr.");
172
199
  if (arg != nullptr) {
173
200
  arg->status = GRPC_STATUS_NOT_FOUND;
174
- arg->error_details = gpr_strdup(
201
+ arg->error_details->set_error_details(
175
202
  "schedule API in server authorization check config is nullptr");
176
203
  }
177
204
  return;
@@ -82,10 +82,17 @@ class grpc_alts_channel_security_connector final
82
82
  tsi_handshaker* handshaker = nullptr;
83
83
  const grpc_alts_credentials* creds =
84
84
  static_cast<const grpc_alts_credentials*>(channel_creds());
85
- GPR_ASSERT(alts_tsi_handshaker_create(creds->options(), target_name_,
86
- creds->handshaker_service_url(), true,
87
- interested_parties,
88
- &handshaker) == TSI_OK);
85
+ size_t user_specified_max_frame_size = 0;
86
+ const grpc_arg* arg =
87
+ grpc_channel_args_find(args, GRPC_ARG_TSI_MAX_FRAME_SIZE);
88
+ if (arg != nullptr && arg->type == GRPC_ARG_INTEGER) {
89
+ user_specified_max_frame_size = grpc_channel_arg_get_integer(
90
+ arg, {0, 0, std::numeric_limits<int>::max()});
91
+ }
92
+ GPR_ASSERT(alts_tsi_handshaker_create(
93
+ creds->options(), target_name_,
94
+ creds->handshaker_service_url(), true, interested_parties,
95
+ &handshaker, user_specified_max_frame_size) == TSI_OK);
89
96
  handshake_manager->Add(
90
97
  grpc_core::SecurityHandshakerCreate(handshaker, this, args));
91
98
  }
@@ -104,7 +111,7 @@ class grpc_alts_channel_security_connector final
104
111
  return strcmp(target_name_, other->target_name_);
105
112
  }
106
113
 
107
- bool check_call_host(grpc_core::StringView host,
114
+ bool check_call_host(absl::string_view host,
108
115
  grpc_auth_context* /*auth_context*/,
109
116
  grpc_closure* /*on_call_host_checked*/,
110
117
  grpc_error** error) override {
@@ -140,9 +147,17 @@ class grpc_alts_server_security_connector final
140
147
  tsi_handshaker* handshaker = nullptr;
141
148
  const grpc_alts_server_credentials* creds =
142
149
  static_cast<const grpc_alts_server_credentials*>(server_creds());
150
+ size_t user_specified_max_frame_size = 0;
151
+ const grpc_arg* arg =
152
+ grpc_channel_args_find(args, GRPC_ARG_TSI_MAX_FRAME_SIZE);
153
+ if (arg != nullptr && arg->type == GRPC_ARG_INTEGER) {
154
+ user_specified_max_frame_size = grpc_channel_arg_get_integer(
155
+ arg, {0, 0, std::numeric_limits<int>::max()});
156
+ }
143
157
  GPR_ASSERT(alts_tsi_handshaker_create(
144
158
  creds->options(), nullptr, creds->handshaker_service_url(),
145
- false, interested_parties, &handshaker) == TSI_OK);
159
+ false, interested_parties, &handshaker,
160
+ user_specified_max_frame_size) == TSI_OK);
146
161
  handshake_manager->Add(
147
162
  grpc_core::SecurityHandshakerCreate(handshaker, this, args));
148
163
  }
@@ -103,20 +103,20 @@ class grpc_fake_channel_security_connector final
103
103
  tsi_create_fake_handshaker(/*is_client=*/true), this, args));
104
104
  }
105
105
 
106
- bool check_call_host(grpc_core::StringView host,
106
+ bool check_call_host(absl::string_view host,
107
107
  grpc_auth_context* /*auth_context*/,
108
108
  grpc_closure* /*on_call_host_checked*/,
109
109
  grpc_error** /*error*/) override {
110
- grpc_core::StringView authority_hostname;
111
- grpc_core::StringView authority_ignored_port;
112
- grpc_core::StringView target_hostname;
113
- grpc_core::StringView target_ignored_port;
110
+ absl::string_view authority_hostname;
111
+ absl::string_view authority_ignored_port;
112
+ absl::string_view target_hostname;
113
+ absl::string_view target_ignored_port;
114
114
  grpc_core::SplitHostPort(host, &authority_hostname,
115
115
  &authority_ignored_port);
116
116
  grpc_core::SplitHostPort(target_, &target_hostname, &target_ignored_port);
117
117
  if (target_name_override_ != nullptr) {
118
- grpc_core::StringView fake_security_target_name_override_hostname;
119
- grpc_core::StringView fake_security_target_name_override_ignored_port;
118
+ absl::string_view fake_security_target_name_override_hostname;
119
+ absl::string_view fake_security_target_name_override_ignored_port;
120
120
  grpc_core::SplitHostPort(
121
121
  target_name_override_, &fake_security_target_name_override_hostname,
122
122
  &fake_security_target_name_override_ignored_port);
@@ -34,6 +34,8 @@
34
34
  #include <sys/types.h>
35
35
  #include <unistd.h>
36
36
 
37
+ #include "absl/container/inlined_vector.h"
38
+
37
39
  #include <grpc/support/alloc.h>
38
40
  #include <grpc/support/log.h>
39
41
  #include <grpc/support/string_util.h>
@@ -41,7 +43,6 @@
41
43
  #include "src/core/lib/gpr/string.h"
42
44
  #include "src/core/lib/gpr/useful.h"
43
45
  #include "src/core/lib/gprpp/global_config.h"
44
- #include "src/core/lib/gprpp/inlined_vector.h"
45
46
  #include "src/core/lib/iomgr/load_file.h"
46
47
 
47
48
  GPR_GLOBAL_CONFIG_DEFINE_STRING(grpc_system_ssl_roots_dir, "",
@@ -100,7 +101,7 @@ grpc_slice CreateRootCertsBundle(const char* certs_directory) {
100
101
  char path[MAXPATHLEN];
101
102
  off_t size;
102
103
  };
103
- InlinedVector<FileData, 2> roots_filenames;
104
+ absl::InlinedVector<FileData, 2> roots_filenames;
104
105
  size_t total_bundle_size = 0;
105
106
  struct dirent* directory_entry;
106
107
  while ((directory_entry = readdir(ca_directory)) != nullptr) {
@@ -181,7 +181,7 @@ class grpc_local_channel_security_connector final
181
181
  creds->connect_type());
182
182
  }
183
183
 
184
- bool check_call_host(grpc_core::StringView host,
184
+ bool check_call_host(absl::string_view host,
185
185
  grpc_auth_context* /*auth_context*/,
186
186
  grpc_closure* /*on_call_host_checked*/,
187
187
  grpc_error** error) override {
@@ -98,7 +98,7 @@ class grpc_channel_security_connector : public grpc_security_connector {
98
98
  /// Returns true if completed synchronously, in which case \a error will
99
99
  /// be set to indicate the result. Otherwise, \a on_call_host_checked
100
100
  /// will be invoked when complete.
101
- virtual bool check_call_host(grpc_core::StringView host,
101
+ virtual bool check_call_host(absl::string_view host,
102
102
  grpc_auth_context* auth_context,
103
103
  grpc_closure* on_call_host_checked,
104
104
  grpc_error** error) = 0;
@@ -22,6 +22,8 @@
22
22
 
23
23
  #include <stdbool.h>
24
24
 
25
+ #include "absl/strings/string_view.h"
26
+
25
27
  #include <grpc/support/alloc.h>
26
28
  #include <grpc/support/log.h>
27
29
  #include <grpc/support/string_util.h>
@@ -72,14 +74,13 @@ class grpc_ssl_channel_security_connector final
72
74
  : grpc_channel_security_connector(GRPC_SSL_URL_SCHEME,
73
75
  std::move(channel_creds),
74
76
  std::move(request_metadata_creds)),
75
- overridden_target_name_(overridden_target_name == nullptr
76
- ? nullptr
77
- : gpr_strdup(overridden_target_name)),
77
+ overridden_target_name_(
78
+ overridden_target_name == nullptr ? "" : overridden_target_name),
78
79
  verify_options_(&config->verify_options) {
79
- grpc_core::StringView host;
80
- grpc_core::StringView port;
80
+ absl::string_view host;
81
+ absl::string_view port;
81
82
  grpc_core::SplitHostPort(target_name, &host, &port);
82
- target_name_ = grpc_core::StringViewToCString(host);
83
+ target_name_ = std::string(host);
83
84
  }
84
85
 
85
86
  ~grpc_ssl_channel_security_connector() override {
@@ -124,8 +125,8 @@ class grpc_ssl_channel_security_connector final
124
125
  tsi_handshaker* tsi_hs = nullptr;
125
126
  tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
126
127
  client_handshaker_factory_,
127
- overridden_target_name_ != nullptr ? overridden_target_name_.get()
128
- : target_name_.get(),
128
+ overridden_target_name_.empty() ? target_name_.c_str()
129
+ : overridden_target_name_.c_str(),
129
130
  &tsi_hs);
130
131
  if (result != TSI_OK) {
131
132
  gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
@@ -139,9 +140,9 @@ class grpc_ssl_channel_security_connector final
139
140
  void check_peer(tsi_peer peer, grpc_endpoint* /*ep*/,
140
141
  grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
141
142
  grpc_closure* on_peer_checked) override {
142
- const char* target_name = overridden_target_name_ != nullptr
143
- ? overridden_target_name_.get()
144
- : target_name_.get();
143
+ const char* target_name = overridden_target_name_.empty()
144
+ ? target_name_.c_str()
145
+ : overridden_target_name_.c_str();
145
146
  grpc_error* error = ssl_check_peer(target_name, &peer, auth_context);
146
147
  if (error == GRPC_ERROR_NONE &&
147
148
  verify_options_->verify_peer_callback != nullptr) {
@@ -176,23 +177,17 @@ class grpc_ssl_channel_security_connector final
176
177
  reinterpret_cast<const grpc_ssl_channel_security_connector*>(other_sc);
177
178
  int c = channel_security_connector_cmp(other);
178
179
  if (c != 0) return c;
179
- c = strcmp(target_name_.get(), other->target_name_.get());
180
+ c = target_name_.compare(other->target_name_);
180
181
  if (c != 0) return c;
181
- return (overridden_target_name_ == nullptr ||
182
- other->overridden_target_name_ == nullptr)
183
- ? GPR_ICMP(overridden_target_name_.get(),
184
- other->overridden_target_name_.get())
185
- : strcmp(overridden_target_name_.get(),
186
- other->overridden_target_name_.get());
182
+ return overridden_target_name_.compare(other->overridden_target_name_);
187
183
  }
188
184
 
189
- bool check_call_host(grpc_core::StringView host,
190
- grpc_auth_context* auth_context,
185
+ bool check_call_host(absl::string_view host, grpc_auth_context* auth_context,
191
186
  grpc_closure* /*on_call_host_checked*/,
192
187
  grpc_error** error) override {
193
- return grpc_ssl_check_call_host(host, target_name_.get(),
194
- overridden_target_name_.get(), auth_context,
195
- error);
188
+ return grpc_ssl_check_call_host(host, target_name_.c_str(),
189
+ overridden_target_name_.c_str(),
190
+ auth_context, error);
196
191
  }
197
192
 
198
193
  void cancel_check_call_host(grpc_closure* /*on_call_host_checked*/,
@@ -202,8 +197,8 @@ class grpc_ssl_channel_security_connector final
202
197
 
203
198
  private:
204
199
  tsi_ssl_client_handshaker_factory* client_handshaker_factory_;
205
- grpc_core::UniquePtr<char> target_name_;
206
- grpc_core::UniquePtr<char> overridden_target_name_;
200
+ std::string target_name_;
201
+ std::string overridden_target_name_;
207
202
  const verify_peer_options* verify_options_;
208
203
  };
209
204
 
@@ -29,12 +29,11 @@
29
29
  #include "src/core/tsi/ssl_transport_security.h"
30
30
  #include "src/core/tsi/transport_security_interface.h"
31
31
 
32
- typedef struct {
32
+ struct grpc_ssl_config {
33
33
  tsi_ssl_pem_key_cert_pair* pem_key_cert_pair;
34
34
  char* pem_root_certs;
35
35
  verify_peer_options verify_options;
36
- } grpc_ssl_config;
37
-
36
+ };
38
37
  /* Creates an SSL channel_security_connector.
39
38
  - request_metadata_creds is the credentials object which metadata
40
39
  will be sent with each request. This parameter can be NULL.
@@ -57,14 +56,13 @@ grpc_ssl_channel_security_connector_create(
57
56
  tsi_ssl_session_cache* ssl_session_cache);
58
57
 
59
58
  /* Config for ssl servers. */
60
- typedef struct {
59
+ struct grpc_ssl_server_config {
61
60
  tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs = nullptr;
62
61
  size_t num_key_cert_pairs = 0;
63
62
  char* pem_root_certs = nullptr;
64
63
  grpc_ssl_client_certificate_request_type client_certificate_request =
65
64
  GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE;
66
- } grpc_ssl_server_config;
67
-
65
+ };
68
66
  /* Creates an SSL server_security_connector.
69
67
  - config is the SSL config to be used for the SSL channel establishment.
70
68
  - sc is a pointer on the connector to be created.
@@ -25,6 +25,8 @@
25
25
  #include <grpc/support/log.h>
26
26
  #include <grpc/support/string_util.h>
27
27
 
28
+ #include <vector>
29
+
28
30
  #include "src/core/ext/transport/chttp2/alpn/alpn.h"
29
31
  #include "src/core/lib/channel/channel_args.h"
30
32
  #include "src/core/lib/gpr/string.h"
@@ -149,7 +151,7 @@ grpc_error* grpc_ssl_check_alpn(const tsi_peer* peer) {
149
151
  return GRPC_ERROR_NONE;
150
152
  }
151
153
 
152
- grpc_error* grpc_ssl_check_peer_name(grpc_core::StringView peer_name,
154
+ grpc_error* grpc_ssl_check_peer_name(absl::string_view peer_name,
153
155
  const tsi_peer* peer) {
154
156
  /* Check the peer name if specified. */
155
157
  if (!peer_name.empty() && !grpc_ssl_host_matches_name(peer, peer_name)) {
@@ -163,9 +165,9 @@ grpc_error* grpc_ssl_check_peer_name(grpc_core::StringView peer_name,
163
165
  return GRPC_ERROR_NONE;
164
166
  }
165
167
 
166
- bool grpc_ssl_check_call_host(grpc_core::StringView host,
167
- grpc_core::StringView target_name,
168
- grpc_core::StringView overridden_target_name,
168
+ bool grpc_ssl_check_call_host(absl::string_view host,
169
+ absl::string_view target_name,
170
+ absl::string_view overridden_target_name,
169
171
  grpc_auth_context* auth_context,
170
172
  grpc_error** error) {
171
173
  grpc_security_status status = GRPC_SECURITY_ERROR;
@@ -197,29 +199,50 @@ const char** grpc_fill_alpn_protocol_strings(size_t* num_alpn_protocols) {
197
199
  }
198
200
 
199
201
  int grpc_ssl_host_matches_name(const tsi_peer* peer,
200
- grpc_core::StringView peer_name) {
201
- grpc_core::StringView allocated_name;
202
- grpc_core::StringView ignored_port;
202
+ absl::string_view peer_name) {
203
+ absl::string_view allocated_name;
204
+ absl::string_view ignored_port;
203
205
  grpc_core::SplitHostPort(peer_name, &allocated_name, &ignored_port);
204
206
  if (allocated_name.empty()) return 0;
205
207
 
206
208
  // IPv6 zone-id should not be included in comparisons.
207
209
  const size_t zone_id = allocated_name.find('%');
208
- if (zone_id != grpc_core::StringView::npos) {
210
+ if (zone_id != absl::string_view::npos) {
209
211
  allocated_name.remove_suffix(allocated_name.size() - zone_id);
210
212
  }
211
213
  return tsi_ssl_peer_matches_name(peer, allocated_name);
212
214
  }
213
215
 
214
- int grpc_ssl_cmp_target_name(
215
- grpc_core::StringView target_name, grpc_core::StringView other_target_name,
216
- grpc_core::StringView overridden_target_name,
217
- grpc_core::StringView other_overridden_target_name) {
216
+ int grpc_ssl_cmp_target_name(absl::string_view target_name,
217
+ absl::string_view other_target_name,
218
+ absl::string_view overridden_target_name,
219
+ absl::string_view other_overridden_target_name) {
218
220
  int c = target_name.compare(other_target_name);
219
221
  if (c != 0) return c;
220
222
  return overridden_target_name.compare(other_overridden_target_name);
221
223
  }
222
224
 
225
+ static bool IsSpiffeId(absl::string_view uri) {
226
+ // Return false without logging for a non-spiffe uri scheme.
227
+ if (!absl::StartsWith(uri, "spiffe://")) {
228
+ return false;
229
+ };
230
+ if (uri.size() > 2048) {
231
+ gpr_log(GPR_INFO, "Invalid SPIFFE ID: ID longer than 2048 bytes.");
232
+ return false;
233
+ }
234
+ std::vector<absl::string_view> splits = absl::StrSplit(uri, '/');
235
+ if (splits.size() < 4 || splits[3] == "") {
236
+ gpr_log(GPR_INFO, "Invalid SPIFFE ID: workload id is empty.");
237
+ return false;
238
+ }
239
+ if (splits[2].size() > 255) {
240
+ gpr_log(GPR_INFO, "Invalid SPIFFE ID: domain longer than 255 characters.");
241
+ return false;
242
+ }
243
+ return true;
244
+ }
245
+
223
246
  grpc_core::RefCountedPtr<grpc_auth_context> grpc_ssl_peer_to_auth_context(
224
247
  const tsi_peer* peer, const char* transport_security_type) {
225
248
  size_t i;
@@ -232,6 +255,9 @@ grpc_core::RefCountedPtr grpc_ssl_peer_to_auth_context(
232
255
  grpc_auth_context_add_cstring_property(
233
256
  ctx.get(), GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
234
257
  transport_security_type);
258
+ const char* spiffe_data = nullptr;
259
+ size_t spiffe_length = 0;
260
+ int spiffe_id_count = 0;
235
261
  for (i = 0; i < peer->property_count; i++) {
236
262
  const tsi_peer_property* prop = &peer->properties[i];
237
263
  if (prop->name == nullptr) continue;
@@ -263,12 +289,30 @@ grpc_core::RefCountedPtr grpc_ssl_peer_to_auth_context(
263
289
  grpc_auth_context_add_property(
264
290
  ctx.get(), GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME,
265
291
  prop->value.data, prop->value.length);
292
+ } else if (strcmp(prop->name, TSI_X509_URI_PEER_PROPERTY) == 0) {
293
+ absl::string_view spiffe_id(prop->value.data, prop->value.length);
294
+ if (IsSpiffeId(spiffe_id)) {
295
+ spiffe_data = prop->value.data;
296
+ spiffe_length = prop->value.length;
297
+ spiffe_id_count += 1;
298
+ }
266
299
  }
267
300
  }
268
301
  if (peer_identity_property_name != nullptr) {
269
302
  GPR_ASSERT(grpc_auth_context_set_peer_identity_property_name(
270
303
  ctx.get(), peer_identity_property_name) == 1);
271
304
  }
305
+ // SPIFFE ID should be unique. If we find more than one SPIFFE IDs, we log
306
+ // the error without returning the error.
307
+ if (spiffe_id_count > 1) {
308
+ gpr_log(GPR_INFO, "Invalid SPIFFE ID: SPIFFE ID should be unique.");
309
+ }
310
+ if (spiffe_id_count == 1) {
311
+ GPR_ASSERT(spiffe_length > 0);
312
+ GPR_ASSERT(spiffe_data != nullptr);
313
+ grpc_auth_context_add_property(ctx.get(), GRPC_PEER_SPIFFE_ID_PROPERTY_NAME,
314
+ spiffe_data, spiffe_length);
315
+ }
272
316
  return ctx;
273
317
  }
274
318
 
@@ -314,6 +358,9 @@ tsi_peer grpc_shallow_peer_from_ssl_auth_context(
314
358
  0) {
315
359
  add_shallow_auth_property_to_peer(&peer, prop,
316
360
  TSI_X509_PEM_CERT_CHAIN_PROPERTY);
361
+ } else if (strcmp(prop->name, GRPC_PEER_SPIFFE_ID_PROPERTY_NAME) == 0) {
362
+ add_shallow_auth_property_to_peer(&peer, prop,
363
+ TSI_X509_URI_PEER_PROPERTY);
317
364
  }
318
365
  }
319
366
  }