grpc 1.55.0 → 1.56.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 (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +48 -12
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -104,9 +104,13 @@ typedef void *(*X509V3_EXT_R2I)(const X509V3_EXT_METHOD *method,
104
104
  struct v3_ext_method {
105
105
  int ext_nid;
106
106
  int ext_flags;
107
- // If this is set the following four fields are ignored
107
+
108
+ // it determines how values of this extension are allocated, released, parsed,
109
+ // and marshalled. This must be non-NULL.
108
110
  ASN1_ITEM_EXP *it;
109
- // Old style ASN1 calls
111
+
112
+ // The following functions are ignored in favor of |it|. They are retained in
113
+ // the struct only for source compatibility with existing struct definitions.
110
114
  X509V3_EXT_NEW ext_new;
111
115
  X509V3_EXT_FREE ext_free;
112
116
  X509V3_EXT_D2I d2i;
@@ -130,7 +134,6 @@ struct v3_ext_method {
130
134
  DEFINE_STACK_OF(X509V3_EXT_METHOD)
131
135
 
132
136
  // ext_flags values
133
- #define X509V3_EXT_DYNAMIC 0x1
134
137
  #define X509V3_EXT_CTX_DEP 0x2
135
138
  #define X509V3_EXT_MULTILINE 0x4
136
139
 
@@ -546,9 +549,11 @@ OPENSSL_EXPORT void X509V3_conf_free(CONF_VALUE *val);
546
549
  //
547
550
  // These functions are not safe to use with untrusted inputs. The string formats
548
551
  // may implicitly reference context information and, in OpenSSL (though not
549
- // BoringSSL), one even allows reading arbitrary files. They additionally see
550
- // much less testing and review than most of the library and may have bugs
551
- // including memory leaks or crashes.
552
+ // BoringSSL), one even allows reading arbitrary files. Many formats can also
553
+ // produce far larger outputs than their inputs, so untrusted inputs may lead to
554
+ // denial-of-service attacks. Finally, the parsers see much less testing and
555
+ // review than most of the library and may have bugs including memory leaks or
556
+ // crashes.
552
557
 
553
558
  // v3_ext_ctx, aka |X509V3_CTX|, contains additional context information for
554
559
  // constructing extensions. Some string formats reference additional values in
@@ -663,10 +668,37 @@ OPENSSL_EXPORT ASN1_INTEGER *s2i_ASN1_INTEGER(const X509V3_EXT_METHOD *meth,
663
668
  const char *value);
664
669
  OPENSSL_EXPORT char *i2s_ASN1_ENUMERATED(const X509V3_EXT_METHOD *meth,
665
670
  const ASN1_ENUMERATED *aint);
666
- OPENSSL_EXPORT int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
667
- OPENSSL_EXPORT int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
668
- OPENSSL_EXPORT int X509V3_EXT_add_alias(int nid_to, int nid_from);
669
- OPENSSL_EXPORT void X509V3_EXT_cleanup(void);
671
+
672
+ // X509V3_EXT_add registers |ext| as a custom extension for the extension type
673
+ // |ext->ext_nid|. |ext| must be valid for the remainder of the address space's
674
+ // lifetime. It returns one on success and zero on error.
675
+ //
676
+ // WARNING: This function modifies global state. If other code in the same
677
+ // address space also registers an extension with type |ext->ext_nid|, the two
678
+ // registrations will conflict. Which registration takes effect is undefined. If
679
+ // the two registrations use incompatible in-memory representations, code
680
+ // expecting the other registration will then cast a type to the wrong type,
681
+ // resulting in a potentially exploitable memory error. This conflict can also
682
+ // occur if BoringSSL later adds support for |ext->ext_nid|, with a different
683
+ // in-memory representation than the one expected by |ext|.
684
+ //
685
+ // This function, additionally, is not thread-safe and cannot be called
686
+ // concurrently with any other BoringSSL function.
687
+ //
688
+ // As a result, it is impossible to safely use this function. Registering a
689
+ // custom extension has no impact on certificate verification so, instead,
690
+ // callers should simply handle the custom extension with the byte-based
691
+ // |X509_EXTENSION| APIs directly. Registering |ext| with the library has little
692
+ // practical value.
693
+ OPENSSL_EXPORT OPENSSL_DEPRECATED int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
694
+
695
+ // X509V3_EXT_add_alias registers a custom extension with NID |nid_to|. The
696
+ // corresponding ASN.1 type is copied from |nid_from|. It returns one on success
697
+ // and zero on error.
698
+ //
699
+ // WARNING: Do not use this function. See |X509V3_EXT_add|.
700
+ OPENSSL_EXPORT OPENSSL_DEPRECATED int X509V3_EXT_add_alias(int nid_to,
701
+ int nid_from);
670
702
 
671
703
  OPENSSL_EXPORT const X509V3_EXT_METHOD *X509V3_EXT_get(
672
704
  const X509_EXTENSION *ext);
@@ -601,8 +601,8 @@ bool ssl_is_valid_ech_config_list(Span<const uint8_t> ech_config_list) {
601
601
 
602
602
  static bool select_ech_cipher_suite(const EVP_HPKE_KDF **out_kdf,
603
603
  const EVP_HPKE_AEAD **out_aead,
604
- Span<const uint8_t> cipher_suites) {
605
- const bool has_aes_hardware = EVP_has_aes_hardware();
604
+ Span<const uint8_t> cipher_suites,
605
+ const bool has_aes_hardware) {
606
606
  const EVP_HPKE_AEAD *aead = nullptr;
607
607
  CBS cbs = cipher_suites;
608
608
  while (CBS_len(&cbs) != 0) {
@@ -660,7 +660,10 @@ bool ssl_select_ech_config(SSL_HANDSHAKE *hs, Span<uint8_t> out_enc,
660
660
  const EVP_HPKE_AEAD *aead;
661
661
  if (supported && //
662
662
  ech_config.kem_id == EVP_HPKE_DHKEM_X25519_HKDF_SHA256 &&
663
- select_ech_cipher_suite(&kdf, &aead, ech_config.cipher_suites)) {
663
+ select_ech_cipher_suite(&kdf, &aead, ech_config.cipher_suites,
664
+ hs->ssl->config->aes_hw_override
665
+ ? hs->ssl->config->aes_hw_override_value
666
+ : EVP_has_aes_hardware())) {
664
667
  ScopedCBB info;
665
668
  static const uint8_t kInfoLabel[] = "tls ech"; // includes trailing NUL
666
669
  if (!CBB_init(info.get(), sizeof(kInfoLabel) + ech_config.raw.size()) ||
@@ -714,9 +717,11 @@ static bool setup_ech_grease(SSL_HANDSHAKE *hs) {
714
717
  }
715
718
 
716
719
  const uint16_t kdf_id = EVP_HPKE_HKDF_SHA256;
717
- const EVP_HPKE_AEAD *aead = EVP_has_aes_hardware()
718
- ? EVP_hpke_aes_128_gcm()
719
- : EVP_hpke_chacha20_poly1305();
720
+ const bool has_aes_hw = hs->ssl->config->aes_hw_override
721
+ ? hs->ssl->config->aes_hw_override_value
722
+ : EVP_has_aes_hardware();
723
+ const EVP_HPKE_AEAD *aead =
724
+ has_aes_hw ? EVP_hpke_aes_128_gcm() : EVP_hpke_chacha20_poly1305();
720
725
  static_assert(ssl_grease_ech_config_id < sizeof(hs->grease_seed),
721
726
  "hs->grease_seed is too small");
722
727
  uint8_t config_id = hs->grease_seed[ssl_grease_ech_config_id];
@@ -206,9 +206,7 @@ static bool tls1_check_duplicate_extensions(const CBS *cbs) {
206
206
 
207
207
  static bool is_post_quantum_group(uint16_t id) {
208
208
  switch (id) {
209
- case SSL_CURVE_CECPQ2:
210
- case SSL_CURVE_X25519KYBER768:
211
- case SSL_CURVE_P256KYBER768:
209
+ case SSL_CURVE_X25519_KYBER768_DRAFT00:
212
210
  return true;
213
211
  default:
214
212
  return false;
@@ -414,7 +412,7 @@ bool tls1_set_curves_list(Array<uint16_t> *out_group_ids, const char *curves) {
414
412
  bool tls1_check_group_id(const SSL_HANDSHAKE *hs, uint16_t group_id) {
415
413
  if (is_post_quantum_group(group_id) &&
416
414
  ssl_protocol_version(hs->ssl) < TLS1_3_VERSION) {
417
- // CECPQ2(b) requires TLS 1.3.
415
+ // Post-quantum "groups" require TLS 1.3.
418
416
  return false;
419
417
  }
420
418
 
@@ -215,6 +215,14 @@ static void ssl_get_client_disabled(const SSL_HANDSHAKE *hs,
215
215
  }
216
216
  }
217
217
 
218
+ static bool ssl_add_tls13_cipher(CBB *cbb, uint16_t cipher_id,
219
+ ssl_compliance_policy_t policy) {
220
+ if (ssl_tls13_cipher_meets_policy(cipher_id, policy)) {
221
+ return CBB_add_u16(cbb, cipher_id);
222
+ }
223
+ return true;
224
+ }
225
+
218
226
  static bool ssl_write_client_cipher_list(const SSL_HANDSHAKE *hs, CBB *out,
219
227
  ssl_client_hello_type_t type) {
220
228
  const SSL *const ssl = hs->ssl;
@@ -235,22 +243,22 @@ static bool ssl_write_client_cipher_list(const SSL_HANDSHAKE *hs, CBB *out,
235
243
  // Add TLS 1.3 ciphers. Order ChaCha20-Poly1305 relative to AES-GCM based on
236
244
  // hardware support.
237
245
  if (hs->max_version >= TLS1_3_VERSION) {
238
- const bool include_chacha20 = ssl_tls13_cipher_meets_policy(
239
- TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff,
240
- ssl->config->only_fips_cipher_suites_in_tls13);
241
-
242
- if (!EVP_has_aes_hardware() && //
243
- include_chacha20 && //
244
- !CBB_add_u16(&child, TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff)) {
245
- return false;
246
- }
247
- if (!CBB_add_u16(&child, TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff) ||
248
- !CBB_add_u16(&child, TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff)) {
249
- return false;
250
- }
251
- if (EVP_has_aes_hardware() && //
252
- include_chacha20 && //
253
- !CBB_add_u16(&child, TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff)) {
246
+ const bool has_aes_hw = ssl->config->aes_hw_override
247
+ ? ssl->config->aes_hw_override_value
248
+ : EVP_has_aes_hardware();
249
+
250
+ if ((!has_aes_hw && //
251
+ !ssl_add_tls13_cipher(&child,
252
+ TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff,
253
+ ssl->config->tls13_cipher_policy)) ||
254
+ !ssl_add_tls13_cipher(&child, TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff,
255
+ ssl->config->tls13_cipher_policy) ||
256
+ !ssl_add_tls13_cipher(&child, TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff,
257
+ ssl->config->tls13_cipher_policy) ||
258
+ (has_aes_hw && //
259
+ !ssl_add_tls13_cipher(&child,
260
+ TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff,
261
+ ssl->config->tls13_cipher_policy))) {
254
262
  return false;
255
263
  }
256
264
  }
@@ -451,6 +451,27 @@ class GrowableArray {
451
451
  // CBBFinishArray behaves like |CBB_finish| but stores the result in an Array.
452
452
  OPENSSL_EXPORT bool CBBFinishArray(CBB *cbb, Array<uint8_t> *out);
453
453
 
454
+ // GetAllNames helps to implement |*_get_all_*_names| style functions. It
455
+ // writes at most |max_out| string pointers to |out| and returns the number that
456
+ // it would have liked to have written. The strings written consist of
457
+ // |fixed_names_len| strings from |fixed_names| followed by |objects_len|
458
+ // strings taken by projecting |objects| through |name|.
459
+ template <typename T, typename Name>
460
+ inline size_t GetAllNames(const char **out, size_t max_out,
461
+ Span<const char *const> fixed_names, Name(T::*name),
462
+ Span<const T> objects) {
463
+ auto span = bssl::MakeSpan(out, max_out);
464
+ for (size_t i = 0; !span.empty() && i < fixed_names.size(); i++) {
465
+ span[0] = fixed_names[i];
466
+ span = span.subspan(1);
467
+ }
468
+ span = span.subspan(0, objects.size());
469
+ for (size_t i = 0; i < span.size(); i++) {
470
+ span[i] = objects[i].*name;
471
+ }
472
+ return fixed_names.size() + objects.size();
473
+ }
474
+
454
475
 
455
476
  // Protocol versions.
456
477
  //
@@ -547,15 +568,15 @@ BSSL_NAMESPACE_BEGIN
547
568
  #define SSL_AES256 0x00000004u
548
569
  #define SSL_AES128GCM 0x00000008u
549
570
  #define SSL_AES256GCM 0x00000010u
550
- #define SSL_eNULL 0x00000020u
551
- #define SSL_CHACHA20POLY1305 0x00000040u
571
+ #define SSL_CHACHA20POLY1305 0x00000020u
552
572
 
553
573
  #define SSL_AES (SSL_AES128 | SSL_AES256 | SSL_AES128GCM | SSL_AES256GCM)
554
574
 
555
575
  // Bits for |algorithm_mac| (symmetric authentication).
556
576
  #define SSL_SHA1 0x00000001u
577
+ #define SSL_SHA256 0x00000002u
557
578
  // SSL_AEAD is set for all AEADs.
558
- #define SSL_AEAD 0x00000002u
579
+ #define SSL_AEAD 0x00000004u
559
580
 
560
581
  // Bits for |algorithm_prf| (handshake digest).
561
582
  #define SSL_HANDSHAKE_MAC_DEFAULT 0x1
@@ -633,9 +654,11 @@ const EVP_MD *ssl_get_handshake_digest(uint16_t version,
633
654
  // newly-allocated |SSLCipherPreferenceList| containing the result. It returns
634
655
  // true on success and false on failure. If |strict| is true, nonsense will be
635
656
  // rejected. If false, nonsense will be silently ignored. An empty result is
636
- // considered an error regardless of |strict|.
657
+ // considered an error regardless of |strict|. |has_aes_hw| indicates if the
658
+ // list should be ordered based on having support for AES in hardware or not.
637
659
  bool ssl_create_cipher_list(UniquePtr<SSLCipherPreferenceList> *out_cipher_list,
638
- const char *rule_str, bool strict);
660
+ const bool has_aes_hw, const char *rule_str,
661
+ bool strict);
639
662
 
640
663
  // ssl_cipher_auth_mask_for_key returns the mask of cipher |algorithm_auth|
641
664
  // values suitable for use with |key| in TLS 1.2 and below.
@@ -659,14 +682,20 @@ size_t ssl_cipher_get_record_split_len(const SSL_CIPHER *cipher);
659
682
 
660
683
  // ssl_choose_tls13_cipher returns an |SSL_CIPHER| corresponding with the best
661
684
  // available from |cipher_suites| compatible with |version|, |group_id|, and
662
- // |only_fips|. It returns NULL if there isn't a compatible cipher.
663
- const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
664
- uint16_t group_id, bool only_fips);
685
+ // |policy|. It returns NULL if there isn't a compatible cipher. |has_aes_hw|
686
+ // indicates if the choice should be made as if support for AES in hardware
687
+ // is available.
688
+ const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, bool has_aes_hw,
689
+ uint16_t version, uint16_t group_id,
690
+ enum ssl_compliance_policy_t policy);
665
691
 
666
692
  // 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);
693
+ // |policy|.
694
+ bool ssl_tls13_cipher_meets_policy(uint16_t cipher_id,
695
+ enum ssl_compliance_policy_t policy);
696
+
697
+ // ssl_cipher_is_deprecated returns true if |cipher| is deprecated.
698
+ OPENSSL_EXPORT bool ssl_cipher_is_deprecated(const SSL_CIPHER *cipher);
670
699
 
671
700
 
672
701
  // Transcript layer.
@@ -1103,7 +1132,7 @@ class SSLKeyShare {
1103
1132
  struct NamedGroup {
1104
1133
  int nid;
1105
1134
  uint16_t group_id;
1106
- const char name[12], alias[12];
1135
+ const char name[32], alias[32];
1107
1136
  };
1108
1137
 
1109
1138
  // NamedGroups returns all supported groups.
@@ -3059,6 +3088,10 @@ struct SSL_CONFIG {
3059
3088
  // structure for the client to use when negotiating ECH.
3060
3089
  Array<uint8_t> client_ech_config_list;
3061
3090
 
3091
+ // tls13_cipher_policy limits the set of ciphers that can be selected when
3092
+ // negotiating a TLS 1.3 connection.
3093
+ enum ssl_compliance_policy_t tls13_cipher_policy = ssl_compliance_policy_none;
3094
+
3062
3095
  // verify_mode is a bitmask of |SSL_VERIFY_*| values.
3063
3096
  uint8_t verify_mode = SSL_VERIFY_NONE;
3064
3097
 
@@ -3108,9 +3141,14 @@ struct SSL_CONFIG {
3108
3141
  // permute_extensions is whether to permute extensions when sending messages.
3109
3142
  bool permute_extensions : 1;
3110
3143
 
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;
3144
+ // aes_hw_override if set indicates we should override checking for aes
3145
+ // hardware support, and use the value in aes_hw_override_value instead.
3146
+ bool aes_hw_override : 1;
3147
+
3148
+ // aes_hw_override_value is used for testing to indicate the support or lack
3149
+ // of support for AES hw. The value is only considered if |aes_hw_override| is
3150
+ // true.
3151
+ bool aes_hw_override_value : 1;
3114
3152
  };
3115
3153
 
3116
3154
  // From RFC 8446, used in determining PSK modes.
@@ -3671,6 +3709,10 @@ struct ssl_ctx_st {
3671
3709
  int (*legacy_ocsp_callback)(SSL *ssl, void *arg) = nullptr;
3672
3710
  void *legacy_ocsp_callback_arg = nullptr;
3673
3711
 
3712
+ // tls13_cipher_policy limits the set of ciphers that can be selected when
3713
+ // negotiating a TLS 1.3 connection.
3714
+ enum ssl_compliance_policy_t tls13_cipher_policy = ssl_compliance_policy_none;
3715
+
3674
3716
  // verify_sigalgs, if not empty, is the set of signature algorithms
3675
3717
  // accepted from the peer in decreasing order of preference.
3676
3718
  bssl::Array<uint16_t> verify_sigalgs;
@@ -3718,9 +3760,14 @@ struct ssl_ctx_st {
3718
3760
  // If enable_early_data is true, early data can be sent and accepted.
3719
3761
  bool enable_early_data : 1;
3720
3762
 
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;
3763
+ // aes_hw_override if set indicates we should override checking for AES
3764
+ // hardware support, and use the value in aes_hw_override_value instead.
3765
+ bool aes_hw_override : 1;
3766
+
3767
+ // aes_hw_override_value is used for testing to indicate the support or lack
3768
+ // of support for AES hardware. The value is only considered if
3769
+ // |aes_hw_override| is true.
3770
+ bool aes_hw_override_value : 1;
3724
3771
 
3725
3772
  private:
3726
3773
  ~ssl_ctx_st();
@@ -663,7 +663,7 @@ void tls_next_message(SSL *ssl) {
663
663
  // the client.
664
664
  class CipherScorer {
665
665
  public:
666
- CipherScorer() : aes_is_fine_(EVP_has_aes_hardware()) {}
666
+ CipherScorer(bool has_aes_hw) : aes_is_fine_(has_aes_hw) {}
667
667
 
668
668
  typedef std::tuple<bool, bool> Score;
669
669
 
@@ -685,31 +685,50 @@ class CipherScorer {
685
685
  const bool aes_is_fine_;
686
686
  };
687
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:
688
+ bool ssl_tls13_cipher_meets_policy(uint16_t cipher_id,
689
+ enum ssl_compliance_policy_t policy) {
690
+ switch (policy) {
691
+ case ssl_compliance_policy_none:
696
692
  return true;
697
- case TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff:
698
- return false;
699
- default:
700
- assert(false);
701
- return false;
693
+
694
+ case ssl_compliance_policy_fips_202205:
695
+ switch (cipher_id) {
696
+ case TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff:
697
+ case TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff:
698
+ return true;
699
+ case TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff:
700
+ return false;
701
+ default:
702
+ assert(false);
703
+ return false;
704
+ }
705
+
706
+ case ssl_compliance_policy_wpa3_192_202304:
707
+ switch (cipher_id) {
708
+ case TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff:
709
+ return true;
710
+ case TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff:
711
+ case TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff:
712
+ return false;
713
+ default:
714
+ assert(false);
715
+ return false;
716
+ }
702
717
  }
718
+
719
+ assert(false);
720
+ return false;
703
721
  }
704
722
 
705
- const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
706
- uint16_t group_id, bool only_fips) {
723
+ const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, bool has_aes_hw,
724
+ uint16_t version, uint16_t group_id,
725
+ enum ssl_compliance_policy_t policy) {
707
726
  if (CBS_len(&cipher_suites) % 2 != 0) {
708
727
  return nullptr;
709
728
  }
710
729
 
711
730
  const SSL_CIPHER *best = nullptr;
712
- CipherScorer scorer;
731
+ CipherScorer scorer(has_aes_hw);
713
732
  CipherScorer::Score best_score = scorer.MinScore();
714
733
 
715
734
  while (CBS_len(&cipher_suites) > 0) {
@@ -727,7 +746,7 @@ const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
727
746
  }
728
747
 
729
748
  if (!ssl_tls13_cipher_meets_policy(SSL_CIPHER_get_protocol_id(candidate),
730
- only_fips)) {
749
+ policy)) {
731
750
  continue;
732
751
  }
733
752