grpc 1.37.1 → 1.38.0.pre1

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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -109,6 +109,7 @@
109
109
  #ifndef OPENSSL_HEADER_CRYPTO_INTERNAL_H
110
110
  #define OPENSSL_HEADER_CRYPTO_INTERNAL_H
111
111
 
112
+ #include <openssl/crypto.h>
112
113
  #include <openssl/ex_data.h>
113
114
  #include <openssl/stack.h>
114
115
  #include <openssl/thread.h>
@@ -470,6 +471,12 @@ OPENSSL_EXPORT void CRYPTO_once(CRYPTO_once_t *once, void (*init)(void));
470
471
 
471
472
  // Reference counting.
472
473
 
474
+ // Automatically enable C11 atomics if implemented.
475
+ #if !defined(OPENSSL_C11_ATOMIC) && !defined(__STDC_NO_ATOMICS__) && \
476
+ defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
477
+ #define OPENSSL_C11_ATOMIC
478
+ #endif
479
+
473
480
  // CRYPTO_REFCOUNT_MAX is the value at which the reference count saturates.
474
481
  #define CRYPTO_REFCOUNT_MAX 0xffffffff
475
482
 
@@ -607,6 +614,7 @@ BSSL_NAMESPACE_END
607
614
  typedef enum {
608
615
  OPENSSL_THREAD_LOCAL_ERR = 0,
609
616
  OPENSSL_THREAD_LOCAL_RAND,
617
+ OPENSSL_THREAD_LOCAL_FIPS_COUNTERS,
610
618
  OPENSSL_THREAD_LOCAL_TEST,
611
619
  NUM_OPENSSL_THREAD_LOCALS,
612
620
  } thread_local_data_t;
@@ -811,6 +819,58 @@ static inline void *OPENSSL_memset(void *dst, int c, size_t n) {
811
819
  return memset(dst, c, n);
812
820
  }
813
821
 
822
+
823
+ // Loads and stores.
824
+ //
825
+ // The following functions load and store sized integers with the specified
826
+ // endianness. They use |memcpy|, and so avoid alignment or strict aliasing
827
+ // requirements on the input and output pointers.
828
+
829
+ static inline uint32_t CRYPTO_load_u32_le(const void *in) {
830
+ uint32_t v;
831
+ OPENSSL_memcpy(&v, in, sizeof(v));
832
+ return v;
833
+ }
834
+
835
+ static inline void CRYPTO_store_u32_le(void *out, uint32_t v) {
836
+ OPENSSL_memcpy(out, &v, sizeof(v));
837
+ }
838
+
839
+ static inline uint32_t CRYPTO_load_u32_be(const void *in) {
840
+ uint32_t v;
841
+ OPENSSL_memcpy(&v, in, sizeof(v));
842
+ return CRYPTO_bswap4(v);
843
+ }
844
+
845
+ static inline void CRYPTO_store_u32_be(void *out, uint32_t v) {
846
+ v = CRYPTO_bswap4(v);
847
+ OPENSSL_memcpy(out, &v, sizeof(v));
848
+ }
849
+
850
+ static inline uint64_t CRYPTO_load_u64_be(const void *ptr) {
851
+ uint64_t ret;
852
+ OPENSSL_memcpy(&ret, ptr, sizeof(ret));
853
+ return CRYPTO_bswap8(ret);
854
+ }
855
+
856
+ static inline void CRYPTO_store_u64_be(void *out, uint64_t v) {
857
+ v = CRYPTO_bswap8(v);
858
+ OPENSSL_memcpy(out, &v, sizeof(v));
859
+ }
860
+
861
+ static inline crypto_word_t CRYPTO_load_word_le(const void *in) {
862
+ crypto_word_t v;
863
+ OPENSSL_memcpy(&v, in, sizeof(v));
864
+ return v;
865
+ }
866
+
867
+ static inline void CRYPTO_store_word_le(void *out, crypto_word_t v) {
868
+ OPENSSL_memcpy(out, &v, sizeof(v));
869
+ }
870
+
871
+
872
+ // FIPS functions.
873
+
814
874
  #if defined(BORINGSSL_FIPS)
815
875
  // BORINGSSL_FIPS_abort is called when a FIPS power-on or continuous test
816
876
  // fails. It prevents any further cryptographic operations by the current
@@ -826,6 +886,11 @@ void BORINGSSL_FIPS_abort(void) __attribute__((noreturn));
826
886
  int boringssl_fips_self_test(const uint8_t *module_hash,
827
887
  size_t module_hash_len);
828
888
 
889
+ #if defined(BORINGSSL_FIPS_COUNTERS)
890
+ void boringssl_fips_inc_counter(enum fips_counter_t counter);
891
+ #else
892
+ OPENSSL_INLINE void boringssl_fips_inc_counter(enum fips_counter_t counter) {}
893
+ #endif
829
894
 
830
895
  #if defined(__cplusplus)
831
896
  } // extern C
@@ -107,6 +107,20 @@ WEAK_SYMBOL_FUNC(void, sdallocx, (void *ptr, size_t size, int flags));
107
107
  // allocation and freeing. If defined, it is the responsibility of
108
108
  // |OPENSSL_memory_free| to zero out the memory before returning it to the
109
109
  // system. |OPENSSL_memory_free| will not be passed NULL pointers.
110
+ //
111
+ // WARNING: These functions are called on every allocation and free in
112
+ // BoringSSL across the entire process. They may be called by any code in the
113
+ // process which calls BoringSSL, including in process initializers and thread
114
+ // destructors. When called, BoringSSL may hold pthreads locks. Any other code
115
+ // in the process which, directly or indirectly, calls BoringSSL may be on the
116
+ // call stack and may itself be using arbitrary synchronization primitives.
117
+ //
118
+ // As a result, these functions may not have the usual programming environment
119
+ // available to most C or C++ code. In particular, they may not call into
120
+ // BoringSSL, or any library which depends on BoringSSL. Any synchronization
121
+ // primitives used must tolerate every other synchronization primitive linked
122
+ // into the process, including pthreads locks. Failing to meet these constraints
123
+ // may result in deadlocks, crashes, or memory corruption.
110
124
  WEAK_SYMBOL_FUNC(void*, OPENSSL_memory_alloc, (size_t size));
111
125
  WEAK_SYMBOL_FUNC(void, OPENSSL_memory_free, (void *ptr));
112
126
  WEAK_SYMBOL_FUNC(size_t, OPENSSL_memory_get_size, (void *ptr));
@@ -338,12 +338,12 @@ OPENSSL_EXPORT int OBJ_nid2cbb(CBB *out, int nid) {
338
338
  return 1;
339
339
  }
340
340
 
341
- const ASN1_OBJECT *OBJ_nid2obj(int nid) {
341
+ ASN1_OBJECT *OBJ_nid2obj(int nid) {
342
342
  if (nid >= 0 && nid < NUM_NID) {
343
343
  if (nid != NID_undef && kObjects[nid].nid == NID_undef) {
344
344
  goto err;
345
345
  }
346
- return &kObjects[nid];
346
+ return (ASN1_OBJECT *)&kObjects[nid];
347
347
  }
348
348
 
349
349
  CRYPTO_STATIC_MUTEX_lock_read(&global_added_lock);
@@ -411,7 +411,7 @@ ASN1_OBJECT *OBJ_txt2obj(const char *s, int dont_search_names) {
411
411
  }
412
412
 
413
413
  if (nid != NID_undef) {
414
- return (ASN1_OBJECT*) OBJ_nid2obj(nid);
414
+ return OBJ_nid2obj(nid);
415
415
  }
416
416
  }
417
417
 
@@ -235,7 +235,7 @@ static PKCS7 *pkcs7_new(CBS *cbs) {
235
235
  return NULL;
236
236
  }
237
237
  OPENSSL_memset(ret, 0, sizeof(PKCS7));
238
- ret->type = (ASN1_OBJECT *)OBJ_nid2obj(NID_pkcs7_signed);
238
+ ret->type = OBJ_nid2obj(NID_pkcs7_signed);
239
239
  ret->d.sign = OPENSSL_malloc(sizeof(PKCS7_SIGNED));
240
240
  if (ret->d.sign == NULL) {
241
241
  goto err;
@@ -943,11 +943,6 @@ int PKCS12_parse(const PKCS12 *p12, const char *password, EVP_PKEY **out_pkey,
943
943
 
944
944
  // OpenSSL selects the last certificate which matches the private key as
945
945
  // |out_cert|.
946
- //
947
- // TODO(davidben): OpenSSL additionally reverses the order of the
948
- // certificates, which was likely originally a bug, but may be a feature by
949
- // now. See https://crbug.com/boringssl/250 and
950
- // https://github.com/openssl/openssl/issues/6698.
951
946
  *out_cert = NULL;
952
947
  size_t num_certs = sk_X509_num(ca_certs);
953
948
  if (*out_pkey != NULL && num_certs > 0) {
@@ -1074,31 +1069,24 @@ static int add_cert_bag(CBB *cbb, X509 *cert, const char *name,
1074
1069
  return 1;
1075
1070
  }
1076
1071
 
1077
- static int make_cert_safe_contents(uint8_t **out_data, size_t *out_len,
1078
- X509 *cert, const STACK_OF(X509) *chain,
1079
- const char *name, const uint8_t *key_id,
1080
- size_t key_id_len) {
1081
- int ret = 0;
1082
- CBB cbb, safe_contents;
1083
- if (!CBB_init(&cbb, 0) ||
1084
- !CBB_add_asn1(&cbb, &safe_contents, CBS_ASN1_SEQUENCE) ||
1072
+ static int add_cert_safe_contents(CBB *cbb, X509 *cert,
1073
+ const STACK_OF(X509) *chain, const char *name,
1074
+ const uint8_t *key_id, size_t key_id_len) {
1075
+ CBB safe_contents;
1076
+ if (!CBB_add_asn1(cbb, &safe_contents, CBS_ASN1_SEQUENCE) ||
1085
1077
  (cert != NULL &&
1086
1078
  !add_cert_bag(&safe_contents, cert, name, key_id, key_id_len))) {
1087
- goto err;
1079
+ return 0;
1088
1080
  }
1089
1081
 
1090
1082
  for (size_t i = 0; i < sk_X509_num(chain); i++) {
1091
1083
  // Only the leaf certificate gets attributes.
1092
1084
  if (!add_cert_bag(&safe_contents, sk_X509_value(chain, i), NULL, NULL, 0)) {
1093
- goto err;
1085
+ return 0;
1094
1086
  }
1095
1087
  }
1096
1088
 
1097
- ret = CBB_finish(&cbb, out_data, out_len);
1098
-
1099
- err:
1100
- CBB_cleanup(&cbb);
1101
- return ret;
1089
+ return CBB_flush(cbb);
1102
1090
  }
1103
1091
 
1104
1092
  static int add_encrypted_data(CBB *out, int pbe_nid, const char *password,
@@ -1181,9 +1169,6 @@ PKCS12 *PKCS12_create(const char *password, const char *name,
1181
1169
  if (// In OpenSSL, this specifies a non-standard Microsoft key usage extension
1182
1170
  // which we do not currently support.
1183
1171
  key_type != 0 ||
1184
- // In OpenSSL, -1 here means to use no encryption, which we do not
1185
- // currently support.
1186
- key_nid < 0 || cert_nid < 0 ||
1187
1172
  // In OpenSSL, -1 here means to omit the MAC, which we do not
1188
1173
  // currently support. Omitting it is also invalid for a password-based
1189
1174
  // PKCS#12 file.
@@ -1194,6 +1179,36 @@ PKCS12 *PKCS12_create(const char *password, const char *name,
1194
1179
  return 0;
1195
1180
  }
1196
1181
 
1182
+ // PKCS#12 is a very confusing recursive data format, built out of another
1183
+ // recursive data format. Section 5.1 of RFC7292 describes the encoding
1184
+ // algorithm, but there is no clear overview. A quick summary:
1185
+ //
1186
+ // PKCS#7 defines a ContentInfo structure, which is a overgeneralized typed
1187
+ // combinator structure for applying cryptography. We care about two types. A
1188
+ // data ContentInfo contains an OCTET STRING and is a leaf node of the
1189
+ // combinator tree. An encrypted-data ContentInfo contains encryption
1190
+ // parameters (key derivation and encryption) and wraps another ContentInfo,
1191
+ // usually data.
1192
+ //
1193
+ // A PKCS#12 file is a PFX structure (section 4), which contains a single data
1194
+ // ContentInfo and a MAC over it. This root ContentInfo is the
1195
+ // AuthenticatedSafe and its payload is a SEQUENCE of other ContentInfos, so
1196
+ // that different parts of the PKCS#12 file can by differently protected.
1197
+ //
1198
+ // Each ContentInfo in the AuthenticatedSafe, after undoing all the PKCS#7
1199
+ // combinators, has SafeContents payload. A SafeContents is a SEQUENCE of
1200
+ // SafeBag. SafeBag is PKCS#12's typed structure, with subtypes such as KeyBag
1201
+ // and CertBag. Confusingly, there is a SafeContents bag type which itself
1202
+ // recursively contains more SafeBags, but we do not implement this. Bags also
1203
+ // can have attributes.
1204
+ //
1205
+ // The grouping of SafeBags into intermediate ContentInfos does not appear to
1206
+ // be significant, except that all SafeBags sharing a ContentInfo have the
1207
+ // same level of protection. Additionally, while keys may be encrypted by
1208
+ // placing a KeyBag in an encrypted-data ContentInfo, PKCS#12 also defines a
1209
+ // key-specific encryption container, PKCS8ShroudedKeyBag, which is used
1210
+ // instead.
1211
+
1197
1212
  // Note that |password| may be NULL to specify no password, rather than the
1198
1213
  // empty string. They are encoded differently in PKCS#12. (One is the empty
1199
1214
  // byte array and the other is NUL-terminated UCS-2.)
@@ -1236,24 +1251,43 @@ PKCS12 *PKCS12_create(const char *password, const char *name,
1236
1251
  // If there are any certificates, place them in CertBags wrapped in a single
1237
1252
  // encrypted ContentInfo.
1238
1253
  if (cert != NULL || sk_X509_num(chain) > 0) {
1239
- uint8_t *data;
1240
- size_t len;
1241
- if (!make_cert_safe_contents(&data, &len, cert, chain, name, key_id,
1242
- key_id_len)) {
1243
- goto err;
1244
- }
1245
- int ok = add_encrypted_data(&content_infos, cert_nid, password,
1246
- password_len, iterations, data, len);
1247
- OPENSSL_free(data);
1248
- if (!ok) {
1249
- goto err;
1254
+ if (cert_nid < 0) {
1255
+ // Place the certificates in an unencrypted ContentInfo. This could be
1256
+ // more compactly-encoded by reusing the same ContentInfo as the key, but
1257
+ // OpenSSL does not do this. We keep them separate for consistency. (Keys,
1258
+ // even when encrypted, are always placed in unencrypted ContentInfos.
1259
+ // PKCS#12 defines bag-level encryption for keys.)
1260
+ CBB content_info, oid, wrapper, data;
1261
+ if (!CBB_add_asn1(&content_infos, &content_info, CBS_ASN1_SEQUENCE) ||
1262
+ !CBB_add_asn1(&content_info, &oid, CBS_ASN1_OBJECT) ||
1263
+ !CBB_add_bytes(&oid, kPKCS7Data, sizeof(kPKCS7Data)) ||
1264
+ !CBB_add_asn1(&content_info, &wrapper,
1265
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1266
+ !CBB_add_asn1(&wrapper, &data, CBS_ASN1_OCTETSTRING) ||
1267
+ !add_cert_safe_contents(&data, cert, chain, name, key_id,
1268
+ key_id_len) ||
1269
+ !CBB_flush(&content_infos)) {
1270
+ goto err;
1271
+ }
1272
+ } else {
1273
+ CBB plaintext_cbb;
1274
+ int ok = CBB_init(&plaintext_cbb, 0) &&
1275
+ add_cert_safe_contents(&plaintext_cbb, cert, chain, name, key_id,
1276
+ key_id_len) &&
1277
+ add_encrypted_data(
1278
+ &content_infos, cert_nid, password, password_len, iterations,
1279
+ CBB_data(&plaintext_cbb), CBB_len(&plaintext_cbb));
1280
+ CBB_cleanup(&plaintext_cbb);
1281
+ if (!ok) {
1282
+ goto err;
1283
+ }
1250
1284
  }
1251
1285
  }
1252
1286
 
1253
- // If there is a key, place it in a single PKCS8ShroudedKeyBag wrapped in an
1254
- // unencrypted ContentInfo. (One could also place it in a KeyBag inside an
1255
- // encrypted ContentInfo, but OpenSSL does not do this and some PKCS#12
1256
- // consumers do not support KeyBags.)
1287
+ // If there is a key, place it in a single KeyBag or PKCS8ShroudedKeyBag
1288
+ // wrapped in an unencrypted ContentInfo. (One could also place it in a KeyBag
1289
+ // inside an encrypted ContentInfo, but OpenSSL does not do this and some
1290
+ // PKCS#12 consumers do not support KeyBags.)
1257
1291
  if (pkey != NULL) {
1258
1292
  CBB content_info, oid, wrapper, data, safe_contents, bag, bag_oid,
1259
1293
  bag_contents;
@@ -1267,16 +1301,29 @@ PKCS12 *PKCS12_create(const char *password, const char *name,
1267
1301
  !CBB_add_asn1(&data, &safe_contents, CBS_ASN1_SEQUENCE) ||
1268
1302
  // Add a SafeBag containing a PKCS8ShroudedKeyBag.
1269
1303
  !CBB_add_asn1(&safe_contents, &bag, CBS_ASN1_SEQUENCE) ||
1270
- !CBB_add_asn1(&bag, &bag_oid, CBS_ASN1_OBJECT) ||
1271
- !CBB_add_bytes(&bag_oid, kPKCS8ShroudedKeyBag,
1272
- sizeof(kPKCS8ShroudedKeyBag)) ||
1273
- !CBB_add_asn1(&bag, &bag_contents,
1274
- CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1275
- !PKCS8_marshal_encrypted_private_key(
1276
- &bag_contents, key_nid, NULL, password, password_len,
1277
- NULL /* generate a random salt */, 0 /* use default salt length */,
1278
- iterations, pkey) ||
1279
- !add_bag_attributes(&bag, name, key_id, key_id_len) ||
1304
+ !CBB_add_asn1(&bag, &bag_oid, CBS_ASN1_OBJECT)) {
1305
+ goto err;
1306
+ }
1307
+ if (key_nid < 0) {
1308
+ if (!CBB_add_bytes(&bag_oid, kKeyBag, sizeof(kKeyBag)) ||
1309
+ !CBB_add_asn1(&bag, &bag_contents,
1310
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1311
+ !EVP_marshal_private_key(&bag_contents, pkey)) {
1312
+ goto err;
1313
+ }
1314
+ } else {
1315
+ if (!CBB_add_bytes(&bag_oid, kPKCS8ShroudedKeyBag,
1316
+ sizeof(kPKCS8ShroudedKeyBag)) ||
1317
+ !CBB_add_asn1(&bag, &bag_contents,
1318
+ CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 0) ||
1319
+ !PKCS8_marshal_encrypted_private_key(
1320
+ &bag_contents, key_nid, NULL, password, password_len,
1321
+ NULL /* generate a random salt */,
1322
+ 0 /* use default salt length */, iterations, pkey)) {
1323
+ goto err;
1324
+ }
1325
+ }
1326
+ if (!add_bag_attributes(&bag, name, key_id, key_id_len) ||
1280
1327
  !CBB_flush(&content_infos)) {
1281
1328
  goto err;
1282
1329
  }
@@ -69,6 +69,6 @@ RAND_METHOD *RAND_OpenSSL(void) {
69
69
 
70
70
  const RAND_METHOD *RAND_get_rand_method(void) { return RAND_SSLeay(); }
71
71
 
72
- void RAND_set_rand_method(const RAND_METHOD *method) {}
72
+ int RAND_set_rand_method(const RAND_METHOD *method) { return 1; }
73
73
 
74
74
  void RAND_cleanup(void) {}
@@ -127,34 +127,6 @@ static pthread_once_t g_thread_local_init_once = PTHREAD_ONCE_INIT;
127
127
  static pthread_key_t g_thread_local_key;
128
128
  static int g_thread_local_key_created = 0;
129
129
 
130
- // OPENSSL_DANGEROUS_RELEASE_PTHREAD_KEY can be defined to cause
131
- // |pthread_key_delete| to be called in a destructor function. This can be
132
- // useful for programs that dlclose BoringSSL.
133
- //
134
- // Note that dlclose()ing BoringSSL is not supported and will leak memory:
135
- // thread-local values will be leaked as well as anything initialised via a
136
- // once. The |pthread_key_t| is destroyed because they run out very quickly,
137
- // while the other leaks are slow, and this allows code that happens to use
138
- // dlclose() despite all the problems to continue functioning.
139
- //
140
- // This is marked "dangerous" because it can cause multi-threaded processes to
141
- // crash (even if they don't use dlclose): if the destructor runs while other
142
- // threads are still executing then they may end up using an invalid key to
143
- // access thread-local variables.
144
- //
145
- // This may be removed after February 2020.
146
- #if defined(OPENSSL_DANGEROUS_RELEASE_PTHREAD_KEY) && \
147
- (defined(__GNUC__) || defined(__clang__))
148
- // thread_key_destructor is called when the library is unloaded with dlclose.
149
- static void thread_key_destructor(void) __attribute__((destructor, unused));
150
- static void thread_key_destructor(void) {
151
- if (g_thread_local_key_created) {
152
- g_thread_local_key_created = 0;
153
- pthread_key_delete(g_thread_local_key);
154
- }
155
- }
156
- #endif
157
-
158
130
  static void thread_local_init(void) {
159
131
  g_thread_local_key_created =
160
132
  pthread_key_create(&g_thread_local_key, thread_local_destructor) == 0;
@@ -24,6 +24,25 @@ extern "C" {
24
24
  #endif
25
25
 
26
26
 
27
+ /* Internal structures. */
28
+
29
+ struct X509_val_st {
30
+ ASN1_TIME *notBefore;
31
+ ASN1_TIME *notAfter;
32
+ } /* X509_VAL */;
33
+
34
+ struct X509_pubkey_st {
35
+ X509_ALGOR *algor;
36
+ ASN1_BIT_STRING *public_key;
37
+ EVP_PKEY *pkey;
38
+ } /* X509_PUBKEY */;
39
+
40
+ struct x509_attributes_st {
41
+ ASN1_OBJECT *object;
42
+ STACK_OF(ASN1_TYPE) *set;
43
+ } /* X509_ATTRIBUTE */;
44
+
45
+
27
46
  /* RSA-PSS functions. */
28
47
 
29
48
  /* x509_rsa_pss_to_ctx configures |ctx| for an RSA-PSS operation based on
@@ -63,6 +63,8 @@
63
63
  #include <openssl/x509.h>
64
64
  #include <openssl/x509v3.h>
65
65
 
66
+ #include "internal.h"
67
+
66
68
 
67
69
  int X509_REQ_print_fp(FILE *fp, X509_REQ *x) {
68
70
  BIO *bio = BIO_new_fp(fp, BIO_NOCLOSE);
@@ -62,6 +62,10 @@
62
62
  #include <openssl/stack.h>
63
63
  #include <openssl/x509.h>
64
64
 
65
+ #include "../asn1/asn1_locl.h"
66
+ #include "internal.h"
67
+
68
+
65
69
  int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x)
66
70
  {
67
71
  return sk_X509_ATTRIBUTE_num(x);
@@ -214,7 +218,7 @@ void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x,
214
218
  }
215
219
 
216
220
  X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
217
- int atrtype, const void *data,
221
+ int attrtype, const void *data,
218
222
  int len)
219
223
  {
220
224
  const ASN1_OBJECT *obj;
@@ -224,12 +228,12 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
224
228
  OPENSSL_PUT_ERROR(X509, X509_R_UNKNOWN_NID);
225
229
  return (NULL);
226
230
  }
227
- return X509_ATTRIBUTE_create_by_OBJ(attr, obj, atrtype, data, len);
231
+ return X509_ATTRIBUTE_create_by_OBJ(attr, obj, attrtype, data, len);
228
232
  }
229
233
 
230
234
  X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
231
235
  const ASN1_OBJECT *obj,
232
- int atrtype, const void *data,
236
+ int attrtype, const void *data,
233
237
  int len)
234
238
  {
235
239
  X509_ATTRIBUTE *ret;
@@ -244,7 +248,7 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
244
248
 
245
249
  if (!X509_ATTRIBUTE_set1_object(ret, obj))
246
250
  goto err;
247
- if (!X509_ATTRIBUTE_set1_data(ret, atrtype, data, len))
251
+ if (!X509_ATTRIBUTE_set1_data(ret, attrtype, data, len))
248
252
  goto err;
249
253
 
250
254
  if ((attr != NULL) && (*attr == NULL))
@@ -257,17 +261,17 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
257
261
  }
258
262
 
259
263
  X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
260
- const char *atrname, int type,
264
+ const char *attrname, int type,
261
265
  const unsigned char *bytes,
262
266
  int len)
263
267
  {
264
268
  ASN1_OBJECT *obj;
265
269
  X509_ATTRIBUTE *nattr;
266
270
 
267
- obj = OBJ_txt2obj(atrname, 0);
271
+ obj = OBJ_txt2obj(attrname, 0);
268
272
  if (obj == NULL) {
269
273
  OPENSSL_PUT_ERROR(X509, X509_R_INVALID_FIELD_NAME);
270
- ERR_add_error_data(2, "name=", atrname);
274
+ ERR_add_error_data(2, "name=", attrname);
271
275
  return (NULL);
272
276
  }
273
277
  nattr = X509_ATTRIBUTE_create_by_OBJ(attr, obj, type, bytes, len);
@@ -307,9 +311,6 @@ int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
307
311
  goto err;
308
312
  atype = attrtype;
309
313
  }
310
- if (!(attr->value.set = sk_ASN1_TYPE_new_null()))
311
- goto err;
312
- attr->single = 0;
313
314
  /*
314
315
  * This is a bit naughty because the attribute should really have at
315
316
  * least one value but some types use and zero length SET and require
@@ -328,7 +329,7 @@ int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
328
329
  ASN1_TYPE_set(ttmp, atype, stmp);
329
330
  stmp = NULL;
330
331
  }
331
- if (!sk_ASN1_TYPE_push(attr->value.set, ttmp))
332
+ if (!sk_ASN1_TYPE_push(attr->set, ttmp))
332
333
  goto err;
333
334
  return 1;
334
335
  err:
@@ -338,13 +339,9 @@ int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
338
339
  return 0;
339
340
  }
340
341
 
341
- int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr)
342
+ int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr)
342
343
  {
343
- if (!attr->single)
344
- return sk_ASN1_TYPE_num(attr->value.set);
345
- if (attr->value.single)
346
- return 1;
347
- return 0;
344
+ return sk_ASN1_TYPE_num(attr->set);
348
345
  }
349
346
 
350
347
  ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr)
@@ -355,27 +352,24 @@ ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr)
355
352
  }
356
353
 
357
354
  void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx,
358
- int atrtype, void *data)
355
+ int attrtype, void *unused)
359
356
  {
360
357
  ASN1_TYPE *ttmp;
361
358
  ttmp = X509_ATTRIBUTE_get0_type(attr, idx);
362
359
  if (!ttmp)
363
360
  return NULL;
364
- if (atrtype != ASN1_TYPE_get(ttmp)) {
361
+ if (attrtype != ASN1_TYPE_get(ttmp)) {
365
362
  OPENSSL_PUT_ERROR(X509, X509_R_WRONG_TYPE);
366
363
  return NULL;
367
364
  }
368
- return ttmp->value.ptr;
365
+ return (void *)asn1_type_value_as_pointer(ttmp);
369
366
  }
370
367
 
371
368
  ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx)
372
369
  {
373
370
  if (attr == NULL)
374
- return (NULL);
371
+ return NULL;
375
372
  if (idx >= X509_ATTRIBUTE_count(attr))
376
373
  return NULL;
377
- if (!attr->single)
378
- return sk_ASN1_TYPE_value(attr->value.set, idx);
379
- else
380
- return attr->value.single;
374
+ return sk_ASN1_TYPE_value(attr->set, idx);
381
375
  }