grpc 1.53.2 → 1.54.0

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

Potentially problematic release.


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

Files changed (693) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +78 -66
  3. data/include/grpc/event_engine/event_engine.h +30 -14
  4. data/include/grpc/grpc_security.h +4 -0
  5. data/include/grpc/support/port_platform.h +4 -4
  6. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +11 -0
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +6 -0
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -11
  9. data/src/core/ext/filters/client_channel/backup_poller.h +0 -3
  10. data/src/core/ext/filters/client_channel/client_channel.cc +848 -813
  11. data/src/core/ext/filters/client_channel/client_channel.h +131 -173
  12. data/src/core/ext/filters/client_channel/client_channel_internal.h +114 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +4 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +6 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +17 -18
  16. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +134 -151
  17. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2 -16
  18. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +14 -10
  19. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +68 -30
  20. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -5
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +2 -2
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +30 -38
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +4 -4
  26. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -26
  27. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -179
  28. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -2
  29. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -2
  30. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +4 -2
  31. data/src/core/ext/filters/client_channel/retry_filter.cc +95 -102
  32. data/src/core/ext/filters/client_channel/subchannel.cc +2 -4
  33. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +26 -27
  34. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -5
  35. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -3
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -12
  37. data/src/core/ext/filters/http/message_compress/compression_filter.cc +27 -11
  38. data/src/core/ext/filters/message_size/message_size_filter.cc +141 -224
  39. data/src/core/ext/filters/message_size/message_size_filter.h +48 -3
  40. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -6
  41. data/src/core/ext/gcp/metadata_query.cc +142 -0
  42. data/src/core/ext/gcp/metadata_query.h +82 -0
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +70 -55
  44. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +8 -12
  45. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -5
  46. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +116 -58
  47. data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -2
  48. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  50. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +222 -118
  51. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +113 -295
  52. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -2
  53. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +0 -2
  54. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +277 -451
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -14
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -9
  58. data/src/core/ext/transport/chttp2/transport/internal.h +16 -3
  59. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  60. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -5
  61. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -14
  62. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +5 -3
  63. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +22 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +5 -3
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +22 -0
  66. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +23 -5
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +94 -3
  68. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -2
  69. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -0
  70. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +6 -3
  71. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  72. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +24 -6
  73. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +111 -12
  74. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +9 -7
  75. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +27 -9
  76. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +0 -1
  77. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +11 -7
  78. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +56 -12
  79. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +5 -3
  80. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +24 -0
  81. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +5 -3
  82. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  83. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +13 -2
  84. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +49 -0
  85. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +24 -9
  86. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +66 -12
  87. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +139 -136
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +31 -15
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +12 -9
  92. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +15 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +54 -45
  94. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +135 -119
  95. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +100 -97
  97. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +15 -18
  98. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +272 -264
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +117 -117
  100. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +5 -5
  101. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +5 -5
  102. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +5 -5
  103. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +12 -9
  104. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -0
  105. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -2
  106. data/src/core/ext/xds/xds_client_stats.cc +29 -15
  107. data/src/core/ext/xds/xds_client_stats.h +24 -20
  108. data/src/core/ext/xds/xds_endpoint.cc +5 -2
  109. data/src/core/ext/xds/xds_endpoint.h +9 -1
  110. data/src/core/ext/xds/xds_http_rbac_filter.cc +1 -1
  111. data/src/core/ext/xds/xds_lb_policy_registry.cc +13 -0
  112. data/src/core/ext/xds/xds_transport_grpc.cc +1 -1
  113. data/src/core/lib/channel/call_finalization.h +1 -1
  114. data/src/core/lib/channel/call_tracer.cc +51 -0
  115. data/src/core/lib/channel/call_tracer.h +101 -38
  116. data/src/core/lib/channel/connected_channel.cc +483 -1050
  117. data/src/core/lib/channel/context.h +8 -1
  118. data/src/core/lib/channel/promise_based_filter.cc +106 -42
  119. data/src/core/lib/channel/promise_based_filter.h +27 -13
  120. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  121. data/src/core/lib/config/config_vars.cc +151 -0
  122. data/src/core/lib/config/config_vars.h +127 -0
  123. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  124. data/src/core/lib/config/load_config.cc +66 -0
  125. data/src/core/lib/config/load_config.h +49 -0
  126. data/src/core/lib/debug/trace.cc +5 -6
  127. data/src/core/lib/debug/trace.h +0 -5
  128. data/src/core/lib/event_engine/event_engine.cc +37 -2
  129. data/src/core/lib/event_engine/handle_containers.h +7 -22
  130. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  131. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +0 -4
  132. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -9
  133. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +48 -15
  134. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +8 -8
  135. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -5
  136. data/src/core/lib/event_engine/posix_engine/posix_engine.h +0 -1
  137. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +6 -32
  138. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +0 -3
  139. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +27 -18
  140. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +0 -3
  141. data/src/core/lib/event_engine/resolved_address.cc +2 -1
  142. data/src/core/lib/event_engine/windows/win_socket.cc +0 -1
  143. data/src/core/lib/event_engine/windows/windows_endpoint.cc +129 -82
  144. data/src/core/lib/event_engine/windows/windows_endpoint.h +21 -5
  145. data/src/core/lib/event_engine/windows/windows_engine.cc +39 -18
  146. data/src/core/lib/event_engine/windows/windows_engine.h +2 -1
  147. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  148. data/src/core/lib/event_engine/windows/windows_listener.h +155 -0
  149. data/src/core/lib/experiments/config.cc +3 -10
  150. data/src/core/lib/experiments/experiments.cc +7 -0
  151. data/src/core/lib/experiments/experiments.h +9 -1
  152. data/src/core/lib/gpr/log.cc +15 -28
  153. data/src/core/lib/gprpp/fork.cc +8 -14
  154. data/src/core/lib/gprpp/orphanable.h +4 -3
  155. data/src/core/lib/gprpp/per_cpu.h +9 -3
  156. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +49 -37
  157. data/src/core/lib/gprpp/ref_counted.h +33 -34
  158. data/src/core/lib/gprpp/thd.h +16 -0
  159. data/src/core/lib/gprpp/time.cc +1 -0
  160. data/src/core/lib/gprpp/time.h +4 -4
  161. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +2 -2
  162. data/src/core/lib/iomgr/call_combiner.h +2 -2
  163. data/src/core/lib/iomgr/endpoint_cfstream.cc +4 -2
  164. data/src/core/lib/iomgr/ev_posix.cc +13 -53
  165. data/src/core/lib/iomgr/ev_posix.h +0 -3
  166. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +103 -76
  167. data/src/core/lib/iomgr/iomgr.cc +4 -8
  168. data/src/core/lib/iomgr/iomgr_windows.cc +8 -2
  169. data/src/core/lib/iomgr/pollset_set_windows.cc +9 -9
  170. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  171. data/src/core/lib/iomgr/socket_utils_common_posix.cc +16 -3
  172. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -2
  173. data/src/core/lib/iomgr/tcp_posix.cc +0 -1
  174. data/src/core/lib/iomgr/tcp_server_posix.cc +19 -55
  175. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -12
  176. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  177. data/src/core/lib/iomgr/tcp_server_windows.cc +176 -9
  178. data/src/core/lib/iomgr/tcp_windows.cc +12 -8
  179. data/src/core/lib/load_balancing/lb_policy.cc +9 -13
  180. data/src/core/lib/load_balancing/lb_policy.h +4 -2
  181. data/src/core/lib/promise/activity.cc +22 -6
  182. data/src/core/lib/promise/activity.h +61 -24
  183. data/src/core/lib/promise/cancel_callback.h +77 -0
  184. data/src/core/lib/promise/detail/basic_seq.h +1 -1
  185. data/src/core/lib/promise/detail/promise_factory.h +4 -0
  186. data/src/core/lib/promise/for_each.h +176 -0
  187. data/src/core/lib/promise/if.h +9 -0
  188. data/src/core/lib/promise/interceptor_list.h +23 -2
  189. data/src/core/lib/promise/latch.h +89 -3
  190. data/src/core/lib/promise/loop.h +13 -9
  191. data/src/core/lib/promise/map.h +7 -0
  192. data/src/core/lib/promise/party.cc +286 -0
  193. data/src/core/lib/promise/party.h +499 -0
  194. data/src/core/lib/promise/pipe.h +197 -57
  195. data/src/core/lib/promise/poll.h +48 -0
  196. data/src/core/lib/promise/promise.h +2 -2
  197. data/src/core/lib/resource_quota/arena.cc +19 -3
  198. data/src/core/lib/resource_quota/arena.h +119 -5
  199. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  200. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +12 -35
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  202. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +0 -59
  203. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -5
  204. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  205. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -0
  206. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +2 -0
  207. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +5 -9
  208. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -25
  209. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +12 -0
  210. data/src/core/lib/security/transport/secure_endpoint.cc +4 -2
  211. data/src/core/lib/security/transport/server_auth_filter.cc +20 -2
  212. data/src/core/lib/slice/slice.cc +1 -1
  213. data/src/core/lib/surface/builtins.cc +2 -0
  214. data/src/core/lib/surface/call.cc +926 -1024
  215. data/src/core/lib/surface/call.h +10 -0
  216. data/src/core/lib/surface/lame_client.cc +1 -0
  217. data/src/core/lib/surface/validate_metadata.cc +42 -43
  218. data/src/core/lib/surface/validate_metadata.h +0 -9
  219. data/src/core/lib/surface/version.cc +2 -2
  220. data/src/core/lib/transport/batch_builder.cc +179 -0
  221. data/src/core/lib/transport/batch_builder.h +468 -0
  222. data/src/core/lib/transport/bdp_estimator.cc +7 -7
  223. data/src/core/lib/transport/bdp_estimator.h +10 -6
  224. data/src/core/lib/transport/custom_metadata.h +30 -0
  225. data/src/core/lib/transport/metadata_batch.cc +5 -2
  226. data/src/core/lib/transport/metadata_batch.h +17 -113
  227. data/src/core/lib/transport/parsed_metadata.h +6 -16
  228. data/src/core/lib/transport/timeout_encoding.cc +6 -1
  229. data/src/core/lib/transport/transport.cc +30 -2
  230. data/src/core/lib/transport/transport.h +70 -14
  231. data/src/core/lib/transport/transport_impl.h +7 -0
  232. data/src/core/lib/transport/transport_op_string.cc +52 -42
  233. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -2
  234. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -0
  235. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +21 -4
  236. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +5 -0
  237. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  238. data/src/core/tsi/ssl_transport_security.cc +4 -2
  239. data/src/ruby/lib/grpc/version.rb +1 -1
  240. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  241. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  242. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  243. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  244. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  245. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  246. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  247. data/{src/core/lib/gprpp/global_config_custom.h → third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc} +11 -14
  248. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  249. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  250. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  251. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  252. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  253. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  254. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  255. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  256. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  257. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  258. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  259. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  260. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  261. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  262. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  263. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  264. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  265. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +12 -8
  266. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  269. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  270. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  272. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  273. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  274. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +174 -194
  275. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  276. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  277. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  278. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  279. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  280. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  281. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  282. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  283. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  284. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  285. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  286. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  287. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +133 -88
  288. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +791 -791
  290. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +526 -526
  291. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  292. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  293. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  294. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  295. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  296. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +11 -7
  297. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +4 -4
  298. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  299. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -4
  300. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +17 -10
  301. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -3
  302. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  303. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  304. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  305. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +9 -5
  306. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  307. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  308. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  309. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  310. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  311. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  312. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  313. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  314. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  315. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  316. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  317. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  318. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  319. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  320. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  321. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +6 -12
  323. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -11
  324. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  325. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  326. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  327. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  328. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  329. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  330. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  331. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  332. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  333. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  334. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  335. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  336. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  337. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  338. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +16 -27
  339. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  340. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  341. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  342. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  344. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  345. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +39 -16
  346. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  347. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  348. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  349. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +214 -99
  350. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +21 -5
  351. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  352. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  353. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  354. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  355. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  356. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  358. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  359. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  360. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  361. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  362. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  363. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +5 -5
  364. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  365. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  366. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  367. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  368. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  369. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  370. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +35 -27
  377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  400. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  402. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +21 -6
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  407. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +25 -25
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +91 -17
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +5 -5
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +34 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +54 -23
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +44 -60
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +60 -53
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +48 -36
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +2 -7
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -3
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +0 -1
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +8 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +42 -14
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -15
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +2 -4
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +71 -43
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +14 -16
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -4
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -45
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +22 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +63 -52
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +107 -62
  443. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +58 -31
  444. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +523 -422
  446. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  449. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  450. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  451. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  452. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +19 -6
  453. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +32 -14
  454. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  455. data/third_party/boringssl-with-bazel/src/crypto/internal.h +373 -18
  456. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +61 -0
  457. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +205 -0
  458. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  459. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  460. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  461. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +13 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  463. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  464. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +629 -613
  465. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  466. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  467. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  468. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  469. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  470. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  472. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  473. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  474. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  475. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  476. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  477. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  478. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  479. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  480. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +3 -4
  481. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  482. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  483. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  484. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  485. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +66 -34
  486. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +190 -77
  487. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +81 -284
  488. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +109 -42
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +54 -55
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +284 -331
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +67 -50
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +153 -150
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +786 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +227 -252
  504. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  505. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  506. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +230 -224
  507. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  508. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  509. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  510. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  511. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +534 -618
  512. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  513. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +116 -182
  514. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  515. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +181 -202
  516. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  517. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  518. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1865 -2050
  519. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +433 -462
  520. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  521. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +267 -263
  522. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  523. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  524. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  525. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  526. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  527. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +326 -415
  528. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  529. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  530. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  531. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  532. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  533. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  534. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  535. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  536. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  537. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  538. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  539. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  540. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +78 -170
  541. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  543. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  544. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  545. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  546. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +309 -346
  547. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +341 -365
  548. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  549. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  550. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  551. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  552. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  553. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +122 -125
  554. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  555. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +247 -253
  556. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  557. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  558. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  559. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  560. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +143 -136
  561. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +664 -707
  562. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +83 -75
  563. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1062 -1146
  564. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +8 -4
  565. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  566. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +211 -187
  567. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  568. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -14
  569. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +21 -2
  570. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  571. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  572. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  573. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  574. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  575. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  576. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  577. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  578. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  579. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  580. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  581. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  582. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  583. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  584. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +22 -30
  585. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  586. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  587. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +41 -16
  588. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  589. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  590. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +13 -0
  591. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  592. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -15
  593. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  595. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +7 -4
  596. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  597. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +13 -21
  598. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +139 -75
  599. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  600. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +384 -286
  601. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +5 -6
  602. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  603. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +18 -7
  604. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +49 -23
  605. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  606. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1592 -1074
  607. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +202 -205
  608. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  609. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  610. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  611. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  612. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  613. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +34 -20
  614. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +65 -34
  615. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  616. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  617. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +32 -28
  618. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  619. data/third_party/boringssl-with-bazel/src/ssl/internal.h +130 -98
  620. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +27 -11
  621. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  622. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  623. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  624. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +39 -65
  625. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +30 -33
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +77 -100
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +120 -107
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +164 -30
  631. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +150 -60
  632. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +22 -11
  633. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  634. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  635. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +5 -43
  636. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  637. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +2 -2
  638. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +22 -34
  639. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  640. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  641. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  642. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  643. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  644. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  645. metadata +103 -70
  646. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +0 -39
  647. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +0 -30
  648. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -29
  649. data/src/core/lib/gprpp/global_config.h +0 -93
  650. data/src/core/lib/gprpp/global_config_env.cc +0 -140
  651. data/src/core/lib/gprpp/global_config_env.h +0 -133
  652. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  653. data/src/core/lib/promise/intra_activity_waiter.h +0 -55
  654. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  655. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -29
  656. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  657. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +0 -83
  658. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  659. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  660. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  661. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +0 -38
  662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  663. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  664. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  665. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  667. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  668. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  669. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  670. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  671. /data/src/core/lib/gpr/{log_android.cc → android/log.cc} +0 -0
  672. /data/src/core/lib/gpr/{cpu_iphone.cc → iphone/cpu.cc} +0 -0
  673. /data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +0 -0
  674. /data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +0 -0
  675. /data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +0 -0
  676. /data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +0 -0
  677. /data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +0 -0
  678. /data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +0 -0
  679. /data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +0 -0
  680. /data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +0 -0
  681. /data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +0 -0
  682. /data/src/core/lib/gpr/{cpu_windows.cc → windows/cpu.cc} +0 -0
  683. /data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +0 -0
  684. /data/src/core/lib/gpr/{string_windows.cc → windows/string.cc} +0 -0
  685. /data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +0 -0
  686. /data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +0 -0
  687. /data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +0 -0
  688. /data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +0 -0
  689. /data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +0 -0
  690. /data/src/core/lib/gprpp/{env_posix.cc → posix/env.cc} +0 -0
  691. /data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +0 -0
  692. /data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +0 -0
  693. /data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +0 -0
@@ -195,7 +195,6 @@ template <typename T, typename... Args>
195
195
  T *New(Args &&... args) {
196
196
  void *t = OPENSSL_malloc(sizeof(T));
197
197
  if (t == nullptr) {
198
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
199
198
  return nullptr;
200
199
  }
201
200
  return new (t) T(std::forward<Args>(args)...);
@@ -216,7 +215,7 @@ void Delete(T *t) {
216
215
  // may be C structs which require a |BORINGSSL_MAKE_DELETER| registration.
217
216
  namespace internal {
218
217
  template <typename T>
219
- struct DeleterImpl<T, typename std::enable_if<T::kAllowUniquePtr>::type> {
218
+ struct DeleterImpl<T, std::enable_if_t<T::kAllowUniquePtr>> {
220
219
  static void Free(T *t) { Delete(t); }
221
220
  };
222
221
  } // namespace internal
@@ -245,14 +244,6 @@ UniquePtr<T> MakeUnique(Args &&... args) {
245
244
  { abort(); }
246
245
  #endif
247
246
 
248
- // CONSTEXPR_ARRAY works around a VS 2015 bug where ranged for loops don't work
249
- // on constexpr arrays.
250
- #if defined(_MSC_VER) && !defined(__clang__) && _MSC_VER < 1910
251
- #define CONSTEXPR_ARRAY const
252
- #else
253
- #define CONSTEXPR_ARRAY constexpr
254
- #endif
255
-
256
247
  // Array<T> is an owning array of elements of |T|.
257
248
  template <typename T>
258
249
  class Array {
@@ -323,7 +314,6 @@ class Array {
323
314
  }
324
315
  data_ = reinterpret_cast<T *>(OPENSSL_malloc(new_size * sizeof(T)));
325
316
  if (data_ == nullptr) {
326
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
327
317
  return false;
328
318
  }
329
319
  size_ = new_size;
@@ -668,10 +658,15 @@ bool ssl_cipher_requires_server_key_exchange(const SSL_CIPHER *cipher);
668
658
  size_t ssl_cipher_get_record_split_len(const SSL_CIPHER *cipher);
669
659
 
670
660
  // ssl_choose_tls13_cipher returns an |SSL_CIPHER| corresponding with the best
671
- // available from |cipher_suites| compatible with |version| and |group_id|. It
672
- // returns NULL if there isn't a compatible cipher.
661
+ // available from |cipher_suites| compatible with |version|, |group_id|, and
662
+ // |only_fips|. It returns NULL if there isn't a compatible cipher.
673
663
  const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
674
- uint16_t group_id);
664
+ uint16_t group_id, bool only_fips);
665
+
666
+ // ssl_tls13_cipher_meets_policy returns true if |cipher_id| is acceptable given
667
+ // |only_fips|. (For now there's only a single policy and so the policy argument
668
+ // is just a bool.)
669
+ bool ssl_tls13_cipher_meets_policy(uint16_t cipher_id, bool only_fips);
675
670
 
676
671
 
677
672
  // Transcript layer.
@@ -832,15 +827,14 @@ class SSLAEADContext {
832
827
  // to the plaintext in |in| and returns true. Otherwise, it returns
833
828
  // false. The output will always be |ExplicitNonceLen| bytes ahead of |in|.
834
829
  bool Open(Span<uint8_t> *out, uint8_t type, uint16_t record_version,
835
- const uint8_t seqnum[8], Span<const uint8_t> header,
836
- Span<uint8_t> in);
830
+ uint64_t seqnum, Span<const uint8_t> header, Span<uint8_t> in);
837
831
 
838
832
  // Seal encrypts and authenticates |in_len| bytes from |in| and writes the
839
833
  // result to |out|. It returns true on success and false on error.
840
834
  //
841
835
  // If |in| and |out| alias then |out| + |ExplicitNonceLen| must be == |in|.
842
836
  bool Seal(uint8_t *out, size_t *out_len, size_t max_out, uint8_t type,
843
- uint16_t record_version, const uint8_t seqnum[8],
837
+ uint16_t record_version, uint64_t seqnum,
844
838
  Span<const uint8_t> header, const uint8_t *in, size_t in_len);
845
839
 
846
840
  // SealScatter encrypts and authenticates |in_len| bytes from |in| and splits
@@ -859,10 +853,9 @@ class SSLAEADContext {
859
853
  // If |in| and |out| alias then |out| must be == |in|. Other arguments may not
860
854
  // alias anything.
861
855
  bool SealScatter(uint8_t *out_prefix, uint8_t *out, uint8_t *out_suffix,
862
- uint8_t type, uint16_t record_version,
863
- const uint8_t seqnum[8], Span<const uint8_t> header,
864
- const uint8_t *in, size_t in_len, const uint8_t *extra_in,
865
- size_t extra_in_len);
856
+ uint8_t type, uint16_t record_version, uint64_t seqnum,
857
+ Span<const uint8_t> header, const uint8_t *in, size_t in_len,
858
+ const uint8_t *extra_in, size_t extra_in_len);
866
859
 
867
860
  bool GetIV(const uint8_t **out_iv, size_t *out_iv_len) const;
868
861
 
@@ -871,8 +864,7 @@ class SSLAEADContext {
871
864
  // necessary.
872
865
  Span<const uint8_t> GetAdditionalData(uint8_t storage[13], uint8_t type,
873
866
  uint16_t record_version,
874
- const uint8_t seqnum[8],
875
- size_t plaintext_len,
867
+ uint64_t seqnum, size_t plaintext_len,
876
868
  Span<const uint8_t> header);
877
869
 
878
870
  const SSL_CIPHER *cipher_;
@@ -919,10 +911,6 @@ struct DTLS1_BITMAP {
919
911
 
920
912
  // Record layer.
921
913
 
922
- // ssl_record_sequence_update increments the sequence number in |seq|. It
923
- // returns true on success and false on wraparound.
924
- bool ssl_record_sequence_update(uint8_t *seq, size_t seq_len);
925
-
926
914
  // ssl_record_prefix_len returns the length of the prefix before the ciphertext
927
915
  // of a record for |ssl|.
928
916
  //
@@ -1063,7 +1051,15 @@ bool ssl_public_key_verify(SSL *ssl, Span<const uint8_t> signature,
1063
1051
 
1064
1052
  // Key shares.
1065
1053
 
1066
- // SSLKeyShare abstracts over Diffie-Hellman-like key exchanges.
1054
+ // SSLKeyShare abstracts over KEM-like constructions, for use with TLS 1.2 ECDHE
1055
+ // cipher suites and the TLS 1.3 key_share extension.
1056
+ //
1057
+ // TODO(davidben): This class is named SSLKeyShare after the TLS 1.3 key_share
1058
+ // extension, but it really implements a KEM abstraction. Additionally, we use
1059
+ // the same type for Encap, which is a one-off, stateless operation, as Generate
1060
+ // and Decap. Slightly tidier would be for Generate to return a new SSLKEMKey
1061
+ // (or we introduce EVP_KEM and EVP_KEM_KEY), with a Decap method, and for Encap
1062
+ // to be static function.
1067
1063
  class SSLKeyShare {
1068
1064
  public:
1069
1065
  virtual ~SSLKeyShare() {}
@@ -1074,40 +1070,29 @@ class SSLKeyShare {
1074
1070
  // nullptr on error.
1075
1071
  static UniquePtr<SSLKeyShare> Create(uint16_t group_id);
1076
1072
 
1077
- // Create deserializes an SSLKeyShare instance previously serialized by
1078
- // |Serialize|.
1079
- static UniquePtr<SSLKeyShare> Create(CBS *in);
1080
-
1081
- // Serializes writes the group ID and private key, in a format that can be
1082
- // read by |Create|.
1083
- bool Serialize(CBB *out);
1084
-
1085
1073
  // GroupID returns the group ID.
1086
1074
  virtual uint16_t GroupID() const PURE_VIRTUAL;
1087
1075
 
1088
- // Offer generates a keypair and writes the public value to
1089
- // |out_public_key|. It returns true on success and false on error.
1090
- virtual bool Offer(CBB *out_public_key) PURE_VIRTUAL;
1091
-
1092
- // Accept performs a key exchange against the |peer_key| generated by |Offer|.
1093
- // On success, it returns true, writes the public value to |out_public_key|,
1094
- // and sets |*out_secret| to the shared secret. On failure, it returns false
1095
- // and sets |*out_alert| to an alert to send to the peer.
1096
- //
1097
- // The default implementation calls |Offer| and then |Finish|, assuming a key
1098
- // exchange protocol where the peers are symmetric.
1099
- virtual bool Accept(CBB *out_public_key, Array<uint8_t> *out_secret,
1100
- uint8_t *out_alert, Span<const uint8_t> peer_key);
1101
-
1102
- // Finish performs a key exchange against the |peer_key| generated by
1103
- // |Accept|. On success, it returns true and sets |*out_secret| to the shared
1104
- // secret. On failure, it returns false and sets |*out_alert| to an alert to
1105
- // send to the peer.
1106
- virtual bool Finish(Array<uint8_t> *out_secret, uint8_t *out_alert,
1107
- Span<const uint8_t> peer_key) PURE_VIRTUAL;
1076
+ // Generate generates a keypair and writes the public key to |out_public_key|.
1077
+ // It returns true on success and false on error.
1078
+ virtual bool Generate(CBB *out_public_key) PURE_VIRTUAL;
1079
+
1080
+ // Encap generates an ephemeral, symmetric secret and encapsulates it with
1081
+ // |peer_key|. On success, it returns true, writes the encapsulated secret to
1082
+ // |out_ciphertext|, and sets |*out_secret| to the shared secret. On failure,
1083
+ // it returns false and sets |*out_alert| to an alert to send to the peer.
1084
+ virtual bool Encap(CBB *out_ciphertext, Array<uint8_t> *out_secret,
1085
+ uint8_t *out_alert,
1086
+ Span<const uint8_t> peer_key) PURE_VIRTUAL;
1087
+
1088
+ // Decap decapsulates the symmetric secret in |ciphertext|. On success, it
1089
+ // returns true and sets |*out_secret| to the shared secret. On failure, it
1090
+ // returns false and sets |*out_alert| to an alert to send to the peer.
1091
+ virtual bool Decap(Array<uint8_t> *out_secret, uint8_t *out_alert,
1092
+ Span<const uint8_t> ciphertext) PURE_VIRTUAL;
1108
1093
 
1109
1094
  // SerializePrivateKey writes the private key to |out|, returning true if
1110
- // successful and false otherwise. It should be called after |Offer|.
1095
+ // successful and false otherwise. It should be called after |Generate|.
1111
1096
  virtual bool SerializePrivateKey(CBB *out) { return false; }
1112
1097
 
1113
1098
  // DeserializePrivateKey initializes the state of the key exchange from |in|,
@@ -1118,7 +1103,7 @@ class SSLKeyShare {
1118
1103
  struct NamedGroup {
1119
1104
  int nid;
1120
1105
  uint16_t group_id;
1121
- const char name[8], alias[11];
1106
+ const char name[12], alias[12];
1122
1107
  };
1123
1108
 
1124
1109
  // NamedGroups returns all supported groups.
@@ -1184,12 +1169,10 @@ struct DTLS_OUTGOING_MESSAGE {
1184
1169
  DTLS_OUTGOING_MESSAGE() {}
1185
1170
  DTLS_OUTGOING_MESSAGE(const DTLS_OUTGOING_MESSAGE &) = delete;
1186
1171
  DTLS_OUTGOING_MESSAGE &operator=(const DTLS_OUTGOING_MESSAGE &) = delete;
1187
- ~DTLS_OUTGOING_MESSAGE() { Clear(); }
1188
1172
 
1189
1173
  void Clear();
1190
1174
 
1191
- uint8_t *data = nullptr;
1192
- uint32_t len = 0;
1175
+ Array<uint8_t> data;
1193
1176
  uint16_t epoch = 0;
1194
1177
  bool is_ccs = false;
1195
1178
  };
@@ -1325,7 +1308,8 @@ enum ssl_key_usage_t {
1325
1308
  // ssl_cert_check_key_usage parses the DER-encoded, X.509 certificate in |in|
1326
1309
  // and returns true if doesn't specify a key usage or, if it does, if it
1327
1310
  // includes |bit|. Otherwise it pushes to the error queue and returns false.
1328
- bool ssl_cert_check_key_usage(const CBS *in, enum ssl_key_usage_t bit);
1311
+ OPENSSL_EXPORT bool ssl_cert_check_key_usage(const CBS *in,
1312
+ enum ssl_key_usage_t bit);
1329
1313
 
1330
1314
  // ssl_cert_parse_pubkey extracts the public key from the DER-encoded, X.509
1331
1315
  // certificate in |in|. It returns an allocated |EVP_PKEY| or else returns
@@ -1498,17 +1482,19 @@ enum ssl_client_hello_type_t {
1498
1482
  // ClientHelloOuter |client_hello_outer|. If successful, it writes the recovered
1499
1483
  // ClientHelloInner to |out_client_hello_inner|. It returns true on success and
1500
1484
  // false on failure.
1485
+ //
1486
+ // This function is exported for fuzzing.
1501
1487
  OPENSSL_EXPORT bool ssl_decode_client_hello_inner(
1502
1488
  SSL *ssl, uint8_t *out_alert, Array<uint8_t> *out_client_hello_inner,
1503
1489
  Span<const uint8_t> encoded_client_hello_inner,
1504
1490
  const SSL_CLIENT_HELLO *client_hello_outer);
1505
1491
 
1506
- // ssl_client_hello_decrypt attempts to decrypt the |payload| and writes the
1507
- // result to |*out|. |payload| must point into |client_hello_outer|. It returns
1508
- // true on success and false on error. On error, it sets |*out_is_decrypt_error|
1509
- // to whether the failure was due to a bad ciphertext.
1510
- bool ssl_client_hello_decrypt(EVP_HPKE_CTX *hpke_ctx, Array<uint8_t> *out,
1511
- bool *out_is_decrypt_error,
1492
+ // ssl_client_hello_decrypt attempts to decrypt and decode the |payload|. It
1493
+ // writes the result to |*out|. |payload| must point into |client_hello_outer|.
1494
+ // It returns true on success and false on error. On error, it sets
1495
+ // |*out_is_decrypt_error| to whether the failure was due to a bad ciphertext.
1496
+ bool ssl_client_hello_decrypt(SSL_HANDSHAKE *hs, uint8_t *out_alert,
1497
+ bool *out_is_decrypt_error, Array<uint8_t> *out,
1512
1498
  const SSL_CLIENT_HELLO *client_hello_outer,
1513
1499
  Span<const uint8_t> payload);
1514
1500
 
@@ -1698,10 +1684,11 @@ enum handback_t {
1698
1684
  struct SSL_HANDSHAKE_HINTS {
1699
1685
  static constexpr bool kAllowUniquePtr = true;
1700
1686
 
1701
- Array<uint8_t> server_random;
1687
+ Array<uint8_t> server_random_tls12;
1688
+ Array<uint8_t> server_random_tls13;
1702
1689
 
1703
1690
  uint16_t key_share_group_id = 0;
1704
- Array<uint8_t> key_share_public_key;
1691
+ Array<uint8_t> key_share_ciphertext;
1705
1692
  Array<uint8_t> key_share_secret;
1706
1693
 
1707
1694
  uint16_t signature_algorithm = 0;
@@ -1715,6 +1702,14 @@ struct SSL_HANDSHAKE_HINTS {
1715
1702
  uint16_t cert_compression_alg_id = 0;
1716
1703
  Array<uint8_t> cert_compression_input;
1717
1704
  Array<uint8_t> cert_compression_output;
1705
+
1706
+ uint16_t ecdhe_group_id = 0;
1707
+ Array<uint8_t> ecdhe_public_key;
1708
+ Array<uint8_t> ecdhe_private_key;
1709
+
1710
+ Array<uint8_t> decrypted_ticket;
1711
+ bool renew_ticket = false;
1712
+ bool ignore_ticket = false;
1718
1713
  };
1719
1714
 
1720
1715
  struct SSL_HANDSHAKE {
@@ -1829,9 +1824,15 @@ struct SSL_HANDSHAKE {
1829
1824
  // ClientHelloInner.
1830
1825
  uint8_t inner_client_random[SSL3_RANDOM_SIZE] = {0};
1831
1826
 
1832
- // cookie is the value of the cookie received from the server, if any.
1827
+ // cookie is the value of the cookie in HelloRetryRequest, or empty if none
1828
+ // was received.
1833
1829
  Array<uint8_t> cookie;
1834
1830
 
1831
+ // dtls_cookie is the value of the cookie in DTLS HelloVerifyRequest. If
1832
+ // empty, either none was received or HelloVerifyRequest contained an empty
1833
+ // cookie.
1834
+ Array<uint8_t> dtls_cookie;
1835
+
1835
1836
  // ech_client_outer contains the outer ECH extension to send in the
1836
1837
  // ClientHello, excluding the header and type byte.
1837
1838
  Array<uint8_t> ech_client_outer;
@@ -1847,9 +1848,9 @@ struct SSL_HANDSHAKE {
1847
1848
  // key_share_bytes is the key_share extension that the client should send.
1848
1849
  Array<uint8_t> key_share_bytes;
1849
1850
 
1850
- // ecdh_public_key, for servers, is the key share to be sent to the client in
1851
- // TLS 1.3.
1852
- Array<uint8_t> ecdh_public_key;
1851
+ // key_share_ciphertext, for servers, is encapsulated shared secret to be sent
1852
+ // to the client in the TLS 1.3 key_share extension.
1853
+ Array<uint8_t> key_share_ciphertext;
1853
1854
 
1854
1855
  // peer_sigalgs are the signature algorithms that the peer supports. These are
1855
1856
  // taken from the contents of the signature algorithms extension for a server
@@ -2062,6 +2063,11 @@ struct SSL_HANDSHAKE {
2062
2063
  uint8_t grease_seed[ssl_grease_last_index + 1] = {0};
2063
2064
  };
2064
2065
 
2066
+ // kMaxTickets is the maximum number of tickets to send immediately after the
2067
+ // handshake. We use a one-byte ticket nonce, and there is no point in sending
2068
+ // so many tickets.
2069
+ constexpr size_t kMaxTickets = 16;
2070
+
2065
2071
  UniquePtr<SSL_HANDSHAKE> ssl_handshake_new(SSL *ssl);
2066
2072
 
2067
2073
  // ssl_check_message_type checks if |msg| has type |type|. If so it returns
@@ -2447,8 +2453,13 @@ struct SSL_PROTOCOL_METHOD {
2447
2453
  ssl_open_record_t (*open_app_data)(SSL *ssl, Span<uint8_t> *out,
2448
2454
  size_t *out_consumed, uint8_t *out_alert,
2449
2455
  Span<uint8_t> in);
2450
- int (*write_app_data)(SSL *ssl, bool *out_needs_handshake, const uint8_t *buf,
2451
- int len);
2456
+ // write_app_data encrypts and writes |in| as application data. On success, it
2457
+ // returns one and sets |*out_bytes_written| to the number of bytes of |in|
2458
+ // written. Otherwise, it returns <= 0 and sets |*out_needs_handshake| to
2459
+ // whether the operation failed because the caller needs to drive the
2460
+ // handshake.
2461
+ int (*write_app_data)(SSL *ssl, bool *out_needs_handshake,
2462
+ size_t *out_bytes_written, Span<const uint8_t> in);
2452
2463
  int (*dispatch_alert)(SSL *ssl);
2453
2464
  // init_message begins a new handshake message of type |type|. |cbb| is the
2454
2465
  // root CBB to be passed into |finish_message|. |*body| is set to a child CBB
@@ -2622,8 +2633,8 @@ struct SSL3_STATE {
2622
2633
  SSL3_STATE();
2623
2634
  ~SSL3_STATE();
2624
2635
 
2625
- uint8_t read_sequence[8] = {0};
2626
- uint8_t write_sequence[8] = {0};
2636
+ uint64_t read_sequence = 0;
2637
+ uint64_t write_sequence = 0;
2627
2638
 
2628
2639
  uint8_t server_random[SSL3_RANDOM_SIZE] = {0};
2629
2640
  uint8_t client_random[SSL3_RANDOM_SIZE] = {0};
@@ -2637,12 +2648,23 @@ struct SSL3_STATE {
2637
2648
  // |read_buffer|.
2638
2649
  Span<uint8_t> pending_app_data;
2639
2650
 
2640
- // partial write - check the numbers match
2641
- unsigned int wnum = 0; // number of bytes sent so far
2642
- int wpend_tot = 0; // number bytes written
2643
- int wpend_type = 0;
2644
- int wpend_ret = 0; // number of bytes submitted
2645
- const uint8_t *wpend_buf = nullptr;
2651
+ // unreported_bytes_written is the number of bytes successfully written to the
2652
+ // transport, but not yet reported to the caller. The next |SSL_write| will
2653
+ // skip this many bytes from the input. This is used if
2654
+ // |SSL_MODE_ENABLE_PARTIAL_WRITE| is disabled, in which case |SSL_write| only
2655
+ // reports bytes written when the full caller input is written.
2656
+ size_t unreported_bytes_written = 0;
2657
+
2658
+ // pending_write, if |has_pending_write| is true, is the caller-supplied data
2659
+ // corresponding to the current pending write. This is used to check the
2660
+ // caller retried with a compatible buffer.
2661
+ Span<const uint8_t> pending_write;
2662
+
2663
+ // pending_write_type, if |has_pending_write| is true, is the record type
2664
+ // for the current pending write.
2665
+ //
2666
+ // TODO(davidben): Remove this when alerts are moved out of this write path.
2667
+ uint8_t pending_write_type = 0;
2646
2668
 
2647
2669
  // read_shutdown is the shutdown state for the read half of the connection.
2648
2670
  enum ssl_shutdown_t read_shutdown = ssl_shutdown_none;
@@ -2722,9 +2744,6 @@ struct SSL3_STATE {
2722
2744
  // outstanding.
2723
2745
  bool key_update_pending : 1;
2724
2746
 
2725
- // wpend_pending is true if we have a pending write outstanding.
2726
- bool wpend_pending : 1;
2727
-
2728
2747
  // early_data_accepted is true if early data was accepted by the server.
2729
2748
  bool early_data_accepted : 1;
2730
2749
 
@@ -2739,6 +2758,11 @@ struct SSL3_STATE {
2739
2758
  // HelloRetryRequest message.
2740
2759
  bool used_hello_retry_request : 1;
2741
2760
 
2761
+ // was_key_usage_invalid is whether the handshake succeeded despite using a
2762
+ // TLS mode which was incompatible with the leaf certificate's keyUsage
2763
+ // extension.
2764
+ bool was_key_usage_invalid : 1;
2765
+
2742
2766
  // hs_buf is the buffer of handshake data to process.
2743
2767
  UniquePtr<BUF_MEM> hs_buf;
2744
2768
 
@@ -2828,8 +2852,6 @@ struct SSL3_STATE {
2828
2852
  };
2829
2853
 
2830
2854
  // lengths of messages
2831
- #define DTLS1_COOKIE_LENGTH 256
2832
-
2833
2855
  #define DTLS1_RT_HEADER_LENGTH 13
2834
2856
 
2835
2857
  #define DTLS1_HM_HEADER_LENGTH 12
@@ -2895,9 +2917,6 @@ struct DTLS1_STATE {
2895
2917
  // peer sent the final flight.
2896
2918
  bool flight_has_reply : 1;
2897
2919
 
2898
- uint8_t cookie[DTLS1_COOKIE_LENGTH] = {0};
2899
- size_t cookie_len = 0;
2900
-
2901
2920
  // The current data and handshake epoch. This is initially undefined, and
2902
2921
  // starts at zero once the initial handshake is completed.
2903
2922
  uint16_t r_epoch = 0;
@@ -2910,7 +2929,7 @@ struct DTLS1_STATE {
2910
2929
  uint16_t handshake_read_seq = 0;
2911
2930
 
2912
2931
  // save last sequence number for retransmissions
2913
- uint8_t last_write_sequence[8] = {0};
2932
+ uint64_t last_write_sequence = 0;
2914
2933
  UniquePtr<SSLAEADContext> last_aead_write_ctx;
2915
2934
 
2916
2935
  // incoming_messages is a ring buffer of incoming handshake messages that have
@@ -3088,6 +3107,10 @@ struct SSL_CONFIG {
3088
3107
 
3089
3108
  // permute_extensions is whether to permute extensions when sending messages.
3090
3109
  bool permute_extensions : 1;
3110
+
3111
+ // only_fips_cipher_suites_in_tls13 constrains the selection of cipher suites
3112
+ // in TLS 1.3 such that only FIPS approved ones will be selected.
3113
+ bool only_fips_cipher_suites_in_tls13 : 1;
3091
3114
  };
3092
3115
 
3093
3116
  // From RFC 8446, used in determining PSK modes.
@@ -3205,8 +3228,8 @@ ssl_open_record_t tls_open_app_data(SSL *ssl, Span<uint8_t> *out,
3205
3228
  ssl_open_record_t tls_open_change_cipher_spec(SSL *ssl, size_t *out_consumed,
3206
3229
  uint8_t *out_alert,
3207
3230
  Span<uint8_t> in);
3208
- int tls_write_app_data(SSL *ssl, bool *out_needs_handshake, const uint8_t *buf,
3209
- int len);
3231
+ int tls_write_app_data(SSL *ssl, bool *out_needs_handshake,
3232
+ size_t *out_bytes_written, Span<const uint8_t> in);
3210
3233
 
3211
3234
  bool tls_new(SSL *ssl);
3212
3235
  void tls_free(SSL *ssl);
@@ -3239,11 +3262,11 @@ ssl_open_record_t dtls1_open_change_cipher_spec(SSL *ssl, size_t *out_consumed,
3239
3262
  Span<uint8_t> in);
3240
3263
 
3241
3264
  int dtls1_write_app_data(SSL *ssl, bool *out_needs_handshake,
3242
- const uint8_t *buf, int len);
3265
+ size_t *out_bytes_written, Span<const uint8_t> in);
3243
3266
 
3244
3267
  // dtls1_write_record sends a record. It returns one on success and <= 0 on
3245
3268
  // error.
3246
- int dtls1_write_record(SSL *ssl, int type, const uint8_t *buf, size_t len,
3269
+ int dtls1_write_record(SSL *ssl, int type, Span<const uint8_t> in,
3247
3270
  enum dtls1_use_epoch_t use_epoch);
3248
3271
 
3249
3272
  int dtls1_retransmit_outgoing_messages(SSL *ssl);
@@ -3422,6 +3445,11 @@ struct ssl_ctx_st {
3422
3445
  // and is further constrainted by |SSL_OP_NO_*|.
3423
3446
  uint16_t conf_min_version = 0;
3424
3447
 
3448
+ // num_tickets is the number of tickets to send immediately after the TLS 1.3
3449
+ // handshake. TLS 1.3 recommends single-use tickets so, by default, issue two
3450
+ /// in case the client makes several connections before getting a renewal.
3451
+ uint8_t num_tickets = 2;
3452
+
3425
3453
  // quic_method is the method table corresponding to the QUIC hooks.
3426
3454
  const SSL_QUIC_METHOD *quic_method = nullptr;
3427
3455
 
@@ -3511,7 +3539,7 @@ struct ssl_ctx_st {
3511
3539
  bssl::UniquePtr<bssl::CERT> cert;
3512
3540
 
3513
3541
  // callback that allows applications to peek at protocol messages
3514
- void (*msg_callback)(int write_p, int version, int content_type,
3542
+ void (*msg_callback)(int is_write, int version, int content_type,
3515
3543
  const void *buf, size_t len, SSL *ssl,
3516
3544
  void *arg) = nullptr;
3517
3545
  void *msg_callback_arg = nullptr;
@@ -3690,6 +3718,10 @@ struct ssl_ctx_st {
3690
3718
  // If enable_early_data is true, early data can be sent and accepted.
3691
3719
  bool enable_early_data : 1;
3692
3720
 
3721
+ // only_fips_cipher_suites_in_tls13 constrains the selection of cipher suites
3722
+ // in TLS 1.3 such that only FIPS approved ones will be selected.
3723
+ bool only_fips_cipher_suites_in_tls13 : 1;
3724
+
3693
3725
  private:
3694
3726
  ~ssl_ctx_st();
3695
3727
  friend OPENSSL_EXPORT void SSL_CTX_free(SSL_CTX *);
@@ -439,7 +439,6 @@ static ssl_open_record_t read_v2_client_hello(SSL *ssl, size_t *out_consumed,
439
439
  // No session id.
440
440
  !CBB_add_u8(&hello_body, 0) ||
441
441
  !CBB_add_u16_length_prefixed(&hello_body, &cipher_suites)) {
442
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
443
442
  return ssl_open_record_error;
444
443
  }
445
444
 
@@ -664,41 +663,53 @@ void tls_next_message(SSL *ssl) {
664
663
  // the client.
665
664
  class CipherScorer {
666
665
  public:
667
- CipherScorer(uint16_t group_id)
668
- : aes_is_fine_(EVP_has_aes_hardware()),
669
- security_128_is_fine_(group_id != SSL_CURVE_CECPQ2) {}
666
+ CipherScorer() : aes_is_fine_(EVP_has_aes_hardware()) {}
670
667
 
671
- typedef std::tuple<bool, bool, bool> Score;
668
+ typedef std::tuple<bool, bool> Score;
672
669
 
673
670
  // MinScore returns a |Score| that will compare less than the score of all
674
671
  // cipher suites.
675
672
  Score MinScore() const {
676
- return Score(false, false, false);
673
+ return Score(false, false);
677
674
  }
678
675
 
679
676
  Score Evaluate(const SSL_CIPHER *a) const {
680
677
  return Score(
681
678
  // Something is always preferable to nothing.
682
679
  true,
683
- // Either 128-bit is fine, or 256-bit is preferred.
684
- security_128_is_fine_ || a->algorithm_enc != SSL_AES128GCM,
685
680
  // Either AES is fine, or else ChaCha20 is preferred.
686
681
  aes_is_fine_ || a->algorithm_enc == SSL_CHACHA20POLY1305);
687
682
  }
688
683
 
689
684
  private:
690
685
  const bool aes_is_fine_;
691
- const bool security_128_is_fine_;
692
686
  };
693
687
 
688
+ bool ssl_tls13_cipher_meets_policy(uint16_t cipher_id, bool only_fips) {
689
+ if (!only_fips) {
690
+ return true;
691
+ }
692
+
693
+ switch (cipher_id) {
694
+ case TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff:
695
+ case TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff:
696
+ return true;
697
+ case TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff:
698
+ return false;
699
+ default:
700
+ assert(false);
701
+ return false;
702
+ }
703
+ }
704
+
694
705
  const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
695
- uint16_t group_id) {
706
+ uint16_t group_id, bool only_fips) {
696
707
  if (CBS_len(&cipher_suites) % 2 != 0) {
697
708
  return nullptr;
698
709
  }
699
710
 
700
711
  const SSL_CIPHER *best = nullptr;
701
- CipherScorer scorer(group_id);
712
+ CipherScorer scorer;
702
713
  CipherScorer::Score best_score = scorer.MinScore();
703
714
 
704
715
  while (CBS_len(&cipher_suites) > 0) {
@@ -715,6 +726,11 @@ const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
715
726
  continue;
716
727
  }
717
728
 
729
+ if (!ssl_tls13_cipher_meets_policy(SSL_CIPHER_get_protocol_id(candidate),
730
+ only_fips)) {
731
+ continue;
732
+ }
733
+
718
734
  const CipherScorer::Score candidate_score = scorer.Evaluate(candidate);
719
735
  // |candidate_score| must be larger to displace the current choice. That way
720
736
  // the client's order controls between ciphers with an equal score.
@@ -175,11 +175,11 @@ SSL3_STATE::SSL3_STATE()
175
175
  send_connection_binding(false),
176
176
  channel_id_valid(false),
177
177
  key_update_pending(false),
178
- wpend_pending(false),
179
178
  early_data_accepted(false),
180
179
  alert_dispatch(false),
181
180
  renegotiate_pending(false),
182
- used_hello_retry_request(false) {}
181
+ used_hello_retry_request(false),
182
+ was_key_usage_invalid(false) {}
183
183
 
184
184
  SSL3_STATE::~SSL3_STATE() {}
185
185