grpc 1.53.0 → 1.54.2

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 (695) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +80 -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/impl/grpc_types.h +11 -2
  6. data/include/grpc/support/port_platform.h +4 -4
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +11 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +6 -0
  9. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -11
  10. data/src/core/ext/filters/client_channel/backup_poller.h +0 -3
  11. data/src/core/ext/filters/client_channel/client_channel.cc +848 -813
  12. data/src/core/ext/filters/client_channel/client_channel.h +131 -173
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +114 -0
  14. data/src/core/ext/filters/client_channel/config_selector.h +4 -3
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +6 -1
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +17 -18
  18. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +134 -151
  19. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2 -16
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +14 -10
  21. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +68 -30
  22. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +2 -2
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +30 -38
  27. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +4 -4
  28. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -26
  29. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -179
  30. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -2
  31. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -2
  32. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +4 -2
  33. data/src/core/ext/filters/client_channel/retry_filter.cc +95 -102
  34. data/src/core/ext/filters/client_channel/subchannel.cc +2 -4
  35. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +26 -27
  36. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -5
  37. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -3
  38. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -12
  39. data/src/core/ext/filters/http/message_compress/compression_filter.cc +27 -11
  40. data/src/core/ext/filters/message_size/message_size_filter.cc +141 -224
  41. data/src/core/ext/filters/message_size/message_size_filter.h +48 -3
  42. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -6
  43. data/src/core/ext/gcp/metadata_query.cc +137 -0
  44. data/src/core/ext/gcp/metadata_query.h +87 -0
  45. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +70 -55
  46. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +12 -8
  47. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +5 -1
  48. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +149 -60
  49. data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -2
  50. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -1
  51. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  52. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +118 -222
  53. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +295 -113
  54. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -0
  55. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +466 -273
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +7 -3
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +14 -12
  59. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +9 -1
  60. data/src/core/ext/transport/chttp2/transport/internal.h +18 -3
  61. data/src/core/ext/transport/chttp2/transport/parsing.cc +9 -2
  62. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -5
  63. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -14
  64. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +5 -3
  65. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +22 -0
  66. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +5 -3
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +22 -0
  68. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +23 -5
  69. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +94 -3
  70. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -2
  71. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -0
  72. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +6 -3
  73. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  74. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +24 -6
  75. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +111 -12
  76. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +9 -7
  77. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +27 -9
  78. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +0 -1
  79. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +11 -7
  80. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +56 -12
  81. 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
  82. 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
  83. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +5 -3
  84. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  85. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +13 -2
  86. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +49 -0
  87. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +24 -9
  88. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +66 -12
  89. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +139 -136
  91. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +31 -15
  92. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +12 -9
  94. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +15 -0
  95. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +54 -45
  96. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +135 -119
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +100 -97
  99. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +15 -18
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +272 -264
  101. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +117 -117
  102. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +5 -5
  103. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +5 -5
  104. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +5 -5
  105. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +12 -9
  106. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -0
  107. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -2
  108. data/src/core/ext/xds/xds_client_stats.cc +29 -15
  109. data/src/core/ext/xds/xds_client_stats.h +24 -20
  110. data/src/core/ext/xds/xds_endpoint.cc +5 -2
  111. data/src/core/ext/xds/xds_endpoint.h +9 -1
  112. data/src/core/ext/xds/xds_http_rbac_filter.cc +1 -1
  113. data/src/core/ext/xds/xds_lb_policy_registry.cc +13 -0
  114. data/src/core/ext/xds/xds_transport_grpc.cc +1 -1
  115. data/src/core/{ext/filters/client_channel/resolver/dns/dns_resolver_selection.h → lib/backoff/random_early_detection.cc} +14 -12
  116. data/src/core/lib/backoff/random_early_detection.h +59 -0
  117. data/src/core/lib/channel/call_finalization.h +1 -1
  118. data/src/core/lib/channel/call_tracer.cc +51 -0
  119. data/src/core/lib/channel/call_tracer.h +101 -38
  120. data/src/core/lib/channel/connected_channel.cc +483 -1050
  121. data/src/core/lib/channel/context.h +8 -1
  122. data/src/core/lib/channel/promise_based_filter.cc +106 -42
  123. data/src/core/lib/channel/promise_based_filter.h +27 -13
  124. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  125. data/src/core/lib/config/config_vars.cc +151 -0
  126. data/src/core/lib/config/config_vars.h +127 -0
  127. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  128. data/src/core/lib/config/load_config.cc +66 -0
  129. data/src/core/lib/config/load_config.h +49 -0
  130. data/src/core/lib/debug/trace.cc +5 -6
  131. data/src/core/lib/debug/trace.h +0 -5
  132. data/src/core/lib/event_engine/event_engine.cc +37 -2
  133. data/src/core/lib/event_engine/handle_containers.h +7 -22
  134. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  135. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +0 -4
  136. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -9
  137. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +48 -15
  138. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +8 -8
  139. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -5
  140. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +6 -3
  141. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +27 -18
  142. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +0 -3
  143. data/src/core/lib/event_engine/resolved_address.cc +2 -1
  144. data/src/core/lib/event_engine/windows/win_socket.cc +0 -1
  145. data/src/core/lib/event_engine/windows/windows_endpoint.cc +129 -82
  146. data/src/core/lib/event_engine/windows/windows_endpoint.h +21 -5
  147. data/src/core/lib/event_engine/windows/windows_engine.cc +39 -18
  148. data/src/core/lib/event_engine/windows/windows_engine.h +2 -1
  149. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  150. data/src/core/lib/event_engine/windows/windows_listener.h +155 -0
  151. data/src/core/lib/experiments/config.cc +3 -10
  152. data/src/core/lib/experiments/experiments.cc +7 -0
  153. data/src/core/lib/experiments/experiments.h +9 -1
  154. data/src/core/lib/gpr/log.cc +15 -28
  155. data/src/core/lib/gprpp/fork.cc +8 -14
  156. data/src/core/lib/gprpp/orphanable.h +4 -3
  157. data/src/core/lib/gprpp/per_cpu.h +9 -3
  158. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +49 -37
  159. data/src/core/lib/gprpp/ref_counted.h +33 -34
  160. data/src/core/lib/gprpp/thd.h +16 -0
  161. data/src/core/lib/gprpp/time.cc +1 -0
  162. data/src/core/lib/gprpp/time.h +4 -4
  163. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +2 -2
  164. data/src/core/lib/iomgr/call_combiner.h +2 -2
  165. data/src/core/lib/iomgr/endpoint_cfstream.cc +4 -2
  166. data/src/core/lib/iomgr/endpoint_pair.h +2 -2
  167. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  168. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  169. data/src/core/lib/iomgr/ev_posix.cc +13 -53
  170. data/src/core/lib/iomgr/ev_posix.h +0 -3
  171. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +103 -76
  172. data/src/core/lib/iomgr/iomgr.cc +4 -8
  173. data/src/core/lib/iomgr/iomgr_windows.cc +8 -2
  174. data/src/core/lib/iomgr/pollset_set_windows.cc +9 -9
  175. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  176. data/src/core/lib/iomgr/socket_utils_common_posix.cc +16 -3
  177. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -2
  178. data/src/core/lib/iomgr/tcp_posix.cc +0 -1
  179. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -16
  180. data/src/core/lib/iomgr/tcp_server_windows.cc +176 -9
  181. data/src/core/lib/iomgr/tcp_windows.cc +12 -8
  182. data/src/core/lib/load_balancing/lb_policy.cc +9 -13
  183. data/src/core/lib/load_balancing/lb_policy.h +4 -2
  184. data/src/core/lib/promise/activity.cc +22 -6
  185. data/src/core/lib/promise/activity.h +61 -24
  186. data/src/core/lib/promise/cancel_callback.h +77 -0
  187. data/src/core/lib/promise/detail/basic_seq.h +1 -1
  188. data/src/core/lib/promise/detail/promise_factory.h +4 -0
  189. data/src/core/lib/promise/for_each.h +176 -0
  190. data/src/core/lib/promise/if.h +9 -0
  191. data/src/core/lib/promise/interceptor_list.h +23 -2
  192. data/src/core/lib/promise/latch.h +89 -3
  193. data/src/core/lib/promise/loop.h +13 -9
  194. data/src/core/lib/promise/map.h +7 -0
  195. data/src/core/lib/promise/party.cc +286 -0
  196. data/src/core/lib/promise/party.h +499 -0
  197. data/src/core/lib/promise/pipe.h +197 -57
  198. data/src/core/lib/promise/poll.h +48 -0
  199. data/src/core/lib/promise/promise.h +2 -2
  200. data/src/core/lib/resource_quota/arena.cc +19 -3
  201. data/src/core/lib/resource_quota/arena.h +119 -5
  202. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  203. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +12 -35
  204. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +0 -59
  206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -5
  207. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  208. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -0
  209. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +2 -0
  210. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +5 -9
  211. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -25
  212. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +12 -0
  213. data/src/core/lib/security/transport/secure_endpoint.cc +4 -2
  214. data/src/core/lib/security/transport/server_auth_filter.cc +20 -2
  215. data/src/core/lib/slice/slice.cc +1 -1
  216. data/src/core/lib/surface/builtins.cc +2 -0
  217. data/src/core/lib/surface/call.cc +926 -1024
  218. data/src/core/lib/surface/call.h +10 -0
  219. data/src/core/lib/surface/lame_client.cc +1 -0
  220. data/src/core/lib/surface/validate_metadata.cc +43 -42
  221. data/src/core/lib/surface/validate_metadata.h +9 -0
  222. data/src/core/lib/surface/version.cc +2 -2
  223. data/src/core/lib/transport/batch_builder.cc +179 -0
  224. data/src/core/lib/transport/batch_builder.h +468 -0
  225. data/src/core/lib/transport/bdp_estimator.cc +7 -7
  226. data/src/core/lib/transport/bdp_estimator.h +10 -6
  227. data/src/core/lib/transport/custom_metadata.h +30 -0
  228. data/src/core/lib/transport/metadata_batch.cc +9 -6
  229. data/src/core/lib/transport/metadata_batch.h +168 -18
  230. data/src/core/lib/transport/parsed_metadata.h +19 -9
  231. data/src/core/lib/transport/timeout_encoding.cc +6 -1
  232. data/src/core/lib/transport/transport.cc +30 -2
  233. data/src/core/lib/transport/transport.h +70 -14
  234. data/src/core/lib/transport/transport_impl.h +7 -0
  235. data/src/core/lib/transport/transport_op_string.cc +52 -42
  236. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -2
  237. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -0
  238. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +21 -4
  239. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +5 -0
  240. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  241. data/src/core/tsi/ssl_transport_security.cc +4 -2
  242. data/src/ruby/lib/grpc/version.rb +1 -1
  243. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  244. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  245. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  246. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  247. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  248. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  249. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  250. data/{src/core/lib/gprpp/global_config_custom.h → third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc} +11 -14
  251. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  252. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  253. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  254. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  255. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  256. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  257. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  258. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  259. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  260. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  261. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  262. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  263. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  264. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  265. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  266. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  267. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  268. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +12 -8
  269. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  270. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  271. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  272. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  273. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  274. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  275. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  276. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  277. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +174 -194
  278. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  279. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  280. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  281. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  282. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  283. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  284. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  285. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  286. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  287. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  288. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  289. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  290. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +133 -88
  291. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  292. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +791 -791
  293. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +526 -526
  294. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  295. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  296. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  297. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  298. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  299. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +11 -7
  300. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +4 -4
  301. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  302. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -4
  303. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +17 -10
  304. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -3
  305. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  306. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  307. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  308. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +9 -5
  309. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  310. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  311. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  312. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  313. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  314. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  315. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  316. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  317. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  318. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  319. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  320. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  321. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  322. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  323. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  324. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  325. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +6 -12
  326. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -11
  327. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  328. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  329. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  330. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  331. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  332. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  333. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  334. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  335. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  336. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  337. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  338. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  339. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  340. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  341. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +16 -27
  342. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  343. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  344. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  345. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  346. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  347. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  348. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +39 -16
  349. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  350. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  351. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  352. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +214 -99
  353. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +21 -5
  354. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  355. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  356. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  358. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  359. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  360. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  361. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  362. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  363. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  364. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  365. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +5 -5
  367. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  368. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  369. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  370. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  371. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  372. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  373. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +35 -27
  380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  403. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  405. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +21 -6
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  410. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +25 -25
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +91 -17
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +5 -5
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +34 -12
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +54 -23
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +44 -60
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +60 -53
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +48 -36
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +2 -7
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -3
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +0 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +8 -0
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +42 -14
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -15
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +2 -4
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +71 -43
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +14 -16
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -4
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -45
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +22 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +63 -52
  445. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +107 -62
  446. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +58 -31
  447. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +523 -422
  449. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  450. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  451. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  452. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  453. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  454. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  455. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +19 -6
  456. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +32 -14
  457. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  458. data/third_party/boringssl-with-bazel/src/crypto/internal.h +373 -18
  459. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +61 -0
  460. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +205 -0
  461. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  463. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  464. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +13 -1
  465. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  466. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  467. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +629 -613
  468. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  469. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  470. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  471. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  472. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  473. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  474. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  475. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  476. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  477. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  478. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  479. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  480. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  481. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  482. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  483. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +3 -4
  484. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  485. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  486. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  487. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  488. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +66 -34
  489. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +190 -77
  490. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +81 -284
  491. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +109 -42
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +54 -55
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +284 -331
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +67 -50
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +153 -150
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +786 -0
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  504. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  505. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  506. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +227 -252
  507. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  508. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  509. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +230 -224
  510. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  511. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  512. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  513. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  514. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +534 -618
  515. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  516. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +116 -182
  517. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  518. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +181 -202
  519. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  520. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  521. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1865 -2050
  522. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +433 -462
  523. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  524. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +267 -263
  525. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  526. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  527. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  528. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  529. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  530. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +326 -415
  531. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  532. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  533. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  534. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  535. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  536. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  537. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  538. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  539. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  540. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  541. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  543. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +78 -170
  544. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  545. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  546. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  547. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  548. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  549. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +309 -346
  550. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +341 -365
  551. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  552. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  553. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  554. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  555. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  556. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +122 -125
  557. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  558. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +247 -253
  559. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  560. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  561. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  562. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  563. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +143 -136
  564. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +664 -707
  565. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +83 -75
  566. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1062 -1146
  567. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +8 -4
  568. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  569. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +211 -187
  570. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  571. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -14
  572. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +21 -2
  573. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  574. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  575. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  576. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  577. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  578. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  579. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  580. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  581. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  582. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  583. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  584. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  585. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  586. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  587. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +22 -30
  588. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  589. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +41 -16
  591. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  592. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  593. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +13 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  595. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -15
  596. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  597. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  598. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +7 -4
  599. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  600. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +13 -21
  601. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +139 -75
  602. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  603. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +384 -286
  604. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +5 -6
  605. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  606. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +18 -7
  607. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +49 -23
  608. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  609. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1592 -1074
  610. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +202 -205
  611. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  612. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  613. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  614. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  615. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  616. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +34 -20
  617. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +65 -34
  618. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  619. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  620. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +32 -28
  621. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  622. data/third_party/boringssl-with-bazel/src/ssl/internal.h +130 -98
  623. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +27 -11
  624. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  625. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +39 -65
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +30 -33
  631. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +77 -100
  632. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +120 -107
  633. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +164 -30
  634. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +150 -60
  635. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +22 -11
  636. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  637. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  638. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +5 -43
  639. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  640. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +2 -2
  641. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +22 -34
  642. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  643. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  644. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  645. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  646. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  647. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  648. metadata +105 -70
  649. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +0 -39
  650. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +0 -30
  651. data/src/core/lib/gprpp/global_config.h +0 -93
  652. data/src/core/lib/gprpp/global_config_env.cc +0 -140
  653. data/src/core/lib/gprpp/global_config_env.h +0 -133
  654. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  655. data/src/core/lib/promise/intra_activity_waiter.h +0 -55
  656. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  657. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -29
  658. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  659. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +0 -83
  660. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  661. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  662. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  663. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +0 -38
  664. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  665. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  667. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  668. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  669. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  670. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  671. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  672. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  673. /data/src/core/lib/gpr/{log_android.cc → android/log.cc} +0 -0
  674. /data/src/core/lib/gpr/{cpu_iphone.cc → iphone/cpu.cc} +0 -0
  675. /data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +0 -0
  676. /data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +0 -0
  677. /data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +0 -0
  678. /data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +0 -0
  679. /data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +0 -0
  680. /data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +0 -0
  681. /data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +0 -0
  682. /data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +0 -0
  683. /data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +0 -0
  684. /data/src/core/lib/gpr/{cpu_windows.cc → windows/cpu.cc} +0 -0
  685. /data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +0 -0
  686. /data/src/core/lib/gpr/{string_windows.cc → windows/string.cc} +0 -0
  687. /data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +0 -0
  688. /data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +0 -0
  689. /data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +0 -0
  690. /data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +0 -0
  691. /data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +0 -0
  692. /data/src/core/lib/gprpp/{env_posix.cc → posix/env.cc} +0 -0
  693. /data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +0 -0
  694. /data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +0 -0
  695. /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
  }