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
@@ -135,22 +135,14 @@
135
135
 
136
136
  #include <openssl/ssl.h>
137
137
 
138
- #include <assert.h>
139
- #include <string.h>
140
-
141
138
  #include <openssl/buf.h>
142
139
  #include <openssl/digest.h>
143
140
  #include <openssl/err.h>
144
- #include <openssl/mem.h>
145
- #include <openssl/md5.h>
146
- #include <openssl/nid.h>
147
- #include <openssl/sha.h>
148
141
 
149
- #include "../crypto/internal.h"
150
142
  #include "internal.h"
151
143
 
152
144
 
153
- namespace bssl {
145
+ BSSL_NAMESPACE_BEGIN
154
146
 
155
147
  SSLTranscript::SSLTranscript() {}
156
148
 
@@ -163,7 +155,6 @@ bool SSLTranscript::Init() {
163
155
  }
164
156
 
165
157
  hash_.Reset();
166
- md5_.Reset();
167
158
  return true;
168
159
  }
169
160
 
@@ -180,17 +171,6 @@ static bool InitDigestWithData(EVP_MD_CTX *ctx, const EVP_MD *md,
180
171
 
181
172
  bool SSLTranscript::InitHash(uint16_t version, const SSL_CIPHER *cipher) {
182
173
  const EVP_MD *md = ssl_get_handshake_digest(version, cipher);
183
-
184
- // To support SSL 3.0's Finished and CertificateVerify constructions,
185
- // EVP_md5_sha1() is split into MD5 and SHA-1 halves. When SSL 3.0 is removed,
186
- // we can simplify this.
187
- if (md == EVP_md5_sha1()) {
188
- if (!InitDigestWithData(md5_.get(), EVP_md5(), buffer_.get())) {
189
- return false;
190
- }
191
- md = EVP_sha1();
192
- }
193
-
194
174
  return InitDigestWithData(hash_.get(), md, buffer_.get());
195
175
  }
196
176
 
@@ -203,9 +183,6 @@ size_t SSLTranscript::DigestLen() const {
203
183
  }
204
184
 
205
185
  const EVP_MD *SSLTranscript::Digest() const {
206
- if (EVP_MD_CTX_md(md5_.get()) != nullptr) {
207
- return EVP_md5_sha1();
208
- }
209
186
  return EVP_MD_CTX_md(hash_.get());
210
187
  }
211
188
 
@@ -229,8 +206,20 @@ bool SSLTranscript::UpdateForHelloRetryRequest() {
229
206
  return true;
230
207
  }
231
208
 
232
- bool SSLTranscript::CopyHashContext(EVP_MD_CTX *ctx) {
233
- return EVP_MD_CTX_copy_ex(ctx, hash_.get());
209
+ bool SSLTranscript::CopyToHashContext(EVP_MD_CTX *ctx, const EVP_MD *digest) {
210
+ const EVP_MD *transcript_digest = Digest();
211
+ if (transcript_digest != nullptr &&
212
+ EVP_MD_type(transcript_digest) == EVP_MD_type(digest)) {
213
+ return EVP_MD_CTX_copy_ex(ctx, hash_.get());
214
+ }
215
+
216
+ if (buffer_) {
217
+ return EVP_DigestInit_ex(ctx, digest, nullptr) &&
218
+ EVP_DigestUpdate(ctx, buffer_->data, buffer_->length);
219
+ }
220
+
221
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
222
+ return false;
234
223
  }
235
224
 
236
225
  bool SSLTranscript::Update(Span<const uint8_t> in) {
@@ -244,150 +233,40 @@ bool SSLTranscript::Update(Span<const uint8_t> in) {
244
233
  if (EVP_MD_CTX_md(hash_.get()) != NULL) {
245
234
  EVP_DigestUpdate(hash_.get(), in.data(), in.size());
246
235
  }
247
- if (EVP_MD_CTX_md(md5_.get()) != NULL) {
248
- EVP_DigestUpdate(md5_.get(), in.data(), in.size());
249
- }
250
236
 
251
237
  return true;
252
238
  }
253
239
 
254
240
  bool SSLTranscript::GetHash(uint8_t *out, size_t *out_len) {
255
241
  ScopedEVP_MD_CTX ctx;
256
- unsigned md5_len = 0;
257
- if (EVP_MD_CTX_md(md5_.get()) != NULL) {
258
- if (!EVP_MD_CTX_copy_ex(ctx.get(), md5_.get()) ||
259
- !EVP_DigestFinal_ex(ctx.get(), out, &md5_len)) {
260
- return false;
261
- }
262
- }
263
-
264
242
  unsigned len;
265
243
  if (!EVP_MD_CTX_copy_ex(ctx.get(), hash_.get()) ||
266
- !EVP_DigestFinal_ex(ctx.get(), out + md5_len, &len)) {
267
- return false;
268
- }
269
-
270
- *out_len = md5_len + len;
271
- return true;
272
- }
273
-
274
- static bool SSL3HandshakeMAC(const SSL_SESSION *session,
275
- const EVP_MD_CTX *ctx_template, const char *sender,
276
- size_t sender_len, uint8_t *p, size_t *out_len) {
277
- ScopedEVP_MD_CTX ctx;
278
- if (!EVP_MD_CTX_copy_ex(ctx.get(), ctx_template)) {
279
- OPENSSL_PUT_ERROR(SSL, ERR_LIB_EVP);
244
+ !EVP_DigestFinal_ex(ctx.get(), out, &len)) {
280
245
  return false;
281
246
  }
282
-
283
- static const uint8_t kPad1[48] = {
284
- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
285
- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
286
- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
287
- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
288
- };
289
-
290
- static const uint8_t kPad2[48] = {
291
- 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
292
- 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
293
- 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
294
- 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c,
295
- };
296
-
297
- size_t n = EVP_MD_CTX_size(ctx.get());
298
-
299
- size_t npad = (48 / n) * n;
300
- EVP_DigestUpdate(ctx.get(), sender, sender_len);
301
- EVP_DigestUpdate(ctx.get(), session->master_key, session->master_key_length);
302
- EVP_DigestUpdate(ctx.get(), kPad1, npad);
303
- unsigned md_buf_len;
304
- uint8_t md_buf[EVP_MAX_MD_SIZE];
305
- EVP_DigestFinal_ex(ctx.get(), md_buf, &md_buf_len);
306
-
307
- if (!EVP_DigestInit_ex(ctx.get(), EVP_MD_CTX_md(ctx.get()), NULL)) {
308
- OPENSSL_PUT_ERROR(SSL, ERR_LIB_EVP);
309
- return false;
310
- }
311
- EVP_DigestUpdate(ctx.get(), session->master_key, session->master_key_length);
312
- EVP_DigestUpdate(ctx.get(), kPad2, npad);
313
- EVP_DigestUpdate(ctx.get(), md_buf, md_buf_len);
314
- unsigned len;
315
- EVP_DigestFinal_ex(ctx.get(), p, &len);
316
-
317
247
  *out_len = len;
318
248
  return true;
319
249
  }
320
250
 
321
- bool SSLTranscript::GetSSL3CertVerifyHash(uint8_t *out, size_t *out_len,
322
- const SSL_SESSION *session,
323
- uint16_t signature_algorithm) {
324
- if (Digest() != EVP_md5_sha1()) {
325
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
326
- return false;
327
- }
328
-
329
- if (signature_algorithm == SSL_SIGN_RSA_PKCS1_MD5_SHA1) {
330
- size_t md5_len, len;
331
- if (!SSL3HandshakeMAC(session, md5_.get(), NULL, 0, out, &md5_len) ||
332
- !SSL3HandshakeMAC(session, hash_.get(), NULL, 0, out + md5_len, &len)) {
333
- return false;
334
- }
335
- *out_len = md5_len + len;
336
- return true;
337
- }
338
-
339
- if (signature_algorithm == SSL_SIGN_ECDSA_SHA1) {
340
- return SSL3HandshakeMAC(session, hash_.get(), NULL, 0, out, out_len);
341
- }
342
-
343
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
344
- return false;
345
- }
346
-
347
251
  bool SSLTranscript::GetFinishedMAC(uint8_t *out, size_t *out_len,
348
252
  const SSL_SESSION *session,
349
253
  bool from_server) {
350
- if (session->ssl_version == SSL3_VERSION) {
351
- if (Digest() != EVP_md5_sha1()) {
352
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
353
- return false;
354
- }
355
-
356
- const char *sender = from_server ? SSL3_MD_SERVER_FINISHED_CONST
357
- : SSL3_MD_CLIENT_FINISHED_CONST;
358
- const size_t sender_len = 4;
359
- size_t md5_len, len;
360
- if (!SSL3HandshakeMAC(session, md5_.get(), sender, sender_len, out,
361
- &md5_len) ||
362
- !SSL3HandshakeMAC(session, hash_.get(), sender, sender_len,
363
- out + md5_len, &len)) {
364
- return false;
365
- }
366
-
367
- *out_len = md5_len + len;
368
- return true;
369
- }
370
-
371
- // At this point, the handshake should have released the handshake buffer on
372
- // its own.
373
- assert(!buffer_);
374
-
375
254
  static const char kClientLabel[] = "client finished";
376
255
  static const char kServerLabel[] = "server finished";
377
256
  auto label = from_server
378
257
  ? MakeConstSpan(kServerLabel, sizeof(kServerLabel) - 1)
379
258
  : MakeConstSpan(kClientLabel, sizeof(kClientLabel) - 1);
380
259
 
381
- uint8_t digests[EVP_MAX_MD_SIZE];
382
- size_t digests_len;
383
- if (!GetHash(digests, &digests_len)) {
260
+ uint8_t digest[EVP_MAX_MD_SIZE];
261
+ size_t digest_len;
262
+ if (!GetHash(digest, &digest_len)) {
384
263
  return false;
385
264
  }
386
265
 
387
266
  static const size_t kFinishedLen = 12;
388
267
  if (!tls1_prf(Digest(), MakeSpan(out, kFinishedLen),
389
268
  MakeConstSpan(session->master_key, session->master_key_length),
390
- label, MakeConstSpan(digests, digests_len), {})) {
269
+ label, MakeConstSpan(digest, digest_len), {})) {
391
270
  return false;
392
271
  }
393
272
 
@@ -395,4 +274,4 @@ bool SSLTranscript::GetFinishedMAC(uint8_t *out, size_t *out_len,
395
274
  return true;
396
275
  }
397
276
 
398
- } // namespace bssl
277
+ BSSL_NAMESPACE_END
@@ -23,21 +23,17 @@
23
23
  #include "../crypto/internal.h"
24
24
 
25
25
 
26
- namespace bssl {
26
+ BSSL_NAMESPACE_BEGIN
27
27
 
28
28
  bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version) {
29
29
  switch (version) {
30
- case SSL3_VERSION:
31
30
  case TLS1_VERSION:
32
31
  case TLS1_1_VERSION:
33
32
  case TLS1_2_VERSION:
33
+ case TLS1_3_VERSION:
34
34
  *out = version;
35
35
  return true;
36
36
 
37
- case TLS1_3_DRAFT23_VERSION:
38
- *out = TLS1_3_VERSION;
39
- return true;
40
-
41
37
  case DTLS1_VERSION:
42
38
  // DTLS 1.0 is analogous to TLS 1.1, not TLS 1.0.
43
39
  *out = TLS1_1_VERSION;
@@ -56,11 +52,10 @@ bool ssl_protocol_version_from_wire(uint16_t *out, uint16_t version) {
56
52
  // decreasing preference.
57
53
 
58
54
  static const uint16_t kTLSVersions[] = {
59
- TLS1_3_DRAFT23_VERSION,
55
+ TLS1_3_VERSION,
60
56
  TLS1_2_VERSION,
61
57
  TLS1_1_VERSION,
62
58
  TLS1_VERSION,
63
- SSL3_VERSION,
64
59
  };
65
60
 
66
61
  static const uint16_t kDTLSVersions[] = {
@@ -68,24 +63,16 @@ static const uint16_t kDTLSVersions[] = {
68
63
  DTLS1_VERSION,
69
64
  };
70
65
 
71
- static void get_method_versions(const SSL_PROTOCOL_METHOD *method,
72
- const uint16_t **out, size_t *out_num) {
73
- if (method->is_dtls) {
74
- *out = kDTLSVersions;
75
- *out_num = OPENSSL_ARRAY_SIZE(kDTLSVersions);
76
- } else {
77
- *out = kTLSVersions;
78
- *out_num = OPENSSL_ARRAY_SIZE(kTLSVersions);
79
- }
66
+ static Span<const uint16_t> get_method_versions(
67
+ const SSL_PROTOCOL_METHOD *method) {
68
+ return method->is_dtls ? Span<const uint16_t>(kDTLSVersions)
69
+ : Span<const uint16_t>(kTLSVersions);
80
70
  }
81
71
 
82
- static bool method_supports_version(const SSL_PROTOCOL_METHOD *method,
83
- uint16_t version) {
84
- const uint16_t *versions;
85
- size_t num_versions;
86
- get_method_versions(method, &versions, &num_versions);
87
- for (size_t i = 0; i < num_versions; i++) {
88
- if (versions[i] == version) {
72
+ bool ssl_method_supports_version(const SSL_PROTOCOL_METHOD *method,
73
+ uint16_t version) {
74
+ for (uint16_t supported : get_method_versions(method)) {
75
+ if (supported == version) {
89
76
  return true;
90
77
  }
91
78
  }
@@ -93,13 +80,11 @@ static bool method_supports_version(const SSL_PROTOCOL_METHOD *method,
93
80
  }
94
81
 
95
82
  // The following functions map between API versions and wire versions. The
96
- // public API works on wire versions, except that TLS 1.3 draft versions all
97
- // appear as TLS 1.3. This will get collapsed back down when TLS 1.3 is
98
- // finalized.
83
+ // public API works on wire versions.
99
84
 
100
85
  static const char *ssl_version_to_string(uint16_t version) {
101
86
  switch (version) {
102
- case TLS1_3_DRAFT23_VERSION:
87
+ case TLS1_3_VERSION:
103
88
  return "TLSv1.3";
104
89
 
105
90
  case TLS1_2_VERSION:
@@ -111,9 +96,6 @@ static const char *ssl_version_to_string(uint16_t version) {
111
96
  case TLS1_VERSION:
112
97
  return "TLSv1";
113
98
 
114
- case SSL3_VERSION:
115
- return "SSLv3";
116
-
117
99
  case DTLS1_VERSION:
118
100
  return "DTLSv1";
119
101
 
@@ -126,26 +108,11 @@ static const char *ssl_version_to_string(uint16_t version) {
126
108
  }
127
109
 
128
110
  static uint16_t wire_version_to_api(uint16_t version) {
129
- switch (version) {
130
- // Report TLS 1.3 draft versions as TLS 1.3 in the public API.
131
- case TLS1_3_DRAFT23_VERSION:
132
- return TLS1_3_VERSION;
133
- default:
134
- return version;
135
- }
111
+ return version;
136
112
  }
137
113
 
138
- // api_version_to_wire maps |version| to some representative wire version. In
139
- // particular, it picks an arbitrary TLS 1.3 representative. This should only be
140
- // used in context where that does not matter.
114
+ // api_version_to_wire maps |version| to some representative wire version.
141
115
  static bool api_version_to_wire(uint16_t *out, uint16_t version) {
142
- if (version == TLS1_3_DRAFT23_VERSION) {
143
- return false;
144
- }
145
- if (version == TLS1_3_VERSION) {
146
- version = TLS1_3_DRAFT23_VERSION;
147
- }
148
-
149
116
  // Check it is a real protocol version.
150
117
  uint16_t unused;
151
118
  if (!ssl_protocol_version_from_wire(&unused, version)) {
@@ -159,12 +126,12 @@ static bool api_version_to_wire(uint16_t *out, uint16_t version) {
159
126
  static bool set_version_bound(const SSL_PROTOCOL_METHOD *method, uint16_t *out,
160
127
  uint16_t version) {
161
128
  if (!api_version_to_wire(&version, version) ||
162
- !method_supports_version(method, version) ||
163
- !ssl_protocol_version_from_wire(out, version)) {
129
+ !ssl_method_supports_version(method, version)) {
164
130
  OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_SSL_VERSION);
165
131
  return false;
166
132
  }
167
133
 
134
+ *out = version;
168
135
  return true;
169
136
  }
170
137
 
@@ -172,8 +139,7 @@ static bool set_min_version(const SSL_PROTOCOL_METHOD *method, uint16_t *out,
172
139
  uint16_t version) {
173
140
  // Zero is interpreted as the default minimum version.
174
141
  if (version == 0) {
175
- // SSL 3.0 is disabled by default and TLS 1.0 does not exist in DTLS.
176
- *out = method->is_dtls ? TLS1_1_VERSION : TLS1_VERSION;
142
+ *out = method->is_dtls ? DTLS1_VERSION : TLS1_VERSION;
177
143
  return true;
178
144
  }
179
145
 
@@ -184,7 +150,7 @@ static bool set_max_version(const SSL_PROTOCOL_METHOD *method, uint16_t *out,
184
150
  uint16_t version) {
185
151
  // Zero is interpreted as the default maximum version.
186
152
  if (version == 0) {
187
- *out = TLS1_2_VERSION;
153
+ *out = method->is_dtls ? DTLS1_2_VERSION : TLS1_2_VERSION;
188
154
  return true;
189
155
  }
190
156
 
@@ -195,27 +161,37 @@ const struct {
195
161
  uint16_t version;
196
162
  uint32_t flag;
197
163
  } kProtocolVersions[] = {
198
- {SSL3_VERSION, SSL_OP_NO_SSLv3},
199
164
  {TLS1_VERSION, SSL_OP_NO_TLSv1},
200
165
  {TLS1_1_VERSION, SSL_OP_NO_TLSv1_1},
201
166
  {TLS1_2_VERSION, SSL_OP_NO_TLSv1_2},
202
167
  {TLS1_3_VERSION, SSL_OP_NO_TLSv1_3},
203
168
  };
204
169
 
205
- bool ssl_get_version_range(const SSL *ssl, uint16_t *out_min_version,
170
+ bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version,
206
171
  uint16_t *out_max_version) {
207
172
  // For historical reasons, |SSL_OP_NO_DTLSv1| aliases |SSL_OP_NO_TLSv1|, but
208
173
  // DTLS 1.0 should be mapped to TLS 1.1.
209
- uint32_t options = ssl->options;
210
- if (SSL_is_dtls(ssl)) {
174
+ uint32_t options = hs->ssl->options;
175
+ if (SSL_is_dtls(hs->ssl)) {
211
176
  options &= ~SSL_OP_NO_TLSv1_1;
212
177
  if (options & SSL_OP_NO_DTLSv1) {
213
178
  options |= SSL_OP_NO_TLSv1_1;
214
179
  }
215
180
  }
216
181
 
217
- uint16_t min_version = ssl->conf_min_version;
218
- uint16_t max_version = ssl->conf_max_version;
182
+ uint16_t min_version, max_version;
183
+ if (!ssl_protocol_version_from_wire(&min_version,
184
+ hs->config->conf_min_version) ||
185
+ !ssl_protocol_version_from_wire(&max_version,
186
+ hs->config->conf_max_version)) {
187
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
188
+ return false;
189
+ }
190
+
191
+ // QUIC requires TLS 1.3.
192
+ if (hs->ssl->quic_method && min_version < TLS1_3_VERSION) {
193
+ min_version = TLS1_3_VERSION;
194
+ }
219
195
 
220
196
  // OpenSSL's API for controlling versions entails blacklisting individual
221
197
  // protocols. This has two problems. First, on the client, the protocol can
@@ -287,38 +263,20 @@ uint16_t ssl_protocol_version(const SSL *ssl) {
287
263
  bool ssl_supports_version(SSL_HANDSHAKE *hs, uint16_t version) {
288
264
  SSL *const ssl = hs->ssl;
289
265
  uint16_t protocol_version;
290
- if (!method_supports_version(ssl->method, version) ||
266
+ if (!ssl_method_supports_version(ssl->method, version) ||
291
267
  !ssl_protocol_version_from_wire(&protocol_version, version) ||
292
268
  hs->min_version > protocol_version ||
293
269
  protocol_version > hs->max_version) {
294
270
  return false;
295
271
  }
296
272
 
297
- // This logic is part of the TLS 1.3 variants mechanism used in TLS 1.3
298
- // experimentation. Although we currently only have one variant, TLS 1.3 does
299
- // not a final stable deployment yet, so leave the logic in place for now.
300
- if (protocol_version != TLS1_3_VERSION ||
301
- (ssl->tls13_variant == tls13_default &&
302
- version == TLS1_3_DRAFT23_VERSION)) {
303
- return true;
304
- }
305
-
306
- // The server, when not configured at |tls13_default|, should additionally
307
- // enable all variants.
308
- if (ssl->server && ssl->tls13_variant != tls13_default) {
309
- return true;
310
- }
311
-
312
- return false;
273
+ return true;
313
274
  }
314
275
 
315
276
  bool ssl_add_supported_versions(SSL_HANDSHAKE *hs, CBB *cbb) {
316
- const uint16_t *versions;
317
- size_t num_versions;
318
- get_method_versions(hs->ssl->method, &versions, &num_versions);
319
- for (size_t i = 0; i < num_versions; i++) {
320
- if (ssl_supports_version(hs, versions[i]) &&
321
- !CBB_add_u16(cbb, versions[i])) {
277
+ for (uint16_t version : get_method_versions(hs->ssl->method)) {
278
+ if (ssl_supports_version(hs, version) &&
279
+ !CBB_add_u16(cbb, version)) {
322
280
  return false;
323
281
  }
324
282
  }
@@ -327,24 +285,33 @@ bool ssl_add_supported_versions(SSL_HANDSHAKE *hs, CBB *cbb) {
327
285
 
328
286
  bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
329
287
  uint16_t *out_version, const CBS *peer_versions) {
330
- const uint16_t *versions;
331
- size_t num_versions;
332
- get_method_versions(hs->ssl->method, &versions, &num_versions);
333
- for (size_t i = 0; i < num_versions; i++) {
334
- if (!ssl_supports_version(hs, versions[i])) {
288
+ for (uint16_t version : get_method_versions(hs->ssl->method)) {
289
+ if (!ssl_supports_version(hs, version)) {
290
+ continue;
291
+ }
292
+
293
+ // JDK 11, prior to 11.0.2, has a buggy TLS 1.3 implementation which fails
294
+ // to send SNI when offering 1.3 sessions. Disable TLS 1.3 for such
295
+ // clients. We apply this logic here rather than |ssl_supports_version| so
296
+ // the downgrade signal continues to query the true capabilities. (The
297
+ // workaround is a limitation of the peer's capabilities rather than our
298
+ // own.)
299
+ //
300
+ // See https://bugs.openjdk.java.net/browse/JDK-8211806.
301
+ if (version == TLS1_3_VERSION && hs->apply_jdk11_workaround) {
335
302
  continue;
336
303
  }
337
304
 
338
305
  CBS copy = *peer_versions;
339
306
  while (CBS_len(&copy) != 0) {
340
- uint16_t version;
341
- if (!CBS_get_u16(&copy, &version)) {
307
+ uint16_t peer_version;
308
+ if (!CBS_get_u16(&copy, &peer_version)) {
342
309
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
343
310
  *out_alert = SSL_AD_DECODE_ERROR;
344
311
  return false;
345
312
  }
346
313
 
347
- if (version == versions[i]) {
314
+ if (peer_version == version) {
348
315
  *out_version = version;
349
316
  return true;
350
317
  }
@@ -356,7 +323,7 @@ bool ssl_negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert,
356
323
  return false;
357
324
  }
358
325
 
359
- } // namespace bssl
326
+ BSSL_NAMESPACE_END
360
327
 
361
328
  using namespace bssl;
362
329
 
@@ -368,12 +335,40 @@ int SSL_CTX_set_max_proto_version(SSL_CTX *ctx, uint16_t version) {
368
335
  return set_max_version(ctx->method, &ctx->conf_max_version, version);
369
336
  }
370
337
 
338
+ uint16_t SSL_CTX_get_min_proto_version(const SSL_CTX *ctx) {
339
+ return ctx->conf_min_version;
340
+ }
341
+
342
+ uint16_t SSL_CTX_get_max_proto_version(const SSL_CTX *ctx) {
343
+ return ctx->conf_max_version;
344
+ }
345
+
371
346
  int SSL_set_min_proto_version(SSL *ssl, uint16_t version) {
372
- return set_min_version(ssl->method, &ssl->conf_min_version, version);
347
+ if (!ssl->config) {
348
+ return 0;
349
+ }
350
+ return set_min_version(ssl->method, &ssl->config->conf_min_version, version);
373
351
  }
374
352
 
375
353
  int SSL_set_max_proto_version(SSL *ssl, uint16_t version) {
376
- return set_max_version(ssl->method, &ssl->conf_max_version, version);
354
+ if (!ssl->config) {
355
+ return 0;
356
+ }
357
+ return set_max_version(ssl->method, &ssl->config->conf_max_version, version);
358
+ }
359
+
360
+ uint16_t SSL_get_min_proto_version(const SSL *ssl) {
361
+ if (!ssl->config) {
362
+ return 0;
363
+ }
364
+ return ssl->config->conf_min_version;
365
+ }
366
+
367
+ uint16_t SSL_get_max_proto_version(const SSL *ssl) {
368
+ if (!ssl->config) {
369
+ return 0;
370
+ }
371
+ return ssl->config->conf_max_version;
377
372
  }
378
373
 
379
374
  int SSL_version(const SSL *ssl) {