grpc 1.53.2 → 1.54.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (693) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +78 -66
  3. data/include/grpc/event_engine/event_engine.h +30 -14
  4. data/include/grpc/grpc_security.h +4 -0
  5. data/include/grpc/support/port_platform.h +4 -4
  6. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +11 -0
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +6 -0
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -11
  9. data/src/core/ext/filters/client_channel/backup_poller.h +0 -3
  10. data/src/core/ext/filters/client_channel/client_channel.cc +848 -813
  11. data/src/core/ext/filters/client_channel/client_channel.h +131 -173
  12. data/src/core/ext/filters/client_channel/client_channel_internal.h +114 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +4 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +6 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +17 -18
  16. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +134 -151
  17. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2 -16
  18. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +14 -10
  19. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +68 -30
  20. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -5
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +2 -2
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +30 -38
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +4 -4
  26. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -26
  27. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -179
  28. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -2
  29. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -2
  30. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +4 -2
  31. data/src/core/ext/filters/client_channel/retry_filter.cc +95 -102
  32. data/src/core/ext/filters/client_channel/subchannel.cc +2 -4
  33. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +26 -27
  34. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -5
  35. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -3
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -12
  37. data/src/core/ext/filters/http/message_compress/compression_filter.cc +27 -11
  38. data/src/core/ext/filters/message_size/message_size_filter.cc +141 -224
  39. data/src/core/ext/filters/message_size/message_size_filter.h +48 -3
  40. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -6
  41. data/src/core/ext/gcp/metadata_query.cc +142 -0
  42. data/src/core/ext/gcp/metadata_query.h +82 -0
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +70 -55
  44. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +8 -12
  45. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -5
  46. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +116 -58
  47. data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -2
  48. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  50. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +222 -118
  51. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +113 -295
  52. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -2
  53. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +0 -2
  54. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +277 -451
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -14
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -9
  58. data/src/core/ext/transport/chttp2/transport/internal.h +16 -3
  59. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  60. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -5
  61. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -14
  62. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +5 -3
  63. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +22 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +5 -3
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +22 -0
  66. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +23 -5
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +94 -3
  68. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -2
  69. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -0
  70. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +6 -3
  71. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  72. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +24 -6
  73. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +111 -12
  74. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +9 -7
  75. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +27 -9
  76. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +0 -1
  77. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +11 -7
  78. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +56 -12
  79. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +5 -3
  80. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +24 -0
  81. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +5 -3
  82. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  83. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +13 -2
  84. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +49 -0
  85. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +24 -9
  86. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +66 -12
  87. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +139 -136
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +31 -15
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +12 -9
  92. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +15 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +54 -45
  94. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +135 -119
  95. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +100 -97
  97. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +15 -18
  98. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +272 -264
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +117 -117
  100. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +5 -5
  101. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +5 -5
  102. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +5 -5
  103. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +12 -9
  104. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -0
  105. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -2
  106. data/src/core/ext/xds/xds_client_stats.cc +29 -15
  107. data/src/core/ext/xds/xds_client_stats.h +24 -20
  108. data/src/core/ext/xds/xds_endpoint.cc +5 -2
  109. data/src/core/ext/xds/xds_endpoint.h +9 -1
  110. data/src/core/ext/xds/xds_http_rbac_filter.cc +1 -1
  111. data/src/core/ext/xds/xds_lb_policy_registry.cc +13 -0
  112. data/src/core/ext/xds/xds_transport_grpc.cc +1 -1
  113. data/src/core/lib/channel/call_finalization.h +1 -1
  114. data/src/core/lib/channel/call_tracer.cc +51 -0
  115. data/src/core/lib/channel/call_tracer.h +101 -38
  116. data/src/core/lib/channel/connected_channel.cc +483 -1050
  117. data/src/core/lib/channel/context.h +8 -1
  118. data/src/core/lib/channel/promise_based_filter.cc +106 -42
  119. data/src/core/lib/channel/promise_based_filter.h +27 -13
  120. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  121. data/src/core/lib/config/config_vars.cc +151 -0
  122. data/src/core/lib/config/config_vars.h +127 -0
  123. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  124. data/src/core/lib/config/load_config.cc +66 -0
  125. data/src/core/lib/config/load_config.h +49 -0
  126. data/src/core/lib/debug/trace.cc +5 -6
  127. data/src/core/lib/debug/trace.h +0 -5
  128. data/src/core/lib/event_engine/event_engine.cc +37 -2
  129. data/src/core/lib/event_engine/handle_containers.h +7 -22
  130. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  131. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +0 -4
  132. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -9
  133. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +48 -15
  134. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +8 -8
  135. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -5
  136. data/src/core/lib/event_engine/posix_engine/posix_engine.h +0 -1
  137. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +6 -32
  138. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +0 -3
  139. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +27 -18
  140. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +0 -3
  141. data/src/core/lib/event_engine/resolved_address.cc +2 -1
  142. data/src/core/lib/event_engine/windows/win_socket.cc +0 -1
  143. data/src/core/lib/event_engine/windows/windows_endpoint.cc +129 -82
  144. data/src/core/lib/event_engine/windows/windows_endpoint.h +21 -5
  145. data/src/core/lib/event_engine/windows/windows_engine.cc +39 -18
  146. data/src/core/lib/event_engine/windows/windows_engine.h +2 -1
  147. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  148. data/src/core/lib/event_engine/windows/windows_listener.h +155 -0
  149. data/src/core/lib/experiments/config.cc +3 -10
  150. data/src/core/lib/experiments/experiments.cc +7 -0
  151. data/src/core/lib/experiments/experiments.h +9 -1
  152. data/src/core/lib/gpr/log.cc +15 -28
  153. data/src/core/lib/gprpp/fork.cc +8 -14
  154. data/src/core/lib/gprpp/orphanable.h +4 -3
  155. data/src/core/lib/gprpp/per_cpu.h +9 -3
  156. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +49 -37
  157. data/src/core/lib/gprpp/ref_counted.h +33 -34
  158. data/src/core/lib/gprpp/thd.h +16 -0
  159. data/src/core/lib/gprpp/time.cc +1 -0
  160. data/src/core/lib/gprpp/time.h +4 -4
  161. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +2 -2
  162. data/src/core/lib/iomgr/call_combiner.h +2 -2
  163. data/src/core/lib/iomgr/endpoint_cfstream.cc +4 -2
  164. data/src/core/lib/iomgr/ev_posix.cc +13 -53
  165. data/src/core/lib/iomgr/ev_posix.h +0 -3
  166. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +103 -76
  167. data/src/core/lib/iomgr/iomgr.cc +4 -8
  168. data/src/core/lib/iomgr/iomgr_windows.cc +8 -2
  169. data/src/core/lib/iomgr/pollset_set_windows.cc +9 -9
  170. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  171. data/src/core/lib/iomgr/socket_utils_common_posix.cc +16 -3
  172. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -2
  173. data/src/core/lib/iomgr/tcp_posix.cc +0 -1
  174. data/src/core/lib/iomgr/tcp_server_posix.cc +19 -55
  175. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -12
  176. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  177. data/src/core/lib/iomgr/tcp_server_windows.cc +176 -9
  178. data/src/core/lib/iomgr/tcp_windows.cc +12 -8
  179. data/src/core/lib/load_balancing/lb_policy.cc +9 -13
  180. data/src/core/lib/load_balancing/lb_policy.h +4 -2
  181. data/src/core/lib/promise/activity.cc +22 -6
  182. data/src/core/lib/promise/activity.h +61 -24
  183. data/src/core/lib/promise/cancel_callback.h +77 -0
  184. data/src/core/lib/promise/detail/basic_seq.h +1 -1
  185. data/src/core/lib/promise/detail/promise_factory.h +4 -0
  186. data/src/core/lib/promise/for_each.h +176 -0
  187. data/src/core/lib/promise/if.h +9 -0
  188. data/src/core/lib/promise/interceptor_list.h +23 -2
  189. data/src/core/lib/promise/latch.h +89 -3
  190. data/src/core/lib/promise/loop.h +13 -9
  191. data/src/core/lib/promise/map.h +7 -0
  192. data/src/core/lib/promise/party.cc +286 -0
  193. data/src/core/lib/promise/party.h +499 -0
  194. data/src/core/lib/promise/pipe.h +197 -57
  195. data/src/core/lib/promise/poll.h +48 -0
  196. data/src/core/lib/promise/promise.h +2 -2
  197. data/src/core/lib/resource_quota/arena.cc +19 -3
  198. data/src/core/lib/resource_quota/arena.h +119 -5
  199. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  200. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +12 -35
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  202. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +0 -59
  203. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -5
  204. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  205. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -0
  206. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +2 -0
  207. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +5 -9
  208. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -25
  209. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +12 -0
  210. data/src/core/lib/security/transport/secure_endpoint.cc +4 -2
  211. data/src/core/lib/security/transport/server_auth_filter.cc +20 -2
  212. data/src/core/lib/slice/slice.cc +1 -1
  213. data/src/core/lib/surface/builtins.cc +2 -0
  214. data/src/core/lib/surface/call.cc +926 -1024
  215. data/src/core/lib/surface/call.h +10 -0
  216. data/src/core/lib/surface/lame_client.cc +1 -0
  217. data/src/core/lib/surface/validate_metadata.cc +42 -43
  218. data/src/core/lib/surface/validate_metadata.h +0 -9
  219. data/src/core/lib/surface/version.cc +2 -2
  220. data/src/core/lib/transport/batch_builder.cc +179 -0
  221. data/src/core/lib/transport/batch_builder.h +468 -0
  222. data/src/core/lib/transport/bdp_estimator.cc +7 -7
  223. data/src/core/lib/transport/bdp_estimator.h +10 -6
  224. data/src/core/lib/transport/custom_metadata.h +30 -0
  225. data/src/core/lib/transport/metadata_batch.cc +5 -2
  226. data/src/core/lib/transport/metadata_batch.h +17 -113
  227. data/src/core/lib/transport/parsed_metadata.h +6 -16
  228. data/src/core/lib/transport/timeout_encoding.cc +6 -1
  229. data/src/core/lib/transport/transport.cc +30 -2
  230. data/src/core/lib/transport/transport.h +70 -14
  231. data/src/core/lib/transport/transport_impl.h +7 -0
  232. data/src/core/lib/transport/transport_op_string.cc +52 -42
  233. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -2
  234. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -0
  235. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +21 -4
  236. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +5 -0
  237. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  238. data/src/core/tsi/ssl_transport_security.cc +4 -2
  239. data/src/ruby/lib/grpc/version.rb +1 -1
  240. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  241. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  242. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  243. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  244. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  245. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  246. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  247. data/{src/core/lib/gprpp/global_config_custom.h → third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc} +11 -14
  248. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  249. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  250. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  251. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  252. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  253. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  254. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  255. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  256. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  257. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  258. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  259. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  260. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  261. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  262. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  263. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  264. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  265. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +12 -8
  266. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  269. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  270. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  272. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  273. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  274. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +174 -194
  275. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  276. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  277. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  278. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  279. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  280. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  281. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  282. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  283. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  284. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  285. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  286. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  287. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +133 -88
  288. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +791 -791
  290. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +526 -526
  291. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  292. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  293. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  294. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  295. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  296. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +11 -7
  297. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +4 -4
  298. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  299. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -4
  300. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +17 -10
  301. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -3
  302. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  303. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  304. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  305. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +9 -5
  306. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  307. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  308. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  309. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  310. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  311. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  312. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  313. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  314. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  315. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  316. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  317. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  318. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  319. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  320. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  321. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  322. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +6 -12
  323. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -11
  324. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  325. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  326. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  327. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  328. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  329. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  330. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  331. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  332. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  333. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  334. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  335. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  336. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  337. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  338. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +16 -27
  339. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  340. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  341. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  342. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  344. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  345. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +39 -16
  346. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  347. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  348. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  349. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +214 -99
  350. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +21 -5
  351. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  352. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  353. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  354. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  355. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  356. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  358. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  359. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  360. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  361. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  362. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  363. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +5 -5
  364. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  365. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  366. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  367. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  368. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  369. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  370. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +35 -27
  377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  400. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  402. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +21 -6
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  407. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +25 -25
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +91 -17
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +5 -5
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +34 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +54 -23
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +44 -60
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +60 -53
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +48 -36
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +2 -7
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -3
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +0 -1
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +8 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +42 -14
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -15
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +2 -4
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +71 -43
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +14 -16
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -4
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -45
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +22 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +63 -52
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +107 -62
  443. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +58 -31
  444. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +523 -422
  446. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  449. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  450. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  451. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  452. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +19 -6
  453. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +32 -14
  454. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  455. data/third_party/boringssl-with-bazel/src/crypto/internal.h +373 -18
  456. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +61 -0
  457. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +205 -0
  458. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  459. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  460. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  461. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +13 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  463. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  464. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +629 -613
  465. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  466. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  467. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  468. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  469. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  470. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  472. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  473. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  474. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  475. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  476. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  477. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  478. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  479. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  480. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +3 -4
  481. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  482. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  483. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  484. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  485. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +66 -34
  486. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +190 -77
  487. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +81 -284
  488. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +109 -42
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +54 -55
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +284 -331
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +67 -50
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +153 -150
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +786 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +227 -252
  504. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  505. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  506. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +230 -224
  507. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  508. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  509. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  510. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  511. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +534 -618
  512. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  513. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +116 -182
  514. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  515. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +181 -202
  516. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  517. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  518. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1865 -2050
  519. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +433 -462
  520. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  521. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +267 -263
  522. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  523. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  524. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  525. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  526. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  527. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +326 -415
  528. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  529. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  530. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  531. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  532. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  533. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  534. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  535. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  536. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  537. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  538. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  539. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  540. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +78 -170
  541. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  543. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  544. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  545. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  546. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +309 -346
  547. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +341 -365
  548. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  549. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  550. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  551. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  552. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  553. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +122 -125
  554. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  555. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +247 -253
  556. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  557. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  558. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  559. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  560. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +143 -136
  561. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +664 -707
  562. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +83 -75
  563. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1062 -1146
  564. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +8 -4
  565. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  566. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +211 -187
  567. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  568. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -14
  569. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +21 -2
  570. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  571. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  572. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  573. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  574. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  575. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  576. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  577. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  578. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  579. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  580. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  581. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  582. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  583. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  584. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +22 -30
  585. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  586. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  587. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +41 -16
  588. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  589. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  590. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +13 -0
  591. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  592. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -15
  593. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  595. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +7 -4
  596. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  597. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +13 -21
  598. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +139 -75
  599. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  600. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +384 -286
  601. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +5 -6
  602. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  603. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +18 -7
  604. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +49 -23
  605. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  606. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1592 -1074
  607. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +202 -205
  608. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  609. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  610. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  611. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  612. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  613. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +34 -20
  614. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +65 -34
  615. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  616. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  617. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +32 -28
  618. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  619. data/third_party/boringssl-with-bazel/src/ssl/internal.h +130 -98
  620. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +27 -11
  621. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  622. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  623. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  624. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +39 -65
  625. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +30 -33
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +77 -100
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +120 -107
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +164 -30
  631. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +150 -60
  632. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +22 -11
  633. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  634. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  635. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +5 -43
  636. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  637. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +2 -2
  638. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +22 -34
  639. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  640. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  641. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  642. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  643. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  644. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  645. metadata +103 -70
  646. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +0 -39
  647. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +0 -30
  648. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -29
  649. data/src/core/lib/gprpp/global_config.h +0 -93
  650. data/src/core/lib/gprpp/global_config_env.cc +0 -140
  651. data/src/core/lib/gprpp/global_config_env.h +0 -133
  652. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  653. data/src/core/lib/promise/intra_activity_waiter.h +0 -55
  654. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  655. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -29
  656. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  657. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +0 -83
  658. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  659. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  660. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  661. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +0 -38
  662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  663. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  664. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  665. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  667. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  668. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  669. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  670. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  671. /data/src/core/lib/gpr/{log_android.cc → android/log.cc} +0 -0
  672. /data/src/core/lib/gpr/{cpu_iphone.cc → iphone/cpu.cc} +0 -0
  673. /data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +0 -0
  674. /data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +0 -0
  675. /data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +0 -0
  676. /data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +0 -0
  677. /data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +0 -0
  678. /data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +0 -0
  679. /data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +0 -0
  680. /data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +0 -0
  681. /data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +0 -0
  682. /data/src/core/lib/gpr/{cpu_windows.cc → windows/cpu.cc} +0 -0
  683. /data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +0 -0
  684. /data/src/core/lib/gpr/{string_windows.cc → windows/string.cc} +0 -0
  685. /data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +0 -0
  686. /data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +0 -0
  687. /data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +0 -0
  688. /data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +0 -0
  689. /data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +0 -0
  690. /data/src/core/lib/gprpp/{env_posix.cc → posix/env.cc} +0 -0
  691. /data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +0 -0
  692. /data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +0 -0
  693. /data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +0 -0
@@ -78,605 +78,601 @@ static int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *out_omit,
78
78
  static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
79
79
  int skcontlen, const ASN1_ITEM *item, int do_sort);
80
80
  static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
81
- const ASN1_TEMPLATE *tt, int tag, int aclass);
82
-
83
- /*
84
- * Top level i2d equivalents
85
- */
86
-
87
- int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it)
88
- {
89
- if (out && !*out) {
90
- unsigned char *p, *buf;
91
- int len = ASN1_item_ex_i2d(&val, NULL, it, /*tag=*/-1, /*aclass=*/0);
92
- if (len <= 0) {
93
- return len;
94
- }
95
- buf = OPENSSL_malloc(len);
96
- if (!buf) {
97
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
98
- return -1;
99
- }
100
- p = buf;
101
- int len2 = ASN1_item_ex_i2d(&val, &p, it, /*tag=*/-1, /*aclass=*/0);
102
- if (len2 <= 0) {
103
- return len2;
104
- }
105
- assert(len == len2);
106
- *out = buf;
107
- return len;
81
+ const ASN1_TEMPLATE *tt, int tag, int aclass,
82
+ int optional);
83
+
84
+ // Top level i2d equivalents
85
+
86
+ int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it) {
87
+ if (out && !*out) {
88
+ unsigned char *p, *buf;
89
+ int len = ASN1_item_ex_i2d(&val, NULL, it, /*tag=*/-1, /*aclass=*/0);
90
+ if (len <= 0) {
91
+ return len;
92
+ }
93
+ buf = OPENSSL_malloc(len);
94
+ if (!buf) {
95
+ return -1;
108
96
  }
97
+ p = buf;
98
+ int len2 = ASN1_item_ex_i2d(&val, &p, it, /*tag=*/-1, /*aclass=*/0);
99
+ if (len2 <= 0) {
100
+ OPENSSL_free(buf);
101
+ return len2;
102
+ }
103
+ assert(len == len2);
104
+ *out = buf;
105
+ return len;
106
+ }
109
107
 
110
- return ASN1_item_ex_i2d(&val, out, it, /*tag=*/-1, /*aclass=*/0);
108
+ return ASN1_item_ex_i2d(&val, out, it, /*tag=*/-1, /*aclass=*/0);
111
109
  }
112
110
 
113
- /*
114
- * Encode an item, taking care of IMPLICIT tagging (if any). This function
115
- * performs the normal item handling: it can be used in external types.
116
- */
111
+ // Encode an item, taking care of IMPLICIT tagging (if any). This function
112
+ // performs the normal item handling: it can be used in external types.
117
113
 
118
114
  int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
119
- const ASN1_ITEM *it, int tag, int aclass)
120
- {
121
- int ret = asn1_item_ex_i2d_opt(pval, out, it, tag, aclass, /*optional=*/0);
122
- assert(ret != 0);
123
- return ret;
115
+ const ASN1_ITEM *it, int tag, int aclass) {
116
+ int ret = asn1_item_ex_i2d_opt(pval, out, it, tag, aclass, /*optional=*/0);
117
+ assert(ret != 0);
118
+ return ret;
124
119
  }
125
120
 
126
- /* asn1_item_ex_i2d_opt behaves like |ASN1_item_ex_i2d| but, if |optional| is
127
- * non-zero and |*pval| is omitted, it returns zero and writes no bytes. */
121
+ // asn1_item_ex_i2d_opt behaves like |ASN1_item_ex_i2d| but, if |optional| is
122
+ // non-zero and |*pval| is omitted, it returns zero and writes no bytes.
128
123
  int asn1_item_ex_i2d_opt(ASN1_VALUE **pval, unsigned char **out,
129
124
  const ASN1_ITEM *it, int tag, int aclass,
130
- int optional)
131
- {
132
- const ASN1_TEMPLATE *tt = NULL;
133
- int i, seqcontlen, seqlen;
134
-
135
- /* Historically, |aclass| was repurposed to pass additional flags into the
136
- * encoding process. */
137
- assert((aclass & ASN1_TFLG_TAG_CLASS) == aclass);
138
- /* If not overridding the tag, |aclass| is ignored and should be zero. */
139
- assert(tag != -1 || aclass == 0);
140
-
141
- /* All fields are pointers, except for boolean |ASN1_ITYPE_PRIMITIVE|s.
142
- * Optional primitives are handled later. */
143
- if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval) {
144
- if (optional) {
145
- return 0;
146
- }
147
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
148
- return -1;
125
+ int optional) {
126
+ const ASN1_TEMPLATE *tt = NULL;
127
+ int i, seqcontlen, seqlen;
128
+
129
+ // Historically, |aclass| was repurposed to pass additional flags into the
130
+ // encoding process.
131
+ assert((aclass & ASN1_TFLG_TAG_CLASS) == aclass);
132
+ // If not overridding the tag, |aclass| is ignored and should be zero.
133
+ assert(tag != -1 || aclass == 0);
134
+
135
+ // All fields are pointers, except for boolean |ASN1_ITYPE_PRIMITIVE|s.
136
+ // Optional primitives are handled later.
137
+ if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval) {
138
+ if (optional) {
139
+ return 0;
149
140
  }
141
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
142
+ return -1;
143
+ }
150
144
 
151
- switch (it->itype) {
152
-
145
+ switch (it->itype) {
153
146
  case ASN1_ITYPE_PRIMITIVE:
154
- if (it->templates) {
155
- if (it->templates->flags & ASN1_TFLG_OPTIONAL) {
156
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
157
- return -1;
158
- }
159
- return asn1_template_ex_i2d(pval, out, it->templates, tag, aclass);
147
+ if (it->templates) {
148
+ // This is an |ASN1_ITEM_TEMPLATE|.
149
+ if (it->templates->flags & ASN1_TFLG_OPTIONAL) {
150
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
151
+ return -1;
160
152
  }
161
- return asn1_i2d_ex_primitive(pval, out, it, tag, aclass, optional);
153
+ return asn1_template_ex_i2d(pval, out, it->templates, tag, aclass,
154
+ optional);
155
+ }
156
+ return asn1_i2d_ex_primitive(pval, out, it, tag, aclass, optional);
162
157
 
163
158
  case ASN1_ITYPE_MSTRING:
164
- /*
165
- * It never makes sense for multi-strings to have implicit tagging, so
166
- * if tag != -1, then this looks like an error in the template.
167
- */
168
- if (tag != -1) {
169
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
170
- return -1;
171
- }
172
- return asn1_i2d_ex_primitive(pval, out, it, -1, 0, optional);
159
+ // It never makes sense for multi-strings to have implicit tagging, so
160
+ // if tag != -1, then this looks like an error in the template.
161
+ if (tag != -1) {
162
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
163
+ return -1;
164
+ }
165
+ return asn1_i2d_ex_primitive(pval, out, it, -1, 0, optional);
173
166
 
174
167
  case ASN1_ITYPE_CHOICE: {
175
- /*
176
- * It never makes sense for CHOICE types to have implicit tagging, so if
177
- * tag != -1, then this looks like an error in the template.
178
- */
179
- if (tag != -1) {
180
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
181
- return -1;
182
- }
183
- i = asn1_get_choice_selector(pval, it);
184
- if (i < 0 || i >= it->tcount) {
185
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE);
186
- return -1;
187
- }
188
- const ASN1_TEMPLATE *chtt = it->templates + i;
189
- if (chtt->flags & ASN1_TFLG_OPTIONAL) {
190
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
191
- return -1;
192
- }
193
- ASN1_VALUE **pchval = asn1_get_field_ptr(pval, chtt);
194
- return asn1_template_ex_i2d(pchval, out, chtt, -1, 0);
168
+ // It never makes sense for CHOICE types to have implicit tagging, so if
169
+ // tag != -1, then this looks like an error in the template.
170
+ if (tag != -1) {
171
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
172
+ return -1;
173
+ }
174
+ i = asn1_get_choice_selector(pval, it);
175
+ if (i < 0 || i >= it->tcount) {
176
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE);
177
+ return -1;
178
+ }
179
+ const ASN1_TEMPLATE *chtt = it->templates + i;
180
+ if (chtt->flags & ASN1_TFLG_OPTIONAL) {
181
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
182
+ return -1;
183
+ }
184
+ ASN1_VALUE **pchval = asn1_get_field_ptr(pval, chtt);
185
+ return asn1_template_ex_i2d(pchval, out, chtt, -1, 0, /*optional=*/0);
195
186
  }
196
187
 
197
188
  case ASN1_ITYPE_EXTERN: {
198
- /* If new style i2d it does all the work */
199
- const ASN1_EXTERN_FUNCS *ef = it->funcs;
200
- int ret = ef->asn1_ex_i2d(pval, out, it, tag, aclass);
201
- if (ret == 0) {
202
- /* |asn1_ex_i2d| should never return zero. We have already checked
203
- * for optional values generically, and |ASN1_ITYPE_EXTERN| fields
204
- * must be pointers. */
205
- OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR);
206
- return -1;
207
- }
208
- return ret;
189
+ // We don't support implicit tagging with external types.
190
+ if (tag != -1) {
191
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
192
+ return -1;
193
+ }
194
+ const ASN1_EXTERN_FUNCS *ef = it->funcs;
195
+ int ret = ef->asn1_ex_i2d(pval, out, it);
196
+ if (ret == 0) {
197
+ // |asn1_ex_i2d| should never return zero. We have already checked
198
+ // for optional values generically, and |ASN1_ITYPE_EXTERN| fields
199
+ // must be pointers.
200
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR);
201
+ return -1;
202
+ }
203
+ return ret;
209
204
  }
210
205
 
211
206
  case ASN1_ITYPE_SEQUENCE: {
212
- i = asn1_enc_restore(&seqcontlen, out, pval, it);
213
- /* An error occurred */
214
- if (i < 0)
215
- return -1;
216
- /* We have a valid cached encoding... */
217
- if (i > 0)
218
- return seqcontlen;
219
- /* Otherwise carry on */
220
- seqcontlen = 0;
221
- /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */
222
- if (tag == -1) {
223
- tag = V_ASN1_SEQUENCE;
224
- aclass = V_ASN1_UNIVERSAL;
207
+ i = asn1_enc_restore(&seqcontlen, out, pval, it);
208
+ // An error occurred
209
+ if (i < 0) {
210
+ return -1;
211
+ }
212
+ // We have a valid cached encoding...
213
+ if (i > 0) {
214
+ return seqcontlen;
215
+ }
216
+ // Otherwise carry on
217
+ seqcontlen = 0;
218
+ // If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL
219
+ if (tag == -1) {
220
+ tag = V_ASN1_SEQUENCE;
221
+ aclass = V_ASN1_UNIVERSAL;
222
+ }
223
+ // First work out sequence content length
224
+ for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
225
+ const ASN1_TEMPLATE *seqtt;
226
+ ASN1_VALUE **pseqval;
227
+ int tmplen;
228
+ seqtt = asn1_do_adb(pval, tt, 1);
229
+ if (!seqtt) {
230
+ return -1;
225
231
  }
226
- /* First work out sequence content length */
227
- for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
228
- const ASN1_TEMPLATE *seqtt;
229
- ASN1_VALUE **pseqval;
230
- int tmplen;
231
- seqtt = asn1_do_adb(pval, tt, 1);
232
- if (!seqtt)
233
- return -1;
234
- pseqval = asn1_get_field_ptr(pval, seqtt);
235
- tmplen = asn1_template_ex_i2d(pseqval, NULL, seqtt, -1, 0);
236
- if (tmplen == -1 || (tmplen > INT_MAX - seqcontlen))
237
- return -1;
238
- seqcontlen += tmplen;
232
+ pseqval = asn1_get_field_ptr(pval, seqtt);
233
+ tmplen =
234
+ asn1_template_ex_i2d(pseqval, NULL, seqtt, -1, 0, /*optional=*/0);
235
+ if (tmplen == -1 || (tmplen > INT_MAX - seqcontlen)) {
236
+ return -1;
239
237
  }
238
+ seqcontlen += tmplen;
239
+ }
240
240
 
241
- seqlen = ASN1_object_size(/*constructed=*/1, seqcontlen, tag);
242
- if (!out || seqlen == -1)
243
- return seqlen;
244
- /* Output SEQUENCE header */
245
- ASN1_put_object(out, /*constructed=*/1, seqcontlen, tag, aclass);
246
- for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
247
- const ASN1_TEMPLATE *seqtt;
248
- ASN1_VALUE **pseqval;
249
- seqtt = asn1_do_adb(pval, tt, 1);
250
- if (!seqtt)
251
- return -1;
252
- pseqval = asn1_get_field_ptr(pval, seqtt);
253
- if (asn1_template_ex_i2d(pseqval, out, seqtt, -1, 0) < 0) {
254
- return -1;
255
- }
256
- }
241
+ seqlen = ASN1_object_size(/*constructed=*/1, seqcontlen, tag);
242
+ if (!out || seqlen == -1) {
257
243
  return seqlen;
244
+ }
245
+ // Output SEQUENCE header
246
+ ASN1_put_object(out, /*constructed=*/1, seqcontlen, tag, aclass);
247
+ for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
248
+ const ASN1_TEMPLATE *seqtt;
249
+ ASN1_VALUE **pseqval;
250
+ seqtt = asn1_do_adb(pval, tt, 1);
251
+ if (!seqtt) {
252
+ return -1;
253
+ }
254
+ pseqval = asn1_get_field_ptr(pval, seqtt);
255
+ if (asn1_template_ex_i2d(pseqval, out, seqtt, -1, 0, /*optional=*/0) <
256
+ 0) {
257
+ return -1;
258
+ }
259
+ }
260
+ return seqlen;
258
261
  }
259
262
 
260
263
  default:
261
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
262
- return -1;
263
- }
264
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
265
+ return -1;
266
+ }
264
267
  }
265
268
 
266
- /* asn1_template_ex_i2d behaves like |asn1_item_ex_i2d_opt| but uses an
267
- * |ASN1_TEMPLATE| instead of an |ASN1_ITEM|. An |ASN1_TEMPLATE| wraps an
268
- * |ASN1_ITEM| with modifiers such as tagging, SEQUENCE or SET, etc. Instead of
269
- * taking an |optional| parameter, it uses the |ASN1_TFLG_OPTIONAL| flag. */
269
+ // asn1_template_ex_i2d behaves like |asn1_item_ex_i2d_opt| but uses an
270
+ // |ASN1_TEMPLATE| instead of an |ASN1_ITEM|. An |ASN1_TEMPLATE| wraps an
271
+ // |ASN1_ITEM| with modifiers such as tagging, SEQUENCE or SET, etc.
270
272
  static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
271
- const ASN1_TEMPLATE *tt, int tag, int iclass)
272
- {
273
- int i, ret, flags, ttag, tclass;
274
- size_t j;
275
- flags = tt->flags;
276
-
277
- /* Historically, |iclass| was repurposed to pass additional flags into the
278
- * encoding process. */
279
- assert((iclass & ASN1_TFLG_TAG_CLASS) == iclass);
280
- /* If not overridding the tag, |iclass| is ignored and should be zero. */
281
- assert(tag != -1 || iclass == 0);
282
-
283
- /*
284
- * Work out tag and class to use: tagging may come either from the
285
- * template or the arguments, not both because this would create
286
- * ambiguity.
287
- */
288
- if (flags & ASN1_TFLG_TAG_MASK) {
289
- /* Error if argument and template tagging */
290
- if (tag != -1) {
291
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
292
- return -1;
293
- }
294
- /* Get tagging from template */
295
- ttag = tt->tag;
296
- tclass = flags & ASN1_TFLG_TAG_CLASS;
297
- } else if (tag != -1) {
298
- /* No template tagging, get from arguments */
299
- ttag = tag;
300
- tclass = iclass & ASN1_TFLG_TAG_CLASS;
301
- } else {
302
- ttag = -1;
303
- tclass = 0;
273
+ const ASN1_TEMPLATE *tt, int tag, int iclass,
274
+ int optional) {
275
+ int i, ret, ttag, tclass;
276
+ size_t j;
277
+ uint32_t flags = tt->flags;
278
+
279
+ // Historically, |iclass| was repurposed to pass additional flags into the
280
+ // encoding process.
281
+ assert((iclass & ASN1_TFLG_TAG_CLASS) == iclass);
282
+ // If not overridding the tag, |iclass| is ignored and should be zero.
283
+ assert(tag != -1 || iclass == 0);
284
+
285
+ // Work out tag and class to use: tagging may come either from the
286
+ // template or the arguments, not both because this would create
287
+ // ambiguity.
288
+ if (flags & ASN1_TFLG_TAG_MASK) {
289
+ // Error if argument and template tagging
290
+ if (tag != -1) {
291
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
292
+ return -1;
293
+ }
294
+ // Get tagging from template
295
+ ttag = tt->tag;
296
+ tclass = flags & ASN1_TFLG_TAG_CLASS;
297
+ } else if (tag != -1) {
298
+ // No template tagging, get from arguments
299
+ ttag = tag;
300
+ tclass = iclass & ASN1_TFLG_TAG_CLASS;
301
+ } else {
302
+ ttag = -1;
303
+ tclass = 0;
304
+ }
305
+
306
+ // The template may itself by marked as optional, or this may be the template
307
+ // of an |ASN1_ITEM_TEMPLATE| type which was contained inside an outer
308
+ // optional template. (They cannot both be true because the
309
+ // |ASN1_ITEM_TEMPLATE| codepath rejects optional templates.)
310
+ assert(!optional || (flags & ASN1_TFLG_OPTIONAL) == 0);
311
+ optional = optional || (flags & ASN1_TFLG_OPTIONAL) != 0;
312
+
313
+ // At this point 'ttag' contains the outer tag to use, and 'tclass' is the
314
+ // class.
315
+
316
+ if (flags & ASN1_TFLG_SK_MASK) {
317
+ // SET OF, SEQUENCE OF
318
+ STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
319
+ int isset, sktag, skaclass;
320
+ int skcontlen, sklen;
321
+ ASN1_VALUE *skitem;
322
+
323
+ if (!*pval) {
324
+ if (optional) {
325
+ return 0;
326
+ }
327
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
328
+ return -1;
304
329
  }
305
330
 
306
- const int optional = (flags & ASN1_TFLG_OPTIONAL) != 0;
307
-
308
- /*
309
- * At this point 'ttag' contains the outer tag to use, and 'tclass' is the
310
- * class.
311
- */
312
-
313
- if (flags & ASN1_TFLG_SK_MASK) {
314
- /* SET OF, SEQUENCE OF */
315
- STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
316
- int isset, sktag, skaclass;
317
- int skcontlen, sklen;
318
- ASN1_VALUE *skitem;
319
-
320
- if (!*pval) {
321
- if (optional) {
322
- return 0;
323
- }
324
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
325
- return -1;
326
- }
331
+ if (flags & ASN1_TFLG_SET_OF) {
332
+ isset = 1;
333
+ // Historically, types with both bits set were mutated when
334
+ // serialized to apply the sort. We no longer support this.
335
+ assert((flags & ASN1_TFLG_SEQUENCE_OF) == 0);
336
+ } else {
337
+ isset = 0;
338
+ }
327
339
 
328
- if (flags & ASN1_TFLG_SET_OF) {
329
- isset = 1;
330
- /* Historically, types with both bits set were mutated when
331
- * serialized to apply the sort. We no longer support this. */
332
- assert((flags & ASN1_TFLG_SEQUENCE_OF) == 0);
333
- } else {
334
- isset = 0;
335
- }
340
+ // Work out inner tag value: if EXPLICIT or no tagging use underlying
341
+ // type.
342
+ if ((ttag != -1) && !(flags & ASN1_TFLG_EXPTAG)) {
343
+ sktag = ttag;
344
+ skaclass = tclass;
345
+ } else {
346
+ skaclass = V_ASN1_UNIVERSAL;
347
+ if (isset) {
348
+ sktag = V_ASN1_SET;
349
+ } else {
350
+ sktag = V_ASN1_SEQUENCE;
351
+ }
352
+ }
336
353
 
337
- /*
338
- * Work out inner tag value: if EXPLICIT or no tagging use underlying
339
- * type.
340
- */
341
- if ((ttag != -1) && !(flags & ASN1_TFLG_EXPTAG)) {
342
- sktag = ttag;
343
- skaclass = tclass;
344
- } else {
345
- skaclass = V_ASN1_UNIVERSAL;
346
- if (isset)
347
- sktag = V_ASN1_SET;
348
- else
349
- sktag = V_ASN1_SEQUENCE;
350
- }
354
+ // Determine total length of items
355
+ skcontlen = 0;
356
+ for (j = 0; j < sk_ASN1_VALUE_num(sk); j++) {
357
+ int tmplen;
358
+ skitem = sk_ASN1_VALUE_value(sk, j);
359
+ tmplen = ASN1_item_ex_i2d(&skitem, NULL, ASN1_ITEM_ptr(tt->item), -1, 0);
360
+ if (tmplen == -1 || (skcontlen > INT_MAX - tmplen)) {
361
+ return -1;
362
+ }
363
+ skcontlen += tmplen;
364
+ }
365
+ sklen = ASN1_object_size(/*constructed=*/1, skcontlen, sktag);
366
+ if (sklen == -1) {
367
+ return -1;
368
+ }
369
+ // If EXPLICIT need length of surrounding tag
370
+ if (flags & ASN1_TFLG_EXPTAG) {
371
+ ret = ASN1_object_size(/*constructed=*/1, sklen, ttag);
372
+ } else {
373
+ ret = sklen;
374
+ }
351
375
 
352
- /* Determine total length of items */
353
- skcontlen = 0;
354
- for (j = 0; j < sk_ASN1_VALUE_num(sk); j++) {
355
- int tmplen;
356
- skitem = sk_ASN1_VALUE_value(sk, j);
357
- tmplen = ASN1_item_ex_i2d(&skitem, NULL, ASN1_ITEM_ptr(tt->item),
358
- -1, 0);
359
- if (tmplen == -1 || (skcontlen > INT_MAX - tmplen))
360
- return -1;
361
- skcontlen += tmplen;
362
- }
363
- sklen = ASN1_object_size(/*constructed=*/1, skcontlen, sktag);
364
- if (sklen == -1)
365
- return -1;
366
- /* If EXPLICIT need length of surrounding tag */
367
- if (flags & ASN1_TFLG_EXPTAG)
368
- ret = ASN1_object_size(/*constructed=*/1, sklen, ttag);
369
- else
370
- ret = sklen;
371
-
372
- if (!out || ret == -1)
373
- return ret;
374
-
375
- /* Now encode this lot... */
376
- /* EXPLICIT tag */
377
- if (flags & ASN1_TFLG_EXPTAG)
378
- ASN1_put_object(out, /*constructed=*/1, sklen, ttag, tclass);
379
- /* SET or SEQUENCE and IMPLICIT tag */
380
- ASN1_put_object(out, /*constructed=*/1, skcontlen, sktag, skaclass);
381
- /* And the stuff itself */
382
- if (!asn1_set_seq_out(sk, out, skcontlen, ASN1_ITEM_ptr(tt->item),
383
- isset)) {
384
- return -1;
385
- }
386
- return ret;
376
+ if (!out || ret == -1) {
377
+ return ret;
387
378
  }
388
379
 
380
+ // Now encode this lot...
381
+ // EXPLICIT tag
389
382
  if (flags & ASN1_TFLG_EXPTAG) {
390
- /* EXPLICIT tagging */
391
- /* Find length of tagged item */
392
- i = asn1_item_ex_i2d_opt(pval, NULL, ASN1_ITEM_ptr(tt->item), -1, 0,
393
- optional);
394
- if (i <= 0)
395
- return i;
396
- /* Find length of EXPLICIT tag */
397
- ret = ASN1_object_size(/*constructed=*/1, i, ttag);
398
- if (out && ret != -1) {
399
- /* Output tag and item */
400
- ASN1_put_object(out, /*constructed=*/1, i, ttag, tclass);
401
- if (ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item), -1,
402
- 0) < 0) {
403
- return -1;
404
- }
405
- }
406
- return ret;
383
+ ASN1_put_object(out, /*constructed=*/1, sklen, ttag, tclass);
407
384
  }
385
+ // SET or SEQUENCE and IMPLICIT tag
386
+ ASN1_put_object(out, /*constructed=*/1, skcontlen, sktag, skaclass);
387
+ // And the stuff itself
388
+ if (!asn1_set_seq_out(sk, out, skcontlen, ASN1_ITEM_ptr(tt->item), isset)) {
389
+ return -1;
390
+ }
391
+ return ret;
392
+ }
393
+
394
+ if (flags & ASN1_TFLG_EXPTAG) {
395
+ // EXPLICIT tagging
396
+ // Find length of tagged item
397
+ i = asn1_item_ex_i2d_opt(pval, NULL, ASN1_ITEM_ptr(tt->item), -1, 0,
398
+ optional);
399
+ if (i <= 0) {
400
+ return i;
401
+ }
402
+ // Find length of EXPLICIT tag
403
+ ret = ASN1_object_size(/*constructed=*/1, i, ttag);
404
+ if (out && ret != -1) {
405
+ // Output tag and item
406
+ ASN1_put_object(out, /*constructed=*/1, i, ttag, tclass);
407
+ if (ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item), -1, 0) < 0) {
408
+ return -1;
409
+ }
410
+ }
411
+ return ret;
412
+ }
408
413
 
409
- /* Either normal or IMPLICIT tagging */
410
- return asn1_item_ex_i2d_opt(pval, out, ASN1_ITEM_ptr(tt->item),
411
- ttag, tclass, optional);
412
-
414
+ // Either normal or IMPLICIT tagging
415
+ return asn1_item_ex_i2d_opt(pval, out, ASN1_ITEM_ptr(tt->item), ttag, tclass,
416
+ optional);
413
417
  }
414
418
 
415
- /* Temporary structure used to hold DER encoding of items for SET OF */
419
+ // Temporary structure used to hold DER encoding of items for SET OF
416
420
 
417
421
  typedef struct {
418
- unsigned char *data;
419
- int length;
422
+ unsigned char *data;
423
+ int length;
420
424
  } DER_ENC;
421
425
 
422
- static int der_cmp(const void *a, const void *b)
423
- {
424
- const DER_ENC *d1 = a, *d2 = b;
425
- int cmplen, i;
426
- cmplen = (d1->length < d2->length) ? d1->length : d2->length;
427
- i = OPENSSL_memcmp(d1->data, d2->data, cmplen);
428
- if (i)
429
- return i;
430
- return d1->length - d2->length;
426
+ static int der_cmp(const void *a, const void *b) {
427
+ const DER_ENC *d1 = a, *d2 = b;
428
+ int cmplen, i;
429
+ cmplen = (d1->length < d2->length) ? d1->length : d2->length;
430
+ i = OPENSSL_memcmp(d1->data, d2->data, cmplen);
431
+ if (i) {
432
+ return i;
433
+ }
434
+ return d1->length - d2->length;
431
435
  }
432
436
 
433
- /* asn1_set_seq_out writes |sk| to |out| under the i2d output convention,
434
- * excluding the tag and length. It returns one on success and zero on error.
435
- * |skcontlen| must be the total encoded size. If |do_sort| is non-zero, the
436
- * elements are sorted for a SET OF type. Each element of |sk| has type
437
- * |item|. */
437
+ // asn1_set_seq_out writes |sk| to |out| under the i2d output convention,
438
+ // excluding the tag and length. It returns one on success and zero on error.
439
+ // |skcontlen| must be the total encoded size. If |do_sort| is non-zero, the
440
+ // elements are sorted for a SET OF type. Each element of |sk| has type
441
+ // |item|.
438
442
  static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
439
- int skcontlen, const ASN1_ITEM *item, int do_sort)
440
- {
441
- /* No need to sort if there are fewer than two items. */
442
- if (!do_sort || sk_ASN1_VALUE_num(sk) < 2) {
443
- for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
444
- ASN1_VALUE *skitem = sk_ASN1_VALUE_value(sk, i);
445
- if (ASN1_item_ex_i2d(&skitem, out, item, -1, 0) < 0) {
446
- return 0;
447
- }
448
- }
449
- return 1;
450
- }
451
-
452
- if (sk_ASN1_VALUE_num(sk) > ((size_t)-1) / sizeof(DER_ENC)) {
453
- OPENSSL_PUT_ERROR(ASN1, ERR_R_OVERFLOW);
443
+ int skcontlen, const ASN1_ITEM *item, int do_sort) {
444
+ // No need to sort if there are fewer than two items.
445
+ if (!do_sort || sk_ASN1_VALUE_num(sk) < 2) {
446
+ for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
447
+ ASN1_VALUE *skitem = sk_ASN1_VALUE_value(sk, i);
448
+ if (ASN1_item_ex_i2d(&skitem, out, item, -1, 0) < 0) {
454
449
  return 0;
450
+ }
455
451
  }
456
-
457
- int ret = 0;
458
- unsigned char *const buf = OPENSSL_malloc(skcontlen);
459
- DER_ENC *encoded = OPENSSL_malloc(sk_ASN1_VALUE_num(sk) * sizeof(*encoded));
460
- if (encoded == NULL || buf == NULL) {
461
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
462
- goto err;
452
+ return 1;
453
+ }
454
+
455
+ if (sk_ASN1_VALUE_num(sk) > ((size_t)-1) / sizeof(DER_ENC)) {
456
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_OVERFLOW);
457
+ return 0;
458
+ }
459
+
460
+ int ret = 0;
461
+ unsigned char *const buf = OPENSSL_malloc(skcontlen);
462
+ DER_ENC *encoded = OPENSSL_malloc(sk_ASN1_VALUE_num(sk) * sizeof(*encoded));
463
+ if (encoded == NULL || buf == NULL) {
464
+ goto err;
465
+ }
466
+
467
+ // Encode all the elements into |buf| and populate |encoded|.
468
+ unsigned char *p = buf;
469
+ for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
470
+ ASN1_VALUE *skitem = sk_ASN1_VALUE_value(sk, i);
471
+ encoded[i].data = p;
472
+ encoded[i].length = ASN1_item_ex_i2d(&skitem, &p, item, -1, 0);
473
+ if (encoded[i].length < 0) {
474
+ goto err;
463
475
  }
476
+ assert(p - buf <= skcontlen);
477
+ }
464
478
 
465
- /* Encode all the elements into |buf| and populate |encoded|. */
466
- unsigned char *p = buf;
467
- for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
468
- ASN1_VALUE *skitem = sk_ASN1_VALUE_value(sk, i);
469
- encoded[i].data = p;
470
- encoded[i].length = ASN1_item_ex_i2d(&skitem, &p, item, -1, 0);
471
- if (encoded[i].length < 0) {
472
- goto err;
473
- }
474
- assert(p - buf <= skcontlen);
475
- }
476
-
477
- qsort(encoded, sk_ASN1_VALUE_num(sk), sizeof(*encoded), der_cmp);
479
+ qsort(encoded, sk_ASN1_VALUE_num(sk), sizeof(*encoded), der_cmp);
478
480
 
479
- /* Output the elements in sorted order. */
480
- p = *out;
481
- for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
482
- OPENSSL_memcpy(p, encoded[i].data, encoded[i].length);
483
- p += encoded[i].length;
484
- }
485
- *out = p;
481
+ // Output the elements in sorted order.
482
+ p = *out;
483
+ for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
484
+ OPENSSL_memcpy(p, encoded[i].data, encoded[i].length);
485
+ p += encoded[i].length;
486
+ }
487
+ *out = p;
486
488
 
487
- ret = 1;
489
+ ret = 1;
488
490
 
489
491
  err:
490
- OPENSSL_free(encoded);
491
- OPENSSL_free(buf);
492
- return ret;
492
+ OPENSSL_free(encoded);
493
+ OPENSSL_free(buf);
494
+ return ret;
493
495
  }
494
496
 
495
- /* asn1_i2d_ex_primitive behaves like |ASN1_item_ex_i2d| but |item| must be a
496
- * a PRIMITIVE or MSTRING type that is not an |ASN1_ITEM_TEMPLATE|. */
497
+ // asn1_i2d_ex_primitive behaves like |ASN1_item_ex_i2d| but |item| must be a
498
+ // a PRIMITIVE or MSTRING type that is not an |ASN1_ITEM_TEMPLATE|.
497
499
  static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out,
498
500
  const ASN1_ITEM *it, int tag, int aclass,
499
- int optional)
500
- {
501
- /* Get length of content octets and maybe find out the underlying type. */
502
- int omit;
503
- int utype = it->utype;
504
- int len = asn1_ex_i2c(pval, NULL, &omit, &utype, it);
505
- if (len < 0) {
506
- return -1;
507
- }
508
- if (omit) {
509
- if (optional) {
510
- return 0;
511
- }
512
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
513
- return -1;
514
- }
515
-
516
- /*
517
- * If SEQUENCE, SET or OTHER then header is included in pseudo content
518
- * octets so don't include tag+length. We need to check here because the
519
- * call to asn1_ex_i2c() could change utype.
520
- */
521
- int usetag = utype != V_ASN1_SEQUENCE && utype != V_ASN1_SET &&
522
- utype != V_ASN1_OTHER;
523
-
524
- /* If not implicitly tagged get tag from underlying type */
525
- if (tag == -1)
526
- tag = utype;
527
-
528
- /* Output tag+length followed by content octets */
529
- if (out) {
530
- if (usetag) {
531
- ASN1_put_object(out, /*constructed=*/0, len, tag, aclass);
532
- }
533
- int len2 = asn1_ex_i2c(pval, *out, &omit, &utype, it);
534
- if (len2 < 0) {
535
- return -1;
536
- }
537
- assert(len == len2);
538
- assert(!omit);
539
- *out += len;
501
+ int optional) {
502
+ // Get length of content octets and maybe find out the underlying type.
503
+ int omit;
504
+ int utype = it->utype;
505
+ int len = asn1_ex_i2c(pval, NULL, &omit, &utype, it);
506
+ if (len < 0) {
507
+ return -1;
508
+ }
509
+ if (omit) {
510
+ if (optional) {
511
+ return 0;
540
512
  }
541
-
513
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
514
+ return -1;
515
+ }
516
+
517
+ // If SEQUENCE, SET or OTHER then header is included in pseudo content
518
+ // octets so don't include tag+length. We need to check here because the
519
+ // call to asn1_ex_i2c() could change utype.
520
+ int usetag =
521
+ utype != V_ASN1_SEQUENCE && utype != V_ASN1_SET && utype != V_ASN1_OTHER;
522
+
523
+ // If not implicitly tagged get tag from underlying type
524
+ if (tag == -1) {
525
+ tag = utype;
526
+ }
527
+
528
+ // Output tag+length followed by content octets
529
+ if (out) {
542
530
  if (usetag) {
543
- return ASN1_object_size(/*constructed=*/0, len, tag);
531
+ ASN1_put_object(out, /*constructed=*/0, len, tag, aclass);
544
532
  }
545
- return len;
533
+ int len2 = asn1_ex_i2c(pval, *out, &omit, &utype, it);
534
+ if (len2 < 0) {
535
+ return -1;
536
+ }
537
+ assert(len == len2);
538
+ assert(!omit);
539
+ *out += len;
540
+ }
541
+
542
+ if (usetag) {
543
+ return ASN1_object_size(/*constructed=*/0, len, tag);
544
+ }
545
+ return len;
546
546
  }
547
547
 
548
- /* asn1_ex_i2c writes the |*pval| to |cout| under the i2d output convention,
549
- * excluding the tag and length. It returns the number of bytes written,
550
- * possibly zero, on success or -1 on error. If |*pval| should be omitted, it
551
- * returns zero and sets |*out_omit| to true.
552
- *
553
- * If |it| is an MSTRING or ANY type, it gets the underlying type from |*pval|,
554
- * which must be an |ASN1_STRING| or |ASN1_TYPE|, respectively. It then updates
555
- * |*putype| with the tag number of type used, or |V_ASN1_OTHER| if it was not a
556
- * universal type. If |*putype| is set to |V_ASN1_SEQUENCE|, |V_ASN1_SET|, or
557
- * |V_ASN1_OTHER|, it additionally outputs the tag and length, so the caller
558
- * must not do so.
559
- *
560
- * Otherwise, |*putype| must contain |it->utype|.
561
- *
562
- * WARNING: Unlike most functions in this file, |asn1_ex_i2c| can return zero
563
- * without omitting the element. ASN.1 values may have empty contents. */
548
+ // asn1_ex_i2c writes the |*pval| to |cout| under the i2d output convention,
549
+ // excluding the tag and length. It returns the number of bytes written,
550
+ // possibly zero, on success or -1 on error. If |*pval| should be omitted, it
551
+ // returns zero and sets |*out_omit| to true.
552
+ //
553
+ // If |it| is an MSTRING or ANY type, it gets the underlying type from |*pval|,
554
+ // which must be an |ASN1_STRING| or |ASN1_TYPE|, respectively. It then updates
555
+ // |*putype| with the tag number of type used, or |V_ASN1_OTHER| if it was not a
556
+ // universal type. If |*putype| is set to |V_ASN1_SEQUENCE|, |V_ASN1_SET|, or
557
+ // |V_ASN1_OTHER|, it additionally outputs the tag and length, so the caller
558
+ // must not do so.
559
+ //
560
+ // Otherwise, |*putype| must contain |it->utype|.
561
+ //
562
+ // WARNING: Unlike most functions in this file, |asn1_ex_i2c| can return zero
563
+ // without omitting the element. ASN.1 values may have empty contents.
564
564
  static int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *out_omit,
565
- int *putype, const ASN1_ITEM *it)
566
- {
567
- ASN1_BOOLEAN *tbool = NULL;
568
- ASN1_STRING *strtmp;
569
- ASN1_OBJECT *otmp;
570
- int utype;
571
- const unsigned char *cont;
572
- unsigned char c;
573
- int len;
574
-
575
- /* Historically, |it->funcs| for primitive types contained an
576
- * |ASN1_PRIMITIVE_FUNCS| table of callbacks. */
577
- assert(it->funcs == NULL);
578
-
579
- *out_omit = 0;
580
-
581
- /* Should type be omitted? */
582
- if ((it->itype != ASN1_ITYPE_PRIMITIVE)
583
- || (it->utype != V_ASN1_BOOLEAN)) {
584
- if (!*pval) {
585
- *out_omit = 1;
586
- return 0;
587
- }
565
+ int *putype, const ASN1_ITEM *it) {
566
+ ASN1_BOOLEAN *tbool = NULL;
567
+ ASN1_STRING *strtmp;
568
+ ASN1_OBJECT *otmp;
569
+ int utype;
570
+ const unsigned char *cont;
571
+ unsigned char c;
572
+ int len;
573
+
574
+ // Historically, |it->funcs| for primitive types contained an
575
+ // |ASN1_PRIMITIVE_FUNCS| table of callbacks.
576
+ assert(it->funcs == NULL);
577
+
578
+ *out_omit = 0;
579
+
580
+ // Should type be omitted?
581
+ if ((it->itype != ASN1_ITYPE_PRIMITIVE) || (it->utype != V_ASN1_BOOLEAN)) {
582
+ if (!*pval) {
583
+ *out_omit = 1;
584
+ return 0;
588
585
  }
586
+ }
587
+
588
+ if (it->itype == ASN1_ITYPE_MSTRING) {
589
+ // If MSTRING type set the underlying type
590
+ strtmp = (ASN1_STRING *)*pval;
591
+ utype = strtmp->type;
592
+ if (utype < 0 && utype != V_ASN1_OTHER) {
593
+ // MSTRINGs can have type -1 when default-constructed.
594
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_TYPE);
595
+ return -1;
596
+ }
597
+ // Negative INTEGER and ENUMERATED values use |ASN1_STRING| type values
598
+ // that do not match their corresponding utype values. INTEGERs cannot
599
+ // participate in MSTRING types, but ENUMERATEDs can.
600
+ //
601
+ // TODO(davidben): Is this a bug? Although arguably one of the MSTRING
602
+ // types should contain more values, rather than less. See
603
+ // https://crbug.com/boringssl/412. But it is not possible to fit all
604
+ // possible ANY values into an |ASN1_STRING|, so matching the spec here
605
+ // is somewhat hopeless.
606
+ if (utype == V_ASN1_NEG_INTEGER) {
607
+ utype = V_ASN1_INTEGER;
608
+ } else if (utype == V_ASN1_NEG_ENUMERATED) {
609
+ utype = V_ASN1_ENUMERATED;
610
+ }
611
+ *putype = utype;
612
+ } else if (it->utype == V_ASN1_ANY) {
613
+ // If ANY set type and pointer to value
614
+ ASN1_TYPE *typ;
615
+ typ = (ASN1_TYPE *)*pval;
616
+ utype = typ->type;
617
+ if (utype < 0 && utype != V_ASN1_OTHER) {
618
+ // |ASN1_TYPE|s can have type -1 when default-constructed.
619
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_TYPE);
620
+ return -1;
621
+ }
622
+ *putype = utype;
623
+ pval = &typ->value.asn1_value;
624
+ } else {
625
+ utype = *putype;
626
+ }
589
627
 
590
- if (it->itype == ASN1_ITYPE_MSTRING) {
591
- /* If MSTRING type set the underlying type */
592
- strtmp = (ASN1_STRING *)*pval;
593
- utype = strtmp->type;
594
- if (utype < 0 && utype != V_ASN1_OTHER) {
595
- /* MSTRINGs can have type -1 when default-constructed. */
596
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_TYPE);
597
- return -1;
598
- }
599
- /* Negative INTEGER and ENUMERATED values use |ASN1_STRING| type values
600
- * that do not match their corresponding utype values. INTEGERs cannot
601
- * participate in MSTRING types, but ENUMERATEDs can.
602
- *
603
- * TODO(davidben): Is this a bug? Although arguably one of the MSTRING
604
- * types should contain more values, rather than less. See
605
- * https://crbug.com/boringssl/412. But it is not possible to fit all
606
- * possible ANY values into an |ASN1_STRING|, so matching the spec here
607
- * is somewhat hopeless. */
608
- if (utype == V_ASN1_NEG_INTEGER) {
609
- utype = V_ASN1_INTEGER;
610
- } else if (utype == V_ASN1_NEG_ENUMERATED) {
611
- utype = V_ASN1_ENUMERATED;
612
- }
613
- *putype = utype;
614
- } else if (it->utype == V_ASN1_ANY) {
615
- /* If ANY set type and pointer to value */
616
- ASN1_TYPE *typ;
617
- typ = (ASN1_TYPE *)*pval;
618
- utype = typ->type;
619
- if (utype < 0 && utype != V_ASN1_OTHER) {
620
- /* |ASN1_TYPE|s can have type -1 when default-constructed. */
621
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_TYPE);
622
- return -1;
623
- }
624
- *putype = utype;
625
- pval = &typ->value.asn1_value;
626
- } else
627
- utype = *putype;
628
-
629
- switch (utype) {
628
+ switch (utype) {
630
629
  case V_ASN1_OBJECT:
631
- otmp = (ASN1_OBJECT *)*pval;
632
- cont = otmp->data;
633
- len = otmp->length;
634
- if (len == 0) {
635
- /* Some |ASN1_OBJECT|s do not have OIDs and cannot be serialized. */
636
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OBJECT);
637
- return -1;
638
- }
639
- break;
630
+ otmp = (ASN1_OBJECT *)*pval;
631
+ cont = otmp->data;
632
+ len = otmp->length;
633
+ if (len == 0) {
634
+ // Some |ASN1_OBJECT|s do not have OIDs and cannot be serialized.
635
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OBJECT);
636
+ return -1;
637
+ }
638
+ break;
640
639
 
641
640
  case V_ASN1_NULL:
642
- cont = NULL;
643
- len = 0;
644
- break;
641
+ cont = NULL;
642
+ len = 0;
643
+ break;
645
644
 
646
645
  case V_ASN1_BOOLEAN:
647
- tbool = (ASN1_BOOLEAN *)pval;
648
- if (*tbool == -1) {
649
- *out_omit = 1;
650
- return 0;
651
- }
652
- if (it->utype != V_ASN1_ANY) {
653
- /*
654
- * Default handling if value == size field then omit
655
- */
656
- if ((*tbool && (it->size > 0)) ||
657
- (!*tbool && !it->size)) {
658
- *out_omit = 1;
659
- return 0;
660
- }
661
- }
662
- c = *tbool ? 0xff : 0x00;
663
- cont = &c;
664
- len = 1;
665
- break;
646
+ tbool = (ASN1_BOOLEAN *)pval;
647
+ if (*tbool == ASN1_BOOLEAN_NONE) {
648
+ *out_omit = 1;
649
+ return 0;
650
+ }
651
+ if (it->utype != V_ASN1_ANY) {
652
+ // Default handling if value == size field then omit
653
+ if ((*tbool && (it->size > 0)) || (!*tbool && !it->size)) {
654
+ *out_omit = 1;
655
+ return 0;
656
+ }
657
+ }
658
+ c = *tbool ? 0xff : 0x00;
659
+ cont = &c;
660
+ len = 1;
661
+ break;
666
662
 
667
663
  case V_ASN1_BIT_STRING: {
668
- int ret = i2c_ASN1_BIT_STRING((ASN1_BIT_STRING *)*pval,
669
- cout ? &cout : NULL);
670
- /* |i2c_ASN1_BIT_STRING| returns zero on error instead of -1. */
671
- return ret <= 0 ? -1 : ret;
664
+ int ret =
665
+ i2c_ASN1_BIT_STRING((ASN1_BIT_STRING *)*pval, cout ? &cout : NULL);
666
+ // |i2c_ASN1_BIT_STRING| returns zero on error instead of -1.
667
+ return ret <= 0 ? -1 : ret;
672
668
  }
673
669
 
674
670
  case V_ASN1_INTEGER:
675
671
  case V_ASN1_ENUMERATED: {
676
- /* |i2c_ASN1_INTEGER| also handles ENUMERATED. */
677
- int ret = i2c_ASN1_INTEGER((ASN1_INTEGER *)*pval, cout ? &cout : NULL);
678
- /* |i2c_ASN1_INTEGER| returns zero on error instead of -1. */
679
- return ret <= 0 ? -1 : ret;
672
+ // |i2c_ASN1_INTEGER| also handles ENUMERATED.
673
+ int ret = i2c_ASN1_INTEGER((ASN1_INTEGER *)*pval, cout ? &cout : NULL);
674
+ // |i2c_ASN1_INTEGER| returns zero on error instead of -1.
675
+ return ret <= 0 ? -1 : ret;
680
676
  }
681
677
 
682
678
  case V_ASN1_OCTET_STRING:
@@ -695,16 +691,20 @@ static int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *out_omit,
695
691
  case V_ASN1_UTF8STRING:
696
692
  case V_ASN1_SEQUENCE:
697
693
  case V_ASN1_SET:
698
- default:
699
- /* All based on ASN1_STRING and handled the same */
700
- strtmp = (ASN1_STRING *)*pval;
701
- cont = strtmp->data;
702
- len = strtmp->length;
703
-
704
- break;
694
+ // This is not a valid |ASN1_ITEM| type, but it appears in |ASN1_TYPE|.
695
+ case V_ASN1_OTHER:
696
+ // All based on ASN1_STRING and handled the same
697
+ strtmp = (ASN1_STRING *)*pval;
698
+ cont = strtmp->data;
699
+ len = strtmp->length;
700
+ break;
705
701
 
706
- }
707
- if (cout && len)
708
- OPENSSL_memcpy(cout, cont, len);
709
- return len;
702
+ default:
703
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
704
+ return -1;
705
+ }
706
+ if (cout && len) {
707
+ OPENSSL_memcpy(cout, cont, len);
708
+ }
709
+ return len;
710
710
  }