grpc 1.84.0 → 1.85.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1004) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/include/grpc/event_engine/memory_allocator.h +1 -0
  4. data/include/grpc/grpc.h +3 -0
  5. data/include/grpc/grpc_security_constants.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +4 -0
  7. data/src/core/call/call_filters.h +10 -10
  8. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  10. data/src/core/call/filter_fusion.h +15 -15
  11. data/src/core/call/interception_chain.h +3 -3
  12. data/src/core/call/metadata_batch.cc +1 -0
  13. data/src/core/call/metadata_batch.h +45 -33
  14. data/src/core/call/parsed_metadata.h +3 -3
  15. data/src/core/call/request_buffer.cc +6 -6
  16. data/src/core/call/request_buffer.h +1 -1
  17. data/src/core/channelz/channel_trace.cc +5 -5
  18. data/src/core/channelz/channel_trace.h +1 -1
  19. data/src/core/channelz/channelz.cc +9 -9
  20. data/src/core/channelz/channelz.h +12 -12
  21. data/src/core/channelz/channelz_registry.cc +10 -10
  22. data/src/core/channelz/ztrace_collector.h +5 -5
  23. data/src/core/client_channel/client_channel.cc +4 -4
  24. data/src/core/client_channel/client_channel_filter.cc +14 -14
  25. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  26. data/src/core/client_channel/subchannel.cc +24 -23
  27. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  28. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  29. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  30. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  31. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  32. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  33. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  34. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  39. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  40. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  41. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  42. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  43. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  45. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  46. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  48. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  49. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  50. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  51. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  53. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  55. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  56. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  61. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  63. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  65. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  68. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  70. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  72. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  73. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  74. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  76. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  85. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  87. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  97. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  98. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  99. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  100. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  101. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  102. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  103. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  104. data/src/core/handshaker/handshaker.cc +4 -4
  105. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  106. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  107. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  108. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  109. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  110. data/src/core/lib/channel/channel_args.cc +20 -0
  111. data/src/core/lib/channel/channel_args.h +17 -17
  112. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  113. data/src/core/lib/channel/promise_based_filter.h +66 -27
  114. data/src/core/lib/debug/trace_flags.cc +2 -0
  115. data/src/core/lib/debug/trace_flags.h +1 -0
  116. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  117. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  118. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  119. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  120. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  121. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  122. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  123. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  124. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  126. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  127. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  128. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  129. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  132. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  134. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  136. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  137. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  139. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  140. data/src/core/lib/experiments/experiments.cc +48 -0
  141. data/src/core/lib/experiments/experiments.h +24 -0
  142. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  143. data/src/core/lib/iomgr/buffer_list.h +1 -1
  144. data/src/core/lib/iomgr/combiner.cc +0 -1
  145. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  146. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  147. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  148. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  149. data/src/core/lib/promise/activity.cc +1 -1
  150. data/src/core/lib/promise/activity.h +1 -1
  151. data/src/core/lib/promise/arena_promise.h +7 -7
  152. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  153. data/src/core/lib/promise/detail/promise_like.h +4 -4
  154. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  155. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  156. data/src/core/lib/promise/observable.h +3 -3
  157. data/src/core/lib/promise/party.cc +1 -1
  158. data/src/core/lib/promise/try_seq.h +2 -2
  159. data/src/core/lib/resource_quota/arena.h +3 -3
  160. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  161. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  162. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  163. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  164. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  165. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  168. data/src/core/lib/security/authorization/matchers.h +1 -1
  169. data/src/core/lib/surface/call.cc +8 -7
  170. data/src/core/lib/surface/call.h +3 -3
  171. data/src/core/lib/surface/call_utils.h +4 -0
  172. data/src/core/lib/surface/channel.cc +1 -1
  173. data/src/core/lib/surface/channel.h +1 -1
  174. data/src/core/lib/surface/channel_init.cc +1 -1
  175. data/src/core/lib/surface/init.cc +7 -7
  176. data/src/core/lib/surface/lame_client.cc +1 -1
  177. data/src/core/lib/surface/legacy_channel.cc +2 -2
  178. data/src/core/lib/surface/version.cc +1 -1
  179. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  180. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  181. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  182. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  183. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  184. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  185. data/src/core/load_balancing/health_check_client.cc +7 -7
  186. data/src/core/load_balancing/lb_policy.cc +1 -1
  187. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  188. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  189. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  190. data/src/core/load_balancing/rls/rls.cc +23 -17
  191. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  192. data/src/core/load_balancing/xds/cds.cc +6 -5
  193. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  194. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  195. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  196. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  197. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  198. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  199. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  200. data/src/core/server/server.cc +30 -30
  201. data/src/core/server/server.h +4 -3
  202. data/src/core/server/server_config_selector_filter.cc +3 -3
  203. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  204. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  205. data/src/core/telemetry/instrument.cc +30 -16
  206. data/src/core/telemetry/instrument.h +3 -3
  207. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  210. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  211. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  212. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  213. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  214. data/src/core/tsi/ssl_transport_security.cc +46 -13
  215. data/src/core/tsi/ssl_transport_security.h +7 -0
  216. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  217. data/src/core/util/event_log.cc +3 -3
  218. data/src/core/util/http_client/httpcli.cc +5 -5
  219. data/src/core/util/http_client/httpcli.h +1 -1
  220. data/src/core/util/json/json_object_loader.cc +7 -0
  221. data/src/core/util/json/json_object_loader.h +17 -2
  222. data/src/core/util/latent_see.cc +123 -36
  223. data/src/core/util/latent_see.h +14 -1
  224. data/src/core/util/mpscq.cc +1 -1
  225. data/src/core/util/notification.h +4 -4
  226. data/src/core/util/sync.h +20 -6
  227. data/src/core/util/table.h +20 -22
  228. data/src/core/util/work_serializer.cc +2 -2
  229. data/src/core/xds/grpc/blackboard.cc +4 -3
  230. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  231. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  233. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  234. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  235. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  236. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  237. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  238. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  239. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  240. data/src/core/xds/grpc/xds_matcher.h +2 -2
  241. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  242. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  243. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  244. data/src/core/xds/xds_client/xds_client.cc +19 -16
  245. data/src/core/xds/xds_client/xds_transport.h +49 -3
  246. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  248. data/src/ruby/lib/grpc/version.rb +1 -1
  249. data/src/ruby/pb/README.md +1 -1
  250. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  251. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  252. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  253. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  254. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  255. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  256. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  257. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  258. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  259. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  260. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  261. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  262. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  265. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  266. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  268. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  269. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  270. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  273. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  274. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  275. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  276. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  277. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  278. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  280. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  281. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  282. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  283. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  284. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  285. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  286. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  287. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  288. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  289. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  290. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  291. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  292. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  293. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  294. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  295. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  296. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  297. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  300. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  301. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  305. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  306. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  308. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  309. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  310. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  313. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  314. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  316. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  317. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  326. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  327. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  328. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  330. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  331. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  335. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  336. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  337. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  338. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  341. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  342. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  343. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  344. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  345. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  346. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  347. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  348. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  349. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  350. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  351. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  352. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  353. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  354. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  356. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  357. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  358. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  360. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  361. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  362. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  364. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  365. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  366. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  367. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  368. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  370. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  372. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  373. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  374. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  375. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  376. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  377. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  378. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  379. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  380. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  381. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  382. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  383. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  384. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  385. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  386. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  387. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  388. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  389. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  390. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  391. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  393. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  395. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  396. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  397. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  398. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  399. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  401. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  402. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  403. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  404. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  405. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  407. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  408. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  409. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  410. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  411. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  412. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  413. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  414. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  415. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  416. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  417. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  418. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  420. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  423. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  427. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  428. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  429. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  433. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  434. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  435. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  436. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  437. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  438. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  439. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  440. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  441. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  442. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  443. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  444. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  445. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  446. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  447. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  448. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  449. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  450. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  451. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  453. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  454. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  455. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  456. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  457. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  458. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  459. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  465. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  466. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  467. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  468. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  469. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  470. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  471. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  472. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  473. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  474. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  475. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  476. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  477. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  478. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  492. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  494. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  497. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  498. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  504. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  505. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  506. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  508. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  509. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  510. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  511. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  512. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  513. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  514. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  515. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  516. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  518. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  519. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  520. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  521. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  522. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  523. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  524. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  525. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  531. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  532. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  533. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  534. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  543. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  544. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  545. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  546. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  547. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  548. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  549. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  555. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  558. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  559. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  560. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  564. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  565. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  566. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  567. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  568. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  569. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  571. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  572. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  574. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  575. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  576. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  577. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  579. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  580. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  581. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  582. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  586. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  587. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  597. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  598. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  599. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  600. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  601. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  602. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  709. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  710. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  711. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  712. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  713. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  714. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  715. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  716. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  717. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  718. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  719. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  720. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  721. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  722. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  723. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  724. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  725. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  728. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  729. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  730. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  736. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  739. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  743. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  747. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  748. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  749. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  750. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  751. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  752. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  753. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  754. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  755. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  756. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  757. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  758. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  759. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  760. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  761. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  765. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  768. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  769. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  770. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  772. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  773. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  774. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  775. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  776. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  777. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  781. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  784. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  785. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  786. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  788. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  789. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  790. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  791. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  792. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  796. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  819. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  837. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  849. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  850. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  853. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  854. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  855. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  856. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  858. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  859. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  860. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  861. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  862. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  863. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  864. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  865. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  866. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  867. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  868. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  869. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  870. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  871. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  872. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  873. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  874. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  875. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  876. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  877. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  878. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  879. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  880. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  881. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  883. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  884. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  885. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  886. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  887. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  888. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  889. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  890. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  891. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  892. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  893. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  894. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  895. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  897. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  898. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  899. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  900. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  901. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  902. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  904. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  906. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  907. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  908. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  909. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  913. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  914. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  915. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  916. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  917. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  918. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  919. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  920. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  921. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  923. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  924. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  925. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  926. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  927. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  928. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  929. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  930. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  931. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  932. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  933. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  934. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  935. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  936. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  937. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  938. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  939. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  940. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  941. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  942. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  943. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  944. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  945. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  946. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  947. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  948. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  949. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  950. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  951. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  952. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  953. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  955. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  956. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  957. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  958. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  959. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  960. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  961. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  962. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  963. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  964. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  965. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  966. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  967. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  968. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  969. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  970. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  971. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  974. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  979. metadata +77 -52
  980. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  982. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  984. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  985. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  986. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  987. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  989. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  990. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  996. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1000. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1001. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1002. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1003. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1004. data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
@@ -12,380 +12,311 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
+ #include <string_view>
16
+
15
17
  #include <stdio.h>
16
18
  #include <string.h>
17
19
 
20
+ #include <utility>
21
+
22
+ #include <openssl/asn1.h>
18
23
  #include <openssl/asn1t.h>
24
+ #include <openssl/base.h>
25
+ #include <openssl/bio.h>
26
+ #include <openssl/bytestring.h>
19
27
  #include <openssl/conf.h>
20
28
  #include <openssl/err.h>
21
29
  #include <openssl/mem.h>
22
30
  #include <openssl/obj.h>
31
+ #include <openssl/span.h>
32
+ #include <openssl/stack.h>
23
33
  #include <openssl/x509.h>
24
34
 
25
35
  #include "../internal.h"
26
- #include "ext_dat.h"
27
36
  #include "internal.h"
28
37
 
29
38
 
30
- static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
31
- const X509V3_CTX *ctx,
32
- const STACK_OF(CONF_VALUE) *nval);
33
- static int i2r_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, void *a,
34
- BIO *bp, int ind);
35
- static int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
36
- STACK_OF(GENERAL_SUBTREE) *trees, BIO *bp,
37
- int ind, const char *name);
38
- static int print_nc_ipadd(BIO *bp, const ASN1_OCTET_STRING *ip);
39
-
40
- static int nc_match(GENERAL_NAME *gen, NAME_CONSTRAINTS *nc);
41
- static int nc_match_single(GENERAL_NAME *sub, GENERAL_NAME *gen);
42
- static int nc_dn(X509_NAME *sub, X509_NAME *nm);
43
- static int nc_dns(const ASN1_IA5STRING *sub, const ASN1_IA5STRING *dns);
44
- static int nc_email(const ASN1_IA5STRING *sub, const ASN1_IA5STRING *eml);
45
- static int nc_uri(const ASN1_IA5STRING *uri, const ASN1_IA5STRING *base);
46
-
47
- const X509V3_EXT_METHOD v3_name_constraints = {
48
- NID_name_constraints,
49
- 0,
50
- ASN1_ITEM_ref(NAME_CONSTRAINTS),
51
- 0,
52
- 0,
53
- 0,
54
- 0,
55
- 0,
56
- 0,
57
- 0,
58
- v2i_NAME_CONSTRAINTS,
59
- i2r_NAME_CONSTRAINTS,
60
- 0,
61
- NULL,
62
- };
39
+ BSSL_NAMESPACE_BEGIN
40
+ namespace {
63
41
 
64
- ASN1_SEQUENCE(GENERAL_SUBTREE) = {
65
- ASN1_SIMPLE(GENERAL_SUBTREE, base, GENERAL_NAME),
66
- ASN1_IMP_OPT(GENERAL_SUBTREE, minimum, ASN1_INTEGER, 0),
67
- ASN1_IMP_OPT(GENERAL_SUBTREE, maximum, ASN1_INTEGER, 1),
68
- } ASN1_SEQUENCE_END(GENERAL_SUBTREE)
69
-
70
- ASN1_SEQUENCE(NAME_CONSTRAINTS) = {
71
- ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, permittedSubtrees,
72
- GENERAL_SUBTREE, 0),
73
- ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, excludedSubtrees,
74
- GENERAL_SUBTREE, 1),
75
- } ASN1_SEQUENCE_END(NAME_CONSTRAINTS)
42
+ int starts_with(const CBS *cbs, uint8_t c) {
43
+ return CBS_len(cbs) > 0 && CBS_data(cbs)[0] == c;
44
+ }
76
45
 
46
+ int starts_with_str(const CBS *cbs, std::string_view str) {
47
+ return CBS_len(cbs) >= str.size() &&
48
+ !OPENSSL_memcmp(CBS_data(cbs), str.data(), str.size());
49
+ }
77
50
 
78
- IMPLEMENT_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)
79
- IMPLEMENT_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)
51
+ int ends_with(const CBS *cbs, uint8_t c) {
52
+ return CBS_len(cbs) > 0 && CBS_data(cbs)[CBS_len(cbs) - 1] == c;
53
+ }
80
54
 
81
- static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
82
- const X509V3_CTX *ctx,
83
- const STACK_OF(CONF_VALUE) *nval) {
84
- STACK_OF(GENERAL_SUBTREE) **ptree = NULL;
85
- NAME_CONSTRAINTS *ncons = NULL;
86
- GENERAL_SUBTREE *sub = NULL;
87
- ncons = NAME_CONSTRAINTS_new();
88
- if (!ncons) {
89
- goto err;
55
+ int equal_case(const CBS *a, const CBS *b) {
56
+ if (CBS_len(a) != CBS_len(b)) {
57
+ return 0;
90
58
  }
91
- for (size_t i = 0; i < sk_CONF_VALUE_num(nval); i++) {
92
- const CONF_VALUE *val = sk_CONF_VALUE_value(nval, i);
93
- CONF_VALUE tval;
94
- if (!strncmp(val->name, "permitted", 9) && val->name[9]) {
95
- ptree = &ncons->permittedSubtrees;
96
- tval.name = val->name + 10;
97
- } else if (!strncmp(val->name, "excluded", 8) && val->name[8]) {
98
- ptree = &ncons->excludedSubtrees;
99
- tval.name = val->name + 9;
100
- } else {
101
- OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SYNTAX);
102
- goto err;
103
- }
104
- tval.value = val->value;
105
- sub = GENERAL_SUBTREE_new();
106
- if (!v2i_GENERAL_NAME_ex(sub->base, method, ctx, &tval, 1)) {
107
- goto err;
108
- }
109
- if (!*ptree) {
110
- *ptree = sk_GENERAL_SUBTREE_new_null();
111
- }
112
- if (!*ptree || !sk_GENERAL_SUBTREE_push(*ptree, sub)) {
113
- goto err;
59
+ // Note we cannot use `OPENSSL_strncasecmp` because that would stop
60
+ // iterating at NUL.
61
+ const uint8_t *a_data = CBS_data(a), *b_data = CBS_data(b);
62
+ for (size_t i = 0; i < CBS_len(a); i++) {
63
+ if (OPENSSL_tolower(a_data[i]) != OPENSSL_tolower(b_data[i])) {
64
+ return 0;
114
65
  }
115
- sub = NULL;
116
66
  }
67
+ return 1;
68
+ }
117
69
 
118
- return ncons;
119
-
120
- err:
121
- NAME_CONSTRAINTS_free(ncons);
122
- GENERAL_SUBTREE_free(sub);
123
- return NULL;
70
+ int has_suffix_case(const CBS *a, const CBS *b) {
71
+ if (CBS_len(a) < CBS_len(b)) {
72
+ return 0;
73
+ }
74
+ CBS copy = *a;
75
+ CBS_skip(&copy, CBS_len(a) - CBS_len(b));
76
+ return equal_case(&copy, b);
124
77
  }
125
78
 
126
- static int i2r_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, void *a,
127
- BIO *bp, int ind) {
128
- NAME_CONSTRAINTS *ncons = reinterpret_cast<NAME_CONSTRAINTS *>(a);
129
- do_i2r_name_constraints(method, ncons->permittedSubtrees, bp, ind,
130
- "Permitted");
131
- do_i2r_name_constraints(method, ncons->excludedSubtrees, bp, ind, "Excluded");
132
- return 1;
79
+ bool is_allowed_rfc822_local_part(const CBS *cbs) {
80
+ if (CBS_len(cbs) == 0) {
81
+ return false;
82
+ }
83
+ for (size_t i = 0; i < CBS_len(cbs); i++) {
84
+ uint8_t c = CBS_data(cbs)[i];
85
+ if (!(OPENSSL_isalnum(c) || c == '!' || c == '#' || c == '$' || c == '%' ||
86
+ c == '&' || c == '\'' || c == '*' || c == '+' || c == '-' ||
87
+ c == '/' || c == '=' || c == '?' || c == '^' || c == '_' ||
88
+ c == '`' || c == '{' || c == '|' || c == '}' || c == '~' ||
89
+ c == '.')) {
90
+ return false;
91
+ }
92
+ }
93
+ return true;
133
94
  }
134
95
 
135
- static int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
136
- STACK_OF(GENERAL_SUBTREE) *trees, BIO *bp,
137
- int ind, const char *name) {
138
- GENERAL_SUBTREE *tree;
139
- size_t i;
140
- if (sk_GENERAL_SUBTREE_num(trees) > 0) {
141
- BIO_printf(bp, "%*s%s:\n", ind, "", name);
96
+ bool is_allowed_rfc822_domain(const CBS *cbs) {
97
+ if (CBS_len(cbs) == 0) {
98
+ return false;
142
99
  }
143
- for (i = 0; i < sk_GENERAL_SUBTREE_num(trees); i++) {
144
- tree = sk_GENERAL_SUBTREE_value(trees, i);
145
- BIO_printf(bp, "%*s", ind + 2, "");
146
- if (tree->base->type == GEN_IPADD) {
147
- print_nc_ipadd(bp, tree->base->d.ip);
148
- } else {
149
- GENERAL_NAME_print(bp, tree->base);
100
+ for (size_t i = 0; i < CBS_len(cbs); i++) {
101
+ uint8_t c = CBS_data(cbs)[i];
102
+ if (!(OPENSSL_isalnum(c) || c == '-' || c == '.')) {
103
+ return false;
150
104
  }
151
- BIO_puts(bp, "\n");
152
105
  }
153
- return 1;
106
+ return true;
154
107
  }
155
108
 
156
- static int print_nc_ipadd(BIO *bp, const ASN1_OCTET_STRING *ip) {
157
- int i, len;
158
- unsigned char *p;
159
- p = ip->data;
160
- len = ip->length;
161
- BIO_puts(bp, "IP:");
162
- if (len == 8) {
163
- BIO_printf(bp, "%d.%d.%d.%d/%d.%d.%d.%d", p[0], p[1], p[2], p[3], p[4],
164
- p[5], p[6], p[7]);
165
- } else if (len == 32) {
166
- for (i = 0; i < 16; i++) {
167
- uint16_t v = ((uint16_t)p[0] << 8) | p[1];
168
- BIO_printf(bp, "%X", v);
169
- p += 2;
170
- if (i == 7) {
171
- BIO_puts(bp, "/");
172
- } else if (i != 15) {
173
- BIO_puts(bp, ":");
174
- }
109
+ // Removes the port part of a URI authority string, if present, leaving the
110
+ // host. Returns true if the port was syntactically valid (contained only
111
+ // digits), or was not present (vacuously valid).
112
+ bool nc_uri_remove_port(CBS *in_out) {
113
+ CBS host, unused;
114
+ if (CBS_get_until_first(in_out, &host, ':')) {
115
+ if (!CBS_skip(in_out, 1) ||
116
+ CBS_get_until_first_not_of(in_out, &unused, "0123456789")) {
117
+ return false;
175
118
  }
176
- } else {
177
- BIO_printf(bp, "IP Address:<invalid>");
119
+ *in_out = host;
120
+ return true;
178
121
  }
179
- return 1;
122
+ // There was no port.
123
+ return true;
180
124
  }
181
125
 
182
- //-
183
- // Check a certificate conforms to a specified set of constraints.
184
- // Return values:
185
- // X509_V_OK: All constraints obeyed.
186
- // X509_V_ERR_PERMITTED_VIOLATION: Permitted subtree violation.
187
- // X509_V_ERR_EXCLUDED_VIOLATION: Excluded subtree violation.
188
- // X509_V_ERR_SUBTREE_MINMAX: Min or max values present and matching type.
189
- // X509_V_ERR_UNSPECIFIED: Unspecified error.
190
- // X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: Unsupported constraint type.
191
- // X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: Bad or unsupported constraint
192
- // syntax.
193
- // X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: Bad or unsupported syntax of name.
194
-
195
- int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc) {
196
- int r, i;
197
- size_t j;
198
- X509_NAME *nm;
199
-
200
- nm = X509_get_subject_name(x);
201
-
202
- // Guard against certificates with an excessive number of names or
203
- // constraints causing a computationally expensive name constraints
204
- // check.
205
- size_t name_count =
206
- X509_NAME_entry_count(nm) + sk_GENERAL_NAME_num(x->altname);
207
- size_t constraint_count = sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) +
208
- sk_GENERAL_SUBTREE_num(nc->excludedSubtrees);
209
- size_t check_count = constraint_count * name_count;
210
- if (name_count < (size_t)X509_NAME_entry_count(nm) ||
211
- constraint_count < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) ||
212
- (constraint_count && check_count / constraint_count != name_count) ||
213
- check_count > 1 << 20) {
214
- return X509_V_ERR_UNSPECIFIED;
126
+ // Strips a single trailing dot from `host` if present.
127
+ // Per RFC 9499, we allow names to be written relative to the root (e.g.
128
+ // "www.example.com" is allowed even though technically the FQDN is
129
+ // "www.example.com." with a trailing dot representing the common root), and
130
+ // normalize names into this relative form for consistency.
131
+ void nc_uri_remove_trailing_dot(CBS *host) {
132
+ if (ends_with(host, '.')) {
133
+ uint8_t unused_byte;
134
+ BSSL_CHECK(CBS_get_last_u8(host, &unused_byte));
215
135
  }
136
+ }
216
137
 
217
- if (X509_NAME_entry_count(nm) > 0) {
218
- GENERAL_NAME gntmp;
219
- gntmp.type = GEN_DIRNAME;
220
- gntmp.d.directoryName = nm;
221
-
222
- r = nc_match(&gntmp, nc);
223
-
224
- if (r != X509_V_OK) {
225
- return r;
226
- }
227
-
228
- gntmp.type = GEN_EMAIL;
229
-
230
- // Process any email address attributes in subject name
231
-
232
- for (i = -1;;) {
233
- i = X509_NAME_get_index_by_NID(nm, NID_pkcs9_emailAddress, i);
234
- if (i == -1) {
235
- break;
138
+ // Returns whether the authority portion of a URI contains a syntactically valid
139
+ // fully qualified domain name (FQDN).
140
+ //
141
+ // RFC 3986, section 3.2:
142
+ // authority = [ userinfo "@" ] host [ ":" port ]
143
+ //
144
+ // RFC 5280, section 4.2.1.10: if a URI name constraint applies, applications
145
+ // MUST reject a certificate with a subjectAltName with a URI that "does not
146
+ // include an authority component with a host name specified as a fully
147
+ // qualified domain name".
148
+ //
149
+ // Therefore we reject IP addresses in this function, and reject authority
150
+ // components containing a userinfo component. The caller is responsible for
151
+ // having removed any colon and port component, and normalizing to DNS relative
152
+ // form by removing any trailing dot.
153
+ bool nc_uri_is_fqdn(const CBS *uri_authority) {
154
+ if (CBS_len(uri_authority) == 0) {
155
+ return false;
156
+ }
157
+ CBS host_to_parse = *uri_authority;
158
+
159
+ // Reject userinfo, and IPv6 addresses delimited by square brackets. IPv4
160
+ // addresses are rejected later.
161
+ CBS unused;
162
+ if (CBS_get_until_first_of(&host_to_parse, &unused, "@[]")) {
163
+ return false;
164
+ }
165
+
166
+ // Validate that the host is identified by a registered name. Following RFC
167
+ // 3986, section 3.2.2: we refer to the preferred name syntax rules for DNS
168
+ // registered names found in RFC 1034, section 3.5, modified by RFC 1123:
169
+ //
170
+ // <domain> ::= <subdomain> | " "
171
+ // <subdomain> ::= <label> | <subdomain> "." <label>
172
+ // <label> ::= <let-dig> [ [ <ldh-str> ] <let-dig> ]
173
+ // <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
174
+ // <let-dig-hyp> ::= <let-dig> | "-"
175
+ // <let-dig> ::= <letter> | <digit>
176
+ // <letter> ::= any one of the 52 alphabetic characters A through Z in
177
+ // upper case and a through z in lower case
178
+ // <digit> ::= any one of the ten digits 0 through 9
179
+ //
180
+ // Additionally:
181
+ // - The first and last character of each label is a letter or digit.
182
+ // - Label length is no more than 63 characters.
183
+ CBS label;
184
+ CBS_init(&label, nullptr, 0);
185
+ while (CBS_len(&host_to_parse) > 0) {
186
+ if (CBS_get_until_first(&host_to_parse, &label, '.')) {
187
+ // Consume the dot.
188
+ CBS_skip(&host_to_parse, 1);
189
+ // A trailing dot should have already been removed by the caller.
190
+ if (CBS_len(&host_to_parse) == 0) {
191
+ return false;
236
192
  }
237
- const X509_NAME_ENTRY *ne = X509_NAME_get_entry(nm, i);
238
- gntmp.d.rfc822Name = X509_NAME_ENTRY_get_data(ne);
239
- if (gntmp.d.rfc822Name->type != V_ASN1_IA5STRING) {
240
- return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
193
+ } else {
194
+ // This is the last label.
195
+ label = host_to_parse;
196
+ CBS_skip(&host_to_parse, CBS_len(&label));
197
+ }
198
+ if (CBS_len(&label) == 0 || CBS_len(&label) > 63 ||
199
+ !OPENSSL_isalnum(CBS_data(&label)[0]) ||
200
+ !OPENSSL_isalnum(CBS_data(&label)[CBS_len(&label) - 1])) {
201
+ return false;
202
+ }
203
+ for (uint8_t c : Span<const uint8_t>(label)) {
204
+ if (!OPENSSL_isalnum(c) && c != '-') {
205
+ return false;
241
206
  }
207
+ }
208
+ }
242
209
 
243
- r = nc_match(&gntmp, nc);
244
-
245
- if (r != X509_V_OK) {
246
- return r;
210
+ // Reject IP addresses by looking for (following the WHATWG URL parser) a
211
+ // completely numeric (decimal, octal, or hex) last component. An empty final
212
+ // component (e.g. if the host itself was empty) is also rejected here.
213
+ // https://url.spec.whatwg.org/#concept-host-parser
214
+ // https://url.spec.whatwg.org/#ends-in-a-number-checker
215
+ //
216
+ // Check for 0x or 0X followed by zero or more hex digits.
217
+ if (starts_with_str(&label, "0x") || starts_with_str(&label, "0X")) {
218
+ for (uint8_t c : Span<const uint8_t>(label).subspan(2)) {
219
+ if (!OPENSSL_isxdigit(c)) {
220
+ return true;
247
221
  }
248
222
  }
223
+ return false;
249
224
  }
250
-
251
- for (j = 0; j < sk_GENERAL_NAME_num(x->altname); j++) {
252
- GENERAL_NAME *gen = sk_GENERAL_NAME_value(x->altname, j);
253
- r = nc_match(gen, nc);
254
- if (r != X509_V_OK) {
255
- return r;
225
+ // Check for decimal or octal digits.
226
+ for (uint8_t c : Span<const uint8_t>(label)) {
227
+ if (!OPENSSL_isdigit(c)) {
228
+ return true;
256
229
  }
257
230
  }
258
-
259
- return X509_V_OK;
231
+ return false;
260
232
  }
261
233
 
262
- static int nc_match(GENERAL_NAME *gen, NAME_CONSTRAINTS *nc) {
263
- GENERAL_SUBTREE *sub;
264
- int r, match = 0;
265
- size_t i;
234
+ // Performs basic parsing of a URI to extract the host portion for name
235
+ // constraints matching. This is not a full URI parser. This returns false if no
236
+ // valid URI host could be obtained, which means the certificate should be
237
+ // rejected.
238
+ bool nc_get_valid_uri_host(CBS *out, const ASN1_IA5STRING *uri_name) {
239
+ CBS uri_cbs;
240
+ CBS_init(&uri_cbs, uri_name->data, uri_name->length);
266
241
 
267
- // Permitted subtrees: if any subtrees exist of matching the type at
268
- // least one subtree must match.
242
+ // RFC 3986, section 3:
243
+ // URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
269
244
 
270
- for (i = 0; i < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees); i++) {
271
- sub = sk_GENERAL_SUBTREE_value(nc->permittedSubtrees, i);
272
- if (gen->type != sub->base->type) {
273
- continue;
274
- }
275
- if (sub->minimum || sub->maximum) {
276
- return X509_V_ERR_SUBTREE_MINMAX;
277
- }
278
- // If we already have a match don't bother trying any more
279
- if (match == 2) {
280
- continue;
281
- }
282
- if (match == 0) {
283
- match = 1;
284
- }
285
- r = nc_match_single(gen, sub->base);
286
- if (r == X509_V_OK) {
287
- match = 2;
288
- } else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
289
- return r;
245
+ // Check for the scheme and skip past it.
246
+ // RFC 3986, section 3.1:
247
+ // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
248
+ CBS scheme;
249
+ uint8_t byte;
250
+ if (!CBS_get_until_first(&uri_cbs, &scheme, ':') ||
251
+ // Consume the colon.
252
+ !CBS_get_u8(&uri_cbs, &byte) ||
253
+ // Test that the first byte is a letter.
254
+ !CBS_get_u8(&scheme, &byte) || !OPENSSL_isalpha(byte)) {
255
+ return false;
256
+ }
257
+ // Check that the rest of the scheme consists of allowed characters.
258
+ for (uint8_t c : Span<const uint8_t>(scheme)) {
259
+ if (!OPENSSL_isalnum(c) && c != '+' && c != '-' && c != '.') {
260
+ return false;
290
261
  }
291
262
  }
292
263
 
293
- if (match == 1) {
294
- return X509_V_ERR_PERMITTED_VIOLATION;
264
+ // RFC 3986, section 3.2:
265
+ // The authority component is preceded by a double slash ("//") and is
266
+ // terminated by the next slash ("/"), question mark ("?"), or number
267
+ // sign ("#") character, or by the end of the URI.
268
+ if (!CBS_get_u8(&uri_cbs, &byte) || byte != '/' ||
269
+ !CBS_get_u8(&uri_cbs, &byte) || byte != '/') {
270
+ return false;
295
271
  }
296
-
297
- // Excluded subtrees: must not match any of these
298
-
299
- for (i = 0; i < sk_GENERAL_SUBTREE_num(nc->excludedSubtrees); i++) {
300
- sub = sk_GENERAL_SUBTREE_value(nc->excludedSubtrees, i);
301
- if (gen->type != sub->base->type) {
302
- continue;
303
- }
304
- if (sub->minimum || sub->maximum) {
305
- return X509_V_ERR_SUBTREE_MINMAX;
306
- }
307
-
308
- r = nc_match_single(gen, sub->base);
309
- if (r == X509_V_OK) {
310
- return X509_V_ERR_EXCLUDED_VIOLATION;
311
- } else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
312
- return r;
313
- }
272
+ CBS authority;
273
+ if (!CBS_get_until_first_of(&uri_cbs, &authority, "/?#")) {
274
+ authority = uri_cbs;
314
275
  }
315
276
 
316
- return X509_V_OK;
317
- }
318
-
319
- static int nc_match_single(GENERAL_NAME *gen, GENERAL_NAME *base) {
320
- switch (base->type) {
321
- case GEN_DIRNAME:
322
- return nc_dn(gen->d.directoryName, base->d.directoryName);
323
-
324
- case GEN_DNS:
325
- return nc_dns(gen->d.dNSName, base->d.dNSName);
326
-
327
- case GEN_EMAIL:
328
- return nc_email(gen->d.rfc822Name, base->d.rfc822Name);
277
+ // RFC 5280, section 4.2.1.10: reject URI with no authority component.
278
+ if (CBS_len(&authority) == 0) {
279
+ return false;
280
+ }
329
281
 
330
- case GEN_URI:
331
- return nc_uri(gen->d.uniformResourceIdentifier,
332
- base->d.uniformResourceIdentifier);
282
+ if (!nc_uri_remove_port(&authority)) {
283
+ return false;
284
+ }
333
285
 
334
- default:
335
- return X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE;
286
+ CBS host = authority;
287
+ nc_uri_remove_trailing_dot(&host);
288
+ if (!nc_uri_is_fqdn(&host)) {
289
+ return false;
336
290
  }
291
+ *out = host;
292
+ return true;
337
293
  }
338
294
 
339
- // directoryName name constraint matching. The canonical encoding of
340
- // X509_NAME makes this comparison easy. It is matched if the subtree is a
341
- // subset of the name.
342
-
343
- static int nc_dn(X509_NAME *nm, X509_NAME *base) {
344
- // Ensure canonical encodings are up to date.
345
- if (nm->modified && i2d_X509_NAME(nm, NULL) < 0) {
295
+ // directoryName name constraint matching. The canonical encoding of X509_NAME
296
+ // makes this comparison easy. It is matched if the constraint is a prefix of
297
+ // the name.
298
+ int nc_dn(const X509_NAME *nm, const X509_NAME *base) {
299
+ const X509_NAME_CACHE *nm_cache = x509_name_get_cache(nm);
300
+ if (nm_cache == nullptr) {
346
301
  return X509_V_ERR_OUT_OF_MEM;
347
302
  }
348
- if (base->modified && i2d_X509_NAME(base, NULL) < 0) {
303
+ const X509_NAME_CACHE *base_cache = x509_name_get_cache(base);
304
+ if (base_cache == nullptr) {
349
305
  return X509_V_ERR_OUT_OF_MEM;
350
306
  }
351
- if (base->canon_enclen > nm->canon_enclen) {
307
+ if (base_cache->canon.size() > nm_cache->canon.size()) {
352
308
  return X509_V_ERR_PERMITTED_VIOLATION;
353
309
  }
354
- if (OPENSSL_memcmp(base->canon_enc, nm->canon_enc, base->canon_enclen)) {
310
+ if (base_cache->canon !=
311
+ Span(nm_cache->canon).first(base_cache->canon.size())) {
355
312
  return X509_V_ERR_PERMITTED_VIOLATION;
356
313
  }
357
314
  return X509_V_OK;
358
315
  }
359
316
 
360
- static int starts_with(const CBS *cbs, uint8_t c) {
361
- return CBS_len(cbs) > 0 && CBS_data(cbs)[0] == c;
362
- }
363
-
364
- static int equal_case(const CBS *a, const CBS *b) {
365
- if (CBS_len(a) != CBS_len(b)) {
366
- return 0;
367
- }
368
- // Note we cannot use |OPENSSL_strncasecmp| because that would stop
369
- // iterating at NUL.
370
- const uint8_t *a_data = CBS_data(a), *b_data = CBS_data(b);
371
- for (size_t i = 0; i < CBS_len(a); i++) {
372
- if (OPENSSL_tolower(a_data[i]) != OPENSSL_tolower(b_data[i])) {
373
- return 0;
374
- }
375
- }
376
- return 1;
377
- }
378
-
379
- static int has_suffix_case(const CBS *a, const CBS *b) {
380
- if (CBS_len(a) < CBS_len(b)) {
381
- return 0;
382
- }
383
- CBS copy = *a;
384
- CBS_skip(&copy, CBS_len(a) - CBS_len(b));
385
- return equal_case(&copy, b);
386
- }
387
-
388
- static int nc_dns(const ASN1_IA5STRING *dns, const ASN1_IA5STRING *base) {
317
+ // DNS name constraint matching.
318
+ int nc_dns(const ASN1_IA5STRING *dns, const ASN1_IA5STRING *base,
319
+ bool excluding) {
389
320
  CBS dns_cbs, base_cbs;
390
321
  CBS_init(&dns_cbs, dns->data, dns->length);
391
322
  CBS_init(&base_cbs, base->data, base->length);
@@ -395,7 +326,35 @@ static int nc_dns(const ASN1_IA5STRING *dns, const ASN1_IA5STRING *base) {
395
326
  return X509_V_OK;
396
327
  }
397
328
 
398
- // If |base_cbs| begins with a '.', do a simple suffix comparison. This is
329
+ // Normalize absolute DNS names by removing the trailing dot, if any.
330
+ if (ends_with(&dns_cbs, '.')) {
331
+ uint8_t unused;
332
+ CBS_get_last_u8(&dns_cbs, &unused);
333
+ }
334
+ if (ends_with(&base_cbs, '.')) {
335
+ uint8_t unused;
336
+ CBS_get_last_u8(&base_cbs, &unused);
337
+ }
338
+
339
+ // Wildcard partial-match handling ("*.bar.com" matching name constraint
340
+ // "foo.bar.com"). This only handles the case where the the dnsname and the
341
+ // constraint match after removing the leftmost label, otherwise it is handled
342
+ // by falling through to the check of whether the dnsname is fully within or
343
+ // fully outside of the constraint.
344
+ if (excluding && starts_with_str(&dns_cbs, "*.")) {
345
+ CBS unused;
346
+ CBS base_parent_cbs = base_cbs;
347
+ CBS dns_parent_cbs = dns_cbs;
348
+ CBS_skip(&dns_parent_cbs, 2);
349
+ if (CBS_get_until_first(&base_parent_cbs, &unused, '.') &&
350
+ CBS_skip(&base_parent_cbs, 1)) {
351
+ if (equal_case(&dns_parent_cbs, &base_parent_cbs)) {
352
+ return X509_V_OK;
353
+ }
354
+ }
355
+ }
356
+
357
+ // If `base_cbs` begins with a '.', do a simple suffix comparison. This is
399
358
  // not part of RFC5280, but is part of OpenSSL's original behavior.
400
359
  if (starts_with(&base_cbs, '.')) {
401
360
  if (has_suffix_case(&dns_cbs, &base_cbs)) {
@@ -421,94 +380,419 @@ static int nc_dns(const ASN1_IA5STRING *dns, const ASN1_IA5STRING *base) {
421
380
  return X509_V_OK;
422
381
  }
423
382
 
424
- static int nc_email(const ASN1_IA5STRING *eml, const ASN1_IA5STRING *base) {
383
+ int nc_email(const ASN1_IA5STRING *eml, const ASN1_IA5STRING *base,
384
+ bool case_insensitive_local_part) {
425
385
  CBS eml_cbs, base_cbs;
426
386
  CBS_init(&eml_cbs, eml->data, eml->length);
427
387
  CBS_init(&base_cbs, base->data, base->length);
428
388
 
429
- // TODO(davidben): In OpenSSL 1.1.1, this switched from the first '@' to the
430
- // last one. Match them here, or perhaps do an actual parse. Looks like
431
- // multiple '@'s may be allowed in quoted strings.
432
- CBS eml_local, base_local;
433
- if (!CBS_get_until_first(&eml_cbs, &eml_local, '@')) {
389
+ CBS eml_local;
390
+ if (!CBS_get_until_first(&eml_cbs, &eml_local, '@') ||
391
+ !CBS_skip(&eml_cbs, 1)) {
434
392
  return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
435
393
  }
436
- int base_has_at = CBS_get_until_first(&base_cbs, &base_local, '@');
394
+ CBS eml_domain = eml_cbs;
437
395
 
438
- // Special case: initial '.' is RHS match
439
- if (!base_has_at && starts_with(&base_cbs, '.')) {
440
- if (has_suffix_case(&eml_cbs, &base_cbs)) {
441
- return X509_V_OK;
396
+ // Exactly one '@' in eml.
397
+ CBS unused;
398
+ if (CBS_get_until_first(&eml_cbs, &unused, '@')) {
399
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
400
+ }
401
+
402
+ if (!is_allowed_rfc822_local_part(&eml_local) ||
403
+ !is_allowed_rfc822_domain(&eml_domain)) {
404
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
405
+ }
406
+
407
+ CBS base_local, base_domain;
408
+ bool base_has_at = CBS_get_until_first(&base_cbs, &base_local, '@');
409
+ if (base_has_at) {
410
+ CBS_skip(&base_cbs, 1);
411
+ base_domain = base_cbs;
412
+ if (CBS_get_until_first(&base_cbs, &unused, '@')) {
413
+ // If we did the full parsing then it is possible for a @ to be in a
414
+ // quoted local-part of the name, but we don't do that, so just error if @
415
+ // appears more than once.
416
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
442
417
  }
443
- return X509_V_ERR_PERMITTED_VIOLATION;
418
+ if (!is_allowed_rfc822_local_part(&base_local)) {
419
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
420
+ }
421
+ } else {
422
+ base_domain = base_cbs;
444
423
  }
445
424
 
446
- // If we have anything before '@' match local part
425
+ if (!is_allowed_rfc822_domain(&base_domain)) {
426
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
427
+ }
428
+
429
+ // RFC 5280 section 4.2.1.10:
430
+ // To indicate a particular mailbox, the constraint is the complete mail
431
+ // address. For example, "root@example.com" indicates the root mailbox on
432
+ // the host "example.com".
447
433
  if (base_has_at) {
448
- // TODO(davidben): This interprets a constraint of "@example.com" as
449
- // "example.com", which is not part of RFC5280.
450
- if (CBS_len(&base_local) > 0) {
451
- // Case sensitive match of local part
452
- if (!CBS_mem_equal(&base_local, CBS_data(&eml_local),
453
- CBS_len(&eml_local))) {
454
- return X509_V_ERR_PERMITTED_VIOLATION;
455
- }
434
+ bool local_part_matches =
435
+ case_insensitive_local_part
436
+ ? equal_case(&base_local, &eml_local)
437
+ : CBS_mem_equal(&base_local, CBS_data(&eml_local),
438
+ CBS_len(&eml_local));
439
+ bool domain_matches = equal_case(&base_domain, &eml_domain);
440
+ if (!local_part_matches || !domain_matches) {
441
+ return X509_V_ERR_PERMITTED_VIOLATION;
456
442
  }
457
- // Position base after '@'
458
- assert(starts_with(&base_cbs, '@'));
459
- CBS_skip(&base_cbs, 1);
443
+ return X509_V_OK;
460
444
  }
461
445
 
462
- // Just have hostname left to match: case insensitive
463
- assert(starts_with(&eml_cbs, '@'));
464
- CBS_skip(&eml_cbs, 1);
465
- if (!equal_case(&base_cbs, &eml_cbs)) {
446
+ // RFC 5280 section 4.2.1.10:
447
+ // To specify any address within a domain, the constraint is specified with a
448
+ // leading period (as with URIs). For example, ".example.com" indicates all
449
+ // the Internet mail addresses in the domain "example.com", but not Internet
450
+ // mail addresses on the host "example.com".
451
+ if (starts_with(&base_domain, '.')) {
452
+ if (has_suffix_case(&eml_domain, &base_domain)) {
453
+ return X509_V_OK;
454
+ }
466
455
  return X509_V_ERR_PERMITTED_VIOLATION;
467
456
  }
468
457
 
469
- return X509_V_OK;
458
+ // RFC 5280 section 4.2.1.10:
459
+ // To indicate all Internet mail addresses on a particular host, the
460
+ // constraint is specified as the host name. For example, the constraint
461
+ // "example.com" is satisfied by any mail address at the host "example.com".
462
+ if (equal_case(&base_domain, &eml_domain)) {
463
+ return X509_V_OK;
464
+ }
465
+ return X509_V_ERR_PERMITTED_VIOLATION;
470
466
  }
471
467
 
472
- static int nc_uri(const ASN1_IA5STRING *uri, const ASN1_IA5STRING *base) {
473
- CBS uri_cbs, base_cbs;
474
- CBS_init(&uri_cbs, uri->data, uri->length);
475
- CBS_init(&base_cbs, base->data, base->length);
476
-
477
- // Check for foo:// and skip past it
478
- CBS scheme;
479
- uint8_t byte;
480
- if (!CBS_get_until_first(&uri_cbs, &scheme, ':') ||
481
- !CBS_skip(&uri_cbs, 1) || // Skip the colon
482
- !CBS_get_u8(&uri_cbs, &byte) || byte != '/' ||
483
- !CBS_get_u8(&uri_cbs, &byte) || byte != '/') {
468
+ int nc_uri(const ASN1_IA5STRING *uri, const ASN1_IA5STRING *base) {
469
+ // Parse a URI name to extract the host name as a fully qualified domain name.
470
+ CBS uri_host;
471
+ if (!nc_get_valid_uri_host(&uri_host, uri)) {
484
472
  return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
485
473
  }
486
474
 
487
- // Look for a port indicator as end of hostname first. Otherwise look for
488
- // trailing slash, or the end of the string.
489
- // TODO(davidben): This is not a correct URI parser and mishandles IPv6
490
- // literals.
491
- CBS host;
492
- if (!CBS_get_until_first(&uri_cbs, &host, ':') &&
493
- !CBS_get_until_first(&uri_cbs, &host, '/')) {
494
- host = uri_cbs;
475
+ CBS base_cbs;
476
+ CBS_init(&base_cbs, base->data, base->length);
477
+ nc_uri_remove_trailing_dot(&base_cbs);
478
+
479
+ // Make a copy of the name constraint string, which will be modified and
480
+ // checked for FQDN validity.
481
+ CBS base_fqdn = base_cbs;
482
+
483
+ // If present, strip a leading dot, which denotes a name constraint that
484
+ // matches all DNS subdomains.
485
+ const bool base_has_leading_dot = starts_with(&base_fqdn, '.');
486
+ if (base_has_leading_dot) {
487
+ CBS_skip(&base_fqdn, 1);
495
488
  }
496
489
 
497
- if (CBS_len(&host) == 0) {
498
- return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
490
+ // Validate that the name constraint is a proper FQDN.
491
+ if (!nc_uri_is_fqdn(&base_fqdn)) {
492
+ return X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX;
499
493
  }
500
494
 
501
495
  // Special case: initial '.' is RHS match
502
- if (starts_with(&base_cbs, '.')) {
503
- if (has_suffix_case(&host, &base_cbs)) {
496
+ if (base_has_leading_dot) {
497
+ if (has_suffix_case(&uri_host, &base_cbs)) {
504
498
  return X509_V_OK;
505
499
  }
506
500
  return X509_V_ERR_PERMITTED_VIOLATION;
507
501
  }
508
502
 
509
- if (!equal_case(&base_cbs, &host)) {
503
+ if (!equal_case(&base_cbs, &uri_host)) {
510
504
  return X509_V_ERR_PERMITTED_VIOLATION;
511
505
  }
512
506
 
513
507
  return X509_V_OK;
514
508
  }
509
+
510
+ int nc_match_single(const GENERAL_NAME *gen, const GENERAL_NAME *base,
511
+ bool excluding, bool case_insensitive_local_part) {
512
+ switch (base->type) {
513
+ case GEN_DIRNAME:
514
+ return nc_dn(gen->d.directoryName, base->d.directoryName);
515
+
516
+ case GEN_DNS:
517
+ return nc_dns(gen->d.dNSName, base->d.dNSName, excluding);
518
+
519
+ case GEN_EMAIL:
520
+ return nc_email(gen->d.rfc822Name, base->d.rfc822Name,
521
+ case_insensitive_local_part);
522
+
523
+ case GEN_URI:
524
+ return nc_uri(gen->d.uniformResourceIdentifier,
525
+ base->d.uniformResourceIdentifier);
526
+
527
+ default:
528
+ return X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE;
529
+ }
530
+ }
531
+
532
+ int nc_match(const GENERAL_NAME *gen, const NAME_CONSTRAINTS *nc,
533
+ bool case_insensitive_exclude_localpart) {
534
+ // Permitted subtrees: if any subtrees exist of the name type, then at least
535
+ // one subtree must match. If no subtrees match the type, then that name type
536
+ // is unconstrained.
537
+ enum {
538
+ kUnconstrainedNameType = 0,
539
+ kNoMatch,
540
+ kMatch,
541
+ } match_status = kUnconstrainedNameType;
542
+ for (const GENERAL_SUBTREE *sub : nc->permittedSubtrees) {
543
+ if (gen->type != sub->base->type) {
544
+ continue;
545
+ }
546
+ if (sub->minimum || sub->maximum) {
547
+ return X509_V_ERR_SUBTREE_MINMAX;
548
+ }
549
+ // If we already have a match don't bother trying any more
550
+ if (match_status == kMatch) {
551
+ continue;
552
+ }
553
+ match_status = kNoMatch;
554
+ int r = nc_match_single(gen, sub->base, /*excluding=*/false,
555
+ /*case_insensitive_local_part=*/false);
556
+ if (r == X509_V_OK) {
557
+ match_status = kMatch;
558
+ } else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
559
+ return r;
560
+ }
561
+ }
562
+
563
+ if (match_status == kNoMatch) {
564
+ return X509_V_ERR_PERMITTED_VIOLATION;
565
+ }
566
+
567
+ // Excluded subtrees: must not match any of these
568
+ for (const GENERAL_SUBTREE *sub : nc->excludedSubtrees) {
569
+ if (gen->type != sub->base->type) {
570
+ continue;
571
+ }
572
+ if (sub->minimum || sub->maximum) {
573
+ return X509_V_ERR_SUBTREE_MINMAX;
574
+ }
575
+
576
+ int r = nc_match_single(gen, sub->base, /*excluding=*/true,
577
+ /*case_insensitive_local_part=*/
578
+ case_insensitive_exclude_localpart);
579
+ if (r == X509_V_OK) {
580
+ return X509_V_ERR_EXCLUDED_VIOLATION;
581
+ } else if (r != X509_V_ERR_PERMITTED_VIOLATION) {
582
+ return r;
583
+ }
584
+ }
585
+
586
+ return X509_V_OK;
587
+ }
588
+
589
+ int print_nc_ipadd(BIO *bp, const ASN1_OCTET_STRING *ip) {
590
+ int i, len;
591
+ unsigned char *p;
592
+ p = ip->data;
593
+ len = ip->length;
594
+ BIO_puts(bp, "IP:");
595
+ if (len == 8) {
596
+ BIO_printf(bp, "%d.%d.%d.%d/%d.%d.%d.%d", p[0], p[1], p[2], p[3], p[4],
597
+ p[5], p[6], p[7]);
598
+ } else if (len == 32) {
599
+ for (i = 0; i < 16; i++) {
600
+ uint16_t v = ((uint16_t)p[0] << 8) | p[1];
601
+ BIO_printf(bp, "%X", v);
602
+ p += 2;
603
+ if (i == 7) {
604
+ BIO_puts(bp, "/");
605
+ } else if (i != 15) {
606
+ BIO_puts(bp, ":");
607
+ }
608
+ }
609
+ } else {
610
+ BIO_printf(bp, "IP Address:<invalid>");
611
+ }
612
+ return 1;
613
+ }
614
+
615
+ int do_i2r_name_constraints(const X509V3_EXT_METHOD *method,
616
+ const STACK_OF(GENERAL_SUBTREE) *trees, BIO *bp,
617
+ int ind, const char *name) {
618
+ if (sk_GENERAL_SUBTREE_num(trees) > 0) {
619
+ BIO_printf(bp, "%*s%s:\n", ind, "", name);
620
+ }
621
+ for (const GENERAL_SUBTREE *tree : trees) {
622
+ BIO_printf(bp, "%*s", ind + 2, "");
623
+ if (tree->base->type == GEN_IPADD) {
624
+ print_nc_ipadd(bp, tree->base->d.ip);
625
+ } else {
626
+ GENERAL_NAME_print(bp, tree->base);
627
+ }
628
+ BIO_puts(bp, "\n");
629
+ }
630
+ return 1;
631
+ }
632
+
633
+ int i2r_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, void *a, BIO *bp,
634
+ int ind) {
635
+ NAME_CONSTRAINTS *ncons = reinterpret_cast<NAME_CONSTRAINTS *>(a);
636
+ do_i2r_name_constraints(method, ncons->permittedSubtrees, bp, ind,
637
+ "Permitted");
638
+ do_i2r_name_constraints(method, ncons->excludedSubtrees, bp, ind, "Excluded");
639
+ return 1;
640
+ }
641
+
642
+ void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method,
643
+ const X509V3_CTX *ctx,
644
+ const STACK_OF(CONF_VALUE) *nval) {
645
+ UniquePtr<NAME_CONSTRAINTS> ncons(NAME_CONSTRAINTS_new());
646
+ if (!ncons) {
647
+ return nullptr;
648
+ }
649
+ for (const CONF_VALUE *val : nval) {
650
+ CONF_VALUE tval;
651
+ STACK_OF(GENERAL_SUBTREE) **ptree = nullptr;
652
+ if (!strncmp(val->name, "permitted", 9) && val->name[9]) {
653
+ ptree = &ncons->permittedSubtrees;
654
+ tval.name = val->name + 10;
655
+ } else if (!strncmp(val->name, "excluded", 8) && val->name[8]) {
656
+ ptree = &ncons->excludedSubtrees;
657
+ tval.name = val->name + 9;
658
+ } else {
659
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SYNTAX);
660
+ return nullptr;
661
+ }
662
+ tval.value = val->value;
663
+ UniquePtr<GENERAL_SUBTREE> sub(GENERAL_SUBTREE_new());
664
+ if (sub == nullptr ||
665
+ !v2i_GENERAL_NAME_ex(sub->base, method, ctx, &tval, 1)) {
666
+ return nullptr;
667
+ }
668
+ if (!*ptree) {
669
+ *ptree = sk_GENERAL_SUBTREE_new_null();
670
+ }
671
+ if (!*ptree || !PushToStack(*ptree, std::move(sub))) {
672
+ return nullptr;
673
+ }
674
+ }
675
+
676
+ return ncons.release();
677
+ }
678
+
679
+ } // namespace
680
+ BSSL_NAMESPACE_END
681
+
682
+ using namespace bssl;
683
+
684
+ const X509V3_EXT_METHOD bssl::v3_name_constraints = {
685
+ NID_name_constraints,
686
+ 0,
687
+ ASN1_ITEM_ref(NAME_CONSTRAINTS),
688
+ nullptr,
689
+ nullptr,
690
+ nullptr,
691
+ nullptr,
692
+ nullptr,
693
+ nullptr,
694
+ nullptr,
695
+ v2i_NAME_CONSTRAINTS,
696
+ i2r_NAME_CONSTRAINTS,
697
+ nullptr,
698
+ nullptr,
699
+ };
700
+
701
+ ASN1_SEQUENCE(GENERAL_SUBTREE) = {
702
+ ASN1_SIMPLE(GENERAL_SUBTREE, base, GENERAL_NAME),
703
+ ASN1_IMP_OPT(GENERAL_SUBTREE, minimum, ASN1_INTEGER, 0),
704
+ ASN1_IMP_OPT(GENERAL_SUBTREE, maximum, ASN1_INTEGER, 1),
705
+ } ASN1_SEQUENCE_END(GENERAL_SUBTREE)
706
+
707
+ ASN1_SEQUENCE(NAME_CONSTRAINTS) = {
708
+ ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, permittedSubtrees,
709
+ GENERAL_SUBTREE, 0),
710
+ ASN1_IMP_SEQUENCE_OF_OPT(NAME_CONSTRAINTS, excludedSubtrees,
711
+ GENERAL_SUBTREE, 1),
712
+ } ASN1_SEQUENCE_END(NAME_CONSTRAINTS)
713
+
714
+ IMPLEMENT_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)
715
+ IMPLEMENT_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)
716
+
717
+ //-
718
+ // Check a certificate conforms to a specified set of constraints.
719
+ // Return values:
720
+ // X509_V_OK: All constraints obeyed.
721
+ // X509_V_ERR_PERMITTED_VIOLATION: Permitted subtree violation.
722
+ // X509_V_ERR_EXCLUDED_VIOLATION: Excluded subtree violation.
723
+ // X509_V_ERR_SUBTREE_MINMAX: Min or max values present and matching type.
724
+ // X509_V_ERR_UNSPECIFIED: Unspecified error.
725
+ // X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: Unsupported constraint type.
726
+ // X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: Bad or unsupported constraint
727
+ // syntax.
728
+ // X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: Bad or unsupported syntax of name.
729
+ int NAME_CONSTRAINTS_check(const X509 *x, const NAME_CONSTRAINTS *nc) {
730
+ const X509_NAME *nm = X509_get_subject_name(x);
731
+
732
+ // Guard against certificates with an excessive number of names or
733
+ // constraints causing a computationally expensive name constraints
734
+ // check.
735
+ const auto *x_impl = FromOpaque(x);
736
+ size_t name_count =
737
+ X509_NAME_entry_count(nm) + sk_GENERAL_NAME_num(x_impl->altname);
738
+ size_t constraint_count = sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) +
739
+ sk_GENERAL_SUBTREE_num(nc->excludedSubtrees);
740
+ size_t check_count = constraint_count * name_count;
741
+ if (name_count < (size_t)X509_NAME_entry_count(nm) ||
742
+ constraint_count < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) ||
743
+ (constraint_count && check_count / constraint_count != name_count) ||
744
+ check_count > 1 << 20) {
745
+ return X509_V_ERR_UNSPECIFIED;
746
+ }
747
+
748
+ if (X509_NAME_entry_count(nm) > 0) {
749
+ GENERAL_NAME gntmp;
750
+ gntmp.type = GEN_DIRNAME;
751
+ gntmp.d.directoryName = const_cast<X509_NAME *>(nm);
752
+
753
+ int r = nc_match(&gntmp, nc, /*case_insensitive_exclude_localpart=*/false);
754
+ if (r != X509_V_OK) {
755
+ return r;
756
+ }
757
+
758
+ gntmp.type = GEN_EMAIL;
759
+
760
+ // Process any email address attributes in subject name
761
+ for (int i = -1;;) {
762
+ i = X509_NAME_get_index_by_NID(nm, NID_pkcs9_emailAddress, i);
763
+ if (i == -1) {
764
+ break;
765
+ }
766
+ const X509_NAME_ENTRY *ne = X509_NAME_get_entry(nm, i);
767
+ gntmp.d.rfc822Name = X509_NAME_ENTRY_get_data(ne);
768
+ if (gntmp.d.rfc822Name->type != V_ASN1_IA5STRING) {
769
+ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
770
+ }
771
+
772
+ // Whether local_part should be matched case-sensitive or not is somewhat
773
+ // unclear. RFC 2821 says that it should be case-sensitive. RFC 2985 says
774
+ // that emailAddress attributes in a Name are fully case-insensitive.
775
+ // Some other verifier implementations always do local-part comparison
776
+ // case-sensitive, while some always do it case-insensitive. Many but not
777
+ // all SMTP servers interpret addresses as case-insensitive.
778
+ //
779
+ // Give how poorly specified this is, and the conflicting implementations
780
+ // in the wild, this implementation will do case-insensitive match for
781
+ // excluded names from the subject to avoid potentially allowing
782
+ // something that wasn't expected.
783
+ r = nc_match(&gntmp, nc, /*case_insensitive_exclude_localpart=*/true);
784
+ if (r != X509_V_OK) {
785
+ return r;
786
+ }
787
+ }
788
+ }
789
+
790
+ for (const GENERAL_NAME *gen : x_impl->altname) {
791
+ int r = nc_match(gen, nc, /*case_insensitive_exclude_localpart=*/false);
792
+ if (r != X509_V_OK) {
793
+ return r;
794
+ }
795
+ }
796
+
797
+ return X509_V_OK;
798
+ }