grpc-flamingo 1.11.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (452) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1150 -176
  3. data/etc/roots.pem +40 -196
  4. data/include/grpc/grpc.h +49 -8
  5. data/include/grpc/grpc_security.h +123 -2
  6. data/include/grpc/grpc_security_constants.h +6 -0
  7. data/include/grpc/impl/codegen/fork.h +4 -4
  8. data/include/grpc/impl/codegen/grpc_types.h +26 -5
  9. data/include/grpc/impl/codegen/log.h +112 -0
  10. data/include/grpc/impl/codegen/port_platform.h +55 -4
  11. data/include/grpc/module.modulemap +2 -0
  12. data/include/grpc/support/log.h +2 -80
  13. data/include/grpc/support/string_util.h +2 -0
  14. data/include/grpc/support/sync.h +0 -16
  15. data/src/boringssl/err_data.c +602 -588
  16. data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
  19. data/src/core/ext/filters/client_channel/client_channel.h +5 -0
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
  23. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  24. data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
  25. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
  41. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
  42. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
  45. data/src/core/ext/filters/client_channel/method_params.h +4 -0
  46. data/src/core/ext/filters/client_channel/resolver.h +10 -0
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
  55. data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
  58. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
  59. data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
  60. data/src/core/ext/filters/client_channel/subchannel.h +11 -0
  61. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
  62. data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
  63. data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
  64. data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
  65. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
  67. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  68. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
  70. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
  71. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
  74. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
  76. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
  77. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
  78. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
  79. data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
  80. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  81. data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
  82. data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
  83. data/src/core/lib/channel/channel_args.cc +28 -0
  84. data/src/core/lib/channel/channel_args.h +4 -0
  85. data/src/core/lib/channel/channel_stack.cc +22 -29
  86. data/src/core/lib/channel/channel_stack.h +2 -2
  87. data/src/core/lib/channel/channel_stack_builder.cc +0 -3
  88. data/src/core/lib/channel/channel_stack_builder.h +0 -2
  89. data/src/core/lib/channel/channel_trace.cc +28 -63
  90. data/src/core/lib/channel/channel_trace.h +13 -17
  91. data/src/core/lib/channel/channelz.cc +153 -0
  92. data/src/core/lib/channel/channelz.h +133 -0
  93. data/src/core/lib/channel/channelz_registry.cc +145 -0
  94. data/src/core/lib/channel/channelz_registry.h +120 -0
  95. data/src/core/lib/channel/connected_channel.cc +8 -1
  96. data/src/core/lib/channel/handshaker.cc +71 -0
  97. data/src/core/lib/channel/handshaker.h +4 -0
  98. data/src/core/lib/debug/stats.h +7 -0
  99. data/src/core/lib/debug/stats_data.cc +5 -0
  100. data/src/core/lib/debug/stats_data.h +120 -0
  101. data/src/core/lib/debug/trace.cc +2 -1
  102. data/src/core/lib/debug/trace.h +12 -1
  103. data/src/core/lib/gpr/alloc.h +28 -0
  104. data/src/core/lib/gpr/arena.cc +38 -45
  105. data/src/core/lib/gpr/log.cc +8 -2
  106. data/src/core/lib/gpr/log_android.cc +4 -0
  107. data/src/core/lib/gpr/log_linux.cc +4 -0
  108. data/src/core/lib/gpr/log_posix.cc +4 -0
  109. data/src/core/lib/gpr/log_windows.cc +5 -0
  110. data/src/core/lib/gpr/string.cc +28 -0
  111. data/src/core/lib/gpr/string.h +10 -0
  112. data/src/core/lib/gprpp/abstract.h +5 -2
  113. data/src/core/lib/gprpp/fork.cc +268 -0
  114. data/src/core/lib/gprpp/fork.h +88 -0
  115. data/src/core/lib/gprpp/inlined_vector.h +87 -37
  116. data/src/core/lib/gprpp/memory.h +12 -0
  117. data/src/core/lib/gprpp/mutex_lock.h +42 -0
  118. data/src/core/lib/gprpp/orphanable.h +10 -12
  119. data/src/core/lib/gprpp/ref_counted.h +10 -12
  120. data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
  121. data/src/core/lib/gprpp/thd.h +0 -3
  122. data/src/core/lib/gprpp/thd_posix.cc +5 -54
  123. data/src/core/lib/gprpp/thd_windows.cc +0 -7
  124. data/src/core/lib/http/httpcli_security_connector.cc +1 -3
  125. data/src/core/lib/iomgr/call_combiner.cc +13 -13
  126. data/src/core/lib/iomgr/call_combiner.h +84 -1
  127. data/src/core/lib/iomgr/closure.h +6 -5
  128. data/src/core/lib/iomgr/combiner.cc +30 -13
  129. data/src/core/lib/iomgr/combiner.h +1 -1
  130. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  131. data/src/core/lib/iomgr/error.cc +12 -0
  132. data/src/core/lib/iomgr/error.h +5 -0
  133. data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
  134. data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
  135. data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
  136. data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
  137. data/src/core/lib/iomgr/ev_posix.cc +88 -24
  138. data/src/core/lib/iomgr/ev_posix.h +48 -12
  139. data/src/core/lib/iomgr/exec_ctx.cc +15 -9
  140. data/src/core/lib/iomgr/exec_ctx.h +48 -20
  141. data/src/core/lib/iomgr/executor.cc +274 -142
  142. data/src/core/lib/iomgr/executor.h +82 -16
  143. data/src/core/lib/iomgr/fork_posix.cc +42 -19
  144. data/src/core/lib/iomgr/iocp_windows.cc +9 -4
  145. data/src/core/lib/iomgr/iomgr.cc +2 -0
  146. data/src/core/lib/iomgr/iomgr.h +5 -0
  147. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  148. data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
  149. data/src/core/lib/iomgr/lockfree_event.cc +5 -1
  150. data/src/core/lib/iomgr/polling_entity.cc +11 -2
  151. data/src/core/lib/iomgr/pollset_custom.cc +2 -2
  152. data/src/core/lib/iomgr/port.h +51 -1
  153. data/src/core/lib/iomgr/resolve_address.h +1 -1
  154. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  155. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  156. data/src/core/lib/iomgr/resource_quota.cc +89 -12
  157. data/src/core/lib/iomgr/resource_quota.h +16 -0
  158. data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
  159. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  160. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  161. data/src/core/lib/iomgr/socket_mutator.h +1 -1
  162. data/src/core/lib/iomgr/socket_utils.h +9 -0
  163. data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
  164. data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
  165. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
  166. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  167. data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
  168. data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
  169. data/src/core/lib/iomgr/socket_windows.cc +33 -0
  170. data/src/core/lib/iomgr/socket_windows.h +6 -0
  171. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
  173. data/src/core/lib/iomgr/tcp_custom.cc +11 -11
  174. data/src/core/lib/iomgr/tcp_posix.cc +49 -36
  175. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  176. data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
  177. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  178. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
  179. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
  180. data/src/core/lib/iomgr/tcp_uv.cc +3 -0
  181. data/src/core/lib/iomgr/tcp_windows.cc +18 -2
  182. data/src/core/lib/iomgr/tcp_windows.h +2 -0
  183. data/src/core/lib/iomgr/timer.h +4 -3
  184. data/src/core/lib/iomgr/timer_generic.cc +133 -51
  185. data/src/core/lib/iomgr/timer_manager.cc +12 -14
  186. data/src/core/lib/iomgr/timer_uv.cc +3 -0
  187. data/src/core/lib/iomgr/udp_server.cc +106 -52
  188. data/src/core/lib/iomgr/udp_server.h +8 -4
  189. data/src/core/lib/json/json.cc +12 -1
  190. data/src/core/lib/json/json.h +5 -0
  191. data/src/core/lib/profiling/basic_timers.cc +1 -0
  192. data/src/core/lib/security/context/security_context.cc +8 -8
  193. data/src/core/lib/security/context/security_context.h +6 -2
  194. data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
  195. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
  196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
  197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
  198. data/src/core/lib/security/credentials/credentials.h +1 -0
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
  200. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
  201. data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
  202. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
  203. data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
  204. data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
  205. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
  206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  207. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
  208. data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
  209. data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
  210. data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
  211. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
  212. data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
  213. data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
  214. data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
  215. data/src/core/lib/security/security_connector/security_connector.cc +79 -32
  216. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  217. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  218. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  219. data/src/core/lib/security/transport/security_handshaker.cc +7 -2
  220. data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
  221. data/src/core/lib/security/util/json_util.cc +4 -0
  222. data/src/core/lib/slice/slice.cc +6 -2
  223. data/src/core/lib/slice/slice_buffer.cc +27 -7
  224. data/src/core/lib/slice/slice_hash_table.h +4 -0
  225. data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
  226. data/src/core/lib/surface/call.cc +119 -58
  227. data/src/core/lib/surface/call.h +7 -0
  228. data/src/core/lib/surface/channel.cc +50 -18
  229. data/src/core/lib/surface/channel.h +4 -0
  230. data/src/core/lib/surface/completion_queue.cc +153 -18
  231. data/src/core/lib/surface/completion_queue.h +20 -2
  232. data/src/core/lib/surface/completion_queue_factory.cc +13 -4
  233. data/src/core/lib/surface/init.cc +7 -8
  234. data/src/core/lib/surface/init.h +0 -1
  235. data/src/core/lib/surface/server.cc +16 -0
  236. data/src/core/lib/surface/version.cc +1 -1
  237. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  238. data/src/core/lib/transport/bdp_estimator.h +2 -2
  239. data/src/core/lib/transport/byte_stream.cc +1 -1
  240. data/src/core/lib/transport/connectivity_state.cc +6 -7
  241. data/src/core/lib/transport/service_config.cc +2 -2
  242. data/src/core/lib/transport/service_config.h +3 -3
  243. data/src/core/lib/transport/transport.cc +22 -10
  244. data/src/core/lib/transport/transport.h +18 -18
  245. data/src/core/lib/transport/transport_op_string.cc +1 -8
  246. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
  247. data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
  248. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
  249. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
  250. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
  251. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
  252. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
  253. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
  254. data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
  255. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
  256. data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
  257. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
  258. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
  259. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  260. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
  261. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
  262. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
  263. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
  264. data/src/core/tsi/fake_transport_security.cc +1 -0
  265. data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
  266. data/src/core/tsi/local_transport_security.cc +209 -0
  267. data/src/core/tsi/local_transport_security.h +51 -0
  268. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  269. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
  270. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
  271. data/src/core/tsi/ssl_transport_security.cc +245 -116
  272. data/src/core/tsi/ssl_types.h +2 -0
  273. data/src/core/tsi/transport_security.cc +14 -0
  274. data/src/core/tsi/transport_security.h +2 -0
  275. data/src/core/tsi/transport_security_interface.h +11 -1
  276. data/src/ruby/bin/math_client.rb +17 -9
  277. data/src/ruby/ext/grpc/extconf.rb +1 -26
  278. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
  281. data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/generate_proto_ruby.sh +7 -1
  285. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
  286. data/src/ruby/spec/call_credentials_spec.rb +1 -1
  287. data/src/ruby/spec/call_spec.rb +1 -1
  288. data/src/ruby/spec/channel_credentials_spec.rb +1 -1
  289. data/src/ruby/spec/channel_spec.rb +1 -1
  290. data/src/ruby/spec/client_auth_spec.rb +1 -12
  291. data/src/ruby/spec/client_server_spec.rb +1 -1
  292. data/src/ruby/spec/compression_options_spec.rb +1 -1
  293. data/src/ruby/spec/error_sanity_spec.rb +1 -1
  294. data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
  295. data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
  296. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  297. data/src/ruby/spec/generic/service_spec.rb +1 -1
  298. data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
  299. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
  300. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  301. data/src/ruby/spec/server_credentials_spec.rb +1 -1
  302. data/src/ruby/spec/server_spec.rb +1 -1
  303. data/src/ruby/spec/spec_helper.rb +1 -0
  304. data/src/ruby/spec/support/services.rb +1 -1
  305. data/src/ruby/spec/time_consts_spec.rb +1 -1
  306. data/third_party/address_sorting/address_sorting.c +17 -11
  307. data/third_party/address_sorting/address_sorting_windows.c +43 -3
  308. data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
  309. data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
  310. data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
  311. data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
  312. data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
  313. data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
  314. data/third_party/boringssl/crypto/bio/fd.c +1 -0
  315. data/third_party/boringssl/crypto/bio/file.c +2 -0
  316. data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
  317. data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
  318. data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
  319. data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
  320. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
  321. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
  322. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
  323. data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
  324. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
  325. data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
  326. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
  327. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
  328. data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
  329. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
  330. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
  331. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
  332. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
  333. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
  334. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
  335. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
  336. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
  337. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
  338. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
  339. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
  340. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
  341. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
  342. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
  343. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
  344. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
  345. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
  346. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
  347. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
  348. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
  349. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
  350. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
  351. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
  352. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
  353. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
  354. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
  355. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
  356. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
  357. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
  358. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
  359. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
  360. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
  361. data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
  362. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
  363. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
  364. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
  365. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
  366. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
  367. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
  368. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
  369. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
  370. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
  371. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
  372. data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
  373. data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
  374. data/third_party/boringssl/crypto/internal.h +65 -2
  375. data/third_party/boringssl/crypto/mem.c +0 -2
  376. data/third_party/boringssl/crypto/obj/obj.c +6 -73
  377. data/third_party/boringssl/crypto/thread_pthread.c +35 -5
  378. data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
  379. data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
  380. data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
  381. data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
  382. data/third_party/boringssl/crypto/x509/x_name.c +13 -0
  383. data/third_party/boringssl/include/openssl/aead.h +10 -0
  384. data/third_party/boringssl/include/openssl/asn1.h +2 -3
  385. data/third_party/boringssl/include/openssl/base.h +5 -14
  386. data/third_party/boringssl/include/openssl/bio.h +1 -1
  387. data/third_party/boringssl/include/openssl/bn.h +62 -18
  388. data/third_party/boringssl/include/openssl/bytestring.h +53 -28
  389. data/third_party/boringssl/include/openssl/crypto.h +4 -0
  390. data/third_party/boringssl/include/openssl/ec.h +10 -4
  391. data/third_party/boringssl/include/openssl/ec_key.h +7 -6
  392. data/third_party/boringssl/include/openssl/err.h +9 -9
  393. data/third_party/boringssl/include/openssl/evp.h +1 -1
  394. data/third_party/boringssl/include/openssl/rsa.h +35 -10
  395. data/third_party/boringssl/include/openssl/ssl.h +167 -19
  396. data/third_party/boringssl/include/openssl/ssl3.h +0 -1
  397. data/third_party/boringssl/include/openssl/stack.h +1 -1
  398. data/third_party/boringssl/include/openssl/tls1.h +10 -2
  399. data/third_party/boringssl/include/openssl/x509.h +4 -0
  400. data/third_party/boringssl/include/openssl/x509v3.h +1 -0
  401. data/third_party/boringssl/ssl/d1_both.cc +16 -2
  402. data/third_party/boringssl/ssl/dtls_method.cc +1 -1
  403. data/third_party/boringssl/ssl/handoff.cc +285 -0
  404. data/third_party/boringssl/ssl/handshake.cc +26 -12
  405. data/third_party/boringssl/ssl/handshake_client.cc +101 -95
  406. data/third_party/boringssl/ssl/handshake_server.cc +14 -2
  407. data/third_party/boringssl/ssl/internal.h +132 -79
  408. data/third_party/boringssl/ssl/s3_both.cc +2 -2
  409. data/third_party/boringssl/ssl/s3_lib.cc +3 -1
  410. data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
  411. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
  412. data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
  413. data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
  414. data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
  415. data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
  416. data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
  417. data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
  418. data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
  419. data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
  420. data/third_party/boringssl/ssl/t1_enc.cc +73 -124
  421. data/third_party/boringssl/ssl/t1_lib.cc +367 -41
  422. data/third_party/boringssl/ssl/tls13_both.cc +8 -0
  423. data/third_party/boringssl/ssl/tls13_client.cc +98 -184
  424. data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
  425. data/third_party/boringssl/ssl/tls13_server.cc +91 -137
  426. data/third_party/boringssl/ssl/tls_method.cc +0 -17
  427. data/third_party/boringssl/ssl/tls_record.cc +1 -10
  428. data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
  429. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
  430. data/third_party/boringssl/third_party/fiat/internal.h +32 -20
  431. data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
  432. metadata +86 -71
  433. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
  434. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
  435. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
  436. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
  437. data/src/core/lib/channel/channel_trace_registry.cc +0 -80
  438. data/src/core/lib/channel/channel_trace_registry.h +0 -43
  439. data/src/core/lib/gpr/fork.cc +0 -78
  440. data/src/core/tsi/transport_security_adapter.cc +0 -235
  441. data/src/core/tsi/transport_security_adapter.h +0 -41
  442. data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
  443. data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
  444. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
  445. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
  446. data/src/ruby/pb/test/client.rb +0 -764
  447. data/src/ruby/pb/test/server.rb +0 -252
  448. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
  449. data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
  450. data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
  451. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
  452. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -223,7 +223,7 @@ static int ssl_write_client_cipher_list(SSL_HANDSHAKE *hs, CBB *out) {
223
223
 
224
224
  // Add a fake cipher suite. See draft-davidben-tls-grease-01.
225
225
  if (ssl->ctx->grease_enabled &&
226
- !CBB_add_u16(&child, ssl_get_grease_value(ssl, ssl_grease_cipher))) {
226
+ !CBB_add_u16(&child, ssl_get_grease_value(hs, ssl_grease_cipher))) {
227
227
  return 0;
228
228
  }
229
229
 
@@ -295,11 +295,6 @@ int ssl_write_client_hello(SSL_HANDSHAKE *hs) {
295
295
  return 0;
296
296
  }
297
297
 
298
- // Renegotiations do not participate in session resumption.
299
- int has_session_id = ssl->session != NULL &&
300
- !ssl->s3->initial_handshake_complete &&
301
- ssl->session->session_id_length > 0;
302
-
303
298
  CBB child;
304
299
  if (!CBB_add_u16(&body, hs->client_version) ||
305
300
  !CBB_add_bytes(&body, ssl->s3->client_random, SSL3_RANDOM_SIZE) ||
@@ -307,19 +302,10 @@ int ssl_write_client_hello(SSL_HANDSHAKE *hs) {
307
302
  return 0;
308
303
  }
309
304
 
310
- if (has_session_id) {
311
- if (!CBB_add_bytes(&child, ssl->session->session_id,
312
- ssl->session->session_id_length)) {
313
- return 0;
314
- }
315
- } else {
316
- // In TLS 1.3 experimental encodings, send a fake placeholder session ID
317
- // when we do not otherwise have one to send.
318
- if (hs->max_version >= TLS1_3_VERSION &&
319
- ssl_is_resumption_variant(ssl->tls13_variant) &&
320
- !CBB_add_bytes(&child, hs->session_id, hs->session_id_len)) {
321
- return 0;
322
- }
305
+ // Do not send a session ID on renegotiation.
306
+ if (!ssl->s3->initial_handshake_complete &&
307
+ !CBB_add_bytes(&child, hs->session_id, hs->session_id_len)) {
308
+ return 0;
323
309
  }
324
310
 
325
311
  if (SSL_is_dtls(ssl)) {
@@ -353,50 +339,21 @@ int ssl_write_client_hello(SSL_HANDSHAKE *hs) {
353
339
  return ssl->method->add_message(ssl, std::move(msg));
354
340
  }
355
341
 
356
- static int parse_server_version(SSL_HANDSHAKE *hs, uint16_t *out,
357
- const SSLMessage &msg) {
358
- SSL *const ssl = hs->ssl;
359
- if (msg.type != SSL3_MT_SERVER_HELLO &&
360
- msg.type != SSL3_MT_HELLO_RETRY_REQUEST) {
361
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
362
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
363
- return 0;
342
+ static bool parse_supported_versions(SSL_HANDSHAKE *hs, uint16_t *version,
343
+ const CBS *in) {
344
+ // If the outer version is not TLS 1.2, or there is no extensions block, use
345
+ // the outer version.
346
+ if (*version != TLS1_2_VERSION || CBS_len(in) == 0) {
347
+ return true;
364
348
  }
365
349
 
366
- CBS server_hello = msg.body;
367
- if (!CBS_get_u16(&server_hello, out)) {
368
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
369
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
370
- return 0;
371
- }
372
-
373
- // The server version may also be in the supported_versions extension if
374
- // applicable.
375
- if (msg.type != SSL3_MT_SERVER_HELLO || *out != TLS1_2_VERSION) {
376
- return 1;
377
- }
378
-
379
- uint8_t sid_length;
380
- if (!CBS_skip(&server_hello, SSL3_RANDOM_SIZE) ||
381
- !CBS_get_u8(&server_hello, &sid_length) ||
382
- !CBS_skip(&server_hello, sid_length + 2 /* cipher_suite */ +
383
- 1 /* compression_method */)) {
384
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
385
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
386
- return 0;
387
- }
388
-
389
- // The extensions block may not be present.
390
- if (CBS_len(&server_hello) == 0) {
391
- return 1;
392
- }
393
-
394
- CBS extensions;
395
- if (!CBS_get_u16_length_prefixed(&server_hello, &extensions) ||
396
- CBS_len(&server_hello) != 0) {
350
+ SSL *const ssl = hs->ssl;
351
+ CBS copy = *in, extensions;
352
+ if (!CBS_get_u16_length_prefixed(&copy, &extensions) ||
353
+ CBS_len(&copy) != 0) {
397
354
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
398
355
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
399
- return 0;
356
+ return false;
400
357
  }
401
358
 
402
359
  bool have_supported_versions;
@@ -411,17 +368,18 @@ static int parse_server_version(SSL_HANDSHAKE *hs, uint16_t *out,
411
368
  OPENSSL_ARRAY_SIZE(ext_types),
412
369
  1 /* ignore unknown */)) {
413
370
  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
414
- return 0;
371
+ return false;
415
372
  }
416
373
 
374
+ // Override the outer version with the extension, if present.
417
375
  if (have_supported_versions &&
418
- (!CBS_get_u16(&supported_versions, out) ||
376
+ (!CBS_get_u16(&supported_versions, version) ||
419
377
  CBS_len(&supported_versions) != 0)) {
420
378
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
421
- return 0;
379
+ return false;
422
380
  }
423
381
 
424
- return 1;
382
+ return true;
425
383
  }
426
384
 
427
385
  static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) {
@@ -472,7 +430,13 @@ static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) {
472
430
 
473
431
  // Initialize a random session ID for the experimental TLS 1.3 variant
474
432
  // requiring a session id.
475
- if (ssl_is_resumption_variant(ssl->tls13_variant)) {
433
+ if (ssl->session != nullptr &&
434
+ !ssl->s3->initial_handshake_complete &&
435
+ ssl->session->session_id_length > 0) {
436
+ hs->session_id_len = ssl->session->session_id_length;
437
+ OPENSSL_memcpy(hs->session_id, ssl->session->session_id,
438
+ hs->session_id_len);
439
+ } else if (hs->max_version >= TLS1_3_VERSION) {
476
440
  hs->session_id_len = sizeof(hs->session_id);
477
441
  if (!RAND_bytes(hs->session_id, hs->session_id_len)) {
478
442
  return ssl_hs_error;
@@ -501,8 +465,7 @@ static enum ssl_hs_wait_t do_enter_early_data(SSL_HANDSHAKE *hs) {
501
465
  }
502
466
 
503
467
  ssl->s3->aead_write_ctx->SetVersionIfNullCipher(ssl->session->ssl_version);
504
- if (ssl_is_draft22(ssl->session->ssl_version) &&
505
- !ssl->method->add_change_cipher_spec(ssl)) {
468
+ if (!ssl->method->add_change_cipher_spec(ssl)) {
506
469
  return ssl_hs_error;
507
470
  }
508
471
 
@@ -576,8 +539,26 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
576
539
  return ssl_hs_read_server_hello;
577
540
  }
578
541
 
579
- uint16_t server_version;
580
- if (!parse_server_version(hs, &server_version, msg)) {
542
+ if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
543
+ return ssl_hs_error;
544
+ }
545
+
546
+ CBS server_hello = msg.body, server_random, session_id;
547
+ uint16_t server_version, cipher_suite;
548
+ uint8_t compression_method;
549
+ if (!CBS_get_u16(&server_hello, &server_version) ||
550
+ !CBS_get_bytes(&server_hello, &server_random, SSL3_RANDOM_SIZE) ||
551
+ !CBS_get_u8_length_prefixed(&server_hello, &session_id) ||
552
+ CBS_len(&session_id) > SSL3_SESSION_ID_SIZE ||
553
+ !CBS_get_u16(&server_hello, &cipher_suite) ||
554
+ !CBS_get_u8(&server_hello, &compression_method)) {
555
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
556
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
557
+ return ssl_hs_error;
558
+ }
559
+
560
+ // Use the supported_versions extension if applicable.
561
+ if (!parse_supported_versions(hs, &server_version, &server_hello)) {
581
562
  return ssl_hs_error;
582
563
  }
583
564
 
@@ -618,30 +599,24 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
618
599
  return ssl_hs_error;
619
600
  }
620
601
 
621
- if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
622
- return ssl_hs_error;
623
- }
624
-
625
- CBS server_hello = msg.body, server_random, session_id;
626
- uint16_t cipher_suite;
627
- uint8_t compression_method;
628
- if (!CBS_skip(&server_hello, 2 /* version */) ||
629
- !CBS_get_bytes(&server_hello, &server_random, SSL3_RANDOM_SIZE) ||
630
- !CBS_get_u8_length_prefixed(&server_hello, &session_id) ||
631
- CBS_len(&session_id) > SSL3_SESSION_ID_SIZE ||
632
- !CBS_get_u16(&server_hello, &cipher_suite) ||
633
- !CBS_get_u8(&server_hello, &compression_method)) {
634
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
635
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
636
- return ssl_hs_error;
637
- }
638
-
639
602
  // Copy over the server random.
640
603
  OPENSSL_memcpy(ssl->s3->server_random, CBS_data(&server_random),
641
604
  SSL3_RANDOM_SIZE);
642
605
 
643
- // TODO(davidben): Implement the TLS 1.1 and 1.2 downgrade sentinels once TLS
644
- // 1.3 is finalized and we are not implementing a draft version.
606
+ // Measure, but do not enforce, the TLS 1.3 anti-downgrade feature, with a
607
+ // different value.
608
+ //
609
+ // For draft TLS 1.3 versions, it is not safe to deploy this feature. However,
610
+ // some TLS terminators are non-compliant and copy the origin server's value,
611
+ // so we wish to measure eventual compatibility impact.
612
+ if (!ssl->s3->initial_handshake_complete &&
613
+ hs->max_version >= TLS1_3_VERSION &&
614
+ OPENSSL_memcmp(ssl->s3->server_random + SSL3_RANDOM_SIZE -
615
+ sizeof(kDraftDowngradeRandom),
616
+ kDraftDowngradeRandom,
617
+ sizeof(kDraftDowngradeRandom)) == 0) {
618
+ ssl->s3->draft_downgrade = true;
619
+ }
645
620
 
646
621
  if (!ssl->s3->initial_handshake_complete && ssl->session != NULL &&
647
622
  ssl->session->session_id_length != 0 &&
@@ -649,6 +624,18 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
649
624
  ssl->session->session_id_length)) {
650
625
  ssl->s3->session_reused = true;
651
626
  } else {
627
+ // The server may also have echoed back the TLS 1.3 compatibility mode
628
+ // session ID. As we know this is not a session the server knows about, any
629
+ // server resuming it is in error. Reject the first connection
630
+ // deterministicly, rather than installing an invalid session into the
631
+ // session cache. https://crbug.com/796910
632
+ if (hs->session_id_len != 0 &&
633
+ CBS_mem_equal(&session_id, hs->session_id, hs->session_id_len)) {
634
+ OPENSSL_PUT_ERROR(SSL, SSL_R_SERVER_ECHOED_INVALID_SESSION_ID);
635
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
636
+ return ssl_hs_error;
637
+ }
638
+
652
639
  // The session wasn't resumed. Create a fresh SSL_SESSION to
653
640
  // fill out.
654
641
  ssl_set_session(ssl, NULL);
@@ -753,6 +740,13 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
753
740
  return ssl_hs_error;
754
741
  }
755
742
 
743
+ if (ssl->token_binding_negotiated &&
744
+ (!hs->extended_master_secret || !ssl->s3->send_connection_binding)) {
745
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI);
746
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
747
+ return ssl_hs_error;
748
+ }
749
+
756
750
  ssl->method->next_message(ssl);
757
751
 
758
752
  if (ssl->session != NULL) {
@@ -1520,13 +1514,25 @@ static enum ssl_hs_wait_t do_send_client_finished(SSL_HANDSHAKE *hs) {
1520
1514
  static bool can_false_start(const SSL_HANDSHAKE *hs) {
1521
1515
  SSL *const ssl = hs->ssl;
1522
1516
 
1523
- // False Start only for TLS 1.2 with an ECDHE+AEAD cipher and ALPN or NPN.
1524
- return !SSL_is_dtls(ssl) &&
1525
- SSL_version(ssl) == TLS1_2_VERSION &&
1526
- (!ssl->s3->alpn_selected.empty() ||
1527
- !ssl->s3->next_proto_negotiated.empty()) &&
1528
- hs->new_cipher->algorithm_mkey == SSL_kECDHE &&
1529
- hs->new_cipher->algorithm_mac == SSL_AEAD;
1517
+ // False Start only for TLS 1.2 with an ECDHE+AEAD cipher.
1518
+ if (SSL_is_dtls(ssl) ||
1519
+ SSL_version(ssl) != TLS1_2_VERSION ||
1520
+ hs->new_cipher->algorithm_mkey != SSL_kECDHE ||
1521
+ hs->new_cipher->algorithm_mac != SSL_AEAD) {
1522
+ return false;
1523
+ }
1524
+
1525
+ // Additionally require ALPN or NPN by default.
1526
+ //
1527
+ // TODO(davidben): Can this constraint be relaxed globally now that cipher
1528
+ // suite requirements have been relaxed?
1529
+ if (!ssl->ctx->false_start_allowed_without_alpn &&
1530
+ ssl->s3->alpn_selected.empty() &&
1531
+ ssl->s3->next_proto_negotiated.empty()) {
1532
+ return false;
1533
+ }
1534
+
1535
+ return true;
1530
1536
  }
1531
1537
 
1532
1538
  static enum ssl_hs_wait_t do_finish_flight(SSL_HANDSHAKE *hs) {
@@ -441,6 +441,10 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
441
441
  return ssl_hs_error;
442
442
  }
443
443
 
444
+ if (ssl->handoff) {
445
+ return ssl_hs_handoff;
446
+ }
447
+
444
448
  SSL_CLIENT_HELLO client_hello;
445
449
  if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
446
450
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
@@ -707,8 +711,16 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
707
711
  return ssl_hs_error;
708
712
  }
709
713
 
710
- // TODO(davidben): Implement the TLS 1.1 and 1.2 downgrade sentinels once TLS
711
- // 1.3 is finalized and we are not implementing a draft version.
714
+ // Implement the TLS 1.3 anti-downgrade feature, but with a different value.
715
+ //
716
+ // For draft TLS 1.3 versions, it is not safe to deploy this feature. However,
717
+ // some TLS terminators are non-compliant and copy the origin server's value,
718
+ // so we wish to measure eventual compatibility impact.
719
+ if (hs->max_version >= TLS1_3_VERSION) {
720
+ OPENSSL_memcpy(ssl->s3->server_random + SSL3_RANDOM_SIZE -
721
+ sizeof(kDraftDowngradeRandom),
722
+ kDraftDowngradeRandom, sizeof(kDraftDowngradeRandom));
723
+ }
712
724
 
713
725
  const SSL_SESSION *session = hs->new_session.get();
714
726
  if (ssl->session != NULL) {
@@ -342,7 +342,7 @@ class Array {
342
342
  };
343
343
 
344
344
  // CBBFinishArray behaves like |CBB_finish| but stores the result in an Array.
345
- bool CBBFinishArray(CBB *cbb, Array<uint8_t> *out);
345
+ OPENSSL_EXPORT bool CBBFinishArray(CBB *cbb, Array<uint8_t> *out);
346
346
 
347
347
 
348
348
  // Protocol versions.
@@ -392,32 +392,6 @@ bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
392
392
  // call this function before the version is determined.
393
393
  uint16_t ssl_protocol_version(const SSL *ssl);
394
394
 
395
- // ssl_is_draft21 returns whether the version corresponds to a draft21 TLS 1.3
396
- // variant.
397
- bool ssl_is_draft21(uint16_t version);
398
-
399
- // ssl_is_draft22 returns whether the version corresponds to a draft22 TLS 1.3
400
- // variant.
401
- bool ssl_is_draft22(uint16_t version);
402
-
403
- // ssl_is_resumption_experiment returns whether the version corresponds to a
404
- // TLS 1.3 resumption experiment.
405
- bool ssl_is_resumption_experiment(uint16_t version);
406
-
407
- // ssl_is_resumption_variant returns whether the version corresponds to a
408
- // TLS 1.3 resumption experiment.
409
- bool ssl_is_resumption_variant(enum tls13_variant_t variant);
410
-
411
- // ssl_is_resumption_client_ccs_experiment returns whether the version
412
- // corresponds to a TLS 1.3 resumption experiment that sends a client CCS.
413
- bool ssl_is_resumption_client_ccs_experiment(uint16_t version);
414
-
415
- // ssl_is_resumption_record_version_experiment returns whether the version
416
- // corresponds to a TLS 1.3 resumption experiment that modifies the record
417
- // version.
418
- bool ssl_is_resumption_record_version_experiment(uint16_t version);
419
-
420
-
421
395
  // Cipher suites.
422
396
 
423
397
  } // namespace bssl
@@ -1009,6 +983,7 @@ struct SSLMessage {
1009
983
  #define SSL_MAX_HANDSHAKE_FLIGHT 7
1010
984
 
1011
985
  extern const uint8_t kHelloRetryRequest[SSL3_RANDOM_SIZE];
986
+ extern const uint8_t kDraftDowngradeRandom[8];
1012
987
 
1013
988
  // ssl_max_handshake_message_len returns the maximum number of bytes permitted
1014
989
  // in a handshake message for |ssl|.
@@ -1244,10 +1219,10 @@ int tls13_derive_resumption_secret(SSL_HANDSHAKE *hs);
1244
1219
 
1245
1220
  // tls13_export_keying_material provides an exporter interface to use the
1246
1221
  // |exporter_secret|.
1247
- int tls13_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
1248
- const char *label, size_t label_len,
1249
- const uint8_t *context, size_t context_len,
1250
- int use_context);
1222
+ int tls13_export_keying_material(SSL *ssl, Span<uint8_t> out,
1223
+ Span<const uint8_t> secret,
1224
+ Span<const char> label,
1225
+ Span<const uint8_t> context);
1251
1226
 
1252
1227
  // tls13_finished_mac calculates the MAC of the handshake transcript to verify
1253
1228
  // the integrity of the Finished message, and stores the result in |out| and
@@ -1282,6 +1257,7 @@ enum ssl_hs_wait_t {
1282
1257
  ssl_hs_read_message,
1283
1258
  ssl_hs_flush,
1284
1259
  ssl_hs_certificate_selection_pending,
1260
+ ssl_hs_handoff,
1285
1261
  ssl_hs_x509_lookup,
1286
1262
  ssl_hs_channel_id_lookup,
1287
1263
  ssl_hs_private_key_operation,
@@ -1294,6 +1270,16 @@ enum ssl_hs_wait_t {
1294
1270
  ssl_hs_certificate_verify,
1295
1271
  };
1296
1272
 
1273
+ enum ssl_grease_index_t {
1274
+ ssl_grease_cipher = 0,
1275
+ ssl_grease_group,
1276
+ ssl_grease_extension1,
1277
+ ssl_grease_extension2,
1278
+ ssl_grease_version,
1279
+ ssl_grease_ticket_extension,
1280
+ ssl_grease_last_index = ssl_grease_ticket_extension,
1281
+ };
1282
+
1297
1283
  struct SSL_HANDSHAKE {
1298
1284
  explicit SSL_HANDSHAKE(SSL *ssl);
1299
1285
  ~SSL_HANDSHAKE();
@@ -1322,11 +1308,6 @@ struct SSL_HANDSHAKE {
1322
1308
  // |SSL_OP_NO_*| and |SSL_CTX_set_max_proto_version| APIs.
1323
1309
  uint16_t max_version = 0;
1324
1310
 
1325
- // session_id is the session ID in the ClientHello, used for the experimental
1326
- // TLS 1.3 variant.
1327
- uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH] = {0};
1328
- uint8_t session_id_len = 0;
1329
-
1330
1311
  size_t hash_len = 0;
1331
1312
  uint8_t secret[EVP_MAX_MD_SIZE] = {0};
1332
1313
  uint8_t early_traffic_secret[EVP_MAX_MD_SIZE] = {0};
@@ -1394,6 +1375,12 @@ struct SSL_HANDSHAKE {
1394
1375
  // peer_key is the peer's ECDH key for a TLS 1.2 client.
1395
1376
  Array<uint8_t> peer_key;
1396
1377
 
1378
+ // negotiated_token_binding_version is used by a server to store the
1379
+ // on-the-wire encoding of the Token Binding protocol version to advertise in
1380
+ // the ServerHello/EncryptedExtensions if the Token Binding extension is to be
1381
+ // sent.
1382
+ uint16_t negotiated_token_binding_version;
1383
+
1397
1384
  // server_params, in a TLS 1.2 server, stores the ServerKeyExchange
1398
1385
  // parameters. It has client and server randoms prepended for signing
1399
1386
  // convenience.
@@ -1505,6 +1492,9 @@ struct SSL_HANDSHAKE {
1505
1492
  // in progress.
1506
1493
  bool pending_private_key_op:1;
1507
1494
 
1495
+ // grease_seeded is true if |grease_seed| has been initialized.
1496
+ bool grease_seeded:1;
1497
+
1508
1498
  // client_version is the value sent or received in the ClientHello version.
1509
1499
  uint16_t client_version = 0;
1510
1500
 
@@ -1515,6 +1505,20 @@ struct SSL_HANDSHAKE {
1515
1505
  // early_data_written is the amount of early data that has been written by the
1516
1506
  // record layer.
1517
1507
  uint16_t early_data_written = 0;
1508
+
1509
+ // session_id is the session ID in the ClientHello, used for the experimental
1510
+ // TLS 1.3 variant.
1511
+ uint8_t session_id[SSL_MAX_SSL_SESSION_ID_LENGTH] = {0};
1512
+ uint8_t session_id_len = 0;
1513
+
1514
+ // grease_seed is the entropy for GREASE values. It is valid if
1515
+ // |grease_seeded| is true.
1516
+ uint8_t grease_seed[ssl_grease_last_index + 1] = {0};
1517
+
1518
+ // dummy_pq_padding_len, in a server, is the length of the extension that
1519
+ // should be echoed in a ServerHello, or zero if no extension should be
1520
+ // echoed.
1521
+ uint16_t dummy_pq_padding_len = 0;
1518
1522
  };
1519
1523
 
1520
1524
  UniquePtr<SSL_HANDSHAKE> ssl_handshake_new(SSL *ssl);
@@ -1657,47 +1661,39 @@ int ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello,
1657
1661
 
1658
1662
  // GREASE.
1659
1663
 
1660
- enum ssl_grease_index_t {
1661
- ssl_grease_cipher = 0,
1662
- ssl_grease_group,
1663
- ssl_grease_extension1,
1664
- ssl_grease_extension2,
1665
- ssl_grease_version,
1666
- ssl_grease_ticket_extension,
1667
- };
1668
-
1669
- // ssl_get_grease_value returns a GREASE value for |ssl|. For a given
1664
+ // ssl_get_grease_value returns a GREASE value for |hs|. For a given
1670
1665
  // connection, the values for each index will be deterministic. This allows the
1671
1666
  // same ClientHello be sent twice for a HelloRetryRequest or the same group be
1672
1667
  // advertised in both supported_groups and key_shares.
1673
- uint16_t ssl_get_grease_value(const SSL *ssl, enum ssl_grease_index_t index);
1668
+ uint16_t ssl_get_grease_value(SSL_HANDSHAKE *hs, enum ssl_grease_index_t index);
1674
1669
 
1675
1670
 
1676
1671
  // Signature algorithms.
1677
1672
 
1678
1673
  // tls1_parse_peer_sigalgs parses |sigalgs| as the list of peer signature
1679
- // algorithms and saves them on |hs|. It returns one on success and zero on
1674
+ // algorithms and saves them on |hs|. It returns true on success and false on
1680
1675
  // error.
1681
- int tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *sigalgs);
1676
+ bool tls1_parse_peer_sigalgs(SSL_HANDSHAKE *hs, const CBS *sigalgs);
1682
1677
 
1683
1678
  // tls1_get_legacy_signature_algorithm sets |*out| to the signature algorithm
1684
- // that should be used with |pkey| in TLS 1.1 and earlier. It returns one on
1685
- // success and zero if |pkey| may not be used at those versions.
1686
- int tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey);
1679
+ // that should be used with |pkey| in TLS 1.1 and earlier. It returns true on
1680
+ // success and false if |pkey| may not be used at those versions.
1681
+ bool tls1_get_legacy_signature_algorithm(uint16_t *out, const EVP_PKEY *pkey);
1687
1682
 
1688
1683
  // tls1_choose_signature_algorithm sets |*out| to a signature algorithm for use
1689
1684
  // with |hs|'s private key based on the peer's preferences and the algorithms
1690
- // supported. It returns one on success and zero on error.
1691
- int tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out);
1685
+ // supported. It returns true on success and false on error.
1686
+ bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, uint16_t *out);
1692
1687
 
1693
1688
  // tls12_add_verify_sigalgs adds the signature algorithms acceptable for the
1694
- // peer signature to |out|. It returns one on success and zero on error.
1695
- int tls12_add_verify_sigalgs(const SSL *ssl, CBB *out);
1689
+ // peer signature to |out|. It returns true on success and false on error.
1690
+ bool tls12_add_verify_sigalgs(const SSL *ssl, CBB *out);
1696
1691
 
1697
1692
  // tls12_check_peer_sigalg checks if |sigalg| is acceptable for the peer
1698
- // signature. It returns one on success and zero on error, setting |*out_alert|
1699
- // to an alert to send.
1700
- int tls12_check_peer_sigalg(SSL *ssl, uint8_t *out_alert, uint16_t sigalg);
1693
+ // signature. It returns true on success and false on error, setting
1694
+ // |*out_alert| to an alert to send.
1695
+ bool tls12_check_peer_sigalg(const SSL *ssl, uint8_t *out_alert,
1696
+ uint16_t sigalg);
1701
1697
 
1702
1698
 
1703
1699
  // Underdocumented functions.
@@ -2165,21 +2161,29 @@ struct SSLContext {
2165
2161
  // If true, a client will request certificate timestamps.
2166
2162
  bool signed_cert_timestamps_enabled:1;
2167
2163
 
2168
- // tlsext_channel_id_enabled is one if Channel ID is enabled and zero
2169
- // otherwise. For a server, means that we'll accept Channel IDs from clients.
2170
- // For a client, means that we'll advertise support.
2164
+ // tlsext_channel_id_enabled is whether Channel ID is enabled. For a server,
2165
+ // means that we'll accept Channel IDs from clients. For a client, means that
2166
+ // we'll advertise support.
2171
2167
  bool tlsext_channel_id_enabled:1;
2172
2168
 
2173
- // grease_enabled is one if draft-davidben-tls-grease-01 is enabled and zero
2174
- // otherwise.
2169
+ // grease_enabled is whether draft-davidben-tls-grease-01 is enabled.
2175
2170
  bool grease_enabled:1;
2176
2171
 
2177
- // allow_unknown_alpn_protos is one if the client allows unsolicited ALPN
2172
+ // allow_unknown_alpn_protos is whether the client allows unsolicited ALPN
2178
2173
  // protocols from the peer.
2179
2174
  bool allow_unknown_alpn_protos:1;
2180
2175
 
2181
- // ed25519_enabled is one if Ed25519 is advertised in the handshake.
2176
+ // ed25519_enabled is whether Ed25519 is advertised in the handshake.
2182
2177
  bool ed25519_enabled:1;
2178
+
2179
+ // false_start_allowed_without_alpn is whether False Start (if
2180
+ // |SSL_MODE_ENABLE_FALSE_START| is enabled) is allowed without ALPN.
2181
+ bool false_start_allowed_without_alpn:1;
2182
+
2183
+ // handoff indicates that a server should stop after receiving the
2184
+ // ClientHello and pause the handshake in such a way that |SSL_get_error|
2185
+ // returns |SSL_HANDOFF|.
2186
+ bool handoff:1;
2183
2187
  };
2184
2188
 
2185
2189
  // An ssl_shutdown_t describes the shutdown state of one end of the connection,
@@ -2293,7 +2297,12 @@ struct SSL3_STATE {
2293
2297
  // wpend_pending is true if we have a pending write outstanding.
2294
2298
  bool wpend_pending:1;
2295
2299
 
2296
- uint8_t send_alert[2] = {0};
2300
+ // early_data_accepted is true if early data was accepted by the server.
2301
+ bool early_data_accepted:1;
2302
+
2303
+ // draft_downgrade is whether the TLS 1.3 anti-downgrade logic would have
2304
+ // fired, were it not a draft.
2305
+ bool draft_downgrade:1;
2297
2306
 
2298
2307
  // hs_buf is the buffer of handshake data to process.
2299
2308
  UniquePtr<BUF_MEM> hs_buf;
@@ -2307,6 +2316,11 @@ struct SSL3_STATE {
2307
2316
  // been successfully written.
2308
2317
  uint32_t pending_flight_offset = 0;
2309
2318
 
2319
+ // ticket_age_skew is the difference, in seconds, between the client-sent
2320
+ // ticket age and the server-computed value in TLS 1.3 server connections
2321
+ // which resumed a session.
2322
+ int32_t ticket_age_skew = 0;
2323
+
2310
2324
  // aead_read_ctx is the current read cipher state.
2311
2325
  UniquePtr<SSLAEADContext> aead_read_ctx;
2312
2326
 
@@ -2332,6 +2346,8 @@ struct SSL3_STATE {
2332
2346
  uint8_t previous_server_finished_len = 0;
2333
2347
  uint8_t previous_server_finished[12] = {0};
2334
2348
 
2349
+ uint8_t send_alert[2] = {0};
2350
+
2335
2351
  // established_session is the session established by the connection. This
2336
2352
  // session is only filled upon the completion of the handshake and is
2337
2353
  // immutable.
@@ -2362,10 +2378,8 @@ struct SSL3_STATE {
2362
2378
  // each are big-endian values.
2363
2379
  uint8_t tlsext_channel_id[64] = {0};
2364
2380
 
2365
- // ticket_age_skew is the difference, in seconds, between the client-sent
2366
- // ticket age and the server-computed value in TLS 1.3 server connections
2367
- // which resumed a session.
2368
- int32_t ticket_age_skew = 0;
2381
+ // Contains the QUIC transport params received by the peer.
2382
+ Array<uint8_t> peer_quic_transport_params;
2369
2383
  };
2370
2384
 
2371
2385
  // lengths of messages
@@ -2506,10 +2520,6 @@ struct SSLConnection {
2506
2520
  // further constrainted by |SSL_OP_NO_*|.
2507
2521
  uint16_t conf_min_version;
2508
2522
 
2509
- // tls13_variant is the variant of TLS 1.3 we are using for this
2510
- // configuration.
2511
- enum tls13_variant_t tls13_variant;
2512
-
2513
2523
  uint16_t max_send_fragment;
2514
2524
 
2515
2525
  // There are 2 BIO's even though they are normally both the same. This is so
@@ -2538,14 +2548,18 @@ struct SSLConnection {
2538
2548
 
2539
2549
  // session info
2540
2550
 
2541
- // client cert?
2542
- // This is used to hold the server certificate used
2551
+ // This is used to hold the local certificate used (i.e. the server
2552
+ // certificate for a server or the client certificate for a client).
2543
2553
  CERT *cert;
2544
2554
 
2545
2555
  // initial_timeout_duration_ms is the default DTLS timeout duration in
2546
2556
  // milliseconds. It's used to initialize the timer any time it's restarted.
2547
2557
  unsigned initial_timeout_duration_ms;
2548
2558
 
2559
+ // tls13_variant is the variant of TLS 1.3 we are using for this
2560
+ // configuration.
2561
+ enum tls13_variant_t tls13_variant;
2562
+
2549
2563
  // session is the configured session to be offered by the client. This session
2550
2564
  // is immutable.
2551
2565
  SSL_SESSION *session;
@@ -2584,6 +2598,7 @@ struct SSLConnection {
2584
2598
  uint32_t options; // protocol behaviour
2585
2599
  uint32_t mode; // API behaviour
2586
2600
  uint32_t max_cert_list;
2601
+ uint16_t dummy_pq_padding_len;
2587
2602
  char *tlsext_hostname;
2588
2603
  size_t supported_group_list_len;
2589
2604
  uint16_t *supported_group_list; // our list
@@ -2608,6 +2623,18 @@ struct SSLConnection {
2608
2623
  uint8_t *alpn_client_proto_list;
2609
2624
  unsigned alpn_client_proto_list_len;
2610
2625
 
2626
+ // Contains a list of supported Token Binding key parameters.
2627
+ uint8_t *token_binding_params;
2628
+ size_t token_binding_params_len;
2629
+
2630
+ // The negotiated Token Binding key parameter. Only valid if
2631
+ // |token_binding_negotiated| is set.
2632
+ uint8_t negotiated_token_binding_param;
2633
+
2634
+ // Contains the QUIC transport params that this endpoint will send.
2635
+ uint8_t *quic_transport_params;
2636
+ size_t quic_transport_params_len;
2637
+
2611
2638
  // renegotiate_mode controls how peer renegotiation attempts are handled.
2612
2639
  enum ssl_renegotiate_mode_t renegotiate_mode;
2613
2640
 
@@ -2635,13 +2662,24 @@ struct SSLConnection {
2635
2662
  // we'll advertise support.
2636
2663
  bool tlsext_channel_id_enabled:1;
2637
2664
 
2665
+ // token_binding_negotiated is set if Token Binding was negotiated.
2666
+ bool token_binding_negotiated:1;
2667
+
2638
2668
  // retain_only_sha256_of_client_certs is true if we should compute the SHA256
2639
2669
  // hash of the peer's certificate and then discard it to save memory and
2640
2670
  // session space. Only effective on the server side.
2641
2671
  bool retain_only_sha256_of_client_certs:1;
2642
2672
 
2643
- // early_data_accepted is true if early data was accepted by the server.
2644
- bool early_data_accepted:1;
2673
+ // handoff indicates that a server should stop after receiving the
2674
+ // ClientHello and pause the handshake in such a way that |SSL_get_error|
2675
+ // returns |SSL_HANDOFF|. This is copied in |SSL_new| from the |SSL_CTX|
2676
+ // element of the same name and may be cleared if the handoff is declined.
2677
+ bool handoff:1;
2678
+
2679
+ // did_dummy_pq_padding is only valid for a client. In that context, it is
2680
+ // true iff the client observed the server echoing a dummy PQ padding
2681
+ // extension.
2682
+ bool did_dummy_pq_padding:1;
2645
2683
  };
2646
2684
 
2647
2685
  // From draft-ietf-tls-tls13-18, used in determining PSK modes.
@@ -2683,6 +2721,11 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
2683
2721
  const SSL_X509_METHOD *x509_method,
2684
2722
  CRYPTO_BUFFER_POOL *pool);
2685
2723
 
2724
+ // ssl_session_serialize writes |in| to |cbb| as if it were serialising a
2725
+ // session for Session-ID resumption. It returns one on success and zero on
2726
+ // error.
2727
+ int ssl_session_serialize(const SSL_SESSION *in, CBB *cbb);
2728
+
2686
2729
  // ssl_session_is_context_valid returns one if |session|'s session ID context
2687
2730
  // matches the one set on |ssl| and zero otherwise.
2688
2731
  int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session);
@@ -2826,6 +2869,16 @@ ssl_open_record_t dtls1_open_handshake(SSL *ssl, size_t *out_consumed,
2826
2869
  void dtls1_next_message(SSL *ssl);
2827
2870
  int dtls1_dispatch_alert(SSL *ssl);
2828
2871
 
2872
+ // tls1_configure_aead configures either the read or write direction AEAD (as
2873
+ // determined by |direction|) using the keys generated by the TLS KDF. The
2874
+ // |key_block_cache| argument is used to store the generated key block, if
2875
+ // empty. Otherwise it's assumed that the key block is already contained within
2876
+ // it. Returns one on success or zero on error.
2877
+ int tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
2878
+ Array<uint8_t> *key_block_cache,
2879
+ const SSL_CIPHER *cipher,
2880
+ Span<const uint8_t> iv_override);
2881
+
2829
2882
  int tls1_change_cipher_state(SSL_HANDSHAKE *hs, evp_aead_direction_t direction);
2830
2883
  int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out,
2831
2884
  Span<const uint8_t> premaster);