grpc 1.69.0 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1235) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +249 -283
  3. data/include/grpc/event_engine/endpoint_config.h +5 -5
  4. data/include/grpc/event_engine/event_engine.h +44 -5
  5. data/include/grpc/status.h +1 -1
  6. data/include/grpc/support/atm.h +0 -13
  7. data/include/grpc/support/json.h +16 -16
  8. data/src/core/call/request_buffer.cc +224 -0
  9. data/src/core/call/request_buffer.h +192 -0
  10. data/src/core/channelz/channelz.cc +2 -2
  11. data/src/core/channelz/channelz.h +3 -22
  12. data/src/core/channelz/channelz_registry.cc +0 -7
  13. data/src/core/client_channel/client_channel.cc +18 -29
  14. data/src/core/client_channel/client_channel.h +2 -2
  15. data/src/core/client_channel/client_channel_args.h +21 -0
  16. data/src/core/client_channel/client_channel_filter.cc +54 -131
  17. data/src/core/client_channel/client_channel_filter.h +11 -9
  18. data/src/core/client_channel/client_channel_plugin.cc +2 -1
  19. data/src/core/client_channel/client_channel_service_config.cc +1 -1
  20. data/src/core/client_channel/client_channel_service_config.h +5 -5
  21. data/src/core/client_channel/direct_channel.cc +1 -1
  22. data/src/core/client_channel/direct_channel.h +1 -1
  23. data/src/core/client_channel/lb_metadata.cc +7 -8
  24. data/src/core/client_channel/lb_metadata.h +3 -3
  25. data/src/core/client_channel/load_balanced_call_destination.cc +4 -4
  26. data/src/core/client_channel/retry_filter.cc +1 -1
  27. data/src/core/client_channel/retry_filter.h +1 -1
  28. data/src/core/client_channel/retry_filter_legacy_call_data.cc +10 -12
  29. data/src/core/client_channel/retry_filter_legacy_call_data.h +7 -7
  30. data/src/core/client_channel/retry_interceptor.cc +408 -0
  31. data/src/core/client_channel/retry_interceptor.h +157 -0
  32. data/src/core/client_channel/retry_service_config.cc +1 -1
  33. data/src/core/client_channel/retry_service_config.h +16 -3
  34. data/src/core/client_channel/retry_throttle.cc +33 -18
  35. data/src/core/client_channel/retry_throttle.h +3 -3
  36. data/src/core/client_channel/subchannel.cc +43 -76
  37. data/src/core/client_channel/subchannel.h +4 -4
  38. data/src/core/client_channel/subchannel_stream_client.cc +0 -1
  39. data/src/core/client_channel/subchannel_stream_client.h +3 -3
  40. data/src/core/config/config_vars.cc +1 -0
  41. data/src/core/config/config_vars.h +1 -0
  42. data/src/core/config/load_config.cc +3 -2
  43. data/src/core/config/load_config.h +1 -1
  44. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +4 -11
  45. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +7 -7
  46. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +8 -15
  48. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -6
  49. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +1 -1
  50. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +0 -7
  51. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -6
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.cc +1 -1
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
  54. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -6
  55. data/src/core/ext/filters/http/client/http_client_filter.h +4 -4
  56. data/src/core/ext/filters/http/client_authority_filter.cc +6 -11
  57. data/src/core/ext/filters/http/client_authority_filter.h +6 -6
  58. data/src/core/ext/filters/http/message_compress/compression_filter.cc +18 -22
  59. data/src/core/ext/filters/http/message_compress/compression_filter.h +18 -13
  60. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -8
  61. data/src/core/ext/filters/http/server/http_server_filter.h +4 -4
  62. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -25
  63. data/src/core/ext/filters/message_size/message_size_filter.h +20 -21
  64. data/src/core/ext/filters/rbac/rbac_filter.cc +0 -7
  65. data/src/core/ext/filters/rbac/rbac_filter.h +6 -6
  66. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
  67. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +1 -6
  68. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +4 -4
  69. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +1 -1
  70. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +2 -2
  71. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -2
  72. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +4 -3
  73. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +612 -100
  74. data/src/core/ext/transport/chttp2/server/chttp2_server.h +189 -13
  75. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +1 -1
  76. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.cc +2 -2
  77. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +4 -4
  78. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +85 -59
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +7 -7
  80. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
  81. data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
  82. data/src/core/ext/transport/chttp2/transport/frame.cc +2 -2
  83. data/src/core/ext/transport/chttp2/transport/frame.h +5 -5
  84. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +8 -8
  85. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -3
  86. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +2 -2
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -31
  89. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -7
  90. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -2
  92. data/src/core/ext/transport/chttp2/transport/internal.h +19 -8
  93. data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -14
  94. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +1 -1
  95. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  96. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +2 -2
  97. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +2 -2
  98. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +2 -2
  99. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +1 -0
  100. data/src/core/ext/transport/chttp2/transport/varint.cc +4 -4
  101. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -22
  102. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -3
  103. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +15 -10
  104. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +3 -1
  105. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +16 -0
  106. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +3 -2
  107. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +66 -36
  108. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +19 -17
  109. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +116 -0
  110. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +31 -5
  111. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +2 -0
  112. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +97 -6
  113. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +17 -11
  114. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb.h +151 -0
  115. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.c +60 -0
  116. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.h +32 -0
  117. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +228 -21
  118. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +65 -17
  119. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +6 -0
  120. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +7 -106
  121. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +7 -28
  122. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +0 -2
  123. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +85 -0
  124. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +25 -3
  125. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
  126. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +152 -0
  127. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +40 -10
  128. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +2 -0
  129. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +253 -4
  130. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +70 -13
  131. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +4 -0
  132. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +0 -2
  133. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +0 -1
  134. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.h +0 -1
  135. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +16 -0
  136. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +3 -2
  137. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +60 -0
  138. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +13 -2
  139. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +0 -1
  140. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +0 -1
  141. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +102 -24
  142. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +28 -19
  143. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +37 -7
  144. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +7 -5
  145. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +251 -18
  146. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +41 -16
  147. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +2 -0
  148. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +2 -1
  149. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb.h +142 -0
  150. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.c +55 -0
  151. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.h +32 -0
  152. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +33 -0
  153. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +7 -4
  154. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.c +11 -10
  155. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.c +6 -4
  156. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +418 -413
  157. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +161 -153
  158. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +5 -0
  159. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +270 -261
  160. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.c +46 -0
  161. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.h +33 -0
  162. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.c +29 -19
  163. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +15 -0
  164. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.c +58 -65
  165. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +0 -5
  166. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +73 -63
  167. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +49 -48
  168. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +117 -100
  169. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  170. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +917 -898
  171. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  172. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.c +15 -18
  173. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +33 -33
  174. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +460 -457
  175. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.c +16 -19
  176. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +95 -95
  177. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +202 -191
  178. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +19 -17
  179. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c +148 -135
  180. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  181. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +23 -22
  182. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.c +41 -0
  183. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.h +33 -0
  184. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.c +26 -19
  185. data/src/core/filter/blackboard.cc +2 -2
  186. data/src/core/filter/filter_args.h +112 -0
  187. data/src/core/handshaker/handshaker.cc +0 -3
  188. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +4 -6
  189. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +31 -32
  190. data/src/core/handshaker/http_connect/http_proxy_mapper.h +4 -4
  191. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +5 -5
  192. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +5 -5
  193. data/src/core/handshaker/proxy_mapper.h +4 -4
  194. data/src/core/handshaker/proxy_mapper_registry.cc +5 -6
  195. data/src/core/handshaker/proxy_mapper_registry.h +4 -4
  196. data/src/core/handshaker/security/secure_endpoint.cc +2 -2
  197. data/src/core/handshaker/security/security_handshaker.cc +3 -5
  198. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -4
  199. data/src/core/lib/channel/channel_args.cc +13 -13
  200. data/src/core/lib/channel/channel_args.h +8 -8
  201. data/src/core/lib/channel/connected_channel.cc +1 -1
  202. data/src/core/lib/channel/promise_based_filter.cc +9 -9
  203. data/src/core/lib/channel/promise_based_filter.h +84 -159
  204. data/src/core/lib/compression/compression.cc +3 -2
  205. data/src/core/lib/compression/compression_internal.cc +9 -9
  206. data/src/core/lib/compression/compression_internal.h +3 -3
  207. data/src/core/lib/debug/trace_flags.cc +5 -2
  208. data/src/core/lib/debug/trace_flags.h +2 -1
  209. data/src/core/lib/event_engine/ares_resolver.cc +9 -11
  210. data/src/core/lib/event_engine/ares_resolver.h +6 -10
  211. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -4
  212. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
  213. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +6 -7
  214. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -4
  215. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +2 -4
  216. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +3 -7
  217. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -4
  218. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +5 -7
  219. data/src/core/lib/event_engine/channel_args_endpoint_config.h +6 -7
  220. data/src/core/lib/event_engine/common_closures.h +2 -4
  221. data/src/core/lib/event_engine/default_event_engine.cc +62 -33
  222. data/src/core/lib/event_engine/default_event_engine.h +24 -33
  223. data/src/core/lib/event_engine/default_event_engine_factory.cc +6 -12
  224. data/src/core/lib/event_engine/default_event_engine_factory.h +2 -4
  225. data/src/core/lib/event_engine/event_engine.cc +2 -4
  226. data/src/core/lib/event_engine/extensions/can_track_errors.h +2 -4
  227. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +2 -4
  228. data/src/core/lib/event_engine/extensions/supports_fd.h +2 -4
  229. data/src/core/lib/event_engine/extensions/tcp_trace.h +2 -4
  230. data/src/core/lib/event_engine/forkable.cc +2 -4
  231. data/src/core/lib/event_engine/forkable.h +2 -4
  232. data/src/core/lib/event_engine/grpc_polled_fd.h +2 -4
  233. data/src/core/lib/event_engine/handle_containers.h +2 -4
  234. data/src/core/lib/event_engine/memory_allocator_factory.h +2 -4
  235. data/src/core/lib/event_engine/poller.h +2 -4
  236. data/src/core/lib/event_engine/posix.h +2 -4
  237. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -50
  238. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +2 -4
  239. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -51
  240. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +2 -4
  241. data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -4
  242. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -4
  243. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -4
  244. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +2 -4
  245. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +2 -4
  246. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +2 -4
  247. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -4
  248. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -4
  249. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +2 -4
  250. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +2 -4
  251. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +20 -10
  252. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +2 -4
  253. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +9 -6
  254. data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -6
  255. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +2 -4
  256. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -5
  257. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +2 -4
  258. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +2 -4
  259. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +2 -4
  260. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +5 -6
  261. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +2 -4
  262. data/src/core/lib/event_engine/posix_engine/timer.cc +4 -6
  263. data/src/core/lib/event_engine/posix_engine/timer.h +4 -6
  264. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +2 -4
  265. data/src/core/lib/event_engine/posix_engine/timer_heap.h +2 -4
  266. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -7
  267. data/src/core/lib/event_engine/posix_engine/timer_manager.h +4 -6
  268. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +4 -8
  269. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +24 -25
  270. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +2 -4
  271. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -4
  272. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +2 -4
  273. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -4
  274. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +2 -4
  275. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -4
  276. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +2 -4
  277. data/src/core/lib/event_engine/query_extensions.h +2 -4
  278. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +2 -4
  279. data/src/core/lib/event_engine/resolved_address.cc +2 -4
  280. data/src/core/lib/event_engine/resolved_address_internal.h +2 -4
  281. data/src/core/lib/event_engine/shim.cc +2 -4
  282. data/src/core/lib/event_engine/shim.h +2 -4
  283. data/src/core/lib/event_engine/slice.cc +2 -4
  284. data/src/core/lib/event_engine/slice_buffer.cc +2 -4
  285. data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
  286. data/src/core/lib/event_engine/tcp_socket_utils.h +5 -7
  287. data/src/core/lib/event_engine/thread_local.cc +2 -4
  288. data/src/core/lib/event_engine/thread_local.h +2 -4
  289. data/src/core/lib/event_engine/thread_pool/thread_count.cc +2 -4
  290. data/src/core/lib/event_engine/thread_pool/thread_count.h +4 -18
  291. data/src/core/lib/event_engine/thread_pool/thread_pool.h +2 -4
  292. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +2 -4
  293. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +3 -5
  294. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +2 -4
  295. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +2 -4
  296. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +2 -4
  297. data/src/core/lib/event_engine/time_util.cc +2 -4
  298. data/src/core/lib/event_engine/time_util.h +2 -4
  299. data/src/core/lib/event_engine/utils.cc +2 -4
  300. data/src/core/lib/event_engine/utils.h +2 -4
  301. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -4
  302. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -4
  303. data/src/core/lib/event_engine/windows/iocp.cc +2 -4
  304. data/src/core/lib/event_engine/windows/iocp.h +2 -4
  305. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +2 -4
  306. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +2 -4
  307. data/src/core/lib/event_engine/windows/win_socket.cc +2 -4
  308. data/src/core/lib/event_engine/windows/win_socket.h +2 -4
  309. data/src/core/lib/event_engine/windows/windows_endpoint.cc +2 -4
  310. data/src/core/lib/event_engine/windows/windows_endpoint.h +4 -6
  311. data/src/core/lib/event_engine/windows/windows_engine.cc +3 -4
  312. data/src/core/lib/event_engine/windows/windows_engine.h +2 -4
  313. data/src/core/lib/event_engine/windows/windows_listener.cc +2 -4
  314. data/src/core/lib/event_engine/windows/windows_listener.h +2 -4
  315. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +2 -4
  316. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -4
  317. data/src/core/lib/event_engine/work_queue/work_queue.h +2 -4
  318. data/src/core/lib/experiments/experiments.cc +147 -207
  319. data/src/core/lib/experiments/experiments.h +79 -96
  320. data/src/core/lib/iomgr/buffer_list.h +22 -21
  321. data/src/core/lib/iomgr/cfstream_handle.cc +0 -2
  322. data/src/core/lib/iomgr/closure.h +1 -4
  323. data/src/core/lib/iomgr/combiner.cc +0 -1
  324. data/src/core/lib/iomgr/error.cc +2 -2
  325. data/src/core/lib/iomgr/event_engine_shims/closure.cc +0 -1
  326. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -3
  327. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +0 -1
  328. data/src/core/lib/iomgr/exec_ctx.cc +1 -7
  329. data/src/core/lib/iomgr/exec_ctx.h +1 -132
  330. data/src/core/lib/iomgr/executor.cc +0 -11
  331. data/src/core/lib/iomgr/resolve_address_posix.cc +0 -2
  332. data/src/core/lib/iomgr/resolve_address_windows.cc +0 -2
  333. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -2
  334. data/src/core/lib/iomgr/tcp_posix.cc +3 -2
  335. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -3
  336. data/src/core/lib/iomgr/tcp_server_windows.cc +0 -1
  337. data/src/core/lib/iomgr/timer_manager.cc +1 -9
  338. data/src/core/lib/promise/activity.cc +2 -0
  339. data/src/core/lib/promise/activity.h +33 -12
  340. data/src/core/lib/promise/detail/join_state.h +16 -68
  341. data/src/core/lib/promise/detail/promise_factory.h +85 -25
  342. data/src/core/lib/promise/detail/promise_like.h +16 -19
  343. data/src/core/lib/promise/detail/seq_state.h +102 -315
  344. data/src/core/lib/promise/for_each.h +14 -5
  345. data/src/core/lib/promise/if.h +48 -20
  346. data/src/core/lib/promise/interceptor_list.h +9 -9
  347. data/src/core/lib/promise/latch.h +14 -6
  348. data/src/core/lib/promise/loop.h +58 -18
  349. data/src/core/lib/promise/map.h +145 -49
  350. data/src/core/lib/promise/party.cc +84 -15
  351. data/src/core/lib/promise/party.h +229 -32
  352. data/src/core/lib/promise/pipe.h +12 -12
  353. data/src/core/lib/promise/poll.h +8 -5
  354. data/src/core/lib/promise/prioritized_race.h +16 -22
  355. data/src/core/lib/promise/promise.h +2 -3
  356. data/src/core/lib/promise/race.h +4 -12
  357. data/src/core/lib/promise/seq.h +41 -6
  358. data/src/core/lib/promise/sleep.cc +3 -3
  359. data/src/core/lib/promise/sleep.h +15 -1
  360. data/src/core/lib/promise/status_flag.h +19 -3
  361. data/src/core/lib/promise/try_join.h +119 -5
  362. data/src/core/lib/promise/try_seq.h +39 -12
  363. data/src/core/lib/resource_quota/arena.h +87 -0
  364. data/src/core/lib/resource_quota/connection_quota.h +4 -0
  365. data/src/core/lib/resource_quota/memory_quota.cc +53 -49
  366. data/src/core/lib/resource_quota/memory_quota.h +4 -4
  367. data/src/core/lib/security/authorization/evaluate_args.cc +3 -3
  368. data/src/core/lib/security/authorization/evaluate_args.h +3 -3
  369. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +0 -7
  370. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +6 -6
  371. data/src/core/lib/security/authorization/matchers.h +3 -3
  372. data/src/core/lib/security/authorization/rbac_policy.cc +1 -1
  373. data/src/core/lib/security/authorization/rbac_policy.h +3 -3
  374. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -2
  375. data/src/core/lib/security/credentials/external/external_account_credentials.cc +1 -3
  376. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +0 -1
  377. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -1
  378. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -2
  379. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -1
  380. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  381. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -2
  382. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  383. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -1
  384. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +4 -4
  385. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +3 -3
  386. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  387. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -2
  388. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +12 -13
  389. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +14 -14
  390. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +23 -15
  391. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +3 -3
  392. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +0 -1
  393. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -2
  394. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -2
  395. data/src/core/lib/security/credentials/token_fetcher/token_fetcher_credentials.cc +4 -5
  396. data/src/core/lib/security/credentials/token_fetcher/token_fetcher_credentials.h +4 -4
  397. data/src/core/lib/security/credentials/xds/xds_credentials.cc +2 -1
  398. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  399. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +3 -3
  400. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  401. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +9 -9
  402. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +13 -13
  403. data/src/core/lib/security/transport/auth_filters.h +95 -7
  404. data/src/core/lib/security/transport/client_auth_filter.cc +96 -6
  405. data/src/core/lib/security/transport/server_auth_filter.cc +0 -8
  406. data/src/core/lib/slice/slice_buffer.cc +2 -2
  407. data/src/core/lib/slice/slice_buffer.h +2 -2
  408. data/src/core/lib/surface/call.cc +0 -4
  409. data/src/core/lib/surface/call.h +4 -3
  410. data/src/core/lib/surface/call_utils.cc +2 -2
  411. data/src/core/lib/surface/call_utils.h +10 -4
  412. data/src/core/lib/surface/channel.cc +6 -14
  413. data/src/core/lib/surface/channel.h +3 -3
  414. data/src/core/lib/surface/channel_init.cc +1 -1
  415. data/src/core/lib/surface/client_call.cc +56 -41
  416. data/src/core/lib/surface/client_call.h +7 -2
  417. data/src/core/lib/surface/completion_queue.cc +10 -49
  418. data/src/core/lib/surface/event_string.cc +7 -1
  419. data/src/core/lib/surface/filter_stack_call.cc +2 -4
  420. data/src/core/lib/surface/filter_stack_call.h +1 -1
  421. data/src/core/lib/surface/init.cc +17 -12
  422. data/src/core/lib/surface/init_internally.h +13 -2
  423. data/src/core/lib/surface/legacy_channel.cc +10 -8
  424. data/src/core/lib/surface/legacy_channel.h +2 -2
  425. data/src/core/lib/surface/server_call.cc +116 -84
  426. data/src/core/lib/surface/server_call.h +2 -0
  427. data/src/core/lib/surface/version.cc +2 -2
  428. data/src/core/lib/transport/call_filters.cc +10 -4
  429. data/src/core/lib/transport/call_filters.h +108 -59
  430. data/src/core/lib/transport/call_spine.cc +12 -49
  431. data/src/core/lib/transport/call_spine.h +174 -7
  432. data/src/core/lib/transport/call_state.h +140 -47
  433. data/src/core/lib/transport/connectivity_state.cc +8 -9
  434. data/src/core/lib/transport/connectivity_state.h +2 -4
  435. data/src/core/lib/transport/http2_errors.h +5 -3
  436. data/src/core/lib/transport/interception_chain.cc +8 -0
  437. data/src/core/lib/transport/interception_chain.h +36 -7
  438. data/src/core/lib/transport/metadata.h +88 -0
  439. data/src/core/lib/transport/metadata_batch.cc +2 -2
  440. data/src/core/lib/transport/metadata_batch.h +79 -18
  441. data/src/core/lib/transport/timeout_encoding.cc +15 -15
  442. data/src/core/lib/transport/timeout_encoding.h +3 -2
  443. data/src/core/lib/transport/transport.cc +0 -1
  444. data/src/core/lib/transport/transport.h +12 -7
  445. data/src/core/load_balancing/backend_metric_parser.cc +21 -28
  446. data/src/core/load_balancing/endpoint_list.cc +11 -1
  447. data/src/core/load_balancing/endpoint_list.h +20 -13
  448. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -6
  449. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +4 -4
  450. data/src/core/load_balancing/grpclb/grpclb.cc +21 -38
  451. data/src/core/load_balancing/health_check_client.cc +16 -48
  452. data/src/core/load_balancing/health_check_client_internal.h +7 -7
  453. data/src/core/load_balancing/lb_policy.cc +4 -6
  454. data/src/core/load_balancing/lb_policy.h +4 -12
  455. data/src/core/load_balancing/lb_policy_registry.cc +10 -8
  456. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +57 -68
  457. data/src/core/load_balancing/outlier_detection/outlier_detection.h +4 -3
  458. data/src/core/load_balancing/pick_first/pick_first.cc +110 -77
  459. data/src/core/load_balancing/priority/priority.cc +8 -13
  460. data/src/core/load_balancing/ring_hash/ring_hash.cc +210 -158
  461. data/src/core/load_balancing/ring_hash/ring_hash.h +4 -11
  462. data/src/core/load_balancing/rls/rls.cc +105 -194
  463. data/src/core/load_balancing/rls/rls.h +97 -1
  464. data/src/core/load_balancing/round_robin/round_robin.cc +14 -19
  465. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +4 -4
  466. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.h +2 -2
  467. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +20 -29
  468. data/src/core/load_balancing/weighted_target/weighted_target.cc +7 -15
  469. data/src/core/load_balancing/xds/cds.cc +11 -15
  470. data/src/core/load_balancing/xds/xds_cluster_impl.cc +15 -18
  471. data/src/core/load_balancing/xds/xds_cluster_manager.cc +10 -18
  472. data/src/core/load_balancing/xds/xds_override_host.cc +45 -92
  473. data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
  474. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +11 -11
  475. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -15
  476. data/src/core/resolver/dns/native/dns_resolver.cc +1 -1
  477. data/src/core/resolver/fake/fake_resolver.cc +10 -11
  478. data/src/core/resolver/fake/fake_resolver.h +2 -2
  479. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +9 -12
  480. data/src/core/resolver/polling_resolver.cc +2 -5
  481. data/src/core/resolver/polling_resolver.h +3 -3
  482. data/src/core/resolver/resolver_registry.cc +4 -3
  483. data/src/core/resolver/xds/xds_config.cc +6 -6
  484. data/src/core/resolver/xds/xds_config.h +2 -2
  485. data/src/core/resolver/xds/xds_dependency_manager.cc +190 -183
  486. data/src/core/resolver/xds/xds_dependency_manager.h +28 -18
  487. data/src/core/resolver/xds/xds_resolver.cc +81 -122
  488. data/src/core/server/server.cc +353 -95
  489. data/src/core/server/server.h +214 -65
  490. data/src/core/server/server_call_tracer_filter.cc +3 -7
  491. data/src/core/server/server_config_selector_filter.cc +8 -15
  492. data/src/core/server/xds_server_config_fetcher.cc +93 -159
  493. data/src/core/service_config/service_config_channel_arg_filter.cc +7 -19
  494. data/src/core/service_config/service_config_impl.cc +3 -3
  495. data/src/core/telemetry/call_tracer.cc +8 -8
  496. data/src/core/telemetry/call_tracer.h +6 -5
  497. data/src/core/telemetry/metrics.cc +3 -3
  498. data/src/core/telemetry/metrics.h +2 -8
  499. data/src/core/telemetry/tcp_tracer.h +32 -32
  500. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  501. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -14
  502. data/src/core/tsi/fake_transport_security.cc +5 -0
  503. data/src/core/util/backoff.cc +15 -4
  504. data/src/core/util/dump_args.h +1 -9
  505. data/src/core/util/env.h +3 -4
  506. data/src/core/util/examine_stack.cc +2 -2
  507. data/src/core/util/examine_stack.h +3 -4
  508. data/src/core/util/gpr_time.cc +0 -2
  509. data/src/core/util/http_client/httpcli.cc +69 -22
  510. data/src/core/util/http_client/httpcli.h +18 -8
  511. data/src/core/util/http_client/httpcli_security_connector.cc +2 -2
  512. data/src/core/util/json/json_channel_args.h +2 -1
  513. data/src/core/util/json/json_object_loader.cc +4 -4
  514. data/src/core/util/json/json_object_loader.h +12 -12
  515. data/src/core/util/json/json_reader.cc +4 -4
  516. data/src/core/util/json/json_writer.cc +3 -3
  517. data/src/core/util/latent_see.cc +3 -3
  518. data/src/core/util/latent_see.h +2 -2
  519. data/src/core/util/linux/env.cc +3 -4
  520. data/src/core/util/lru_cache.h +4 -4
  521. data/src/core/util/match.h +7 -7
  522. data/src/core/util/matchers.cc +1 -2
  523. data/src/core/util/matchers.h +7 -12
  524. data/src/core/util/posix/env.cc +2 -2
  525. data/src/core/util/posix/sync.cc +0 -1
  526. data/src/core/util/posix/time.cc +0 -1
  527. data/src/core/util/ref_counted.h +1 -0
  528. data/src/core/util/ref_counted_ptr.h +1 -1
  529. data/src/core/util/ring_buffer.h +4 -5
  530. data/src/core/util/status_helper.cc +16 -20
  531. data/src/core/util/status_helper.h +5 -5
  532. data/src/core/util/sync_abseil.cc +0 -1
  533. data/src/core/util/table.h +6 -21
  534. data/src/core/util/time.cc +1 -1
  535. data/src/core/util/time.h +3 -3
  536. data/src/core/util/time_precise.cc +0 -1
  537. data/src/core/util/type_list.h +56 -0
  538. data/src/core/util/uri.cc +6 -4
  539. data/src/core/util/uri.h +7 -0
  540. data/src/core/util/useful.h +13 -15
  541. data/src/core/util/validation_errors.cc +5 -5
  542. data/src/core/util/wait_for_single_owner.h +62 -0
  543. data/src/core/util/windows/env.cc +3 -3
  544. data/src/core/util/windows/sync.cc +0 -1
  545. data/src/core/util/windows/time.cc +0 -1
  546. data/src/core/util/work_serializer.cc +27 -267
  547. data/src/core/util/work_serializer.h +3 -27
  548. data/src/core/xds/grpc/certificate_provider_store.cc +12 -17
  549. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +2 -2
  550. data/src/core/xds/grpc/xds_audit_logger_registry.cc +1 -1
  551. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +11 -14
  552. data/src/core/xds/grpc/xds_bootstrap_grpc.h +2 -2
  553. data/src/core/xds/grpc/xds_certificate_provider.cc +15 -15
  554. data/src/core/xds/grpc/xds_client_grpc.cc +7 -8
  555. data/src/core/xds/grpc/xds_cluster.h +4 -4
  556. data/src/core/xds/grpc/xds_cluster_parser.cc +26 -26
  557. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
  558. data/src/core/xds/grpc/xds_common_types.cc +2 -2
  559. data/src/core/xds/grpc/xds_common_types.h +4 -4
  560. data/src/core/xds/grpc/xds_common_types_parser.cc +29 -31
  561. data/src/core/xds/grpc/xds_common_types_parser.h +8 -7
  562. data/src/core/xds/grpc/xds_endpoint.cc +3 -4
  563. data/src/core/xds/grpc/xds_endpoint_parser.cc +68 -37
  564. data/src/core/xds/grpc/xds_health_status.cc +4 -4
  565. data/src/core/xds/grpc/xds_health_status.h +4 -3
  566. data/src/core/xds/grpc/xds_http_fault_filter.cc +18 -20
  567. data/src/core/xds/grpc/xds_http_fault_filter.h +4 -3
  568. data/src/core/xds/grpc/xds_http_filter.h +3 -3
  569. data/src/core/xds/grpc/xds_http_filter_registry.cc +7 -7
  570. data/src/core/xds/grpc/xds_http_filter_registry.h +3 -3
  571. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +7 -7
  572. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +4 -3
  573. data/src/core/xds/grpc/xds_http_rbac_filter.cc +30 -23
  574. data/src/core/xds/grpc/xds_http_rbac_filter.h +4 -3
  575. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +10 -10
  576. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +4 -3
  577. data/src/core/xds/grpc/xds_lb_policy_registry.cc +4 -4
  578. data/src/core/xds/grpc/xds_listener.cc +4 -6
  579. data/src/core/xds/grpc/xds_listener.h +10 -10
  580. data/src/core/xds/grpc/xds_listener_parser.cc +58 -51
  581. data/src/core/xds/grpc/xds_listener_parser.h +2 -1
  582. data/src/core/xds/grpc/xds_metadata.cc +5 -5
  583. data/src/core/xds/grpc/xds_metadata.h +8 -0
  584. data/src/core/xds/grpc/xds_metadata_parser.cc +65 -52
  585. data/src/core/xds/grpc/xds_route_config.cc +9 -15
  586. data/src/core/xds/grpc/xds_route_config.h +9 -9
  587. data/src/core/xds/grpc/xds_route_config_parser.cc +114 -116
  588. data/src/core/xds/grpc/xds_route_config_parser.h +4 -4
  589. data/src/core/xds/grpc/xds_routing.cc +6 -6
  590. data/src/core/xds/grpc/xds_routing.h +5 -5
  591. data/src/core/xds/grpc/xds_server_grpc.cc +22 -1
  592. data/src/core/xds/grpc/xds_server_grpc.h +5 -2
  593. data/src/core/xds/grpc/xds_server_grpc_interface.h +33 -0
  594. data/src/core/xds/grpc/xds_transport_grpc.cc +5 -6
  595. data/src/core/xds/xds_client/lrs_client.cc +71 -83
  596. data/src/core/xds/xds_client/lrs_client.h +8 -8
  597. data/src/core/xds/xds_client/xds_api.cc +5 -228
  598. data/src/core/xds/xds_client/xds_api.h +1 -133
  599. data/src/core/xds/xds_client/xds_bootstrap.cc +11 -1
  600. data/src/core/xds/xds_client/xds_bootstrap.h +7 -0
  601. data/src/core/xds/xds_client/xds_client.cc +1030 -704
  602. data/src/core/xds/xds_client/xds_client.h +135 -29
  603. data/src/core/xds/xds_client/xds_resource_type.h +2 -3
  604. data/src/core/xds/xds_client/xds_resource_type_impl.h +13 -8
  605. data/src/ruby/ext/grpc/extconf.rb +1 -0
  606. data/src/ruby/lib/grpc/version.rb +1 -1
  607. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_bitstr.c → a_bitstr.cc} +16 -57
  608. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.cc +53 -0
  609. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.cc +47 -0
  610. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.cc +42 -0
  611. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.cc +109 -0
  612. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.cc +43 -0
  613. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_int.c → a_int.cc} +15 -56
  614. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_mbstr.c → a_mbstr.cc} +22 -62
  615. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_object.c → a_object.cc} +14 -56
  616. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.cc +32 -0
  617. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_strex.c → a_strex.cc} +13 -55
  618. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_strnid.c → a_strnid.cc} +20 -59
  619. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_time.c → a_time.cc} +41 -76
  620. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_type.c → a_type.cc} +17 -59
  621. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.cc +109 -0
  622. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_lib.c → asn1_lib.cc} +17 -59
  623. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.cc +61 -0
  624. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.cc +56 -0
  625. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.cc +63 -0
  626. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.cc +52 -0
  627. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -57
  628. data/third_party/boringssl-with-bazel/src/crypto/asn1/{posix_time.c → posix_time.cc} +14 -14
  629. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_dec.c → tasn_dec.cc} +17 -58
  630. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_enc.c → tasn_enc.cc} +22 -61
  631. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.cc +164 -0
  632. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_new.c → tasn_new.cc} +20 -61
  633. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.cc +84 -0
  634. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_utl.c → tasn_utl.cc} +26 -65
  635. data/third_party/boringssl-with-bazel/src/crypto/base64/{base64.c → base64.cc} +22 -67
  636. data/third_party/boringssl-with-bazel/src/crypto/bcm_support.h +19 -13
  637. data/third_party/boringssl-with-bazel/src/crypto/bio/{bio.c → bio.cc} +45 -113
  638. data/third_party/boringssl-with-bazel/src/crypto/bio/{bio_mem.c → bio_mem.cc} +21 -62
  639. data/third_party/boringssl-with-bazel/src/crypto/bio/{connect.c → connect.cc} +40 -73
  640. data/third_party/boringssl-with-bazel/src/crypto/bio/errno.cc +50 -0
  641. data/third_party/boringssl-with-bazel/src/crypto/bio/{fd.c → fd.cc} +14 -56
  642. data/third_party/boringssl-with-bazel/src/crypto/bio/{file.c → file.cc} +17 -59
  643. data/third_party/boringssl-with-bazel/src/crypto/bio/hexdump.cc +152 -0
  644. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +13 -55
  645. data/third_party/boringssl-with-bazel/src/crypto/bio/{pair.c → pair.cc} +37 -71
  646. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.cc +59 -0
  647. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.cc +147 -0
  648. data/third_party/boringssl-with-bazel/src/crypto/bio/{socket_helper.c → socket_helper.cc} +13 -13
  649. data/third_party/boringssl-with-bazel/src/crypto/blake2/{blake2.c → blake2.cc} +14 -14
  650. data/third_party/boringssl-with-bazel/src/crypto/{bn_extra/bn_asn1.c → bn/bn_asn1.cc} +13 -13
  651. data/third_party/boringssl-with-bazel/src/crypto/{bn_extra/convert.c → bn/convert.cc} +34 -76
  652. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.cc +118 -0
  653. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.cc +53 -0
  654. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{ber.c → ber.cc} +13 -13
  655. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{cbb.c → cbb.cc} +45 -61
  656. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{cbs.c → cbs.cc} +42 -41
  657. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +13 -13
  658. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{unicode.c → unicode.cc} +13 -13
  659. data/third_party/boringssl-with-bazel/src/crypto/chacha/{chacha.c → chacha.cc} +13 -13
  660. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +18 -18
  661. data/third_party/boringssl-with-bazel/src/crypto/cipher/derive_key.cc +110 -0
  662. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra/e_aesctrhmac.c → cipher/e_aesctrhmac.cc} +18 -23
  663. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra/e_aesgcmsiv.c → cipher/e_aesgcmsiv.cc} +42 -38
  664. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra/e_chacha20poly1305.c → cipher/e_chacha20poly1305.cc} +13 -20
  665. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_des.cc +198 -0
  666. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_null.cc +51 -0
  667. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra/e_rc2.c → cipher/e_rc2.cc} +50 -88
  668. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_rc4.cc +54 -0
  669. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra/e_tls.c → cipher/e_tls.cc} +14 -13
  670. data/third_party/boringssl-with-bazel/src/crypto/cipher/get_cipher.cc +85 -0
  671. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → cipher}/internal.h +29 -69
  672. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra/tls_cbc.c → cipher/tls_cbc.cc} +13 -51
  673. data/third_party/boringssl-with-bazel/src/crypto/conf/{conf.c → conf.cc} +31 -72
  674. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +13 -13
  675. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_apple.c → cpu_aarch64_apple.cc} +14 -14
  676. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_fuchsia.c → cpu_aarch64_fuchsia.cc} +14 -14
  677. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_linux.c → cpu_aarch64_linux.cc} +14 -14
  678. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_openbsd.c → cpu_aarch64_openbsd.cc} +17 -17
  679. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_sysreg.c → cpu_aarch64_sysreg.cc} +15 -14
  680. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.cc +41 -0
  681. data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm_freebsd.c → cpu_arm_freebsd.cc} +15 -15
  682. data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm_linux.c → cpu_arm_linux.cc} +17 -17
  683. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.h +13 -13
  684. data/third_party/boringssl-with-bazel/src/crypto/{cpu_intel.c → cpu_intel.cc} +60 -99
  685. data/third_party/boringssl-with-bazel/src/crypto/{crypto.c → crypto.cc} +18 -23
  686. data/third_party/boringssl-with-bazel/src/crypto/curve25519/{curve25519.c → curve25519.cc} +40 -43
  687. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_64_adx.cc +18 -0
  688. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +13 -13
  689. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +13 -13
  690. data/third_party/boringssl-with-bazel/src/crypto/curve25519/{spake25519.c → spake25519.cc} +34 -28
  691. data/third_party/boringssl-with-bazel/src/crypto/des/{des.c → des.cc} +13 -55
  692. data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +27 -69
  693. data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.cc +124 -0
  694. data/third_party/boringssl-with-bazel/src/crypto/{dh_extra/params.c → dh/params.cc} +13 -51
  695. data/third_party/boringssl-with-bazel/src/crypto/{digest_extra/digest_extra.c → digest/digest_extra.cc} +126 -86
  696. data/third_party/boringssl-with-bazel/src/crypto/dsa/{dsa.c → dsa.cc} +166 -212
  697. data/third_party/boringssl-with-bazel/src/crypto/dsa/{dsa_asn1.c → dsa_asn1.cc} +13 -53
  698. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +13 -15
  699. data/third_party/boringssl-with-bazel/src/crypto/{ec_extra/ec_asn1.c → ec/ec_asn1.cc} +59 -61
  700. data/third_party/boringssl-with-bazel/src/crypto/{ec_extra/ec_derive.c → ec/ec_derive.cc} +13 -13
  701. data/third_party/boringssl-with-bazel/src/crypto/{ec_extra/hash_to_curve.c → ec/hash_to_curve.cc} +79 -77
  702. data/third_party/boringssl-with-bazel/src/crypto/{ec_extra → ec}/internal.h +13 -13
  703. data/third_party/boringssl-with-bazel/src/crypto/ecdh/ecdh.cc +73 -0
  704. data/third_party/boringssl-with-bazel/src/crypto/{ecdsa_extra/ecdsa_asn1.c → ecdsa/ecdsa_asn1.cc} +32 -86
  705. data/third_party/boringssl-with-bazel/src/crypto/engine/{engine.c → engine.cc} +24 -20
  706. data/third_party/boringssl-with-bazel/src/crypto/err/{err.c → err.cc} +41 -134
  707. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +13 -13
  708. data/third_party/boringssl-with-bazel/src/crypto/evp/{evp.c → evp.cc} +37 -88
  709. data/third_party/boringssl-with-bazel/src/crypto/evp/{evp_asn1.c → evp_asn1.cc} +122 -198
  710. data/third_party/boringssl-with-bazel/src/crypto/evp/{evp_ctx.c → evp_ctx.cc} +20 -63
  711. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +13 -55
  712. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dh.c → p_dh.cc} +38 -22
  713. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dh_asn1.c → p_dh_asn1.cc} +51 -29
  714. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dsa_asn1.c → p_dsa_asn1.cc} +75 -134
  715. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ec.c → p_ec.cc} +31 -75
  716. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ec_asn1.c → p_ec_asn1.cc} +36 -82
  717. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ed25519.c → p_ed25519.cc} +34 -31
  718. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ed25519_asn1.c → p_ed25519_asn1.cc} +26 -25
  719. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_hkdf.c → p_hkdf.cc} +30 -26
  720. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_rsa.c → p_rsa.cc} +54 -91
  721. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_rsa_asn1.c → p_rsa_asn1.cc} +26 -69
  722. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_x25519.c → p_x25519.cc} +34 -31
  723. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_x25519_asn1.c → p_x25519_asn1.cc} +30 -29
  724. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.cc +98 -0
  725. data/third_party/boringssl-with-bazel/src/crypto/evp/{print.c → print.cc} +17 -56
  726. data/third_party/boringssl-with-bazel/src/crypto/evp/{scrypt.c → scrypt.cc} +20 -13
  727. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.cc +114 -0
  728. data/third_party/boringssl-with-bazel/src/crypto/ex_data.cc +141 -0
  729. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.cc.inc +191 -0
  730. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{aes_nohw.c.inc → aes_nohw.cc.inc} +13 -13
  731. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes/cbc.c.inc → aes/cbc.cc.inc} +13 -47
  732. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes/cfb.c.inc → aes/cfb.cc.inc} +13 -47
  733. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/ctr.cc.inc +100 -0
  734. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes/gcm.c.inc → aes/gcm.cc.inc} +175 -314
  735. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes/gcm_nohw.c.inc → aes/gcm_nohw.cc.inc} +13 -13
  736. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +419 -70
  737. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{key_wrap.c.inc → key_wrap.cc.inc} +14 -48
  738. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc +84 -0
  739. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/ofb.cc.inc +53 -0
  740. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{modes/polyval.c.inc → aes/polyval.cc.inc} +14 -15
  741. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{bcm.c → bcm.cc} +116 -113
  742. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +665 -25
  743. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{add.c.inc → add.cc.inc} +14 -55
  744. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/{x86_64-gcc.c.inc → x86_64-gcc.cc.inc} +19 -6
  745. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{bn.c.inc → bn.cc.inc} +25 -79
  746. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{bytes.c.inc → bytes.cc.inc} +13 -55
  747. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{cmp.c.inc → cmp.cc.inc} +13 -55
  748. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{ctx.c.inc → ctx.cc.inc} +20 -63
  749. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{div.c.inc → div.cc.inc} +42 -93
  750. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{div_extra.c.inc → div_extra.cc.inc} +13 -13
  751. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{exponentiation.c.inc → exponentiation.cc.inc} +38 -131
  752. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{gcd.c.inc → gcd.cc.inc} +16 -113
  753. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{gcd_extra.c.inc → gcd_extra.cc.inc} +45 -37
  754. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{generic.c.inc → generic.cc.inc} +13 -55
  755. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +25 -134
  756. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.cc.inc +108 -0
  757. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{montgomery.c.inc → montgomery.cc.inc} +24 -126
  758. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{montgomery_inv.c.inc → montgomery_inv.cc.inc} +13 -13
  759. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{mul.c.inc → mul.cc.inc} +24 -70
  760. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{prime.c.inc → prime.cc.inc} +44 -141
  761. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{random.c.inc → random.cc.inc} +13 -107
  762. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{rsaz_exp.c.inc → rsaz_exp.cc.inc} +18 -13
  763. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +20 -17
  764. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{shift.c.inc → shift.cc.inc} +16 -59
  765. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{sqrt.c.inc → sqrt.cc.inc} +13 -53
  766. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{aead.c.inc → aead.cc.inc} +30 -22
  767. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{cipher.c.inc → cipher.cc.inc} +20 -65
  768. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{e_aes.c.inc → e_aes.cc.inc} +113 -335
  769. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{e_aesccm.c.inc → e_aesccm.cc.inc} +21 -58
  770. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +14 -65
  771. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cmac/{cmac.c.inc → cmac.cc.inc} +19 -53
  772. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +26 -22
  773. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/{check.c.inc → check.cc.inc} +13 -55
  774. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/{dh.c.inc → dh.cc.inc} +28 -74
  775. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +13 -15
  776. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/{digest.c.inc → digest.cc.inc} +30 -68
  777. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.cc.inc +178 -0
  778. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +13 -55
  779. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +13 -47
  780. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digestsign/{digestsign.c.inc → digestsign.cc.inc} +14 -55
  781. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +91 -91
  782. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec.c.inc → ec.cc.inc} +24 -81
  783. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec_key.c.inc → ec_key.cc.inc} +26 -86
  784. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec_montgomery.c.inc → ec_montgomery.cc.inc} +14 -66
  785. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{felem.c.inc → felem.cc.inc} +13 -13
  786. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +19 -66
  787. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{oct.c.inc → oct.cc.inc} +19 -72
  788. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p224-64.c.inc → p224-64.cc.inc} +13 -13
  789. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz-table.h +15 -10
  790. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-nistz.c.inc → p256-nistz.cc.inc} +37 -30
  791. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.h +22 -17
  792. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256.c.inc → p256.cc.inc} +13 -13
  793. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +13 -13
  794. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{scalar.c.inc → scalar.cc.inc} +21 -15
  795. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{simple.c.inc → simple.cc.inc} +14 -66
  796. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{simple_mul.c.inc → simple_mul.cc.inc} +13 -13
  797. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{util.c.inc → util.cc.inc} +13 -13
  798. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{wnaf.c.inc → wnaf.cc.inc} +38 -81
  799. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.cc.inc +88 -0
  800. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/{ecdsa.c.inc → ecdsa.cc.inc} +19 -58
  801. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +13 -13
  802. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.cc +28 -0
  803. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/{hkdf.c.inc → hkdf.cc.inc} +13 -13
  804. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/{hmac.c.inc → hmac.cc.inc} +16 -57
  805. data/third_party/boringssl-with-bazel/src/crypto/{keccak → fipsmodule/keccak}/internal.h +13 -13
  806. data/third_party/boringssl-with-bazel/src/crypto/{keccak/keccak.c → fipsmodule/keccak/keccak.cc.inc} +14 -14
  807. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/mldsa.cc.inc +1993 -0
  808. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/mlkem.cc.inc +1165 -0
  809. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/{ctrdrbg.c.inc → ctrdrbg.cc.inc} +22 -28
  810. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +18 -24
  811. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/{rand.c.inc → rand.cc.inc} +34 -30
  812. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.cc.inc +147 -0
  813. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +13 -56
  814. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{padding.c.inc → padding.cc.inc} +32 -73
  815. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{rsa.c.inc → rsa.cc.inc} +93 -148
  816. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{rsa_impl.c.inc → rsa_impl.cc.inc} +82 -137
  817. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/{fips.c.inc → fips.cc.inc} +26 -18
  818. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/{self_check.c.inc → self_check.cc.inc} +68 -64
  819. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +34 -34
  820. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/{service_indicator.c.inc → service_indicator.cc.inc} +23 -24
  821. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +43 -57
  822. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha1.c.inc → sha1.cc.inc} +39 -88
  823. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha256.c.inc → sha256.cc.inc} +50 -110
  824. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha512.c.inc → sha512.cc.inc} +61 -131
  825. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/address.h +119 -0
  826. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/fors.cc.inc +169 -0
  827. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/fors.h +58 -0
  828. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/merkle.cc.inc +161 -0
  829. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/merkle.h +70 -0
  830. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/params.h +78 -0
  831. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +329 -0
  832. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/thash.cc.inc +173 -0
  833. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/thash.h +85 -0
  834. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/wots.cc.inc +171 -0
  835. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/wots.h +50 -0
  836. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +13 -13
  837. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/{kdf.c.inc → kdf.cc.inc} +13 -51
  838. data/third_party/boringssl-with-bazel/src/crypto/hpke/{hpke.c → hpke.cc} +19 -16
  839. data/third_party/boringssl-with-bazel/src/crypto/hrss/{hrss.c → hrss.cc} +73 -122
  840. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +13 -13
  841. data/third_party/boringssl-with-bazel/src/crypto/internal.h +242 -442
  842. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +13 -13
  843. data/third_party/boringssl-with-bazel/src/crypto/kyber/{kyber.c → kyber.cc} +52 -28
  844. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +31 -75
  845. data/third_party/boringssl-with-bazel/src/crypto/lhash/{lhash.c → lhash.cc} +21 -62
  846. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/md4/md4.c.inc → md4/md4.cc} +21 -67
  847. data/third_party/boringssl-with-bazel/src/crypto/md5/internal.h +37 -0
  848. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/md5/md5.c.inc → md5/md5.cc} +17 -58
  849. data/third_party/boringssl-with-bazel/src/crypto/{mem.c → mem.cc} +47 -77
  850. data/third_party/boringssl-with-bazel/src/crypto/mldsa/mldsa.cc +90 -0
  851. data/third_party/boringssl-with-bazel/src/crypto/mlkem/mlkem.cc +97 -1042
  852. data/third_party/boringssl-with-bazel/src/crypto/obj/{obj.c → obj.cc} +40 -85
  853. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +14 -56
  854. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.cc +80 -0
  855. data/third_party/boringssl-with-bazel/src/crypto/pem/internal.h +44 -0
  856. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.cc +149 -0
  857. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_info.c → pem_info.cc} +20 -60
  858. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_lib.c → pem_lib.cc} +59 -107
  859. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.cc +45 -0
  860. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_pk8.c → pem_pk8.cc} +13 -55
  861. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_pkey.c → pem_pkey.cc} +13 -55
  862. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.cc +22 -0
  863. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.cc +22 -0
  864. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +13 -13
  865. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/{pkcs7.c → pkcs7.cc} +17 -17
  866. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/{pkcs7_x509.c → pkcs7_x509.cc} +40 -37
  867. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +13 -54
  868. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{p5_pbev2.c → p5_pbev2.cc} +13 -54
  869. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{pkcs8.c → pkcs8.cc} +170 -210
  870. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{pkcs8_x509.c → pkcs8_x509.cc} +101 -149
  871. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +13 -13
  872. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305.c → poly1305.cc} +15 -15
  873. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305_arm.c → poly1305_arm.cc} +16 -14
  874. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305_vec.c → poly1305_vec.cc} +26 -23
  875. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +13 -13
  876. data/third_party/boringssl-with-bazel/src/crypto/pool/{pool.c → pool.cc} +24 -23
  877. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra/deterministic.c → rand/deterministic.cc} +14 -14
  878. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra/fork_detect.c → rand/fork_detect.cc} +23 -24
  879. data/third_party/boringssl-with-bazel/src/crypto/rand/forkunsafe.cc +44 -0
  880. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra/getentropy.c → rand/getentropy.cc} +13 -13
  881. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra → rand}/getrandom_fillin.h +13 -13
  882. data/third_party/boringssl-with-bazel/src/crypto/rand/ios.cc +42 -0
  883. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra/passive.c → rand/passive.cc} +34 -30
  884. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra/rand_extra.c → rand/rand.cc} +13 -13
  885. data/third_party/boringssl-with-bazel/src/crypto/rand/sysrand_internal.h +37 -0
  886. data/third_party/boringssl-with-bazel/src/crypto/rand/trusty.cc +46 -0
  887. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra/urandom.c → rand/urandom.cc} +19 -19
  888. data/third_party/boringssl-with-bazel/src/crypto/{rand_extra/windows.c → rand/windows.cc} +13 -13
  889. data/third_party/boringssl-with-bazel/src/crypto/rc4/rc4.cc +56 -0
  890. data/third_party/boringssl-with-bazel/src/crypto/{refcount.c → refcount.cc} +13 -13
  891. data/third_party/boringssl-with-bazel/src/crypto/rsa/internal.h +36 -0
  892. data/third_party/boringssl-with-bazel/src/crypto/{rsa_extra/rsa_asn1.c → rsa/rsa_asn1.cc} +13 -54
  893. data/third_party/boringssl-with-bazel/src/crypto/{rsa_extra/rsa_crypt.c → rsa/rsa_crypt.cc} +94 -133
  894. data/third_party/boringssl-with-bazel/src/crypto/rsa/rsa_extra.cc +19 -0
  895. data/third_party/boringssl-with-bazel/src/crypto/rsa/rsa_print.cc +27 -0
  896. data/third_party/boringssl-with-bazel/src/crypto/sha/sha1.cc +52 -0
  897. data/third_party/boringssl-with-bazel/src/crypto/sha/sha256.cc +87 -0
  898. data/third_party/boringssl-with-bazel/src/crypto/sha/sha512.cc +104 -0
  899. data/third_party/boringssl-with-bazel/src/crypto/siphash/{siphash.c → siphash.cc} +13 -13
  900. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/slhdsa.cc +113 -0
  901. data/third_party/boringssl-with-bazel/src/crypto/spake2plus/internal.h +204 -0
  902. data/third_party/boringssl-with-bazel/src/crypto/spake2plus/spake2plus.cc +501 -0
  903. data/third_party/boringssl-with-bazel/src/crypto/stack/{stack.c → stack.cc} +23 -61
  904. data/third_party/boringssl-with-bazel/src/crypto/thread.cc +68 -0
  905. data/third_party/boringssl-with-bazel/src/crypto/{thread_none.c → thread_none.cc} +13 -13
  906. data/third_party/boringssl-with-bazel/src/crypto/{thread_pthread.c → thread_pthread.cc} +21 -20
  907. data/third_party/boringssl-with-bazel/src/crypto/{thread_win.c → thread_win.cc} +33 -29
  908. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +13 -13
  909. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{pmbtoken.c → pmbtoken.cc} +159 -171
  910. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{trust_token.c → trust_token.cc} +32 -34
  911. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{voprf.c → voprf.cc} +178 -182
  912. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.cc +52 -0
  913. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.cc +97 -0
  914. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.cc +74 -0
  915. data/third_party/boringssl-with-bazel/src/crypto/x509/{algorithm.c → algorithm.cc} +14 -56
  916. data/third_party/boringssl-with-bazel/src/crypto/x509/{asn1_gen.c → asn1_gen.cc} +19 -62
  917. data/third_party/boringssl-with-bazel/src/crypto/x509/{by_dir.c → by_dir.cc} +32 -77
  918. data/third_party/boringssl-with-bazel/src/crypto/x509/{by_file.c → by_file.cc} +13 -55
  919. data/third_party/boringssl-with-bazel/src/crypto/x509/ext_dat.h +13 -55
  920. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.cc +37 -0
  921. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +13 -57
  922. data/third_party/boringssl-with-bazel/src/crypto/x509/{name_print.c → name_print.cc} +13 -55
  923. data/third_party/boringssl-with-bazel/src/crypto/x509/{policy.c → policy.cc} +200 -190
  924. data/third_party/boringssl-with-bazel/src/crypto/x509/{rsa_pss.c → rsa_pss.cc} +59 -96
  925. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.cc +103 -0
  926. data/third_party/boringssl-with-bazel/src/crypto/x509/{t_req.c → t_req.cc} +13 -55
  927. data/third_party/boringssl-with-bazel/src/crypto/x509/{t_x509.c → t_x509.cc} +13 -55
  928. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.cc +79 -0
  929. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_akey.c → v3_akey.cc} +17 -57
  930. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_akeya.cc +31 -0
  931. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_alt.c → v3_alt.cc} +17 -58
  932. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_bcons.cc +95 -0
  933. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_bitst.cc +102 -0
  934. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_conf.c → v3_conf.cc} +18 -60
  935. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_cpols.c → v3_cpols.cc} +60 -98
  936. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_crld.c → v3_crld.cc} +16 -57
  937. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_enum.cc +73 -0
  938. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_extku.cc +114 -0
  939. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_genn.c → v3_genn.cc} +20 -62
  940. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_ia5.cc +79 -0
  941. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_info.c → v3_info.cc} +20 -67
  942. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_int.cc +81 -0
  943. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_lib.c → v3_lib.cc} +23 -63
  944. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_ncons.c → v3_ncons.cc} +15 -56
  945. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_ocsp.c → v3_ocsp.cc} +17 -9
  946. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_pcons.cc +101 -0
  947. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_pmaps.c → v3_pmaps.cc} +15 -56
  948. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_prn.c → v3_prn.cc} +15 -56
  949. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_purp.c → v3_purp.cc} +29 -63
  950. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_skey.cc +131 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_utl.c → v3_utl.cc} +30 -78
  952. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.cc +47 -0
  953. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_att.c → x509_att.cc} +16 -57
  954. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_cmp.c → x509_cmp.cc} +13 -55
  955. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.cc +66 -0
  956. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.cc +44 -0
  957. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_ext.c → x509_ext.cc} +13 -55
  958. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_lu.c → x509_lu.cc} +20 -65
  959. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_obj.c → x509_obj.cc} +13 -55
  960. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_req.c → x509_req.cc} +13 -55
  961. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_set.c → x509_set.cc} +13 -55
  962. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_trs.c → x509_trs.cc} +13 -55
  963. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_txt.c → x509_txt.cc} +13 -55
  964. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_v3.c → x509_v3.cc} +15 -57
  965. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_vfy.c → x509_vfy.cc} +229 -267
  966. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_vpm.c → x509_vpm.cc} +68 -68
  967. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509cset.c → x509cset.cc} +13 -55
  968. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509name.c → x509name.cc} +13 -55
  969. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.cc +67 -0
  970. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.cc +91 -0
  971. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.cc +107 -0
  972. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_all.c → x_all.cc} +23 -61
  973. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.cc +55 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_crl.c → x_crl.cc} +19 -61
  975. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.cc +36 -0
  976. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_name.c → x_name.cc} +52 -87
  977. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_pubkey.c → x_pubkey.cc} +17 -57
  978. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.cc +74 -0
  979. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.cc +51 -0
  980. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.cc +34 -0
  981. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.cc +28 -0
  982. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_x509.c → x_x509.cc} +61 -99
  983. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_x509a.c → x_x509a.cc} +17 -57
  984. data/third_party/boringssl-with-bazel/src/gen/crypto/{err_data.c → err_data.cc} +468 -453
  985. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -13
  986. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +13 -47
  987. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +13 -51
  988. data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +14 -14
  989. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +23 -62
  990. data/third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h +13 -13
  991. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +248 -328
  992. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +24 -55
  993. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +13 -55
  994. data/third_party/boringssl-with-bazel/src/include/openssl/bcm_public.h +82 -0
  995. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +13 -55
  996. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +13 -13
  997. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +13 -55
  998. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +14 -121
  999. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +13 -55
  1000. data/third_party/boringssl-with-bazel/src/include/openssl/buffer.h +13 -13
  1001. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +31 -16
  1002. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +13 -55
  1003. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +13 -13
  1004. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +31 -59
  1005. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +13 -13
  1006. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +13 -55
  1007. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +13 -13
  1008. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +25 -14
  1009. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +13 -13
  1010. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +13 -13
  1011. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +13 -55
  1012. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +17 -55
  1013. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +19 -56
  1014. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +17 -58
  1015. data/third_party/boringssl-with-bazel/src/include/openssl/dtls1.h +13 -13
  1016. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +13 -13
  1017. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +14 -66
  1018. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +31 -72
  1019. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +14 -65
  1020. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +13 -51
  1021. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +13 -13
  1022. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +13 -107
  1023. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +14 -56
  1024. data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +13 -55
  1025. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +13 -107
  1026. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +13 -13
  1027. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +13 -13
  1028. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +13 -55
  1029. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +13 -13
  1030. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +13 -13
  1031. data/third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h +13 -13
  1032. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +13 -13
  1033. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +13 -55
  1034. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +13 -55
  1035. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +13 -55
  1036. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +13 -55
  1037. data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +20 -26
  1038. data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +13 -37
  1039. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +27 -69
  1040. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +13 -55
  1041. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +13 -13
  1042. data/third_party/boringssl-with-bazel/src/include/openssl/objects.h +13 -13
  1043. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +13 -13
  1044. data/third_party/boringssl-with-bazel/src/include/openssl/opensslv.h +13 -13
  1045. data/third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h +13 -13
  1046. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +22 -60
  1047. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h +13 -13
  1048. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +13 -13
  1049. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +13 -55
  1050. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +13 -13
  1051. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +13 -13
  1052. data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +13 -13
  1053. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +13 -13
  1054. data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +13 -55
  1055. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +13 -55
  1056. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +23 -63
  1057. data/third_party/boringssl-with-bazel/src/include/openssl/safestack.h +13 -13
  1058. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +13 -13
  1059. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +15 -95
  1060. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +13 -13
  1061. data/third_party/boringssl-with-bazel/src/include/openssl/slhdsa.h +174 -0
  1062. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +24 -32
  1063. data/third_party/boringssl-with-bazel/src/include/openssl/srtp.h +13 -13
  1064. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +358 -290
  1065. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +15 -114
  1066. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +13 -55
  1067. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +23 -13
  1068. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +15 -57
  1069. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +13 -13
  1070. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -156
  1071. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +15 -15
  1072. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +13 -55
  1073. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +14 -61
  1074. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +13 -13
  1075. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +13 -13
  1076. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3_errors.h +13 -53
  1077. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +15 -14
  1078. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +680 -434
  1079. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +129 -174
  1080. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +176 -131
  1081. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +21 -127
  1082. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +107 -104
  1083. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +311 -312
  1084. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +54 -47
  1085. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +677 -475
  1086. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +66 -73
  1087. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +61 -153
  1088. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +198 -331
  1089. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +88 -212
  1090. data/third_party/boringssl-with-bazel/src/ssl/internal.h +949 -531
  1091. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +47 -157
  1092. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +29 -159
  1093. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +18 -112
  1094. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +103 -196
  1095. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +52 -145
  1096. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +15 -20
  1097. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +117 -157
  1098. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +229 -365
  1099. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +216 -31
  1100. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +13 -109
  1101. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -33
  1102. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +194 -350
  1103. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +38 -83
  1104. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +101 -236
  1105. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +17 -91
  1106. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +109 -157
  1107. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +44 -30
  1108. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +66 -195
  1109. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -176
  1110. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +58 -42
  1111. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +146 -94
  1112. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +251 -180
  1113. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +236 -107
  1114. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +64 -117
  1115. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +52 -134
  1116. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +6 -0
  1117. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +6 -0
  1118. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +4 -1
  1119. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1 -1
  1120. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +3 -0
  1121. metadata +357 -348
  1122. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb.h +0 -426
  1123. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.c +0 -87
  1124. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.h +0 -32
  1125. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb.h +0 -408
  1126. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.c +0 -124
  1127. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.h +0 -38
  1128. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.c +0 -108
  1129. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.h +0 -33
  1130. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.c +0 -67
  1131. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.h +0 -48
  1132. data/src/core/util/atm.cc +0 -34
  1133. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +0 -95
  1134. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -89
  1135. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +0 -84
  1136. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +0 -151
  1137. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +0 -85
  1138. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +0 -74
  1139. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -183
  1140. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +0 -103
  1141. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +0 -98
  1142. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +0 -105
  1143. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +0 -94
  1144. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +0 -212
  1145. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -126
  1146. data/third_party/boringssl-with-bazel/src/crypto/bio/errno.c +0 -92
  1147. data/third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c +0 -192
  1148. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -102
  1149. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +0 -189
  1150. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +0 -158
  1151. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +0 -53
  1152. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +0 -127
  1153. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +0 -152
  1154. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_des.c +0 -228
  1155. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +0 -90
  1156. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +0 -94
  1157. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.c +0 -41
  1158. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_64_adx.c +0 -18
  1159. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +0 -165
  1160. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +0 -1539
  1161. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +0 -58
  1162. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +0 -124
  1163. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +0 -146
  1164. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +0 -156
  1165. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +0 -236
  1166. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c.inc +0 -127
  1167. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c.inc +0 -124
  1168. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.c.inc +0 -146
  1169. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c.inc +0 -304
  1170. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c.inc +0 -130
  1171. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +0 -29
  1172. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +0 -37
  1173. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c.inc +0 -196
  1174. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +0 -428
  1175. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c.inc +0 -87
  1176. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c.inc +0 -241
  1177. data/third_party/boringssl-with-bazel/src/crypto/mldsa/internal.h +0 -73
  1178. data/third_party/boringssl-with-bazel/src/crypto/mldsa/mldsa.c +0 -1687
  1179. data/third_party/boringssl-with-bazel/src/crypto/mlkem/internal.h +0 -90
  1180. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c +0 -122
  1181. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -243
  1182. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +0 -87
  1183. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -64
  1184. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -64
  1185. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +0 -44
  1186. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/ios.c +0 -42
  1187. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/sysrand_internal.h +0 -37
  1188. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/trusty.c +0 -46
  1189. data/third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c +0 -98
  1190. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +0 -79
  1191. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +0 -22
  1192. data/third_party/boringssl-with-bazel/src/crypto/spx/address.c +0 -101
  1193. data/third_party/boringssl-with-bazel/src/crypto/spx/address.h +0 -50
  1194. data/third_party/boringssl-with-bazel/src/crypto/spx/fors.c +0 -133
  1195. data/third_party/boringssl-with-bazel/src/crypto/spx/fors.h +0 -54
  1196. data/third_party/boringssl-with-bazel/src/crypto/spx/merkle.c +0 -150
  1197. data/third_party/boringssl-with-bazel/src/crypto/spx/merkle.h +0 -61
  1198. data/third_party/boringssl-with-bazel/src/crypto/spx/params.h +0 -71
  1199. data/third_party/boringssl-with-bazel/src/crypto/spx/spx.c +0 -140
  1200. data/third_party/boringssl-with-bazel/src/crypto/spx/spx_util.c +0 -53
  1201. data/third_party/boringssl-with-bazel/src/crypto/spx/spx_util.h +0 -44
  1202. data/third_party/boringssl-with-bazel/src/crypto/spx/thash.c +0 -136
  1203. data/third_party/boringssl-with-bazel/src/crypto/spx/thash.h +0 -70
  1204. data/third_party/boringssl-with-bazel/src/crypto/spx/wots.c +0 -135
  1205. data/third_party/boringssl-with-bazel/src/crypto/spx/wots.h +0 -45
  1206. data/third_party/boringssl-with-bazel/src/crypto/thread.c +0 -110
  1207. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +0 -94
  1208. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +0 -136
  1209. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +0 -116
  1210. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +0 -79
  1211. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -145
  1212. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +0 -121
  1213. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_akeya.c +0 -73
  1214. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_bcons.c +0 -135
  1215. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_bitst.c +0 -141
  1216. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_enum.c +0 -112
  1217. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_extku.c +0 -154
  1218. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_ia5.c +0 -122
  1219. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_int.c +0 -121
  1220. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_pcons.c +0 -142
  1221. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_skey.c +0 -170
  1222. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -89
  1223. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +0 -108
  1224. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +0 -86
  1225. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +0 -109
  1226. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +0 -133
  1227. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +0 -149
  1228. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +0 -97
  1229. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +0 -78
  1230. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +0 -116
  1231. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +0 -93
  1232. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +0 -79
  1233. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +0 -70
  1234. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +0 -129
  1235. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/spx.h +0 -90
@@ -1,110 +1,16 @@
1
- /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2
- * All rights reserved.
3
- *
4
- * This package is an SSL implementation written
5
- * by Eric Young (eay@cryptsoft.com).
6
- * The implementation was written so as to conform with Netscapes SSL.
7
- *
8
- * This library is free for commercial and non-commercial use as long as
9
- * the following conditions are aheared to. The following conditions
10
- * apply to all code found in this distribution, be it the RC4, RSA,
11
- * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12
- * included with this distribution is covered by the same copyright terms
13
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14
- *
15
- * Copyright remains Eric Young's, and as such any Copyright notices in
16
- * the code are not to be removed.
17
- * If this package is used in a product, Eric Young should be given attribution
18
- * as the author of the parts of the library used.
19
- * This can be in the form of a textual message at program startup or
20
- * in documentation (online or textual) provided with the package.
21
- *
22
- * Redistribution and use in source and binary forms, with or without
23
- * modification, are permitted provided that the following conditions
24
- * are met:
25
- * 1. Redistributions of source code must retain the copyright
26
- * notice, this list of conditions and the following disclaimer.
27
- * 2. Redistributions in binary form must reproduce the above copyright
28
- * notice, this list of conditions and the following disclaimer in the
29
- * documentation and/or other materials provided with the distribution.
30
- * 3. All advertising materials mentioning features or use of this software
31
- * must display the following acknowledgement:
32
- * "This product includes cryptographic software written by
33
- * Eric Young (eay@cryptsoft.com)"
34
- * The word 'cryptographic' can be left out if the rouines from the library
35
- * being used are not cryptographic related :-).
36
- * 4. If you include any Windows specific code (or a derivative thereof) from
37
- * the apps directory (application code) you must include an acknowledgement:
38
- * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39
- *
40
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50
- * SUCH DAMAGE.
51
- *
52
- * The licence and distribution terms for any publically available version or
53
- * derivative of this code cannot be changed. i.e. this code cannot simply be
54
- * copied and put under another distribution licence
55
- * [including the GNU Public Licence.]
56
- */
57
- /* ====================================================================
58
- * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
59
- *
60
- * Redistribution and use in source and binary forms, with or without
61
- * modification, are permitted provided that the following conditions
62
- * are met:
63
- *
64
- * 1. Redistributions of source code must retain the above copyright
65
- * notice, this list of conditions and the following disclaimer.
66
- *
67
- * 2. Redistributions in binary form must reproduce the above copyright
68
- * notice, this list of conditions and the following disclaimer in
69
- * the documentation and/or other materials provided with the
70
- * distribution.
71
- *
72
- * 3. All advertising materials mentioning features or use of this
73
- * software must display the following acknowledgment:
74
- * "This product includes software developed by the OpenSSL Project
75
- * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
76
- *
77
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
78
- * endorse or promote products derived from this software without
79
- * prior written permission. For written permission, please contact
80
- * openssl-core@openssl.org.
81
- *
82
- * 5. Products derived from this software may not be called "OpenSSL"
83
- * nor may "OpenSSL" appear in their names without prior written
84
- * permission of the OpenSSL Project.
85
- *
86
- * 6. Redistributions of any form whatsoever must retain the following
87
- * acknowledgment:
88
- * "This product includes software developed by the OpenSSL Project
89
- * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
90
- *
91
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
92
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
93
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
94
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
95
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
96
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
97
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
98
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
99
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
100
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
101
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
102
- * OF THE POSSIBILITY OF SUCH DAMAGE.
103
- * ====================================================================
104
- *
105
- * This product includes cryptographic software written by Eric Young
106
- * (eay@cryptsoft.com). This product includes software written by Tim
107
- * Hudson (tjh@cryptsoft.com). */
1
+ // Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
108
14
 
109
15
  #include <openssl/ssl.h>
110
16
 
@@ -130,6 +36,7 @@
130
36
  #include <openssl/rand.h>
131
37
 
132
38
  #include "../crypto/internal.h"
39
+ #include "../crypto/spake2plus/internal.h"
133
40
  #include "internal.h"
134
41
 
135
42
 
@@ -175,7 +82,7 @@ static bool tls1_check_duplicate_extensions(const CBS *cbs) {
175
82
  }
176
83
 
177
84
  Array<uint16_t> extension_types;
178
- if (!extension_types.Init(num_extensions)) {
85
+ if (!extension_types.InitForOverwrite(num_extensions)) {
179
86
  return false;
180
87
  }
181
88
 
@@ -214,16 +121,6 @@ static bool is_post_quantum_group(uint16_t id) {
214
121
  }
215
122
  }
216
123
 
217
- bool ssl_client_hello_init(const SSL *ssl, SSL_CLIENT_HELLO *out,
218
- Span<const uint8_t> body) {
219
- CBS cbs = body;
220
- if (!ssl_parse_client_hello_with_trailing_data(ssl, &cbs, out) ||
221
- CBS_len(&cbs) != 0) {
222
- return false;
223
- }
224
- return true;
225
- }
226
-
227
124
  bool ssl_parse_client_hello_with_trailing_data(const SSL *ssl, CBS *cbs,
228
125
  SSL_CLIENT_HELLO *out) {
229
126
  OPENSSL_memset(out, 0, sizeof(*out));
@@ -235,6 +132,7 @@ bool ssl_parse_client_hello_with_trailing_data(const SSL *ssl, CBS *cbs,
235
132
  !CBS_get_bytes(cbs, &random, SSL3_RANDOM_SIZE) ||
236
133
  !CBS_get_u8_length_prefixed(cbs, &session_id) ||
237
134
  CBS_len(&session_id) > SSL_MAX_SSL_SESSION_ID_LENGTH) {
135
+ OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
238
136
  return false;
239
137
  }
240
138
 
@@ -243,12 +141,17 @@ bool ssl_parse_client_hello_with_trailing_data(const SSL *ssl, CBS *cbs,
243
141
  out->session_id = CBS_data(&session_id);
244
142
  out->session_id_len = CBS_len(&session_id);
245
143
 
246
- // Skip past DTLS cookie
247
144
  if (SSL_is_dtls(out->ssl)) {
248
145
  CBS cookie;
249
146
  if (!CBS_get_u8_length_prefixed(cbs, &cookie)) {
147
+ OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
250
148
  return false;
251
149
  }
150
+ out->dtls_cookie = CBS_data(&cookie);
151
+ out->dtls_cookie_len = CBS_len(&cookie);
152
+ } else {
153
+ out->dtls_cookie = nullptr;
154
+ out->dtls_cookie_len = 0;
252
155
  }
253
156
 
254
157
  CBS cipher_suites, compression_methods;
@@ -256,6 +159,7 @@ bool ssl_parse_client_hello_with_trailing_data(const SSL *ssl, CBS *cbs,
256
159
  CBS_len(&cipher_suites) < 2 || (CBS_len(&cipher_suites) & 1) != 0 ||
257
160
  !CBS_get_u8_length_prefixed(cbs, &compression_methods) ||
258
161
  CBS_len(&compression_methods) < 1) {
162
+ OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
259
163
  return false;
260
164
  }
261
165
 
@@ -274,6 +178,7 @@ bool ssl_parse_client_hello_with_trailing_data(const SSL *ssl, CBS *cbs,
274
178
  CBS extensions;
275
179
  if (!CBS_get_u16_length_prefixed(cbs, &extensions) ||
276
180
  !tls1_check_duplicate_extensions(&extensions)) {
181
+ OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
277
182
  return false;
278
183
  }
279
184
  out->extensions = CBS_data(&extensions);
@@ -513,9 +418,7 @@ static bool ignore_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
513
418
  return true;
514
419
  }
515
420
 
516
- static bool dont_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
517
- return true;
518
- }
421
+ static bool dont_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { return true; }
519
422
 
520
423
  // Server name indication (SNI).
521
424
  //
@@ -533,9 +436,7 @@ static bool ext_sni_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
533
436
  if (ssl->hostname == nullptr) {
534
437
  return true;
535
438
  }
536
- hostname =
537
- MakeConstSpan(reinterpret_cast<const uint8_t *>(ssl->hostname.get()),
538
- strlen(ssl->hostname.get()));
439
+ hostname = StringAsBytes(ssl->hostname.get());
539
440
  }
540
441
 
541
442
  CBB contents, server_name_list, name;
@@ -566,7 +467,7 @@ static bool ext_sni_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
566
467
  }
567
468
 
568
469
  static bool ext_sni_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
569
- if (hs->ssl->s3->session_reused ||
470
+ if (hs->ssl->s3->session_reused || //
570
471
  !hs->should_ack_sni) {
571
472
  return true;
572
473
  }
@@ -703,20 +604,20 @@ static bool ext_ri_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
703
604
  ssl_client_hello_type_t type) {
704
605
  const SSL *const ssl = hs->ssl;
705
606
  // Renegotiation indication is not necessary in TLS 1.3.
706
- if (hs->min_version >= TLS1_3_VERSION ||
707
- type == ssl_client_hello_inner) {
607
+ if (hs->min_version >= TLS1_3_VERSION || //
608
+ type == ssl_client_hello_inner) {
708
609
  return true;
709
610
  }
710
611
 
711
612
  assert(ssl->s3->initial_handshake_complete ==
712
- (ssl->s3->previous_client_finished_len != 0));
613
+ !ssl->s3->previous_client_finished.empty());
713
614
 
714
615
  CBB contents, prev_finished;
715
616
  if (!CBB_add_u16(out, TLSEXT_TYPE_renegotiate) ||
716
617
  !CBB_add_u16_length_prefixed(out, &contents) ||
717
618
  !CBB_add_u8_length_prefixed(&contents, &prev_finished) ||
718
- !CBB_add_bytes(&prev_finished, ssl->s3->previous_client_finished,
719
- ssl->s3->previous_client_finished_len) ||
619
+ !CBB_add_bytes(&prev_finished, ssl->s3->previous_client_finished.data(),
620
+ ssl->s3->previous_client_finished.size()) ||
720
621
  !CBB_flush(out)) {
721
622
  return false;
722
623
  }
@@ -752,16 +653,11 @@ static bool ext_ri_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
752
653
  return true;
753
654
  }
754
655
 
755
- const size_t expected_len = ssl->s3->previous_client_finished_len +
756
- ssl->s3->previous_server_finished_len;
757
-
758
- // Check for logic errors
759
- assert(!expected_len || ssl->s3->previous_client_finished_len);
760
- assert(!expected_len || ssl->s3->previous_server_finished_len);
761
- assert(ssl->s3->initial_handshake_complete ==
762
- (ssl->s3->previous_client_finished_len != 0));
656
+ // Check for logic errors.
657
+ assert(ssl->s3->previous_client_finished.size() ==
658
+ ssl->s3->previous_server_finished.size());
763
659
  assert(ssl->s3->initial_handshake_complete ==
764
- (ssl->s3->previous_server_finished_len != 0));
660
+ !ssl->s3->previous_client_finished.empty());
765
661
 
766
662
  // Parse out the extension contents.
767
663
  CBS renegotiated_connection;
@@ -773,15 +669,22 @@ static bool ext_ri_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
773
669
  }
774
670
 
775
671
  // Check that the extension matches.
776
- if (CBS_len(&renegotiated_connection) != expected_len) {
672
+ CBS client_verify, server_verify;
673
+ if (!CBS_get_bytes(&renegotiated_connection, &client_verify,
674
+ ssl->s3->previous_client_finished.size()) ||
675
+ !CBS_get_bytes(&renegotiated_connection, &server_verify,
676
+ ssl->s3->previous_server_finished.size()) ||
677
+ CBS_len(&renegotiated_connection) != 0) {
777
678
  OPENSSL_PUT_ERROR(SSL, SSL_R_RENEGOTIATION_MISMATCH);
778
679
  *out_alert = SSL_AD_HANDSHAKE_FAILURE;
779
680
  return false;
780
681
  }
781
682
 
782
- const uint8_t *d = CBS_data(&renegotiated_connection);
783
- bool ok = CRYPTO_memcmp(d, ssl->s3->previous_client_finished,
784
- ssl->s3->previous_client_finished_len) == 0;
683
+ bool ok =
684
+ CBS_mem_equal(&client_verify, ssl->s3->previous_client_finished.data(),
685
+ ssl->s3->previous_client_finished.size()) &&
686
+ CBS_mem_equal(&server_verify, ssl->s3->previous_server_finished.data(),
687
+ ssl->s3->previous_server_finished.size());
785
688
  #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
786
689
  ok = true;
787
690
  #endif
@@ -790,20 +693,8 @@ static bool ext_ri_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
790
693
  *out_alert = SSL_AD_HANDSHAKE_FAILURE;
791
694
  return false;
792
695
  }
793
- d += ssl->s3->previous_client_finished_len;
794
696
 
795
- ok = CRYPTO_memcmp(d, ssl->s3->previous_server_finished,
796
- ssl->s3->previous_server_finished_len) == 0;
797
- #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
798
- ok = true;
799
- #endif
800
- if (!ok) {
801
- OPENSSL_PUT_ERROR(SSL, SSL_R_RENEGOTIATION_MISMATCH);
802
- *out_alert = SSL_AD_HANDSHAKE_FAILURE;
803
- return false;
804
- }
805
697
  ssl->s3->send_connection_binding = true;
806
-
807
698
  return true;
808
699
  }
809
700
 
@@ -887,7 +778,7 @@ static bool ext_ems_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
887
778
  SSL *const ssl = hs->ssl;
888
779
 
889
780
  if (contents != NULL) {
890
- if (ssl_protocol_version(ssl) >= TLS1_3_VERSION ||
781
+ if (ssl_protocol_version(ssl) >= TLS1_3_VERSION || //
891
782
  CBS_len(contents) != 0) {
892
783
  return false;
893
784
  }
@@ -953,17 +844,14 @@ static bool ext_ticket_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
953
844
  return true;
954
845
  }
955
846
 
956
- Span<const uint8_t> ticket;
957
-
958
847
  // Renegotiation does not participate in session resumption. However, still
959
848
  // advertise the extension to avoid potentially breaking servers which carry
960
849
  // over the state from the previous handshake, such as OpenSSL servers
961
850
  // without upstream's 3c3f0259238594d77264a78944d409f2127642c4.
962
- if (!ssl->s3->initial_handshake_complete &&
851
+ Span<const uint8_t> ticket;
852
+ if (!ssl->s3->initial_handshake_complete && //
963
853
  ssl->session != nullptr &&
964
- !ssl->session->ticket.empty() &&
965
- // Don't send TLS 1.3 session tickets in the ticket extension.
966
- ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION) {
854
+ ssl_session_get_type(ssl->session.get()) == SSLSessionType::kTicket) {
967
855
  ticket = ssl->session->ticket;
968
856
  }
969
857
 
@@ -1029,6 +917,10 @@ static bool ext_sigalgs_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1029
917
  if (hs->max_version < TLS1_2_VERSION) {
1030
918
  return true;
1031
919
  }
920
+ // In PAKE mode, signature_algorithms is not used.
921
+ if (hs->pake_prover != nullptr) {
922
+ return true;
923
+ }
1032
924
 
1033
925
  CBB contents, sigalgs_cbb;
1034
926
  if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_signature_algorithms) ||
@@ -1199,7 +1091,7 @@ static bool ext_npn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1199
1091
 
1200
1092
  while (CBS_len(contents) != 0) {
1201
1093
  CBS proto;
1202
- if (!CBS_get_u8_length_prefixed(contents, &proto) ||
1094
+ if (!CBS_get_u8_length_prefixed(contents, &proto) || //
1203
1095
  CBS_len(&proto) == 0) {
1204
1096
  return false;
1205
1097
  }
@@ -1212,8 +1104,7 @@ static bool ext_npn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1212
1104
  ssl, &selected, &selected_len, orig_contents,
1213
1105
  static_cast<unsigned>(orig_len),
1214
1106
  ssl->ctx->next_proto_select_cb_arg) != SSL_TLSEXT_ERR_OK ||
1215
- !ssl->s3->next_proto_negotiated.CopyFrom(
1216
- MakeConstSpan(selected, selected_len))) {
1107
+ !ssl->s3->next_proto_negotiated.CopyFrom(Span(selected, selected_len))) {
1217
1108
  *out_alert = SSL_AD_INTERNAL_ERROR;
1218
1109
  return false;
1219
1110
  }
@@ -1233,9 +1124,9 @@ static bool ext_npn_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1233
1124
  return false;
1234
1125
  }
1235
1126
 
1236
- if (contents == NULL ||
1237
- ssl->s3->initial_handshake_complete ||
1238
- ssl->ctx->next_protos_advertised_cb == NULL ||
1127
+ if (contents == NULL || //
1128
+ ssl->s3->initial_handshake_complete || //
1129
+ ssl->ctx->next_protos_advertised_cb == NULL || //
1239
1130
  SSL_is_dtls(ssl)) {
1240
1131
  return true;
1241
1132
  }
@@ -1263,9 +1154,9 @@ static bool ext_npn_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1263
1154
  }
1264
1155
 
1265
1156
  CBB contents;
1266
- if (!CBB_add_u16(out, TLSEXT_TYPE_next_proto_neg) ||
1267
- !CBB_add_u16_length_prefixed(out, &contents) ||
1268
- !CBB_add_bytes(&contents, npa, npa_len) ||
1157
+ if (!CBB_add_u16(out, TLSEXT_TYPE_next_proto_neg) || //
1158
+ !CBB_add_u16_length_prefixed(out, &contents) || //
1159
+ !CBB_add_bytes(&contents, npa, npa_len) || //
1269
1160
  !CBB_flush(out)) {
1270
1161
  return false;
1271
1162
  }
@@ -1376,7 +1267,7 @@ static bool ext_alpn_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1376
1267
  CBB *out_compressible,
1377
1268
  ssl_client_hello_type_t type) {
1378
1269
  const SSL *const ssl = hs->ssl;
1379
- if (hs->config->alpn_client_proto_list.empty() && ssl->quic_method) {
1270
+ if (hs->config->alpn_client_proto_list.empty() && SSL_is_quic(ssl)) {
1380
1271
  // ALPN MUST be used with QUIC.
1381
1272
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_APPLICATION_PROTOCOL);
1382
1273
  return false;
@@ -1405,7 +1296,7 @@ static bool ext_alpn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1405
1296
  CBS *contents) {
1406
1297
  SSL *const ssl = hs->ssl;
1407
1298
  if (contents == NULL) {
1408
- if (ssl->quic_method) {
1299
+ if (SSL_is_quic(ssl)) {
1409
1300
  // ALPN is required when QUIC is used.
1410
1301
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_APPLICATION_PROTOCOL);
1411
1302
  *out_alert = SSL_AD_NO_APPLICATION_PROTOCOL;
@@ -1427,11 +1318,11 @@ static bool ext_alpn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1427
1318
  // The extension data consists of a ProtocolNameList which must have
1428
1319
  // exactly one ProtocolName. Each of these is length-prefixed.
1429
1320
  CBS protocol_name_list, protocol_name;
1430
- if (!CBS_get_u16_length_prefixed(contents, &protocol_name_list) ||
1431
- CBS_len(contents) != 0 ||
1432
- !CBS_get_u8_length_prefixed(&protocol_name_list, &protocol_name) ||
1321
+ if (!CBS_get_u16_length_prefixed(contents, &protocol_name_list) || //
1322
+ CBS_len(contents) != 0 || //
1323
+ !CBS_get_u8_length_prefixed(&protocol_name_list, &protocol_name) || //
1433
1324
  // Empty protocol names are forbidden.
1434
- CBS_len(&protocol_name) == 0 ||
1325
+ CBS_len(&protocol_name) == 0 || //
1435
1326
  CBS_len(&protocol_name_list) != 0) {
1436
1327
  return false;
1437
1328
  }
@@ -1505,7 +1396,7 @@ bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1505
1396
  !ssl_client_hello_get_extension(
1506
1397
  client_hello, &contents,
1507
1398
  TLSEXT_TYPE_application_layer_protocol_negotiation)) {
1508
- if (ssl->quic_method) {
1399
+ if (SSL_is_quic(ssl)) {
1509
1400
  // ALPN is required when QUIC is used.
1510
1401
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_APPLICATION_PROTOCOL);
1511
1402
  *out_alert = SSL_AD_NO_APPLICATION_PROTOCOL;
@@ -1519,8 +1410,8 @@ bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1519
1410
  hs->next_proto_neg_seen = false;
1520
1411
 
1521
1412
  CBS protocol_name_list;
1522
- if (!CBS_get_u16_length_prefixed(&contents, &protocol_name_list) ||
1523
- CBS_len(&contents) != 0 ||
1413
+ if (!CBS_get_u16_length_prefixed(&contents, &protocol_name_list) || //
1414
+ CBS_len(&contents) != 0 || //
1524
1415
  !ssl_is_valid_alpn_list(protocol_name_list)) {
1525
1416
  OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
1526
1417
  *out_alert = SSL_AD_DECODE_ERROR;
@@ -1536,7 +1427,7 @@ bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1536
1427
  static_cast<unsigned>(CBS_len(&protocol_name_list)),
1537
1428
  ssl->ctx->alpn_select_cb_arg);
1538
1429
  // ALPN is required when QUIC is used.
1539
- if (ssl->quic_method &&
1430
+ if (SSL_is_quic(ssl) &&
1540
1431
  (ret == SSL_TLSEXT_ERR_NOACK || ret == SSL_TLSEXT_ERR_ALERT_WARNING)) {
1541
1432
  ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1542
1433
  }
@@ -1547,8 +1438,7 @@ bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1547
1438
  *out_alert = SSL_AD_INTERNAL_ERROR;
1548
1439
  return false;
1549
1440
  }
1550
- if (!ssl->s3->alpn_selected.CopyFrom(
1551
- MakeConstSpan(selected, selected_len))) {
1441
+ if (!ssl->s3->alpn_selected.CopyFrom(Span(selected, selected_len))) {
1552
1442
  *out_alert = SSL_AD_INTERNAL_ERROR;
1553
1443
  return false;
1554
1444
  }
@@ -1678,8 +1568,8 @@ static bool ext_srtp_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1678
1568
  const SSL *const ssl = hs->ssl;
1679
1569
  const STACK_OF(SRTP_PROTECTION_PROFILE) *profiles =
1680
1570
  SSL_get_srtp_profiles(ssl);
1681
- if (profiles == NULL ||
1682
- sk_SRTP_PROTECTION_PROFILE_num(profiles) == 0 ||
1571
+ if (profiles == NULL || //
1572
+ sk_SRTP_PROTECTION_PROFILE_num(profiles) == 0 || //
1683
1573
  !SSL_is_dtls(ssl)) {
1684
1574
  return true;
1685
1575
  }
@@ -1719,10 +1609,10 @@ static bool ext_srtp_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1719
1609
  assert(SSL_is_dtls(ssl));
1720
1610
  CBS profile_ids, srtp_mki;
1721
1611
  uint16_t profile_id;
1722
- if (!CBS_get_u16_length_prefixed(contents, &profile_ids) ||
1723
- !CBS_get_u16(&profile_ids, &profile_id) ||
1724
- CBS_len(&profile_ids) != 0 ||
1725
- !CBS_get_u8_length_prefixed(contents, &srtp_mki) ||
1612
+ if (!CBS_get_u16_length_prefixed(contents, &profile_ids) || //
1613
+ !CBS_get_u16(&profile_ids, &profile_id) || //
1614
+ CBS_len(&profile_ids) != 0 || //
1615
+ !CBS_get_u8_length_prefixed(contents, &srtp_mki) || //
1726
1616
  CBS_len(contents) != 0) {
1727
1617
  OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST);
1728
1618
  return false;
@@ -1802,8 +1692,7 @@ static bool ext_srtp_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
1802
1692
  !CBB_add_u16_length_prefixed(out, &contents) ||
1803
1693
  !CBB_add_u16_length_prefixed(&contents, &profile_ids) ||
1804
1694
  !CBB_add_u16(&profile_ids, ssl->s3->srtp_profile->id) ||
1805
- !CBB_add_u8(&contents, 0 /* empty MKI */) ||
1806
- !CBB_flush(out)) {
1695
+ !CBB_add_u8(&contents, 0 /* empty MKI */) || !CBB_flush(out)) {
1807
1696
  return false;
1808
1697
  }
1809
1698
 
@@ -1839,8 +1728,8 @@ static bool ext_ec_point_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
1839
1728
  return ext_ec_point_add_extension(hs, out);
1840
1729
  }
1841
1730
 
1842
- static bool ext_ec_point_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1843
- CBS *contents) {
1731
+ static bool ext_ec_point_parse_serverhello(SSL_HANDSHAKE *hs,
1732
+ uint8_t *out_alert, CBS *contents) {
1844
1733
  if (contents == NULL) {
1845
1734
  return true;
1846
1735
  }
@@ -1867,8 +1756,8 @@ static bool ext_ec_point_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert
1867
1756
  return true;
1868
1757
  }
1869
1758
 
1870
- static bool ext_ec_point_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1871
- CBS *contents) {
1759
+ static bool ext_ec_point_parse_clienthello(SSL_HANDSHAKE *hs,
1760
+ uint8_t *out_alert, CBS *contents) {
1872
1761
  if (ssl_protocol_version(hs->ssl) >= TLS1_3_VERSION) {
1873
1762
  return true;
1874
1763
  }
@@ -1902,7 +1791,8 @@ static bool should_offer_psk(const SSL_HANDSHAKE *hs,
1902
1791
  ssl_client_hello_type_t type) {
1903
1792
  const SSL *const ssl = hs->ssl;
1904
1793
  if (hs->max_version < TLS1_3_VERSION || ssl->session == nullptr ||
1905
- ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION ||
1794
+ ssl_session_get_type(ssl->session.get()) !=
1795
+ SSLSessionType::kPreSharedKey ||
1906
1796
  // TODO(https://crbug.com/boringssl/275): Should we synthesize a
1907
1797
  // placeholder PSK, at least when we offer early data? Otherwise
1908
1798
  // ClientHelloOuter will contain an early_data extension without a
@@ -1942,8 +1832,7 @@ static bool ext_pre_shared_key_add_clienthello(const SSL_HANDSHAKE *hs,
1942
1832
  return true;
1943
1833
  }
1944
1834
 
1945
- struct OPENSSL_timeval now;
1946
- ssl_get_current_time(ssl, &now);
1835
+ OPENSSL_timeval now = ssl_ctx_get_current_time(ssl->ctx.get());
1947
1836
  uint32_t ticket_age = 1000 * (now.tv_sec - ssl->session->time);
1948
1837
  uint32_t obfuscated_ticket_age = ticket_age + ssl->session->ticket_age_add;
1949
1838
 
@@ -1973,7 +1862,7 @@ bool ssl_ext_pre_shared_key_parse_serverhello(SSL_HANDSHAKE *hs,
1973
1862
  uint8_t *out_alert,
1974
1863
  CBS *contents) {
1975
1864
  uint16_t psk_id;
1976
- if (!CBS_get_u16(contents, &psk_id) ||
1865
+ if (!CBS_get_u16(contents, &psk_id) || //
1977
1866
  CBS_len(contents) != 0) {
1978
1867
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
1979
1868
  *out_alert = SSL_AD_DECODE_ERROR;
@@ -2005,11 +1894,11 @@ bool ssl_ext_pre_shared_key_parse_clienthello(
2005
1894
 
2006
1895
  // We only process the first PSK identity since we don't support pure PSK.
2007
1896
  CBS identities, binders;
2008
- if (!CBS_get_u16_length_prefixed(contents, &identities) ||
2009
- !CBS_get_u16_length_prefixed(&identities, out_ticket) ||
2010
- !CBS_get_u32(&identities, out_obfuscated_ticket_age) ||
2011
- !CBS_get_u16_length_prefixed(contents, &binders) ||
2012
- CBS_len(&binders) == 0 ||
1897
+ if (!CBS_get_u16_length_prefixed(contents, &identities) || //
1898
+ !CBS_get_u16_length_prefixed(&identities, out_ticket) || //
1899
+ !CBS_get_u32(&identities, out_obfuscated_ticket_age) || //
1900
+ !CBS_get_u16_length_prefixed(contents, &binders) || //
1901
+ CBS_len(&binders) == 0 || //
2013
1902
  CBS_len(contents) != 0) {
2014
1903
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
2015
1904
  *out_alert = SSL_AD_DECODE_ERROR;
@@ -2062,10 +1951,10 @@ bool ssl_ext_pre_shared_key_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2062
1951
  }
2063
1952
 
2064
1953
  CBB contents;
2065
- if (!CBB_add_u16(out, TLSEXT_TYPE_pre_shared_key) ||
2066
- !CBB_add_u16_length_prefixed(out, &contents) ||
1954
+ if (!CBB_add_u16(out, TLSEXT_TYPE_pre_shared_key) || //
1955
+ !CBB_add_u16_length_prefixed(out, &contents) || //
2067
1956
  // We only consider the first identity for resumption
2068
- !CBB_add_u16(&contents, 0) ||
1957
+ !CBB_add_u16(&contents, 0) || //
2069
1958
  !CBB_flush(out)) {
2070
1959
  return false;
2071
1960
  }
@@ -2084,6 +1973,11 @@ static bool ext_psk_key_exchange_modes_add_clienthello(
2084
1973
  if (hs->max_version < TLS1_3_VERSION) {
2085
1974
  return true;
2086
1975
  }
1976
+ // We do not support resumption with PAKEs, so do not offer any PSK key
1977
+ // exchange modes, to signal the server not to send a ticket.
1978
+ if (hs->pake_prover != nullptr) {
1979
+ return true;
1980
+ }
2087
1981
 
2088
1982
  CBB contents, ke_modes;
2089
1983
  if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_psk_key_exchange_modes) ||
@@ -2104,8 +1998,8 @@ static bool ext_psk_key_exchange_modes_parse_clienthello(SSL_HANDSHAKE *hs,
2104
1998
  }
2105
1999
 
2106
2000
  CBS ke_modes;
2107
- if (!CBS_get_u8_length_prefixed(contents, &ke_modes) ||
2108
- CBS_len(&ke_modes) == 0 ||
2001
+ if (!CBS_get_u8_length_prefixed(contents, &ke_modes) || //
2002
+ CBS_len(&ke_modes) == 0 || //
2109
2003
  CBS_len(contents) != 0) {
2110
2004
  *out_alert = SSL_AD_DECODE_ERROR;
2111
2005
  return false;
@@ -2142,8 +2036,8 @@ static bool ext_early_data_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2142
2036
  // send the extension in both ClientHellos. This ensures that, if the server
2143
2037
  // handshakes with ClientHelloOuter, it can skip past early data. See
2144
2038
  // draft-ietf-tls-esni-13, section 6.1.
2145
- if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_early_data) ||
2146
- !CBB_add_u16(out_compressible, 0) ||
2039
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_early_data) || //
2040
+ !CBB_add_u16(out_compressible, 0) || //
2147
2041
  !CBB_flush(out_compressible)) {
2148
2042
  return false;
2149
2043
  }
@@ -2190,10 +2084,10 @@ static bool ext_early_data_parse_serverhello(SSL_HANDSHAKE *hs,
2190
2084
  }
2191
2085
 
2192
2086
  static bool ext_early_data_parse_clienthello(SSL_HANDSHAKE *hs,
2193
- uint8_t *out_alert, CBS *contents) {
2087
+ uint8_t *out_alert,
2088
+ CBS *contents) {
2194
2089
  SSL *const ssl = hs->ssl;
2195
- if (contents == NULL ||
2196
- ssl_protocol_version(ssl) < TLS1_3_VERSION) {
2090
+ if (contents == NULL || ssl_protocol_version(ssl) < TLS1_3_VERSION) {
2197
2091
  return true;
2198
2092
  }
2199
2093
 
@@ -2211,8 +2105,8 @@ static bool ext_early_data_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2211
2105
  return true;
2212
2106
  }
2213
2107
 
2214
- if (!CBB_add_u16(out, TLSEXT_TYPE_early_data) ||
2215
- !CBB_add_u16(out, 0) ||
2108
+ if (!CBB_add_u16(out, TLSEXT_TYPE_early_data) || //
2109
+ !CBB_add_u16(out, 0) || //
2216
2110
  !CBB_flush(out)) {
2217
2111
  return false;
2218
2112
  }
@@ -2231,7 +2125,9 @@ bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id) {
2231
2125
  hs->key_shares[1].reset();
2232
2126
  hs->key_share_bytes.Reset();
2233
2127
 
2234
- if (hs->max_version < TLS1_3_VERSION) {
2128
+ // If offering a PAKE, do not set up key shares. We do not currently support
2129
+ // clients offering both PAKE and non-PAKE modes, including resumption.
2130
+ if (hs->max_version < TLS1_3_VERSION || hs->pake_prover) {
2235
2131
  return true;
2236
2132
  }
2237
2133
 
@@ -2296,7 +2192,9 @@ bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id) {
2296
2192
  static bool ext_key_share_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2297
2193
  CBB *out_compressible,
2298
2194
  ssl_client_hello_type_t type) {
2299
- if (hs->max_version < TLS1_3_VERSION) {
2195
+ // If offering a PAKE, do not set up key shares. We do not currently support
2196
+ // clients offering both PAKE and non-PAKE modes, including resumption.
2197
+ if (hs->max_version < TLS1_3_VERSION || hs->pake_prover) {
2300
2198
  return true;
2301
2199
  }
2302
2200
 
@@ -2317,6 +2215,14 @@ static bool ext_key_share_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2317
2215
  bool ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs,
2318
2216
  Array<uint8_t> *out_secret,
2319
2217
  uint8_t *out_alert, CBS *contents) {
2218
+ if (hs->key_shares[0] == nullptr) {
2219
+ // If we did not offer key shares, the extension should have been rejected
2220
+ // as unsolicited.
2221
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
2222
+ *out_alert = SSL_AD_INTERNAL_ERROR;
2223
+ return false;
2224
+ }
2225
+
2320
2226
  CBS ciphertext;
2321
2227
  uint16_t group_id;
2322
2228
  if (!CBS_get_u16(contents, &group_id) ||
@@ -2352,7 +2258,8 @@ bool ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, bool *out_found,
2352
2258
  Span<const uint8_t> *out_peer_key,
2353
2259
  uint8_t *out_alert,
2354
2260
  const SSL_CLIENT_HELLO *client_hello) {
2355
- // We only support connections that include an ECDHE key exchange.
2261
+ // We only support connections that include an ECDHE key exchange, or use a
2262
+ // PAKE.
2356
2263
  CBS contents;
2357
2264
  if (!ssl_client_hello_get_extension(client_hello, &contents,
2358
2265
  TLSEXT_TYPE_key_share)) {
@@ -2401,7 +2308,30 @@ bool ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, bool *out_found,
2401
2308
  return true;
2402
2309
  }
2403
2310
 
2311
+ bool ssl_ext_pake_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2312
+ if (hs->pake_share_bytes.empty()) {
2313
+ return true;
2314
+ }
2315
+
2316
+ CBB pake_ext, pake_msg;
2317
+ if (!CBB_add_u16(out, TLSEXT_TYPE_pake) ||
2318
+ !CBB_add_u16_length_prefixed(out, &pake_ext) ||
2319
+ !CBB_add_u16(&pake_ext, SSL_PAKE_SPAKE2PLUSV1) ||
2320
+ !CBB_add_u16_length_prefixed(&pake_ext, &pake_msg) ||
2321
+ !CBB_add_bytes(&pake_msg, hs->pake_share_bytes.data(),
2322
+ hs->pake_share_bytes.size()) ||
2323
+ !CBB_flush(out)) {
2324
+ return false;
2325
+ }
2326
+ return true;
2327
+ }
2328
+
2404
2329
  bool ssl_ext_key_share_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2330
+ if (hs->pake_verifier) {
2331
+ // We don't add the key share extension if a PAKE is offered.
2332
+ return true;
2333
+ }
2334
+
2405
2335
  CBB entry, ciphertext;
2406
2336
  if (!CBB_add_u16(out, TLSEXT_TYPE_key_share) ||
2407
2337
  !CBB_add_u16_length_prefixed(out, &entry) ||
@@ -2493,6 +2423,11 @@ static bool ext_supported_groups_add_clienthello(const SSL_HANDSHAKE *hs,
2493
2423
  CBB *out_compressible,
2494
2424
  ssl_client_hello_type_t type) {
2495
2425
  const SSL *const ssl = hs->ssl;
2426
+ // In PAKE mode, supported_groups and key_share are not used.
2427
+ if (hs->pake_prover != nullptr) {
2428
+ return true;
2429
+ }
2430
+
2496
2431
  CBB contents, groups_bytes;
2497
2432
  if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_supported_groups) ||
2498
2433
  !CBB_add_u16_length_prefixed(out_compressible, &contents) ||
@@ -2502,14 +2437,12 @@ static bool ext_supported_groups_add_clienthello(const SSL_HANDSHAKE *hs,
2502
2437
 
2503
2438
  // Add a fake group. See RFC 8701.
2504
2439
  if (ssl->ctx->grease_enabled &&
2505
- !CBB_add_u16(&groups_bytes,
2506
- ssl_get_grease_value(hs, ssl_grease_group))) {
2440
+ !CBB_add_u16(&groups_bytes, ssl_get_grease_value(hs, ssl_grease_group))) {
2507
2441
  return false;
2508
2442
  }
2509
2443
 
2510
2444
  for (uint16_t group : tls1_get_grouplist(hs)) {
2511
- if (is_post_quantum_group(group) &&
2512
- hs->max_version < TLS1_3_VERSION) {
2445
+ if (is_post_quantum_group(group) && hs->max_version < TLS1_3_VERSION) {
2513
2446
  continue;
2514
2447
  }
2515
2448
  if (!CBB_add_u16(&groups_bytes, group)) {
@@ -2536,7 +2469,7 @@ static bool parse_u16_array(const CBS *cbs, Array<uint16_t> *out) {
2536
2469
  }
2537
2470
 
2538
2471
  Array<uint16_t> ret;
2539
- if (!ret.Init(CBS_len(&copy) / 2)) {
2472
+ if (!ret.InitForOverwrite(CBS_len(&copy) / 2)) {
2540
2473
  return false;
2541
2474
  }
2542
2475
  for (size_t i = 0; i < ret.size(); i++) {
@@ -2552,16 +2485,16 @@ static bool parse_u16_array(const CBS *cbs, Array<uint16_t> *out) {
2552
2485
  }
2553
2486
 
2554
2487
  static bool ext_supported_groups_parse_clienthello(SSL_HANDSHAKE *hs,
2555
- uint8_t *out_alert,
2488
+ uint8_t *out_alert,
2556
2489
  CBS *contents) {
2557
2490
  if (contents == NULL) {
2558
2491
  return true;
2559
2492
  }
2560
2493
 
2561
2494
  CBS supported_group_list;
2562
- if (!CBS_get_u16_length_prefixed(contents, &supported_group_list) ||
2563
- CBS_len(&supported_group_list) == 0 ||
2564
- CBS_len(contents) != 0 ||
2495
+ if (!CBS_get_u16_length_prefixed(contents, &supported_group_list) || //
2496
+ CBS_len(&supported_group_list) == 0 || //
2497
+ CBS_len(contents) != 0 || //
2565
2498
  !parse_u16_array(&supported_group_list, &hs->peer_supported_group_list)) {
2566
2499
  return false;
2567
2500
  }
@@ -2570,14 +2503,53 @@ static bool ext_supported_groups_parse_clienthello(SSL_HANDSHAKE *hs,
2570
2503
  }
2571
2504
 
2572
2505
 
2506
+ // Certificate Authorities.
2507
+ //
2508
+ // https://tools.ietf.org/html/rfc8446#section-4.2.4
2509
+
2510
+ static bool ext_certificate_authorities_add_clienthello(
2511
+ const SSL_HANDSHAKE *hs, CBB *out, CBB *out_compressible,
2512
+ ssl_client_hello_type_t type) {
2513
+ if (ssl_has_CA_names(hs->config)) {
2514
+ CBB ca_contents;
2515
+ if (!CBB_add_u16(out, TLSEXT_TYPE_certificate_authorities) || //
2516
+ !CBB_add_u16_length_prefixed(out, &ca_contents) || //
2517
+ !ssl_add_CA_names(hs, &ca_contents) || //
2518
+ !CBB_flush(out)) {
2519
+ return false;
2520
+ }
2521
+ }
2522
+ return true;
2523
+ }
2524
+
2525
+ static bool ext_certificate_authorities_parse_clienthello(SSL_HANDSHAKE *hs,
2526
+ uint8_t *out_alert,
2527
+ CBS *contents) {
2528
+ if (contents == NULL) {
2529
+ return true;
2530
+ }
2531
+
2532
+ if (CBS_len(contents) == 0) {
2533
+ return false;
2534
+ }
2535
+
2536
+ hs->ca_names = SSL_parse_CA_list(hs->ssl, out_alert, contents);
2537
+ if (!hs->ca_names) {
2538
+ return false;
2539
+ }
2540
+
2541
+ return true;
2542
+ }
2543
+
2544
+
2573
2545
  // QUIC Transport Parameters
2574
2546
 
2575
2547
  static bool ext_quic_transport_params_add_clienthello_impl(
2576
2548
  const SSL_HANDSHAKE *hs, CBB *out, bool use_legacy_codepoint) {
2577
- if (hs->config->quic_transport_params.empty() && !hs->ssl->quic_method) {
2549
+ if (hs->config->quic_transport_params.empty() && !SSL_is_quic(hs->ssl)) {
2578
2550
  return true;
2579
2551
  }
2580
- if (hs->config->quic_transport_params.empty() || !hs->ssl->quic_method) {
2552
+ if (hs->config->quic_transport_params.empty() || !SSL_is_quic(hs->ssl)) {
2581
2553
  // QUIC Transport Parameters must be sent over QUIC, and they must not be
2582
2554
  // sent over non-QUIC transports. If transport params are set, then
2583
2555
  // SSL(_CTX)_set_quic_method must also be called.
@@ -2629,7 +2601,7 @@ static bool ext_quic_transport_params_parse_serverhello_impl(
2629
2601
  // Silently ignore because we expect the other QUIC codepoint.
2630
2602
  return true;
2631
2603
  }
2632
- if (!ssl->quic_method) {
2604
+ if (!SSL_is_quic(ssl)) {
2633
2605
  return true;
2634
2606
  }
2635
2607
  *out_alert = SSL_AD_MISSING_EXTENSION;
@@ -2637,7 +2609,7 @@ static bool ext_quic_transport_params_parse_serverhello_impl(
2637
2609
  }
2638
2610
  // The extensions parser will check for unsolicited extensions before
2639
2611
  // calling the callback.
2640
- assert(ssl->quic_method != nullptr);
2612
+ assert(SSL_is_quic(ssl));
2641
2613
  assert(ssl_protocol_version(ssl) == TLS1_3_VERSION);
2642
2614
  assert(used_legacy_codepoint == hs->config->quic_use_legacy_codepoint);
2643
2615
  return ssl->s3->peer_quic_transport_params.CopyFrom(*contents);
@@ -2661,7 +2633,7 @@ static bool ext_quic_transport_params_parse_clienthello_impl(
2661
2633
  bool used_legacy_codepoint) {
2662
2634
  SSL *const ssl = hs->ssl;
2663
2635
  if (!contents) {
2664
- if (!ssl->quic_method) {
2636
+ if (!SSL_is_quic(ssl)) {
2665
2637
  if (hs->config->quic_transport_params.empty()) {
2666
2638
  return true;
2667
2639
  }
@@ -2678,7 +2650,7 @@ static bool ext_quic_transport_params_parse_clienthello_impl(
2678
2650
  *out_alert = SSL_AD_MISSING_EXTENSION;
2679
2651
  return false;
2680
2652
  }
2681
- if (!ssl->quic_method) {
2653
+ if (!SSL_is_quic(ssl)) {
2682
2654
  if (used_legacy_codepoint) {
2683
2655
  // Ignore the legacy private-use codepoint because that could be sent
2684
2656
  // to mean something else than QUIC transport parameters.
@@ -2712,12 +2684,12 @@ static bool ext_quic_transport_params_parse_clienthello_legacy(
2712
2684
 
2713
2685
  static bool ext_quic_transport_params_add_serverhello_impl(
2714
2686
  SSL_HANDSHAKE *hs, CBB *out, bool use_legacy_codepoint) {
2715
- if (hs->ssl->quic_method == nullptr && use_legacy_codepoint) {
2687
+ if (!SSL_is_quic(hs->ssl) && use_legacy_codepoint) {
2716
2688
  // Ignore the legacy private-use codepoint because that could be sent
2717
2689
  // to mean something else than QUIC transport parameters.
2718
2690
  return true;
2719
2691
  }
2720
- assert(hs->ssl->quic_method != nullptr);
2692
+ assert(SSL_is_quic(hs->ssl));
2721
2693
  if (hs->config->quic_transport_params.empty()) {
2722
2694
  // Transport parameters must be set when using QUIC.
2723
2695
  OPENSSL_PUT_ERROR(SSL, SSL_R_QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED);
@@ -2779,9 +2751,9 @@ static bool ext_delegated_credential_parse_clienthello(SSL_HANDSHAKE *hs,
2779
2751
  // The contents of the extension are the signature algorithms the client will
2780
2752
  // accept for a delegated credential.
2781
2753
  CBS sigalg_list;
2782
- if (!CBS_get_u16_length_prefixed(contents, &sigalg_list) ||
2783
- CBS_len(&sigalg_list) == 0 ||
2784
- CBS_len(contents) != 0 ||
2754
+ if (!CBS_get_u16_length_prefixed(contents, &sigalg_list) || //
2755
+ CBS_len(&sigalg_list) == 0 || //
2756
+ CBS_len(contents) != 0 || //
2785
2757
  !parse_u16_array(&sigalg_list, &hs->peer_delegated_credential_sigalgs)) {
2786
2758
  return false;
2787
2759
  }
@@ -2840,16 +2812,16 @@ static bool cert_compression_parse_clienthello(SSL_HANDSHAKE *hs,
2840
2812
  const size_t num_algs = ctx->cert_compression_algs.size();
2841
2813
 
2842
2814
  CBS alg_ids;
2843
- if (!CBS_get_u8_length_prefixed(contents, &alg_ids) ||
2844
- CBS_len(contents) != 0 ||
2845
- CBS_len(&alg_ids) == 0 ||
2815
+ if (!CBS_get_u8_length_prefixed(contents, &alg_ids) || //
2816
+ CBS_len(contents) != 0 || //
2817
+ CBS_len(&alg_ids) == 0 || //
2846
2818
  CBS_len(&alg_ids) % 2 == 1) {
2847
2819
  return false;
2848
2820
  }
2849
2821
 
2850
2822
  const size_t num_given_alg_ids = CBS_len(&alg_ids) / 2;
2851
2823
  Array<uint16_t> given_alg_ids;
2852
- if (!given_alg_ids.Init(num_given_alg_ids)) {
2824
+ if (!given_alg_ids.InitForOverwrite(num_given_alg_ids)) {
2853
2825
  return false;
2854
2826
  }
2855
2827
 
@@ -2896,6 +2868,220 @@ static bool cert_compression_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) {
2896
2868
  return true;
2897
2869
  }
2898
2870
 
2871
+ // PAKEs
2872
+ //
2873
+ // See
2874
+ // https://chris-wood.github.io/draft-bmw-tls-pake13/draft-bmw-tls-pake13.html
2875
+
2876
+ bool ssl_setup_pake_shares(SSL_HANDSHAKE *hs) {
2877
+ hs->pake_share_bytes.Reset();
2878
+ if (hs->max_version < TLS1_3_VERSION) {
2879
+ return true;
2880
+ }
2881
+
2882
+ Array<SSL_CREDENTIAL *> creds;
2883
+ if (!ssl_get_credential_list(hs, &creds)) {
2884
+ return false;
2885
+ }
2886
+
2887
+ if (std::none_of(creds.begin(), creds.end(), [](SSL_CREDENTIAL *cred) {
2888
+ return cred->type == SSLCredentialType::kSPAKE2PlusV1Client;
2889
+ })) {
2890
+ // If there were no configured PAKE credentials, proceed without filling
2891
+ // in the PAKE extension.
2892
+ return true;
2893
+ }
2894
+
2895
+ // We currently do not support multiple PAKE credentials, or a mix of PAKE and
2896
+ // non-PAKE credentials.
2897
+ if (creds.size() != 1u) {
2898
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_CREDENTIAL_LIST);
2899
+ return false;
2900
+ }
2901
+ SSL_CREDENTIAL *cred = creds[0];
2902
+ assert(cred->type == SSLCredentialType::kSPAKE2PlusV1Client);
2903
+
2904
+ hs->pake_prover = MakeUnique<spake2plus::Prover>();
2905
+ uint8_t prover_share[spake2plus::kShareSize];
2906
+ if (hs->pake_prover == nullptr ||
2907
+ !hs->pake_prover->Init(cred->pake_context, cred->client_identity,
2908
+ cred->server_identity, cred->password_verifier_w0,
2909
+ cred->password_verifier_w1) ||
2910
+ !hs->pake_prover->GenerateShare(prover_share)) {
2911
+ return false;
2912
+ }
2913
+
2914
+ hs->credential = UpRef(cred);
2915
+
2916
+ bssl::ScopedCBB cbb;
2917
+ CBB shares, client_identity, server_identity, pake_message;
2918
+ if (!CBB_init(cbb.get(), 64) ||
2919
+ !CBB_add_u16_length_prefixed(cbb.get(), &client_identity) ||
2920
+ !CBB_add_bytes(&client_identity, cred->client_identity.data(),
2921
+ cred->client_identity.size()) ||
2922
+ !CBB_add_u16_length_prefixed(cbb.get(), &server_identity) ||
2923
+ !CBB_add_bytes(&server_identity, cred->server_identity.data(),
2924
+ cred->server_identity.size()) ||
2925
+ !CBB_add_u16_length_prefixed(cbb.get(), &shares) ||
2926
+ !CBB_add_u16(&shares, SSL_PAKE_SPAKE2PLUSV1) ||
2927
+ !CBB_add_u16_length_prefixed(&shares, &pake_message) ||
2928
+ !CBB_add_bytes(&pake_message, prover_share, sizeof(prover_share))) {
2929
+ return false;
2930
+ }
2931
+
2932
+ return CBBFinishArray(cbb.get(), &hs->pake_share_bytes);
2933
+ }
2934
+
2935
+ static bool ext_pake_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out,
2936
+ CBB *out_compressible,
2937
+ ssl_client_hello_type_t type) {
2938
+ if (hs->pake_share_bytes.empty()) {
2939
+ return true;
2940
+ }
2941
+
2942
+ CBB pake_share_bytes;
2943
+ if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_pake) ||
2944
+ !CBB_add_u16_length_prefixed(out_compressible, &pake_share_bytes) ||
2945
+ !CBB_add_bytes(&pake_share_bytes, hs->pake_share_bytes.data(),
2946
+ hs->pake_share_bytes.size()) ||
2947
+ !CBB_flush(out_compressible)) {
2948
+ return false;
2949
+ }
2950
+
2951
+ return true;
2952
+ }
2953
+
2954
+ bool ssl_ext_pake_parse_serverhello(SSL_HANDSHAKE *hs,
2955
+ Array<uint8_t> *out_secret,
2956
+ uint8_t *out_alert, CBS *contents) {
2957
+ *out_alert = SSL_AD_DECODE_ERROR;
2958
+
2959
+ if (!hs->pake_prover) {
2960
+ // If we did not offer a PAKE, the extension should have been rejected as
2961
+ // unsolicited.
2962
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
2963
+ *out_alert = SSL_AD_INTERNAL_ERROR;
2964
+ return false;
2965
+ }
2966
+
2967
+ CBS pake_msg;
2968
+ uint16_t named_pake;
2969
+ if (!CBS_get_u16(contents, &named_pake) ||
2970
+ !CBS_get_u16_length_prefixed(contents, &pake_msg) ||
2971
+ CBS_len(contents) != 0 || //
2972
+ named_pake != SSL_PAKE_SPAKE2PLUSV1) {
2973
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
2974
+ return false;
2975
+ }
2976
+
2977
+ // Check that the server's PAKE share consists of the right number of
2978
+ // bytes for a PAKE share and a key confirmation message.
2979
+ if (CBS_len(&pake_msg) != spake2plus::kShareSize + spake2plus::kConfirmSize) {
2980
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
2981
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
2982
+ return false;
2983
+ }
2984
+ Span<const uint8_t> pake_msg_span = pake_msg;
2985
+
2986
+ // Releasing the result of |ComputeConfirmation| lets the client confirm one
2987
+ // PAKE guess. If all failures are used up, no more guesses are allowed.
2988
+ if (!hs->credential->HasPAKEAttempts()) {
2989
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PAKE_EXHAUSTED);
2990
+ *out_alert = SSL_AD_INTERNAL_ERROR;
2991
+ return false;
2992
+ }
2993
+
2994
+ uint8_t prover_confirm[spake2plus::kConfirmSize];
2995
+ uint8_t prover_secret[spake2plus::kSecretSize];
2996
+ if (!hs->pake_prover->ComputeConfirmation(
2997
+ prover_confirm, prover_secret,
2998
+ pake_msg_span.subspan(0, spake2plus::kShareSize),
2999
+ pake_msg_span.subspan(spake2plus::kShareSize))) {
3000
+ // Record a failure before releasing the answer to the client.
3001
+ hs->credential->ClaimPAKEAttempt();
3002
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
3003
+ *out_alert = SSL_AD_ILLEGAL_PARAMETER;
3004
+ return false;
3005
+ }
3006
+
3007
+ Array<uint8_t> secret;
3008
+ if (!secret.CopyFrom(prover_secret)) {
3009
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
3010
+ *out_alert = SSL_AD_INTERNAL_ERROR;
3011
+ return false;
3012
+ }
3013
+
3014
+ *out_secret = std::move(secret);
3015
+ return true;
3016
+ }
3017
+
3018
+ static bool ext_pake_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
3019
+ CBS *contents) {
3020
+ if (contents == nullptr) {
3021
+ return true;
3022
+ }
3023
+
3024
+ // struct {
3025
+ // opaque client_identity<0..2^16-1>;
3026
+ // opaque server_identity<0..2^16-1>;
3027
+ // PAKEShare client_shares<0..2^16-1>;
3028
+ // } PAKEClientHello;
3029
+ //
3030
+ // struct {
3031
+ // NamedPAKE named_pake;
3032
+ // opaque pake_message<1..2^16-1>;
3033
+ // } PAKEShare;
3034
+
3035
+ *out_alert = SSL_AD_DECODE_ERROR;
3036
+ CBS client_identity, server_identity, shares;
3037
+ if (!CBS_get_u16_length_prefixed(contents, &client_identity) ||
3038
+ !CBS_get_u16_length_prefixed(contents, &server_identity) ||
3039
+ !CBS_get_u16_length_prefixed(contents, &shares) ||
3040
+ CBS_len(contents) != 0) {
3041
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
3042
+ return false;
3043
+ }
3044
+
3045
+ uint16_t last_named_pake = 0;
3046
+ for (size_t i = 0; CBS_len(&shares) > 0; i++) {
3047
+ uint16_t pake_id;
3048
+ CBS message;
3049
+ if (!CBS_get_u16(&shares, &pake_id) ||
3050
+ !CBS_get_u16_length_prefixed(&shares, &message)) {
3051
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
3052
+ return false;
3053
+ }
3054
+
3055
+ // PAKEs must be sent in strictly monotonic order.
3056
+ if (i > 0 && last_named_pake >= pake_id) {
3057
+ OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
3058
+ return false;
3059
+ }
3060
+ last_named_pake = pake_id;
3061
+
3062
+ // We only support one PAKE.
3063
+ if (pake_id != SSL_PAKE_SPAKE2PLUSV1) {
3064
+ continue;
3065
+ }
3066
+
3067
+ // Save the PAKE share for the handshake logic to pick up later.
3068
+ // TODO(crbug.com/391393404): It would be nice if the callback did not have
3069
+ // to copy this.
3070
+ hs->pake_share = MakeUnique<SSLPAKEShare>();
3071
+ if (hs->pake_share == nullptr ||
3072
+ !hs->pake_share->client_identity.CopyFrom(client_identity) ||
3073
+ !hs->pake_share->server_identity.CopyFrom(server_identity) ||
3074
+ !hs->pake_share->pake_message.CopyFrom(message)) {
3075
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
3076
+ return false;
3077
+ }
3078
+ hs->pake_share->named_pake = pake_id;
3079
+ }
3080
+
3081
+ return true;
3082
+ }
3083
+
3084
+
2899
3085
  // Application-level Protocol Settings
2900
3086
  //
2901
3087
  // https://tools.ietf.org/html/draft-vvv-tls-alps-01
@@ -2917,7 +3103,7 @@ static bool ext_alps_add_clienthello_impl(const SSL_HANDSHAKE *hs, CBB *out,
2917
3103
  ssl_client_hello_type_t type,
2918
3104
  bool use_new_codepoint) {
2919
3105
  const SSL *const ssl = hs->ssl;
2920
- if (// ALPS requires TLS 1.3.
3106
+ if ( // ALPS requires TLS 1.3.
2921
3107
  hs->max_version < TLS1_3_VERSION ||
2922
3108
  // Do not offer ALPS without ALPN.
2923
3109
  hs->config->alpn_client_proto_list.empty() ||
@@ -2971,8 +3157,7 @@ static bool ext_alps_add_clienthello_old(const SSL_HANDSHAKE *hs, CBB *out,
2971
3157
  }
2972
3158
 
2973
3159
  static bool ext_alps_parse_serverhello_impl(SSL_HANDSHAKE *hs,
2974
- uint8_t *out_alert,
2975
- CBS *contents,
3160
+ uint8_t *out_alert, CBS *contents,
2976
3161
  bool use_new_codepoint) {
2977
3162
  SSL *const ssl = hs->ssl;
2978
3163
  if (contents == nullptr) {
@@ -3002,16 +3187,14 @@ static bool ext_alps_parse_serverhello_impl(SSL_HANDSHAKE *hs,
3002
3187
  return true;
3003
3188
  }
3004
3189
 
3005
- static bool ext_alps_parse_serverhello(SSL_HANDSHAKE *hs,
3006
- uint8_t *out_alert,
3190
+ static bool ext_alps_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
3007
3191
  CBS *contents) {
3008
3192
  return ext_alps_parse_serverhello_impl(hs, out_alert, contents,
3009
3193
  /*use_new_codepoint=*/true);
3010
3194
  }
3011
3195
 
3012
3196
  static bool ext_alps_parse_serverhello_old(SSL_HANDSHAKE *hs,
3013
- uint8_t *out_alert,
3014
- CBS *contents) {
3197
+ uint8_t *out_alert, CBS *contents) {
3015
3198
  return ext_alps_parse_serverhello_impl(hs, out_alert, contents,
3016
3199
  /*use_new_codepoint=*/false);
3017
3200
  }
@@ -3027,7 +3210,7 @@ static bool ext_alps_add_serverhello_impl(SSL_HANDSHAKE *hs, CBB *out,
3027
3210
  return true;
3028
3211
  }
3029
3212
 
3030
- if (use_new_codepoint != hs->config->alps_use_new_codepoint) {
3213
+ if (use_new_codepoint != hs->config->alps_use_new_codepoint) {
3031
3214
  // Do nothing, we'll send the other codepoint.
3032
3215
  return true;
3033
3216
  }
@@ -3080,8 +3263,8 @@ bool ssl_negotiate_alps(SSL_HANDSHAKE *hs, uint8_t *out_alert,
3080
3263
  // Check if the client supports ALPS with the selected ALPN.
3081
3264
  bool found = false;
3082
3265
  CBS alps_list;
3083
- if (!CBS_get_u16_length_prefixed(&alps_contents, &alps_list) ||
3084
- CBS_len(&alps_contents) != 0 ||
3266
+ if (!CBS_get_u16_length_prefixed(&alps_contents, &alps_list) || //
3267
+ CBS_len(&alps_contents) != 0 || //
3085
3268
  CBS_len(&alps_list) == 0) {
3086
3269
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
3087
3270
  *out_alert = SSL_AD_DECODE_ERROR;
@@ -3096,7 +3279,7 @@ bool ssl_negotiate_alps(SSL_HANDSHAKE *hs, uint8_t *out_alert,
3096
3279
  *out_alert = SSL_AD_DECODE_ERROR;
3097
3280
  return false;
3098
3281
  }
3099
- if (protocol_name == MakeConstSpan(ssl->s3->alpn_selected)) {
3282
+ if (protocol_name == Span(ssl->s3->alpn_selected)) {
3100
3283
  found = true;
3101
3284
  }
3102
3285
  }
@@ -3116,185 +3299,201 @@ bool ssl_negotiate_alps(SSL_HANDSHAKE *hs, uint8_t *out_alert,
3116
3299
 
3117
3300
  // kExtensions contains all the supported extensions.
3118
3301
  static const struct tls_extension kExtensions[] = {
3119
- {
3120
- TLSEXT_TYPE_server_name,
3121
- ext_sni_add_clienthello,
3122
- ext_sni_parse_serverhello,
3123
- ext_sni_parse_clienthello,
3124
- ext_sni_add_serverhello,
3125
- },
3126
- {
3127
- TLSEXT_TYPE_encrypted_client_hello,
3128
- ext_ech_add_clienthello,
3129
- ext_ech_parse_serverhello,
3130
- ext_ech_parse_clienthello,
3131
- ext_ech_add_serverhello,
3132
- },
3133
- {
3134
- TLSEXT_TYPE_extended_master_secret,
3135
- ext_ems_add_clienthello,
3136
- ext_ems_parse_serverhello,
3137
- ext_ems_parse_clienthello,
3138
- ext_ems_add_serverhello,
3139
- },
3140
- {
3141
- TLSEXT_TYPE_renegotiate,
3142
- ext_ri_add_clienthello,
3143
- ext_ri_parse_serverhello,
3144
- ext_ri_parse_clienthello,
3145
- ext_ri_add_serverhello,
3146
- },
3147
- {
3148
- TLSEXT_TYPE_supported_groups,
3149
- ext_supported_groups_add_clienthello,
3150
- ext_supported_groups_parse_serverhello,
3151
- ext_supported_groups_parse_clienthello,
3152
- dont_add_serverhello,
3153
- },
3154
- {
3155
- TLSEXT_TYPE_ec_point_formats,
3156
- ext_ec_point_add_clienthello,
3157
- ext_ec_point_parse_serverhello,
3158
- ext_ec_point_parse_clienthello,
3159
- ext_ec_point_add_serverhello,
3160
- },
3161
- {
3162
- TLSEXT_TYPE_session_ticket,
3163
- ext_ticket_add_clienthello,
3164
- ext_ticket_parse_serverhello,
3165
- // Ticket extension client parsing is handled in ssl_session.c
3166
- ignore_parse_clienthello,
3167
- ext_ticket_add_serverhello,
3168
- },
3169
- {
3170
- TLSEXT_TYPE_application_layer_protocol_negotiation,
3171
- ext_alpn_add_clienthello,
3172
- ext_alpn_parse_serverhello,
3173
- // ALPN is negotiated late in |ssl_negotiate_alpn|.
3174
- ignore_parse_clienthello,
3175
- ext_alpn_add_serverhello,
3176
- },
3177
- {
3178
- TLSEXT_TYPE_status_request,
3179
- ext_ocsp_add_clienthello,
3180
- ext_ocsp_parse_serverhello,
3181
- ext_ocsp_parse_clienthello,
3182
- ext_ocsp_add_serverhello,
3183
- },
3184
- {
3185
- TLSEXT_TYPE_signature_algorithms,
3186
- ext_sigalgs_add_clienthello,
3187
- forbid_parse_serverhello,
3188
- ext_sigalgs_parse_clienthello,
3189
- dont_add_serverhello,
3190
- },
3191
- {
3192
- TLSEXT_TYPE_next_proto_neg,
3193
- ext_npn_add_clienthello,
3194
- ext_npn_parse_serverhello,
3195
- ext_npn_parse_clienthello,
3196
- ext_npn_add_serverhello,
3197
- },
3198
- {
3199
- TLSEXT_TYPE_certificate_timestamp,
3200
- ext_sct_add_clienthello,
3201
- ext_sct_parse_serverhello,
3202
- ext_sct_parse_clienthello,
3203
- ext_sct_add_serverhello,
3204
- },
3205
- {
3206
- TLSEXT_TYPE_channel_id,
3207
- ext_channel_id_add_clienthello,
3208
- ext_channel_id_parse_serverhello,
3209
- ext_channel_id_parse_clienthello,
3210
- ext_channel_id_add_serverhello,
3211
- },
3212
- {
3213
- TLSEXT_TYPE_srtp,
3214
- ext_srtp_add_clienthello,
3215
- ext_srtp_parse_serverhello,
3216
- ext_srtp_parse_clienthello,
3217
- ext_srtp_add_serverhello,
3218
- },
3219
- {
3220
- TLSEXT_TYPE_key_share,
3221
- ext_key_share_add_clienthello,
3222
- forbid_parse_serverhello,
3223
- ignore_parse_clienthello,
3224
- dont_add_serverhello,
3225
- },
3226
- {
3227
- TLSEXT_TYPE_psk_key_exchange_modes,
3228
- ext_psk_key_exchange_modes_add_clienthello,
3229
- forbid_parse_serverhello,
3230
- ext_psk_key_exchange_modes_parse_clienthello,
3231
- dont_add_serverhello,
3232
- },
3233
- {
3234
- TLSEXT_TYPE_early_data,
3235
- ext_early_data_add_clienthello,
3236
- ext_early_data_parse_serverhello,
3237
- ext_early_data_parse_clienthello,
3238
- ext_early_data_add_serverhello,
3239
- },
3240
- {
3241
- TLSEXT_TYPE_supported_versions,
3242
- ext_supported_versions_add_clienthello,
3243
- forbid_parse_serverhello,
3244
- ignore_parse_clienthello,
3245
- dont_add_serverhello,
3246
- },
3247
- {
3248
- TLSEXT_TYPE_cookie,
3249
- ext_cookie_add_clienthello,
3250
- forbid_parse_serverhello,
3251
- ignore_parse_clienthello,
3252
- dont_add_serverhello,
3253
- },
3254
- {
3255
- TLSEXT_TYPE_quic_transport_parameters,
3256
- ext_quic_transport_params_add_clienthello,
3257
- ext_quic_transport_params_parse_serverhello,
3258
- ext_quic_transport_params_parse_clienthello,
3259
- ext_quic_transport_params_add_serverhello,
3260
- },
3261
- {
3262
- TLSEXT_TYPE_quic_transport_parameters_legacy,
3263
- ext_quic_transport_params_add_clienthello_legacy,
3264
- ext_quic_transport_params_parse_serverhello_legacy,
3265
- ext_quic_transport_params_parse_clienthello_legacy,
3266
- ext_quic_transport_params_add_serverhello_legacy,
3267
- },
3268
- {
3269
- TLSEXT_TYPE_cert_compression,
3270
- cert_compression_add_clienthello,
3271
- cert_compression_parse_serverhello,
3272
- cert_compression_parse_clienthello,
3273
- cert_compression_add_serverhello,
3274
- },
3275
- {
3276
- TLSEXT_TYPE_delegated_credential,
3277
- ext_delegated_credential_add_clienthello,
3278
- forbid_parse_serverhello,
3279
- ext_delegated_credential_parse_clienthello,
3280
- dont_add_serverhello,
3281
- },
3282
- {
3283
- TLSEXT_TYPE_application_settings,
3284
- ext_alps_add_clienthello,
3285
- ext_alps_parse_serverhello,
3286
- // ALPS is negotiated late in |ssl_negotiate_alpn|.
3287
- ignore_parse_clienthello,
3288
- ext_alps_add_serverhello,
3289
- },
3290
- {
3291
- TLSEXT_TYPE_application_settings_old,
3292
- ext_alps_add_clienthello_old,
3293
- ext_alps_parse_serverhello_old,
3294
- // ALPS is negotiated late in |ssl_negotiate_alpn|.
3295
- ignore_parse_clienthello,
3296
- ext_alps_add_serverhello_old,
3297
- },
3302
+ {
3303
+ TLSEXT_TYPE_server_name,
3304
+ ext_sni_add_clienthello,
3305
+ ext_sni_parse_serverhello,
3306
+ ext_sni_parse_clienthello,
3307
+ ext_sni_add_serverhello,
3308
+ },
3309
+ {
3310
+ TLSEXT_TYPE_encrypted_client_hello,
3311
+ ext_ech_add_clienthello,
3312
+ ext_ech_parse_serverhello,
3313
+ ext_ech_parse_clienthello,
3314
+ ext_ech_add_serverhello,
3315
+ },
3316
+ {
3317
+ TLSEXT_TYPE_extended_master_secret,
3318
+ ext_ems_add_clienthello,
3319
+ ext_ems_parse_serverhello,
3320
+ ext_ems_parse_clienthello,
3321
+ ext_ems_add_serverhello,
3322
+ },
3323
+ {
3324
+ TLSEXT_TYPE_renegotiate,
3325
+ ext_ri_add_clienthello,
3326
+ ext_ri_parse_serverhello,
3327
+ ext_ri_parse_clienthello,
3328
+ ext_ri_add_serverhello,
3329
+ },
3330
+ {
3331
+ TLSEXT_TYPE_supported_groups,
3332
+ ext_supported_groups_add_clienthello,
3333
+ ext_supported_groups_parse_serverhello,
3334
+ ext_supported_groups_parse_clienthello,
3335
+ dont_add_serverhello,
3336
+ },
3337
+ {
3338
+ TLSEXT_TYPE_ec_point_formats,
3339
+ ext_ec_point_add_clienthello,
3340
+ ext_ec_point_parse_serverhello,
3341
+ ext_ec_point_parse_clienthello,
3342
+ ext_ec_point_add_serverhello,
3343
+ },
3344
+ {
3345
+ TLSEXT_TYPE_session_ticket,
3346
+ ext_ticket_add_clienthello,
3347
+ ext_ticket_parse_serverhello,
3348
+ // Ticket extension client parsing is handled in ssl_session.c
3349
+ ignore_parse_clienthello,
3350
+ ext_ticket_add_serverhello,
3351
+ },
3352
+ {
3353
+ TLSEXT_TYPE_application_layer_protocol_negotiation,
3354
+ ext_alpn_add_clienthello,
3355
+ ext_alpn_parse_serverhello,
3356
+ // ALPN is negotiated late in |ssl_negotiate_alpn|.
3357
+ ignore_parse_clienthello,
3358
+ ext_alpn_add_serverhello,
3359
+ },
3360
+ {
3361
+ TLSEXT_TYPE_status_request,
3362
+ ext_ocsp_add_clienthello,
3363
+ ext_ocsp_parse_serverhello,
3364
+ ext_ocsp_parse_clienthello,
3365
+ ext_ocsp_add_serverhello,
3366
+ },
3367
+ {
3368
+ TLSEXT_TYPE_signature_algorithms,
3369
+ ext_sigalgs_add_clienthello,
3370
+ forbid_parse_serverhello,
3371
+ ext_sigalgs_parse_clienthello,
3372
+ dont_add_serverhello,
3373
+ },
3374
+ {
3375
+ TLSEXT_TYPE_next_proto_neg,
3376
+ ext_npn_add_clienthello,
3377
+ ext_npn_parse_serverhello,
3378
+ ext_npn_parse_clienthello,
3379
+ ext_npn_add_serverhello,
3380
+ },
3381
+ {
3382
+ TLSEXT_TYPE_certificate_timestamp,
3383
+ ext_sct_add_clienthello,
3384
+ ext_sct_parse_serverhello,
3385
+ ext_sct_parse_clienthello,
3386
+ ext_sct_add_serverhello,
3387
+ },
3388
+ {
3389
+ TLSEXT_TYPE_channel_id,
3390
+ ext_channel_id_add_clienthello,
3391
+ ext_channel_id_parse_serverhello,
3392
+ ext_channel_id_parse_clienthello,
3393
+ ext_channel_id_add_serverhello,
3394
+ },
3395
+ {
3396
+ TLSEXT_TYPE_srtp,
3397
+ ext_srtp_add_clienthello,
3398
+ ext_srtp_parse_serverhello,
3399
+ ext_srtp_parse_clienthello,
3400
+ ext_srtp_add_serverhello,
3401
+ },
3402
+ {
3403
+ TLSEXT_TYPE_key_share,
3404
+ ext_key_share_add_clienthello,
3405
+ forbid_parse_serverhello,
3406
+ ignore_parse_clienthello,
3407
+ dont_add_serverhello,
3408
+ },
3409
+ {
3410
+ TLSEXT_TYPE_psk_key_exchange_modes,
3411
+ ext_psk_key_exchange_modes_add_clienthello,
3412
+ forbid_parse_serverhello,
3413
+ ext_psk_key_exchange_modes_parse_clienthello,
3414
+ dont_add_serverhello,
3415
+ },
3416
+ {
3417
+ TLSEXT_TYPE_early_data,
3418
+ ext_early_data_add_clienthello,
3419
+ ext_early_data_parse_serverhello,
3420
+ ext_early_data_parse_clienthello,
3421
+ ext_early_data_add_serverhello,
3422
+ },
3423
+ {
3424
+ TLSEXT_TYPE_supported_versions,
3425
+ ext_supported_versions_add_clienthello,
3426
+ forbid_parse_serverhello,
3427
+ ignore_parse_clienthello,
3428
+ dont_add_serverhello,
3429
+ },
3430
+ {
3431
+ TLSEXT_TYPE_cookie,
3432
+ ext_cookie_add_clienthello,
3433
+ forbid_parse_serverhello,
3434
+ ignore_parse_clienthello,
3435
+ dont_add_serverhello,
3436
+ },
3437
+ {
3438
+ TLSEXT_TYPE_quic_transport_parameters,
3439
+ ext_quic_transport_params_add_clienthello,
3440
+ ext_quic_transport_params_parse_serverhello,
3441
+ ext_quic_transport_params_parse_clienthello,
3442
+ ext_quic_transport_params_add_serverhello,
3443
+ },
3444
+ {
3445
+ TLSEXT_TYPE_quic_transport_parameters_legacy,
3446
+ ext_quic_transport_params_add_clienthello_legacy,
3447
+ ext_quic_transport_params_parse_serverhello_legacy,
3448
+ ext_quic_transport_params_parse_clienthello_legacy,
3449
+ ext_quic_transport_params_add_serverhello_legacy,
3450
+ },
3451
+ {
3452
+ TLSEXT_TYPE_cert_compression,
3453
+ cert_compression_add_clienthello,
3454
+ cert_compression_parse_serverhello,
3455
+ cert_compression_parse_clienthello,
3456
+ cert_compression_add_serverhello,
3457
+ },
3458
+ {
3459
+ TLSEXT_TYPE_delegated_credential,
3460
+ ext_delegated_credential_add_clienthello,
3461
+ forbid_parse_serverhello,
3462
+ ext_delegated_credential_parse_clienthello,
3463
+ dont_add_serverhello,
3464
+ },
3465
+ {
3466
+ TLSEXT_TYPE_application_settings,
3467
+ ext_alps_add_clienthello,
3468
+ ext_alps_parse_serverhello,
3469
+ // ALPS is negotiated late in |ssl_negotiate_alpn|.
3470
+ ignore_parse_clienthello,
3471
+ ext_alps_add_serverhello,
3472
+ },
3473
+ {
3474
+ TLSEXT_TYPE_application_settings_old,
3475
+ ext_alps_add_clienthello_old,
3476
+ ext_alps_parse_serverhello_old,
3477
+ // ALPS is negotiated late in |ssl_negotiate_alpn|.
3478
+ ignore_parse_clienthello,
3479
+ ext_alps_add_serverhello_old,
3480
+ },
3481
+ {
3482
+ TLSEXT_TYPE_certificate_authorities,
3483
+ ext_certificate_authorities_add_clienthello,
3484
+ forbid_parse_serverhello,
3485
+ ext_certificate_authorities_parse_clienthello,
3486
+ dont_add_serverhello,
3487
+ },
3488
+ {
3489
+ TLSEXT_TYPE_pake,
3490
+ ext_pake_add_clienthello,
3491
+ // This extension is unencrypted and so adding and parsing it from the
3492
+ // ServerHello is handled elsewhere.
3493
+ forbid_parse_serverhello,
3494
+ ext_pake_parse_clienthello,
3495
+ dont_add_serverhello,
3496
+ },
3298
3497
  };
3299
3498
 
3300
3499
  #define kNumExtensions (sizeof(kExtensions) / sizeof(struct tls_extension))
@@ -3316,7 +3515,7 @@ bool ssl_setup_extension_permutation(SSL_HANDSHAKE *hs) {
3316
3515
  uint32_t seeds[kNumExtensions - 1];
3317
3516
  Array<uint8_t> permutation;
3318
3517
  if (!RAND_bytes(reinterpret_cast<uint8_t *>(seeds), sizeof(seeds)) ||
3319
- !permutation.Init(kNumExtensions)) {
3518
+ !permutation.InitForOverwrite(kNumExtensions)) {
3320
3519
  return false;
3321
3520
  }
3322
3521
  for (size_t i = 0; i < kNumExtensions; i++) {
@@ -3527,7 +3726,7 @@ bool ssl_add_clienthello_tlsext(SSL_HANDSHAKE *hs, CBB *out, CBB *out_encoded,
3527
3726
  // bugs. We also apply this padding to ClientHelloOuter, to keep the wire
3528
3727
  // images aligned.
3529
3728
  size_t psk_extension_len = ext_pre_shared_key_clienthello_length(hs, type);
3530
- if (!SSL_is_dtls(ssl) && !ssl->quic_method &&
3729
+ if (!SSL_is_dtls(ssl) && !SSL_is_quic(ssl) &&
3531
3730
  !ssl->s3->used_hello_retry_request) {
3532
3731
  header_len +=
3533
3732
  SSL3_HM_HEADER_LENGTH + 2 + CBB_len(&extensions) + psk_extension_len;
@@ -3609,7 +3808,7 @@ bool ssl_add_serverhello_tlsext(SSL_HANDSHAKE *hs, CBB *out) {
3609
3808
  }
3610
3809
 
3611
3810
  // Discard empty extensions blocks before TLS 1.3.
3612
- if (ssl_protocol_version(ssl) < TLS1_3_VERSION &&
3811
+ if (ssl_protocol_version(ssl) < TLS1_3_VERSION && //
3613
3812
  CBB_len(&extensions) == 0) {
3614
3813
  CBB_discard_child(out);
3615
3814
  }
@@ -3741,7 +3940,7 @@ static bool ssl_scan_serverhello_tlsext(SSL_HANDSHAKE *hs, const CBS *cbs,
3741
3940
  if (!(hs->extensions.sent & (1u << ext_index))) {
3742
3941
  // If the extension was never sent then it is illegal.
3743
3942
  OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
3744
- ERR_add_error_dataf("extension :%u", (unsigned)type);
3943
+ ERR_add_error_dataf("extension %u", (unsigned)type);
3745
3944
  *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
3746
3945
  return false;
3747
3946
  }
@@ -3882,7 +4081,7 @@ static enum ssl_ticket_aead_result_t decrypt_ticket_with_cipher_ctx(
3882
4081
  if (ciphertext.size() >= INT_MAX) {
3883
4082
  return ssl_ticket_aead_ignore_ticket;
3884
4083
  }
3885
- if (!plaintext.Init(ciphertext.size())) {
4084
+ if (!plaintext.InitForOverwrite(ciphertext.size())) {
3886
4085
  return ssl_ticket_aead_error;
3887
4086
  }
3888
4087
  int len1, len2;
@@ -3957,8 +4156,8 @@ static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_ticket_keys(
3957
4156
  }
3958
4157
  if (!HMAC_Init_ex(hmac_ctx.get(), key->hmac_key, sizeof(key->hmac_key),
3959
4158
  tlsext_tick_md(), NULL) ||
3960
- !EVP_DecryptInit_ex(cipher_ctx.get(), cipher, NULL,
3961
- key->aes_key, iv.data())) {
4159
+ !EVP_DecryptInit_ex(cipher_ctx.get(), cipher, NULL, key->aes_key,
4160
+ iv.data())) {
3962
4161
  return ssl_ticket_aead_error;
3963
4162
  }
3964
4163
  }
@@ -3970,7 +4169,7 @@ static enum ssl_ticket_aead_result_t ssl_decrypt_ticket_with_method(
3970
4169
  SSL_HANDSHAKE *hs, Array<uint8_t> *out, bool *out_renew_ticket,
3971
4170
  Span<const uint8_t> ticket) {
3972
4171
  Array<uint8_t> plaintext;
3973
- if (!plaintext.Init(ticket.size())) {
4172
+ if (!plaintext.InitForOverwrite(ticket.size())) {
3974
4173
  return ssl_ticket_aead_error;
3975
4174
  }
3976
4175
 
@@ -4079,9 +4278,8 @@ enum ssl_ticket_aead_result_t ssl_process_ticket(
4079
4278
  // Envoy's tests expect the session to have a session ID that matches the
4080
4279
  // placeholder used by the client. It's unclear whether this is a good idea,
4081
4280
  // but we maintain it for now.
4082
- SHA256(ticket.data(), ticket.size(), session->session_id);
4083
- // Other consumers may expect a non-empty session ID to indicate resumption.
4084
- session->session_id_length = SHA256_DIGEST_LENGTH;
4281
+ session->session_id.ResizeForOverwrite(SHA256_DIGEST_LENGTH);
4282
+ SHA256(ticket.data(), ticket.size(), session->session_id.data());
4085
4283
 
4086
4284
  *out_session = std::move(session);
4087
4285
  return ssl_ticket_aead_success;
@@ -4147,9 +4345,8 @@ bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs,
4147
4345
  }
4148
4346
  }
4149
4347
 
4150
- Span<const uint16_t> sigalgs = cred->sigalgs.empty()
4151
- ? MakeConstSpan(kSignSignatureAlgorithms)
4152
- : cred->sigalgs;
4348
+ Span<const uint16_t> sigalgs =
4349
+ cred->sigalgs.empty() ? Span(kSignSignatureAlgorithms) : cred->sigalgs;
4153
4350
  for (uint16_t sigalg : sigalgs) {
4154
4351
  if (!ssl_pkey_supports_algorithm(ssl, cred->pubkey.get(), sigalg,
4155
4352
  /*is_verify=*/false)) {
@@ -4173,10 +4370,10 @@ bool tls1_verify_channel_id(SSL_HANDSHAKE *hs, const SSLMessage &msg) {
4173
4370
  // extensions, but the only one that can be present is Channel ID.
4174
4371
  uint16_t extension_type;
4175
4372
  CBS channel_id = msg.body, extension;
4176
- if (!CBS_get_u16(&channel_id, &extension_type) ||
4177
- !CBS_get_u16_length_prefixed(&channel_id, &extension) ||
4178
- CBS_len(&channel_id) != 0 ||
4179
- extension_type != TLSEXT_TYPE_channel_id ||
4373
+ if (!CBS_get_u16(&channel_id, &extension_type) || //
4374
+ !CBS_get_u16_length_prefixed(&channel_id, &extension) || //
4375
+ CBS_len(&channel_id) != 0 || //
4376
+ extension_type != TLSEXT_TYPE_channel_id || //
4180
4377
  CBS_len(&extension) != TLSEXT_CHANNEL_ID_SIZE) {
4181
4378
  OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
4182
4379
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
@@ -4257,12 +4454,12 @@ bool tls1_write_channel_id(SSL_HANDSHAKE *hs, CBB *cbb) {
4257
4454
  }
4258
4455
 
4259
4456
  CBB child;
4260
- if (!CBB_add_u16(cbb, TLSEXT_TYPE_channel_id) ||
4261
- !CBB_add_u16_length_prefixed(cbb, &child) ||
4262
- !BN_bn2cbb_padded(&child, 32, x.get()) ||
4263
- !BN_bn2cbb_padded(&child, 32, y.get()) ||
4264
- !BN_bn2cbb_padded(&child, 32, sig->r) ||
4265
- !BN_bn2cbb_padded(&child, 32, sig->s) ||
4457
+ if (!CBB_add_u16(cbb, TLSEXT_TYPE_channel_id) || //
4458
+ !CBB_add_u16_length_prefixed(cbb, &child) || //
4459
+ !BN_bn2cbb_padded(&child, 32, x.get()) || //
4460
+ !BN_bn2cbb_padded(&child, 32, y.get()) || //
4461
+ !BN_bn2cbb_padded(&child, 32, sig->r) || //
4462
+ !BN_bn2cbb_padded(&child, 32, sig->s) || //
4266
4463
  !CBB_flush(cbb)) {
4267
4464
  return false;
4268
4465
  }
@@ -4292,12 +4489,12 @@ bool tls1_channel_id_hash(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len) {
4292
4489
  if (ssl->session != NULL) {
4293
4490
  static const char kResumptionMagic[] = "Resumption";
4294
4491
  SHA256_Update(&ctx, kResumptionMagic, sizeof(kResumptionMagic));
4295
- if (ssl->session->original_handshake_hash_len == 0) {
4492
+ if (ssl->session->original_handshake_hash.empty()) {
4296
4493
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
4297
4494
  return false;
4298
4495
  }
4299
- SHA256_Update(&ctx, ssl->session->original_handshake_hash,
4300
- ssl->session->original_handshake_hash_len);
4496
+ SHA256_Update(&ctx, ssl->session->original_handshake_hash.data(),
4497
+ ssl->session->original_handshake_hash.size());
4301
4498
  }
4302
4499
 
4303
4500
  uint8_t hs_hash[EVP_MAX_MD_SIZE];
@@ -4320,20 +4517,14 @@ bool tls1_record_handshake_hashes_for_channel_id(SSL_HANDSHAKE *hs) {
4320
4517
  return false;
4321
4518
  }
4322
4519
 
4323
- static_assert(
4324
- sizeof(hs->new_session->original_handshake_hash) == EVP_MAX_MD_SIZE,
4325
- "original_handshake_hash is too small");
4326
-
4327
4520
  size_t digest_len;
4328
- if (!hs->transcript.GetHash(hs->new_session->original_handshake_hash,
4521
+ hs->new_session->original_handshake_hash.ResizeForOverwrite(
4522
+ hs->transcript.DigestLen());
4523
+ if (!hs->transcript.GetHash(hs->new_session->original_handshake_hash.data(),
4329
4524
  &digest_len)) {
4330
4525
  return false;
4331
4526
  }
4332
-
4333
- static_assert(EVP_MAX_MD_SIZE <= 0xff,
4334
- "EVP_MAX_MD_SIZE does not fit in uint8_t");
4335
- hs->new_session->original_handshake_hash_len = (uint8_t)digest_len;
4336
-
4527
+ assert(digest_len == hs->new_session->original_handshake_hash.size());
4337
4528
  return true;
4338
4529
  }
4339
4530
 
@@ -4343,16 +4534,14 @@ bool ssl_is_sct_list_valid(const CBS *contents) {
4343
4534
  // of the SCTs may be empty.
4344
4535
  CBS copy = *contents;
4345
4536
  CBS sct_list;
4346
- if (!CBS_get_u16_length_prefixed(&copy, &sct_list) ||
4347
- CBS_len(&copy) != 0 ||
4537
+ if (!CBS_get_u16_length_prefixed(&copy, &sct_list) || CBS_len(&copy) != 0 ||
4348
4538
  CBS_len(&sct_list) == 0) {
4349
4539
  return false;
4350
4540
  }
4351
4541
 
4352
4542
  while (CBS_len(&sct_list) > 0) {
4353
4543
  CBS sct;
4354
- if (!CBS_get_u16_length_prefixed(&sct_list, &sct) ||
4355
- CBS_len(&sct) == 0) {
4544
+ if (!CBS_get_u16_length_prefixed(&sct_list, &sct) || CBS_len(&sct) == 0) {
4356
4545
  return false;
4357
4546
  }
4358
4547
  }
@@ -4364,6 +4553,19 @@ BSSL_NAMESPACE_END
4364
4553
 
4365
4554
  using namespace bssl;
4366
4555
 
4556
+ int SSL_parse_client_hello(const SSL *ssl, SSL_CLIENT_HELLO *out,
4557
+ const uint8_t *in, size_t len) {
4558
+ CBS cbs = Span(in, len);
4559
+ if (!ssl_parse_client_hello_with_trailing_data(ssl, &cbs, out)) {
4560
+ return 0;
4561
+ }
4562
+ if (CBS_len(&cbs) != 0) {
4563
+ OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
4564
+ return 0;
4565
+ }
4566
+ return 1;
4567
+ }
4568
+
4367
4569
  int SSL_early_callback_ctx_extension_get(const SSL_CLIENT_HELLO *client_hello,
4368
4570
  uint16_t extension_type,
4369
4571
  const uint8_t **out_data,