grpc 1.30.0 → 1.31.1

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 (383) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security.h +8 -0
  4. data/include/grpc/grpc_security_constants.h +3 -0
  5. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  6. data/include/grpc/impl/codegen/port_platform.h +0 -32
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  8. data/src/core/ext/filters/client_channel/client_channel.cc +406 -261
  9. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  10. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  11. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  13. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  15. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  17. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  18. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +381 -72
  20. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  27. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  28. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  29. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  30. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  31. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  32. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  33. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  34. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  35. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  36. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  37. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  38. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  39. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  40. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  41. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  42. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  43. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  44. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  45. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  46. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  47. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  48. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  49. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  50. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  51. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  52. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  53. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  54. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  55. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  56. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  57. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  58. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  59. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  61. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  62. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  63. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  64. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  65. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  66. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  70. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  71. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  72. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  76. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  77. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  87. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  88. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  89. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  90. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  91. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  95. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  96. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  97. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  101. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  102. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  103. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  104. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  106. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  107. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  108. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  109. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  110. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  112. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  113. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  114. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  115. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  116. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  117. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  118. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  119. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  120. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  121. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  122. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  123. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  124. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  125. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  126. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  127. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  128. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  129. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  130. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  131. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  132. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  133. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  134. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  135. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  136. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  137. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  141. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  142. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  143. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  144. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  145. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  146. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  147. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  148. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  149. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  150. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  151. data/src/core/lib/channel/channel_trace.cc +2 -6
  152. data/src/core/lib/channel/channelz.cc +5 -15
  153. data/src/core/lib/gpr/log_linux.cc +6 -8
  154. data/src/core/lib/gpr/log_posix.cc +6 -8
  155. data/src/core/lib/gpr/string.cc +10 -9
  156. data/src/core/lib/gpr/string.h +4 -2
  157. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  158. data/src/core/lib/http/httpcli.cc +13 -10
  159. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  160. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  161. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  162. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  163. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  164. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  165. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  166. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  167. data/src/core/lib/iomgr/iomgr.cc +10 -0
  168. data/src/core/lib/iomgr/iomgr.h +10 -0
  169. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  170. data/src/core/lib/iomgr/port.h +1 -21
  171. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  172. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  173. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  174. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  175. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  176. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  177. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  178. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  179. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  180. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  181. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  182. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  183. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  184. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  185. data/src/core/lib/iomgr/tcp_server.h +7 -5
  186. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  187. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  188. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  189. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  190. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  191. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  192. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  193. data/src/core/lib/iomgr/udp_server.cc +24 -23
  194. data/src/core/lib/iomgr/udp_server.h +5 -2
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  198. data/src/core/lib/json/json_reader.cc +20 -21
  199. data/src/core/lib/security/credentials/credentials.h +5 -3
  200. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  201. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  202. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  203. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  204. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  205. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  206. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  207. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  209. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  210. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  211. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  212. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  213. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  214. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  215. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  216. data/src/core/lib/security/transport/auth_filters.h +0 -5
  217. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  218. data/src/core/lib/security/util/json_util.cc +12 -13
  219. data/src/core/lib/slice/slice.cc +38 -1
  220. data/src/core/lib/slice/slice_internal.h +1 -0
  221. data/src/core/lib/surface/call.cc +40 -41
  222. data/src/core/lib/surface/completion_queue.cc +271 -14
  223. data/src/core/lib/surface/completion_queue.h +8 -0
  224. data/src/core/lib/surface/init.cc +2 -0
  225. data/src/core/lib/surface/server.cc +565 -632
  226. data/src/core/lib/surface/server.h +34 -12
  227. data/src/core/lib/surface/version.cc +2 -2
  228. data/src/core/lib/transport/transport.h +6 -0
  229. data/src/core/lib/uri/uri_parser.cc +8 -15
  230. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  231. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  232. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  233. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  234. data/src/core/tsi/ssl_transport_security.cc +108 -11
  235. data/src/core/tsi/ssl_transport_security.h +14 -2
  236. data/src/core/tsi/transport_security_interface.h +5 -0
  237. data/src/ruby/bin/math_services_pb.rb +4 -4
  238. data/src/ruby/ext/grpc/extconf.rb +5 -2
  239. data/src/ruby/ext/grpc/rb_call.c +3 -2
  240. data/src/ruby/ext/grpc/rb_call.h +4 -0
  241. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  242. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  243. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  244. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  245. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  246. data/src/ruby/lib/grpc/version.rb +1 -1
  247. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  248. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  249. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  250. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  251. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  252. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  253. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  254. data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
  255. data/src/ruby/spec/support/services.rb +10 -4
  256. data/src/ruby/spec/user_agent_spec.rb +74 -0
  257. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  258. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  259. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  260. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  262. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  264. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  265. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  269. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  270. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  271. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  272. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  282. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  283. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  284. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  285. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  286. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  288. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  289. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  303. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  305. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  306. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  307. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  308. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  309. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  310. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  311. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  312. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  313. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  314. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  315. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  316. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  317. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  318. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  319. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  320. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  321. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  322. data/third_party/re2/re2/bitmap256.h +117 -0
  323. data/third_party/re2/re2/bitstate.cc +385 -0
  324. data/third_party/re2/re2/compile.cc +1279 -0
  325. data/third_party/re2/re2/dfa.cc +2130 -0
  326. data/third_party/re2/re2/filtered_re2.cc +121 -0
  327. data/third_party/re2/re2/filtered_re2.h +109 -0
  328. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  329. data/third_party/re2/re2/nfa.cc +713 -0
  330. data/third_party/re2/re2/onepass.cc +623 -0
  331. data/third_party/re2/re2/parse.cc +2464 -0
  332. data/third_party/re2/re2/perl_groups.cc +119 -0
  333. data/third_party/re2/re2/pod_array.h +55 -0
  334. data/third_party/re2/re2/prefilter.cc +710 -0
  335. data/third_party/re2/re2/prefilter.h +108 -0
  336. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  337. data/third_party/re2/re2/prefilter_tree.h +139 -0
  338. data/third_party/re2/re2/prog.cc +988 -0
  339. data/third_party/re2/re2/prog.h +436 -0
  340. data/third_party/re2/re2/re2.cc +1362 -0
  341. data/third_party/re2/re2/re2.h +1002 -0
  342. data/third_party/re2/re2/regexp.cc +980 -0
  343. data/third_party/re2/re2/regexp.h +659 -0
  344. data/third_party/re2/re2/set.cc +154 -0
  345. data/third_party/re2/re2/set.h +80 -0
  346. data/third_party/re2/re2/simplify.cc +657 -0
  347. data/third_party/re2/re2/sparse_array.h +392 -0
  348. data/third_party/re2/re2/sparse_set.h +264 -0
  349. data/third_party/re2/re2/stringpiece.cc +65 -0
  350. data/third_party/re2/re2/stringpiece.h +210 -0
  351. data/third_party/re2/re2/tostring.cc +351 -0
  352. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  353. data/third_party/re2/re2/unicode_casefold.h +78 -0
  354. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  355. data/third_party/re2/re2/unicode_groups.h +67 -0
  356. data/third_party/re2/re2/walker-inl.h +246 -0
  357. data/third_party/re2/util/benchmark.h +156 -0
  358. data/third_party/re2/util/flags.h +26 -0
  359. data/third_party/re2/util/logging.h +109 -0
  360. data/third_party/re2/util/malloc_counter.h +19 -0
  361. data/third_party/re2/util/mix.h +41 -0
  362. data/third_party/re2/util/mutex.h +148 -0
  363. data/third_party/re2/util/pcre.cc +1025 -0
  364. data/third_party/re2/util/pcre.h +681 -0
  365. data/third_party/re2/util/rune.cc +260 -0
  366. data/third_party/re2/util/strutil.cc +149 -0
  367. data/third_party/re2/util/strutil.h +21 -0
  368. data/third_party/re2/util/test.h +50 -0
  369. data/third_party/re2/util/utf.h +44 -0
  370. data/third_party/re2/util/util.h +42 -0
  371. data/third_party/upb/upb/decode.c +467 -504
  372. data/third_party/upb/upb/encode.c +163 -121
  373. data/third_party/upb/upb/msg.c +130 -64
  374. data/third_party/upb/upb/msg.h +418 -14
  375. data/third_party/upb/upb/port_def.inc +35 -6
  376. data/third_party/upb/upb/port_undef.inc +8 -1
  377. data/third_party/upb/upb/table.c +53 -75
  378. data/third_party/upb/upb/table.int.h +11 -43
  379. data/third_party/upb/upb/upb.c +148 -124
  380. data/third_party/upb/upb/upb.h +65 -147
  381. data/third_party/upb/upb/upb.hpp +86 -0
  382. metadata +90 -30
  383. data/third_party/upb/upb/generated_util.h +0 -105
@@ -632,7 +632,7 @@ bool SSL_apply_handback(SSL *ssl, Span<const uint8_t> handback) {
632
632
  case handback_after_session_resumption:
633
633
  // The write keys are installed after server Finished, but the client
634
634
  // keys must wait for ChangeCipherSpec.
635
- if (!tls1_configure_aead(ssl, evp_aead_seal, &key_block, session->cipher,
635
+ if (!tls1_configure_aead(ssl, evp_aead_seal, &key_block, session,
636
636
  write_iv)) {
637
637
  return false;
638
638
  }
@@ -642,9 +642,9 @@ bool SSL_apply_handback(SSL *ssl, Span<const uint8_t> handback) {
642
642
  break;
643
643
  case handback_after_handshake:
644
644
  // The handshake is complete, so both keys are installed.
645
- if (!tls1_configure_aead(ssl, evp_aead_seal, &key_block, session->cipher,
645
+ if (!tls1_configure_aead(ssl, evp_aead_seal, &key_block, session,
646
646
  write_iv) ||
647
- !tls1_configure_aead(ssl, evp_aead_open, &key_block, session->cipher,
647
+ !tls1_configure_aead(ssl, evp_aead_open, &key_block, session,
648
648
  read_iv)) {
649
649
  return false;
650
650
  }
@@ -441,7 +441,7 @@ enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs) {
441
441
  uint8_t finished[EVP_MAX_MD_SIZE];
442
442
  size_t finished_len;
443
443
  if (!hs->transcript.GetFinishedMAC(finished, &finished_len,
444
- SSL_get_session(ssl), !ssl->server) ||
444
+ ssl_handshake_session(hs), !ssl->server) ||
445
445
  !ssl_hash_message(hs, msg)) {
446
446
  return ssl_hs_error;
447
447
  }
@@ -484,7 +484,7 @@ enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs) {
484
484
 
485
485
  bool ssl_send_finished(SSL_HANDSHAKE *hs) {
486
486
  SSL *const ssl = hs->ssl;
487
- const SSL_SESSION *session = SSL_get_session(ssl);
487
+ const SSL_SESSION *session = ssl_handshake_session(hs);
488
488
 
489
489
  uint8_t finished[EVP_MAX_MD_SIZE];
490
490
  size_t finished_len;
@@ -541,6 +541,13 @@ bool ssl_output_cert_chain(SSL_HANDSHAKE *hs) {
541
541
  return true;
542
542
  }
543
543
 
544
+ const SSL_SESSION *ssl_handshake_session(const SSL_HANDSHAKE *hs) {
545
+ if (hs->new_session) {
546
+ return hs->new_session.get();
547
+ }
548
+ return hs->ssl->session.get();
549
+ }
550
+
544
551
  int ssl_run_handshake(SSL_HANDSHAKE *hs, bool *out_early_return) {
545
552
  SSL *const ssl = hs->ssl;
546
553
  for (;;) {
@@ -1268,10 +1268,10 @@ static enum ssl_hs_wait_t do_send_client_key_exchange(SSL_HANDSHAKE *hs) {
1268
1268
  uint32_t alg_k = hs->new_cipher->algorithm_mkey;
1269
1269
  uint32_t alg_a = hs->new_cipher->algorithm_auth;
1270
1270
  if (ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
1271
- CRYPTO_BUFFER *leaf =
1271
+ const CRYPTO_BUFFER *leaf =
1272
1272
  sk_CRYPTO_BUFFER_value(hs->new_session->certs.get(), 0);
1273
1273
  CBS leaf_cbs;
1274
- CBS_init(&leaf_cbs, CRYPTO_BUFFER_data(leaf), CRYPTO_BUFFER_len(leaf));
1274
+ CRYPTO_BUFFER_init_CBS(leaf, &leaf_cbs);
1275
1275
 
1276
1276
  // Check the key usage matches the cipher suite. We do this unconditionally
1277
1277
  // for non-RSA certificates. In particular, it's needed to distinguish ECDH
@@ -1436,6 +1436,15 @@ static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs) {
1436
1436
  return ssl_hs_error;
1437
1437
  }
1438
1438
 
1439
+ // The peer certificate must be valid for signing.
1440
+ const CRYPTO_BUFFER *leaf =
1441
+ sk_CRYPTO_BUFFER_value(hs->new_session->certs.get(), 0);
1442
+ CBS leaf_cbs;
1443
+ CRYPTO_BUFFER_init_CBS(leaf, &leaf_cbs);
1444
+ if (!ssl_cert_check_key_usage(&leaf_cbs, key_usage_digital_signature)) {
1445
+ return ssl_hs_error;
1446
+ }
1447
+
1439
1448
  CBS certificate_verify = msg.body, signature;
1440
1449
 
1441
1450
  // Determine the signature algorithm.
@@ -1863,6 +1863,8 @@ enum ssl_private_key_result_t tls13_add_certificate_verify(SSL_HANDSHAKE *hs);
1863
1863
 
1864
1864
  bool tls13_add_finished(SSL_HANDSHAKE *hs);
1865
1865
  bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg);
1866
+ bssl::UniquePtr<SSL_SESSION> tls13_create_session_with_ticket(SSL *ssl,
1867
+ CBS *body);
1866
1868
 
1867
1869
  bool ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs,
1868
1870
  Array<uint8_t> *out_secret,
@@ -1938,6 +1940,11 @@ enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs);
1938
1940
  bool ssl_send_finished(SSL_HANDSHAKE *hs);
1939
1941
  bool ssl_output_cert_chain(SSL_HANDSHAKE *hs);
1940
1942
 
1943
+ // ssl_handshake_session returns the |SSL_SESSION| corresponding to the current
1944
+ // handshake. Note, in TLS 1.2 resumptions, this session is immutable.
1945
+ const SSL_SESSION *ssl_handshake_session(const SSL_HANDSHAKE *hs);
1946
+
1947
+
1941
1948
  // SSLKEYLOGFILE functions.
1942
1949
 
1943
1950
  // ssl_log_secret logs |secret| with label |label|, if logging is enabled for
@@ -2740,11 +2747,6 @@ struct SSL_CONFIG {
2740
2747
  bool jdk11_workaround : 1;
2741
2748
  };
2742
2749
 
2743
- // Computes a SHA-256 hash of the transport parameters and early data context
2744
- // for QUIC, putting the hash in |SHA256_DIGEST_LENGTH| bytes at |hash_out|.
2745
- bool compute_quic_early_data_hash(const SSL_CONFIG *config,
2746
- uint8_t hash_out[SHA256_DIGEST_LENGTH]);
2747
-
2748
2750
  // From RFC 8446, used in determining PSK modes.
2749
2751
  #define SSL_PSK_DHE_KE 0x1
2750
2752
 
@@ -2924,13 +2926,14 @@ int dtls1_dispatch_alert(SSL *ssl);
2924
2926
  // determined by |direction|) using the keys generated by the TLS KDF. The
2925
2927
  // |key_block_cache| argument is used to store the generated key block, if
2926
2928
  // empty. Otherwise it's assumed that the key block is already contained within
2927
- // it. Returns one on success or zero on error.
2928
- int tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
2929
- Array<uint8_t> *key_block_cache,
2930
- const SSL_CIPHER *cipher,
2931
- Span<const uint8_t> iv_override);
2932
-
2933
- int tls1_change_cipher_state(SSL_HANDSHAKE *hs, evp_aead_direction_t direction);
2929
+ // it. It returns true on success or false on error.
2930
+ bool tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
2931
+ Array<uint8_t> *key_block_cache,
2932
+ const SSL_SESSION *session,
2933
+ Span<const uint8_t> iv_override);
2934
+
2935
+ bool tls1_change_cipher_state(SSL_HANDSHAKE *hs,
2936
+ evp_aead_direction_t direction);
2934
2937
  int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out,
2935
2938
  Span<const uint8_t> premaster);
2936
2939
 
@@ -3559,9 +3562,9 @@ struct ssl_session_st {
3559
3562
  // is_quic indicates whether this session was created using QUIC.
3560
3563
  bool is_quic : 1;
3561
3564
 
3562
- // quic_early_data_hash is used to determine whether early data must be
3565
+ // quic_early_data_context is used to determine whether early data must be
3563
3566
  // rejected when performing a QUIC handshake.
3564
- bssl::Array<uint8_t> quic_early_data_hash;
3567
+ bssl::Array<uint8_t> quic_early_data_context;
3565
3568
 
3566
3569
  private:
3567
3570
  ~ssl_session_st();
@@ -192,7 +192,7 @@ static const unsigned kEarlyALPNTag =
192
192
  CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 26;
193
193
  static const unsigned kIsQuicTag =
194
194
  CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 27;
195
- static const unsigned kQuicEarlyDataHashTag =
195
+ static const unsigned kQuicEarlyDataContextTag =
196
196
  CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 28;
197
197
 
198
198
  static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
@@ -402,10 +402,10 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
402
402
  }
403
403
  }
404
404
 
405
- if (!in->quic_early_data_hash.empty()) {
406
- if (!CBB_add_asn1(&session, &child, kQuicEarlyDataHashTag) ||
407
- !CBB_add_asn1_octet_string(&child, in->quic_early_data_hash.data(),
408
- in->quic_early_data_hash.size())) {
405
+ if (!in->quic_early_data_context.empty()) {
406
+ if (!CBB_add_asn1(&session, &child, kQuicEarlyDataContextTag) ||
407
+ !CBB_add_asn1_octet_string(&child, in->quic_early_data_context.data(),
408
+ in->quic_early_data_context.size())) {
409
409
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
410
410
  return 0;
411
411
  }
@@ -752,8 +752,8 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
752
752
  kEarlyALPNTag) ||
753
753
  !CBS_get_optional_asn1_bool(&session, &is_quic, kIsQuicTag,
754
754
  /*default_value=*/false) ||
755
- !SSL_SESSION_parse_octet_string(&session, &ret->quic_early_data_hash,
756
- kQuicEarlyDataHashTag) ||
755
+ !SSL_SESSION_parse_octet_string(&session, &ret->quic_early_data_context,
756
+ kQuicEarlyDataContextTag) ||
757
757
  CBS_len(&session) != 0) {
758
758
  OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
759
759
  return nullptr;
@@ -2968,6 +2968,34 @@ void SSL_CTX_set_ticket_aead_method(SSL_CTX *ctx,
2968
2968
  ctx->ticket_aead_method = aead_method;
2969
2969
  }
2970
2970
 
2971
+ SSL_SESSION *SSL_process_tls13_new_session_ticket(SSL *ssl, const uint8_t *buf,
2972
+ size_t buf_len) {
2973
+ if (SSL_in_init(ssl) ||
2974
+ ssl_protocol_version(ssl) != TLS1_3_VERSION ||
2975
+ ssl->server) {
2976
+ // Only TLS 1.3 clients are supported.
2977
+ OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
2978
+ return nullptr;
2979
+ }
2980
+
2981
+ CBS cbs, body;
2982
+ CBS_init(&cbs, buf, buf_len);
2983
+ uint8_t type;
2984
+ if (!CBS_get_u8(&cbs, &type) ||
2985
+ !CBS_get_u24_length_prefixed(&cbs, &body) ||
2986
+ CBS_len(&cbs) != 0) {
2987
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
2988
+ return nullptr;
2989
+ }
2990
+
2991
+ UniquePtr<SSL_SESSION> session = tls13_create_session_with_ticket(ssl, &body);
2992
+ if (!session) {
2993
+ // |tls13_create_session_with_ticket| puts the correct error.
2994
+ return nullptr;
2995
+ }
2996
+ return session.release();
2997
+ }
2998
+
2971
2999
  int SSL_set_tlsext_status_type(SSL *ssl, int type) {
2972
3000
  if (!ssl->config) {
2973
3001
  return 0;
@@ -269,8 +269,8 @@ UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
269
269
  return nullptr;
270
270
  }
271
271
 
272
- if (!new_session->quic_early_data_hash.CopyFrom(
273
- session->quic_early_data_hash)) {
272
+ if (!new_session->quic_early_data_context.CopyFrom(
273
+ session->quic_early_data_context)) {
274
274
  return nullptr;
275
275
  }
276
276
  }
@@ -349,25 +349,6 @@ const EVP_MD *ssl_session_get_digest(const SSL_SESSION *session) {
349
349
  session->cipher);
350
350
  }
351
351
 
352
- bool compute_quic_early_data_hash(const SSL_CONFIG *config,
353
- uint8_t hash_out[SHA256_DIGEST_LENGTH]) {
354
- ScopedEVP_MD_CTX hash_ctx;
355
- uint32_t transport_param_len = config->quic_transport_params.size();
356
- uint32_t context_len = config->quic_early_data_context.size();
357
- if (!EVP_DigestInit(hash_ctx.get(), EVP_sha256()) ||
358
- !EVP_DigestUpdate(hash_ctx.get(), &transport_param_len,
359
- sizeof(transport_param_len)) ||
360
- !EVP_DigestUpdate(hash_ctx.get(), config->quic_transport_params.data(),
361
- config->quic_transport_params.size()) ||
362
- !EVP_DigestUpdate(hash_ctx.get(), &context_len, sizeof(context_len)) ||
363
- !EVP_DigestUpdate(hash_ctx.get(), config->quic_early_data_context.data(),
364
- config->quic_early_data_context.size()) ||
365
- !EVP_DigestFinal(hash_ctx.get(), hash_out, nullptr)) {
366
- return false;
367
- }
368
- return true;
369
- }
370
-
371
352
  int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server) {
372
353
  SSL *const ssl = hs->ssl;
373
354
  if (ssl->mode & SSL_MODE_NO_SESSION_CREATION) {
@@ -384,9 +365,8 @@ int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server) {
384
365
  session->ssl_version = ssl->version;
385
366
  session->is_quic = ssl->quic_method != nullptr;
386
367
  if (is_server && ssl->enable_early_data && session->is_quic) {
387
- if (!session->quic_early_data_hash.Init(SHA256_DIGEST_LENGTH) ||
388
- !compute_quic_early_data_hash(hs->config,
389
- session->quic_early_data_hash.data())) {
368
+ if (!session->quic_early_data_context.CopyFrom(
369
+ hs->config->quic_early_data_context)) {
390
370
  return 0;
391
371
  }
392
372
  }
@@ -193,11 +193,11 @@ bool ssl_get_version_range(const SSL_HANDSHAKE *hs, uint16_t *out_min_version,
193
193
  min_version = TLS1_3_VERSION;
194
194
  }
195
195
 
196
- // OpenSSL's API for controlling versions entails blacklisting individual
197
- // protocols. This has two problems. First, on the client, the protocol can
198
- // only express a contiguous range of versions. Second, a library consumer
199
- // trying to set a maximum version cannot disable protocol versions that get
200
- // added in a future version of the library.
196
+ // The |SSL_OP_NO_*| flags disable individual protocols. This has two
197
+ // problems. First, prior to TLS 1.3, the protocol can only express a
198
+ // contiguous range of versions. Second, a library consumer trying to set a
199
+ // maximum version cannot disable protocol versions that get added in a future
200
+ // version of the library.
201
201
  //
202
202
  // To account for both of these, OpenSSL interprets the client-side bitmask
203
203
  // as a min/max range by picking the lowest contiguous non-empty range of
@@ -189,21 +189,36 @@ static bool get_key_block_lengths(const SSL *ssl, size_t *out_mac_secret_len,
189
189
  return true;
190
190
  }
191
191
 
192
- int tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
193
- Array<uint8_t> *key_block_cache,
194
- const SSL_CIPHER *cipher,
195
- Span<const uint8_t> iv_override) {
192
+ static bool generate_key_block(const SSL *ssl, Span<uint8_t> out,
193
+ const SSL_SESSION *session) {
194
+ auto master_key =
195
+ MakeConstSpan(session->master_key, session->master_key_length);
196
+ static const char kLabel[] = "key expansion";
197
+ auto label = MakeConstSpan(kLabel, sizeof(kLabel) - 1);
198
+
199
+ const EVP_MD *digest = ssl_session_get_digest(session);
200
+ // Note this function assumes that |session|'s key material corresponds to
201
+ // |ssl->s3->client_random| and |ssl->s3->server_random|.
202
+ return tls1_prf(digest, out, master_key, label, ssl->s3->server_random,
203
+ ssl->s3->client_random);
204
+ }
205
+
206
+ bool tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
207
+ Array<uint8_t> *key_block_cache,
208
+ const SSL_SESSION *session,
209
+ Span<const uint8_t> iv_override) {
196
210
  size_t mac_secret_len, key_len, iv_len;
197
- if (!get_key_block_lengths(ssl, &mac_secret_len, &key_len, &iv_len, cipher)) {
198
- return 0;
211
+ if (!get_key_block_lengths(ssl, &mac_secret_len, &key_len, &iv_len,
212
+ session->cipher)) {
213
+ return false;
199
214
  }
200
215
 
201
216
  // Ensure that |key_block_cache| is set up.
202
217
  const size_t key_block_size = 2 * (mac_secret_len + key_len + iv_len);
203
218
  if (key_block_cache->empty()) {
204
219
  if (!key_block_cache->Init(key_block_size) ||
205
- !SSL_generate_key_block(ssl, key_block_cache->data(), key_block_size)) {
206
- return 0;
220
+ !generate_key_block(ssl, MakeSpan(*key_block_cache), session)) {
221
+ return false;
207
222
  }
208
223
  }
209
224
  assert(key_block_cache->size() == key_block_size);
@@ -224,15 +239,16 @@ int tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
224
239
 
225
240
  if (!iv_override.empty()) {
226
241
  if (iv_override.size() != iv_len) {
227
- return 0;
242
+ return false;
228
243
  }
229
244
  iv = iv_override;
230
245
  }
231
246
 
232
- UniquePtr<SSLAEADContext> aead_ctx = SSLAEADContext::Create(
233
- direction, ssl->version, SSL_is_dtls(ssl), cipher, key, mac_secret, iv);
247
+ UniquePtr<SSLAEADContext> aead_ctx =
248
+ SSLAEADContext::Create(direction, ssl->version, SSL_is_dtls(ssl),
249
+ session->cipher, key, mac_secret, iv);
234
250
  if (!aead_ctx) {
235
- return 0;
251
+ return false;
236
252
  }
237
253
 
238
254
  if (direction == evp_aead_open) {
@@ -246,10 +262,10 @@ int tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction,
246
262
  /*secret_for_quic=*/{});
247
263
  }
248
264
 
249
- int tls1_change_cipher_state(SSL_HANDSHAKE *hs,
250
- evp_aead_direction_t direction) {
265
+ bool tls1_change_cipher_state(SSL_HANDSHAKE *hs,
266
+ evp_aead_direction_t direction) {
251
267
  return tls1_configure_aead(hs->ssl, direction, &hs->key_block,
252
- hs->new_cipher, {});
268
+ ssl_handshake_session(hs), {});
253
269
  }
254
270
 
255
271
  int tls1_generate_master_secret(SSL_HANDSHAKE *hs, uint8_t *out,
@@ -286,6 +302,11 @@ BSSL_NAMESPACE_END
286
302
  using namespace bssl;
287
303
 
288
304
  size_t SSL_get_key_block_len(const SSL *ssl) {
305
+ // See |SSL_generate_key_block|.
306
+ if (SSL_in_init(ssl)) {
307
+ return 0;
308
+ }
309
+
289
310
  size_t mac_secret_len, key_len, fixed_iv_len;
290
311
  if (!get_key_block_lengths(ssl, &mac_secret_len, &key_len, &fixed_iv_len,
291
312
  SSL_get_current_cipher(ssl))) {
@@ -297,16 +318,16 @@ size_t SSL_get_key_block_len(const SSL *ssl) {
297
318
  }
298
319
 
299
320
  int SSL_generate_key_block(const SSL *ssl, uint8_t *out, size_t out_len) {
300
- const SSL_SESSION *session = SSL_get_session(ssl);
301
- auto out_span = MakeSpan(out, out_len);
302
- auto master_key =
303
- MakeConstSpan(session->master_key, session->master_key_length);
304
- static const char kLabel[] = "key expansion";
305
- auto label = MakeConstSpan(kLabel, sizeof(kLabel) - 1);
321
+ // Which cipher state to use is ambiguous during a handshake. In particular,
322
+ // there are points where read and write states are from different epochs.
323
+ // During a handshake, before ChangeCipherSpec, the encryption states may not
324
+ // match |ssl->s3->client_random| and |ssl->s3->server_random|.
325
+ if (SSL_in_init(ssl)) {
326
+ OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
327
+ return 0;
328
+ }
306
329
 
307
- const EVP_MD *digest = ssl_session_get_digest(session);
308
- return tls1_prf(digest, out_span, master_key, label, ssl->s3->server_random,
309
- ssl->s3->client_random);
330
+ return generate_key_block(ssl, MakeSpan(out, out_len), SSL_get_session(ssl));
310
331
  }
311
332
 
312
333
  int SSL_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
@@ -931,26 +931,43 @@ bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
931
931
  return true;
932
932
  }
933
933
 
934
+ CBS body = msg.body;
935
+ UniquePtr<SSL_SESSION> session = tls13_create_session_with_ticket(ssl, &body);
936
+ if (!session) {
937
+ return false;
938
+ }
939
+
940
+ if ((ssl->session_ctx->session_cache_mode & SSL_SESS_CACHE_CLIENT) &&
941
+ ssl->session_ctx->new_session_cb != NULL &&
942
+ ssl->session_ctx->new_session_cb(ssl, session.get())) {
943
+ // |new_session_cb|'s return value signals that it took ownership.
944
+ session.release();
945
+ }
946
+
947
+ return true;
948
+ }
949
+
950
+ UniquePtr<SSL_SESSION> tls13_create_session_with_ticket(SSL *ssl, CBS *body) {
934
951
  UniquePtr<SSL_SESSION> session = SSL_SESSION_dup(
935
952
  ssl->s3->established_session.get(), SSL_SESSION_INCLUDE_NONAUTH);
936
953
  if (!session) {
937
- return false;
954
+ return nullptr;
938
955
  }
939
956
 
940
957
  ssl_session_rebase_time(ssl, session.get());
941
958
 
942
959
  uint32_t server_timeout;
943
- CBS body = msg.body, ticket_nonce, ticket, extensions;
944
- if (!CBS_get_u32(&body, &server_timeout) ||
945
- !CBS_get_u32(&body, &session->ticket_age_add) ||
946
- !CBS_get_u8_length_prefixed(&body, &ticket_nonce) ||
947
- !CBS_get_u16_length_prefixed(&body, &ticket) ||
960
+ CBS ticket_nonce, ticket, extensions;
961
+ if (!CBS_get_u32(body, &server_timeout) ||
962
+ !CBS_get_u32(body, &session->ticket_age_add) ||
963
+ !CBS_get_u8_length_prefixed(body, &ticket_nonce) ||
964
+ !CBS_get_u16_length_prefixed(body, &ticket) ||
948
965
  !session->ticket.CopyFrom(ticket) ||
949
- !CBS_get_u16_length_prefixed(&body, &extensions) ||
950
- CBS_len(&body) != 0) {
966
+ !CBS_get_u16_length_prefixed(body, &extensions) ||
967
+ CBS_len(body) != 0) {
951
968
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
952
969
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
953
- return false;
970
+ return nullptr;
954
971
  }
955
972
 
956
973
  // Cap the renewable lifetime by the server advertised value. This avoids
@@ -960,7 +977,7 @@ bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
960
977
  }
961
978
 
962
979
  if (!tls13_derive_session_psk(session.get(), ticket_nonce)) {
963
- return false;
980
+ return nullptr;
964
981
  }
965
982
 
966
983
  // Parse out the extensions.
@@ -975,7 +992,7 @@ bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
975
992
  OPENSSL_ARRAY_SIZE(ext_types),
976
993
  1 /* ignore unknown */)) {
977
994
  ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
978
- return false;
995
+ return nullptr;
979
996
  }
980
997
 
981
998
  if (have_early_data) {
@@ -983,7 +1000,7 @@ bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
983
1000
  CBS_len(&early_data) != 0) {
984
1001
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
985
1002
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
986
- return false;
1003
+ return nullptr;
987
1004
  }
988
1005
 
989
1006
  // QUIC does not use the max_early_data_size parameter and always sets it to
@@ -992,7 +1009,7 @@ bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
992
1009
  session->ticket_max_early_data != 0xffffffff) {
993
1010
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
994
1011
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
995
- return false;
1012
+ return nullptr;
996
1013
  }
997
1014
  }
998
1015
 
@@ -1004,14 +1021,7 @@ bool tls13_process_new_session_ticket(SSL *ssl, const SSLMessage &msg) {
1004
1021
  session->ticket_age_add_valid = true;
1005
1022
  session->not_resumable = false;
1006
1023
 
1007
- if ((ssl->session_ctx->session_cache_mode & SSL_SESS_CACHE_CLIENT) &&
1008
- ssl->session_ctx->new_session_cb != NULL &&
1009
- ssl->session_ctx->new_session_cb(ssl, session.get())) {
1010
- // |new_session_cb|'s return value signals that it took ownership.
1011
- session.release();
1012
- }
1013
-
1014
- return true;
1024
+ return session;
1015
1025
  }
1016
1026
 
1017
1027
  BSSL_NAMESPACE_END