grpc 1.84.0 → 1.85.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1004) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/include/grpc/event_engine/memory_allocator.h +1 -0
  4. data/include/grpc/grpc.h +3 -0
  5. data/include/grpc/grpc_security_constants.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +4 -0
  7. data/src/core/call/call_filters.h +10 -10
  8. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  10. data/src/core/call/filter_fusion.h +15 -15
  11. data/src/core/call/interception_chain.h +3 -3
  12. data/src/core/call/metadata_batch.cc +1 -0
  13. data/src/core/call/metadata_batch.h +45 -33
  14. data/src/core/call/parsed_metadata.h +3 -3
  15. data/src/core/call/request_buffer.cc +6 -6
  16. data/src/core/call/request_buffer.h +1 -1
  17. data/src/core/channelz/channel_trace.cc +5 -5
  18. data/src/core/channelz/channel_trace.h +1 -1
  19. data/src/core/channelz/channelz.cc +9 -9
  20. data/src/core/channelz/channelz.h +12 -12
  21. data/src/core/channelz/channelz_registry.cc +10 -10
  22. data/src/core/channelz/ztrace_collector.h +5 -5
  23. data/src/core/client_channel/client_channel.cc +4 -4
  24. data/src/core/client_channel/client_channel_filter.cc +14 -14
  25. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  26. data/src/core/client_channel/subchannel.cc +24 -23
  27. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  28. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  29. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  30. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  31. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  32. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  33. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  34. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  39. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  40. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  41. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  42. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  43. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  45. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  46. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  48. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  49. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  50. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  51. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  53. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  55. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  56. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  61. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  63. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  65. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  68. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  70. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  72. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  73. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  74. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  76. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  85. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  87. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  97. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  98. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  99. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  100. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  101. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  102. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  103. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  104. data/src/core/handshaker/handshaker.cc +4 -4
  105. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  106. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  107. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  108. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  109. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  110. data/src/core/lib/channel/channel_args.cc +20 -0
  111. data/src/core/lib/channel/channel_args.h +17 -17
  112. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  113. data/src/core/lib/channel/promise_based_filter.h +66 -27
  114. data/src/core/lib/debug/trace_flags.cc +2 -0
  115. data/src/core/lib/debug/trace_flags.h +1 -0
  116. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  117. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  118. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  119. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  120. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  121. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  122. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  123. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  124. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  126. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  127. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  128. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  129. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  132. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  134. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  136. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  137. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  139. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  140. data/src/core/lib/experiments/experiments.cc +48 -0
  141. data/src/core/lib/experiments/experiments.h +24 -0
  142. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  143. data/src/core/lib/iomgr/buffer_list.h +1 -1
  144. data/src/core/lib/iomgr/combiner.cc +0 -1
  145. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  146. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  147. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  148. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  149. data/src/core/lib/promise/activity.cc +1 -1
  150. data/src/core/lib/promise/activity.h +1 -1
  151. data/src/core/lib/promise/arena_promise.h +7 -7
  152. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  153. data/src/core/lib/promise/detail/promise_like.h +4 -4
  154. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  155. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  156. data/src/core/lib/promise/observable.h +3 -3
  157. data/src/core/lib/promise/party.cc +1 -1
  158. data/src/core/lib/promise/try_seq.h +2 -2
  159. data/src/core/lib/resource_quota/arena.h +3 -3
  160. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  161. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  162. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  163. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  164. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  165. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  168. data/src/core/lib/security/authorization/matchers.h +1 -1
  169. data/src/core/lib/surface/call.cc +8 -7
  170. data/src/core/lib/surface/call.h +3 -3
  171. data/src/core/lib/surface/call_utils.h +4 -0
  172. data/src/core/lib/surface/channel.cc +1 -1
  173. data/src/core/lib/surface/channel.h +1 -1
  174. data/src/core/lib/surface/channel_init.cc +1 -1
  175. data/src/core/lib/surface/init.cc +7 -7
  176. data/src/core/lib/surface/lame_client.cc +1 -1
  177. data/src/core/lib/surface/legacy_channel.cc +2 -2
  178. data/src/core/lib/surface/version.cc +1 -1
  179. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  180. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  181. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  182. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  183. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  184. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  185. data/src/core/load_balancing/health_check_client.cc +7 -7
  186. data/src/core/load_balancing/lb_policy.cc +1 -1
  187. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  188. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  189. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  190. data/src/core/load_balancing/rls/rls.cc +23 -17
  191. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  192. data/src/core/load_balancing/xds/cds.cc +6 -5
  193. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  194. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  195. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  196. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  197. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  198. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  199. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  200. data/src/core/server/server.cc +30 -30
  201. data/src/core/server/server.h +4 -3
  202. data/src/core/server/server_config_selector_filter.cc +3 -3
  203. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  204. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  205. data/src/core/telemetry/instrument.cc +30 -16
  206. data/src/core/telemetry/instrument.h +3 -3
  207. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  210. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  211. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  212. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  213. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  214. data/src/core/tsi/ssl_transport_security.cc +46 -13
  215. data/src/core/tsi/ssl_transport_security.h +7 -0
  216. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  217. data/src/core/util/event_log.cc +3 -3
  218. data/src/core/util/http_client/httpcli.cc +5 -5
  219. data/src/core/util/http_client/httpcli.h +1 -1
  220. data/src/core/util/json/json_object_loader.cc +7 -0
  221. data/src/core/util/json/json_object_loader.h +17 -2
  222. data/src/core/util/latent_see.cc +123 -36
  223. data/src/core/util/latent_see.h +14 -1
  224. data/src/core/util/mpscq.cc +1 -1
  225. data/src/core/util/notification.h +4 -4
  226. data/src/core/util/sync.h +20 -6
  227. data/src/core/util/table.h +20 -22
  228. data/src/core/util/work_serializer.cc +2 -2
  229. data/src/core/xds/grpc/blackboard.cc +4 -3
  230. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  231. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  233. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  234. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  235. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  236. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  237. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  238. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  239. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  240. data/src/core/xds/grpc/xds_matcher.h +2 -2
  241. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  242. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  243. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  244. data/src/core/xds/xds_client/xds_client.cc +19 -16
  245. data/src/core/xds/xds_client/xds_transport.h +49 -3
  246. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  248. data/src/ruby/lib/grpc/version.rb +1 -1
  249. data/src/ruby/pb/README.md +1 -1
  250. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  251. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  252. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  253. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  254. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  255. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  256. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  257. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  258. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  259. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  260. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  261. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  262. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  265. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  266. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  268. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  269. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  270. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  273. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  274. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  275. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  276. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  277. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  278. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  280. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  281. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  282. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  283. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  284. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  285. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  286. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  287. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  288. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  289. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  290. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  291. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  292. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  293. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  294. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  295. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  296. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  297. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  300. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  301. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  305. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  306. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  308. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  309. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  310. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  313. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  314. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  316. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  317. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  326. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  327. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  328. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  330. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  331. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  335. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  336. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  337. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  338. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  341. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  342. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  343. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  344. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  345. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  346. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  347. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  348. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  349. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  350. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  351. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  352. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  353. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  354. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  356. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  357. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  358. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  360. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  361. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  362. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  364. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  365. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  366. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  367. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  368. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  370. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  372. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  373. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  374. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  375. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  376. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  377. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  378. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  379. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  380. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  381. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  382. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  383. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  384. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  385. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  386. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  387. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  388. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  389. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  390. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  391. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  393. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  395. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  396. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  397. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  398. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  399. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  401. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  402. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  403. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  404. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  405. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  407. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  408. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  409. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  410. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  411. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  412. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  413. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  414. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  415. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  416. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  417. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  418. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  420. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  423. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  427. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  428. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  429. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  433. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  434. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  435. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  436. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  437. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  438. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  439. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  440. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  441. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  442. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  443. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  444. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  445. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  446. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  447. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  448. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  449. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  450. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  451. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  453. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  454. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  455. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  456. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  457. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  458. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  459. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  465. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  466. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  467. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  468. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  469. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  470. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  471. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  472. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  473. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  474. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  475. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  476. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  477. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  478. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  492. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  494. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  497. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  498. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  504. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  505. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  506. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  508. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  509. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  510. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  511. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  512. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  513. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  514. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  515. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  516. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  518. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  519. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  520. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  521. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  522. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  523. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  524. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  525. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  531. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  532. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  533. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  534. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  543. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  544. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  545. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  546. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  547. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  548. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  549. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  555. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  558. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  559. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  560. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  564. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  565. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  566. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  567. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  568. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  569. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  571. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  572. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  574. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  575. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  576. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  577. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  579. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  580. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  581. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  582. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  586. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  587. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  597. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  598. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  599. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  600. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  601. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  602. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  709. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  710. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  711. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  712. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  713. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  714. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  715. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  716. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  717. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  718. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  719. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  720. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  721. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  722. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  723. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  724. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  725. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  728. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  729. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  730. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  736. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  739. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  743. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  747. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  748. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  749. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  750. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  751. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  752. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  753. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  754. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  755. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  756. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  757. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  758. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  759. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  760. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  761. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  765. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  768. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  769. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  770. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  772. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  773. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  774. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  775. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  776. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  777. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  781. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  784. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  785. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  786. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  788. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  789. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  790. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  791. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  792. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  796. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  819. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  837. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  849. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  850. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  853. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  854. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  855. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  856. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  858. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  859. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  860. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  861. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  862. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  863. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  864. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  865. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  866. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  867. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  868. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  869. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  870. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  871. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  872. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  873. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  874. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  875. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  876. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  877. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  878. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  879. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  880. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  881. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  883. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  884. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  885. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  886. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  887. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  888. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  889. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  890. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  891. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  892. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  893. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  894. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  895. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  897. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  898. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  899. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  900. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  901. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  902. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  904. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  906. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  907. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  908. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  909. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  913. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  914. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  915. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  916. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  917. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  918. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  919. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  920. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  921. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  923. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  924. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  925. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  926. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  927. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  928. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  929. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  930. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  931. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  932. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  933. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  934. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  935. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  936. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  937. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  938. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  939. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  940. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  941. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  942. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  943. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  944. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  945. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  946. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  947. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  948. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  949. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  950. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  951. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  952. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  953. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  955. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  956. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  957. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  958. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  959. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  960. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  961. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  962. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  963. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  964. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  965. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  966. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  967. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  968. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  969. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  970. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  971. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  974. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  979. metadata +77 -52
  980. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  982. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  984. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  985. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  986. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  987. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  989. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  990. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  996. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1000. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1001. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1002. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1003. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1004. data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
@@ -23,34 +23,57 @@
23
23
  #include <limits.h>
24
24
  #include <string.h>
25
25
 
26
- #include "../bytestring/internal.h"
26
+ #include <algorithm>
27
+
27
28
  #include "../internal.h"
28
29
  #include "internal.h"
29
30
 
30
- // Constructed types with a recursive definition (such as can be found in PKCS7)
31
- // could eventually exceed the stack given malicious input with excessive
32
- // recursion. Therefore we limit the stack depth. This is the maximum number of
33
- // recursive invocations of asn1_item_embed_d2i().
31
+
32
+ using namespace bssl;
33
+
34
+ // Constructed types with a recursive definition could eventually exceed the
35
+ // stack given malicious input with excessive recursion. We don't currently
36
+ // support such types (our PKCS#7 parser does not use this framework and does
37
+ // not implement the full recursive PKCS#7), but limit recursion nonetheless.
34
38
  #define ASN1_MAX_CONSTRUCTED_NEST 30
35
39
 
36
- static int asn1_check_tlen(long *olen, int *otag, unsigned char *oclass,
37
- char *cst, const unsigned char **in, long len,
38
- int exptag, int expclass, char opt);
39
-
40
- static int asn1_template_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
41
- long len, const ASN1_TEMPLATE *tt, char opt,
42
- CRYPTO_BUFFER *buf, int depth);
43
- static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in,
44
- long len, const ASN1_TEMPLATE *tt, char opt,
45
- CRYPTO_BUFFER *buf, int depth);
46
- static int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, long len,
47
- int utype, const ASN1_ITEM *it);
48
- static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in,
49
- long len, const ASN1_ITEM *it, int tag,
50
- int aclass, char opt);
51
- static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
52
- long len, const ASN1_ITEM *it, int tag, int aclass,
53
- char opt, CRYPTO_BUFFER *buf, int depth);
40
+ // The following functions parse a structure of type `it` (or `tt`) from `cbs`
41
+ // and write the result to `*pval`. They return one on success and zero on
42
+ // error.
43
+ //
44
+ // If `opt` is true, the field is optional. If an optional element is missing,
45
+ // the function returns one and consumes zero bytes from `cbs`.
46
+ //
47
+ // If `tag` is non-zero, the type is implicitly-tagged with the specified tag.
48
+ // `tag` should not have the constructed bit set. If the ASN.1 type is
49
+ // constructed, it will be set as appropriate.
50
+ //
51
+ // On entry, `*pval` may either be null or a default-initialized object,
52
+ // according to tasn_new.cc. It, however, may not be an arbitrary object.
53
+ // Historically, this code supported arbitrary objects, though not very well, so
54
+ // some remnants of more general handling remain.
55
+ //
56
+ // With the exception of `asn1_parse_item`, there may be a partial object left
57
+ // in `*pval` on error. `asn1_parse_item` is the main entrypoint and is
58
+ // responsible for recursively freeing objects on error.
59
+ static int asn1_parse_item(ASN1_VALUE **pval, CBS *cbs, const ASN1_ITEM *it,
60
+ CBS_ASN1_TAG tag, bool opt, int depth);
61
+ static int asn1_parse_template(ASN1_VALUE **pval, CBS *cbs,
62
+ const ASN1_TEMPLATE *tt, CBS_ASN1_TAG tag,
63
+ bool opt, int depth);
64
+
65
+ // asn1_parse_template_no_explicit behaves like `asn1_parse_template` but
66
+ // ignores any explicit tag specified in `tt`.
67
+ static int asn1_parse_template_no_explicit(ASN1_VALUE **pval, CBS *cbs,
68
+ const ASN1_TEMPLATE *tt,
69
+ CBS_ASN1_TAG tag, bool opt,
70
+ int depth);
71
+
72
+ // asn1_parse_item_primitive behaves like `asn1_parse_item` but only supports
73
+ // primitive types.
74
+ static int asn1_parse_item_primitive(ASN1_VALUE **pval, CBS *cbs,
75
+ const ASN1_ITEM *it, CBS_ASN1_TAG tag,
76
+ bool opt, int depth);
54
77
 
55
78
  unsigned long ASN1_tag2bit(int tag) {
56
79
  switch (tag) {
@@ -91,873 +114,498 @@ unsigned long ASN1_tag2bit(int tag) {
91
114
  }
92
115
  }
93
116
 
94
- static int is_supported_universal_type(int tag, int aclass) {
95
- if (aclass != V_ASN1_UNIVERSAL) {
96
- return 0;
117
+ ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **pval, const uint8_t **in, long len,
118
+ const ASN1_ITEM *it) {
119
+ if (len < 0) {
120
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BUFFER_TOO_SMALL);
121
+ return nullptr;
97
122
  }
98
- return tag == V_ASN1_OBJECT || tag == V_ASN1_NULL || tag == V_ASN1_BOOLEAN ||
99
- tag == V_ASN1_BIT_STRING || tag == V_ASN1_INTEGER ||
100
- tag == V_ASN1_ENUMERATED || tag == V_ASN1_OCTET_STRING ||
101
- tag == V_ASN1_NUMERICSTRING || tag == V_ASN1_PRINTABLESTRING ||
102
- tag == V_ASN1_T61STRING || tag == V_ASN1_VIDEOTEXSTRING ||
103
- tag == V_ASN1_IA5STRING || tag == V_ASN1_UTCTIME ||
104
- tag == V_ASN1_GENERALIZEDTIME || tag == V_ASN1_GRAPHICSTRING ||
105
- tag == V_ASN1_VISIBLESTRING || tag == V_ASN1_GENERALSTRING ||
106
- tag == V_ASN1_UNIVERSALSTRING || tag == V_ASN1_BMPSTRING ||
107
- tag == V_ASN1_UTF8STRING || tag == V_ASN1_SET ||
108
- tag == V_ASN1_SEQUENCE;
109
- }
110
123
 
111
- // Macro to initialize and invalidate the cache
124
+ // Bound `len` to comfortably fit in an `int`. Historically, this parser
125
+ // routinely mismatched integer types and did not correctly handle overflow.
126
+ // This is now largely fixed, but continue to cap the length to be safe.
127
+ len = std::min(len, long{INT_MAX / 2});
112
128
 
113
- // Decode an ASN1 item, this currently behaves just like a standard 'd2i'
114
- // function. 'in' points to a buffer to read the data from, in future we
115
- // will have more advanced versions that can input data a piece at a time and
116
- // this will simply be a special case.
117
-
118
- ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
119
- const ASN1_ITEM *it) {
120
- ASN1_VALUE *ret = NULL;
121
- if (asn1_item_ex_d2i(&ret, in, len, it, /*tag=*/-1, /*aclass=*/0, /*opt=*/0,
122
- /*buf=*/NULL, /*depth=*/0) <= 0) {
123
- // Clean up, in case the caller left a partial object.
124
- //
125
- // TODO(davidben): I don't think it can leave one, but the codepaths below
126
- // are a bit inconsistent. Revisit this when rewriting this function.
127
- ASN1_item_ex_free(&ret, it);
129
+ CBS cbs;
130
+ CBS_init(&cbs, *in, len);
131
+ ASN1_VALUE *ret = nullptr;
132
+ if (!asn1_parse_item(&ret, &cbs, it, /*tag=*/0, /*opt=*/false, /*depth=*/0)) {
133
+ return nullptr;
128
134
  }
129
135
 
130
136
  // If the caller supplied an output pointer, free the old one and replace it
131
- // with |ret|. This differs from OpenSSL slightly in that we don't support
137
+ // with `ret`. This differs from OpenSSL slightly in that we don't support
132
138
  // object reuse. We run this on both success and failure. On failure, even
133
139
  // with object reuse, OpenSSL destroys the previous object.
134
- if (pval != NULL) {
140
+ if (pval != nullptr) {
135
141
  ASN1_item_ex_free(pval, it);
136
142
  *pval = ret;
137
143
  }
144
+ *in = CBS_data(&cbs);
138
145
  return ret;
139
146
  }
140
147
 
141
- // Decode an item, taking care of IMPLICIT tagging, if any. If 'opt' set and
142
- // tag mismatch return -1 to handle OPTIONAL
143
- //
144
- // TODO(davidben): Historically, all functions in this file had to account for
145
- // |*pval| containing an arbitrary existing value. This is no longer the case
146
- // because |ASN1_item_d2i| now always starts from NULL. As part of rewriting
147
- // this function, take the simplified assumptions into account. Though we must
148
- // still account for the internal calls to |ASN1_item_ex_new|.
149
-
150
- static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
151
- long len, const ASN1_ITEM *it, int tag, int aclass,
152
- char opt, CRYPTO_BUFFER *buf, int depth) {
153
- const ASN1_TEMPLATE *tt, *errtt = NULL;
154
- const unsigned char *p = NULL, *q;
155
- unsigned char oclass;
156
- char cst, isopt;
157
- int i;
158
- int otag;
159
- int ret = 0;
160
- ASN1_VALUE **pchptr;
161
- if (!pval) {
162
- return 0;
148
+ template <typename T, T *new_func()>
149
+ static T *ensure_value(ASN1_VALUE **pval) {
150
+ if (*pval) {
151
+ return reinterpret_cast<T *>(*pval);
163
152
  }
164
-
165
- if (buf != NULL) {
166
- assert(CRYPTO_BUFFER_data(buf) <= *in &&
167
- *in + len <= CRYPTO_BUFFER_data(buf) + CRYPTO_BUFFER_len(buf));
168
- }
169
-
170
- // Bound |len| to comfortably fit in an int. Lengths in this module often
171
- // switch between int and long without overflow checks.
172
- if (len > INT_MAX / 2) {
173
- len = INT_MAX / 2;
153
+ T *obj = new_func();
154
+ if (obj == nullptr) {
155
+ return nullptr;
174
156
  }
157
+ *pval = reinterpret_cast<ASN1_VALUE *>(obj);
158
+ return obj;
159
+ }
175
160
 
161
+ static int asn1_parse_item_no_error_cleanup(ASN1_VALUE **pval, CBS *cbs,
162
+ const ASN1_ITEM *it,
163
+ CBS_ASN1_TAG tag, bool opt,
164
+ int depth,
165
+ const ASN1_TEMPLATE **errtt) {
176
166
  if (++depth > ASN1_MAX_CONSTRUCTED_NEST) {
177
167
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_TOO_DEEP);
178
- goto err;
168
+ return 0;
179
169
  }
180
170
 
181
171
  switch (it->itype) {
182
172
  case ASN1_ITYPE_PRIMITIVE:
183
173
  if (it->templates) {
184
- // tagging or OPTIONAL is currently illegal on an item template
185
- // because the flags can't get passed down. In practice this
186
- // isn't a problem: we include the relevant flags from the item
187
- // template in the template itself.
188
- if ((tag != -1) || opt) {
189
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE);
190
- goto err;
174
+ // This is an `ASN1_ITEM_TEMPLATE`, so the underlying template cannot be
175
+ // optional. Optionality should be expressed at the layer above.
176
+ if (it->templates->flags & ASN1_TFLG_OPTIONAL) {
177
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
178
+ return 0;
191
179
  }
192
- return asn1_template_ex_d2i(pval, in, len, it->templates, opt, buf,
193
- depth);
180
+ return asn1_parse_template(pval, cbs, it->templates, tag, opt, depth);
194
181
  }
195
- return asn1_d2i_ex_primitive(pval, in, len, it, tag, aclass, opt);
196
- break;
182
+ return asn1_parse_item_primitive(pval, cbs, it, tag, opt, depth);
197
183
 
198
- case ASN1_ITYPE_MSTRING:
199
- // It never makes sense for multi-strings to have implicit tagging, so
200
- // if tag != -1, then this looks like an error in the template.
201
- if (tag != -1) {
184
+ case ASN1_ITYPE_MSTRING: {
185
+ // Multi-strings are CHOICE types and cannot be implicitly tagged.
186
+ if (tag != 0) {
202
187
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
203
- goto err;
204
- }
205
-
206
- p = *in;
207
- // Just read in tag and class
208
- ret = asn1_check_tlen(NULL, &otag, &oclass, NULL, &p, len, -1, 0, 1);
209
- if (!ret) {
210
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
211
- goto err;
188
+ return 0;
212
189
  }
213
190
 
214
- // Must be UNIVERSAL class
215
- if (oclass != V_ASN1_UNIVERSAL) {
216
- // If OPTIONAL, assume this is OK
191
+ tag = CBS_peek_any_asn1_tag(cbs);
192
+ if ((tag & CBS_ASN1_CLASS_MASK) != CBS_ASN1_UNIVERSAL ||
193
+ (tag & CBS_ASN1_CONSTRUCTED) ||
194
+ (ASN1_tag2bit(tag & CBS_ASN1_TAG_NUMBER_MASK) & it->utype) == 0) {
217
195
  if (opt) {
218
- return -1;
219
- }
220
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_MSTRING_NOT_UNIVERSAL);
221
- goto err;
222
- }
223
- // Check tag matches bit map
224
- if (!(ASN1_tag2bit(otag) & it->utype)) {
225
- // If OPTIONAL, assume this is OK
226
- if (opt) {
227
- return -1;
196
+ ASN1_item_ex_free(pval, it);
197
+ return 1; // Omitted optional field.
228
198
  }
229
199
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_MSTRING_WRONG_TAG);
230
- goto err;
200
+ return 0;
231
201
  }
232
- return asn1_d2i_ex_primitive(pval, in, len, it, otag, 0, 0);
202
+ ASN1_STRING *out = ensure_value<ASN1_STRING, ASN1_STRING_new>(pval);
203
+ return out != nullptr && asn1_parse_any_as_string(cbs, out);
204
+ }
233
205
 
234
206
  case ASN1_ITYPE_EXTERN: {
235
207
  // We don't support implicit tagging with external types.
236
- if (tag != -1) {
208
+ if (tag != 0) {
237
209
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
238
- goto err;
210
+ return 0;
239
211
  }
240
- const ASN1_EXTERN_FUNCS *ef =
241
- reinterpret_cast<const ASN1_EXTERN_FUNCS *>(it->funcs);
242
- return ef->asn1_ex_d2i(pval, in, len, it, opt, NULL);
212
+ auto *ef = reinterpret_cast<const ASN1_EXTERN_FUNCS *>(it->funcs);
213
+ return ef->asn1_ex_parse(pval, cbs, it, opt);
243
214
  }
244
215
 
245
216
  case ASN1_ITYPE_CHOICE: {
246
- // It never makes sense for CHOICE types to have implicit tagging, so if
247
- // tag != -1, then this looks like an error in the template.
248
- if (tag != -1) {
217
+ // CHOICE types cannot be implicitly tagged.
218
+ if (tag != 0) {
249
219
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
250
- goto err;
220
+ return 0;
251
221
  }
252
222
 
253
223
  const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
254
- ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
255
- if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL)) {
256
- goto auxerr;
224
+ ASN1_aux_cb *asn1_cb = aux != nullptr ? aux->asn1_cb : nullptr;
225
+ if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, nullptr)) {
226
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_AUX_ERROR);
227
+ return 0;
257
228
  }
258
229
 
259
230
  if (*pval) {
260
- // Free up and zero CHOICE value if initialised
261
- i = asn1_get_choice_selector(pval, it);
262
- if ((i >= 0) && (i < it->tcount)) {
263
- tt = it->templates + i;
264
- pchptr = asn1_get_field_ptr(pval, tt);
231
+ // Free up and zero the CHOICE value if initialised.
232
+ int idx = asn1_get_choice_selector(pval, it);
233
+ if (idx >= 0 && idx < it->tcount) {
234
+ const ASN1_TEMPLATE *tt = &it->templates[idx];
235
+ ASN1_VALUE **pchptr = asn1_get_field_ptr(pval, tt);
265
236
  ASN1_template_free(pchptr, tt);
266
237
  asn1_set_choice_selector(pval, -1, it);
267
238
  }
268
239
  } else if (!ASN1_item_ex_new(pval, it)) {
269
240
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
270
- goto err;
241
+ return 0;
271
242
  }
272
- // CHOICE type, try each possibility in turn
273
- p = *in;
274
- for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
275
- pchptr = asn1_get_field_ptr(pval, tt);
276
- // We mark field as OPTIONAL so its absence can be recognised.
277
- ret = asn1_template_ex_d2i(pchptr, &p, len, tt, 1, buf, depth);
278
- // If field not present, try the next one
279
- if (ret == -1) {
280
- continue;
243
+
244
+ // Parse each possibility as an optional field and find the first one.
245
+ size_t orig_len = CBS_len(cbs);
246
+ int idx = 0;
247
+ for (idx = 0; idx < it->tcount; idx++) {
248
+ const ASN1_TEMPLATE *tt = &it->templates[idx];
249
+ ASN1_VALUE **pchptr = asn1_get_field_ptr(pval, tt);
250
+ if (!asn1_parse_template(pchptr, cbs, tt, /*tag=*/0, /*opt=*/true,
251
+ depth)) {
252
+ // Free any partial object left in `pchptr`. `asn1_item_parse` will
253
+ // clean up `pval`, but that will not clean up `pchptr` because the
254
+ // choice selector has not yet been set below.
255
+ ASN1_template_free(pchptr, tt);
256
+ *errtt = tt;
257
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
258
+ return 0;
281
259
  }
282
- // If positive return, read OK, break loop
283
- if (ret > 0) {
284
- break;
260
+ if (CBS_len(cbs) != orig_len) {
261
+ break; // Found a match.
285
262
  }
286
- // Otherwise must be an ASN1 parsing error
287
- errtt = tt;
288
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
289
- goto err;
290
263
  }
291
-
292
- // Did we fall off the end without reading anything?
293
- if (i == it->tcount) {
294
- // If OPTIONAL, this is OK
264
+ if (idx == it->tcount) {
265
+ // Nothing matched. If the CHOICE is OPTIONAL, this is OK.
295
266
  if (opt) {
296
- // Free and zero it
297
267
  ASN1_item_ex_free(pval, it);
298
- return -1;
268
+ return 1;
299
269
  }
300
270
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE);
301
- goto err;
271
+ return 0;
302
272
  }
303
-
304
- asn1_set_choice_selector(pval, i, it);
305
- if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, NULL)) {
306
- goto auxerr;
273
+ asn1_set_choice_selector(pval, idx, it);
274
+ if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, nullptr)) {
275
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_AUX_ERROR);
276
+ return 0;
307
277
  }
308
- *in = p;
309
278
  return 1;
310
279
  }
311
280
 
312
281
  case ASN1_ITYPE_SEQUENCE: {
313
- p = *in;
314
-
315
- // If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL
316
- if (tag == -1) {
317
- tag = V_ASN1_SEQUENCE;
318
- aclass = V_ASN1_UNIVERSAL;
282
+ tag = tag == 0 ? CBS_ASN1_SEQUENCE : (tag | CBS_ASN1_CONSTRUCTED);
283
+ if (opt && !CBS_peek_asn1_tag(cbs, tag)) {
284
+ ASN1_item_ex_free(pval, it);
285
+ return 1;
319
286
  }
320
- // Get SEQUENCE length and update len, p
321
- ret = asn1_check_tlen(&len, NULL, NULL, &cst, &p, len, tag, aclass, opt);
322
- if (!ret) {
323
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
324
- goto err;
325
- } else if (ret == -1) {
326
- return -1;
327
- }
328
- if (!cst) {
329
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_SEQUENCE_NOT_CONSTRUCTED);
330
- goto err;
287
+
288
+ CBS copy = *cbs, seq;
289
+ if (!CBS_get_asn1(cbs, &seq, tag)) {
290
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
291
+ return 0;
331
292
  }
332
293
 
333
294
  if (!*pval && !ASN1_item_ex_new(pval, it)) {
334
295
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
335
- goto err;
296
+ return 0;
336
297
  }
337
298
 
338
299
  const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
339
- ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
340
- if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL)) {
341
- goto auxerr;
300
+ ASN1_aux_cb *asn1_cb = aux != nullptr ? aux->asn1_cb : nullptr;
301
+ if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, nullptr)) {
302
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_AUX_ERROR);
303
+ return 0;
342
304
  }
343
305
 
344
- // Free up and zero any ADB found
345
- for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
306
+ // Free up and zero any ADB found.
307
+ for (int i = 0; i < it->tcount; i++) {
308
+ const ASN1_TEMPLATE *tt = &it->templates[i];
346
309
  if (tt->flags & ASN1_TFLG_ADB_MASK) {
347
- const ASN1_TEMPLATE *seqtt;
348
- ASN1_VALUE **pseqval;
349
- seqtt = asn1_do_adb(pval, tt, 0);
350
- if (seqtt == NULL) {
310
+ const ASN1_TEMPLATE *seqtt = asn1_do_adb(pval, tt, 0);
311
+ if (seqtt == nullptr) {
351
312
  continue;
352
313
  }
353
- pseqval = asn1_get_field_ptr(pval, seqtt);
314
+ ASN1_VALUE **pseqval = asn1_get_field_ptr(pval, seqtt);
354
315
  ASN1_template_free(pseqval, seqtt);
355
316
  }
356
317
  }
357
318
 
358
- // Get each field entry
359
- for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
360
- const ASN1_TEMPLATE *seqtt;
361
- ASN1_VALUE **pseqval;
362
- seqtt = asn1_do_adb(pval, tt, 1);
363
- if (seqtt == NULL) {
364
- goto err;
365
- }
366
- pseqval = asn1_get_field_ptr(pval, seqtt);
367
- // Have we ran out of data?
368
- if (!len) {
369
- break;
370
- }
371
- q = p;
372
- // This determines the OPTIONAL flag value. The field cannot be
373
- // omitted if it is the last of a SEQUENCE and there is still
374
- // data to be read. This isn't strictly necessary but it
375
- // increases efficiency in some cases.
376
- if (i == (it->tcount - 1)) {
377
- isopt = 0;
378
- } else {
379
- isopt = (seqtt->flags & ASN1_TFLG_OPTIONAL) != 0;
319
+ // Get each field entry.
320
+ for (int i = 0; i < it->tcount; i++) {
321
+ const ASN1_TEMPLATE *tt = &it->templates[i];
322
+ const ASN1_TEMPLATE *seqtt = asn1_do_adb(pval, tt, /*nullerr=*/1);
323
+ if (seqtt == nullptr) {
324
+ return 0;
380
325
  }
381
- // attempt to read in field, allowing each to be OPTIONAL
382
-
383
- ret = asn1_template_ex_d2i(pseqval, &p, len, seqtt, isopt, buf, depth);
384
- if (!ret) {
385
- errtt = seqtt;
386
- goto err;
387
- } else if (ret == -1) {
388
- // OPTIONAL component absent. Free and zero the field.
389
- ASN1_template_free(pseqval, seqtt);
390
- continue;
326
+ ASN1_VALUE **pseqval = asn1_get_field_ptr(pval, seqtt);
327
+ const bool field_opt = (tt->flags & ASN1_TFLG_OPTIONAL) != 0;
328
+ if (!asn1_parse_template(pseqval, &seq, seqtt, /*tag=*/0, field_opt,
329
+ depth)) {
330
+ *errtt = tt;
331
+ return 0;
391
332
  }
392
- // Update length
393
- len -= p - q;
394
333
  }
395
-
396
- // Check all data read
397
- if (len) {
334
+ if (CBS_len(&seq) != 0) {
398
335
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_SEQUENCE_LENGTH_MISMATCH);
399
- goto err;
400
- }
401
-
402
- // If we get here we've got no more data in the SEQUENCE, however we
403
- // may not have read all fields so check all remaining are OPTIONAL
404
- // and clear any that are.
405
- for (; i < it->tcount; tt++, i++) {
406
- const ASN1_TEMPLATE *seqtt;
407
- seqtt = asn1_do_adb(pval, tt, 1);
408
- if (seqtt == NULL) {
409
- goto err;
410
- }
411
- if (seqtt->flags & ASN1_TFLG_OPTIONAL) {
412
- ASN1_VALUE **pseqval;
413
- pseqval = asn1_get_field_ptr(pval, seqtt);
414
- ASN1_template_free(pseqval, seqtt);
415
- } else {
416
- errtt = seqtt;
417
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_FIELD_MISSING);
418
- goto err;
419
- }
336
+ return 0;
420
337
  }
421
- // Save encoding
422
- if (!asn1_enc_save(pval, *in, p - *in, it, buf)) {
423
- goto auxerr;
338
+ // Save a copy of the bytes consumed.
339
+ if (!asn1_enc_save(pval, CBS_data(&copy), CBS_len(&copy) - CBS_len(cbs),
340
+ it)) {
341
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_AUX_ERROR);
342
+ return 0;
424
343
  }
425
- if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, NULL)) {
426
- goto auxerr;
344
+ if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, nullptr)) {
345
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_AUX_ERROR);
346
+ return 0;
427
347
  }
428
- *in = p;
429
348
  return 1;
430
349
  }
431
350
 
432
351
  default:
352
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
433
353
  return 0;
434
354
  }
435
- auxerr:
436
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_AUX_ERROR);
437
- err:
438
- ASN1_item_ex_free(pval, it);
439
- if (errtt) {
440
- ERR_add_error_data(4, "Field=", errtt->field_name, ", Type=", it->sname);
441
- } else {
442
- ERR_add_error_data(2, "Type=", it->sname);
443
- }
444
- return 0;
445
- }
446
-
447
- int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
448
- const ASN1_ITEM *it, int tag, int aclass, char opt,
449
- CRYPTO_BUFFER *buf) {
450
- return asn1_item_ex_d2i(pval, in, len, it, tag, aclass, opt, buf,
451
- /*depth=*/0);
452
355
  }
453
356
 
454
- // Templates are handled with two separate functions. One handles any
455
- // EXPLICIT tag and the other handles the rest.
456
-
457
- static int asn1_template_ex_d2i(ASN1_VALUE **val, const unsigned char **in,
458
- long inlen, const ASN1_TEMPLATE *tt, char opt,
459
- CRYPTO_BUFFER *buf, int depth) {
460
- int aclass;
461
- int ret;
462
- long len;
463
- const unsigned char *p, *q;
464
- if (!val) {
357
+ static int asn1_parse_item(ASN1_VALUE **pval, CBS *cbs, const ASN1_ITEM *it,
358
+ CBS_ASN1_TAG tag, bool opt, int depth) {
359
+ const ASN1_TEMPLATE *errtt = nullptr;
360
+ if (!asn1_parse_item_no_error_cleanup(pval, cbs, it, tag, opt, depth,
361
+ &errtt)) {
362
+ ASN1_item_ex_free(pval, it);
363
+ if (errtt != nullptr) {
364
+ ERR_add_error_data(4, "Field=", errtt->field_name, ", Type=", it->sname);
365
+ } else {
366
+ ERR_add_error_data(2, "Type=", it->sname);
367
+ }
465
368
  return 0;
466
369
  }
370
+ return 1;
371
+ }
372
+
373
+ // Templates are handled with two separate functions. One handles any EXPLICIT
374
+ // tag and the other handles the rest.
375
+
376
+ static int asn1_parse_template(ASN1_VALUE **pval, CBS *cbs,
377
+ const ASN1_TEMPLATE *tt, CBS_ASN1_TAG tag,
378
+ bool opt, int depth) {
467
379
  uint32_t flags = tt->flags;
468
- aclass = flags & ASN1_TFLG_TAG_CLASS;
469
-
470
- p = *in;
471
-
472
- // Check if EXPLICIT tag expected
473
- if (flags & ASN1_TFLG_EXPTAG) {
474
- char cst;
475
- // Need to work out amount of data available to the inner content and
476
- // where it starts: so read in EXPLICIT header to get the info.
477
- ret = asn1_check_tlen(&len, NULL, NULL, &cst, &p, inlen, tt->tag, aclass,
478
- opt);
479
- q = p;
480
- if (!ret) {
481
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
482
- return 0;
483
- } else if (ret == -1) {
484
- return -1;
485
- }
486
- if (!cst) {
487
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED);
488
- return 0;
489
- }
490
- // We've found the field so it can't be OPTIONAL now
491
- ret = asn1_template_noexp_d2i(val, &p, len, tt, /*opt=*/0, buf, depth);
492
- if (!ret) {
493
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
380
+ if ((flags & ASN1_TFLG_EXPTAG) == 0) {
381
+ return asn1_parse_template_no_explicit(pval, cbs, tt, tag, opt, depth);
382
+ }
383
+
384
+ // Determine the tag.
385
+ if (tag == 0) {
386
+ tag = asn1_tag_to_cbs(flags & ASN1_TFLG_TAG_CLASS, tt->tag);
387
+ if (tag == 0) {
494
388
  return 0;
495
389
  }
496
- // We read the field in OK so update length
497
- len -= p - q;
498
- // Check for trailing data.
499
- if (len) {
500
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_EXPLICIT_LENGTH_MISMATCH);
501
- goto err;
502
- }
503
- } else {
504
- return asn1_template_noexp_d2i(val, in, inlen, tt, opt, buf, depth);
505
390
  }
391
+ tag |= CBS_ASN1_CONSTRUCTED;
506
392
 
507
- *in = p;
508
- return 1;
509
-
510
- err:
511
- ASN1_template_free(val, tt);
512
- return 0;
513
- }
393
+ if (opt && !CBS_peek_asn1_tag(cbs, tag)) {
394
+ ASN1_template_free(pval, tt);
395
+ return 1;
396
+ }
514
397
 
515
- static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in,
516
- long len, const ASN1_TEMPLATE *tt, char opt,
517
- CRYPTO_BUFFER *buf, int depth) {
518
- int aclass;
519
- int ret;
520
- const unsigned char *p;
521
- if (!val) {
398
+ CBS child;
399
+ if (!CBS_get_asn1(cbs, &child, tag)) {
400
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
522
401
  return 0;
523
402
  }
524
- uint32_t flags = tt->flags;
525
- aclass = flags & ASN1_TFLG_TAG_CLASS;
403
+ if (!asn1_parse_template_no_explicit(pval, &child, tt, /*tag=*/0,
404
+ /*opt=*/false, depth)) {
405
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
406
+ return 0;
407
+ }
408
+ if (CBS_len(&child) != 0) {
409
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_EXPLICIT_LENGTH_MISMATCH);
410
+ return 0;
411
+ }
412
+ return 1;
413
+ }
526
414
 
527
- p = *in;
415
+ static int asn1_parse_template_no_explicit(ASN1_VALUE **pval, CBS *cbs,
416
+ const ASN1_TEMPLATE *tt,
417
+ CBS_ASN1_TAG tag, bool opt,
418
+ int depth) {
419
+ // If `tt` provides implicit tagging and the caller did not already override
420
+ // the tag, pick up the tag from the template.
421
+ uint32_t flags = tt->flags;
422
+ if ((flags & ASN1_TFLG_IMPTAG) && tag == 0) {
423
+ tag = asn1_tag_to_cbs(flags & ASN1_TFLG_TAG_CLASS, tt->tag);
424
+ if (tag == 0) {
425
+ return 0;
426
+ }
427
+ }
528
428
 
529
429
  if (flags & ASN1_TFLG_SK_MASK) {
530
- // SET OF, SEQUENCE OF
531
- int sktag, skaclass;
532
- // First work out expected inner tag value
533
- if (flags & ASN1_TFLG_IMPTAG) {
534
- sktag = tt->tag;
535
- skaclass = aclass;
536
- } else {
537
- skaclass = V_ASN1_UNIVERSAL;
538
- if (flags & ASN1_TFLG_SET_OF) {
539
- sktag = V_ASN1_SET;
540
- } else {
541
- sktag = V_ASN1_SEQUENCE;
542
- }
430
+ if (tag == 0) {
431
+ tag = (flags & ASN1_TFLG_SET_OF) ? CBS_ASN1_SET : CBS_ASN1_SEQUENCE;
543
432
  }
544
- // Get the tag
545
- ret =
546
- asn1_check_tlen(&len, NULL, NULL, NULL, &p, len, sktag, skaclass, opt);
547
- if (!ret) {
548
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
549
- return 0;
550
- } else if (ret == -1) {
551
- return -1;
433
+ tag |= CBS_ASN1_CONSTRUCTED;
434
+
435
+ if (opt && !CBS_peek_asn1_tag(cbs, tag)) {
436
+ ASN1_template_free(pval, tt);
437
+ return 1;
552
438
  }
553
- if (!*val) {
554
- *val = (ASN1_VALUE *)sk_ASN1_VALUE_new_null();
555
- } else {
556
- // We've got a valid STACK: free up any items present
557
- STACK_OF(ASN1_VALUE) *sktmp = (STACK_OF(ASN1_VALUE) *)*val;
558
- ASN1_VALUE *vtmp;
559
- while (sk_ASN1_VALUE_num(sktmp) > 0) {
560
- vtmp = sk_ASN1_VALUE_pop(sktmp);
561
- ASN1_item_ex_free(&vtmp, ASN1_ITEM_ptr(tt->item));
562
- }
439
+ CBS seq;
440
+ if (!CBS_get_asn1(cbs, &seq, tag)) {
441
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
442
+ return 0;
563
443
  }
564
444
 
565
- if (!*val) {
566
- goto err;
445
+ STACK_OF(ASN1_VALUE) *sk =
446
+ ensure_value<STACK_OF(ASN1_VALUE), sk_ASN1_VALUE_new_null>(pval);
447
+ if (sk == nullptr) {
448
+ return 0;
567
449
  }
450
+ assert(sk_ASN1_VALUE_num(sk) == 0);
568
451
 
569
- // Read as many items as we can
570
- while (len > 0) {
571
- ASN1_VALUE *skfield;
572
- const unsigned char *q = p;
573
- skfield = NULL;
574
- if (!asn1_item_ex_d2i(&skfield, &p, len, ASN1_ITEM_ptr(tt->item),
575
- /*tag=*/-1, /*aclass=*/0, /*opt=*/0, buf, depth)) {
452
+ while (CBS_len(&seq) != 0) {
453
+ ASN1_VALUE *skfield = nullptr;
454
+ if (!asn1_parse_item(&skfield, &seq, ASN1_ITEM_ptr(tt->item), /*tag=*/0,
455
+ /*opt=*/false, depth)) {
576
456
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
577
- goto err;
457
+ ASN1_item_ex_free(&skfield, ASN1_ITEM_ptr(tt->item));
458
+ return 0;
578
459
  }
579
- len -= p - q;
580
- if (!sk_ASN1_VALUE_push((STACK_OF(ASN1_VALUE) *)*val, skfield)) {
460
+ if (!sk_ASN1_VALUE_push(sk, skfield)) {
581
461
  ASN1_item_ex_free(&skfield, ASN1_ITEM_ptr(tt->item));
582
- goto err;
462
+ return 0;
583
463
  }
584
464
  }
585
- } else if (flags & ASN1_TFLG_IMPTAG) {
586
- // IMPLICIT tagging
587
- ret = asn1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), tt->tag,
588
- aclass, opt, buf, depth);
589
- if (!ret) {
590
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
591
- goto err;
592
- } else if (ret == -1) {
593
- return -1;
594
- }
595
- } else {
596
- // Nothing special
597
- ret = asn1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), /*tag=*/-1,
598
- /*aclass=*/0, opt, buf, depth);
599
- if (!ret) {
600
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
601
- goto err;
602
- } else if (ret == -1) {
603
- return -1;
604
- }
465
+ return 1;
605
466
  }
606
467
 
607
- *in = p;
608
- return 1;
609
-
610
- err:
611
- ASN1_template_free(val, tt);
612
- return 0;
468
+ return asn1_parse_item(pval, cbs, ASN1_ITEM_ptr(tt->item), tag, opt, depth);
613
469
  }
614
470
 
615
- static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in,
616
- long inlen, const ASN1_ITEM *it, int tag,
617
- int aclass, char opt) {
618
- int ret = 0, utype;
619
- long plen;
620
- char cst;
621
- const unsigned char *p;
622
- const unsigned char *cont = NULL;
623
- long len;
624
- if (!pval) {
625
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_NULL);
626
- return 0; // Should never happen
627
- }
628
-
629
- assert(it->itype == ASN1_ITYPE_PRIMITIVE || it->itype == ASN1_ITYPE_MSTRING);
630
- if (it->itype == ASN1_ITYPE_MSTRING) {
631
- utype = tag;
632
- tag = -1;
633
- } else {
634
- utype = it->utype;
635
- }
636
-
637
- if (utype == V_ASN1_ANY || utype == V_ASN1_ANY_AS_STRING) {
638
- // If type is ANY need to figure out type from tag
639
- unsigned char oclass;
640
- if (tag >= 0) {
471
+ static int asn1_parse_item_primitive(ASN1_VALUE **pval, CBS *cbs,
472
+ const ASN1_ITEM *it, CBS_ASN1_TAG tag,
473
+ bool opt, int depth) {
474
+ assert(it->itype == ASN1_ITYPE_PRIMITIVE);
475
+ // `ASN1_ITEM_TEMPLATE` should have been handled by the caller.
476
+ assert(it->templates == nullptr);
477
+ // Historically, `it->funcs` for primitive types contained an
478
+ // `ASN1_PRIMITIVE_FUNCS` table of callbacks.
479
+ assert(it->funcs == nullptr);
480
+ int utype = it->utype;
481
+
482
+ // Handle ANY types.
483
+ if (utype == V_ASN1_ANY) {
484
+ if (tag != 0) {
641
485
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_TAGGED_ANY);
642
486
  return 0;
643
487
  }
644
- if (opt) {
645
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OPTIONAL_ANY);
646
- return 0;
488
+ if (opt && CBS_len(cbs) == 0) {
489
+ ASN1_item_ex_free(pval, it);
490
+ return 1; // Omitted OPTIONAL value.
647
491
  }
648
- const int is_string = utype == V_ASN1_ANY_AS_STRING;
649
- p = *in;
650
- ret = asn1_check_tlen(&plen, &utype, &oclass, &cst, &p, inlen, -1, 0, 0);
651
- if (!ret) {
652
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
492
+ ASN1_TYPE *typ = ensure_value<ASN1_TYPE, ASN1_TYPE_new>(pval);
493
+ if (typ == nullptr) {
653
494
  return 0;
654
495
  }
655
- if (!is_supported_universal_type(utype, oclass)) {
656
- utype = V_ASN1_OTHER;
657
- }
658
- // These three types are not represented as |ASN1_STRING|, so they must be
659
- // parsed separately and then treated as an opaque |V_ASN1_OTHER|.
660
- if (is_string && (utype == V_ASN1_OBJECT || utype == V_ASN1_NULL ||
661
- utype == V_ASN1_BOOLEAN)) {
662
- if (cst) {
663
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_TYPE_NOT_PRIMITIVE);
664
- return 0;
665
- }
666
- CBS cbs;
667
- CBS_init(&cbs, p, plen);
668
- if (utype == V_ASN1_OBJECT && !CBS_is_valid_asn1_oid(&cbs)) {
669
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_OBJECT_ENCODING);
670
- return 0;
671
- }
672
- if (utype == V_ASN1_NULL && CBS_len(&cbs) != 0) {
673
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NULL_IS_WRONG_LENGTH);
674
- return 0;
675
- }
676
- if (utype == V_ASN1_BOOLEAN) {
677
- if (CBS_len(&cbs) != 1) {
678
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH);
679
- return 0;
680
- }
681
- uint8_t v = CBS_data(&cbs)[0];
682
- if (v != 0 && v != 0xff) {
683
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
684
- return 0;
685
- }
686
- }
687
- utype = V_ASN1_OTHER;
688
- }
689
- }
690
- if (tag == -1) {
691
- tag = utype;
692
- aclass = V_ASN1_UNIVERSAL;
693
- }
694
- p = *in;
695
- // Check header
696
- ret = asn1_check_tlen(&plen, NULL, NULL, &cst, &p, inlen, tag, aclass, opt);
697
- if (!ret) {
698
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
699
- return 0;
700
- } else if (ret == -1) {
701
- return -1;
496
+ return asn1_parse_any(cbs, typ);
702
497
  }
703
- ret = 0;
704
- // SEQUENCE, SET and "OTHER" are left in encoded form
705
- if ((utype == V_ASN1_SEQUENCE) || (utype == V_ASN1_SET) ||
706
- (utype == V_ASN1_OTHER)) {
707
- // SEQUENCE and SET must be constructed
708
- if (utype != V_ASN1_OTHER && !cst) {
709
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_TYPE_NOT_CONSTRUCTED);
710
- return 0;
711
- }
712
498
 
713
- cont = *in;
714
- len = p - cont + plen;
715
- p += plen;
716
- } else if (cst) {
717
- // This parser historically supported BER constructed strings. We no
718
- // longer do and will gradually tighten this parser into a DER
719
- // parser. BER types should use |CBS_asn1_ber_to_der|.
720
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_TYPE_NOT_PRIMITIVE);
721
- return 0;
722
- } else {
723
- cont = p;
724
- len = plen;
725
- p += plen;
499
+ // Determine the ASN.1 tag. `utype` must be a primitive `ASN1_ITEM`, handled
500
+ // by `DECLARE_ASN1_ITEM`.
501
+ assert(0 <= utype && utype <= int{CBS_ASN1_TAG_NUMBER_MASK});
502
+ if (tag == 0) {
503
+ tag = static_cast<CBS_ASN1_TAG>(utype);
726
504
  }
727
-
728
- // We now have content length and type: translate into a structure
729
- if (!asn1_ex_c2i(pval, cont, len, utype, it)) {
730
- goto err;
505
+ if (utype == V_ASN1_SEQUENCE || utype == V_ASN1_SET) {
506
+ tag |= CBS_ASN1_CONSTRUCTED;
731
507
  }
732
508
 
733
- *in = p;
734
- ret = 1;
735
- err:
736
- return ret;
737
- }
738
-
739
- // Translate ASN1 content octets into a structure
740
-
741
- static int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, long len,
742
- int utype, const ASN1_ITEM *it) {
743
- ASN1_VALUE **opval = NULL;
744
- ASN1_STRING *stmp;
745
- ASN1_TYPE *typ = NULL;
746
- int ret = 0;
747
- ASN1_INTEGER **tint;
748
-
749
- // Historically, |it->funcs| for primitive types contained an
750
- // |ASN1_PRIMITIVE_FUNCS| table of callbacks.
751
- assert(it->funcs == NULL);
752
-
753
- // If ANY type clear type and set pointer to internal value
754
- if (it->utype == V_ASN1_ANY) {
755
- if (!*pval) {
756
- typ = ASN1_TYPE_new();
757
- if (typ == NULL) {
758
- goto err;
759
- }
760
- *pval = (ASN1_VALUE *)typ;
761
- } else {
762
- typ = (ASN1_TYPE *)*pval;
763
- }
764
-
765
- if (utype != typ->type) {
766
- ASN1_TYPE_set(typ, utype, NULL);
767
- }
768
- opval = pval;
769
- pval = &typ->value.asn1_value;
509
+ if (opt && !CBS_peek_asn1_tag(cbs, tag)) {
510
+ ASN1_item_ex_free(pval, it);
511
+ return 1; // Omitted OPTIONAL value.
770
512
  }
771
513
 
772
- // If implementing a type that is not represented in |ASN1_STRING|, the
773
- // |V_ASN1_ANY_AS_STRING| logic must be modified to redirect it to
774
- // |V_ASN1_OTHER|.
514
+ // Handle non-`ASN1_STRING` types.
775
515
  switch (utype) {
776
- case V_ASN1_OBJECT:
777
- if (!c2i_ASN1_OBJECT((ASN1_OBJECT **)pval, &cont, len)) {
778
- goto err;
516
+ case V_ASN1_OBJECT: {
517
+ UniquePtr<ASN1_OBJECT> obj(asn1_parse_object(cbs, tag));
518
+ if (obj == nullptr) {
519
+ return 0;
779
520
  }
780
- break;
781
-
782
- case V_ASN1_NULL:
783
- if (len) {
521
+ ASN1_OBJECT_free((ASN1_OBJECT *)*pval);
522
+ *pval = (ASN1_VALUE *)obj.release();
523
+ return 1;
524
+ }
525
+ case V_ASN1_NULL: {
526
+ CBS null;
527
+ if (!CBS_get_asn1(cbs, &null, tag)) {
528
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
529
+ return 0;
530
+ }
531
+ if (CBS_len(&null) != 0) {
784
532
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_NULL_IS_WRONG_LENGTH);
785
- goto err;
533
+ return 0;
786
534
  }
787
535
  *pval = (ASN1_VALUE *)1;
788
- break;
789
-
790
- case V_ASN1_BOOLEAN:
791
- if (len != 1) {
536
+ return 1;
537
+ }
538
+ case V_ASN1_BOOLEAN: {
539
+ CBS child;
540
+ if (!CBS_get_asn1(cbs, &child, tag)) {
541
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
542
+ return 0;
543
+ }
544
+ // TODO(crbug.com/42290221): Reject invalid BOOLEAN encodings and just
545
+ // call `CBS_get_asn1_bool`.
546
+ if (CBS_len(&child) != 1) {
792
547
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH);
793
- goto err;
794
- } else {
795
- ASN1_BOOLEAN *tbool;
796
- tbool = (ASN1_BOOLEAN *)pval;
797
- *tbool = *cont;
548
+ return 0;
798
549
  }
799
- break;
550
+ ASN1_BOOLEAN *tbool;
551
+ tbool = (ASN1_BOOLEAN *)pval;
552
+ *tbool = CBS_data(&child)[0];
553
+ return 1;
554
+ }
555
+ }
800
556
 
801
- case V_ASN1_BIT_STRING:
802
- if (!c2i_ASN1_BIT_STRING((ASN1_BIT_STRING **)pval, &cont, len)) {
803
- goto err;
804
- }
805
- break;
557
+ // All other types as an `ASN1_STRING` representation.
558
+ ASN1_STRING *str = ensure_value<ASN1_STRING, ASN1_STRING_new>(pval);
559
+ if (str == nullptr) {
560
+ return 0;
561
+ }
806
562
 
563
+ switch (utype) {
564
+ case V_ASN1_BIT_STRING:
565
+ return asn1_parse_bit_string(cbs, str, tag);
807
566
  case V_ASN1_INTEGER:
567
+ return asn1_parse_integer(cbs, str, tag);
808
568
  case V_ASN1_ENUMERATED:
809
- tint = (ASN1_INTEGER **)pval;
810
- if (!c2i_ASN1_INTEGER(tint, &cont, len)) {
811
- goto err;
812
- }
813
- // Fixup type to match the expected form
814
- (*tint)->type = utype | ((*tint)->type & V_ASN1_NEG);
815
- break;
816
-
569
+ return asn1_parse_enumerated(cbs, str, tag);
570
+ case V_ASN1_UNIVERSALSTRING:
571
+ return asn1_parse_universal_string(cbs, str, tag);
572
+ case V_ASN1_BMPSTRING:
573
+ return asn1_parse_bmp_string(cbs, str, tag);
574
+ case V_ASN1_UTF8STRING:
575
+ return asn1_parse_utf8_string(cbs, str, tag);
576
+ case V_ASN1_UTCTIME:
577
+ // TODO(crbug.com/42290221): Reject timezone offsets. We need to parse
578
+ // invalid timestamps in `X509` objects, but that parser no longer uses
579
+ // this code.
580
+ return asn1_parse_utc_time(cbs, str, tag, /*allow_timezone_offset=*/1);
581
+ case V_ASN1_GENERALIZEDTIME:
582
+ return asn1_parse_generalized_time(cbs, str, tag);
817
583
  case V_ASN1_OCTET_STRING:
584
+ return asn1_parse_octet_string(cbs, str, tag);
585
+ case V_ASN1_T61STRING:
586
+ return asn1_parse_t61_string(cbs, str, tag);
818
587
  case V_ASN1_NUMERICSTRING:
819
588
  case V_ASN1_PRINTABLESTRING:
820
- case V_ASN1_T61STRING:
821
589
  case V_ASN1_VIDEOTEXSTRING:
822
590
  case V_ASN1_IA5STRING:
823
- case V_ASN1_UTCTIME:
824
- case V_ASN1_GENERALIZEDTIME:
825
591
  case V_ASN1_GRAPHICSTRING:
826
592
  case V_ASN1_VISIBLESTRING:
827
593
  case V_ASN1_GENERALSTRING:
828
- case V_ASN1_UNIVERSALSTRING:
829
- case V_ASN1_BMPSTRING:
830
- case V_ASN1_UTF8STRING:
831
- case V_ASN1_OTHER:
832
- case V_ASN1_SET:
594
+ // TODO(crbug.com/42290290): Enforce the encoding of the other string
595
+ // types.
596
+ return asn1_parse_string_unchecked(cbs, str, utype, tag);
833
597
  case V_ASN1_SEQUENCE: {
834
- CBS cbs;
835
- CBS_init(&cbs, cont, (size_t)len);
836
- if (utype == V_ASN1_BMPSTRING) {
837
- while (CBS_len(&cbs) != 0) {
838
- uint32_t c;
839
- if (!CBS_get_ucs2_be(&cbs, &c)) {
840
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_BMPSTRING);
841
- goto err;
842
- }
843
- }
844
- }
845
- if (utype == V_ASN1_UNIVERSALSTRING) {
846
- while (CBS_len(&cbs) != 0) {
847
- uint32_t c;
848
- if (!CBS_get_utf32_be(&cbs, &c)) {
849
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UNIVERSALSTRING);
850
- goto err;
851
- }
852
- }
853
- }
854
- if (utype == V_ASN1_UTF8STRING) {
855
- while (CBS_len(&cbs) != 0) {
856
- uint32_t c;
857
- if (!CBS_get_utf8(&cbs, &c)) {
858
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UTF8STRING);
859
- goto err;
860
- }
861
- }
862
- }
863
- if (utype == V_ASN1_UTCTIME) {
864
- if (!CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/1)) {
865
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_TIME_FORMAT);
866
- goto err;
867
- }
868
- }
869
- if (utype == V_ASN1_GENERALIZEDTIME) {
870
- if (!CBS_parse_generalized_time(&cbs, NULL,
871
- /*allow_timezone_offset=*/0)) {
872
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_TIME_FORMAT);
873
- goto err;
874
- }
875
- }
876
- // TODO(https://crbug.com/boringssl/427): Check other string types.
877
-
878
- // All based on ASN1_STRING and handled the same
879
- if (!*pval) {
880
- stmp = ASN1_STRING_type_new(utype);
881
- if (!stmp) {
882
- goto err;
883
- }
884
- *pval = (ASN1_VALUE *)stmp;
885
- } else {
886
- stmp = (ASN1_STRING *)*pval;
887
- stmp->type = utype;
888
- }
889
- if (!ASN1_STRING_set(stmp, cont, len)) {
890
- ASN1_STRING_free(stmp);
891
- *pval = NULL;
892
- goto err;
598
+ // Save the entire element in the string.
599
+ CBS elem;
600
+ if (!CBS_get_asn1_element(cbs, &elem, tag)) {
601
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
602
+ return 0;
893
603
  }
894
- break;
604
+ str->type = V_ASN1_SEQUENCE;
605
+ return ASN1_STRING_set(str, CBS_data(&elem), CBS_len(&elem));
895
606
  }
896
-
897
607
  default:
898
608
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
899
- goto err;
900
- }
901
- // If ASN1_ANY and NULL type fix up value
902
- if (typ && (utype == V_ASN1_NULL)) {
903
- typ->value.ptr = NULL;
904
- }
905
-
906
- ret = 1;
907
- err:
908
- if (!ret) {
909
- ASN1_TYPE_free(typ);
910
- if (opval) {
911
- *opval = NULL;
912
- }
913
- }
914
- return ret;
915
- }
916
-
917
- // Check an ASN1 tag and length: a bit like ASN1_get_object but it
918
- // checks the expected tag.
919
-
920
- static int asn1_check_tlen(long *olen, int *otag, unsigned char *oclass,
921
- char *cst, const unsigned char **in, long len,
922
- int exptag, int expclass, char opt) {
923
- int i;
924
- int ptag, pclass;
925
- long plen;
926
- const unsigned char *p;
927
- p = *in;
928
-
929
- i = ASN1_get_object(&p, &plen, &ptag, &pclass, len);
930
- if (i & 0x80) {
931
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_OBJECT_HEADER);
932
- return 0;
933
- }
934
- if (exptag >= 0) {
935
- if ((exptag != ptag) || (expclass != pclass)) {
936
- // If type is OPTIONAL, not an error: indicate missing type.
937
- if (opt) {
938
- return -1;
939
- }
940
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_TAG);
941
609
  return 0;
942
- }
943
- }
944
-
945
- if (cst) {
946
- *cst = i & V_ASN1_CONSTRUCTED;
947
- }
948
-
949
- if (olen) {
950
- *olen = plen;
951
- }
952
-
953
- if (oclass) {
954
- *oclass = pclass;
955
610
  }
956
-
957
- if (otag) {
958
- *otag = ptag;
959
- }
960
-
961
- *in = p;
962
- return 1;
963
611
  }