grpc 1.55.0 → 1.56.0.pre3

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 (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +50 -14
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -178,8 +178,8 @@ X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc) {
178
178
  }
179
179
 
180
180
  int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj,
181
- int type, const unsigned char *bytes, int len,
182
- int loc, int set) {
181
+ int type, const unsigned char *bytes,
182
+ ossl_ssize_t len, int loc, int set) {
183
183
  X509_NAME_ENTRY *ne =
184
184
  X509_NAME_ENTRY_create_by_OBJ(NULL, obj, type, bytes, len);
185
185
  if (!ne) {
@@ -191,8 +191,8 @@ int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj,
191
191
  }
192
192
 
193
193
  int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
194
- const unsigned char *bytes, int len, int loc,
195
- int set) {
194
+ const unsigned char *bytes, ossl_ssize_t len,
195
+ int loc, int set) {
196
196
  X509_NAME_ENTRY *ne =
197
197
  X509_NAME_ENTRY_create_by_NID(NULL, nid, type, bytes, len);
198
198
  if (!ne) {
@@ -204,8 +204,8 @@ int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
204
204
  }
205
205
 
206
206
  int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
207
- const unsigned char *bytes, int len, int loc,
208
- int set) {
207
+ const unsigned char *bytes, ossl_ssize_t len,
208
+ int loc, int set) {
209
209
  X509_NAME_ENTRY *ne =
210
210
  X509_NAME_ENTRY_create_by_txt(NULL, field, type, bytes, len);
211
211
  if (!ne) {
@@ -282,7 +282,7 @@ err:
282
282
  X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
283
283
  const char *field, int type,
284
284
  const unsigned char *bytes,
285
- int len) {
285
+ ossl_ssize_t len) {
286
286
  ASN1_OBJECT *obj;
287
287
  X509_NAME_ENTRY *nentry;
288
288
 
@@ -300,7 +300,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
300
300
  X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
301
301
  int type,
302
302
  const unsigned char *bytes,
303
- int len) {
303
+ ossl_ssize_t len) {
304
304
  const ASN1_OBJECT *obj = OBJ_nid2obj(nid);
305
305
  if (obj == NULL) {
306
306
  OPENSSL_PUT_ERROR(X509, X509_R_UNKNOWN_NID);
@@ -312,7 +312,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
312
312
  X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
313
313
  const ASN1_OBJECT *obj, int type,
314
314
  const unsigned char *bytes,
315
- int len) {
315
+ ossl_ssize_t len) {
316
316
  X509_NAME_ENTRY *ret;
317
317
 
318
318
  if ((ne == NULL) || (*ne == NULL)) {
@@ -352,9 +352,7 @@ int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj) {
352
352
  }
353
353
 
354
354
  int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
355
- const unsigned char *bytes, int len) {
356
- int i;
357
-
355
+ const unsigned char *bytes, ossl_ssize_t len) {
358
356
  if ((ne == NULL) || ((bytes == NULL) && (len != 0))) {
359
357
  return 0;
360
358
  }
@@ -367,8 +365,7 @@ int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
367
365
  if (len < 0) {
368
366
  len = strlen((const char *)bytes);
369
367
  }
370
- i = ASN1_STRING_set(ne->value, bytes, len);
371
- if (!i) {
368
+ if (!ASN1_STRING_set(ne->value, bytes, len)) {
372
369
  return 0;
373
370
  }
374
371
  if (type != V_ASN1_UNDEF) {
@@ -77,7 +77,7 @@ EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x) {
77
77
 
78
78
  // Load a Netscape SPKI from a base64 encoded string
79
79
 
80
- NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len) {
80
+ NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, ossl_ssize_t len) {
81
81
  unsigned char *spki_der;
82
82
  const unsigned char *p;
83
83
  size_t spki_len;
@@ -90,7 +90,7 @@ static X509_CERT_AUX *aux_get(X509 *x) {
90
90
  return x->aux;
91
91
  }
92
92
 
93
- int X509_alias_set1(X509 *x, const unsigned char *name, int len) {
93
+ int X509_alias_set1(X509 *x, const unsigned char *name, ossl_ssize_t len) {
94
94
  X509_CERT_AUX *aux;
95
95
  // TODO(davidben): Empty aliases are not meaningful in PKCS#12, and the
96
96
  // getters cannot quite represent them. Also erase the object if |len| is
@@ -112,7 +112,7 @@ int X509_alias_set1(X509 *x, const unsigned char *name, int len) {
112
112
  return ASN1_STRING_set(aux->alias, name, len);
113
113
  }
114
114
 
115
- int X509_keyid_set1(X509 *x, const unsigned char *id, int len) {
115
+ int X509_keyid_set1(X509 *x, const unsigned char *id, ossl_ssize_t len) {
116
116
  X509_CERT_AUX *aux;
117
117
  // TODO(davidben): Empty key IDs are not meaningful in PKCS#12, and the
118
118
  // getters cannot quite represent them. Also erase the object if |len| is
@@ -90,7 +90,7 @@ OPENSSL_EXPORT char *x509v3_bytes_to_hex(const uint8_t *in, size_t len);
90
90
  //
91
91
  // This function was historically named |string_to_hex| in OpenSSL. Despite the
92
92
  // name, |string_to_hex| converted from hex.
93
- unsigned char *x509v3_hex_to_bytes(const char *str, long *len);
93
+ unsigned char *x509v3_hex_to_bytes(const char *str, size_t *len);
94
94
 
95
95
  // x509v3_conf_name_matches returns one if |name| is equal to |cmp| or begins
96
96
  // with |cmp| followed by '.', and zero otherwise.
@@ -57,6 +57,7 @@
57
57
  // extension creation utilities
58
58
 
59
59
  #include <ctype.h>
60
+ #include <limits.h>
60
61
  #include <stdio.h>
61
62
  #include <string.h>
62
63
 
@@ -81,7 +82,7 @@ static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
81
82
  static X509_EXTENSION *do_ext_i2d(const X509V3_EXT_METHOD *method, int ext_nid,
82
83
  int crit, void *ext_struc);
83
84
  static unsigned char *generic_asn1(const char *value, const X509V3_CTX *ctx,
84
- long *ext_len);
85
+ size_t *ext_len);
85
86
 
86
87
  X509_EXTENSION *X509V3_EXT_nconf(const CONF *conf, const X509V3_CTX *ctx,
87
88
  const char *name, const char *value) {
@@ -191,52 +192,30 @@ static X509_EXTENSION *do_ext_nconf(const CONF *conf, const X509V3_CTX *ctx,
191
192
  }
192
193
 
193
194
  ext = do_ext_i2d(method, ext_nid, crit, ext_struc);
194
- if (method->it) {
195
- ASN1_item_free(ext_struc, ASN1_ITEM_ptr(method->it));
196
- } else {
197
- method->ext_free(ext_struc);
198
- }
195
+ ASN1_item_free(ext_struc, ASN1_ITEM_ptr(method->it));
199
196
  return ext;
200
197
  }
201
198
 
202
199
  static X509_EXTENSION *do_ext_i2d(const X509V3_EXT_METHOD *method, int ext_nid,
203
200
  int crit, void *ext_struc) {
204
- unsigned char *ext_der;
205
- int ext_len;
206
- ASN1_OCTET_STRING *ext_oct;
207
- X509_EXTENSION *ext;
208
- // Convert internal representation to DER
209
- if (method->it) {
210
- ext_der = NULL;
211
- ext_len = ASN1_item_i2d(ext_struc, &ext_der, ASN1_ITEM_ptr(method->it));
212
- if (ext_len < 0) {
213
- goto merr;
214
- }
215
- } else {
216
- unsigned char *p;
217
- ext_len = method->i2d(ext_struc, NULL);
218
- if (!(ext_der = OPENSSL_malloc(ext_len))) {
219
- goto merr;
220
- }
221
- p = ext_der;
222
- method->i2d(ext_struc, &p);
223
- }
224
- if (!(ext_oct = ASN1_OCTET_STRING_new())) {
225
- goto merr;
201
+ // Convert the extension's internal representation to DER.
202
+ unsigned char *ext_der = NULL;
203
+ int ext_len = ASN1_item_i2d(ext_struc, &ext_der, ASN1_ITEM_ptr(method->it));
204
+ if (ext_len < 0) {
205
+ return NULL;
226
206
  }
227
- ext_oct->data = ext_der;
228
- ext_oct->length = ext_len;
229
207
 
230
- ext = X509_EXTENSION_create_by_NID(NULL, ext_nid, crit, ext_oct);
231
- if (!ext) {
232
- goto merr;
208
+ ASN1_OCTET_STRING *ext_oct = ASN1_OCTET_STRING_new();
209
+ if (ext_oct == NULL) {
210
+ OPENSSL_free(ext_der);
211
+ return NULL;
233
212
  }
234
- ASN1_OCTET_STRING_free(ext_oct);
213
+ ASN1_STRING_set0(ext_oct, ext_der, ext_len);
235
214
 
215
+ X509_EXTENSION *ext =
216
+ X509_EXTENSION_create_by_NID(NULL, ext_nid, crit, ext_oct);
217
+ ASN1_OCTET_STRING_free(ext_oct);
236
218
  return ext;
237
-
238
- merr:
239
- return NULL;
240
219
  }
241
220
 
242
221
  // Given an internal structure, nid and critical flag create an extension
@@ -290,7 +269,7 @@ static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
290
269
  int crit, int gen_type,
291
270
  const X509V3_CTX *ctx) {
292
271
  unsigned char *ext_der = NULL;
293
- long ext_len = 0;
272
+ size_t ext_len = 0;
294
273
  ASN1_OBJECT *obj = NULL;
295
274
  ASN1_OCTET_STRING *oct = NULL;
296
275
  X509_EXTENSION *extension = NULL;
@@ -312,12 +291,17 @@ static X509_EXTENSION *v3_generic_extension(const char *ext, const char *value,
312
291
  goto err;
313
292
  }
314
293
 
315
- if (!(oct = ASN1_OCTET_STRING_new())) {
294
+ if (ext_len > INT_MAX) {
295
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_OVERFLOW);
296
+ goto err;
297
+ }
298
+
299
+ oct = ASN1_OCTET_STRING_new();
300
+ if (oct == NULL) {
316
301
  goto err;
317
302
  }
318
303
 
319
- oct->data = ext_der;
320
- oct->length = ext_len;
304
+ ASN1_STRING_set0(oct, ext_der, (int)ext_len);
321
305
  ext_der = NULL;
322
306
 
323
307
  extension = X509_EXTENSION_create_by_OBJ(NULL, obj, crit, oct);
@@ -330,15 +314,18 @@ err:
330
314
  }
331
315
 
332
316
  static unsigned char *generic_asn1(const char *value, const X509V3_CTX *ctx,
333
- long *ext_len) {
334
- ASN1_TYPE *typ;
335
- unsigned char *ext_der = NULL;
336
- typ = ASN1_generate_v3(value, ctx);
317
+ size_t *ext_len) {
318
+ ASN1_TYPE *typ = ASN1_generate_v3(value, ctx);
337
319
  if (typ == NULL) {
338
320
  return NULL;
339
321
  }
340
- *ext_len = i2d_ASN1_TYPE(typ, &ext_der);
322
+ unsigned char *ext_der = NULL;
323
+ int len = i2d_ASN1_TYPE(typ, &ext_der);
341
324
  ASN1_TYPE_free(typ);
325
+ if (len < 0) {
326
+ return NULL;
327
+ }
328
+ *ext_len = len;
342
329
  return ext_der;
343
330
  }
344
331
 
@@ -356,6 +356,7 @@ static POLICYQUALINFO *notice_section(const X509V3_CTX *ctx,
356
356
  if (!nos || !sk_CONF_VALUE_num(nos)) {
357
357
  OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NUMBERS);
358
358
  X509V3_conf_err(cnf);
359
+ sk_CONF_VALUE_pop_free(nos, X509V3_conf_free);
359
360
  goto err;
360
361
  }
361
362
  int ret = nref_nos(nref->noticenos, nos);
@@ -168,7 +168,6 @@ static void *v2i_AUTHORITY_INFO_ACCESS(const X509V3_EXT_METHOD *method,
168
168
  const STACK_OF(CONF_VALUE) *nval) {
169
169
  AUTHORITY_INFO_ACCESS *ainfo = NULL;
170
170
  ACCESS_DESCRIPTION *acc;
171
- char *objtmp, *ptmp;
172
171
  if (!(ainfo = sk_ACCESS_DESCRIPTION_new_null())) {
173
172
  return NULL;
174
173
  }
@@ -178,22 +177,21 @@ static void *v2i_AUTHORITY_INFO_ACCESS(const X509V3_EXT_METHOD *method,
178
177
  !sk_ACCESS_DESCRIPTION_push(ainfo, acc)) {
179
178
  goto err;
180
179
  }
181
- ptmp = strchr(cnf->name, ';');
180
+ char *ptmp = strchr(cnf->name, ';');
182
181
  if (!ptmp) {
183
182
  OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_SYNTAX);
184
183
  goto err;
185
184
  }
186
- int objlen = ptmp - cnf->name;
187
185
  CONF_VALUE ctmp;
188
186
  ctmp.name = ptmp + 1;
189
187
  ctmp.value = cnf->value;
190
188
  if (!v2i_GENERAL_NAME_ex(acc->location, method, ctx, &ctmp, 0)) {
191
189
  goto err;
192
190
  }
193
- if (!(objtmp = OPENSSL_malloc(objlen + 1))) {
191
+ char *objtmp = OPENSSL_strndup(cnf->name, ptmp - cnf->name);
192
+ if (objtmp == NULL) {
194
193
  goto err;
195
194
  }
196
- OPENSSL_strlcpy(objtmp, cnf->name, objlen + 1);
197
195
  acc->method = OBJ_txt2obj(objtmp, 0);
198
196
  if (!acc->method) {
199
197
  OPENSSL_PUT_ERROR(X509V3, X509V3_R_BAD_OBJECT);
@@ -57,6 +57,7 @@
57
57
  */
58
58
  /* X509 v3 extension utilities */
59
59
 
60
+ #include <assert.h>
60
61
  #include <stdio.h>
61
62
 
62
63
  #include <openssl/conf.h>
@@ -70,21 +71,20 @@
70
71
  #include "ext_dat.h"
71
72
  static STACK_OF(X509V3_EXT_METHOD) *ext_list = NULL;
72
73
 
73
- static void ext_list_free(X509V3_EXT_METHOD *ext);
74
-
75
74
  static int ext_stack_cmp(const X509V3_EXT_METHOD *const *a,
76
75
  const X509V3_EXT_METHOD *const *b) {
77
76
  return ((*a)->ext_nid - (*b)->ext_nid);
78
77
  }
79
78
 
80
79
  int X509V3_EXT_add(X509V3_EXT_METHOD *ext) {
80
+ // We only support |ASN1_ITEM|-based extensions.
81
+ assert(ext->it != NULL);
82
+
81
83
  // TODO(davidben): This should be locked. Also check for duplicates.
82
84
  if (!ext_list && !(ext_list = sk_X509V3_EXT_METHOD_new(ext_stack_cmp))) {
83
- ext_list_free(ext);
84
85
  return 0;
85
86
  }
86
87
  if (!sk_X509V3_EXT_METHOD_push(ext_list, ext)) {
87
- ext_list_free(ext);
88
88
  return 0;
89
89
  }
90
90
  sk_X509V3_EXT_METHOD_sort(ext_list);
@@ -136,28 +136,12 @@ int X509V3_EXT_free(int nid, void *ext_data) {
136
136
  return 0;
137
137
  }
138
138
 
139
- if (ext_method->it != NULL) {
140
- ASN1_item_free(ext_data, ASN1_ITEM_ptr(ext_method->it));
141
- } else if (ext_method->ext_free != NULL) {
142
- ext_method->ext_free(ext_data);
143
- } else {
144
- OPENSSL_PUT_ERROR(X509V3, X509V3_R_CANNOT_FIND_FREE_FUNCTION);
145
- return 0;
146
- }
147
-
148
- return 1;
149
- }
150
-
151
- int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist) {
152
- for (; extlist->ext_nid != -1; extlist++) {
153
- if (!X509V3_EXT_add(extlist)) {
154
- return 0;
155
- }
156
- }
139
+ ASN1_item_free(ext_data, ASN1_ITEM_ptr(ext_method->it));
157
140
  return 1;
158
141
  }
159
142
 
160
143
  int X509V3_EXT_add_alias(int nid_to, int nid_from) {
144
+ OPENSSL_BEGIN_ALLOW_DEPRECATED
161
145
  const X509V3_EXT_METHOD *ext;
162
146
  X509V3_EXT_METHOD *tmpext;
163
147
 
@@ -171,19 +155,12 @@ int X509V3_EXT_add_alias(int nid_to, int nid_from) {
171
155
  }
172
156
  *tmpext = *ext;
173
157
  tmpext->ext_nid = nid_to;
174
- tmpext->ext_flags |= X509V3_EXT_DYNAMIC;
175
- return X509V3_EXT_add(tmpext);
176
- }
177
-
178
- void X509V3_EXT_cleanup(void) {
179
- sk_X509V3_EXT_METHOD_pop_free(ext_list, ext_list_free);
180
- ext_list = NULL;
181
- }
182
-
183
- static void ext_list_free(X509V3_EXT_METHOD *ext) {
184
- if (ext->ext_flags & X509V3_EXT_DYNAMIC) {
185
- OPENSSL_free(ext);
158
+ if (!X509V3_EXT_add(tmpext)) {
159
+ OPENSSL_free(tmpext);
160
+ return 0;
186
161
  }
162
+ return 1;
163
+ OPENSSL_END_ALLOW_DEPRECATED
187
164
  }
188
165
 
189
166
  // Legacy function: we don't need to add standard extensions any more because
@@ -201,23 +178,14 @@ void *X509V3_EXT_d2i(const X509_EXTENSION *ext) {
201
178
  return NULL;
202
179
  }
203
180
  p = ext->value->data;
204
- void *ret;
205
- if (method->it) {
206
- ret =
207
- ASN1_item_d2i(NULL, &p, ext->value->length, ASN1_ITEM_ptr(method->it));
208
- } else {
209
- ret = method->d2i(NULL, &p, ext->value->length);
210
- }
181
+ void *ret =
182
+ ASN1_item_d2i(NULL, &p, ext->value->length, ASN1_ITEM_ptr(method->it));
211
183
  if (ret == NULL) {
212
184
  return NULL;
213
185
  }
214
186
  // Check for trailing data.
215
187
  if (p != ext->value->data + ext->value->length) {
216
- if (method->it) {
217
- ASN1_item_free(ret, ASN1_ITEM_ptr(method->it));
218
- } else {
219
- method->ext_free(ret);
220
- }
188
+ ASN1_item_free(ret, ASN1_ITEM_ptr(method->it));
221
189
  OPENSSL_PUT_ERROR(X509V3, X509V3_R_TRAILING_DATA_IN_EXTENSION);
222
190
  return NULL;
223
191
  }
@@ -105,59 +105,47 @@ void X509V3_EXT_val_prn(BIO *out, const STACK_OF(CONF_VALUE) *val, int indent,
105
105
 
106
106
  int X509V3_EXT_print(BIO *out, const X509_EXTENSION *ext, unsigned long flag,
107
107
  int indent) {
108
- void *ext_str = NULL;
109
- char *value = NULL;
110
- const X509V3_EXT_METHOD *method;
111
- STACK_OF(CONF_VALUE) *nval = NULL;
112
- int ok = 1;
113
-
114
- if (!(method = X509V3_EXT_get(ext))) {
108
+ const X509V3_EXT_METHOD *method = X509V3_EXT_get(ext);
109
+ if (method == NULL) {
115
110
  return unknown_ext_print(out, ext, flag, indent, 0);
116
111
  }
117
112
  const ASN1_STRING *ext_data = X509_EXTENSION_get_data(ext);
118
113
  const unsigned char *p = ASN1_STRING_get0_data(ext_data);
119
- if (method->it) {
120
- ext_str = ASN1_item_d2i(NULL, &p, ASN1_STRING_length(ext_data),
121
- ASN1_ITEM_ptr(method->it));
122
- } else {
123
- ext_str = method->d2i(NULL, &p, ASN1_STRING_length(ext_data));
124
- }
125
-
114
+ void *ext_str = ASN1_item_d2i(NULL, &p, ASN1_STRING_length(ext_data),
115
+ ASN1_ITEM_ptr(method->it));
126
116
  if (!ext_str) {
127
117
  return unknown_ext_print(out, ext, flag, indent, 1);
128
118
  }
129
119
 
120
+ char *value = NULL;
121
+ STACK_OF(CONF_VALUE) *nval = NULL;
122
+ int ok = 0;
130
123
  if (method->i2s) {
131
124
  if (!(value = method->i2s(method, ext_str))) {
132
- ok = 0;
133
125
  goto err;
134
126
  }
135
127
  BIO_printf(out, "%*s%s", indent, "", value);
136
128
  } else if (method->i2v) {
137
129
  if (!(nval = method->i2v(method, ext_str, NULL))) {
138
- ok = 0;
139
130
  goto err;
140
131
  }
141
132
  X509V3_EXT_val_prn(out, nval, indent,
142
133
  method->ext_flags & X509V3_EXT_MULTILINE);
143
134
  } else if (method->i2r) {
144
135
  if (!method->i2r(method, ext_str, out, indent)) {
145
- ok = 0;
136
+ goto err;
146
137
  }
147
138
  } else {
148
- ok = 0;
139
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_OPERATION_NOT_DEFINED);
140
+ goto err;
149
141
  }
150
142
 
143
+ ok = 1;
144
+
151
145
  err:
152
146
  sk_CONF_VALUE_pop_free(nval, X509V3_conf_free);
153
- if (value) {
154
- OPENSSL_free(value);
155
- }
156
- if (method->it) {
157
- ASN1_item_free(ext_str, ASN1_ITEM_ptr(method->it));
158
- } else {
159
- method->ext_free(ext_str);
160
- }
147
+ OPENSSL_free(value);
148
+ ASN1_item_free(ext_str, ASN1_ITEM_ptr(method->it));
161
149
  return ok;
162
150
  }
163
151
 
@@ -54,12 +54,14 @@
54
54
  * (eay@cryptsoft.com). This product includes software written by Tim
55
55
  * Hudson (tjh@cryptsoft.com). */
56
56
 
57
+ #include <limits.h>
57
58
  #include <stdio.h>
58
59
  #include <string.h>
59
60
 
60
61
  #include <openssl/digest.h>
61
62
  #include <openssl/err.h>
62
63
  #include <openssl/obj.h>
64
+ #include <openssl/mem.h>
63
65
  #include <openssl/x509v3.h>
64
66
 
65
67
  #include "../x509/internal.h"
@@ -74,21 +76,26 @@ char *i2s_ASN1_OCTET_STRING(const X509V3_EXT_METHOD *method,
74
76
  ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(const X509V3_EXT_METHOD *method,
75
77
  const X509V3_CTX *ctx,
76
78
  const char *str) {
77
- ASN1_OCTET_STRING *oct;
78
- long length;
79
-
80
- if (!(oct = ASN1_OCTET_STRING_new())) {
79
+ size_t len;
80
+ uint8_t *data = x509v3_hex_to_bytes(str, &len);
81
+ if (data == NULL) {
81
82
  return NULL;
82
83
  }
83
-
84
- if (!(oct->data = x509v3_hex_to_bytes(str, &length))) {
85
- ASN1_OCTET_STRING_free(oct);
86
- return NULL;
84
+ if (len > INT_MAX) {
85
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_OVERFLOW);
86
+ goto err;
87
87
  }
88
88
 
89
- oct->length = length;
90
-
89
+ ASN1_OCTET_STRING *oct = ASN1_OCTET_STRING_new();
90
+ if (oct == NULL) {
91
+ goto err;
92
+ }
93
+ ASN1_STRING_set0(oct, data, (int)len);
91
94
  return oct;
95
+
96
+ err:
97
+ OPENSSL_free(data);
98
+ return NULL;
92
99
  }
93
100
 
94
101
  static char *i2s_ASN1_OCTET_STRING_cb(const X509V3_EXT_METHOD *method,
@@ -494,7 +494,7 @@ err:
494
494
  return NULL;
495
495
  }
496
496
 
497
- unsigned char *x509v3_hex_to_bytes(const char *str, long *len) {
497
+ unsigned char *x509v3_hex_to_bytes(const char *str, size_t *len) {
498
498
  unsigned char *hexbuf, *q;
499
499
  unsigned char ch, cl, *p;
500
500
  uint8_t high, low;
@@ -138,12 +138,10 @@ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_ctr_hmac_sha256(void);
138
138
  // authentication. See |EVP_aead_aes_128_ctr_hmac_sha256| for details.
139
139
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_ctr_hmac_sha256(void);
140
140
 
141
- // EVP_aead_aes_128_gcm_siv is AES-128 in GCM-SIV mode. See
142
- // https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-02
141
+ // EVP_aead_aes_128_gcm_siv is AES-128 in GCM-SIV mode. See RFC 8452.
143
142
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_gcm_siv(void);
144
143
 
145
- // EVP_aead_aes_256_gcm_siv is AES-256 in GCM-SIV mode. See
146
- // https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-02
144
+ // EVP_aead_aes_256_gcm_siv is AES-256 in GCM-SIV mode. See RFC 8452.
147
145
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_gcm_siv(void);
148
146
 
149
147
  // EVP_aead_aes_128_gcm_randnonce is AES-128 in Galois Counter Mode with
@@ -212,7 +210,7 @@ OPENSSL_EXPORT size_t EVP_AEAD_max_tag_len(const EVP_AEAD *aead);
212
210
  // AEAD operations.
213
211
 
214
212
  union evp_aead_ctx_st_state {
215
- uint8_t opaque[580];
213
+ uint8_t opaque[564];
216
214
  uint64_t alignment;
217
215
  };
218
216
 
@@ -402,14 +400,14 @@ OPENSSL_EXPORT const EVP_AEAD *EVP_AEAD_CTX_aead(const EVP_AEAD_CTX *ctx);
402
400
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls(void);
403
401
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls_implicit_iv(void);
404
402
 
403
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha256_tls(void);
404
+
405
405
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls(void);
406
406
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls_implicit_iv(void);
407
407
 
408
408
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls(void);
409
409
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv(void);
410
410
 
411
- OPENSSL_EXPORT const EVP_AEAD *EVP_aead_null_sha1_tls(void);
412
-
413
411
  // EVP_aead_aes_128_gcm_tls12 is AES-128 in Galois Counter Mode using the TLS
414
412
  // 1.2 nonce construction.
415
413
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_gcm_tls12(void);
@@ -740,15 +740,17 @@ OPENSSL_EXPORT int ASN1_STRING_to_UTF8(unsigned char **out,
740
740
  // the result. If |out| is NULL, it returns the selected output type without
741
741
  // constructing an |ASN1_STRING|. On error, this function returns -1.
742
742
  OPENSSL_EXPORT int ASN1_mbstring_copy(ASN1_STRING **out, const uint8_t *in,
743
- int len, int inform, unsigned long mask);
743
+ ossl_ssize_t len, int inform,
744
+ unsigned long mask);
744
745
 
745
746
  // ASN1_mbstring_ncopy behaves like |ASN1_mbstring_copy| but returns an error if
746
747
  // the input is less than |minsize| or greater than |maxsize| codepoints long. A
747
748
  // |maxsize| value of zero is ignored. Note the sizes are measured in
748
749
  // codepoints, not output bytes.
749
750
  OPENSSL_EXPORT int ASN1_mbstring_ncopy(ASN1_STRING **out, const uint8_t *in,
750
- int len, int inform, unsigned long mask,
751
- long minsize, long maxsize);
751
+ ossl_ssize_t len, int inform,
752
+ unsigned long mask, ossl_ssize_t minsize,
753
+ ossl_ssize_t maxsize);
752
754
 
753
755
  // ASN1_STRING_set_by_NID behaves like |ASN1_mbstring_ncopy|, but determines
754
756
  // |mask|, |minsize|, and |maxsize| based on |nid|. When |nid| is a recognized
@@ -774,7 +776,7 @@ OPENSSL_EXPORT int ASN1_mbstring_ncopy(ASN1_STRING **out, const uint8_t *in,
774
776
  // to call |ASN1_mbstring_ncopy| directly instead.
775
777
  OPENSSL_EXPORT ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
776
778
  const unsigned char *in,
777
- int len, int inform,
779
+ ossl_ssize_t len, int inform,
778
780
  int nid);
779
781
 
780
782
  // STABLE_NO_MASK causes |ASN1_STRING_TABLE_add| to allow types other than
@@ -164,6 +164,10 @@ extern "C" {
164
164
  #define OPENSSL_FREEBSD
165
165
  #endif
166
166
 
167
+ #if defined(__OpenBSD__)
168
+ #define OPENSSL_OPENBSD
169
+ #endif
170
+
167
171
  // BoringSSL requires platform's locking APIs to make internal global state
168
172
  // thread-safe, including the PRNG. On some single-threaded embedded platforms,
169
173
  // locking APIs may not exist, so this dependency may be disabled with the
@@ -193,7 +197,7 @@ extern "C" {
193
197
  // A consumer may use this symbol in the preprocessor to temporarily build
194
198
  // against multiple revisions of BoringSSL at the same time. It is not
195
199
  // recommended to do so for longer than is necessary.
196
- #define BORINGSSL_API_VERSION 19
200
+ #define BORINGSSL_API_VERSION 21
197
201
 
198
202
  #if defined(BORINGSSL_SHARED_LIBRARY)
199
203
 
@@ -221,6 +225,33 @@ extern "C" {
221
225
 
222
226
  #endif // defined(BORINGSSL_SHARED_LIBRARY)
223
227
 
228
+ #if defined(_MSC_VER)
229
+
230
+ // OPENSSL_DEPRECATED is used to mark a function as deprecated. Use
231
+ // of any functions so marked in caller code will produce a warning.
232
+ // OPENSSL_BEGIN_ALLOW_DEPRECATED and OPENSSL_END_ALLOW_DEPRECATED
233
+ // can be used to suppress the warning in regions of caller code.
234
+ #define OPENSSL_DEPRECATED __declspec(deprecated)
235
+ #define OPENSSL_BEGIN_ALLOW_DEPRECATED \
236
+ __pragma(warning(push)) __pragma(warning(disable : 4996))
237
+ #define OPENSSL_END_ALLOW_DEPRECATED __pragma(warning(pop))
238
+
239
+ #elif defined(__GNUC__) || defined(__clang__)
240
+
241
+ #define OPENSSL_DEPRECATED __attribute__((__deprecated__))
242
+ #define OPENSSL_BEGIN_ALLOW_DEPRECATED \
243
+ _Pragma("GCC diagnostic push") \
244
+ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
245
+ #define OPENSSL_END_ALLOW_DEPRECATED _Pragma("GCC diagnostic pop")
246
+
247
+ #else
248
+
249
+ #define OPENSSL_DEPRECATED
250
+ #define OPENSSL_BEGIN_ALLOW_DEPRECATED
251
+ #define OPENSSL_END_ALLOW_DEPRECATED
252
+
253
+ #endif
254
+
224
255
 
225
256
  #if defined(__GNUC__) || defined(__clang__)
226
257
  // MinGW has two different printf implementations. Ensure the format macro