grpc 1.28.0 → 1.30.0

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 (497) 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 +22 -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 +203 -236
  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/client_auth_filter.cc +1 -2
  293. data/src/core/lib/slice/slice_intern.cc +2 -3
  294. data/src/core/lib/slice/slice_internal.h +14 -0
  295. data/src/core/lib/slice/slice_utils.h +9 -0
  296. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  297. data/src/core/lib/surface/call.cc +2 -3
  298. data/src/core/lib/surface/call_log_batch.cc +50 -58
  299. data/src/core/lib/surface/channel.cc +53 -31
  300. data/src/core/lib/surface/channel.h +35 -4
  301. data/src/core/lib/surface/channel_ping.cc +2 -3
  302. data/src/core/lib/surface/completion_queue.cc +33 -33
  303. data/src/core/lib/surface/event_string.cc +18 -25
  304. data/src/core/lib/surface/event_string.h +3 -1
  305. data/src/core/lib/surface/init_secure.cc +1 -4
  306. data/src/core/lib/surface/server.cc +570 -369
  307. data/src/core/lib/surface/server.h +32 -0
  308. data/src/core/lib/surface/version.cc +2 -2
  309. data/src/core/lib/transport/byte_stream.h +7 -2
  310. data/src/core/lib/transport/connectivity_state.cc +7 -6
  311. data/src/core/lib/transport/connectivity_state.h +5 -3
  312. data/src/core/lib/transport/metadata.cc +3 -3
  313. data/src/core/lib/transport/metadata_batch.h +2 -3
  314. data/src/core/lib/transport/static_metadata.h +1 -1
  315. data/src/core/lib/transport/status_conversion.cc +6 -14
  316. data/src/core/lib/transport/transport.cc +2 -3
  317. data/src/core/lib/transport/transport.h +3 -2
  318. data/src/core/lib/transport/transport_op_string.cc +61 -102
  319. data/src/core/lib/uri/uri_parser.h +2 -3
  320. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  321. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  324. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  326. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  327. data/src/core/tsi/fake_transport_security.cc +10 -15
  328. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  329. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  330. data/src/core/tsi/ssl_transport_security.cc +52 -39
  331. data/src/core/tsi/ssl_transport_security.h +8 -8
  332. data/src/core/tsi/ssl_types.h +0 -2
  333. data/src/core/tsi/transport_security.h +6 -9
  334. data/src/core/tsi/transport_security_grpc.h +2 -3
  335. data/src/core/tsi/transport_security_interface.h +3 -3
  336. data/src/ruby/ext/grpc/rb_call.c +9 -1
  337. data/src/ruby/lib/grpc/errors.rb +103 -42
  338. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  339. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  340. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  341. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  342. data/src/ruby/lib/grpc/structs.rb +1 -1
  343. data/src/ruby/lib/grpc/version.rb +1 -1
  344. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  345. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  346. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  347. data/src/ruby/spec/debug_message_spec.rb +134 -0
  348. data/src/ruby/spec/generic/service_spec.rb +2 -0
  349. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  350. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  351. data/src/ruby/spec/testdata/ca.pem +18 -13
  352. data/src/ruby/spec/testdata/client.key +26 -14
  353. data/src/ruby/spec/testdata/client.pem +18 -12
  354. data/src/ruby/spec/testdata/server1.key +26 -14
  355. data/src/ruby/spec/testdata/server1.pem +20 -14
  356. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  357. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  358. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  359. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  360. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  361. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  362. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  363. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  364. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  365. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  366. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  367. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  383. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  384. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  385. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  386. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  387. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  388. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  391. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  392. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  393. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  394. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  395. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  401. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  437. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  438. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  439. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  440. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  442. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  449. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  451. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  453. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  455. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  456. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  458. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  461. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  464. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  465. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  466. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  467. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  468. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  469. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  470. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  471. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  473. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  474. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  475. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  476. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  477. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  478. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  479. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  480. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  481. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  482. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  483. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  484. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  486. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  487. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  488. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  489. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  490. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  491. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  492. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  493. metadata +111 -37
  494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  495. data/src/core/lib/gprpp/string_view.h +0 -60
  496. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -185,7 +185,7 @@ SSL3_STATE::SSL3_STATE()
185
185
 
186
186
  SSL3_STATE::~SSL3_STATE() {}
187
187
 
188
- bool ssl3_new(SSL *ssl) {
188
+ bool tls_new(SSL *ssl) {
189
189
  UniquePtr<SSL3_STATE> s3 = MakeUnique<SSL3_STATE>();
190
190
  if (!s3) {
191
191
  return false;
@@ -209,7 +209,7 @@ bool ssl3_new(SSL *ssl) {
209
209
  return true;
210
210
  }
211
211
 
212
- void ssl3_free(SSL *ssl) {
212
+ void tls_free(SSL *ssl) {
213
213
  if (ssl == NULL || ssl->s3 == NULL) {
214
214
  return;
215
215
  }
@@ -124,10 +124,10 @@
124
124
 
125
125
  BSSL_NAMESPACE_BEGIN
126
126
 
127
- static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len);
127
+ static int do_tls_write(SSL *ssl, int type, const uint8_t *in, unsigned len);
128
128
 
129
- int ssl3_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *in,
130
- int len) {
129
+ int tls_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *in,
130
+ int len) {
131
131
  assert(ssl_can_write(ssl));
132
132
  assert(!ssl->s3->aead_write_ctx->is_null_cipher());
133
133
 
@@ -147,7 +147,7 @@ int ssl3_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *in,
147
147
  // Ensure that if we end up with a smaller value of data to write out than
148
148
  // the the original len from a write which didn't complete for non-blocking
149
149
  // I/O and also somehow ended up avoiding the check for this in
150
- // ssl3_write_pending/SSL_R_BAD_WRITE_RETRY as it must never be possible to
150
+ // tls_write_pending/SSL_R_BAD_WRITE_RETRY as it must never be possible to
151
151
  // end up with (len-tot) as a large number that will then promptly send
152
152
  // beyond the end of the users buffer ... so we trap and report the error in
153
153
  // a way the user will notice.
@@ -182,7 +182,7 @@ int ssl3_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *in,
182
182
  nw = n;
183
183
  }
184
184
 
185
- int ret = do_ssl3_write(ssl, SSL3_RT_APPLICATION_DATA, &in[tot], nw);
185
+ int ret = do_tls_write(ssl, SSL3_RT_APPLICATION_DATA, &in[tot], nw);
186
186
  if (ret <= 0) {
187
187
  ssl->s3->wnum = tot;
188
188
  return ret;
@@ -201,8 +201,8 @@ int ssl3_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *in,
201
201
  }
202
202
  }
203
203
 
204
- static int ssl3_write_pending(SSL *ssl, int type, const uint8_t *in,
205
- unsigned int len) {
204
+ static int tls_write_pending(SSL *ssl, int type, const uint8_t *in,
205
+ unsigned int len) {
206
206
  if (ssl->s3->wpend_tot > (int)len ||
207
207
  (!(ssl->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER) &&
208
208
  ssl->s3->wpend_buf != in) ||
@@ -219,11 +219,11 @@ static int ssl3_write_pending(SSL *ssl, int type, const uint8_t *in,
219
219
  return ssl->s3->wpend_ret;
220
220
  }
221
221
 
222
- // do_ssl3_write writes an SSL record of the given type.
223
- static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
222
+ // do_tls_write writes an SSL record of the given type.
223
+ static int do_tls_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
224
224
  // If there is still data from the previous record, flush it.
225
225
  if (ssl->s3->wpend_pending) {
226
- return ssl3_write_pending(ssl, type, in, len);
226
+ return tls_write_pending(ssl, type, in, len);
227
227
  }
228
228
 
229
229
  SSLBuffer *buf = &ssl->s3->write_buffer;
@@ -287,7 +287,7 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
287
287
  // acknowledgments.
288
288
  ssl->s3->key_update_pending = false;
289
289
 
290
- // Memorize arguments so that ssl3_write_pending can detect bad write retries
290
+ // Memorize arguments so that tls_write_pending can detect bad write retries
291
291
  // later.
292
292
  ssl->s3->wpend_tot = len;
293
293
  ssl->s3->wpend_buf = in;
@@ -296,12 +296,12 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
296
296
  ssl->s3->wpend_pending = true;
297
297
 
298
298
  // We now just need to write the buffer.
299
- return ssl3_write_pending(ssl, type, in, len);
299
+ return tls_write_pending(ssl, type, in, len);
300
300
  }
301
301
 
302
- ssl_open_record_t ssl3_open_app_data(SSL *ssl, Span<uint8_t> *out,
303
- size_t *out_consumed, uint8_t *out_alert,
304
- Span<uint8_t> in) {
302
+ ssl_open_record_t tls_open_app_data(SSL *ssl, Span<uint8_t> *out,
303
+ size_t *out_consumed, uint8_t *out_alert,
304
+ Span<uint8_t> in) {
305
305
  assert(ssl_can_read(ssl));
306
306
  assert(!ssl->s3->aead_read_ctx->is_null_cipher());
307
307
 
@@ -316,7 +316,7 @@ ssl_open_record_t ssl3_open_app_data(SSL *ssl, Span *out,
316
316
 
317
317
  if (type == SSL3_RT_HANDSHAKE) {
318
318
  // Post-handshake data prior to TLS 1.3 is always renegotiation, which we
319
- // never accept as a server. Otherwise |ssl3_get_message| will send
319
+ // never accept as a server. Otherwise |tls_get_message| will send
320
320
  // |SSL_R_EXCESSIVE_MESSAGE_SIZE|.
321
321
  if (ssl->server && ssl_protocol_version(ssl) < TLS1_3_VERSION) {
322
322
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION);
@@ -355,9 +355,9 @@ ssl_open_record_t ssl3_open_app_data(SSL *ssl, Span *out,
355
355
  return ssl_open_record_success;
356
356
  }
357
357
 
358
- ssl_open_record_t ssl3_open_change_cipher_spec(SSL *ssl, size_t *out_consumed,
359
- uint8_t *out_alert,
360
- Span<uint8_t> in) {
358
+ ssl_open_record_t tls_open_change_cipher_spec(SSL *ssl, size_t *out_consumed,
359
+ uint8_t *out_alert,
360
+ Span<uint8_t> in) {
361
361
  uint8_t type;
362
362
  Span<uint8_t> body;
363
363
  auto ret = tls_open_record(ssl, &type, &body, out_consumed, out_alert, in);
@@ -426,7 +426,7 @@ int ssl_send_alert_impl(SSL *ssl, int level, int desc) {
426
426
  return -1;
427
427
  }
428
428
 
429
- int ssl3_dispatch_alert(SSL *ssl) {
429
+ int tls_dispatch_alert(SSL *ssl) {
430
430
  if (ssl->quic_method) {
431
431
  if (!ssl->quic_method->send_alert(ssl, ssl->s3->write_level,
432
432
  ssl->s3->send_alert[1])) {
@@ -434,7 +434,7 @@ int ssl3_dispatch_alert(SSL *ssl) {
434
434
  return 0;
435
435
  }
436
436
  } else {
437
- int ret = do_ssl3_write(ssl, SSL3_RT_ALERT, &ssl->s3->send_alert[0], 2);
437
+ int ret = do_tls_write(ssl, SSL3_RT_ALERT, &ssl->s3->send_alert[0], 2);
438
438
  if (ret <= 0) {
439
439
  return ret;
440
440
  }
@@ -129,6 +129,8 @@ BSSL_NAMESPACE_BEGIN
129
129
  // ticketMaxEarlyData [24] INTEGER OPTIONAL,
130
130
  // authTimeout [25] INTEGER OPTIONAL, -- defaults to timeout
131
131
  // earlyALPN [26] OCTET STRING OPTIONAL,
132
+ // isQuic [27] BOOLEAN OPTIONAL,
133
+ // quicEarlyDataHash [28] OCTET STRING OPTIONAL,
132
134
  // }
133
135
  //
134
136
  // Note: historically this serialization has included other optional
@@ -188,6 +190,10 @@ static const unsigned kAuthTimeoutTag =
188
190
  CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 25;
189
191
  static const unsigned kEarlyALPNTag =
190
192
  CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 26;
193
+ static const unsigned kIsQuicTag =
194
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 27;
195
+ static const unsigned kQuicEarlyDataHashTag =
196
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 28;
191
197
 
192
198
  static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
193
199
  int for_ticket) {
@@ -388,6 +394,23 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
388
394
  }
389
395
  }
390
396
 
397
+ if (in->is_quic) {
398
+ if (!CBB_add_asn1(&session, &child, kIsQuicTag) ||
399
+ !CBB_add_asn1_bool(&child, true)) {
400
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
401
+ return 0;
402
+ }
403
+ }
404
+
405
+ if (!in->quic_early_data_hash.empty()) {
406
+ if (!CBB_add_asn1(&session, &child, kQuicEarlyDataHashTag) ||
407
+ !CBB_add_asn1_octet_string(&child, in->quic_early_data_hash.data(),
408
+ in->quic_early_data_hash.size())) {
409
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
410
+ return 0;
411
+ }
412
+ }
413
+
391
414
  return CBB_flush(cbb);
392
415
  }
393
416
 
@@ -718,6 +741,7 @@ UniquePtr SSL_SESSION_parse(CBS *cbs,
718
741
 
719
742
  ret->is_server = is_server;
720
743
 
744
+ int is_quic;
721
745
  if (!SSL_SESSION_parse_u16(&session, &ret->peer_signature_algorithm,
722
746
  kPeerSignatureAlgorithmTag, 0) ||
723
747
  !SSL_SESSION_parse_u32(&session, &ret->ticket_max_early_data,
@@ -726,10 +750,15 @@ UniquePtr SSL_SESSION_parse(CBS *cbs,
726
750
  ret->timeout) ||
727
751
  !SSL_SESSION_parse_octet_string(&session, &ret->early_alpn,
728
752
  kEarlyALPNTag) ||
753
+ !CBS_get_optional_asn1_bool(&session, &is_quic, kIsQuicTag,
754
+ /*default_value=*/false) ||
755
+ !SSL_SESSION_parse_octet_string(&session, &ret->quic_early_data_hash,
756
+ kQuicEarlyDataHashTag) ||
729
757
  CBS_len(&session) != 0) {
730
758
  OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
731
759
  return nullptr;
732
760
  }
761
+ ret->is_quic = is_quic;
733
762
 
734
763
  if (!x509_method->session_cache_objects(ret.get())) {
735
764
  OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
@@ -896,6 +896,10 @@ int SSL_CTX_set_chain_and_key(SSL_CTX *ctx, CRYPTO_BUFFER *const *certs,
896
896
  privkey_method);
897
897
  }
898
898
 
899
+ const STACK_OF(CRYPTO_BUFFER)* SSL_CTX_get0_chain(const SSL_CTX *ctx) {
900
+ return ctx->cert->chain.get();
901
+ }
902
+
899
903
  int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, size_t der_len,
900
904
  const uint8_t *der) {
901
905
  UniquePtr<CRYPTO_BUFFER> buffer(CRYPTO_BUFFER_new(der, der_len, NULL));
@@ -564,7 +564,6 @@ ssl_ctx_st::ssl_ctx_st(const SSL_METHOD *ssl_method)
564
564
  channel_id_enabled(false),
565
565
  grease_enabled(false),
566
566
  allow_unknown_alpn_protos(false),
567
- ed25519_enabled(false),
568
567
  false_start_allowed_without_alpn(false),
569
568
  ignore_tls13_downgrade(false),
570
569
  handoff(false),
@@ -1249,6 +1248,12 @@ void SSL_get_peer_quic_transport_params(const SSL *ssl,
1249
1248
  *out_params_len = ssl->s3->peer_quic_transport_params.size();
1250
1249
  }
1251
1250
 
1251
+ int SSL_set_quic_early_data_context(SSL *ssl, const uint8_t *context,
1252
+ size_t context_len) {
1253
+ return ssl->config && ssl->config->quic_early_data_context.CopyFrom(
1254
+ MakeConstSpan(context, context_len));
1255
+ }
1256
+
1252
1257
  void SSL_CTX_set_early_data_enabled(SSL_CTX *ctx, int enabled) {
1253
1258
  ctx->enable_early_data = !!enabled;
1254
1259
  }
@@ -791,7 +791,8 @@ int SSL_CTX_set1_sigalgs_list(SSL_CTX *ctx, const char *str) {
791
791
 
792
792
  if (!SSL_CTX_set_signing_algorithm_prefs(ctx, sigalgs.data(),
793
793
  sigalgs.size()) ||
794
- !ctx->verify_sigalgs.CopyFrom(sigalgs)) {
794
+ !SSL_CTX_set_verify_algorithm_prefs(ctx, sigalgs.data(),
795
+ sigalgs.size())) {
795
796
  return 0;
796
797
  }
797
798
 
@@ -811,7 +812,7 @@ int SSL_set1_sigalgs_list(SSL *ssl, const char *str) {
811
812
  }
812
813
 
813
814
  if (!SSL_set_signing_algorithm_prefs(ssl, sigalgs.data(), sigalgs.size()) ||
814
- !ssl->config->verify_sigalgs.CopyFrom(sigalgs)) {
815
+ !SSL_set_verify_algorithm_prefs(ssl, sigalgs.data(), sigalgs.size())) {
815
816
  return 0;
816
817
  }
817
818
 
@@ -822,3 +823,13 @@ int SSL_CTX_set_verify_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs,
822
823
  size_t num_prefs) {
823
824
  return ctx->verify_sigalgs.CopyFrom(MakeConstSpan(prefs, num_prefs));
824
825
  }
826
+
827
+ int SSL_set_verify_algorithm_prefs(SSL *ssl, const uint16_t *prefs,
828
+ size_t num_prefs) {
829
+ if (!ssl->config) {
830
+ OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
831
+ return 0;
832
+ }
833
+
834
+ return ssl->config->verify_sigalgs.CopyFrom(MakeConstSpan(prefs, num_prefs));
835
+ }
@@ -197,6 +197,7 @@ UniquePtr SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
197
197
 
198
198
  new_session->is_server = session->is_server;
199
199
  new_session->ssl_version = session->ssl_version;
200
+ new_session->is_quic = session->is_quic;
200
201
  new_session->sid_ctx_length = session->sid_ctx_length;
201
202
  OPENSSL_memcpy(new_session->sid_ctx, session->sid_ctx, session->sid_ctx_length);
202
203
 
@@ -267,6 +268,11 @@ UniquePtr SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
267
268
  if (!new_session->early_alpn.CopyFrom(session->early_alpn)) {
268
269
  return nullptr;
269
270
  }
271
+
272
+ if (!new_session->quic_early_data_hash.CopyFrom(
273
+ session->quic_early_data_hash)) {
274
+ return nullptr;
275
+ }
270
276
  }
271
277
 
272
278
  // Copy the ticket.
@@ -343,6 +349,25 @@ const EVP_MD *ssl_session_get_digest(const SSL_SESSION *session) {
343
349
  session->cipher);
344
350
  }
345
351
 
352
+ bool compute_quic_early_data_hash(const SSL_CONFIG *config,
353
+ uint8_t hash_out[SHA256_DIGEST_LENGTH]) {
354
+ ScopedEVP_MD_CTX hash_ctx;
355
+ uint32_t transport_param_len = config->quic_transport_params.size();
356
+ uint32_t context_len = config->quic_early_data_context.size();
357
+ if (!EVP_DigestInit(hash_ctx.get(), EVP_sha256()) ||
358
+ !EVP_DigestUpdate(hash_ctx.get(), &transport_param_len,
359
+ sizeof(transport_param_len)) ||
360
+ !EVP_DigestUpdate(hash_ctx.get(), config->quic_transport_params.data(),
361
+ config->quic_transport_params.size()) ||
362
+ !EVP_DigestUpdate(hash_ctx.get(), &context_len, sizeof(context_len)) ||
363
+ !EVP_DigestUpdate(hash_ctx.get(), config->quic_early_data_context.data(),
364
+ config->quic_early_data_context.size()) ||
365
+ !EVP_DigestFinal(hash_ctx.get(), hash_out, nullptr)) {
366
+ return false;
367
+ }
368
+ return true;
369
+ }
370
+
346
371
  int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server) {
347
372
  SSL *const ssl = hs->ssl;
348
373
  if (ssl->mode & SSL_MODE_NO_SESSION_CREATION) {
@@ -357,6 +382,14 @@ int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server) {
357
382
 
358
383
  session->is_server = is_server;
359
384
  session->ssl_version = ssl->version;
385
+ session->is_quic = ssl->quic_method != nullptr;
386
+ if (is_server && ssl->enable_early_data && session->is_quic) {
387
+ if (!session->quic_early_data_hash.Init(SHA256_DIGEST_LENGTH) ||
388
+ !compute_quic_early_data_hash(hs->config,
389
+ session->quic_early_data_hash.data())) {
390
+ return 0;
391
+ }
392
+ }
360
393
 
361
394
  // Fill in the time from the |SSL_CTX|'s clock.
362
395
  struct OPENSSL_timeval now;
@@ -624,10 +657,14 @@ int ssl_session_is_resumable(const SSL_HANDSHAKE *hs,
624
657
  ssl->server == session->is_server &&
625
658
  // The session must not be expired.
626
659
  ssl_session_is_time_valid(ssl, session) &&
627
- /* Only resume if the session's version matches the negotiated
628
- * version. */
660
+ // Only resume if the session's version matches the negotiated
661
+ // version.
629
662
  ssl->version == session->ssl_version &&
630
- // Only resume if the session's cipher matches the negotiated one.
663
+ // Only resume if the session's cipher matches the negotiated one. This
664
+ // is stricter than necessary for TLS 1.3, which allows cross-cipher
665
+ // resumption if the PRF hashes match. We require an exact match for
666
+ // simplicity. If loosening this, the 0-RTT accept logic must be
667
+ // updated to check the cipher.
631
668
  hs->new_cipher == session->cipher &&
632
669
  // If the session contains a client certificate (either the full
633
670
  // certificate or just the hash) then require that the form of the
@@ -635,7 +672,10 @@ int ssl_session_is_resumable(const SSL_HANDSHAKE *hs,
635
672
  ((sk_CRYPTO_BUFFER_num(session->certs.get()) == 0 &&
636
673
  !session->peer_sha256_valid) ||
637
674
  session->peer_sha256_valid ==
638
- hs->config->retain_only_sha256_of_client_certs);
675
+ hs->config->retain_only_sha256_of_client_certs) &&
676
+ // Only resume if the underlying transport protocol hasn't changed.
677
+ // This is to prevent cross-protocol resumption between QUIC and TCP.
678
+ (hs->ssl->quic_method != nullptr) == session->is_quic;
639
679
  }
640
680
 
641
681
  // ssl_lookup_session looks up |session_id| in the session cache and sets
@@ -849,7 +889,8 @@ ssl_session_st::ssl_session_st(const SSL_X509_METHOD *method)
849
889
  peer_sha256_valid(false),
850
890
  not_resumable(false),
851
891
  ticket_age_add_valid(false),
852
- is_server(false) {
892
+ is_server(false),
893
+ is_quic(false) {
853
894
  CRYPTO_new_ex_data(&ex_data);
854
895
  time = ::time(nullptr);
855
896
  }
@@ -1050,6 +1091,24 @@ int SSL_SESSION_early_data_capable(const SSL_SESSION *session) {
1050
1091
  session->ticket_max_early_data != 0;
1051
1092
  }
1052
1093
 
1094
+ SSL_SESSION *SSL_SESSION_copy_without_early_data(SSL_SESSION *session) {
1095
+ if (!SSL_SESSION_early_data_capable(session)) {
1096
+ return UpRef(session).release();
1097
+ }
1098
+
1099
+ bssl::UniquePtr<SSL_SESSION> copy =
1100
+ SSL_SESSION_dup(session, SSL_SESSION_DUP_ALL);
1101
+ if (!copy) {
1102
+ return nullptr;
1103
+ }
1104
+
1105
+ copy->ticket_max_early_data = 0;
1106
+ // Copied sessions are non-resumable until they're completely filled in.
1107
+ copy->not_resumable = session->not_resumable;
1108
+ assert(!SSL_SESSION_early_data_capable(copy.get()));
1109
+ return copy.release();
1110
+ }
1111
+
1053
1112
  SSL_SESSION *SSL_magic_pending_session_ptr(void) {
1054
1113
  return (SSL_SESSION *)&g_pending_session_magic;
1055
1114
  }
@@ -197,6 +197,9 @@ const char *SSL_alert_desc_string_long(int value) {
197
197
  case TLS1_AD_NO_RENEGOTIATION:
198
198
  return "no renegotiation";
199
199
 
200
+ case TLS1_AD_MISSING_EXTENSION:
201
+ return "missing extension";
202
+
200
203
  case TLS1_AD_UNSUPPORTED_EXTENSION:
201
204
  return "unsupported extension";
202
205
 
@@ -218,6 +221,9 @@ const char *SSL_alert_desc_string_long(int value) {
218
221
  case TLS1_AD_CERTIFICATE_REQUIRED:
219
222
  return "certificate required";
220
223
 
224
+ case TLS1_AD_NO_APPLICATION_PROTOCOL:
225
+ return "no application protocol";
226
+
221
227
  default:
222
228
  return "unknown";
223
229
  }
@@ -236,10 +236,14 @@ int tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
236
236
  }
237
237
 
238
238
  if (direction == evp_aead_open) {
239
- return ssl->method->set_read_state(ssl, std::move(aead_ctx));
239
+ return ssl->method->set_read_state(ssl, ssl_encryption_application,
240
+ std::move(aead_ctx),
241
+ /*secret_for_quic=*/{});
240
242
  }
241
243
 
242
- return ssl->method->set_write_state(ssl, std::move(aead_ctx));
244
+ return ssl->method->set_write_state(ssl, ssl_encryption_application,
245
+ std::move(aead_ctx),
246
+ /*secret_for_quic=*/{});
243
247
  }
244
248
 
245
249
  int tls1_change_cipher_state(SSL_HANDSHAKE *hs,
@@ -413,7 +413,6 @@ bool tls1_check_group_id(const SSL_HANDSHAKE *hs, uint16_t group_id) {
413
413
  // algorithms for verifying.
414
414
  static const uint16_t kVerifySignatureAlgorithms[] = {
415
415
  // List our preferred algorithms first.
416
- SSL_SIGN_ED25519,
417
416
  SSL_SIGN_ECDSA_SECP256R1_SHA256,
418
417
  SSL_SIGN_RSA_PSS_RSAE_SHA256,
419
418
  SSL_SIGN_RSA_PKCS1_SHA256,
@@ -455,39 +454,15 @@ static const uint16_t kSignSignatureAlgorithms[] = {
455
454
  SSL_SIGN_RSA_PKCS1_SHA1,
456
455
  };
457
456
 
458
- struct SSLSignatureAlgorithmList {
459
- bool Next(uint16_t *out) {
460
- while (!list.empty()) {
461
- uint16_t sigalg = list[0];
462
- list = list.subspan(1);
463
- if (skip_ed25519 && sigalg == SSL_SIGN_ED25519) {
464
- continue;
465
- }
466
- *out = sigalg;
467
- return true;
468
- }
469
- return false;
457
+ static Span<const uint16_t> tls12_get_verify_sigalgs(const SSL_HANDSHAKE *hs) {
458
+ if (hs->config->verify_sigalgs.empty()) {
459
+ return Span<const uint16_t>(kVerifySignatureAlgorithms);
470
460
  }
471
-
472
- Span<const uint16_t> list;
473
- bool skip_ed25519 = false;
474
- };
475
-
476
- static SSLSignatureAlgorithmList tls12_get_verify_sigalgs(const SSL *ssl) {
477
- SSLSignatureAlgorithmList ret;
478
- if (!ssl->config->verify_sigalgs.empty()) {
479
- ret.list = ssl->config->verify_sigalgs;
480
- } else {
481
- ret.list = kVerifySignatureAlgorithms;
482
- ret.skip_ed25519 = !ssl->ctx->ed25519_enabled;
483
- }
484
- return ret;
461
+ return hs->config->verify_sigalgs;
485
462
  }
486
463
 
487
- bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out) {
488
- SSLSignatureAlgorithmList list = tls12_get_verify_sigalgs(ssl);
489
- uint16_t sigalg;
490
- while (list.Next(&sigalg)) {
464
+ bool tls12_add_verify_sigalgs(const SSL_HANDSHAKE *hs, CBB *out) {
465
+ for (uint16_t sigalg : tls12_get_verify_sigalgs(hs)) {
491
466
  if (!CBB_add_u16(out, sigalg)) {
492
467
  return false;
493
468
  }
@@ -495,11 +470,9 @@ bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out) {
495
470
  return true;
496
471
  }
497
472
 
498
- bool tls12_check_peer_sigalg(const SSL *ssl, uint8_t *out_alert,
473
+ bool tls12_check_peer_sigalg(const SSL_HANDSHAKE *hs, uint8_t *out_alert,
499
474
  uint16_t sigalg) {
500
- SSLSignatureAlgorithmList list = tls12_get_verify_sigalgs(ssl);
501
- uint16_t verify_sigalg;
502
- while (list.Next(&verify_sigalg)) {
475
+ for (uint16_t verify_sigalg : tls12_get_verify_sigalgs(hs)) {
503
476
  if (verify_sigalg == sigalg) {
504
477
  return true;
505
478
  }
@@ -936,7 +909,6 @@ static bool ext_ticket_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
936
909
  // https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1
937
910
 
938
911
  static bool ext_sigalgs_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
939
- SSL *const ssl = hs->ssl;
940
912
  if (hs->max_version < TLS1_2_VERSION) {
941
913
  return true;
942
914
  }
@@ -945,7 +917,7 @@ static bool ext_sigalgs_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
945
917
  if (!CBB_add_u16(out, TLSEXT_TYPE_signature_algorithms) ||
946
918
  !CBB_add_u16_length_prefixed(out, &contents) ||
947
919
  !CBB_add_u16_length_prefixed(&contents, &sigalgs_cbb) ||
948
- !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb) ||
920
+ !tls12_add_verify_sigalgs(hs, &sigalgs_cbb) ||
949
921
  !CBB_flush(out)) {
950
922
  return false;
951
923
  }
@@ -2575,10 +2547,17 @@ static bool ext_token_binding_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2575
2547
 
2576
2548
  static bool ext_quic_transport_params_add_clienthello(SSL_HANDSHAKE *hs,
2577
2549
  CBB *out) {
2578
- if (hs->config->quic_transport_params.empty() ||
2579
- hs->max_version <= TLS1_2_VERSION) {
2550
+ if (hs->config->quic_transport_params.empty() && !hs->ssl->quic_method) {
2580
2551
  return true;
2581
2552
  }
2553
+ if (hs->config->quic_transport_params.empty() || !hs->ssl->quic_method) {
2554
+ // QUIC Transport Parameters must be sent over QUIC, and they must not be
2555
+ // sent over non-QUIC transports. If transport params are set, then
2556
+ // SSL(_CTX)_set_quic_method must also be called.
2557
+ OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED);
2558
+ return false;
2559
+ }
2560
+ assert(hs->min_version > TLS1_2_VERSION);
2582
2561
 
2583
2562
  CBB contents;
2584
2563
  if (!CBB_add_u16(out, TLSEXT_TYPE_quic_transport_parameters) ||
@@ -2596,13 +2575,19 @@ static bool ext_quic_transport_params_parse_serverhello(SSL_HANDSHAKE *hs,
2596
2575
  CBS *contents) {
2597
2576
  SSL *const ssl = hs->ssl;
2598
2577
  if (contents == nullptr) {
2599
- return true;
2578
+ if (!ssl->quic_method) {
2579
+ return true;
2580
+ }
2581
+ assert(ssl->quic_method);
2582
+ *out_alert = SSL_AD_MISSING_EXTENSION;
2583
+ return false;
2600
2584
  }
2601
- // QUIC requires TLS 1.3.
2602
- if (ssl_protocol_version(ssl) < TLS1_3_VERSION) {
2585
+ if (!ssl->quic_method) {
2603
2586
  *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
2604
2587
  return false;
2605
2588
  }
2589
+ // QUIC requires TLS 1.3.
2590
+ assert(ssl_protocol_version(ssl) == TLS1_3_VERSION);
2606
2591
 
2607
2592
  return ssl->s3->peer_quic_transport_params.CopyFrom(*contents);
2608
2593
  }
@@ -2611,21 +2596,34 @@ static bool ext_quic_transport_params_parse_clienthello(SSL_HANDSHAKE *hs,
2611
2596
  uint8_t *out_alert,
2612
2597
  CBS *contents) {
2613
2598
  SSL *const ssl = hs->ssl;
2614
- if (!contents || hs->config->quic_transport_params.empty()) {
2615
- return true;
2599
+ if (!contents) {
2600
+ if (!ssl->quic_method) {
2601
+ if (hs->config->quic_transport_params.empty()) {
2602
+ return true;
2603
+ }
2604
+ // QUIC transport parameters must not be set if |ssl| is not configured
2605
+ // for QUIC.
2606
+ OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED);
2607
+ *out_alert = SSL_AD_INTERNAL_ERROR;
2608
+ }
2609
+ *out_alert = SSL_AD_MISSING_EXTENSION;
2610
+ return false;
2616
2611
  }
2617
- // Ignore the extension before TLS 1.3.
2618
- if (ssl_protocol_version(ssl) < TLS1_3_VERSION) {
2619
- return true;
2612
+ if (!ssl->quic_method) {
2613
+ *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
2614
+ return false;
2620
2615
  }
2621
-
2616
+ assert(ssl_protocol_version(ssl) == TLS1_3_VERSION);
2622
2617
  return ssl->s3->peer_quic_transport_params.CopyFrom(*contents);
2623
2618
  }
2624
2619
 
2625
2620
  static bool ext_quic_transport_params_add_serverhello(SSL_HANDSHAKE *hs,
2626
2621
  CBB *out) {
2622
+ assert(hs->ssl->quic_method != nullptr);
2627
2623
  if (hs->config->quic_transport_params.empty()) {
2628
- return true;
2624
+ // Transport parameters must be set when using QUIC.
2625
+ OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED);
2626
+ return false;
2629
2627
  }
2630
2628
 
2631
2629
  CBB contents;
@@ -3870,7 +3868,3 @@ int SSL_early_callback_ctx_extension_get(const SSL_CLIENT_HELLO *client_hello,
3870
3868
  *out_len = CBS_len(&cbs);
3871
3869
  return 1;
3872
3870
  }
3873
-
3874
- void SSL_CTX_set_ed25519_enabled(SSL_CTX *ctx, int enabled) {
3875
- ctx->ed25519_enabled = !!enabled;
3876
- }