grpc 1.84.1 → 1.85.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

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