grpc 1.24.0 → 1.25.0.pre1

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 (504) 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/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -116,6 +116,8 @@
116
116
  #include <limits.h>
117
117
  #include <string.h>
118
118
 
119
+ #include <tuple>
120
+
119
121
  #include <openssl/buf.h>
120
122
  #include <openssl/bytestring.h>
121
123
  #include <openssl/err.h>
@@ -130,10 +132,12 @@
130
132
  #include "internal.h"
131
133
 
132
134
 
133
- namespace bssl {
135
+ BSSL_NAMESPACE_BEGIN
134
136
 
135
137
  static bool add_record_to_flight(SSL *ssl, uint8_t type,
136
138
  Span<const uint8_t> in) {
139
+ // The caller should have flushed |pending_hs_data| first.
140
+ assert(!ssl->s3->pending_hs_data);
137
141
  // We'll never add a flight while in the process of writing it out.
138
142
  assert(ssl->s3->pending_flight_offset == 0);
139
143
 
@@ -182,17 +186,50 @@ bool ssl3_finish_message(SSL *ssl, CBB *cbb, Array<uint8_t> *out_msg) {
182
186
  }
183
187
 
184
188
  bool ssl3_add_message(SSL *ssl, Array<uint8_t> msg) {
185
- // Add the message to the current flight, splitting into several records if
186
- // needed.
189
+ // Pack handshake data into the minimal number of records. This avoids
190
+ // unnecessary encryption overhead, notably in TLS 1.3 where we send several
191
+ // encrypted messages in a row. For now, we do not do this for the null
192
+ // cipher. The benefit is smaller and there is a risk of breaking buggy
193
+ // implementations.
194
+ //
195
+ // TODO(davidben): See if we can do this uniformly.
187
196
  Span<const uint8_t> rest = msg;
188
- do {
189
- Span<const uint8_t> chunk = rest.subspan(0, ssl->max_send_fragment);
190
- rest = rest.subspan(chunk.size());
197
+ if (ssl->quic_method == nullptr &&
198
+ ssl->s3->aead_write_ctx->is_null_cipher()) {
199
+ while (!rest.empty()) {
200
+ Span<const uint8_t> chunk = rest.subspan(0, ssl->max_send_fragment);
201
+ rest = rest.subspan(chunk.size());
202
+
203
+ if (!add_record_to_flight(ssl, SSL3_RT_HANDSHAKE, chunk)) {
204
+ return false;
205
+ }
206
+ }
207
+ } else {
208
+ while (!rest.empty()) {
209
+ // Flush if |pending_hs_data| is full.
210
+ if (ssl->s3->pending_hs_data &&
211
+ ssl->s3->pending_hs_data->length >= ssl->max_send_fragment &&
212
+ !tls_flush_pending_hs_data(ssl)) {
213
+ return false;
214
+ }
191
215
 
192
- if (!add_record_to_flight(ssl, SSL3_RT_HANDSHAKE, chunk)) {
193
- return false;
216
+ size_t pending_len =
217
+ ssl->s3->pending_hs_data ? ssl->s3->pending_hs_data->length : 0;
218
+ Span<const uint8_t> chunk =
219
+ rest.subspan(0, ssl->max_send_fragment - pending_len);
220
+ assert(!chunk.empty());
221
+ rest = rest.subspan(chunk.size());
222
+
223
+ if (!ssl->s3->pending_hs_data) {
224
+ ssl->s3->pending_hs_data.reset(BUF_MEM_new());
225
+ }
226
+ if (!ssl->s3->pending_hs_data ||
227
+ !BUF_MEM_append(ssl->s3->pending_hs_data.get(), chunk.data(),
228
+ chunk.size())) {
229
+ return false;
230
+ }
194
231
  }
195
- } while (!rest.empty());
232
+ }
196
233
 
197
234
  ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HANDSHAKE, msg);
198
235
  // TODO(svaldez): Move this up a layer to fix abstraction for SSLTranscript on
@@ -204,10 +241,36 @@ bool ssl3_add_message(SSL *ssl, Array<uint8_t> msg) {
204
241
  return true;
205
242
  }
206
243
 
244
+ bool tls_flush_pending_hs_data(SSL *ssl) {
245
+ if (!ssl->s3->pending_hs_data || ssl->s3->pending_hs_data->length == 0) {
246
+ return true;
247
+ }
248
+
249
+ UniquePtr<BUF_MEM> pending_hs_data = std::move(ssl->s3->pending_hs_data);
250
+ auto data =
251
+ MakeConstSpan(reinterpret_cast<const uint8_t *>(pending_hs_data->data),
252
+ pending_hs_data->length);
253
+ if (ssl->quic_method) {
254
+ if (!ssl->quic_method->add_handshake_data(ssl, ssl->s3->write_level,
255
+ data.data(), data.size())) {
256
+ OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_INTERNAL_ERROR);
257
+ return false;
258
+ }
259
+ return true;
260
+ }
261
+
262
+ return add_record_to_flight(ssl, SSL3_RT_HANDSHAKE, data);
263
+ }
264
+
207
265
  bool ssl3_add_change_cipher_spec(SSL *ssl) {
208
266
  static const uint8_t kChangeCipherSpec[1] = {SSL3_MT_CCS};
209
267
 
210
- if (!add_record_to_flight(ssl, SSL3_RT_CHANGE_CIPHER_SPEC,
268
+ if (!tls_flush_pending_hs_data(ssl)) {
269
+ return false;
270
+ }
271
+
272
+ if (!ssl->quic_method &&
273
+ !add_record_to_flight(ssl, SSL3_RT_CHANGE_CIPHER_SPEC,
211
274
  kChangeCipherSpec)) {
212
275
  return false;
213
276
  }
@@ -217,18 +280,23 @@ bool ssl3_add_change_cipher_spec(SSL *ssl) {
217
280
  return true;
218
281
  }
219
282
 
220
- bool ssl3_add_alert(SSL *ssl, uint8_t level, uint8_t desc) {
221
- uint8_t alert[2] = {level, desc};
222
- if (!add_record_to_flight(ssl, SSL3_RT_ALERT, alert)) {
223
- return false;
283
+ int ssl3_flush_flight(SSL *ssl) {
284
+ if (!tls_flush_pending_hs_data(ssl)) {
285
+ return -1;
224
286
  }
225
287
 
226
- ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_ALERT, alert);
227
- ssl_do_info_callback(ssl, SSL_CB_WRITE_ALERT, ((int)level << 8) | desc);
228
- return true;
229
- }
288
+ if (ssl->quic_method) {
289
+ if (ssl->s3->write_shutdown != ssl_shutdown_none) {
290
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
291
+ return -1;
292
+ }
293
+
294
+ if (!ssl->quic_method->flush_flight(ssl)) {
295
+ OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_INTERNAL_ERROR);
296
+ return -1;
297
+ }
298
+ }
230
299
 
231
- int ssl3_flush_flight(SSL *ssl) {
232
300
  if (ssl->s3->pending_flight == nullptr) {
233
301
  return 1;
234
302
  }
@@ -249,7 +317,7 @@ int ssl3_flush_flight(SSL *ssl) {
249
317
  if (!ssl->s3->write_buffer.empty()) {
250
318
  int ret = ssl_write_buffer_flush(ssl);
251
319
  if (ret <= 0) {
252
- ssl->s3->rwstate = SSL_WRITING;
320
+ ssl->s3->rwstate = SSL_ERROR_WANT_WRITE;
253
321
  return ret;
254
322
  }
255
323
  }
@@ -257,19 +325,19 @@ int ssl3_flush_flight(SSL *ssl) {
257
325
  // Write the pending flight.
258
326
  while (ssl->s3->pending_flight_offset < ssl->s3->pending_flight->length) {
259
327
  int ret = BIO_write(
260
- ssl->wbio,
328
+ ssl->wbio.get(),
261
329
  ssl->s3->pending_flight->data + ssl->s3->pending_flight_offset,
262
330
  ssl->s3->pending_flight->length - ssl->s3->pending_flight_offset);
263
331
  if (ret <= 0) {
264
- ssl->s3->rwstate = SSL_WRITING;
332
+ ssl->s3->rwstate = SSL_ERROR_WANT_WRITE;
265
333
  return ret;
266
334
  }
267
335
 
268
336
  ssl->s3->pending_flight_offset += ret;
269
337
  }
270
338
 
271
- if (BIO_flush(ssl->wbio) <= 0) {
272
- ssl->s3->rwstate = SSL_WRITING;
339
+ if (BIO_flush(ssl->wbio.get()) <= 0) {
340
+ ssl->s3->rwstate = SSL_ERROR_WANT_WRITE;
273
341
  return -1;
274
342
  }
275
343
 
@@ -343,7 +411,7 @@ static ssl_open_record_t read_v2_client_hello(SSL *ssl, size_t *out_consumed,
343
411
  OPENSSL_memcpy(random + (SSL3_RANDOM_SIZE - rand_len), CBS_data(&challenge),
344
412
  rand_len);
345
413
 
346
- // Write out an equivalent SSLv3 ClientHello.
414
+ // Write out an equivalent TLS ClientHello directly to the handshake buffer.
347
415
  size_t max_v3_client_hello = SSL3_HM_HEADER_LENGTH + 2 /* version */ +
348
416
  SSL3_RANDOM_SIZE + 1 /* session ID length */ +
349
417
  2 /* cipher list length */ +
@@ -351,7 +419,11 @@ static ssl_open_record_t read_v2_client_hello(SSL *ssl, size_t *out_consumed,
351
419
  1 /* compression length */ + 1 /* compression */;
352
420
  ScopedCBB client_hello;
353
421
  CBB hello_body, cipher_suites;
354
- if (!BUF_MEM_reserve(ssl->s3->hs_buf.get(), max_v3_client_hello) ||
422
+ if (!ssl->s3->hs_buf) {
423
+ ssl->s3->hs_buf.reset(BUF_MEM_new());
424
+ }
425
+ if (!ssl->s3->hs_buf ||
426
+ !BUF_MEM_reserve(ssl->s3->hs_buf.get(), max_v3_client_hello) ||
355
427
  !CBB_init_fixed(client_hello.get(), (uint8_t *)ssl->s3->hs_buf->data,
356
428
  ssl->s3->hs_buf->max) ||
357
429
  !CBB_add_u8(client_hello.get(), SSL3_MT_CLIENT_HELLO) ||
@@ -424,7 +496,7 @@ static bool parse_message(const SSL *ssl, SSLMessage *out,
424
496
  return true;
425
497
  }
426
498
 
427
- bool ssl3_get_message(SSL *ssl, SSLMessage *out) {
499
+ bool ssl3_get_message(const SSL *ssl, SSLMessage *out) {
428
500
  size_t unused;
429
501
  if (!parse_message(ssl, out, &unused)) {
430
502
  return false;
@@ -471,18 +543,18 @@ bool tls_has_unprocessed_handshake_data(const SSL *ssl) {
471
543
  return ssl->s3->hs_buf && ssl->s3->hs_buf->length > msg_len;
472
544
  }
473
545
 
474
- ssl_open_record_t ssl3_open_handshake(SSL *ssl, size_t *out_consumed,
475
- uint8_t *out_alert, Span<uint8_t> in) {
476
- *out_consumed = 0;
546
+ bool tls_append_handshake_data(SSL *ssl, Span<const uint8_t> data) {
477
547
  // Re-create the handshake buffer if needed.
478
548
  if (!ssl->s3->hs_buf) {
479
549
  ssl->s3->hs_buf.reset(BUF_MEM_new());
480
- if (!ssl->s3->hs_buf) {
481
- *out_alert = SSL_AD_INTERNAL_ERROR;
482
- return ssl_open_record_error;
483
- }
484
550
  }
551
+ return ssl->s3->hs_buf &&
552
+ BUF_MEM_append(ssl->s3->hs_buf.get(), data.data(), data.size());
553
+ }
485
554
 
555
+ ssl_open_record_t ssl3_open_handshake(SSL *ssl, size_t *out_consumed,
556
+ uint8_t *out_alert, Span<uint8_t> in) {
557
+ *out_consumed = 0;
486
558
  // Bypass the record layer for the first message to handle V2ClientHello.
487
559
  if (ssl->server && !ssl->s3->v2_hello_done) {
488
560
  // Ask for the first 5 bytes, the size of the TLS record header. This is
@@ -551,7 +623,7 @@ ssl_open_record_t ssl3_open_handshake(SSL *ssl, size_t *out_consumed,
551
623
  }
552
624
 
553
625
  // Append the entire handshake record to the buffer.
554
- if (!BUF_MEM_append(ssl->s3->hs_buf.get(), body.data(), body.size())) {
626
+ if (!tls_append_handshake_data(ssl, body)) {
555
627
  *out_alert = SSL_AD_INTERNAL_ERROR;
556
628
  return ssl_open_record_error;
557
629
  }
@@ -582,4 +654,71 @@ void ssl3_next_message(SSL *ssl) {
582
654
  }
583
655
  }
584
656
 
585
- } // namespace bssl
657
+ // CipherScorer produces a "score" for each possible cipher suite offered by
658
+ // the client.
659
+ class CipherScorer {
660
+ public:
661
+ CipherScorer(uint16_t group_id)
662
+ : aes_is_fine_(EVP_has_aes_hardware()),
663
+ security_128_is_fine_(group_id != SSL_CURVE_CECPQ2) {}
664
+
665
+ typedef std::tuple<bool, bool, bool> Score;
666
+
667
+ // MinScore returns a |Score| that will compare less than the score of all
668
+ // cipher suites.
669
+ Score MinScore() const {
670
+ return Score(false, false, false);
671
+ }
672
+
673
+ Score Evaluate(const SSL_CIPHER *a) const {
674
+ return Score(
675
+ // Something is always preferable to nothing.
676
+ true,
677
+ // Either 128-bit is fine, or 256-bit is preferred.
678
+ security_128_is_fine_ || a->algorithm_enc != SSL_AES128GCM,
679
+ // Either AES is fine, or else ChaCha20 is preferred.
680
+ aes_is_fine_ || a->algorithm_enc == SSL_CHACHA20POLY1305);
681
+ }
682
+
683
+ private:
684
+ const bool aes_is_fine_;
685
+ const bool security_128_is_fine_;
686
+ };
687
+
688
+ const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
689
+ uint16_t group_id) {
690
+ if (CBS_len(&cipher_suites) % 2 != 0) {
691
+ return nullptr;
692
+ }
693
+
694
+ const SSL_CIPHER *best = nullptr;
695
+ CipherScorer scorer(group_id);
696
+ CipherScorer::Score best_score = scorer.MinScore();
697
+
698
+ while (CBS_len(&cipher_suites) > 0) {
699
+ uint16_t cipher_suite;
700
+ if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
701
+ return nullptr;
702
+ }
703
+
704
+ // Limit to TLS 1.3 ciphers we know about.
705
+ const SSL_CIPHER *candidate = SSL_get_cipher_by_value(cipher_suite);
706
+ if (candidate == nullptr ||
707
+ SSL_CIPHER_get_min_version(candidate) > version ||
708
+ SSL_CIPHER_get_max_version(candidate) < version) {
709
+ continue;
710
+ }
711
+
712
+ const CipherScorer::Score candidate_score = scorer.Evaluate(candidate);
713
+ // |candidate_score| must be larger to displace the current choice. That way
714
+ // the client's order controls between ciphers with an equal score.
715
+ if (candidate_score > best_score) {
716
+ best = candidate;
717
+ best_score = candidate_score;
718
+ }
719
+ }
720
+
721
+ return best;
722
+ }
723
+
724
+ BSSL_NAMESPACE_END
@@ -162,7 +162,7 @@
162
162
  #include "internal.h"
163
163
 
164
164
 
165
- namespace bssl {
165
+ BSSL_NAMESPACE_BEGIN
166
166
 
167
167
  SSL3_STATE::SSL3_STATE()
168
168
  : skip_early_data(false),
@@ -172,12 +172,17 @@ SSL3_STATE::SSL3_STATE()
172
172
  has_message(false),
173
173
  initial_handshake_complete(false),
174
174
  session_reused(false),
175
+ delegated_credential_used(false),
175
176
  send_connection_binding(false),
176
- tlsext_channel_id_valid(false),
177
+ channel_id_valid(false),
177
178
  key_update_pending(false),
178
179
  wpend_pending(false),
179
180
  early_data_accepted(false),
180
- draft_downgrade(false) {}
181
+ tls13_downgrade(false),
182
+ token_binding_negotiated(false),
183
+ pq_experiment_signal_seen(false),
184
+ alert_dispatch(false),
185
+ renegotiate_pending(false) {}
181
186
 
182
187
  SSL3_STATE::~SSL3_STATE() {}
183
188
 
@@ -214,13 +219,4 @@ void ssl3_free(SSL *ssl) {
214
219
  ssl->s3 = NULL;
215
220
  }
216
221
 
217
- const struct ssl_cipher_preference_list_st *ssl_get_cipher_preferences(
218
- const SSL *ssl) {
219
- if (ssl->cipher_list != NULL) {
220
- return ssl->cipher_list;
221
- }
222
-
223
- return ssl->ctx->cipher_list;
224
- }
225
-
226
- } // namespace bssl
222
+ BSSL_NAMESPACE_END
@@ -118,11 +118,12 @@
118
118
  #include <openssl/mem.h>
119
119
  #include <openssl/rand.h>
120
120
 
121
+ #include "../crypto/err/internal.h"
121
122
  #include "../crypto/internal.h"
122
123
  #include "internal.h"
123
124
 
124
125
 
125
- namespace bssl {
126
+ BSSL_NAMESPACE_BEGIN
126
127
 
127
128
  static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len);
128
129
 
@@ -163,9 +164,11 @@ int ssl3_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *in,
163
164
  for (;;) {
164
165
  // max contains the maximum number of bytes that we can put into a record.
165
166
  unsigned max = ssl->max_send_fragment;
166
- if (is_early_data_write && max > ssl->session->ticket_max_early_data -
167
- ssl->s3->hs->early_data_written) {
168
- max = ssl->session->ticket_max_early_data - ssl->s3->hs->early_data_written;
167
+ if (is_early_data_write &&
168
+ max > ssl->session->ticket_max_early_data -
169
+ ssl->s3->hs->early_data_written) {
170
+ max =
171
+ ssl->session->ticket_max_early_data - ssl->s3->hs->early_data_written;
169
172
  if (max == 0) {
170
173
  ssl->s3->wnum = tot;
171
174
  ssl->s3->hs->can_early_write = false;
@@ -230,8 +233,8 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
230
233
  return -1;
231
234
  }
232
235
 
233
- if (len == 0) {
234
- return 0;
236
+ if (!tls_flush_pending_hs_data(ssl)) {
237
+ return -1;
235
238
  }
236
239
 
237
240
  size_t flight_len = 0;
@@ -240,12 +243,19 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
240
243
  ssl->s3->pending_flight->length - ssl->s3->pending_flight_offset;
241
244
  }
242
245
 
243
- size_t max_out = len + SSL_max_seal_overhead(ssl);
244
- if (max_out < len || max_out + flight_len < max_out) {
245
- OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
246
- return -1;
246
+ size_t max_out = flight_len;
247
+ if (len > 0) {
248
+ const size_t max_ciphertext_len = len + SSL_max_seal_overhead(ssl);
249
+ if (max_ciphertext_len < len || max_out + max_ciphertext_len < max_out) {
250
+ OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
251
+ return -1;
252
+ }
253
+ max_out += max_ciphertext_len;
254
+ }
255
+
256
+ if (max_out == 0) {
257
+ return 0;
247
258
  }
248
- max_out += flight_len;
249
259
 
250
260
  if (!buf->EnsureCap(flight_len + ssl_seal_align_prefix_len(ssl), max_out)) {
251
261
  return -1;
@@ -265,12 +275,14 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *in, unsigned len) {
265
275
  buf->DidWrite(flight_len);
266
276
  }
267
277
 
268
- size_t ciphertext_len;
269
- if (!tls_seal_record(ssl, buf->remaining().data(), &ciphertext_len,
270
- buf->remaining().size(), type, in, len)) {
271
- return -1;
278
+ if (len > 0) {
279
+ size_t ciphertext_len;
280
+ if (!tls_seal_record(ssl, buf->remaining().data(), &ciphertext_len,
281
+ buf->remaining().size(), type, in, len)) {
282
+ return -1;
283
+ }
284
+ buf->DidWrite(ciphertext_len);
272
285
  }
273
- buf->DidWrite(ciphertext_len);
274
286
 
275
287
  // Now that we've made progress on the connection, uncork KeyUpdate
276
288
  // acknowledgments.
@@ -313,11 +325,7 @@ ssl_open_record_t ssl3_open_app_data(SSL *ssl, Span<uint8_t> *out,
313
325
  return ssl_open_record_error;
314
326
  }
315
327
 
316
- if (!ssl->s3->hs_buf) {
317
- ssl->s3->hs_buf.reset(BUF_MEM_new());
318
- }
319
- if (!ssl->s3->hs_buf ||
320
- !BUF_MEM_append(ssl->s3->hs_buf.get(), body.data(), body.size())) {
328
+ if (!tls_append_handshake_data(ssl, body)) {
321
329
  *out_alert = SSL_AD_INTERNAL_ERROR;
322
330
  return ssl_open_record_error;
323
331
  }
@@ -374,7 +382,24 @@ ssl_open_record_t ssl3_open_change_cipher_spec(SSL *ssl, size_t *out_consumed,
374
382
  return ssl_open_record_success;
375
383
  }
376
384
 
377
- int ssl_send_alert(SSL *ssl, int level, int desc) {
385
+ void ssl_send_alert(SSL *ssl, int level, int desc) {
386
+ // This function is called in response to a fatal error from the peer. Ignore
387
+ // any failures writing the alert and report only the original error. In
388
+ // particular, if the transport uses |SSL_write|, our existing error will be
389
+ // clobbered so we must save and restore the error queue. See
390
+ // https://crbug.com/959305.
391
+ //
392
+ // TODO(davidben): Return the alert out of the handshake, rather than calling
393
+ // this function internally everywhere.
394
+ //
395
+ // TODO(davidben): This does not allow retrying if the alert hit EAGAIN. See
396
+ // https://crbug.com/boringssl/130.
397
+ UniquePtr<ERR_SAVE_STATE> err_state(ERR_save_state());
398
+ ssl_send_alert_impl(ssl, level, desc);
399
+ ERR_restore_state(err_state.get());
400
+ }
401
+
402
+ int ssl_send_alert_impl(SSL *ssl, int level, int desc) {
378
403
  // It is illegal to send an alert when we've already sent a closing one.
379
404
  if (ssl->s3->write_shutdown != ssl_shutdown_none) {
380
405
  OPENSSL_PUT_ERROR(SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
@@ -389,7 +414,7 @@ int ssl_send_alert(SSL *ssl, int level, int desc) {
389
414
  ssl->s3->write_shutdown = ssl_shutdown_error;
390
415
  }
391
416
 
392
- ssl->s3->alert_dispatch = 1;
417
+ ssl->s3->alert_dispatch = true;
393
418
  ssl->s3->send_alert[0] = level;
394
419
  ssl->s3->send_alert[1] = desc;
395
420
  if (ssl->s3->write_buffer.empty()) {
@@ -403,15 +428,24 @@ int ssl_send_alert(SSL *ssl, int level, int desc) {
403
428
  }
404
429
 
405
430
  int ssl3_dispatch_alert(SSL *ssl) {
406
- int ret = do_ssl3_write(ssl, SSL3_RT_ALERT, &ssl->s3->send_alert[0], 2);
407
- if (ret <= 0) {
408
- return ret;
431
+ if (ssl->quic_method) {
432
+ if (!ssl->quic_method->send_alert(ssl, ssl->s3->write_level,
433
+ ssl->s3->send_alert[1])) {
434
+ OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_INTERNAL_ERROR);
435
+ return 0;
436
+ }
437
+ } else {
438
+ int ret = do_ssl3_write(ssl, SSL3_RT_ALERT, &ssl->s3->send_alert[0], 2);
439
+ if (ret <= 0) {
440
+ return ret;
441
+ }
409
442
  }
410
- ssl->s3->alert_dispatch = 0;
443
+
444
+ ssl->s3->alert_dispatch = false;
411
445
 
412
446
  // If the alert is fatal, flush the BIO now.
413
447
  if (ssl->s3->send_alert[0] == SSL3_AL_FATAL) {
414
- BIO_flush(ssl->wbio);
448
+ BIO_flush(ssl->wbio.get());
415
449
  }
416
450
 
417
451
  ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_ALERT, ssl->s3->send_alert);
@@ -422,4 +456,4 @@ int ssl3_dispatch_alert(SSL *ssl) {
422
456
  return 1;
423
457
  }
424
458
 
425
- } // namespace bssl
459
+ BSSL_NAMESPACE_END