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
@@ -43,6 +43,14 @@ const uint8_t kHelloRetryRequest[SSL3_RANDOM_SIZE] = {
43
43
  0x8c, 0x5e, 0x07, 0x9e, 0x09, 0xe2, 0xc8, 0xa8, 0x33, 0x9c,
44
44
  };
45
45
 
46
+ // This value was selected by truncating the SHA-256 hash of "Draft TLS 1.3
47
+ // Downgrade" to 8 bytes:
48
+ //
49
+ // echo -n 'Draft TLS 1.3 Downgrade' | sha256sum | head -c 16
50
+ const uint8_t kDraftDowngradeRandom[8] = {0x95, 0xb9, 0x9f, 0x87,
51
+ 0x22, 0xfe, 0x9b, 0x64};
52
+
53
+
46
54
  bool tls13_get_cert_verify_signature_input(
47
55
  SSL_HANDSHAKE *hs, Array<uint8_t> *out,
48
56
  enum ssl_cert_verify_context_t cert_verify_context) {
@@ -58,82 +58,62 @@ static enum ssl_hs_wait_t do_read_hello_retry_request(SSL_HANDSHAKE *hs) {
58
58
  return ssl_hs_read_message;
59
59
  }
60
60
 
61
- CBS extensions;
62
- uint16_t cipher_suite = 0;
63
- if (ssl_is_draft22(ssl->version)) {
64
- // Queue up a ChangeCipherSpec for whenever we next send something. This
65
- // will be before the second ClientHello. If we offered early data, this was
66
- // already done.
67
- if (!hs->early_data_offered &&
68
- !ssl->method->add_change_cipher_spec(ssl)) {
69
- return ssl_hs_error;
70
- }
71
-
72
- if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
73
- return ssl_hs_error;
74
- }
61
+ // Queue up a ChangeCipherSpec for whenever we next send something. This
62
+ // will be before the second ClientHello. If we offered early data, this was
63
+ // already done.
64
+ if (!hs->early_data_offered &&
65
+ !ssl->method->add_change_cipher_spec(ssl)) {
66
+ return ssl_hs_error;
67
+ }
75
68
 
76
- CBS body = msg.body, server_random, session_id;
77
- uint16_t server_version;
78
- if (!CBS_get_u16(&body, &server_version) ||
79
- !CBS_get_bytes(&body, &server_random, SSL3_RANDOM_SIZE) ||
80
- !CBS_get_u8_length_prefixed(&body, &session_id) ||
81
- !CBS_get_u16(&body, &cipher_suite) ||
82
- !CBS_skip(&body, 1) ||
83
- !CBS_get_u16_length_prefixed(&body, &extensions) ||
84
- CBS_len(&extensions) == 0 ||
85
- CBS_len(&body) != 0) {
86
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
87
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
88
- return ssl_hs_error;
89
- }
69
+ if (!ssl_check_message_type(ssl, msg, SSL3_MT_SERVER_HELLO)) {
70
+ return ssl_hs_error;
71
+ }
90
72
 
91
- if (!CBS_mem_equal(&server_random, kHelloRetryRequest, SSL3_RANDOM_SIZE)) {
92
- hs->tls13_state = state_read_server_hello;
93
- return ssl_hs_ok;
94
- }
95
- } else {
96
- if (msg.type != SSL3_MT_HELLO_RETRY_REQUEST) {
97
- hs->tls13_state = state_read_server_hello;
98
- return ssl_hs_ok;
99
- }
73
+ CBS body = msg.body, extensions, server_random, session_id;
74
+ uint16_t server_version, cipher_suite;
75
+ uint8_t compression_method;
76
+ if (!CBS_get_u16(&body, &server_version) ||
77
+ !CBS_get_bytes(&body, &server_random, SSL3_RANDOM_SIZE) ||
78
+ !CBS_get_u8_length_prefixed(&body, &session_id) ||
79
+ !CBS_mem_equal(&session_id, hs->session_id, hs->session_id_len) ||
80
+ !CBS_get_u16(&body, &cipher_suite) ||
81
+ !CBS_get_u8(&body, &compression_method) ||
82
+ compression_method != 0 ||
83
+ !CBS_get_u16_length_prefixed(&body, &extensions) ||
84
+ CBS_len(&extensions) == 0 ||
85
+ CBS_len(&body) != 0) {
86
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
87
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
88
+ return ssl_hs_error;
89
+ }
100
90
 
101
- CBS body = msg.body;
102
- uint16_t server_version;
103
- if (!CBS_get_u16(&body, &server_version) ||
104
- (ssl_is_draft21(ssl->version) &&
105
- !CBS_get_u16(&body, &cipher_suite)) ||
106
- !CBS_get_u16_length_prefixed(&body, &extensions) ||
107
- CBS_len(&body) != 0) {
108
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
109
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
110
- return ssl_hs_error;
111
- }
91
+ if (!CBS_mem_equal(&server_random, kHelloRetryRequest, SSL3_RANDOM_SIZE)) {
92
+ hs->tls13_state = state_read_server_hello;
93
+ return ssl_hs_ok;
112
94
  }
113
95
 
114
- if (ssl_is_draft21(ssl->version)) {
115
- const SSL_CIPHER *cipher = SSL_get_cipher_by_value(cipher_suite);
116
- // Check if the cipher is a TLS 1.3 cipher.
117
- if (cipher == NULL ||
118
- SSL_CIPHER_get_min_version(cipher) > ssl_protocol_version(ssl) ||
119
- SSL_CIPHER_get_max_version(cipher) < ssl_protocol_version(ssl)) {
120
- OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
121
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
122
- return ssl_hs_error;
123
- }
96
+ const SSL_CIPHER *cipher = SSL_get_cipher_by_value(cipher_suite);
97
+ // Check if the cipher is a TLS 1.3 cipher.
98
+ if (cipher == NULL ||
99
+ SSL_CIPHER_get_min_version(cipher) > ssl_protocol_version(ssl) ||
100
+ SSL_CIPHER_get_max_version(cipher) < ssl_protocol_version(ssl)) {
101
+ OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
102
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
103
+ return ssl_hs_error;
104
+ }
124
105
 
125
- hs->new_cipher = cipher;
106
+ hs->new_cipher = cipher;
126
107
 
127
- if (!hs->transcript.InitHash(ssl_protocol_version(ssl), hs->new_cipher) ||
128
- !hs->transcript.UpdateForHelloRetryRequest()) {
129
- return ssl_hs_error;
130
- }
108
+ if (!hs->transcript.InitHash(ssl_protocol_version(ssl), hs->new_cipher) ||
109
+ !hs->transcript.UpdateForHelloRetryRequest()) {
110
+ return ssl_hs_error;
131
111
  }
132
112
 
133
113
 
134
114
  bool have_cookie, have_key_share, have_supported_versions;
135
115
  CBS cookie, key_share, supported_versions;
136
- const SSL_EXTENSION_TYPE ext_types[] = {
116
+ SSL_EXTENSION_TYPE ext_types[] = {
137
117
  {TLSEXT_TYPE_key_share, &have_key_share, &key_share},
138
118
  {TLSEXT_TYPE_cookie, &have_cookie, &cookie},
139
119
  {TLSEXT_TYPE_supported_versions, &have_supported_versions,
@@ -148,11 +128,6 @@ static enum ssl_hs_wait_t do_read_hello_retry_request(SSL_HANDSHAKE *hs) {
148
128
  return ssl_hs_error;
149
129
  }
150
130
 
151
- if (!ssl_is_draft22(ssl->version) && have_supported_versions) {
152
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
153
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
154
- return ssl_hs_error;
155
- }
156
131
  if (!have_cookie && !have_key_share) {
157
132
  OPENSSL_PUT_ERROR(SSL, SSL_R_EMPTY_HELLO_RETRY_REQUEST);
158
133
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
@@ -250,11 +225,11 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
250
225
  uint8_t compression_method;
251
226
  if (!CBS_get_u16(&body, &server_version) ||
252
227
  !CBS_get_bytes(&body, &server_random, SSL3_RANDOM_SIZE) ||
253
- (ssl_is_resumption_experiment(ssl->version) &&
254
- !CBS_get_u8_length_prefixed(&body, &session_id)) ||
228
+ !CBS_get_u8_length_prefixed(&body, &session_id) ||
229
+ !CBS_mem_equal(&session_id, hs->session_id, hs->session_id_len) ||
255
230
  !CBS_get_u16(&body, &cipher_suite) ||
256
- (ssl_is_resumption_experiment(ssl->version) &&
257
- (!CBS_get_u8(&body, &compression_method) || compression_method != 0)) ||
231
+ !CBS_get_u8(&body, &compression_method) ||
232
+ compression_method != 0 ||
258
233
  !CBS_get_u16_length_prefixed(&body, &extensions) ||
259
234
  CBS_len(&body) != 0) {
260
235
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
@@ -262,18 +237,14 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
262
237
  return ssl_hs_error;
263
238
  }
264
239
 
265
- uint16_t expected_version = ssl_is_resumption_experiment(ssl->version)
266
- ? TLS1_2_VERSION
267
- : ssl->version;
268
- if (server_version != expected_version) {
240
+ if (server_version != TLS1_2_VERSION) {
269
241
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
270
242
  OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_VERSION_NUMBER);
271
243
  return ssl_hs_error;
272
244
  }
273
245
 
274
246
  // Forbid a second HelloRetryRequest.
275
- if (ssl_is_draft22(ssl->version) &&
276
- CBS_mem_equal(&server_random, kHelloRetryRequest, SSL3_RANDOM_SIZE)) {
247
+ if (CBS_mem_equal(&server_random, kHelloRetryRequest, SSL3_RANDOM_SIZE)) {
277
248
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
278
249
  OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
279
250
  return ssl_hs_error;
@@ -293,8 +264,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
293
264
  }
294
265
 
295
266
  // Check that the cipher matches the one in the HelloRetryRequest.
296
- if (ssl_is_draft21(ssl->version) &&
297
- hs->received_hello_retry_request &&
267
+ if (hs->received_hello_retry_request &&
298
268
  hs->new_cipher != cipher) {
299
269
  OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CIPHER_RETURNED);
300
270
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
@@ -305,7 +275,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
305
275
  bool have_key_share = false, have_pre_shared_key = false,
306
276
  have_supported_versions = false;
307
277
  CBS key_share, pre_shared_key, supported_versions;
308
- const SSL_EXTENSION_TYPE ext_types[] = {
278
+ SSL_EXTENSION_TYPE ext_types[] = {
309
279
  {TLSEXT_TYPE_key_share, &have_key_share, &key_share},
310
280
  {TLSEXT_TYPE_pre_shared_key, &have_pre_shared_key, &pre_shared_key},
311
281
  {TLSEXT_TYPE_supported_versions, &have_supported_versions,
@@ -320,14 +290,6 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
320
290
  return ssl_hs_error;
321
291
  }
322
292
 
323
- // supported_versions is parsed in handshake_client to select the experimental
324
- // TLS 1.3 version.
325
- if (have_supported_versions && !ssl_is_resumption_experiment(ssl->version)) {
326
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
327
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION);
328
- return ssl_hs_error;
329
- }
330
-
331
293
  alert = SSL_AD_DECODE_ERROR;
332
294
  if (have_pre_shared_key) {
333
295
  if (ssl->session == NULL) {
@@ -420,14 +382,6 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) {
420
382
  }
421
383
 
422
384
  if (!hs->early_data_offered) {
423
- // Earlier versions of the resumption experiment added ChangeCipherSpec just
424
- // before the Finished flight.
425
- if (ssl_is_resumption_client_ccs_experiment(ssl->version) &&
426
- !ssl_is_draft22(ssl->version) &&
427
- !ssl->method->add_change_cipher_spec(ssl)) {
428
- return ssl_hs_error;
429
- }
430
-
431
385
  // If not sending early data, set client traffic keys now so that alerts are
432
386
  // encrypted.
433
387
  if (!tls13_set_traffic_key(ssl, evp_aead_seal, hs->client_handshake_secret,
@@ -473,7 +427,7 @@ static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs) {
473
427
  hs->new_session->early_alpn_len = ssl->s3->alpn_selected.size();
474
428
  }
475
429
 
476
- if (ssl->early_data_accepted) {
430
+ if (ssl->s3->early_data_accepted) {
477
431
  if (hs->early_session->cipher != hs->new_session->cipher ||
478
432
  MakeConstSpan(hs->early_session->early_alpn,
479
433
  hs->early_session->early_alpn_len) !=
@@ -481,7 +435,8 @@ static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs) {
481
435
  OPENSSL_PUT_ERROR(SSL, SSL_R_ALPN_MISMATCH_ON_EARLY_DATA);
482
436
  return ssl_hs_error;
483
437
  }
484
- if (ssl->s3->tlsext_channel_id_valid || hs->received_custom_extension) {
438
+ if (ssl->s3->tlsext_channel_id_valid || hs->received_custom_extension ||
439
+ ssl->token_binding_negotiated) {
485
440
  OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION_ON_EARLY_DATA);
486
441
  return ssl_hs_error;
487
442
  }
@@ -493,7 +448,7 @@ static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs) {
493
448
 
494
449
  ssl->method->next_message(ssl);
495
450
  hs->tls13_state = state_read_certificate_request;
496
- if (hs->in_early_data && !ssl->early_data_accepted) {
451
+ if (hs->in_early_data && !ssl->s3->early_data_accepted) {
497
452
  return ssl_hs_early_data_rejected;
498
453
  }
499
454
  return ssl_hs_ok;
@@ -519,75 +474,45 @@ static enum ssl_hs_wait_t do_read_certificate_request(SSL_HANDSHAKE *hs) {
519
474
  }
520
475
 
521
476
 
522
- if (ssl_is_draft21(ssl->version)) {
523
- bool have_sigalgs = false, have_ca = false;
524
- CBS sigalgs, ca;
525
- const SSL_EXTENSION_TYPE ext_types[] = {
526
- {TLSEXT_TYPE_signature_algorithms, &have_sigalgs, &sigalgs},
527
- {TLSEXT_TYPE_certificate_authorities, &have_ca, &ca},
528
- };
529
-
530
- CBS body = msg.body, context, extensions, supported_signature_algorithms;
531
- uint8_t alert = SSL_AD_DECODE_ERROR;
532
- if (!CBS_get_u8_length_prefixed(&body, &context) ||
533
- // The request context is always empty during the handshake.
534
- CBS_len(&context) != 0 ||
535
- !CBS_get_u16_length_prefixed(&body, &extensions) ||
536
- CBS_len(&body) != 0 ||
537
- !ssl_parse_extensions(&extensions, &alert, ext_types,
538
- OPENSSL_ARRAY_SIZE(ext_types),
539
- 1 /* accept unknown */) ||
540
- (have_ca && CBS_len(&ca) == 0) ||
541
- !have_sigalgs ||
542
- !CBS_get_u16_length_prefixed(&sigalgs,
543
- &supported_signature_algorithms) ||
544
- CBS_len(&supported_signature_algorithms) == 0 ||
545
- !tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
546
- ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
547
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
548
- return ssl_hs_error;
549
- }
477
+ bool have_sigalgs = false, have_ca = false;
478
+ CBS sigalgs, ca;
479
+ const SSL_EXTENSION_TYPE ext_types[] = {
480
+ {TLSEXT_TYPE_signature_algorithms, &have_sigalgs, &sigalgs},
481
+ {TLSEXT_TYPE_certificate_authorities, &have_ca, &ca},
482
+ };
550
483
 
551
- if (have_ca) {
552
- hs->ca_names = ssl_parse_client_CA_list(ssl, &alert, &ca);
553
- if (!hs->ca_names) {
554
- ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
555
- return ssl_hs_error;
556
- }
557
- } else {
558
- hs->ca_names.reset(sk_CRYPTO_BUFFER_new_null());
559
- if (!hs->ca_names) {
560
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
561
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
562
- return ssl_hs_error;
563
- }
564
- }
565
- } else {
566
- CBS body = msg.body, context, supported_signature_algorithms;
567
- if (!CBS_get_u8_length_prefixed(&body, &context) ||
568
- // The request context is always empty during the handshake.
569
- CBS_len(&context) != 0 ||
570
- !CBS_get_u16_length_prefixed(&body, &supported_signature_algorithms) ||
571
- CBS_len(&supported_signature_algorithms) == 0 ||
572
- !tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
573
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
574
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
575
- return ssl_hs_error;
576
- }
484
+ CBS body = msg.body, context, extensions, supported_signature_algorithms;
485
+ uint8_t alert = SSL_AD_DECODE_ERROR;
486
+ if (!CBS_get_u8_length_prefixed(&body, &context) ||
487
+ // The request context is always empty during the handshake.
488
+ CBS_len(&context) != 0 ||
489
+ !CBS_get_u16_length_prefixed(&body, &extensions) ||
490
+ CBS_len(&body) != 0 ||
491
+ !ssl_parse_extensions(&extensions, &alert, ext_types,
492
+ OPENSSL_ARRAY_SIZE(ext_types),
493
+ 1 /* accept unknown */) ||
494
+ (have_ca && CBS_len(&ca) == 0) ||
495
+ !have_sigalgs ||
496
+ !CBS_get_u16_length_prefixed(&sigalgs,
497
+ &supported_signature_algorithms) ||
498
+ CBS_len(&supported_signature_algorithms) == 0 ||
499
+ !tls1_parse_peer_sigalgs(hs, &supported_signature_algorithms)) {
500
+ ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
501
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
502
+ return ssl_hs_error;
503
+ }
577
504
 
578
- uint8_t alert = SSL_AD_DECODE_ERROR;
579
- hs->ca_names = ssl_parse_client_CA_list(ssl, &alert, &body);
505
+ if (have_ca) {
506
+ hs->ca_names = ssl_parse_client_CA_list(ssl, &alert, &ca);
580
507
  if (!hs->ca_names) {
581
508
  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
582
509
  return ssl_hs_error;
583
510
  }
584
-
585
- // Ignore extensions.
586
- CBS extensions;
587
- if (!CBS_get_u16_length_prefixed(&body, &extensions) ||
588
- CBS_len(&body) != 0) {
589
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
590
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
511
+ } else {
512
+ hs->ca_names.reset(sk_CRYPTO_BUFFER_new_null());
513
+ if (!hs->ca_names) {
514
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
515
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
591
516
  return ssl_hs_error;
592
517
  }
593
518
  }
@@ -672,21 +597,14 @@ static enum ssl_hs_wait_t do_read_server_finished(SSL_HANDSHAKE *hs) {
672
597
  static enum ssl_hs_wait_t do_send_end_of_early_data(SSL_HANDSHAKE *hs) {
673
598
  SSL *const ssl = hs->ssl;
674
599
 
675
- if (ssl->early_data_accepted) {
600
+ if (ssl->s3->early_data_accepted) {
676
601
  hs->can_early_write = false;
677
- if (ssl_is_draft21(ssl->version)) {
678
- ScopedCBB cbb;
679
- CBB body;
680
- if (!ssl->method->init_message(ssl, cbb.get(), &body,
681
- SSL3_MT_END_OF_EARLY_DATA) ||
682
- !ssl_add_message_cbb(ssl, cbb.get())) {
683
- return ssl_hs_error;
684
- }
685
- } else {
686
- if (!ssl->method->add_alert(ssl, SSL3_AL_WARNING,
687
- TLS1_AD_END_OF_EARLY_DATA)) {
688
- return ssl_hs_error;
689
- }
602
+ ScopedCBB cbb;
603
+ CBB body;
604
+ if (!ssl->method->init_message(ssl, cbb.get(), &body,
605
+ SSL3_MT_END_OF_EARLY_DATA) ||
606
+ !ssl_add_message_cbb(ssl, cbb.get())) {
607
+ return ssl_hs_error;
690
608
  }
691
609
  }
692
610
 
@@ -913,8 +831,7 @@ int tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
913
831
  CBS body = msg.body, ticket_nonce, ticket, extensions;
914
832
  if (!CBS_get_u32(&body, &server_timeout) ||
915
833
  !CBS_get_u32(&body, &session->ticket_age_add) ||
916
- (ssl_is_draft21(ssl->version) &&
917
- !CBS_get_u8_length_prefixed(&body, &ticket_nonce)) ||
834
+ !CBS_get_u8_length_prefixed(&body, &ticket_nonce) ||
918
835
  !CBS_get_u16_length_prefixed(&body, &ticket) ||
919
836
  !CBS_stow(&ticket, &session->tlsext_tick, &session->tlsext_ticklen) ||
920
837
  !CBS_get_u16_length_prefixed(&body, &extensions) ||
@@ -937,11 +854,8 @@ int tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
937
854
  // Parse out the extensions.
938
855
  bool have_early_data_info = false;
939
856
  CBS early_data_info;
940
- uint16_t ext_id = ssl_is_draft21(ssl->version)
941
- ? TLSEXT_TYPE_early_data
942
- : TLSEXT_TYPE_ticket_early_data_info;
943
857
  const SSL_EXTENSION_TYPE ext_types[] = {
944
- {ext_id, &have_early_data_info, &early_data_info},
858
+ {TLSEXT_TYPE_early_data, &have_early_data_info, &early_data_info},
945
859
  };
946
860
 
947
861
  uint8_t alert = SSL_AD_DECODE_ERROR;
@@ -66,13 +66,11 @@ int tls13_init_early_key_schedule(SSL_HANDSHAKE *hs, const uint8_t *psk,
66
66
  psk_len, hs->secret, hs->hash_len);
67
67
  }
68
68
 
69
- static int hkdf_expand_label(uint8_t *out, uint16_t version,
70
- const EVP_MD *digest, const uint8_t *secret,
71
- size_t secret_len, const uint8_t *label,
72
- size_t label_len, const uint8_t *hash,
73
- size_t hash_len, size_t len) {
74
- const char *kTLS13LabelVersion =
75
- ssl_is_draft21(version) ? "tls13 " : "TLS 1.3, ";
69
+ static int hkdf_expand_label(uint8_t *out, const EVP_MD *digest,
70
+ const uint8_t *secret, size_t secret_len,
71
+ const char *label, size_t label_len,
72
+ const uint8_t *hash, size_t hash_len, size_t len) {
73
+ static const char kTLS13LabelVersion[] = "tls13 ";
76
74
 
77
75
  ScopedCBB cbb;
78
76
  CBB child;
@@ -84,7 +82,7 @@ static int hkdf_expand_label(uint8_t *out, uint16_t version,
84
82
  !CBB_add_u8_length_prefixed(cbb.get(), &child) ||
85
83
  !CBB_add_bytes(&child, (const uint8_t *)kTLS13LabelVersion,
86
84
  strlen(kTLS13LabelVersion)) ||
87
- !CBB_add_bytes(&child, label, label_len) ||
85
+ !CBB_add_bytes(&child, (const uint8_t *)label, label_len) ||
88
86
  !CBB_add_u8_length_prefixed(cbb.get(), &child) ||
89
87
  !CBB_add_bytes(&child, hash, hash_len) ||
90
88
  !CBB_finish(cbb.get(), &hkdf_label, &hkdf_label_len)) {
@@ -101,24 +99,18 @@ static const char kTLS13LabelDerived[] = "derived";
101
99
 
102
100
  int tls13_advance_key_schedule(SSL_HANDSHAKE *hs, const uint8_t *in,
103
101
  size_t len) {
104
- SSL *const ssl = hs->ssl;
105
-
106
- // Draft 18 does not include the extra Derive-Secret step.
107
- if (ssl_is_draft21(ssl->version)) {
108
- uint8_t derive_context[EVP_MAX_MD_SIZE];
109
- unsigned derive_context_len;
110
- if (!EVP_Digest(nullptr, 0, derive_context, &derive_context_len,
111
- hs->transcript.Digest(), nullptr)) {
112
- return 0;
113
- }
102
+ uint8_t derive_context[EVP_MAX_MD_SIZE];
103
+ unsigned derive_context_len;
104
+ if (!EVP_Digest(nullptr, 0, derive_context, &derive_context_len,
105
+ hs->transcript.Digest(), nullptr)) {
106
+ return 0;
107
+ }
114
108
 
115
- if (!hkdf_expand_label(hs->secret, ssl->version, hs->transcript.Digest(),
116
- hs->secret, hs->hash_len,
117
- (const uint8_t *)kTLS13LabelDerived,
118
- strlen(kTLS13LabelDerived), derive_context,
119
- derive_context_len, hs->hash_len)) {
120
- return 0;
121
- }
109
+ if (!hkdf_expand_label(hs->secret, hs->transcript.Digest(), hs->secret,
110
+ hs->hash_len, kTLS13LabelDerived,
111
+ strlen(kTLS13LabelDerived), derive_context,
112
+ derive_context_len, hs->hash_len)) {
113
+ return 0;
122
114
  }
123
115
 
124
116
  return HKDF_extract(hs->secret, &hs->hash_len, hs->transcript.Digest(), in,
@@ -129,17 +121,16 @@ int tls13_advance_key_schedule(SSL_HANDSHAKE *hs, const uint8_t *in,
129
121
  // with the given label and the current base secret and most recently-saved
130
122
  // handshake context. It returns one on success and zero on error.
131
123
  static int derive_secret(SSL_HANDSHAKE *hs, uint8_t *out, size_t len,
132
- const uint8_t *label, size_t label_len) {
124
+ const char *label, size_t label_len) {
133
125
  uint8_t context_hash[EVP_MAX_MD_SIZE];
134
126
  size_t context_hash_len;
135
127
  if (!hs->transcript.GetHash(context_hash, &context_hash_len)) {
136
128
  return 0;
137
129
  }
138
130
 
139
- return hkdf_expand_label(out, SSL_get_session(hs->ssl)->ssl_version,
140
- hs->transcript.Digest(), hs->secret, hs->hash_len,
141
- label, label_len, context_hash, context_hash_len,
142
- len);
131
+ return hkdf_expand_label(out, hs->transcript.Digest(), hs->secret,
132
+ hs->hash_len, label, label_len, context_hash,
133
+ context_hash_len, len);
143
134
  }
144
135
 
145
136
  int tls13_set_traffic_key(SSL *ssl, enum evp_aead_direction_t direction,
@@ -166,18 +157,16 @@ int tls13_set_traffic_key(SSL *ssl, enum evp_aead_direction_t direction,
166
157
  // Derive the key.
167
158
  size_t key_len = EVP_AEAD_key_length(aead);
168
159
  uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
169
- if (!hkdf_expand_label(key, session->ssl_version, digest, traffic_secret,
170
- traffic_secret_len, (const uint8_t *)"key", 3, NULL, 0,
171
- key_len)) {
160
+ if (!hkdf_expand_label(key, digest, traffic_secret, traffic_secret_len, "key",
161
+ 3, NULL, 0, key_len)) {
172
162
  return 0;
173
163
  }
174
164
 
175
165
  // Derive the IV.
176
166
  size_t iv_len = EVP_AEAD_nonce_length(aead);
177
167
  uint8_t iv[EVP_AEAD_MAX_NONCE_LENGTH];
178
- if (!hkdf_expand_label(iv, session->ssl_version, digest, traffic_secret,
179
- traffic_secret_len, (const uint8_t *)"iv", 2, NULL, 0,
180
- iv_len)) {
168
+ if (!hkdf_expand_label(iv, digest, traffic_secret, traffic_secret_len, "iv",
169
+ 2, NULL, 0, iv_len)) {
181
170
  return 0;
182
171
  }
183
172
 
@@ -213,63 +202,42 @@ int tls13_set_traffic_key(SSL *ssl, enum evp_aead_direction_t direction,
213
202
  return 1;
214
203
  }
215
204
 
216
- static const char kTLS13LabelExporter[] = "exporter master secret";
217
- static const char kTLS13LabelEarlyExporter[] = "early exporter master secret";
218
-
219
- static const char kTLS13LabelClientEarlyTraffic[] =
220
- "client early traffic secret";
221
- static const char kTLS13LabelClientHandshakeTraffic[] =
222
- "client handshake traffic secret";
223
- static const char kTLS13LabelServerHandshakeTraffic[] =
224
- "server handshake traffic secret";
225
- static const char kTLS13LabelClientApplicationTraffic[] =
226
- "client application traffic secret";
227
- static const char kTLS13LabelServerApplicationTraffic[] =
228
- "server application traffic secret";
229
-
230
- static const char kTLS13Draft21LabelExporter[] = "exp master";
231
- static const char kTLS13Draft21LabelEarlyExporter[] = "e exp master";
232
-
233
- static const char kTLS13Draft21LabelClientEarlyTraffic[] = "c e traffic";
234
- static const char kTLS13Draft21LabelClientHandshakeTraffic[] = "c hs traffic";
235
- static const char kTLS13Draft21LabelServerHandshakeTraffic[] = "s hs traffic";
236
- static const char kTLS13Draft21LabelClientApplicationTraffic[] = "c ap traffic";
237
- static const char kTLS13Draft21LabelServerApplicationTraffic[] = "s ap traffic";
205
+
206
+ static const char kTLS13LabelExporter[] = "exp master";
207
+ static const char kTLS13LabelEarlyExporter[] = "e exp master";
208
+
209
+ static const char kTLS13LabelClientEarlyTraffic[] = "c e traffic";
210
+ static const char kTLS13LabelClientHandshakeTraffic[] = "c hs traffic";
211
+ static const char kTLS13LabelServerHandshakeTraffic[] = "s hs traffic";
212
+ static const char kTLS13LabelClientApplicationTraffic[] = "c ap traffic";
213
+ static const char kTLS13LabelServerApplicationTraffic[] = "s ap traffic";
238
214
 
239
215
  int tls13_derive_early_secrets(SSL_HANDSHAKE *hs) {
240
216
  SSL *const ssl = hs->ssl;
241
- uint16_t version = SSL_get_session(ssl)->ssl_version;
242
-
243
- const char *early_traffic_label = ssl_is_draft21(version)
244
- ? kTLS13Draft21LabelClientEarlyTraffic
245
- : kTLS13LabelClientEarlyTraffic;
246
- const char *early_exporter_label = ssl_is_draft21(version)
247
- ? kTLS13Draft21LabelEarlyExporter
248
- : kTLS13LabelEarlyExporter;
249
- return derive_secret(hs, hs->early_traffic_secret, hs->hash_len,
250
- (const uint8_t *)early_traffic_label,
251
- strlen(early_traffic_label)) &&
252
- ssl_log_secret(ssl, "CLIENT_EARLY_TRAFFIC_SECRET",
253
- hs->early_traffic_secret, hs->hash_len) &&
254
- derive_secret(hs, ssl->s3->early_exporter_secret, hs->hash_len,
255
- (const uint8_t *)early_exporter_label,
256
- strlen(early_exporter_label));
217
+ if (!derive_secret(hs, hs->early_traffic_secret, hs->hash_len,
218
+ kTLS13LabelClientEarlyTraffic,
219
+ strlen(kTLS13LabelClientEarlyTraffic)) ||
220
+ !ssl_log_secret(ssl, "CLIENT_EARLY_TRAFFIC_SECRET",
221
+ hs->early_traffic_secret, hs->hash_len) ||
222
+ !derive_secret(hs, ssl->s3->early_exporter_secret, hs->hash_len,
223
+ kTLS13LabelEarlyExporter,
224
+ strlen(kTLS13LabelEarlyExporter))) {
225
+ return 0;
226
+ }
227
+ ssl->s3->early_exporter_secret_len = hs->hash_len;
228
+ return 1;
257
229
  }
258
230
 
259
231
  int tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs) {
260
232
  SSL *const ssl = hs->ssl;
261
- const char *client_label = ssl_is_draft21(ssl->version)
262
- ? kTLS13Draft21LabelClientHandshakeTraffic
263
- : kTLS13LabelClientHandshakeTraffic;
264
- const char *server_label = ssl_is_draft21(ssl->version)
265
- ? kTLS13Draft21LabelServerHandshakeTraffic
266
- : kTLS13LabelServerHandshakeTraffic;
267
233
  return derive_secret(hs, hs->client_handshake_secret, hs->hash_len,
268
- (const uint8_t *)client_label, strlen(client_label)) &&
234
+ kTLS13LabelClientHandshakeTraffic,
235
+ strlen(kTLS13LabelClientHandshakeTraffic)) &&
269
236
  ssl_log_secret(ssl, "CLIENT_HANDSHAKE_TRAFFIC_SECRET",
270
237
  hs->client_handshake_secret, hs->hash_len) &&
271
238
  derive_secret(hs, hs->server_handshake_secret, hs->hash_len,
272
- (const uint8_t *)server_label, strlen(server_label)) &&
239
+ kTLS13LabelServerHandshakeTraffic,
240
+ strlen(kTLS13LabelServerHandshakeTraffic)) &&
273
241
  ssl_log_secret(ssl, "SERVER_HANDSHAKE_TRAFFIC_SECRET",
274
242
  hs->server_handshake_secret, hs->hash_len);
275
243
  }
@@ -277,33 +245,23 @@ int tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs) {
277
245
  int tls13_derive_application_secrets(SSL_HANDSHAKE *hs) {
278
246
  SSL *const ssl = hs->ssl;
279
247
  ssl->s3->exporter_secret_len = hs->hash_len;
280
- const char *client_label = ssl_is_draft21(ssl->version)
281
- ? kTLS13Draft21LabelClientApplicationTraffic
282
- : kTLS13LabelClientApplicationTraffic;
283
- const char *server_label = ssl_is_draft21(ssl->version)
284
- ? kTLS13Draft21LabelServerApplicationTraffic
285
- : kTLS13LabelServerApplicationTraffic;
286
- const char *exporter_label = ssl_is_draft21(ssl->version)
287
- ? kTLS13Draft21LabelExporter
288
- : kTLS13LabelExporter;
289
248
  return derive_secret(hs, hs->client_traffic_secret_0, hs->hash_len,
290
- (const uint8_t *)client_label, strlen(client_label)) &&
249
+ kTLS13LabelClientApplicationTraffic,
250
+ strlen(kTLS13LabelClientApplicationTraffic)) &&
291
251
  ssl_log_secret(ssl, "CLIENT_TRAFFIC_SECRET_0",
292
252
  hs->client_traffic_secret_0, hs->hash_len) &&
293
253
  derive_secret(hs, hs->server_traffic_secret_0, hs->hash_len,
294
- (const uint8_t *)server_label, strlen(server_label)) &&
254
+ kTLS13LabelServerApplicationTraffic,
255
+ strlen(kTLS13LabelServerApplicationTraffic)) &&
295
256
  ssl_log_secret(ssl, "SERVER_TRAFFIC_SECRET_0",
296
257
  hs->server_traffic_secret_0, hs->hash_len) &&
297
258
  derive_secret(hs, ssl->s3->exporter_secret, hs->hash_len,
298
- (const uint8_t *)exporter_label,
299
- strlen(exporter_label)) &&
259
+ kTLS13LabelExporter, strlen(kTLS13LabelExporter)) &&
300
260
  ssl_log_secret(ssl, "EXPORTER_SECRET", ssl->s3->exporter_secret,
301
261
  hs->hash_len);
302
262
  }
303
263
 
304
- static const char kTLS13LabelApplicationTraffic[] =
305
- "application traffic secret";
306
- static const char kTLS13Draft21LabelApplicationTraffic[] = "traffic upd";
264
+ static const char kTLS13LabelApplicationTraffic[] = "traffic upd";
307
265
 
308
266
  int tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction) {
309
267
  uint8_t *secret;
@@ -316,35 +274,27 @@ int tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction) {
316
274
  secret_len = ssl->s3->write_traffic_secret_len;
317
275
  }
318
276
 
319
- const char *traffic_label = ssl_is_draft21(ssl->version)
320
- ? kTLS13Draft21LabelApplicationTraffic
321
- : kTLS13LabelApplicationTraffic;
322
-
323
277
  const EVP_MD *digest = ssl_session_get_digest(SSL_get_session(ssl));
324
- if (!hkdf_expand_label(secret, ssl->version, digest, secret, secret_len,
325
- (const uint8_t *)traffic_label, strlen(traffic_label),
326
- NULL, 0, secret_len)) {
278
+ if (!hkdf_expand_label(
279
+ secret, digest, secret, secret_len, kTLS13LabelApplicationTraffic,
280
+ strlen(kTLS13LabelApplicationTraffic), NULL, 0, secret_len)) {
327
281
  return 0;
328
282
  }
329
283
 
330
284
  return tls13_set_traffic_key(ssl, direction, secret, secret_len);
331
285
  }
332
286
 
333
- static const char kTLS13LabelResumption[] = "resumption master secret";
334
- static const char kTLS13Draft21LabelResumption[] = "res master";
287
+ static const char kTLS13LabelResumption[] = "res master";
335
288
 
336
289
  int tls13_derive_resumption_secret(SSL_HANDSHAKE *hs) {
337
290
  if (hs->hash_len > SSL_MAX_MASTER_KEY_LENGTH) {
338
291
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
339
292
  return 0;
340
293
  }
341
- const char *resumption_label = ssl_is_draft21(hs->ssl->version)
342
- ? kTLS13Draft21LabelResumption
343
- : kTLS13LabelResumption;
344
294
  hs->new_session->master_key_length = hs->hash_len;
345
- return derive_secret(
346
- hs, hs->new_session->master_key, hs->new_session->master_key_length,
347
- (const uint8_t *)resumption_label, strlen(resumption_label));
295
+ return derive_secret(hs, hs->new_session->master_key,
296
+ hs->new_session->master_key_length,
297
+ kTLS13LabelResumption, strlen(kTLS13LabelResumption));
348
298
  }
349
299
 
350
300
  static const char kTLS13LabelFinished[] = "finished";
@@ -357,8 +307,7 @@ static int tls13_verify_data(const EVP_MD *digest, uint16_t version,
357
307
  uint8_t *context, size_t context_len) {
358
308
  uint8_t key[EVP_MAX_MD_SIZE];
359
309
  unsigned len;
360
- if (!hkdf_expand_label(key, version, digest, secret, hash_len,
361
- (const uint8_t *)kTLS13LabelFinished,
310
+ if (!hkdf_expand_label(key, digest, secret, hash_len, kTLS13LabelFinished,
362
311
  strlen(kTLS13LabelFinished), NULL, 0, hash_len) ||
363
312
  HMAC(digest, key, hash_len, context, context_len, out, &len) == NULL) {
364
313
  return 0;
@@ -390,37 +339,23 @@ int tls13_finished_mac(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len,
390
339
  static const char kTLS13LabelResumptionPSK[] = "resumption";
391
340
 
392
341
  bool tls13_derive_session_psk(SSL_SESSION *session, Span<const uint8_t> nonce) {
393
- if (!ssl_is_draft21(session->ssl_version)) {
394
- return true;
395
- }
396
-
397
342
  const EVP_MD *digest = ssl_session_get_digest(session);
398
- return hkdf_expand_label(session->master_key, session->ssl_version, digest,
399
- session->master_key, session->master_key_length,
400
- (const uint8_t *)kTLS13LabelResumptionPSK,
343
+ return hkdf_expand_label(session->master_key, digest, session->master_key,
344
+ session->master_key_length, kTLS13LabelResumptionPSK,
401
345
  strlen(kTLS13LabelResumptionPSK), nonce.data(),
402
346
  nonce.size(), session->master_key_length);
403
347
  }
404
348
 
405
349
  static const char kTLS13LabelExportKeying[] = "exporter";
406
350
 
407
- int tls13_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
408
- const char *label, size_t label_len,
409
- const uint8_t *context_in,
410
- size_t context_in_len, int use_context) {
411
- const uint8_t *context = NULL;
412
- size_t context_len = 0;
413
- if (use_context) {
414
- context = context_in;
415
- context_len = context_in_len;
416
- }
417
-
418
- if (!ssl_is_draft21(ssl->version)) {
419
- const EVP_MD *digest = ssl_session_get_digest(SSL_get_session(ssl));
420
- return hkdf_expand_label(
421
- out, ssl->version, digest, ssl->s3->exporter_secret,
422
- ssl->s3->exporter_secret_len, (const uint8_t *)label, label_len,
423
- context, context_len, out_len);
351
+ int tls13_export_keying_material(SSL *ssl, Span<uint8_t> out,
352
+ Span<const uint8_t> secret,
353
+ Span<const char> label,
354
+ Span<const uint8_t> context) {
355
+ if (secret.empty()) {
356
+ assert(0);
357
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
358
+ return 0;
424
359
  }
425
360
 
426
361
  const EVP_MD *digest = ssl_session_get_digest(SSL_get_session(ssl));
@@ -431,22 +366,20 @@ int tls13_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
431
366
  unsigned hash_len;
432
367
  unsigned export_context_len;
433
368
  unsigned derived_secret_len = EVP_MD_size(digest);
434
- if (!EVP_Digest(context, context_len, hash, &hash_len, digest, NULL) ||
435
- !EVP_Digest(NULL, 0, export_context, &export_context_len, digest, NULL)) {
436
- return 0;
437
- }
438
- return hkdf_expand_label(
439
- derived_secret, ssl->version, digest, ssl->s3->exporter_secret,
440
- ssl->s3->exporter_secret_len, (const uint8_t *)label, label_len,
441
- export_context, export_context_len, derived_secret_len) &&
442
- hkdf_expand_label(
443
- out, ssl->version, digest, derived_secret, derived_secret_len,
444
- (const uint8_t *)kTLS13LabelExportKeying,
445
- strlen(kTLS13LabelExportKeying), hash, hash_len, out_len);
369
+ return EVP_Digest(context.data(), context.size(), hash, &hash_len, digest,
370
+ nullptr) &&
371
+ EVP_Digest(nullptr, 0, export_context, &export_context_len, digest,
372
+ nullptr) &&
373
+ hkdf_expand_label(derived_secret, digest, secret.data(), secret.size(),
374
+ label.data(), label.size(), export_context,
375
+ export_context_len, derived_secret_len) &&
376
+ hkdf_expand_label(out.data(), digest, derived_secret,
377
+ derived_secret_len, kTLS13LabelExportKeying,
378
+ strlen(kTLS13LabelExportKeying), hash, hash_len,
379
+ out.size());
446
380
  }
447
381
 
448
- static const char kTLS13LabelPSKBinder[] = "resumption psk binder key";
449
- static const char kTLS13Draft21LabelPSKBinder[] = "res binder";
382
+ static const char kTLS13LabelPSKBinder[] = "res binder";
450
383
 
451
384
  static int tls13_psk_binder(uint8_t *out, uint16_t version,
452
385
  const EVP_MD *digest, uint8_t *psk, size_t psk_len,
@@ -464,14 +397,11 @@ static int tls13_psk_binder(uint8_t *out, uint16_t version,
464
397
  NULL, 0)) {
465
398
  return 0;
466
399
  }
467
- const char *binder_label = ssl_is_draft21(version)
468
- ? kTLS13Draft21LabelPSKBinder
469
- : kTLS13LabelPSKBinder;
470
400
 
471
401
  uint8_t binder_key[EVP_MAX_MD_SIZE] = {0};
472
402
  size_t len;
473
- if (!hkdf_expand_label(binder_key, version, digest, early_secret, hash_len,
474
- (const uint8_t *)binder_label, strlen(binder_label),
403
+ if (!hkdf_expand_label(binder_key, digest, early_secret, hash_len,
404
+ kTLS13LabelPSKBinder, strlen(kTLS13LabelPSKBinder),
475
405
  binder_context, binder_context_len, hash_len) ||
476
406
  !tls13_verify_data(digest, version, out, &len, binder_key, hash_len,
477
407
  context, context_len)) {