grpc 1.28.0 → 1.31.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 (707) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8314 -11869
  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 +4 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +23 -23
  7. data/include/grpc/impl/codegen/port_platform.h +6 -34
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -12
  10. data/src/core/ext/filters/client_channel/client_channel.cc +591 -479
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  14. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.cc +9 -22
  16. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  18. data/src/core/ext/filters/client_channel/http_proxy.cc +23 -14
  19. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  20. data/src/core/ext/filters/client_channel/lb_policy.h +44 -33
  21. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +279 -324
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  29. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -17
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +733 -0
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1143 -0
  38. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +10 -7
  39. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  40. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  41. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  42. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +78 -61
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +41 -40
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +22 -24
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +12 -10
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +79 -122
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +199 -163
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +46 -45
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  54. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  55. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +38 -8
  57. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  58. data/src/core/ext/filters/client_channel/resolver_registry.cc +19 -17
  59. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +21 -22
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  62. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +49 -55
  63. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +43 -23
  64. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  65. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  66. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  67. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  68. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  72. data/src/core/ext/filters/client_channel/subchannel.cc +55 -25
  73. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  74. data/src/core/ext/filters/client_channel/xds/xds_api.cc +565 -234
  75. data/src/core/ext/filters/client_channel/xds/xds_api.h +102 -37
  76. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +55 -71
  77. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  78. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  79. data/src/core/ext/filters/client_channel/xds/xds_client.cc +619 -347
  80. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  81. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  82. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +40 -28
  83. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -33
  84. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  85. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  86. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  87. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  89. data/src/core/ext/filters/message_size/message_size_filter.cc +61 -88
  90. data/src/core/ext/filters/message_size/message_size_filter.h +10 -4
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +386 -350
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  93. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  94. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  95. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  96. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +42 -26
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  99. data/src/core/ext/transport/chttp2/transport/flow_control.cc +25 -30
  100. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  101. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  102. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  103. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  105. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  106. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  107. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  108. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  109. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  110. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  111. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  112. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  113. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  114. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  116. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  118. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  119. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  120. data/src/core/ext/transport/chttp2/transport/internal.h +27 -21
  121. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  122. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -22
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +54 -15
  125. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  126. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  127. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  128. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -876
  129. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  130. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +429 -0
  131. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +198 -0
  133. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  134. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +388 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  137. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +23 -10
  138. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +352 -310
  139. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  141. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  142. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  143. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  145. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  146. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  147. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  148. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +79 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +48 -27
  150. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +258 -214
  151. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  153. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  154. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +71 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  156. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  157. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  158. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +157 -122
  159. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  161. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  162. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +173 -73
  163. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  164. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +88 -0
  165. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -1
  166. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  167. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  168. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  169. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +2 -1
  170. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  171. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  173. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  174. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +53 -38
  175. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  176. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  177. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  178. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  179. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  180. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +95 -63
  181. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  182. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  183. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +3 -2
  184. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  185. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  186. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  187. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  188. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  189. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  190. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  191. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  192. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  193. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +68 -46
  194. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +770 -722
  195. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  196. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  197. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  198. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  199. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +2 -1
  200. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  201. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  202. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +305 -210
  203. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  204. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  205. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  206. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  207. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  208. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  209. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  210. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +22 -16
  211. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  212. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  213. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  214. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +48 -11
  215. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  216. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  217. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  219. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  220. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  221. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  222. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  223. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  224. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  225. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  226. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  227. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  228. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  229. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  230. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  231. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +12 -11
  232. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +421 -389
  233. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  234. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  235. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  236. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  237. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  238. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  239. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  240. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  241. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  242. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  243. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  244. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  245. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  246. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  247. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  248. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  249. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  250. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  251. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  252. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  253. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  254. data/src/core/ext/upb-generated/validate/validate.upb.h +569 -562
  255. data/src/core/lib/channel/channel_args.cc +15 -14
  256. data/src/core/lib/channel/channel_args.h +3 -1
  257. data/src/core/lib/channel/channel_stack.h +20 -13
  258. data/src/core/lib/channel/channel_trace.cc +2 -6
  259. data/src/core/lib/channel/channelz.cc +10 -21
  260. data/src/core/lib/channel/channelz.h +3 -2
  261. data/src/core/lib/channel/channelz_registry.cc +5 -3
  262. data/src/core/lib/channel/connected_channel.cc +7 -5
  263. data/src/core/lib/channel/context.h +1 -1
  264. data/src/core/lib/channel/handshaker.cc +11 -13
  265. data/src/core/lib/channel/handshaker.h +4 -2
  266. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  267. data/src/core/lib/channel/status_util.cc +2 -3
  268. data/src/core/lib/compression/message_compress.cc +5 -1
  269. data/src/core/lib/debug/stats.cc +21 -27
  270. data/src/core/lib/debug/stats.h +3 -1
  271. data/src/core/lib/gpr/log_linux.cc +6 -8
  272. data/src/core/lib/gpr/log_posix.cc +6 -8
  273. data/src/core/lib/gpr/spinlock.h +2 -3
  274. data/src/core/lib/gpr/string.cc +10 -33
  275. data/src/core/lib/gpr/string.h +4 -18
  276. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  277. data/src/core/lib/gpr/time.cc +4 -0
  278. data/src/core/lib/gpr/time_posix.cc +1 -1
  279. data/src/core/lib/gprpp/atomic.h +6 -6
  280. data/src/core/lib/gprpp/fork.cc +1 -1
  281. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  282. data/src/core/lib/gprpp/host_port.cc +29 -35
  283. data/src/core/lib/gprpp/host_port.h +14 -17
  284. data/src/core/lib/gprpp/map.h +5 -11
  285. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  286. data/src/core/lib/http/format_request.cc +46 -65
  287. data/src/core/lib/http/httpcli.cc +15 -13
  288. data/src/core/lib/http/httpcli.h +2 -3
  289. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  290. data/src/core/lib/http/parser.h +2 -3
  291. data/src/core/lib/iomgr/buffer_list.h +22 -21
  292. data/src/core/lib/iomgr/call_combiner.h +3 -2
  293. data/src/core/lib/iomgr/cfstream_handle.cc +4 -2
  294. data/src/core/lib/iomgr/closure.h +2 -3
  295. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  296. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  297. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  298. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  299. data/src/core/lib/iomgr/error.cc +6 -9
  300. data/src/core/lib/iomgr/error.h +0 -1
  301. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  302. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  303. data/src/core/lib/iomgr/ev_apple.h +43 -0
  304. data/src/core/lib/iomgr/ev_epoll1_linux.cc +25 -29
  305. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -24
  306. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -8
  307. data/src/core/lib/iomgr/ev_posix.cc +4 -3
  308. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  309. data/src/core/lib/iomgr/iomgr.cc +10 -0
  310. data/src/core/lib/iomgr/iomgr.h +10 -0
  311. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  312. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  313. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  314. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  315. data/src/core/lib/iomgr/port.h +2 -21
  316. data/src/core/lib/iomgr/python_util.h +46 -0
  317. data/src/core/lib/iomgr/resolve_address.h +4 -6
  318. data/src/core/lib/iomgr/resolve_address_custom.cc +42 -57
  319. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  320. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  321. data/src/core/lib/iomgr/resolve_address_windows.cc +16 -25
  322. data/src/core/lib/iomgr/resource_quota.cc +38 -37
  323. data/src/core/lib/iomgr/sockaddr_utils.cc +29 -33
  324. data/src/core/lib/iomgr/sockaddr_utils.h +10 -15
  325. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  326. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  327. data/src/core/lib/iomgr/socket_utils_common_posix.cc +102 -81
  328. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  329. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  330. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -18
  331. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  332. data/src/core/lib/iomgr/tcp_client_posix.cc +30 -36
  333. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -11
  334. data/src/core/lib/iomgr/tcp_custom.cc +3 -4
  335. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  336. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  337. data/src/core/lib/iomgr/tcp_server.h +7 -5
  338. data/src/core/lib/iomgr/tcp_server_custom.cc +11 -23
  339. data/src/core/lib/iomgr/tcp_server_posix.cc +38 -44
  340. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  341. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -8
  342. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  343. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  344. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  345. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  346. data/src/core/lib/iomgr/timer_generic.cc +15 -15
  347. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  348. data/src/core/lib/iomgr/timer_heap.h +2 -3
  349. data/src/core/lib/iomgr/udp_server.cc +32 -36
  350. data/src/core/lib/iomgr/udp_server.h +5 -2
  351. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  352. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  353. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  354. data/src/core/lib/json/json.h +3 -2
  355. data/src/core/lib/json/json_reader.cc +25 -26
  356. data/src/core/lib/json/json_writer.cc +13 -12
  357. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  358. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  359. data/src/core/lib/security/credentials/credentials.cc +0 -84
  360. data/src/core/lib/security/credentials/credentials.h +13 -62
  361. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  362. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  363. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -17
  364. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  365. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  366. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  367. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  368. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  369. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  370. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  371. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  372. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +73 -54
  373. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  374. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +19 -6
  375. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  376. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  377. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  378. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  379. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +48 -11
  380. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  381. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -17
  382. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  383. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  384. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  385. data/src/core/lib/security/security_connector/security_connector.h +2 -2
  386. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -36
  387. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  388. data/src/core/lib/security/security_connector/ssl_utils.cc +89 -21
  389. data/src/core/lib/security/security_connector/ssl_utils.h +18 -12
  390. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +101 -72
  391. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  392. data/src/core/lib/security/transport/auth_filters.h +0 -5
  393. data/src/core/lib/security/transport/client_auth_filter.cc +11 -11
  394. data/src/core/lib/security/util/json_util.cc +12 -13
  395. data/src/core/lib/slice/slice.cc +38 -1
  396. data/src/core/lib/slice/slice_intern.cc +2 -3
  397. data/src/core/lib/slice/slice_internal.h +15 -0
  398. data/src/core/lib/slice/slice_utils.h +9 -0
  399. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  400. data/src/core/lib/surface/call.cc +42 -44
  401. data/src/core/lib/surface/call_log_batch.cc +50 -58
  402. data/src/core/lib/surface/channel.cc +53 -31
  403. data/src/core/lib/surface/channel.h +35 -4
  404. data/src/core/lib/surface/channel_ping.cc +2 -3
  405. data/src/core/lib/surface/completion_queue.cc +304 -47
  406. data/src/core/lib/surface/completion_queue.h +8 -0
  407. data/src/core/lib/surface/event_string.cc +18 -25
  408. data/src/core/lib/surface/event_string.h +3 -1
  409. data/src/core/lib/surface/init.cc +2 -0
  410. data/src/core/lib/surface/init_secure.cc +1 -4
  411. data/src/core/lib/surface/server.cc +971 -837
  412. data/src/core/lib/surface/server.h +66 -12
  413. data/src/core/lib/surface/version.cc +2 -2
  414. data/src/core/lib/transport/byte_stream.h +7 -2
  415. data/src/core/lib/transport/connectivity_state.cc +7 -6
  416. data/src/core/lib/transport/connectivity_state.h +5 -3
  417. data/src/core/lib/transport/metadata.cc +3 -3
  418. data/src/core/lib/transport/metadata_batch.h +2 -3
  419. data/src/core/lib/transport/static_metadata.h +1 -1
  420. data/src/core/lib/transport/status_conversion.cc +6 -14
  421. data/src/core/lib/transport/transport.cc +2 -3
  422. data/src/core/lib/transport/transport.h +9 -2
  423. data/src/core/lib/transport/transport_op_string.cc +61 -102
  424. data/src/core/lib/uri/uri_parser.cc +8 -15
  425. data/src/core/lib/uri/uri_parser.h +2 -3
  426. data/src/core/plugin_registry/grpc_plugin_registry.cc +24 -4
  427. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  428. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +31 -14
  429. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  430. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +34 -2
  431. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  432. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  433. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  434. data/src/core/tsi/fake_transport_security.cc +10 -15
  435. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  436. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  437. data/src/core/tsi/ssl_transport_security.cc +154 -50
  438. data/src/core/tsi/ssl_transport_security.h +22 -10
  439. data/src/core/tsi/ssl_types.h +0 -2
  440. data/src/core/tsi/transport_security.h +6 -9
  441. data/src/core/tsi/transport_security_grpc.h +2 -3
  442. data/src/core/tsi/transport_security_interface.h +8 -3
  443. data/src/ruby/ext/grpc/extconf.rb +5 -2
  444. data/src/ruby/ext/grpc/rb_call.c +12 -3
  445. data/src/ruby/ext/grpc/rb_call.h +4 -0
  446. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  447. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  448. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  449. data/src/ruby/lib/grpc/errors.rb +103 -42
  450. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  451. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  452. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  453. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  454. data/src/ruby/lib/grpc/structs.rb +1 -1
  455. data/src/ruby/lib/grpc/version.rb +1 -1
  456. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  457. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  458. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  459. data/src/ruby/spec/debug_message_spec.rb +134 -0
  460. data/src/ruby/spec/generic/service_spec.rb +2 -0
  461. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  462. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  463. data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
  464. data/src/ruby/spec/support/services.rb +10 -4
  465. data/src/ruby/spec/testdata/ca.pem +18 -13
  466. data/src/ruby/spec/testdata/client.key +26 -14
  467. data/src/ruby/spec/testdata/client.pem +18 -12
  468. data/src/ruby/spec/testdata/server1.key +26 -14
  469. data/src/ruby/spec/testdata/server1.pem +20 -14
  470. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  471. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  472. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  473. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  474. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  475. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  476. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  477. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  485. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  486. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  487. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  488. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  492. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  493. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  494. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  495. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  496. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  497. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  498. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  499. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  500. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  501. data/third_party/boringssl-with-bazel/err_data.c +335 -297
  502. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  503. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  504. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  505. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  506. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  507. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  508. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  509. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  511. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  512. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  513. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  515. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  516. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  517. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  518. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  519. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  520. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  521. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  522. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  523. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  524. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  526. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  527. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  528. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +25 -12
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -161
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  545. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  546. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  547. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  548. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  549. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  550. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  551. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  552. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  553. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  554. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  555. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  556. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  557. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  558. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  559. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  560. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  561. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  562. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  563. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  564. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  565. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  567. data/third_party/boringssl-with-bazel/src/crypto/mem.c +47 -16
  568. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  569. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  570. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  571. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  572. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  573. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  576. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  577. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  579. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  580. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  581. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  582. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  583. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  584. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +57 -0
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +33 -9
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  589. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  590. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  591. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  592. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  593. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  594. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  595. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  596. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -2
  597. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  598. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  599. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  600. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  601. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  602. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  603. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  604. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  605. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  606. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  607. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  608. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +191 -79
  609. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  610. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  611. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +791 -715
  612. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  613. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  614. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  615. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  616. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  617. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +23 -5
  618. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +30 -22
  619. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +21 -4
  620. data/third_party/boringssl-with-bazel/src/ssl/internal.h +74 -54
  621. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  622. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  623. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  624. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  625. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +34 -1
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +44 -5
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  631. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +51 -26
  632. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  633. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  634. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +129 -48
  635. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  636. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +55 -22
  637. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  638. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  639. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  640. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  641. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  642. data/third_party/re2/re2/bitmap256.h +117 -0
  643. data/third_party/re2/re2/bitstate.cc +385 -0
  644. data/third_party/re2/re2/compile.cc +1279 -0
  645. data/third_party/re2/re2/dfa.cc +2130 -0
  646. data/third_party/re2/re2/filtered_re2.cc +121 -0
  647. data/third_party/re2/re2/filtered_re2.h +109 -0
  648. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  649. data/third_party/re2/re2/nfa.cc +713 -0
  650. data/third_party/re2/re2/onepass.cc +623 -0
  651. data/third_party/re2/re2/parse.cc +2464 -0
  652. data/third_party/re2/re2/perl_groups.cc +119 -0
  653. data/third_party/re2/re2/pod_array.h +55 -0
  654. data/third_party/re2/re2/prefilter.cc +710 -0
  655. data/third_party/re2/re2/prefilter.h +108 -0
  656. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  657. data/third_party/re2/re2/prefilter_tree.h +139 -0
  658. data/third_party/re2/re2/prog.cc +988 -0
  659. data/third_party/re2/re2/prog.h +436 -0
  660. data/third_party/re2/re2/re2.cc +1362 -0
  661. data/third_party/re2/re2/re2.h +1002 -0
  662. data/third_party/re2/re2/regexp.cc +980 -0
  663. data/third_party/re2/re2/regexp.h +659 -0
  664. data/third_party/re2/re2/set.cc +154 -0
  665. data/third_party/re2/re2/set.h +80 -0
  666. data/third_party/re2/re2/simplify.cc +657 -0
  667. data/third_party/re2/re2/sparse_array.h +392 -0
  668. data/third_party/re2/re2/sparse_set.h +264 -0
  669. data/third_party/re2/re2/stringpiece.cc +65 -0
  670. data/third_party/re2/re2/stringpiece.h +210 -0
  671. data/third_party/re2/re2/tostring.cc +351 -0
  672. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  673. data/third_party/re2/re2/unicode_casefold.h +78 -0
  674. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  675. data/third_party/re2/re2/unicode_groups.h +67 -0
  676. data/third_party/re2/re2/walker-inl.h +246 -0
  677. data/third_party/re2/util/benchmark.h +156 -0
  678. data/third_party/re2/util/flags.h +26 -0
  679. data/third_party/re2/util/logging.h +109 -0
  680. data/third_party/re2/util/malloc_counter.h +19 -0
  681. data/third_party/re2/util/mix.h +41 -0
  682. data/third_party/re2/util/mutex.h +148 -0
  683. data/third_party/re2/util/pcre.cc +1025 -0
  684. data/third_party/re2/util/pcre.h +681 -0
  685. data/third_party/re2/util/rune.cc +260 -0
  686. data/third_party/re2/util/strutil.cc +149 -0
  687. data/third_party/re2/util/strutil.h +21 -0
  688. data/third_party/re2/util/test.h +50 -0
  689. data/third_party/re2/util/utf.h +44 -0
  690. data/third_party/re2/util/util.h +42 -0
  691. data/third_party/upb/upb/decode.c +467 -504
  692. data/third_party/upb/upb/encode.c +163 -121
  693. data/third_party/upb/upb/msg.c +130 -64
  694. data/third_party/upb/upb/msg.h +418 -14
  695. data/third_party/upb/upb/port_def.inc +35 -6
  696. data/third_party/upb/upb/port_undef.inc +8 -1
  697. data/third_party/upb/upb/table.c +53 -75
  698. data/third_party/upb/upb/table.int.h +11 -43
  699. data/third_party/upb/upb/upb.c +148 -124
  700. data/third_party/upb/upb/upb.h +65 -147
  701. data/third_party/upb/upb/upb.hpp +86 -0
  702. metadata +175 -47
  703. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  704. data/src/core/lib/gprpp/string_view.h +0 -60
  705. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  706. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  707. data/third_party/upb/upb/generated_util.h +0 -105
@@ -139,12 +139,18 @@ static bool derive_secret(SSL_HANDSHAKE *hs, Span<uint8_t> out,
139
139
 
140
140
  bool tls13_set_traffic_key(SSL *ssl, enum ssl_encryption_level_t level,
141
141
  enum evp_aead_direction_t direction,
142
+ const SSL_SESSION *session,
142
143
  Span<const uint8_t> traffic_secret) {
143
- const SSL_SESSION *session = SSL_get_session(ssl);
144
144
  uint16_t version = ssl_session_protocol_version(session);
145
-
146
145
  UniquePtr<SSLAEADContext> traffic_aead;
147
- if (ssl->quic_method == nullptr) {
146
+ Span<const uint8_t> secret_for_quic;
147
+ if (ssl->quic_method != nullptr) {
148
+ // Install a placeholder SSLAEADContext so that SSL accessors work. The
149
+ // encryption itself will be handled by the SSL_QUIC_METHOD.
150
+ traffic_aead =
151
+ SSLAEADContext::CreatePlaceholderForQUIC(version, session->cipher);
152
+ secret_for_quic = traffic_secret;
153
+ } else {
148
154
  // Look up cipher suite properties.
149
155
  const EVP_AEAD *aead;
150
156
  size_t discard;
@@ -173,34 +179,15 @@ bool tls13_set_traffic_key(SSL *ssl, enum ssl_encryption_level_t level,
173
179
  return false;
174
180
  }
175
181
 
176
-
177
182
  traffic_aead = SSLAEADContext::Create(direction, session->ssl_version,
178
183
  SSL_is_dtls(ssl), session->cipher,
179
184
  key, Span<const uint8_t>(), iv);
180
- } else {
181
- // Install a placeholder SSLAEADContext so that SSL accessors work. The
182
- // encryption itself will be handled by the SSL_QUIC_METHOD.
183
- traffic_aead =
184
- SSLAEADContext::CreatePlaceholderForQUIC(version, session->cipher);
185
- // QUIC never installs early data keys at the TLS layer.
186
- assert(level != ssl_encryption_early_data);
187
185
  }
188
186
 
189
187
  if (!traffic_aead) {
190
188
  return false;
191
189
  }
192
190
 
193
- if (direction == evp_aead_open) {
194
- if (!ssl->method->set_read_state(ssl, std::move(traffic_aead))) {
195
- return false;
196
- }
197
- } else {
198
- if (!ssl->method->set_write_state(ssl, std::move(traffic_aead))) {
199
- return false;
200
- }
201
- }
202
-
203
- // Save the traffic secret.
204
191
  if (traffic_secret.size() >
205
192
  OPENSSL_ARRAY_SIZE(ssl->s3->read_traffic_secret) ||
206
193
  traffic_secret.size() >
@@ -208,16 +195,23 @@ bool tls13_set_traffic_key(SSL *ssl, enum ssl_encryption_level_t level,
208
195
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
209
196
  return false;
210
197
  }
198
+
211
199
  if (direction == evp_aead_open) {
200
+ if (!ssl->method->set_read_state(ssl, level, std::move(traffic_aead),
201
+ secret_for_quic)) {
202
+ return false;
203
+ }
212
204
  OPENSSL_memmove(ssl->s3->read_traffic_secret, traffic_secret.data(),
213
205
  traffic_secret.size());
214
206
  ssl->s3->read_traffic_secret_len = traffic_secret.size();
215
- ssl->s3->read_level = level;
216
207
  } else {
208
+ if (!ssl->method->set_write_state(ssl, level, std::move(traffic_aead),
209
+ secret_for_quic)) {
210
+ return false;
211
+ }
217
212
  OPENSSL_memmove(ssl->s3->write_traffic_secret, traffic_secret.data(),
218
213
  traffic_secret.size());
219
214
  ssl->s3->write_traffic_secret_len = traffic_secret.size();
220
- ssl->s3->write_level = level;
221
215
  }
222
216
 
223
217
  return true;
@@ -243,47 +237,6 @@ bool tls13_derive_early_secret(SSL_HANDSHAKE *hs) {
243
237
  return true;
244
238
  }
245
239
 
246
- bool tls13_set_early_secret_for_quic(SSL_HANDSHAKE *hs) {
247
- SSL *const ssl = hs->ssl;
248
- if (ssl->quic_method == nullptr) {
249
- return true;
250
- }
251
- if (ssl->server) {
252
- if (!ssl->quic_method->set_encryption_secrets(
253
- ssl, ssl_encryption_early_data, hs->early_traffic_secret().data(),
254
- /*write_secret=*/nullptr, hs->early_traffic_secret().size())) {
255
- OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_INTERNAL_ERROR);
256
- return false;
257
- }
258
- } else {
259
- if (!ssl->quic_method->set_encryption_secrets(
260
- ssl, ssl_encryption_early_data, /*read_secret=*/nullptr,
261
- hs->early_traffic_secret().data(),
262
- hs->early_traffic_secret().size())) {
263
- OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_INTERNAL_ERROR);
264
- return false;
265
- }
266
- }
267
- return true;
268
- }
269
-
270
- static bool set_quic_secrets(SSL_HANDSHAKE *hs, ssl_encryption_level_t level,
271
- Span<const uint8_t> client_write_secret,
272
- Span<const uint8_t> server_write_secret) {
273
- SSL *const ssl = hs->ssl;
274
- assert(client_write_secret.size() == server_write_secret.size());
275
- if (ssl->quic_method == nullptr) {
276
- return true;
277
- }
278
- if (!ssl->server) {
279
- std::swap(client_write_secret, server_write_secret);
280
- }
281
- return ssl->quic_method->set_encryption_secrets(
282
- ssl, level,
283
- /*read_secret=*/client_write_secret.data(),
284
- /*write_secret=*/server_write_secret.data(), client_write_secret.size());
285
- }
286
-
287
240
  bool tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs) {
288
241
  SSL *const ssl = hs->ssl;
289
242
  if (!derive_secret(hs, hs->client_handshake_secret(),
@@ -293,10 +246,7 @@ bool tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs) {
293
246
  !derive_secret(hs, hs->server_handshake_secret(),
294
247
  label_to_span(kTLS13LabelServerHandshakeTraffic)) ||
295
248
  !ssl_log_secret(ssl, "SERVER_HANDSHAKE_TRAFFIC_SECRET",
296
- hs->server_handshake_secret()) ||
297
- !set_quic_secrets(hs, ssl_encryption_handshake,
298
- hs->client_handshake_secret(),
299
- hs->server_handshake_secret())) {
249
+ hs->server_handshake_secret())) {
300
250
  return false;
301
251
  }
302
252
 
@@ -319,10 +269,7 @@ bool tls13_derive_application_secrets(SSL_HANDSHAKE *hs) {
319
269
  label_to_span(kTLS13LabelExporter)) ||
320
270
  !ssl_log_secret(ssl, "EXPORTER_SECRET",
321
271
  MakeConstSpan(ssl->s3->exporter_secret,
322
- ssl->s3->exporter_secret_len)) ||
323
- !set_quic_secrets(hs, ssl_encryption_application,
324
- hs->client_traffic_secret_0(),
325
- hs->server_traffic_secret_0())) {
272
+ ssl->s3->exporter_secret_len))) {
326
273
  return false;
327
274
  }
328
275
 
@@ -341,11 +288,12 @@ bool tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction) {
341
288
  ssl->s3->write_traffic_secret_len);
342
289
  }
343
290
 
344
- const EVP_MD *digest = ssl_session_get_digest(SSL_get_session(ssl));
291
+ const SSL_SESSION *session = SSL_get_session(ssl);
292
+ const EVP_MD *digest = ssl_session_get_digest(session);
345
293
  return hkdf_expand_label(secret, digest, secret,
346
294
  label_to_span(kTLS13LabelApplicationTraffic), {}) &&
347
295
  tls13_set_traffic_key(ssl, ssl_encryption_application, direction,
348
- secret);
296
+ session, secret);
349
297
  }
350
298
 
351
299
  static const char kTLS13LabelResumption[] = "res master";
@@ -127,7 +127,10 @@ static bool add_new_session_tickets(SSL_HANDSHAKE *hs, bool *out_sent_tickets) {
127
127
  return false;
128
128
  }
129
129
  session->ticket_age_add_valid = true;
130
- if (ssl->enable_early_data) {
130
+ bool enable_early_data =
131
+ ssl->enable_early_data &&
132
+ (!ssl->quic_method || !ssl->config->quic_early_data_context.empty());
133
+ if (enable_early_data) {
131
134
  // QUIC does not use the max_early_data_size parameter and always sets it
132
135
  // to a fixed value. See draft-ietf-quic-tls-22, section 4.5.
133
136
  session->ticket_max_early_data =
@@ -152,7 +155,7 @@ static bool add_new_session_tickets(SSL_HANDSHAKE *hs, bool *out_sent_tickets) {
152
155
  return false;
153
156
  }
154
157
 
155
- if (ssl->enable_early_data) {
158
+ if (enable_early_data) {
156
159
  CBB early_data;
157
160
  if (!CBB_add_u16(&extensions, TLSEXT_TYPE_early_data) ||
158
161
  !CBB_add_u16_length_prefixed(&extensions, &early_data) ||
@@ -309,6 +312,23 @@ static enum ssl_ticket_aead_result_t select_session(
309
312
  return ssl_ticket_aead_success;
310
313
  }
311
314
 
315
+ static bool quic_ticket_compatible(const SSL_SESSION *session,
316
+ const SSL_CONFIG *config) {
317
+ if (!session->is_quic) {
318
+ return true;
319
+ }
320
+
321
+ if (session->quic_early_data_context.empty() ||
322
+ config->quic_early_data_context.size() !=
323
+ session->quic_early_data_context.size() ||
324
+ CRYPTO_memcmp(config->quic_early_data_context.data(),
325
+ session->quic_early_data_context.data(),
326
+ session->quic_early_data_context.size()) != 0) {
327
+ return false;
328
+ }
329
+ return true;
330
+ }
331
+
312
332
  static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
313
333
  SSL *const ssl = hs->ssl;
314
334
  SSLMessage msg;
@@ -352,6 +372,10 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
352
372
  return ssl_hs_error;
353
373
  }
354
374
 
375
+ // |ssl_session_is_resumable| forbids cross-cipher resumptions even if the
376
+ // PRF hashes match.
377
+ assert(hs->new_cipher == session->cipher);
378
+
355
379
  if (!ssl->enable_early_data) {
356
380
  ssl->s3->early_data_reason = ssl_early_data_disabled;
357
381
  } else if (session->ticket_max_early_data == 0) {
@@ -370,6 +394,8 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
370
394
  } else if (ssl->s3->ticket_age_skew < -kMaxTicketAgeSkewSeconds ||
371
395
  kMaxTicketAgeSkewSeconds < ssl->s3->ticket_age_skew) {
372
396
  ssl->s3->early_data_reason = ssl_early_data_ticket_age_skew;
397
+ } else if (!quic_ticket_compatible(session.get(), hs->config)) {
398
+ ssl->s3->early_data_reason = ssl_early_data_quic_parameter_mismatch;
373
399
  } else {
374
400
  ssl->s3->early_data_reason = ssl_early_data_accepted;
375
401
  ssl->s3->early_data_accepted = true;
@@ -558,6 +584,13 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
558
584
  return ssl_hs_error;
559
585
  }
560
586
 
587
+ // ClientHello should be the end of the flight.
588
+ if (ssl->method->has_unprocessed_handshake_data(ssl)) {
589
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
590
+ OPENSSL_PUT_ERROR(SSL, SSL_R_EXCESS_HANDSHAKE_DATA);
591
+ return ssl_hs_error;
592
+ }
593
+
561
594
  ssl->method->next_message(ssl);
562
595
  hs->tls13_state = state13_send_server_hello;
563
596
  return ssl_hs_ok;
@@ -593,6 +626,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
593
626
  // Derive and enable the handshake traffic secrets.
594
627
  if (!tls13_derive_handshake_secrets(hs) ||
595
628
  !tls13_set_traffic_key(ssl, ssl_encryption_handshake, evp_aead_seal,
629
+ hs->new_session.get(),
596
630
  hs->server_handshake_secret())) {
597
631
  return ssl_hs_error;
598
632
  }
@@ -627,7 +661,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
627
661
  !CBB_add_u16_length_prefixed(&cert_request_extensions,
628
662
  &sigalg_contents) ||
629
663
  !CBB_add_u16_length_prefixed(&sigalg_contents, &sigalgs_cbb) ||
630
- !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb)) {
664
+ !tls12_add_verify_sigalgs(hs, &sigalgs_cbb)) {
631
665
  return ssl_hs_error;
632
666
  }
633
667
 
@@ -693,24 +727,19 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
693
727
  hs, MakeConstSpan(kZeroes, hs->transcript.DigestLen())) ||
694
728
  !tls13_derive_application_secrets(hs) ||
695
729
  !tls13_set_traffic_key(ssl, ssl_encryption_application, evp_aead_seal,
730
+ hs->new_session.get(),
696
731
  hs->server_traffic_secret_0())) {
697
732
  return ssl_hs_error;
698
733
  }
699
734
 
700
- if (ssl->s3->early_data_accepted) {
701
- // We defer releasing the early traffic secret to QUIC to this point. First,
702
- // the early traffic secret is derived before ECDHE, but ECDHE may later
703
- // reject 0-RTT. We only release the secret after 0-RTT is fully resolved.
704
- //
705
- // Second, 0-RTT data is acknowledged with 1-RTT keys. Both are derived as
706
- // part of the ServerHello flight, but future TLS extensions may insert an
707
- // asynchronous point in the middle of this flight. We defer releasing the
708
- // 0-RTT keys to ensure the QUIC implementation never installs read keys
709
- // without the write keys to send the corresponding ACKs.
710
- if (!tls13_set_early_secret_for_quic(hs)) {
711
- return ssl_hs_error;
712
- }
735
+ hs->tls13_state = state13_send_half_rtt_ticket;
736
+ return hs->handback ? ssl_hs_handback : ssl_hs_ok;
737
+ }
713
738
 
739
+ static enum ssl_hs_wait_t do_send_half_rtt_ticket(SSL_HANDSHAKE *hs) {
740
+ SSL *const ssl = hs->ssl;
741
+
742
+ if (ssl->s3->early_data_accepted) {
714
743
  // If accepting 0-RTT, we send tickets half-RTT. This gets the tickets on
715
744
  // the wire sooner and also avoids triggering a write on |SSL_read| when
716
745
  // processing the client Finished. This requires computing the client
@@ -759,9 +788,8 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
759
788
  static enum ssl_hs_wait_t do_read_second_client_flight(SSL_HANDSHAKE *hs) {
760
789
  SSL *const ssl = hs->ssl;
761
790
  if (ssl->s3->early_data_accepted) {
762
- // QUIC never receives handshake messages under 0-RTT keys.
763
- if (ssl->quic_method == nullptr &&
764
- !tls13_set_traffic_key(ssl, ssl_encryption_early_data, evp_aead_open,
791
+ if (!tls13_set_traffic_key(ssl, ssl_encryption_early_data, evp_aead_open,
792
+ hs->new_session.get(),
765
793
  hs->early_traffic_secret())) {
766
794
  return ssl_hs_error;
767
795
  }
@@ -775,6 +803,7 @@ static enum ssl_hs_wait_t do_read_second_client_flight(SSL_HANDSHAKE *hs) {
775
803
  // return.
776
804
  if (ssl->quic_method != nullptr) {
777
805
  if (!tls13_set_traffic_key(ssl, ssl_encryption_handshake, evp_aead_open,
806
+ hs->new_session.get(),
778
807
  hs->client_handshake_secret())) {
779
808
  return ssl_hs_error;
780
809
  }
@@ -807,12 +836,10 @@ static enum ssl_hs_wait_t do_process_end_of_early_data(SSL_HANDSHAKE *hs) {
807
836
  ssl->method->next_message(ssl);
808
837
  }
809
838
  if (!tls13_set_traffic_key(ssl, ssl_encryption_handshake, evp_aead_open,
839
+ hs->new_session.get(),
810
840
  hs->client_handshake_secret())) {
811
841
  return ssl_hs_error;
812
842
  }
813
- if (hs->handback) {
814
- return ssl_hs_handback;
815
- }
816
843
  hs->tls13_state = state13_read_client_certificate;
817
844
  return ssl_hs_ok;
818
845
  }
@@ -920,6 +947,7 @@ static enum ssl_hs_wait_t do_read_client_finished(SSL_HANDSHAKE *hs) {
920
947
  !tls13_process_finished(hs, msg, ssl->s3->early_data_accepted) ||
921
948
  // evp_aead_seal keys have already been switched.
922
949
  !tls13_set_traffic_key(ssl, ssl_encryption_application, evp_aead_open,
950
+ hs->new_session.get(),
923
951
  hs->client_traffic_secret_0())) {
924
952
  return ssl_hs_error;
925
953
  }
@@ -986,6 +1014,9 @@ enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs) {
986
1014
  case state13_send_server_finished:
987
1015
  ret = do_send_server_finished(hs);
988
1016
  break;
1017
+ case state13_send_half_rtt_ticket:
1018
+ ret = do_send_half_rtt_ticket(hs);
1019
+ break;
989
1020
  case state13_read_second_client_flight:
990
1021
  ret = do_read_second_client_flight(hs);
991
1022
  break;
@@ -1040,6 +1071,8 @@ const char *tls13_server_handshake_state(SSL_HANDSHAKE *hs) {
1040
1071
  return "TLS 1.3 server send_server_hello";
1041
1072
  case state13_send_server_certificate_verify:
1042
1073
  return "TLS 1.3 server send_server_certificate_verify";
1074
+ case state13_send_half_rtt_ticket:
1075
+ return "TLS 1.3 server send_half_rtt_ticket";
1043
1076
  case state13_send_server_finished:
1044
1077
  return "TLS 1.3 server send_server_finished";
1045
1078
  case state13_read_second_client_flight:
@@ -67,62 +67,100 @@
67
67
 
68
68
  BSSL_NAMESPACE_BEGIN
69
69
 
70
- static void ssl3_on_handshake_complete(SSL *ssl) {
70
+ static void tls_on_handshake_complete(SSL *ssl) {
71
71
  // The handshake should have released its final message.
72
72
  assert(!ssl->s3->has_message);
73
73
 
74
74
  // During the handshake, |hs_buf| is retained. Release if it there is no
75
- // excess in it. There may be excess left if there server sent Finished and
76
- // HelloRequest in the same record.
77
- //
78
- // TODO(davidben): SChannel does not support this. Reject this case.
75
+ // excess in it. There should not be any excess because the handshake logic
76
+ // rejects unprocessed data after each Finished message. Note this means we do
77
+ // not allow a TLS 1.2 HelloRequest to be packed into the same record as
78
+ // Finished. (Schannel also rejects this.)
79
+ assert(!ssl->s3->hs_buf || ssl->s3->hs_buf->length == 0);
79
80
  if (ssl->s3->hs_buf && ssl->s3->hs_buf->length == 0) {
80
81
  ssl->s3->hs_buf.reset();
81
82
  }
82
83
  }
83
84
 
84
- static bool ssl3_set_read_state(SSL *ssl, UniquePtr<SSLAEADContext> aead_ctx) {
85
+ static bool tls_set_read_state(SSL *ssl, ssl_encryption_level_t level,
86
+ UniquePtr<SSLAEADContext> aead_ctx,
87
+ Span<const uint8_t> secret_for_quic) {
85
88
  // Cipher changes are forbidden if the current epoch has leftover data.
86
89
  if (tls_has_unprocessed_handshake_data(ssl)) {
87
- OPENSSL_PUT_ERROR(SSL, SSL_R_BUFFERED_MESSAGES_ON_CIPHER_CHANGE);
90
+ OPENSSL_PUT_ERROR(SSL, SSL_R_EXCESS_HANDSHAKE_DATA);
88
91
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
89
92
  return false;
90
93
  }
91
94
 
95
+ if (ssl->quic_method != nullptr) {
96
+ if (!ssl->quic_method->set_read_secret(ssl, level, aead_ctx->cipher(),
97
+ secret_for_quic.data(),
98
+ secret_for_quic.size())) {
99
+ return false;
100
+ }
101
+
102
+ // QUIC only uses |ssl| for handshake messages, which never use early data
103
+ // keys, so we return without installing anything. This avoids needing to
104
+ // have two secrets active at once in 0-RTT.
105
+ if (level == ssl_encryption_early_data) {
106
+ return true;
107
+ }
108
+ }
109
+
92
110
  OPENSSL_memset(ssl->s3->read_sequence, 0, sizeof(ssl->s3->read_sequence));
93
111
  ssl->s3->aead_read_ctx = std::move(aead_ctx);
112
+ ssl->s3->read_level = level;
94
113
  return true;
95
114
  }
96
115
 
97
- static bool ssl3_set_write_state(SSL *ssl, UniquePtr<SSLAEADContext> aead_ctx) {
116
+ static bool tls_set_write_state(SSL *ssl, ssl_encryption_level_t level,
117
+ UniquePtr<SSLAEADContext> aead_ctx,
118
+ Span<const uint8_t> secret_for_quic) {
98
119
  if (!tls_flush_pending_hs_data(ssl)) {
99
120
  return false;
100
121
  }
101
122
 
123
+ if (ssl->quic_method != nullptr) {
124
+ if (!ssl->quic_method->set_write_secret(ssl, level, aead_ctx->cipher(),
125
+ secret_for_quic.data(),
126
+ secret_for_quic.size())) {
127
+ return false;
128
+ }
129
+
130
+ // QUIC only uses |ssl| for handshake messages, which never use early data
131
+ // keys, so we return without installing anything. This avoids needing to
132
+ // have two secrets active at once in 0-RTT.
133
+ if (level == ssl_encryption_early_data) {
134
+ return true;
135
+ }
136
+ }
137
+
102
138
  OPENSSL_memset(ssl->s3->write_sequence, 0, sizeof(ssl->s3->write_sequence));
103
139
  ssl->s3->aead_write_ctx = std::move(aead_ctx);
140
+ ssl->s3->write_level = level;
104
141
  return true;
105
142
  }
106
143
 
107
144
  static const SSL_PROTOCOL_METHOD kTLSProtocolMethod = {
108
145
  false /* is_dtls */,
109
- ssl3_new,
110
- ssl3_free,
111
- ssl3_get_message,
112
- ssl3_next_message,
113
- ssl3_open_handshake,
114
- ssl3_open_change_cipher_spec,
115
- ssl3_open_app_data,
116
- ssl3_write_app_data,
117
- ssl3_dispatch_alert,
118
- ssl3_init_message,
119
- ssl3_finish_message,
120
- ssl3_add_message,
121
- ssl3_add_change_cipher_spec,
122
- ssl3_flush_flight,
123
- ssl3_on_handshake_complete,
124
- ssl3_set_read_state,
125
- ssl3_set_write_state,
146
+ tls_new,
147
+ tls_free,
148
+ tls_get_message,
149
+ tls_next_message,
150
+ tls_has_unprocessed_handshake_data,
151
+ tls_open_handshake,
152
+ tls_open_change_cipher_spec,
153
+ tls_open_app_data,
154
+ tls_write_app_data,
155
+ tls_dispatch_alert,
156
+ tls_init_message,
157
+ tls_finish_message,
158
+ tls_add_message,
159
+ tls_add_change_cipher_spec,
160
+ tls_flush_flight,
161
+ tls_on_handshake_complete,
162
+ tls_set_read_state,
163
+ tls_set_write_state,
126
164
  };
127
165
 
128
166
  static bool ssl_noop_x509_check_client_CA_names(