grpc 1.24.0 → 1.25.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (505) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
  113. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  114. data/src/core/lib/iomgr/executor.cc +4 -2
  115. data/src/core/lib/iomgr/executor.h +3 -0
  116. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  117. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  118. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  119. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  120. data/src/core/lib/iomgr/resource_quota.h +13 -9
  121. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  122. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  123. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  124. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  125. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  126. data/src/core/lib/iomgr/tcp_server.h +1 -4
  127. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  128. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  129. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  130. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  131. data/src/core/lib/iomgr/udp_server.cc +3 -2
  132. data/src/core/lib/iomgr/udp_server.h +6 -12
  133. data/src/core/lib/json/json.h +1 -1
  134. data/src/core/lib/json/json_string.cc +2 -2
  135. data/src/core/lib/profiling/basic_timers.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  137. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  138. data/src/core/lib/security/credentials/credentials.h +4 -20
  139. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  141. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  142. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  143. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  144. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  145. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  146. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  147. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  148. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  149. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  150. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  152. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  153. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  154. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  155. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  156. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  157. data/src/core/lib/slice/slice.cc +2 -10
  158. data/src/core/lib/slice/slice_hash_table.h +4 -6
  159. data/src/core/lib/slice/slice_intern.cc +42 -39
  160. data/src/core/lib/slice/slice_internal.h +3 -3
  161. data/src/core/lib/slice/slice_utils.h +21 -4
  162. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  163. data/src/core/lib/surface/call.cc +3 -3
  164. data/src/core/lib/surface/channel.cc +7 -0
  165. data/src/core/lib/surface/completion_queue.cc +12 -11
  166. data/src/core/lib/surface/completion_queue.h +4 -2
  167. data/src/core/lib/surface/init.cc +1 -0
  168. data/src/core/lib/surface/lame_client.cc +33 -18
  169. data/src/core/lib/surface/server.cc +77 -76
  170. data/src/core/lib/surface/version.cc +1 -1
  171. data/src/core/lib/transport/byte_stream.h +3 -7
  172. data/src/core/lib/transport/connectivity_state.cc +112 -98
  173. data/src/core/lib/transport/connectivity_state.h +100 -50
  174. data/src/core/lib/transport/static_metadata.cc +276 -288
  175. data/src/core/lib/transport/static_metadata.h +73 -76
  176. data/src/core/lib/transport/status_conversion.cc +1 -1
  177. data/src/core/lib/transport/status_metadata.cc +1 -1
  178. data/src/core/lib/transport/transport.cc +2 -2
  179. data/src/core/lib/transport/transport.h +12 -4
  180. data/src/core/lib/transport/transport_op_string.cc +14 -11
  181. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  183. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  184. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  185. data/src/core/tsi/fake_transport_security.cc +7 -5
  186. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  187. data/src/core/tsi/local_transport_security.cc +8 -6
  188. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  189. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  191. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  192. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  193. data/src/core/tsi/ssl_transport_security.cc +12 -12
  194. data/src/core/tsi/ssl_transport_security.h +2 -2
  195. data/src/core/tsi/transport_security_grpc.cc +7 -0
  196. data/src/core/tsi/transport_security_grpc.h +6 -0
  197. data/src/ruby/ext/grpc/extconf.rb +1 -0
  198. data/src/ruby/ext/grpc/rb_call.c +1 -1
  199. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  200. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  201. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  202. data/src/ruby/lib/grpc/version.rb +1 -1
  203. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  204. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  205. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  206. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  207. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  208. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  209. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  210. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  211. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  212. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  213. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  214. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  215. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  216. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  217. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  218. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  219. data/third_party/boringssl/crypto/bio/file.c +5 -2
  220. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  221. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  222. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  223. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  224. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  225. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  226. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  227. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  228. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  229. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  230. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  233. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  234. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  235. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  236. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  237. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  238. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  239. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  240. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  241. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  242. data/third_party/boringssl/crypto/crypto.c +39 -22
  243. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  244. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  245. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  246. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  247. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  248. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  249. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  250. data/third_party/boringssl/crypto/err/err.c +2 -0
  251. data/third_party/boringssl/crypto/err/internal.h +2 -2
  252. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  253. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  254. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  255. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  256. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  257. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  258. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  259. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  260. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  261. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  262. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  264. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  265. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  266. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  267. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  268. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  269. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  270. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  271. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  273. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  275. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  276. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  278. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  279. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  281. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  282. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  283. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  284. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  286. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  287. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  291. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  292. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  293. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  294. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  297. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  298. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  299. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  300. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  304. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  307. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  308. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  309. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  310. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  311. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  312. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  313. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  314. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  315. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  316. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  318. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  319. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  320. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  321. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  322. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  324. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  325. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  326. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  329. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  330. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  331. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  334. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  335. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  336. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  337. data/third_party/boringssl/crypto/internal.h +95 -20
  338. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  339. data/third_party/boringssl/crypto/mem.c +39 -2
  340. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  341. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  342. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  343. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  344. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  345. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  347. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  348. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  349. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  351. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  352. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  353. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  354. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  355. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  356. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  357. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  358. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  359. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  360. data/third_party/boringssl/crypto/thread_none.c +2 -2
  361. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  362. data/third_party/boringssl/crypto/thread_win.c +38 -19
  363. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  364. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  365. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  366. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  367. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  368. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  369. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  370. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  372. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  373. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  374. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  375. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  376. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  377. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  378. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  379. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  380. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  381. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  382. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  383. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  384. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  387. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  389. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  390. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  391. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  392. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  393. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  395. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  396. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  397. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  398. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  399. data/third_party/boringssl/include/openssl/aead.h +45 -19
  400. data/third_party/boringssl/include/openssl/aes.h +32 -7
  401. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  402. data/third_party/boringssl/include/openssl/base.h +120 -6
  403. data/third_party/boringssl/include/openssl/base64.h +4 -1
  404. data/third_party/boringssl/include/openssl/bio.h +112 -81
  405. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  406. data/third_party/boringssl/include/openssl/bn.h +55 -29
  407. data/third_party/boringssl/include/openssl/buf.h +2 -2
  408. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  409. data/third_party/boringssl/include/openssl/cast.h +2 -2
  410. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  411. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  412. data/third_party/boringssl/include/openssl/conf.h +3 -6
  413. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  414. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  415. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  416. data/third_party/boringssl/include/openssl/dh.h +3 -2
  417. data/third_party/boringssl/include/openssl/digest.h +21 -7
  418. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  419. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  420. data/third_party/boringssl/include/openssl/ec.h +25 -21
  421. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  422. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  423. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  424. data/third_party/boringssl/include/openssl/engine.h +4 -4
  425. data/third_party/boringssl/include/openssl/err.h +3 -0
  426. data/third_party/boringssl/include/openssl/evp.h +199 -42
  427. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  428. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  429. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  430. data/third_party/boringssl/include/openssl/md4.h +6 -4
  431. data/third_party/boringssl/include/openssl/md5.h +6 -4
  432. data/third_party/boringssl/include/openssl/mem.h +6 -2
  433. data/third_party/boringssl/include/openssl/nid.h +3 -0
  434. data/third_party/boringssl/include/openssl/obj.h +3 -0
  435. data/third_party/boringssl/include/openssl/pem.h +102 -64
  436. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  437. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  438. data/third_party/boringssl/include/openssl/pool.h +13 -2
  439. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  440. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  441. data/third_party/boringssl/include/openssl/sha.h +40 -28
  442. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  443. data/third_party/boringssl/include/openssl/span.h +17 -9
  444. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  445. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  446. data/third_party/boringssl/include/openssl/stack.h +134 -77
  447. data/third_party/boringssl/include/openssl/thread.h +1 -1
  448. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  449. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  450. data/third_party/boringssl/include/openssl/x509.h +28 -3
  451. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  452. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  453. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  454. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  455. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  456. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  457. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  458. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  459. data/third_party/boringssl/ssl/handoff.cc +295 -91
  460. data/third_party/boringssl/ssl/handshake.cc +133 -72
  461. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  462. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  463. data/third_party/boringssl/ssl/internal.h +1413 -928
  464. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  465. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  466. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  467. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  468. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  469. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  470. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  471. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  472. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  473. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  474. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  475. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  476. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  477. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  478. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  479. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  480. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  481. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  482. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  483. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  484. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  485. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  486. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  487. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  488. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  489. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  490. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  491. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  492. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  493. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  494. data/third_party/upb/upb/port_def.inc +1 -1
  495. data/third_party/upb/upb/table.c +2 -1
  496. metadata +72 -44
  497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  498. data/src/core/lib/gpr/mpscq.cc +0 -117
  499. data/src/core/lib/gpr/mpscq.h +0 -88
  500. data/src/core/lib/gprpp/abstract.h +0 -47
  501. data/src/core/lib/gprpp/pair.h +0 -38
  502. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  503. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  504. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  505. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -170,34 +170,10 @@
170
170
  #include "../crypto/internal.h"
171
171
 
172
172
 
173
- namespace bssl {
174
-
175
- enum ssl_server_hs_state_t {
176
- state_start_accept = 0,
177
- state_read_client_hello,
178
- state_select_certificate,
179
- state_tls13,
180
- state_select_parameters,
181
- state_send_server_hello,
182
- state_send_server_certificate,
183
- state_send_server_key_exchange,
184
- state_send_server_hello_done,
185
- state_read_client_certificate,
186
- state_verify_client_certificate,
187
- state_read_client_key_exchange,
188
- state_read_client_certificate_verify,
189
- state_read_change_cipher_spec,
190
- state_process_change_cipher_spec,
191
- state_read_next_proto,
192
- state_read_channel_id,
193
- state_read_client_finished,
194
- state_send_server_finished,
195
- state_finish_server_handshake,
196
- state_done,
197
- };
198
-
199
- int ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello,
200
- uint16_t id) {
173
+ BSSL_NAMESPACE_BEGIN
174
+
175
+ bool ssl_client_cipher_list_contains_cipher(
176
+ const SSL_CLIENT_HELLO *client_hello, uint16_t id) {
201
177
  CBS cipher_suites;
202
178
  CBS_init(&cipher_suites, client_hello->cipher_suites,
203
179
  client_hello->cipher_suites_len);
@@ -205,19 +181,19 @@ int ssl_client_cipher_list_contains_cipher(const SSL_CLIENT_HELLO *client_hello,
205
181
  while (CBS_len(&cipher_suites) > 0) {
206
182
  uint16_t got_id;
207
183
  if (!CBS_get_u16(&cipher_suites, &got_id)) {
208
- return 0;
184
+ return false;
209
185
  }
210
186
 
211
187
  if (got_id == id) {
212
- return 1;
188
+ return true;
213
189
  }
214
190
  }
215
191
 
216
- return 0;
192
+ return false;
217
193
  }
218
194
 
219
- static int negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
220
- const SSL_CLIENT_HELLO *client_hello) {
195
+ static bool negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
196
+ const SSL_CLIENT_HELLO *client_hello) {
221
197
  SSL *const ssl = hs->ssl;
222
198
  assert(!ssl->s3->have_version);
223
199
  CBS supported_versions, versions;
@@ -228,7 +204,7 @@ static int negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
228
204
  CBS_len(&versions) == 0) {
229
205
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
230
206
  *out_alert = SSL_AD_DECODE_ERROR;
231
- return 0;
207
+ return false;
232
208
  }
233
209
  } else {
234
210
  // Convert the ClientHello version to an equivalent supported_versions
@@ -237,7 +213,6 @@ static int negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
237
213
  0x03, 0x03, // TLS 1.2
238
214
  0x03, 0x02, // TLS 1.1
239
215
  0x03, 0x01, // TLS 1
240
- 0x03, 0x00, // SSL 3
241
216
  };
242
217
 
243
218
  static const uint8_t kDTLSVersions[] = {
@@ -256,12 +231,10 @@ static int negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
256
231
  versions_len);
257
232
  } else {
258
233
  if (client_hello->version >= TLS1_2_VERSION) {
259
- versions_len = 8;
260
- } else if (client_hello->version >= TLS1_1_VERSION) {
261
234
  versions_len = 6;
262
- } else if (client_hello->version >= TLS1_VERSION) {
235
+ } else if (client_hello->version >= TLS1_1_VERSION) {
263
236
  versions_len = 4;
264
- } else if (client_hello->version >= SSL3_VERSION) {
237
+ } else if (client_hello->version >= TLS1_VERSION) {
265
238
  versions_len = 2;
266
239
  }
267
240
  CBS_init(&versions, kTLSVersions + sizeof(kTLSVersions) - versions_len,
@@ -270,7 +243,7 @@ static int negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
270
243
  }
271
244
 
272
245
  if (!ssl_negotiate_version(hs, out_alert, &ssl->version, &versions)) {
273
- return 0;
246
+ return false;
274
247
  }
275
248
 
276
249
  // At this point, the connection's version is known and |ssl->version| is
@@ -284,10 +257,10 @@ static int negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
284
257
  ssl_protocol_version(ssl) < hs->max_version) {
285
258
  OPENSSL_PUT_ERROR(SSL, SSL_R_INAPPROPRIATE_FALLBACK);
286
259
  *out_alert = SSL3_AD_INAPPROPRIATE_FALLBACK;
287
- return 0;
260
+ return false;
288
261
  }
289
262
 
290
- return 1;
263
+ return true;
291
264
  }
292
265
 
293
266
  static UniquePtr<STACK_OF(SSL_CIPHER)> ssl_parse_client_cipher_list(
@@ -327,11 +300,10 @@ static UniquePtr<STACK_OF(SSL_CIPHER)> ssl_parse_client_cipher_list(
327
300
  static void ssl_get_compatible_server_ciphers(SSL_HANDSHAKE *hs,
328
301
  uint32_t *out_mask_k,
329
302
  uint32_t *out_mask_a) {
330
- SSL *const ssl = hs->ssl;
331
303
  uint32_t mask_k = 0;
332
304
  uint32_t mask_a = 0;
333
305
 
334
- if (ssl_has_certificate(ssl)) {
306
+ if (ssl_has_certificate(hs)) {
335
307
  mask_a |= ssl_cipher_auth_mask_for_key(hs->local_pubkey.get());
336
308
  if (EVP_PKEY_id(hs->local_pubkey.get()) == EVP_PKEY_RSA) {
337
309
  mask_k |= SSL_kRSA;
@@ -345,7 +317,7 @@ static void ssl_get_compatible_server_ciphers(SSL_HANDSHAKE *hs,
345
317
  }
346
318
 
347
319
  // PSK requires a server callback.
348
- if (ssl->psk_server_callback != NULL) {
320
+ if (hs->config->psk_server_callback != NULL) {
349
321
  mask_k |= SSL_kPSK;
350
322
  mask_a |= SSL_aPSK;
351
323
  }
@@ -356,14 +328,14 @@ static void ssl_get_compatible_server_ciphers(SSL_HANDSHAKE *hs,
356
328
 
357
329
  static const SSL_CIPHER *ssl3_choose_cipher(
358
330
  SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello,
359
- const struct ssl_cipher_preference_list_st *server_pref) {
331
+ const SSLCipherPreferenceList *server_pref) {
360
332
  SSL *const ssl = hs->ssl;
361
- STACK_OF(SSL_CIPHER) *prio, *allow;
333
+ const STACK_OF(SSL_CIPHER) *prio, *allow;
362
334
  // in_group_flags will either be NULL, or will point to an array of bytes
363
335
  // which indicate equal-preference groups in the |prio| stack. See the
364
- // comment about |in_group_flags| in the |ssl_cipher_preference_list_st|
336
+ // comment about |in_group_flags| in the |SSLCipherPreferenceList|
365
337
  // struct.
366
- const uint8_t *in_group_flags;
338
+ const bool *in_group_flags;
367
339
  // group_min contains the minimal index so far found in a group, or -1 if no
368
340
  // such value exists yet.
369
341
  int group_min = -1;
@@ -375,13 +347,13 @@ static const SSL_CIPHER *ssl3_choose_cipher(
375
347
  }
376
348
 
377
349
  if (ssl->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
378
- prio = server_pref->ciphers;
350
+ prio = server_pref->ciphers.get();
379
351
  in_group_flags = server_pref->in_group_flags;
380
352
  allow = client_pref.get();
381
353
  } else {
382
354
  prio = client_pref.get();
383
355
  in_group_flags = NULL;
384
- allow = server_pref->ciphers;
356
+ allow = server_pref->ciphers.get();
385
357
  }
386
358
 
387
359
  uint32_t mask_k, mask_a;
@@ -399,7 +371,7 @@ static const SSL_CIPHER *ssl3_choose_cipher(
399
371
  (c->algorithm_auth & mask_a) &&
400
372
  // Check the cipher is in the |allow| list.
401
373
  sk_SSL_CIPHER_find(allow, &cipher_index, c)) {
402
- if (in_group_flags != NULL && in_group_flags[i] == 1) {
374
+ if (in_group_flags != NULL && in_group_flags[i]) {
403
375
  // This element of |prio| is in a group. Update the minimum index found
404
376
  // so far and continue looking.
405
377
  if (group_min == -1 || (size_t)group_min > cipher_index) {
@@ -413,7 +385,7 @@ static const SSL_CIPHER *ssl3_choose_cipher(
413
385
  }
414
386
  }
415
387
 
416
- if (in_group_flags != NULL && in_group_flags[i] == 0 && group_min != -1) {
388
+ if (in_group_flags != NULL && !in_group_flags[i] && group_min != -1) {
417
389
  // We are about to leave a group, but we found a match in it, so that's
418
390
  // our answer.
419
391
  return sk_SSL_CIPHER_value(allow, group_min);
@@ -425,10 +397,160 @@ static const SSL_CIPHER *ssl3_choose_cipher(
425
397
 
426
398
  static enum ssl_hs_wait_t do_start_accept(SSL_HANDSHAKE *hs) {
427
399
  ssl_do_info_callback(hs->ssl, SSL_CB_HANDSHAKE_START, 1);
428
- hs->state = state_read_client_hello;
400
+ hs->state = state12_read_client_hello;
429
401
  return ssl_hs_ok;
430
402
  }
431
403
 
404
+ // is_probably_jdk11_with_tls13 returns whether |client_hello| was probably sent
405
+ // from a JDK 11 client with both TLS 1.3 and a prior version enabled.
406
+ static bool is_probably_jdk11_with_tls13(const SSL_CLIENT_HELLO *client_hello) {
407
+ // JDK 11 ClientHellos contain a number of unusual properties which should
408
+ // limit false positives.
409
+
410
+ // JDK 11 does not support ChaCha20-Poly1305. This is unusual: many modern
411
+ // clients implement ChaCha20-Poly1305.
412
+ if (ssl_client_cipher_list_contains_cipher(
413
+ client_hello, TLS1_CK_CHACHA20_POLY1305_SHA256 & 0xffff)) {
414
+ return false;
415
+ }
416
+
417
+ // JDK 11 always sends extensions in a particular order.
418
+ constexpr uint16_t kMaxFragmentLength = 0x0001;
419
+ constexpr uint16_t kStatusRequestV2 = 0x0011;
420
+ static CONSTEXPR_ARRAY struct {
421
+ uint16_t id;
422
+ bool required;
423
+ } kJavaExtensions[] = {
424
+ {TLSEXT_TYPE_server_name, false},
425
+ {kMaxFragmentLength, false},
426
+ {TLSEXT_TYPE_status_request, false},
427
+ {TLSEXT_TYPE_supported_groups, true},
428
+ {TLSEXT_TYPE_ec_point_formats, false},
429
+ {TLSEXT_TYPE_signature_algorithms, true},
430
+ // Java always sends signature_algorithms_cert.
431
+ {TLSEXT_TYPE_signature_algorithms_cert, true},
432
+ {TLSEXT_TYPE_application_layer_protocol_negotiation, false},
433
+ {kStatusRequestV2, false},
434
+ {TLSEXT_TYPE_extended_master_secret, false},
435
+ {TLSEXT_TYPE_supported_versions, true},
436
+ {TLSEXT_TYPE_cookie, false},
437
+ {TLSEXT_TYPE_psk_key_exchange_modes, true},
438
+ {TLSEXT_TYPE_key_share, true},
439
+ {TLSEXT_TYPE_renegotiate, false},
440
+ {TLSEXT_TYPE_pre_shared_key, false},
441
+ };
442
+ Span<const uint8_t> sigalgs, sigalgs_cert;
443
+ bool has_status_request = false, has_status_request_v2 = false;
444
+ CBS extensions, supported_groups;
445
+ CBS_init(&extensions, client_hello->extensions, client_hello->extensions_len);
446
+ for (const auto &java_extension : kJavaExtensions) {
447
+ CBS copy = extensions;
448
+ uint16_t id;
449
+ if (CBS_get_u16(&copy, &id) && id == java_extension.id) {
450
+ // The next extension is the one we expected.
451
+ extensions = copy;
452
+ CBS body;
453
+ if (!CBS_get_u16_length_prefixed(&extensions, &body)) {
454
+ return false;
455
+ }
456
+ switch (id) {
457
+ case TLSEXT_TYPE_status_request:
458
+ has_status_request = true;
459
+ break;
460
+ case kStatusRequestV2:
461
+ has_status_request_v2 = true;
462
+ break;
463
+ case TLSEXT_TYPE_signature_algorithms:
464
+ sigalgs = body;
465
+ break;
466
+ case TLSEXT_TYPE_signature_algorithms_cert:
467
+ sigalgs_cert = body;
468
+ break;
469
+ case TLSEXT_TYPE_supported_groups:
470
+ supported_groups = body;
471
+ break;
472
+ }
473
+ } else if (java_extension.required) {
474
+ return false;
475
+ }
476
+ }
477
+ if (CBS_len(&extensions) != 0) {
478
+ return false;
479
+ }
480
+
481
+ // JDK 11 never advertises X25519. It is not offered by default, and
482
+ // -Djdk.tls.namedGroups=x25519 does not work. This is unusual: many modern
483
+ // clients implement X25519.
484
+ while (CBS_len(&supported_groups) > 0) {
485
+ uint16_t group;
486
+ if (!CBS_get_u16(&supported_groups, &group) ||
487
+ group == SSL_CURVE_X25519) {
488
+ return false;
489
+ }
490
+ }
491
+
492
+ if (// JDK 11 always sends the same contents in signature_algorithms and
493
+ // signature_algorithms_cert. This is unusual: signature_algorithms_cert,
494
+ // if omitted, is treated as if it were signature_algorithms.
495
+ sigalgs != sigalgs_cert ||
496
+ // When TLS 1.2 or below is enabled, JDK 11 sends status_request_v2 iff it
497
+ // sends status_request. This is unusual: status_request_v2 is not widely
498
+ // implemented.
499
+ has_status_request != has_status_request_v2) {
500
+ return false;
501
+ }
502
+
503
+ return true;
504
+ }
505
+
506
+ static bool extract_sni(SSL_HANDSHAKE *hs, uint8_t *out_alert,
507
+ const SSL_CLIENT_HELLO *client_hello) {
508
+ SSL *const ssl = hs->ssl;
509
+ CBS sni;
510
+ if (!ssl_client_hello_get_extension(client_hello, &sni,
511
+ TLSEXT_TYPE_server_name)) {
512
+ // No SNI extension to parse.
513
+ return true;
514
+ }
515
+
516
+ CBS server_name_list, host_name;
517
+ uint8_t name_type;
518
+ if (!CBS_get_u16_length_prefixed(&sni, &server_name_list) ||
519
+ !CBS_get_u8(&server_name_list, &name_type) ||
520
+ // Although the server_name extension was intended to be extensible to
521
+ // new name types and multiple names, OpenSSL 1.0.x had a bug which meant
522
+ // different name types will cause an error. Further, RFC 4366 originally
523
+ // defined syntax inextensibly. RFC 6066 corrected this mistake, but
524
+ // adding new name types is no longer feasible.
525
+ //
526
+ // Act as if the extensibility does not exist to simplify parsing.
527
+ !CBS_get_u16_length_prefixed(&server_name_list, &host_name) ||
528
+ CBS_len(&server_name_list) != 0 ||
529
+ CBS_len(&sni) != 0) {
530
+ *out_alert = SSL_AD_DECODE_ERROR;
531
+ return false;
532
+ }
533
+
534
+ if (name_type != TLSEXT_NAMETYPE_host_name ||
535
+ CBS_len(&host_name) == 0 ||
536
+ CBS_len(&host_name) > TLSEXT_MAXLEN_host_name ||
537
+ CBS_contains_zero_byte(&host_name)) {
538
+ *out_alert = SSL_AD_UNRECOGNIZED_NAME;
539
+ return false;
540
+ }
541
+
542
+ // Copy the hostname as a string.
543
+ char *raw = nullptr;
544
+ if (!CBS_strdup(&host_name, &raw)) {
545
+ *out_alert = SSL_AD_INTERNAL_ERROR;
546
+ return false;
547
+ }
548
+ ssl->s3->hostname.reset(raw);
549
+
550
+ hs->should_ack_sni = true;
551
+ return true;
552
+ }
553
+
432
554
  static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
433
555
  SSL *const ssl = hs->ssl;
434
556
 
@@ -441,10 +563,6 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
441
563
  return ssl_hs_error;
442
564
  }
443
565
 
444
- if (ssl->handoff) {
445
- return ssl_hs_handoff;
446
- }
447
-
448
566
  SSL_CLIENT_HELLO client_hello;
449
567
  if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
450
568
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
@@ -452,6 +570,16 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
452
570
  return ssl_hs_error;
453
571
  }
454
572
 
573
+ if (hs->config->handoff) {
574
+ return ssl_hs_handoff;
575
+ }
576
+
577
+ uint8_t alert = SSL_AD_DECODE_ERROR;
578
+ if (!extract_sni(hs, &alert, &client_hello)) {
579
+ ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
580
+ return ssl_hs_error;
581
+ }
582
+
455
583
  // Run the early callback.
456
584
  if (ssl->ctx->select_certificate_cb != NULL) {
457
585
  switch (ssl->ctx->select_certificate_cb(&client_hello)) {
@@ -470,11 +598,15 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
470
598
  }
471
599
 
472
600
  // Freeze the version range after the early callback.
473
- if (!ssl_get_version_range(ssl, &hs->min_version, &hs->max_version)) {
601
+ if (!ssl_get_version_range(hs, &hs->min_version, &hs->max_version)) {
474
602
  return ssl_hs_error;
475
603
  }
476
604
 
477
- uint8_t alert = SSL_AD_DECODE_ERROR;
605
+ if (hs->config->jdk11_workaround &&
606
+ is_probably_jdk11_with_tls13(&client_hello)) {
607
+ hs->apply_jdk11_workaround = true;
608
+ }
609
+
478
610
  if (!negotiate_version(hs, &alert, &client_hello)) {
479
611
  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
480
612
  return ssl_hs_error;
@@ -505,7 +637,7 @@ static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
505
637
  return ssl_hs_error;
506
638
  }
507
639
 
508
- hs->state = state_select_certificate;
640
+ hs->state = state12_select_certificate;
509
641
  return ssl_hs_ok;
510
642
  }
511
643
 
@@ -518,8 +650,8 @@ static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs) {
518
650
  }
519
651
 
520
652
  // Call |cert_cb| to update server certificates if required.
521
- if (ssl->cert->cert_cb != NULL) {
522
- int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg);
653
+ if (hs->config->cert->cert_cb != NULL) {
654
+ int rv = hs->config->cert->cert_cb(ssl, hs->config->cert->cert_cb_arg);
523
655
  if (rv == 0) {
524
656
  OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR);
525
657
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
@@ -534,12 +666,30 @@ static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs) {
534
666
  return ssl_hs_error;
535
667
  }
536
668
 
669
+ if (hs->ocsp_stapling_requested &&
670
+ ssl->ctx->legacy_ocsp_callback != nullptr) {
671
+ switch (ssl->ctx->legacy_ocsp_callback(
672
+ ssl, ssl->ctx->legacy_ocsp_callback_arg)) {
673
+ case SSL_TLSEXT_ERR_OK:
674
+ break;
675
+ case SSL_TLSEXT_ERR_NOACK:
676
+ hs->ocsp_stapling_requested = false;
677
+ break;
678
+ default:
679
+ OPENSSL_PUT_ERROR(SSL, SSL_R_OCSP_CB_ERROR);
680
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
681
+ return ssl_hs_error;
682
+ }
683
+ }
684
+
537
685
  if (ssl_protocol_version(ssl) >= TLS1_3_VERSION) {
538
686
  // Jump to the TLS 1.3 state machine.
539
- hs->state = state_tls13;
687
+ hs->state = state12_tls13;
540
688
  return ssl_hs_ok;
541
689
  }
542
690
 
691
+ ssl->s3->early_data_reason = ssl_early_data_protocol_version;
692
+
543
693
  SSL_CLIENT_HELLO client_hello;
544
694
  if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
545
695
  return ssl_hs_error;
@@ -547,22 +697,24 @@ static enum ssl_hs_wait_t do_select_certificate(SSL_HANDSHAKE *hs) {
547
697
 
548
698
  // Negotiate the cipher suite. This must be done after |cert_cb| so the
549
699
  // certificate is finalized.
550
- hs->new_cipher =
551
- ssl3_choose_cipher(hs, &client_hello, ssl_get_cipher_preferences(ssl));
700
+ SSLCipherPreferenceList *prefs = hs->config->cipher_list
701
+ ? hs->config->cipher_list.get()
702
+ : ssl->ctx->cipher_list.get();
703
+ hs->new_cipher = ssl3_choose_cipher(hs, &client_hello, prefs);
552
704
  if (hs->new_cipher == NULL) {
553
705
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
554
706
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
555
707
  return ssl_hs_error;
556
708
  }
557
709
 
558
- hs->state = state_select_parameters;
710
+ hs->state = state12_select_parameters;
559
711
  return ssl_hs_ok;
560
712
  }
561
713
 
562
714
  static enum ssl_hs_wait_t do_tls13(SSL_HANDSHAKE *hs) {
563
715
  enum ssl_hs_wait_t wait = tls13_server_handshake(hs);
564
716
  if (wait == ssl_hs_ok) {
565
- hs->state = state_finish_server_handshake;
717
+ hs->state = state12_finish_server_handshake;
566
718
  return ssl_hs_ok;
567
719
  }
568
720
 
@@ -586,7 +738,7 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
586
738
  UniquePtr<SSL_SESSION> session;
587
739
  bool tickets_supported = false, renew_ticket = false;
588
740
  enum ssl_hs_wait_t wait = ssl_get_prev_session(
589
- ssl, &session, &tickets_supported, &renew_ticket, &client_hello);
741
+ hs, &session, &tickets_supported, &renew_ticket, &client_hello);
590
742
  if (wait != ssl_hs_ok) {
591
743
  return wait;
592
744
  }
@@ -611,7 +763,7 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
611
763
  if (session) {
612
764
  // Use the old session.
613
765
  hs->ticket_expected = renew_ticket;
614
- ssl->session = session.release();
766
+ ssl->session = std::move(session);
615
767
  ssl->s3->session_reused = true;
616
768
  } else {
617
769
  hs->ticket_expected = tickets_supported;
@@ -638,10 +790,10 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
638
790
  hs->new_session->cipher = hs->new_cipher;
639
791
 
640
792
  // Determine whether to request a client certificate.
641
- hs->cert_request = !!(ssl->verify_mode & SSL_VERIFY_PEER);
793
+ hs->cert_request = !!(hs->config->verify_mode & SSL_VERIFY_PEER);
642
794
  // Only request a certificate if Channel ID isn't negotiated.
643
- if ((ssl->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) &&
644
- ssl->s3->tlsext_channel_id_valid) {
795
+ if ((hs->config->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) &&
796
+ ssl->s3->channel_id_valid) {
645
797
  hs->cert_request = false;
646
798
  }
647
799
  // CertificateRequest may only be sent in certificate-based ciphers.
@@ -672,25 +824,32 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
672
824
  return ssl_hs_error;
673
825
  }
674
826
 
675
- // Release the handshake buffer if client authentication isn't required.
676
- if (!hs->cert_request) {
827
+ // Handback includes the whole handshake transcript, so we cannot free the
828
+ // transcript buffer in the handback case.
829
+ if (!hs->cert_request && !hs->handback) {
677
830
  hs->transcript.FreeBuffer();
678
831
  }
679
832
 
680
833
  ssl->method->next_message(ssl);
681
834
 
682
- hs->state = state_send_server_hello;
835
+ hs->state = state12_send_server_hello;
683
836
  return ssl_hs_ok;
684
837
  }
685
838
 
839
+ static void copy_suffix(Span<uint8_t> out, Span<const uint8_t> in) {
840
+ out = out.subspan(out.size() - in.size());
841
+ assert(out.size() == in.size());
842
+ OPENSSL_memcpy(out.data(), in.data(), in.size());
843
+ }
844
+
686
845
  static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
687
846
  SSL *const ssl = hs->ssl;
688
847
 
689
848
  // We only accept ChannelIDs on connections with ECDHE in order to avoid a
690
849
  // known attack while we fix ChannelID itself.
691
- if (ssl->s3->tlsext_channel_id_valid &&
850
+ if (ssl->s3->channel_id_valid &&
692
851
  (hs->new_cipher->algorithm_mkey & SSL_kECDHE) == 0) {
693
- ssl->s3->tlsext_channel_id_valid = false;
852
+ ssl->s3->channel_id_valid = false;
694
853
  }
695
854
 
696
855
  // If this is a resumption and the original handshake didn't support
@@ -698,7 +857,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
698
857
  // session and so cannot resume with ChannelIDs.
699
858
  if (ssl->session != NULL &&
700
859
  ssl->session->original_handshake_hash_len == 0) {
701
- ssl->s3->tlsext_channel_id_valid = false;
860
+ ssl->s3->channel_id_valid = false;
702
861
  }
703
862
 
704
863
  struct OPENSSL_timeval now;
@@ -711,20 +870,27 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
711
870
  return ssl_hs_error;
712
871
  }
713
872
 
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));
873
+ // Implement the TLS 1.3 anti-downgrade feature.
874
+ if (ssl_supports_version(hs, TLS1_3_VERSION)) {
875
+ if (ssl_protocol_version(ssl) == TLS1_2_VERSION) {
876
+ if (hs->apply_jdk11_workaround) {
877
+ // JDK 11 implements the TLS 1.3 downgrade signal, so we cannot send it
878
+ // here. However, the signal is only effective if all TLS 1.2
879
+ // ServerHellos produced by the server are marked. Thus we send a
880
+ // different non-standard signal for the time being, until JDK 11.0.2 is
881
+ // released and clients have updated.
882
+ copy_suffix(ssl->s3->server_random, kJDK11DowngradeRandom);
883
+ } else {
884
+ copy_suffix(ssl->s3->server_random, kTLS13DowngradeRandom);
885
+ }
886
+ } else {
887
+ copy_suffix(ssl->s3->server_random, kTLS12DowngradeRandom);
888
+ }
723
889
  }
724
890
 
725
891
  const SSL_SESSION *session = hs->new_session.get();
726
- if (ssl->session != NULL) {
727
- session = ssl->session;
892
+ if (ssl->session != nullptr) {
893
+ session = ssl->session.get();
728
894
  }
729
895
 
730
896
  ScopedCBB cbb;
@@ -744,9 +910,9 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
744
910
  }
745
911
 
746
912
  if (ssl->session != NULL) {
747
- hs->state = state_send_server_finished;
913
+ hs->state = state12_send_server_finished;
748
914
  } else {
749
- hs->state = state_send_server_certificate;
915
+ hs->state = state12_send_server_certificate;
750
916
  }
751
917
  return ssl_hs_ok;
752
918
  }
@@ -756,12 +922,12 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) {
756
922
  ScopedCBB cbb;
757
923
 
758
924
  if (ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
759
- if (!ssl_has_certificate(ssl)) {
925
+ if (!ssl_has_certificate(hs)) {
760
926
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET);
761
927
  return ssl_hs_error;
762
928
  }
763
929
 
764
- if (!ssl_output_cert_chain(ssl)) {
930
+ if (!ssl_output_cert_chain(hs)) {
765
931
  return ssl_hs_error;
766
932
  }
767
933
 
@@ -771,9 +937,10 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) {
771
937
  SSL3_MT_CERTIFICATE_STATUS) ||
772
938
  !CBB_add_u8(&body, TLSEXT_STATUSTYPE_ocsp) ||
773
939
  !CBB_add_u24_length_prefixed(&body, &ocsp_response) ||
774
- !CBB_add_bytes(&ocsp_response,
775
- CRYPTO_BUFFER_data(ssl->cert->ocsp_response),
776
- CRYPTO_BUFFER_len(ssl->cert->ocsp_response)) ||
940
+ !CBB_add_bytes(
941
+ &ocsp_response,
942
+ CRYPTO_BUFFER_data(hs->config->cert->ocsp_response.get()),
943
+ CRYPTO_BUFFER_len(hs->config->cert->ocsp_response.get())) ||
777
944
  !ssl_add_message_cbb(ssl, cbb.get())) {
778
945
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
779
946
  return ssl_hs_error;
@@ -785,8 +952,7 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) {
785
952
  uint32_t alg_k = hs->new_cipher->algorithm_mkey;
786
953
  uint32_t alg_a = hs->new_cipher->algorithm_auth;
787
954
  if (ssl_cipher_requires_server_key_exchange(hs->new_cipher) ||
788
- ((alg_a & SSL_aPSK) && ssl->psk_identity_hint)) {
789
-
955
+ ((alg_a & SSL_aPSK) && hs->config->psk_identity_hint)) {
790
956
  // Pre-allocate enough room to comfortably fit an ECDHE public key. Prepend
791
957
  // the client and server randoms for the signing transcript.
792
958
  CBB child;
@@ -798,10 +964,12 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) {
798
964
 
799
965
  // PSK ciphers begin with an identity hint.
800
966
  if (alg_a & SSL_aPSK) {
801
- size_t len =
802
- (ssl->psk_identity_hint == NULL) ? 0 : strlen(ssl->psk_identity_hint);
967
+ size_t len = hs->config->psk_identity_hint == nullptr
968
+ ? 0
969
+ : strlen(hs->config->psk_identity_hint.get());
803
970
  if (!CBB_add_u16_length_prefixed(cbb.get(), &child) ||
804
- !CBB_add_bytes(&child, (const uint8_t *)ssl->psk_identity_hint,
971
+ !CBB_add_bytes(&child,
972
+ (const uint8_t *)hs->config->psk_identity_hint.get(),
805
973
  len)) {
806
974
  return ssl_hs_error;
807
975
  }
@@ -818,12 +986,12 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) {
818
986
  hs->new_session->group_id = group_id;
819
987
 
820
988
  // Set up ECDH, generate a key, and emit the public half.
821
- hs->key_share = SSLKeyShare::Create(group_id);
822
- if (!hs->key_share ||
989
+ hs->key_shares[0] = SSLKeyShare::Create(group_id);
990
+ if (!hs->key_shares[0] ||
823
991
  !CBB_add_u8(cbb.get(), NAMED_CURVE_TYPE) ||
824
992
  !CBB_add_u16(cbb.get(), group_id) ||
825
993
  !CBB_add_u8_length_prefixed(cbb.get(), &child) ||
826
- !hs->key_share->Offer(&child)) {
994
+ !hs->key_shares[0]->Offer(&child)) {
827
995
  return ssl_hs_error;
828
996
  }
829
997
  } else {
@@ -835,7 +1003,7 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) {
835
1003
  }
836
1004
  }
837
1005
 
838
- hs->state = state_send_server_key_exchange;
1006
+ hs->state = state12_send_server_key_exchange;
839
1007
  return ssl_hs_ok;
840
1008
  }
841
1009
 
@@ -843,7 +1011,7 @@ static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs) {
843
1011
  SSL *const ssl = hs->ssl;
844
1012
 
845
1013
  if (hs->server_params.size() == 0) {
846
- hs->state = state_send_server_hello_done;
1014
+ hs->state = state12_send_server_hello_done;
847
1015
  return ssl_hs_ok;
848
1016
  }
849
1017
 
@@ -860,7 +1028,7 @@ static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs) {
860
1028
 
861
1029
  // Add a signature.
862
1030
  if (ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
863
- if (!ssl_has_private_key(ssl)) {
1031
+ if (!ssl_has_private_key(hs)) {
864
1032
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
865
1033
  return ssl_hs_error;
866
1034
  }
@@ -868,6 +1036,7 @@ static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs) {
868
1036
  // Determine the signature algorithm.
869
1037
  uint16_t signature_algorithm;
870
1038
  if (!tls1_choose_signature_algorithm(hs, &signature_algorithm)) {
1039
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
871
1040
  return ssl_hs_error;
872
1041
  }
873
1042
  if (ssl_protocol_version(ssl) >= TLS1_2_VERSION) {
@@ -907,7 +1076,7 @@ static enum ssl_hs_wait_t do_send_server_key_exchange(SSL_HANDSHAKE *hs) {
907
1076
 
908
1077
  hs->server_params.Reset();
909
1078
 
910
- hs->state = state_send_server_hello_done;
1079
+ hs->state = state12_send_server_hello_done;
911
1080
  return ssl_hs_ok;
912
1081
  }
913
1082
 
@@ -923,12 +1092,14 @@ static enum ssl_hs_wait_t do_send_server_hello_done(SSL_HANDSHAKE *hs) {
923
1092
  SSL3_MT_CERTIFICATE_REQUEST) ||
924
1093
  !CBB_add_u8_length_prefixed(&body, &cert_types) ||
925
1094
  !CBB_add_u8(&cert_types, SSL3_CT_RSA_SIGN) ||
926
- (ssl_protocol_version(ssl) >= TLS1_VERSION &&
927
- !CBB_add_u8(&cert_types, TLS_CT_ECDSA_SIGN)) ||
1095
+ !CBB_add_u8(&cert_types, TLS_CT_ECDSA_SIGN) ||
1096
+ // TLS 1.2 has no way to specify different signature algorithms for
1097
+ // certificates and the online signature, so emit the more restrictive
1098
+ // certificate list.
928
1099
  (ssl_protocol_version(ssl) >= TLS1_2_VERSION &&
929
1100
  (!CBB_add_u16_length_prefixed(&body, &sigalgs_cbb) ||
930
- !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb))) ||
931
- !ssl_add_client_CA_list(ssl, &body) ||
1101
+ !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb, true /* certs */))) ||
1102
+ !ssl_add_client_CA_list(hs, &body) ||
932
1103
  !ssl_add_message_cbb(ssl, cbb.get())) {
933
1104
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
934
1105
  return ssl_hs_error;
@@ -942,15 +1113,18 @@ static enum ssl_hs_wait_t do_send_server_hello_done(SSL_HANDSHAKE *hs) {
942
1113
  return ssl_hs_error;
943
1114
  }
944
1115
 
945
- hs->state = state_read_client_certificate;
1116
+ hs->state = state12_read_client_certificate;
946
1117
  return ssl_hs_flush;
947
1118
  }
948
1119
 
949
1120
  static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) {
950
1121
  SSL *const ssl = hs->ssl;
951
1122
 
1123
+ if (hs->handback && hs->new_cipher->algorithm_mkey == SSL_kECDHE) {
1124
+ return ssl_hs_handback;
1125
+ }
952
1126
  if (!hs->cert_request) {
953
- hs->state = state_verify_client_certificate;
1127
+ hs->state = state12_verify_client_certificate;
954
1128
  return ssl_hs_ok;
955
1129
  }
956
1130
 
@@ -959,26 +1133,7 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) {
959
1133
  return ssl_hs_read_message;
960
1134
  }
961
1135
 
962
- if (msg.type != SSL3_MT_CERTIFICATE) {
963
- if (ssl->version == SSL3_VERSION &&
964
- msg.type == SSL3_MT_CLIENT_KEY_EXCHANGE) {
965
- // In SSL 3.0, the Certificate message is omitted to signal no
966
- // certificate.
967
- if (ssl->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) {
968
- OPENSSL_PUT_ERROR(SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
969
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
970
- return ssl_hs_error;
971
- }
972
-
973
- // OpenSSL returns X509_V_OK when no certificates are received. This is
974
- // classed by them as a bug, but it's assumed by at least NGINX.
975
- hs->new_session->verify_result = X509_V_OK;
976
- hs->state = state_verify_client_certificate;
977
- return ssl_hs_ok;
978
- }
979
-
980
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
981
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
1136
+ if (!ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE)) {
982
1137
  return ssl_hs_error;
983
1138
  }
984
1139
 
@@ -988,17 +1143,14 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) {
988
1143
 
989
1144
  CBS certificate_msg = msg.body;
990
1145
  uint8_t alert = SSL_AD_DECODE_ERROR;
991
- UniquePtr<STACK_OF(CRYPTO_BUFFER)> chain;
992
- if (!ssl_parse_cert_chain(&alert, &chain, &hs->peer_pubkey,
993
- ssl->retain_only_sha256_of_client_certs
1146
+ if (!ssl_parse_cert_chain(&alert, &hs->new_session->certs, &hs->peer_pubkey,
1147
+ hs->config->retain_only_sha256_of_client_certs
994
1148
  ? hs->new_session->peer_sha256
995
- : NULL,
1149
+ : nullptr,
996
1150
  &certificate_msg, ssl->ctx->pool)) {
997
1151
  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
998
1152
  return ssl_hs_error;
999
1153
  }
1000
- sk_CRYPTO_BUFFER_pop_free(hs->new_session->certs, CRYPTO_BUFFER_free);
1001
- hs->new_session->certs = chain.release();
1002
1154
 
1003
1155
  if (CBS_len(&certificate_msg) != 0 ||
1004
1156
  !ssl->ctx->x509_method->session_cache_objects(hs->new_session.get())) {
@@ -1007,19 +1159,11 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) {
1007
1159
  return ssl_hs_error;
1008
1160
  }
1009
1161
 
1010
- if (sk_CRYPTO_BUFFER_num(hs->new_session->certs) == 0) {
1162
+ if (sk_CRYPTO_BUFFER_num(hs->new_session->certs.get()) == 0) {
1011
1163
  // No client certificate so the handshake buffer may be discarded.
1012
1164
  hs->transcript.FreeBuffer();
1013
1165
 
1014
- // In SSL 3.0, sending no certificate is signaled by omitting the
1015
- // Certificate message.
1016
- if (ssl->version == SSL3_VERSION) {
1017
- OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATES_RETURNED);
1018
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1019
- return ssl_hs_error;
1020
- }
1021
-
1022
- if (ssl->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) {
1166
+ if (hs->config->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) {
1023
1167
  // Fail for TLS only if we required a certificate
1024
1168
  OPENSSL_PUT_ERROR(SSL, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
1025
1169
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
@@ -1029,18 +1173,18 @@ static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) {
1029
1173
  // OpenSSL returns X509_V_OK when no certificates are received. This is
1030
1174
  // classed by them as a bug, but it's assumed by at least NGINX.
1031
1175
  hs->new_session->verify_result = X509_V_OK;
1032
- } else if (ssl->retain_only_sha256_of_client_certs) {
1176
+ } else if (hs->config->retain_only_sha256_of_client_certs) {
1033
1177
  // The hash will have been filled in.
1034
1178
  hs->new_session->peer_sha256_valid = 1;
1035
1179
  }
1036
1180
 
1037
1181
  ssl->method->next_message(ssl);
1038
- hs->state = state_verify_client_certificate;
1182
+ hs->state = state12_verify_client_certificate;
1039
1183
  return ssl_hs_ok;
1040
1184
  }
1041
1185
 
1042
1186
  static enum ssl_hs_wait_t do_verify_client_certificate(SSL_HANDSHAKE *hs) {
1043
- if (sk_CRYPTO_BUFFER_num(hs->new_session->certs) > 0) {
1187
+ if (sk_CRYPTO_BUFFER_num(hs->new_session->certs.get()) > 0) {
1044
1188
  switch (ssl_verify_peer_cert(hs)) {
1045
1189
  case ssl_verify_ok:
1046
1190
  break;
@@ -1051,7 +1195,7 @@ static enum ssl_hs_wait_t do_verify_client_certificate(SSL_HANDSHAKE *hs) {
1051
1195
  }
1052
1196
  }
1053
1197
 
1054
- hs->state = state_read_client_key_exchange;
1198
+ hs->state = state12_read_client_key_exchange;
1055
1199
  return ssl_hs_ok;
1056
1200
  }
1057
1201
 
@@ -1089,28 +1233,25 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) {
1089
1233
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
1090
1234
  return ssl_hs_error;
1091
1235
  }
1092
-
1093
- if (!CBS_strdup(&psk_identity, &hs->new_session->psk_identity)) {
1236
+ char *raw = nullptr;
1237
+ if (!CBS_strdup(&psk_identity, &raw)) {
1094
1238
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
1095
1239
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1096
1240
  return ssl_hs_error;
1097
1241
  }
1242
+ hs->new_session->psk_identity.reset(raw);
1098
1243
  }
1099
1244
 
1100
1245
  // Depending on the key exchange method, compute |premaster_secret|.
1101
1246
  Array<uint8_t> premaster_secret;
1102
1247
  if (alg_k & SSL_kRSA) {
1103
1248
  CBS encrypted_premaster_secret;
1104
- if (ssl->version > SSL3_VERSION) {
1105
- if (!CBS_get_u16_length_prefixed(&client_key_exchange,
1106
- &encrypted_premaster_secret) ||
1107
- CBS_len(&client_key_exchange) != 0) {
1108
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1109
- ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1110
- return ssl_hs_error;
1111
- }
1112
- } else {
1113
- encrypted_premaster_secret = client_key_exchange;
1249
+ if (!CBS_get_u16_length_prefixed(&client_key_exchange,
1250
+ &encrypted_premaster_secret) ||
1251
+ CBS_len(&client_key_exchange) != 0) {
1252
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1253
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1254
+ return ssl_hs_error;
1114
1255
  }
1115
1256
 
1116
1257
  // Allocate a buffer large enough for an RSA decryption.
@@ -1139,6 +1280,8 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) {
1139
1280
  return ssl_hs_error;
1140
1281
  }
1141
1282
 
1283
+ CONSTTIME_SECRET(decrypt_buf.data(), decrypt_len);
1284
+
1142
1285
  // Prepare a random premaster, to be used on invalid padding. See RFC 5246,
1143
1286
  // section 7.4.7.1.
1144
1287
  if (!premaster_secret.Init(SSL_MAX_MASTER_KEY_LENGTH) ||
@@ -1188,13 +1331,14 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) {
1188
1331
 
1189
1332
  // Compute the premaster.
1190
1333
  uint8_t alert = SSL_AD_DECODE_ERROR;
1191
- if (!hs->key_share->Finish(&premaster_secret, &alert, peer_key)) {
1334
+ if (!hs->key_shares[0]->Finish(&premaster_secret, &alert, peer_key)) {
1192
1335
  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
1193
1336
  return ssl_hs_error;
1194
1337
  }
1195
1338
 
1196
1339
  // The key exchange state may now be discarded.
1197
- hs->key_share.reset();
1340
+ hs->key_shares[0].reset();
1341
+ hs->key_shares[1].reset();
1198
1342
  } else if (!(alg_k & SSL_kPSK)) {
1199
1343
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1200
1344
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
@@ -1204,7 +1348,7 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) {
1204
1348
  // For a PSK cipher suite, the actual pre-master secret is combined with the
1205
1349
  // pre-shared key.
1206
1350
  if (alg_a & SSL_aPSK) {
1207
- if (ssl->psk_server_callback == NULL) {
1351
+ if (hs->config->psk_server_callback == NULL) {
1208
1352
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1209
1353
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
1210
1354
  return ssl_hs_error;
@@ -1212,8 +1356,8 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) {
1212
1356
 
1213
1357
  // Look up the key for the identity.
1214
1358
  uint8_t psk[PSK_MAX_PSK_LEN];
1215
- unsigned psk_len = ssl->psk_server_callback(
1216
- ssl, hs->new_session->psk_identity, psk, sizeof(psk));
1359
+ unsigned psk_len = hs->config->psk_server_callback(
1360
+ ssl, hs->new_session->psk_identity.get(), psk, sizeof(psk));
1217
1361
  if (psk_len > PSK_MAX_PSK_LEN) {
1218
1362
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
1219
1363
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
@@ -1260,9 +1404,11 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) {
1260
1404
  return ssl_hs_error;
1261
1405
  }
1262
1406
  hs->new_session->extended_master_secret = hs->extended_master_secret;
1407
+ CONSTTIME_DECLASSIFY(hs->new_session->master_key,
1408
+ hs->new_session->master_key_length);
1263
1409
 
1264
1410
  ssl->method->next_message(ssl);
1265
- hs->state = state_read_client_certificate_verify;
1411
+ hs->state = state12_read_client_certificate_verify;
1266
1412
  return ssl_hs_ok;
1267
1413
  }
1268
1414
 
@@ -1273,7 +1419,7 @@ static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs) {
1273
1419
  // CertificateVerify is required if and only if there's a client certificate.
1274
1420
  if (!hs->peer_pubkey) {
1275
1421
  hs->transcript.FreeBuffer();
1276
- hs->state = state_read_change_cipher_spec;
1422
+ hs->state = state12_read_change_cipher_spec;
1277
1423
  return ssl_hs_ok;
1278
1424
  }
1279
1425
 
@@ -1317,34 +1463,8 @@ static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs) {
1317
1463
  return ssl_hs_error;
1318
1464
  }
1319
1465
 
1320
- bool sig_ok;
1321
- // The SSL3 construction for CertificateVerify does not decompose into a
1322
- // single final digest and signature, and must be special-cased.
1323
- if (ssl_protocol_version(ssl) == SSL3_VERSION) {
1324
- uint8_t digest[EVP_MAX_MD_SIZE];
1325
- size_t digest_len;
1326
- if (!hs->transcript.GetSSL3CertVerifyHash(
1327
- digest, &digest_len, hs->new_session.get(), signature_algorithm)) {
1328
- return ssl_hs_error;
1329
- }
1330
-
1331
- UniquePtr<EVP_PKEY_CTX> pctx(
1332
- EVP_PKEY_CTX_new(hs->peer_pubkey.get(), nullptr));
1333
- sig_ok = pctx &&
1334
- EVP_PKEY_verify_init(pctx.get()) &&
1335
- EVP_PKEY_verify(pctx.get(), CBS_data(&signature),
1336
- CBS_len(&signature), digest, digest_len);
1337
- } else {
1338
- sig_ok =
1339
- ssl_public_key_verify(ssl, signature, signature_algorithm,
1340
- hs->peer_pubkey.get(), hs->transcript.buffer());
1341
- }
1342
-
1343
- #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
1344
- sig_ok = true;
1345
- ERR_clear_error();
1346
- #endif
1347
- if (!sig_ok) {
1466
+ if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
1467
+ hs->peer_pubkey.get(), hs->transcript.buffer())) {
1348
1468
  OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
1349
1469
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
1350
1470
  return ssl_hs_error;
@@ -1358,12 +1478,15 @@ static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs) {
1358
1478
  }
1359
1479
 
1360
1480
  ssl->method->next_message(ssl);
1361
- hs->state = state_read_change_cipher_spec;
1481
+ hs->state = state12_read_change_cipher_spec;
1362
1482
  return ssl_hs_ok;
1363
1483
  }
1364
1484
 
1365
1485
  static enum ssl_hs_wait_t do_read_change_cipher_spec(SSL_HANDSHAKE *hs) {
1366
- hs->state = state_process_change_cipher_spec;
1486
+ if (hs->handback && hs->ssl->session != NULL) {
1487
+ return ssl_hs_handback;
1488
+ }
1489
+ hs->state = state12_process_change_cipher_spec;
1367
1490
  return ssl_hs_read_change_cipher_spec;
1368
1491
  }
1369
1492
 
@@ -1372,7 +1495,7 @@ static enum ssl_hs_wait_t do_process_change_cipher_spec(SSL_HANDSHAKE *hs) {
1372
1495
  return ssl_hs_error;
1373
1496
  }
1374
1497
 
1375
- hs->state = state_read_next_proto;
1498
+ hs->state = state12_read_next_proto;
1376
1499
  return ssl_hs_ok;
1377
1500
  }
1378
1501
 
@@ -1380,7 +1503,7 @@ static enum ssl_hs_wait_t do_read_next_proto(SSL_HANDSHAKE *hs) {
1380
1503
  SSL *const ssl = hs->ssl;
1381
1504
 
1382
1505
  if (!hs->next_proto_neg_seen) {
1383
- hs->state = state_read_channel_id;
1506
+ hs->state = state12_read_channel_id;
1384
1507
  return ssl_hs_ok;
1385
1508
  }
1386
1509
 
@@ -1408,15 +1531,15 @@ static enum ssl_hs_wait_t do_read_next_proto(SSL_HANDSHAKE *hs) {
1408
1531
  }
1409
1532
 
1410
1533
  ssl->method->next_message(ssl);
1411
- hs->state = state_read_channel_id;
1534
+ hs->state = state12_read_channel_id;
1412
1535
  return ssl_hs_ok;
1413
1536
  }
1414
1537
 
1415
1538
  static enum ssl_hs_wait_t do_read_channel_id(SSL_HANDSHAKE *hs) {
1416
1539
  SSL *const ssl = hs->ssl;
1417
1540
 
1418
- if (!ssl->s3->tlsext_channel_id_valid) {
1419
- hs->state = state_read_client_finished;
1541
+ if (!ssl->s3->channel_id_valid) {
1542
+ hs->state = state12_read_client_finished;
1420
1543
  return ssl_hs_ok;
1421
1544
  }
1422
1545
 
@@ -1432,7 +1555,7 @@ static enum ssl_hs_wait_t do_read_channel_id(SSL_HANDSHAKE *hs) {
1432
1555
  }
1433
1556
 
1434
1557
  ssl->method->next_message(ssl);
1435
- hs->state = state_read_client_finished;
1558
+ hs->state = state12_read_client_finished;
1436
1559
  return ssl_hs_ok;
1437
1560
  }
1438
1561
 
@@ -1444,15 +1567,15 @@ static enum ssl_hs_wait_t do_read_client_finished(SSL_HANDSHAKE *hs) {
1444
1567
  }
1445
1568
 
1446
1569
  if (ssl->session != NULL) {
1447
- hs->state = state_finish_server_handshake;
1570
+ hs->state = state12_finish_server_handshake;
1448
1571
  } else {
1449
- hs->state = state_send_server_finished;
1572
+ hs->state = state12_send_server_finished;
1450
1573
  }
1451
1574
 
1452
1575
  // If this is a full handshake with ChannelID then record the handshake
1453
1576
  // hashes in |hs->new_session| in case we need them to verify a
1454
1577
  // ChannelID signature on a resumption of this session in the future.
1455
- if (ssl->session == NULL && ssl->s3->tlsext_channel_id_valid &&
1578
+ if (ssl->session == NULL && ssl->s3->channel_id_valid &&
1456
1579
  !tls1_record_handshake_hashes_for_channel_id(hs)) {
1457
1580
  return ssl_hs_error;
1458
1581
  }
@@ -1473,7 +1596,8 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
1473
1596
  } else {
1474
1597
  // We are renewing an existing session. Duplicate the session to adjust
1475
1598
  // the timeout.
1476
- session_copy = SSL_SESSION_dup(ssl->session, SSL_SESSION_INCLUDE_NONAUTH);
1599
+ session_copy =
1600
+ SSL_SESSION_dup(ssl->session.get(), SSL_SESSION_INCLUDE_NONAUTH);
1477
1601
  if (!session_copy) {
1478
1602
  return ssl_hs_error;
1479
1603
  }
@@ -1488,7 +1612,7 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
1488
1612
  SSL3_MT_NEW_SESSION_TICKET) ||
1489
1613
  !CBB_add_u32(&body, session->timeout) ||
1490
1614
  !CBB_add_u16_length_prefixed(&body, &ticket) ||
1491
- !ssl_encrypt_ticket(ssl, &ticket, session) ||
1615
+ !ssl_encrypt_ticket(hs, &ticket, session) ||
1492
1616
  !ssl_add_message_cbb(ssl, cbb.get())) {
1493
1617
  return ssl_hs_error;
1494
1618
  }
@@ -1501,9 +1625,9 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
1501
1625
  }
1502
1626
 
1503
1627
  if (ssl->session != NULL) {
1504
- hs->state = state_read_change_cipher_spec;
1628
+ hs->state = state12_read_change_cipher_spec;
1505
1629
  } else {
1506
- hs->state = state_finish_server_handshake;
1630
+ hs->state = state12_finish_server_handshake;
1507
1631
  }
1508
1632
  return ssl_hs_flush;
1509
1633
  }
@@ -1511,98 +1635,101 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
1511
1635
  static enum ssl_hs_wait_t do_finish_server_handshake(SSL_HANDSHAKE *hs) {
1512
1636
  SSL *const ssl = hs->ssl;
1513
1637
 
1638
+ if (hs->handback) {
1639
+ return ssl_hs_handback;
1640
+ }
1641
+
1514
1642
  ssl->method->on_handshake_complete(ssl);
1515
1643
 
1516
1644
  // If we aren't retaining peer certificates then we can discard it now.
1517
- if (hs->new_session != NULL && ssl->retain_only_sha256_of_client_certs) {
1518
- sk_CRYPTO_BUFFER_pop_free(hs->new_session->certs, CRYPTO_BUFFER_free);
1519
- hs->new_session->certs = NULL;
1645
+ if (hs->new_session != NULL &&
1646
+ hs->config->retain_only_sha256_of_client_certs) {
1647
+ hs->new_session->certs.reset();
1520
1648
  ssl->ctx->x509_method->session_clear(hs->new_session.get());
1521
1649
  }
1522
1650
 
1523
1651
  if (ssl->session != NULL) {
1524
- SSL_SESSION_up_ref(ssl->session);
1525
- ssl->s3->established_session.reset(ssl->session);
1652
+ ssl->s3->established_session = UpRef(ssl->session);
1526
1653
  } else {
1527
1654
  ssl->s3->established_session = std::move(hs->new_session);
1528
- ssl->s3->established_session->not_resumable = 0;
1655
+ ssl->s3->established_session->not_resumable = false;
1529
1656
  }
1530
1657
 
1531
1658
  hs->handshake_finalized = true;
1532
1659
  ssl->s3->initial_handshake_complete = true;
1533
1660
  ssl_update_cache(hs, SSL_SESS_CACHE_SERVER);
1534
1661
 
1535
- hs->state = state_done;
1662
+ hs->state = state12_done;
1536
1663
  return ssl_hs_ok;
1537
1664
  }
1538
1665
 
1539
1666
  enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs) {
1540
- while (hs->state != state_done) {
1667
+ while (hs->state != state12_done) {
1541
1668
  enum ssl_hs_wait_t ret = ssl_hs_error;
1542
- enum ssl_server_hs_state_t state =
1543
- static_cast<enum ssl_server_hs_state_t>(hs->state);
1669
+ enum tls12_server_hs_state_t state =
1670
+ static_cast<enum tls12_server_hs_state_t>(hs->state);
1544
1671
  switch (state) {
1545
- case state_start_accept:
1672
+ case state12_start_accept:
1546
1673
  ret = do_start_accept(hs);
1547
1674
  break;
1548
- case state_read_client_hello:
1675
+ case state12_read_client_hello:
1549
1676
  ret = do_read_client_hello(hs);
1550
1677
  break;
1551
- case state_select_certificate:
1678
+ case state12_select_certificate:
1552
1679
  ret = do_select_certificate(hs);
1553
1680
  break;
1554
- case state_tls13:
1681
+ case state12_tls13:
1555
1682
  ret = do_tls13(hs);
1556
1683
  break;
1557
- case state_select_parameters:
1684
+ case state12_select_parameters:
1558
1685
  ret = do_select_parameters(hs);
1559
1686
  break;
1560
- case state_send_server_hello:
1687
+ case state12_send_server_hello:
1561
1688
  ret = do_send_server_hello(hs);
1562
1689
  break;
1563
- case state_send_server_certificate:
1690
+ case state12_send_server_certificate:
1564
1691
  ret = do_send_server_certificate(hs);
1565
1692
  break;
1566
- case state_send_server_key_exchange:
1693
+ case state12_send_server_key_exchange:
1567
1694
  ret = do_send_server_key_exchange(hs);
1568
1695
  break;
1569
- case state_send_server_hello_done:
1696
+ case state12_send_server_hello_done:
1570
1697
  ret = do_send_server_hello_done(hs);
1571
1698
  break;
1572
- case state_read_client_certificate:
1699
+ case state12_read_client_certificate:
1573
1700
  ret = do_read_client_certificate(hs);
1574
1701
  break;
1575
- case state_verify_client_certificate:
1702
+ case state12_verify_client_certificate:
1576
1703
  ret = do_verify_client_certificate(hs);
1577
1704
  break;
1578
- case state_read_client_key_exchange:
1705
+ case state12_read_client_key_exchange:
1579
1706
  ret = do_read_client_key_exchange(hs);
1580
1707
  break;
1581
- case state_read_client_certificate_verify:
1708
+ case state12_read_client_certificate_verify:
1582
1709
  ret = do_read_client_certificate_verify(hs);
1583
1710
  break;
1584
- case state_read_change_cipher_spec:
1711
+ case state12_read_change_cipher_spec:
1585
1712
  ret = do_read_change_cipher_spec(hs);
1586
1713
  break;
1587
- case state_process_change_cipher_spec:
1714
+ case state12_process_change_cipher_spec:
1588
1715
  ret = do_process_change_cipher_spec(hs);
1589
1716
  break;
1590
- case state_read_next_proto:
1717
+ case state12_read_next_proto:
1591
1718
  ret = do_read_next_proto(hs);
1592
1719
  break;
1593
- case state_read_channel_id:
1720
+ case state12_read_channel_id:
1594
1721
  ret = do_read_channel_id(hs);
1595
1722
  break;
1596
- case state_read_client_finished:
1723
+ case state12_read_client_finished:
1597
1724
  ret = do_read_client_finished(hs);
1598
1725
  break;
1599
- case state_send_server_finished:
1726
+ case state12_send_server_finished:
1600
1727
  ret = do_send_server_finished(hs);
1601
1728
  break;
1602
- case state_finish_server_handshake:
1729
+ case state12_finish_server_handshake:
1603
1730
  ret = do_finish_server_handshake(hs);
1604
1731
  break;
1605
- case state_done:
1732
+ case state12_done:
1606
1733
  ret = ssl_hs_ok;
1607
1734
  break;
1608
1735
  }
@@ -1621,54 +1748,54 @@ enum ssl_hs_wait_t ssl_server_handshake(SSL_HANDSHAKE *hs) {
1621
1748
  }
1622
1749
 
1623
1750
  const char *ssl_server_handshake_state(SSL_HANDSHAKE *hs) {
1624
- enum ssl_server_hs_state_t state =
1625
- static_cast<enum ssl_server_hs_state_t>(hs->state);
1751
+ enum tls12_server_hs_state_t state =
1752
+ static_cast<enum tls12_server_hs_state_t>(hs->state);
1626
1753
  switch (state) {
1627
- case state_start_accept:
1754
+ case state12_start_accept:
1628
1755
  return "TLS server start_accept";
1629
- case state_read_client_hello:
1756
+ case state12_read_client_hello:
1630
1757
  return "TLS server read_client_hello";
1631
- case state_select_certificate:
1758
+ case state12_select_certificate:
1632
1759
  return "TLS server select_certificate";
1633
- case state_tls13:
1760
+ case state12_tls13:
1634
1761
  return tls13_server_handshake_state(hs);
1635
- case state_select_parameters:
1762
+ case state12_select_parameters:
1636
1763
  return "TLS server select_parameters";
1637
- case state_send_server_hello:
1764
+ case state12_send_server_hello:
1638
1765
  return "TLS server send_server_hello";
1639
- case state_send_server_certificate:
1766
+ case state12_send_server_certificate:
1640
1767
  return "TLS server send_server_certificate";
1641
- case state_send_server_key_exchange:
1768
+ case state12_send_server_key_exchange:
1642
1769
  return "TLS server send_server_key_exchange";
1643
- case state_send_server_hello_done:
1770
+ case state12_send_server_hello_done:
1644
1771
  return "TLS server send_server_hello_done";
1645
- case state_read_client_certificate:
1772
+ case state12_read_client_certificate:
1646
1773
  return "TLS server read_client_certificate";
1647
- case state_verify_client_certificate:
1774
+ case state12_verify_client_certificate:
1648
1775
  return "TLS server verify_client_certificate";
1649
- case state_read_client_key_exchange:
1776
+ case state12_read_client_key_exchange:
1650
1777
  return "TLS server read_client_key_exchange";
1651
- case state_read_client_certificate_verify:
1778
+ case state12_read_client_certificate_verify:
1652
1779
  return "TLS server read_client_certificate_verify";
1653
- case state_read_change_cipher_spec:
1780
+ case state12_read_change_cipher_spec:
1654
1781
  return "TLS server read_change_cipher_spec";
1655
- case state_process_change_cipher_spec:
1782
+ case state12_process_change_cipher_spec:
1656
1783
  return "TLS server process_change_cipher_spec";
1657
- case state_read_next_proto:
1784
+ case state12_read_next_proto:
1658
1785
  return "TLS server read_next_proto";
1659
- case state_read_channel_id:
1786
+ case state12_read_channel_id:
1660
1787
  return "TLS server read_channel_id";
1661
- case state_read_client_finished:
1788
+ case state12_read_client_finished:
1662
1789
  return "TLS server read_client_finished";
1663
- case state_send_server_finished:
1790
+ case state12_send_server_finished:
1664
1791
  return "TLS server send_server_finished";
1665
- case state_finish_server_handshake:
1792
+ case state12_finish_server_handshake:
1666
1793
  return "TLS server finish_server_handshake";
1667
- case state_done:
1794
+ case state12_done:
1668
1795
  return "TLS server done";
1669
1796
  }
1670
1797
 
1671
1798
  return "TLS server unknown";
1672
1799
  }
1673
1800
 
1674
- }
1801
+ BSSL_NAMESPACE_END