grpc 1.84.1 → 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.

Potentially problematic release.


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

Files changed (1005) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/etc/roots.pem +7940 -6467
  4. data/include/grpc/event_engine/memory_allocator.h +1 -0
  5. data/include/grpc/grpc.h +3 -0
  6. data/include/grpc/grpc_security_constants.h +2 -0
  7. data/include/grpc/impl/channel_arg_names.h +4 -0
  8. data/src/core/call/call_filters.h +10 -10
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  10. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  11. data/src/core/call/filter_fusion.h +15 -15
  12. data/src/core/call/interception_chain.h +3 -3
  13. data/src/core/call/metadata_batch.cc +1 -0
  14. data/src/core/call/metadata_batch.h +45 -33
  15. data/src/core/call/parsed_metadata.h +3 -3
  16. data/src/core/call/request_buffer.cc +6 -6
  17. data/src/core/call/request_buffer.h +1 -1
  18. data/src/core/channelz/channel_trace.cc +5 -5
  19. data/src/core/channelz/channel_trace.h +1 -1
  20. data/src/core/channelz/channelz.cc +9 -9
  21. data/src/core/channelz/channelz.h +12 -12
  22. data/src/core/channelz/channelz_registry.cc +10 -10
  23. data/src/core/channelz/ztrace_collector.h +5 -5
  24. data/src/core/client_channel/client_channel.cc +4 -4
  25. data/src/core/client_channel/client_channel_filter.cc +14 -14
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  27. data/src/core/client_channel/subchannel.cc +24 -23
  28. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  29. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  30. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  31. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  32. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  33. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  34. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  35. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  39. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  40. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  41. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  42. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  43. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  44. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  45. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  46. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  48. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  50. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  51. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  53. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  54. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  55. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  56. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  57. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  59. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  61. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  63. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  65. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  66. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  67. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  68. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  70. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  71. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  72. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  73. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  74. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  76. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  85. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  87. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  97. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  98. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  99. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  100. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  101. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  102. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  103. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  104. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  105. data/src/core/handshaker/handshaker.cc +4 -4
  106. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  107. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  108. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  109. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  110. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  111. data/src/core/lib/channel/channel_args.cc +20 -0
  112. data/src/core/lib/channel/channel_args.h +17 -17
  113. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  114. data/src/core/lib/channel/promise_based_filter.h +66 -27
  115. data/src/core/lib/debug/trace_flags.cc +2 -0
  116. data/src/core/lib/debug/trace_flags.h +1 -0
  117. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  118. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  119. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  120. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  121. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  122. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  123. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  124. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  126. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  127. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  128. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  129. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  132. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  134. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  135. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  136. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  137. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  138. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  139. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  141. data/src/core/lib/experiments/experiments.cc +48 -0
  142. data/src/core/lib/experiments/experiments.h +24 -0
  143. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  144. data/src/core/lib/iomgr/buffer_list.h +1 -1
  145. data/src/core/lib/iomgr/combiner.cc +0 -1
  146. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  147. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  148. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  149. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  150. data/src/core/lib/promise/activity.cc +1 -1
  151. data/src/core/lib/promise/activity.h +1 -1
  152. data/src/core/lib/promise/arena_promise.h +7 -7
  153. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  154. data/src/core/lib/promise/detail/promise_like.h +4 -4
  155. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  156. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  157. data/src/core/lib/promise/observable.h +3 -3
  158. data/src/core/lib/promise/party.cc +1 -1
  159. data/src/core/lib/promise/try_seq.h +2 -2
  160. data/src/core/lib/resource_quota/arena.h +3 -3
  161. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  162. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  163. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  164. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  165. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  168. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  169. data/src/core/lib/security/authorization/matchers.h +1 -1
  170. data/src/core/lib/surface/call.cc +8 -7
  171. data/src/core/lib/surface/call.h +3 -3
  172. data/src/core/lib/surface/call_utils.h +4 -0
  173. data/src/core/lib/surface/channel.cc +1 -1
  174. data/src/core/lib/surface/channel.h +1 -1
  175. data/src/core/lib/surface/channel_init.cc +1 -1
  176. data/src/core/lib/surface/init.cc +7 -7
  177. data/src/core/lib/surface/lame_client.cc +1 -1
  178. data/src/core/lib/surface/legacy_channel.cc +2 -2
  179. data/src/core/lib/surface/version.cc +1 -1
  180. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  181. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  182. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  183. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  184. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  185. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  186. data/src/core/load_balancing/health_check_client.cc +7 -7
  187. data/src/core/load_balancing/lb_policy.cc +1 -1
  188. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  189. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  190. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  191. data/src/core/load_balancing/rls/rls.cc +23 -17
  192. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  193. data/src/core/load_balancing/xds/cds.cc +6 -5
  194. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  195. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  196. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  197. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  198. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  199. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  200. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  201. data/src/core/server/server.cc +30 -30
  202. data/src/core/server/server.h +4 -3
  203. data/src/core/server/server_config_selector_filter.cc +3 -3
  204. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  205. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  206. data/src/core/telemetry/instrument.cc +30 -16
  207. data/src/core/telemetry/instrument.h +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  210. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  211. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  212. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  213. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  214. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  215. data/src/core/tsi/ssl_transport_security.cc +46 -13
  216. data/src/core/tsi/ssl_transport_security.h +7 -0
  217. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  218. data/src/core/util/event_log.cc +3 -3
  219. data/src/core/util/http_client/httpcli.cc +5 -5
  220. data/src/core/util/http_client/httpcli.h +1 -1
  221. data/src/core/util/json/json_object_loader.cc +7 -0
  222. data/src/core/util/json/json_object_loader.h +17 -2
  223. data/src/core/util/latent_see.cc +123 -36
  224. data/src/core/util/latent_see.h +14 -1
  225. data/src/core/util/mpscq.cc +1 -1
  226. data/src/core/util/notification.h +4 -4
  227. data/src/core/util/sync.h +20 -6
  228. data/src/core/util/table.h +20 -22
  229. data/src/core/util/work_serializer.cc +2 -2
  230. data/src/core/xds/grpc/blackboard.cc +4 -3
  231. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  233. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  234. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  235. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  236. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  237. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  238. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  239. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  240. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  241. data/src/core/xds/grpc/xds_matcher.h +2 -2
  242. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  243. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  244. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  245. data/src/core/xds/xds_client/xds_client.cc +19 -16
  246. data/src/core/xds/xds_client/xds_transport.h +49 -3
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  248. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  249. data/src/ruby/lib/grpc/version.rb +1 -1
  250. data/src/ruby/pb/README.md +1 -1
  251. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  252. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  253. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  254. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  255. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  256. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  257. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  258. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  259. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  260. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  261. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  262. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  265. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  266. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  268. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  269. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  270. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  273. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  274. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  275. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  276. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  277. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  278. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  280. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  281. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  282. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  283. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  284. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  285. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  286. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  287. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  288. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  289. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  290. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  291. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  292. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  293. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  294. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  295. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  296. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  297. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  300. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  301. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  305. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  306. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  308. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  309. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  310. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  313. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  314. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  316. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  317. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  326. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  327. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  328. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  330. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  331. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  335. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  336. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  337. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  338. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  341. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  342. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  343. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  344. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  345. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  346. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  347. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  348. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  349. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  350. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  351. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  352. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  353. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  354. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  356. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  357. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  358. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  360. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  361. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  362. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  364. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  365. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  366. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  367. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  368. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  370. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  372. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  373. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  374. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  375. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  376. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  377. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  378. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  379. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  380. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  381. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  382. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  383. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  384. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  385. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  386. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  387. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  388. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  389. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  390. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  391. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  393. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  395. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  396. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  397. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  398. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  399. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  401. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  402. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  403. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  404. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  405. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  407. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  408. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  409. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  410. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  411. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  412. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  413. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  414. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  415. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  416. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  417. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  418. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  419. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  423. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  427. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  428. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  429. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  433. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  434. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  435. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  436. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  437. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  438. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  439. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  440. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  441. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  442. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  443. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  444. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  445. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  446. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  447. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  448. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  449. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  450. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  451. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  453. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  454. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  455. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  456. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  457. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  458. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  459. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  465. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  466. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  467. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  468. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  469. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  470. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  471. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  472. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  473. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  474. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  475. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  476. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  477. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  478. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  492. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  494. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  497. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  498. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  504. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  505. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  506. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  508. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  509. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  510. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  511. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  512. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  513. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  514. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  515. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  516. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  518. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  519. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  520. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  521. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  522. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  523. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  524. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  525. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  531. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  532. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  533. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  534. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  543. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  544. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  545. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  546. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  547. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  548. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  549. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  555. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  558. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  559. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  560. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  564. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  565. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  566. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  567. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  568. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  569. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  571. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  572. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  574. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  575. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  576. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  577. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  579. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  580. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  581. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  582. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  586. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  587. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  597. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  598. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  599. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  600. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  601. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  602. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  709. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  710. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  711. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  712. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  713. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  714. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  715. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  716. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  717. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  718. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  719. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  720. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  721. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  722. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  723. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  724. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  725. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  728. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  729. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  730. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  736. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  739. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  743. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  747. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  748. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  749. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  750. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  751. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  752. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  753. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  754. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  755. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  756. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  757. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  758. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  759. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  760. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  761. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  765. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  768. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  769. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  770. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  772. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  773. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  774. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  775. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  776. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  777. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  781. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  784. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  785. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  786. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  788. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  789. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  790. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  791. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  792. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  796. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  819. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  837. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  849. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  850. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  853. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  854. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  855. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  856. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  858. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  859. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  860. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  861. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  862. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  863. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  864. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  865. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  866. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  867. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  868. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  869. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  870. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  871. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  872. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  873. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  874. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  875. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  876. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  877. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  878. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  879. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  880. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  881. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  883. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  884. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  885. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  886. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  887. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  888. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  889. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  890. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  891. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  892. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  893. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  894. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  895. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  897. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  898. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  899. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  900. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  901. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  902. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  904. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  906. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  907. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  908. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  909. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  913. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  914. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  915. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  916. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  917. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  918. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  919. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  920. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  921. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  923. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  924. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  925. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  926. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  927. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  928. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  929. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  930. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  931. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  932. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  933. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  934. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  935. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  936. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  937. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  938. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  939. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  940. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  941. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  942. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  943. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  944. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  945. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  946. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  947. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  948. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  949. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  950. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  951. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  952. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  953. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  955. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  956. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  957. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  958. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  959. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  960. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  961. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  962. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  963. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  964. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  965. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  966. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  967. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  968. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  969. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  970. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  971. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  974. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  979. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  980. metadata +77 -52
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  982. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  984. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  985. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  986. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  987. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  989. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  990. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  996. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  1000. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1001. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1002. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1003. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1004. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1005. 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
+ }