grpc 1.41.0 → 1.42.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 (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +83 -70
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -79,17 +79,11 @@ void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, int combine)
79
79
  {
80
80
  const ASN1_TEMPLATE *tt = NULL, *seqtt;
81
81
  const ASN1_EXTERN_FUNCS *ef;
82
- const ASN1_AUX *aux = it->funcs;
83
- ASN1_aux_cb *asn1_cb;
84
82
  int i;
85
83
  if (!pval)
86
84
  return;
87
85
  if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval)
88
86
  return;
89
- if (aux && aux->asn1_cb)
90
- asn1_cb = aux->asn1_cb;
91
- else
92
- asn1_cb = 0;
93
87
 
94
88
  switch (it->itype) {
95
89
 
@@ -104,7 +98,9 @@ void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, int combine)
104
98
  ASN1_primitive_free(pval, it);
105
99
  break;
106
100
 
107
- case ASN1_ITYPE_CHOICE:
101
+ case ASN1_ITYPE_CHOICE: {
102
+ const ASN1_AUX *aux = it->funcs;
103
+ ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
108
104
  if (asn1_cb) {
109
105
  i = asn1_cb(ASN1_OP_FREE_PRE, pval, it, NULL);
110
106
  if (i == 2)
@@ -124,6 +120,7 @@ void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, int combine)
124
120
  *pval = NULL;
125
121
  }
126
122
  break;
123
+ }
127
124
 
128
125
  case ASN1_ITYPE_EXTERN:
129
126
  ef = it->funcs;
@@ -131,9 +128,11 @@ void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, int combine)
131
128
  ef->asn1_ex_free(pval, it);
132
129
  break;
133
130
 
134
- case ASN1_ITYPE_SEQUENCE:
131
+ case ASN1_ITYPE_SEQUENCE: {
135
132
  if (!asn1_refcount_dec_and_test_zero(pval, it))
136
133
  return;
134
+ const ASN1_AUX *aux = it->funcs;
135
+ ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
137
136
  if (asn1_cb) {
138
137
  i = asn1_cb(ASN1_OP_FREE_PRE, pval, it, NULL);
139
138
  if (i == 2)
@@ -162,6 +161,7 @@ void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, int combine)
162
161
  }
163
162
  break;
164
163
  }
164
+ }
165
165
  }
166
166
 
167
167
  void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt)
@@ -95,14 +95,8 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it,
95
95
  {
96
96
  const ASN1_TEMPLATE *tt = NULL;
97
97
  const ASN1_EXTERN_FUNCS *ef;
98
- const ASN1_AUX *aux = it->funcs;
99
- ASN1_aux_cb *asn1_cb;
100
98
  ASN1_VALUE **pseqval;
101
99
  int i;
102
- if (aux && aux->asn1_cb)
103
- asn1_cb = aux->asn1_cb;
104
- else
105
- asn1_cb = 0;
106
100
 
107
101
  switch (it->itype) {
108
102
 
@@ -127,7 +121,9 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it,
127
121
  goto memerr;
128
122
  break;
129
123
 
130
- case ASN1_ITYPE_CHOICE:
124
+ case ASN1_ITYPE_CHOICE: {
125
+ const ASN1_AUX *aux = it->funcs;
126
+ ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
131
127
  if (asn1_cb) {
132
128
  i = asn1_cb(ASN1_OP_NEW_PRE, pval, it, NULL);
133
129
  if (!i)
@@ -146,8 +142,11 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it,
146
142
  if (asn1_cb && !asn1_cb(ASN1_OP_NEW_POST, pval, it, NULL))
147
143
  goto auxerr2;
148
144
  break;
145
+ }
149
146
 
150
- case ASN1_ITYPE_SEQUENCE:
147
+ case ASN1_ITYPE_SEQUENCE: {
148
+ const ASN1_AUX *aux = it->funcs;
149
+ ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
151
150
  if (asn1_cb) {
152
151
  i = asn1_cb(ASN1_OP_NEW_PRE, pval, it, NULL);
153
152
  if (!i)
@@ -173,6 +172,7 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it,
173
172
  goto auxerr2;
174
173
  break;
175
174
  }
175
+ }
176
176
  return 1;
177
177
 
178
178
  memerr2:
@@ -271,7 +271,6 @@ static void asn1_template_clear(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt)
271
271
  static int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
272
272
  {
273
273
  ASN1_TYPE *typ;
274
- ASN1_STRING *str;
275
274
  int utype;
276
275
 
277
276
  if (!it)
@@ -308,10 +307,7 @@ static int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
308
307
  break;
309
308
 
310
309
  default:
311
- str = ASN1_STRING_type_new(utype);
312
- if (it->itype == ASN1_ITYPE_MSTRING && str)
313
- str->flags |= ASN1_STRING_FLAG_MSTRING;
314
- *pval = (ASN1_VALUE *)str;
310
+ *pval = (ASN1_VALUE *)ASN1_STRING_type_new(utype);
315
311
  break;
316
312
  }
317
313
  if (*pval)
@@ -118,6 +118,7 @@ int asn1_refcount_dec_and_test_zero(ASN1_VALUE **pval, const ASN1_ITEM *it) {
118
118
  }
119
119
 
120
120
  static ASN1_ENCODING *asn1_get_enc_ptr(ASN1_VALUE **pval, const ASN1_ITEM *it) {
121
+ assert(it->itype == ASN1_ITYPE_SEQUENCE);
121
122
  const ASN1_AUX *aux;
122
123
  if (!pval || !*pval) {
123
124
  return NULL;
@@ -265,14 +265,17 @@ static uint8_t base64_ascii_to_bin(uint8_t a) {
265
265
  const uint8_t is_slash = constant_time_eq_8(a, '/');
266
266
  const uint8_t is_equals = constant_time_eq_8(a, '=');
267
267
 
268
- uint8_t ret = 0xff; // 0xff signals invalid.
269
- ret = constant_time_select_8(is_upper, a - 'A', ret); // [0,26)
270
- ret = constant_time_select_8(is_lower, a - 'a' + 26, ret); // [26,52)
271
- ret = constant_time_select_8(is_digit, a - '0' + 52, ret); // [52,62)
272
- ret = constant_time_select_8(is_plus, 62, ret);
273
- ret = constant_time_select_8(is_slash, 63, ret);
274
- // Padding maps to zero, to be further handled by the caller.
275
- ret = constant_time_select_8(is_equals, 0, ret);
268
+ uint8_t ret = 0;
269
+ ret |= is_upper & (a - 'A'); // [0,26)
270
+ ret |= is_lower & (a - 'a' + 26); // [26,52)
271
+ ret |= is_digit & (a - '0' + 52); // [52,62)
272
+ ret |= is_plus & 62;
273
+ ret |= is_slash & 63;
274
+ // Invalid inputs, 'A', and '=' have all been mapped to zero. Map invalid
275
+ // inputs to 0xff. Note '=' is padding and handled separately by the caller.
276
+ const uint8_t is_valid =
277
+ is_upper | is_lower | is_digit | is_plus | is_slash | is_equals;
278
+ ret |= ~is_valid;
276
279
  return ret;
277
280
  }
278
281
 
@@ -116,17 +116,11 @@ static int mem_new(BIO *bio) {
116
116
  }
117
117
 
118
118
  static int mem_free(BIO *bio) {
119
- BUF_MEM *b;
120
-
121
- if (bio == NULL) {
122
- return 0;
123
- }
124
-
125
119
  if (!bio->shutdown || !bio->init || bio->ptr == NULL) {
126
120
  return 1;
127
121
  }
128
122
 
129
- b = (BUF_MEM *)bio->ptr;
123
+ BUF_MEM *b = (BUF_MEM *)bio->ptr;
130
124
  if (bio->flags & BIO_FLAGS_MEM_RDONLY) {
131
125
  b->data = NULL;
132
126
  }
@@ -320,7 +320,7 @@ static int conn_new(BIO *bio) {
320
320
  bio->init = 0;
321
321
  bio->num = -1;
322
322
  bio->flags = 0;
323
- bio->ptr = (char *)BIO_CONNECT_new();
323
+ bio->ptr = BIO_CONNECT_new();
324
324
  return bio->ptr != NULL;
325
325
  }
326
326
 
@@ -340,10 +340,6 @@ static void conn_close_socket(BIO *bio) {
340
340
  }
341
341
 
342
342
  static int conn_free(BIO *bio) {
343
- if (bio == NULL) {
344
- return 0;
345
- }
346
-
347
343
  if (bio->shutdown) {
348
344
  conn_close_socket(bio);
349
345
  }
@@ -146,10 +146,6 @@ static int fd_new(BIO *bio) {
146
146
  }
147
147
 
148
148
  static int fd_free(BIO *bio) {
149
- if (bio == NULL) {
150
- return 0;
151
- }
152
-
153
149
  if (bio->shutdown) {
154
150
  if (bio->init) {
155
151
  BORINGSSL_CLOSE(bio->num);
@@ -126,13 +126,7 @@ BIO *BIO_new_fp(FILE *stream, int close_flag) {
126
126
  return ret;
127
127
  }
128
128
 
129
- static int file_new(BIO *bio) { return 1; }
130
-
131
129
  static int file_free(BIO *bio) {
132
- if (bio == NULL) {
133
- return 0;
134
- }
135
-
136
130
  if (!bio->shutdown) {
137
131
  return 1;
138
132
  }
@@ -279,7 +273,7 @@ static const BIO_METHOD methods_filep = {
279
273
  BIO_TYPE_FILE, "FILE pointer",
280
274
  file_write, file_read,
281
275
  NULL /* puts */, file_gets,
282
- file_ctrl, file_new,
276
+ file_ctrl, NULL /* create */,
283
277
  file_free, NULL /* callback_ctrl */,
284
278
  };
285
279
 
@@ -127,12 +127,7 @@ static void bio_destroy_pair(BIO *bio) {
127
127
  }
128
128
 
129
129
  static int bio_free(BIO *bio) {
130
- struct bio_bio_st *b;
131
-
132
- if (bio == NULL) {
133
- return 0;
134
- }
135
- b = bio->ptr;
130
+ struct bio_bio_st *b = bio->ptr;
136
131
 
137
132
  assert(b != NULL);
138
133
 
@@ -81,19 +81,7 @@ static int closesocket(int sock) {
81
81
  }
82
82
  #endif
83
83
 
84
- static int sock_new(BIO *bio) {
85
- bio->init = 0;
86
- bio->num = 0;
87
- bio->ptr = NULL;
88
- bio->flags = 0;
89
- return 1;
90
- }
91
-
92
84
  static int sock_free(BIO *bio) {
93
- if (bio == NULL) {
94
- return 0;
95
- }
96
-
97
85
  if (bio->shutdown) {
98
86
  if (bio->init) {
99
87
  closesocket(bio->num);
@@ -105,17 +93,15 @@ static int sock_free(BIO *bio) {
105
93
  }
106
94
 
107
95
  static int sock_read(BIO *b, char *out, int outl) {
108
- int ret = 0;
109
-
110
96
  if (out == NULL) {
111
97
  return 0;
112
98
  }
113
99
 
114
100
  bio_clear_socket_error();
115
101
  #if defined(OPENSSL_WINDOWS)
116
- ret = recv(b->num, out, outl, 0);
102
+ int ret = recv(b->num, out, outl, 0);
117
103
  #else
118
- ret = read(b->num, out, outl);
104
+ int ret = read(b->num, out, outl);
119
105
  #endif
120
106
  BIO_clear_retry_flags(b);
121
107
  if (ret <= 0) {
@@ -186,7 +172,7 @@ static const BIO_METHOD methods_sockp = {
186
172
  BIO_TYPE_SOCKET, "socket",
187
173
  sock_write, sock_read,
188
174
  NULL /* puts */, NULL /* gets, */,
189
- sock_ctrl, sock_new,
175
+ sock_ctrl, NULL /* create */,
190
176
  sock_free, NULL /* callback_ctrl */,
191
177
  };
192
178
 
@@ -42,19 +42,17 @@ static const uint8_t kSigma[10 * 16] = {
42
42
  // clang-format on
43
43
  };
44
44
 
45
- #define RIGHT_ROTATE(v, n) (((v) >> (n)) | ((v) << (64 - (n))))
46
-
47
45
  // https://tools.ietf.org/html/rfc7693#section-3.1
48
46
  static void blake2b_mix(uint64_t v[16], int a, int b, int c, int d, uint64_t x,
49
47
  uint64_t y) {
50
48
  v[a] = v[a] + v[b] + x;
51
- v[d] = RIGHT_ROTATE(v[d] ^ v[a], 32);
49
+ v[d] = CRYPTO_rotr_u64(v[d] ^ v[a], 32);
52
50
  v[c] = v[c] + v[d];
53
- v[b] = RIGHT_ROTATE(v[b] ^ v[c], 24);
51
+ v[b] = CRYPTO_rotr_u64(v[b] ^ v[c], 24);
54
52
  v[a] = v[a] + v[b] + y;
55
- v[d] = RIGHT_ROTATE(v[d] ^ v[a], 16);
53
+ v[d] = CRYPTO_rotr_u64(v[d] ^ v[a], 16);
56
54
  v[c] = v[c] + v[d];
57
- v[b] = RIGHT_ROTATE(v[b] ^ v[c], 63);
55
+ v[b] = CRYPTO_rotr_u64(v[b] ^ v[c], 63);
58
56
  }
59
57
 
60
58
  static void blake2b_transform(
@@ -404,6 +404,15 @@ int CBB_add_bytes(CBB *cbb, const uint8_t *data, size_t len) {
404
404
  return 1;
405
405
  }
406
406
 
407
+ int CBB_add_zeros(CBB *cbb, size_t len) {
408
+ uint8_t *out;
409
+ if (!CBB_add_space(cbb, &out, len)) {
410
+ return 0;
411
+ }
412
+ OPENSSL_memset(out, 0, len);
413
+ return 1;
414
+ }
415
+
407
416
  int CBB_add_space(CBB *cbb, uint8_t **out_data, size_t len) {
408
417
  if (!CBB_flush(cbb) ||
409
418
  !cbb_buffer_add(cbb->base, out_data, len)) {
@@ -216,6 +216,14 @@ int CBS_get_u24_length_prefixed(CBS *cbs, CBS *out) {
216
216
  return cbs_get_length_prefixed(cbs, out, 3);
217
217
  }
218
218
 
219
+ int CBS_get_until_first(CBS *cbs, CBS *out, uint8_t c) {
220
+ const uint8_t *split = OPENSSL_memchr(CBS_data(cbs), c, CBS_len(cbs));
221
+ if (split == NULL) {
222
+ return 0;
223
+ }
224
+ return CBS_get_bytes(cbs, out, split - CBS_data(cbs));
225
+ }
226
+
219
227
  // parse_base128_integer reads a big-endian base-128 integer from |cbs| and sets
220
228
  // |*out| to the result. This is the encoding used in DER for both high tag
221
229
  // number form and OID components.
@@ -25,22 +25,20 @@
25
25
  #include "internal.h"
26
26
 
27
27
 
28
- #define U8TO32_LITTLE(p) \
29
- (((uint32_t)((p)[0])) | ((uint32_t)((p)[1]) << 8) | \
30
- ((uint32_t)((p)[2]) << 16) | ((uint32_t)((p)[3]) << 24))
31
-
32
28
  // sigma contains the ChaCha constants, which happen to be an ASCII string.
33
29
  static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
34
30
  '2', '-', 'b', 'y', 't', 'e', ' ', 'k' };
35
31
 
36
- #define ROTATE(v, n) (((v) << (n)) | ((v) >> (32 - (n))))
37
-
38
32
  // QUARTERROUND updates a, b, c, d with a ChaCha "quarter" round.
39
- #define QUARTERROUND(a, b, c, d) \
40
- x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 16); \
41
- x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 12); \
42
- x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 8); \
43
- x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 7);
33
+ #define QUARTERROUND(a, b, c, d) \
34
+ x[a] += x[b]; \
35
+ x[d] = CRYPTO_rotl_u32(x[d] ^ x[a], 16); \
36
+ x[c] += x[d]; \
37
+ x[b] = CRYPTO_rotl_u32(x[b] ^ x[c], 12); \
38
+ x[a] += x[b]; \
39
+ x[d] = CRYPTO_rotl_u32(x[d] ^ x[a], 8); \
40
+ x[c] += x[d]; \
41
+ x[b] = CRYPTO_rotl_u32(x[b] ^ x[c], 7);
44
42
 
45
43
  void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
46
44
  const uint8_t nonce[16]) {
@@ -71,24 +69,25 @@ void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
71
69
  uint32_t counter) {
72
70
  assert(!buffers_alias(out, in_len, in, in_len) || in == out);
73
71
 
74
- uint32_t counter_nonce[4]; counter_nonce[0] = counter;
75
- counter_nonce[1] = U8TO32_LITTLE(nonce + 0);
76
- counter_nonce[2] = U8TO32_LITTLE(nonce + 4);
77
- counter_nonce[3] = U8TO32_LITTLE(nonce + 8);
72
+ uint32_t counter_nonce[4];
73
+ counter_nonce[0] = counter;
74
+ counter_nonce[1] = CRYPTO_load_u32_le(nonce + 0);
75
+ counter_nonce[2] = CRYPTO_load_u32_le(nonce + 4);
76
+ counter_nonce[3] = CRYPTO_load_u32_le(nonce + 8);
78
77
 
79
78
  const uint32_t *key_ptr = (const uint32_t *)key;
80
79
  #if !defined(OPENSSL_X86) && !defined(OPENSSL_X86_64)
81
80
  // The assembly expects the key to be four-byte aligned.
82
81
  uint32_t key_u32[8];
83
82
  if ((((uintptr_t)key) & 3) != 0) {
84
- key_u32[0] = U8TO32_LITTLE(key + 0);
85
- key_u32[1] = U8TO32_LITTLE(key + 4);
86
- key_u32[2] = U8TO32_LITTLE(key + 8);
87
- key_u32[3] = U8TO32_LITTLE(key + 12);
88
- key_u32[4] = U8TO32_LITTLE(key + 16);
89
- key_u32[5] = U8TO32_LITTLE(key + 20);
90
- key_u32[6] = U8TO32_LITTLE(key + 24);
91
- key_u32[7] = U8TO32_LITTLE(key + 28);
83
+ key_u32[0] = CRYPTO_load_u32_le(key + 0);
84
+ key_u32[1] = CRYPTO_load_u32_le(key + 4);
85
+ key_u32[2] = CRYPTO_load_u32_le(key + 8);
86
+ key_u32[3] = CRYPTO_load_u32_le(key + 12);
87
+ key_u32[4] = CRYPTO_load_u32_le(key + 16);
88
+ key_u32[5] = CRYPTO_load_u32_le(key + 20);
89
+ key_u32[6] = CRYPTO_load_u32_le(key + 24);
90
+ key_u32[7] = CRYPTO_load_u32_le(key + 28);
92
91
 
93
92
  key_ptr = key_u32;
94
93
  }
@@ -99,14 +98,6 @@ void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
99
98
 
100
99
  #else
101
100
 
102
- #define U32TO8_LITTLE(p, v) \
103
- { \
104
- (p)[0] = (v >> 0) & 0xff; \
105
- (p)[1] = (v >> 8) & 0xff; \
106
- (p)[2] = (v >> 16) & 0xff; \
107
- (p)[3] = (v >> 24) & 0xff; \
108
- }
109
-
110
101
  // chacha_core performs 20 rounds of ChaCha on the input words in
111
102
  // |input| and writes the 64 output bytes to |output|.
112
103
  static void chacha_core(uint8_t output[64], const uint32_t input[16]) {
@@ -129,7 +120,7 @@ static void chacha_core(uint8_t output[64], const uint32_t input[16]) {
129
120
  x[i] += input[i];
130
121
  }
131
122
  for (i = 0; i < 16; ++i) {
132
- U32TO8_LITTLE(output + 4 * i, x[i]);
123
+ CRYPTO_store_u32_le(output + 4 * i, x[i]);
133
124
  }
134
125
  }
135
126
 
@@ -142,25 +133,25 @@ void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
142
133
  uint8_t buf[64];
143
134
  size_t todo, i;
144
135
 
145
- input[0] = U8TO32_LITTLE(sigma + 0);
146
- input[1] = U8TO32_LITTLE(sigma + 4);
147
- input[2] = U8TO32_LITTLE(sigma + 8);
148
- input[3] = U8TO32_LITTLE(sigma + 12);
136
+ input[0] = CRYPTO_load_u32_le(sigma + 0);
137
+ input[1] = CRYPTO_load_u32_le(sigma + 4);
138
+ input[2] = CRYPTO_load_u32_le(sigma + 8);
139
+ input[3] = CRYPTO_load_u32_le(sigma + 12);
149
140
 
150
- input[4] = U8TO32_LITTLE(key + 0);
151
- input[5] = U8TO32_LITTLE(key + 4);
152
- input[6] = U8TO32_LITTLE(key + 8);
153
- input[7] = U8TO32_LITTLE(key + 12);
141
+ input[4] = CRYPTO_load_u32_le(key + 0);
142
+ input[5] = CRYPTO_load_u32_le(key + 4);
143
+ input[6] = CRYPTO_load_u32_le(key + 8);
144
+ input[7] = CRYPTO_load_u32_le(key + 12);
154
145
 
155
- input[8] = U8TO32_LITTLE(key + 16);
156
- input[9] = U8TO32_LITTLE(key + 20);
157
- input[10] = U8TO32_LITTLE(key + 24);
158
- input[11] = U8TO32_LITTLE(key + 28);
146
+ input[8] = CRYPTO_load_u32_le(key + 16);
147
+ input[9] = CRYPTO_load_u32_le(key + 20);
148
+ input[10] = CRYPTO_load_u32_le(key + 24);
149
+ input[11] = CRYPTO_load_u32_le(key + 28);
159
150
 
160
151
  input[12] = counter;
161
- input[13] = U8TO32_LITTLE(nonce + 0);
162
- input[14] = U8TO32_LITTLE(nonce + 4);
163
- input[15] = U8TO32_LITTLE(nonce + 8);
152
+ input[13] = CRYPTO_load_u32_le(nonce + 0);
153
+ input[14] = CRYPTO_load_u32_le(nonce + 4);
154
+ input[15] = CRYPTO_load_u32_le(nonce + 8);
164
155
 
165
156
  while (in_len > 0) {
166
157
  todo = sizeof(buf);
@@ -67,25 +67,42 @@
67
67
  #include "../internal.h"
68
68
 
69
69
 
70
+ static const struct {
71
+ int nid;
72
+ const char *name;
73
+ const EVP_CIPHER *(*func)(void);
74
+ } kCiphers[] = {
75
+ {NID_aes_128_cbc, "aes-128-cbc", EVP_aes_128_cbc},
76
+ {NID_aes_128_ctr, "aes-128-ctr", EVP_aes_128_ctr},
77
+ {NID_aes_128_ecb, "aes-128-ecb", EVP_aes_128_ecb},
78
+ {NID_aes_128_gcm, "aes-128-gcm", EVP_aes_128_gcm},
79
+ {NID_aes_128_ofb128, "aes-128-ofb", EVP_aes_128_ofb},
80
+ {NID_aes_192_cbc, "aes-192-cbc", EVP_aes_192_cbc},
81
+ {NID_aes_192_ctr, "aes-192-ctr", EVP_aes_192_ctr},
82
+ {NID_aes_192_ecb, "aes-192-ecb", EVP_aes_192_ecb},
83
+ {NID_aes_192_gcm, "aes-192-gcm", EVP_aes_192_gcm},
84
+ {NID_aes_192_ofb128, "aes-192-ofb", EVP_aes_192_ofb},
85
+ {NID_aes_256_cbc, "aes-256-cbc", EVP_aes_256_cbc},
86
+ {NID_aes_256_ctr, "aes-256-ctr", EVP_aes_256_ctr},
87
+ {NID_aes_256_ecb, "aes-256-ecb", EVP_aes_256_ecb},
88
+ {NID_aes_256_gcm, "aes-256-gcm", EVP_aes_256_gcm},
89
+ {NID_aes_256_ofb128, "aes-256-ofb", EVP_aes_256_ofb},
90
+ {NID_des_cbc, "des-cbc", EVP_des_cbc},
91
+ {NID_des_ecb, "des-ecb", EVP_des_ecb},
92
+ {NID_des_ede_cbc, "des-ede-cbc", EVP_des_ede_cbc},
93
+ {NID_des_ede_ecb, "des-ede", EVP_des_ede},
94
+ {NID_des_ede3_cbc, "des-ede3-cbc", EVP_des_ede3_cbc},
95
+ {NID_rc2_cbc, "rc2-cbc", EVP_rc2_cbc},
96
+ {NID_rc4, "rc4", EVP_rc4},
97
+ };
98
+
70
99
  const EVP_CIPHER *EVP_get_cipherbynid(int nid) {
71
- switch (nid) {
72
- case NID_rc2_cbc:
73
- return EVP_rc2_cbc();
74
- case NID_rc2_40_cbc:
75
- return EVP_rc2_40_cbc();
76
- case NID_des_ede3_cbc:
77
- return EVP_des_ede3_cbc();
78
- case NID_des_ede_cbc:
79
- return EVP_des_cbc();
80
- case NID_aes_128_cbc:
81
- return EVP_aes_128_cbc();
82
- case NID_aes_192_cbc:
83
- return EVP_aes_192_cbc();
84
- case NID_aes_256_cbc:
85
- return EVP_aes_256_cbc();
86
- default:
87
- return NULL;
100
+ for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kCiphers); i++) {
101
+ if (kCiphers[i].nid == nid) {
102
+ return kCiphers[i].func();
103
+ }
88
104
  }
105
+ return NULL;
89
106
  }
90
107
 
91
108
  const EVP_CIPHER *EVP_get_cipherbyname(const char *name) {
@@ -93,54 +110,17 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name) {
93
110
  return NULL;
94
111
  }
95
112
 
96
- if (OPENSSL_strcasecmp(name, "rc4") == 0) {
97
- return EVP_rc4();
98
- } else if (OPENSSL_strcasecmp(name, "des-cbc") == 0) {
99
- return EVP_des_cbc();
100
- } else if (OPENSSL_strcasecmp(name, "des-ede3-cbc") == 0 ||
101
- // This is not a name used by OpenSSL, but tcpdump registers it
102
- // with |EVP_add_cipher_alias|. Our |EVP_add_cipher_alias| is a
103
- // no-op, so we support the name here.
104
- OPENSSL_strcasecmp(name, "3des") == 0) {
105
- return EVP_des_ede3_cbc();
106
- } else if (OPENSSL_strcasecmp(name, "aes-128-cbc") == 0) {
107
- return EVP_aes_128_cbc();
108
- } else if (OPENSSL_strcasecmp(name, "aes-192-cbc") == 0) {
109
- return EVP_aes_192_cbc();
110
- } else if (OPENSSL_strcasecmp(name, "aes-256-cbc") == 0) {
111
- return EVP_aes_256_cbc();
112
- } else if (OPENSSL_strcasecmp(name, "aes-128-ctr") == 0) {
113
- return EVP_aes_128_ctr();
114
- } else if (OPENSSL_strcasecmp(name, "aes-192-ctr") == 0) {
115
- return EVP_aes_192_ctr();
116
- } else if (OPENSSL_strcasecmp(name, "aes-256-ctr") == 0) {
117
- return EVP_aes_256_ctr();
118
- } else if (OPENSSL_strcasecmp(name, "aes-128-ecb") == 0) {
119
- return EVP_aes_128_ecb();
120
- } else if (OPENSSL_strcasecmp(name, "aes-192-ecb") == 0) {
121
- return EVP_aes_192_ecb();
122
- } else if (OPENSSL_strcasecmp(name, "aes-256-ecb") == 0) {
123
- return EVP_aes_256_ecb();
124
- } else if (OPENSSL_strcasecmp(name, "aes-128-gcm") == 0) {
125
- return EVP_aes_128_gcm();
126
- } else if (OPENSSL_strcasecmp(name, "aes-192-gcm") == 0) {
127
- return EVP_aes_192_gcm();
128
- } else if (OPENSSL_strcasecmp(name, "aes-256-gcm") == 0) {
129
- return EVP_aes_256_gcm();
130
- } else if (OPENSSL_strcasecmp(name, "aes-128-ofb") == 0) {
131
- return EVP_aes_128_ofb();
132
- } else if (OPENSSL_strcasecmp(name, "aes-192-ofb") == 0) {
133
- return EVP_aes_192_ofb();
134
- } else if (OPENSSL_strcasecmp(name, "aes-256-ofb") == 0) {
135
- return EVP_aes_256_ofb();
136
- } else if (OPENSSL_strcasecmp(name, "des-ecb") == 0) {
137
- return EVP_des_ecb();
138
- } else if (OPENSSL_strcasecmp(name, "des-ede") == 0) {
139
- return EVP_des_ede();
140
- } else if (OPENSSL_strcasecmp(name, "des-ede-cbc") == 0) {
141
- return EVP_des_ede_cbc();
142
- } else if (OPENSSL_strcasecmp(name, "rc2-cbc") == 0) {
143
- return EVP_rc2_cbc();
113
+ // This is not a name used by OpenSSL, but tcpdump registers it with
114
+ // |EVP_add_cipher_alias|. Our |EVP_add_cipher_alias| is a no-op, so we
115
+ // support the name here.
116
+ if (OPENSSL_strcasecmp(name, "3des") == 0) {
117
+ name = "des-ede3-cbc";
118
+ }
119
+
120
+ for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kCiphers); i++) {
121
+ if (OPENSSL_strcasecmp(kCiphers[i].name, name) == 0) {
122
+ return kCiphers[i].func();
123
+ }
144
124
  }
145
125
 
146
126
  return NULL;
@@ -83,6 +83,7 @@ static const struct nid_to_digest nid_to_digest_mapping[] = {
83
83
  {NID_sha256, EVP_sha256, SN_sha256, LN_sha256},
84
84
  {NID_sha384, EVP_sha384, SN_sha384, LN_sha384},
85
85
  {NID_sha512, EVP_sha512, SN_sha512, LN_sha512},
86
+ {NID_sha512_256, EVP_sha512_256, SN_sha512_256, LN_sha512_256},
86
87
  {NID_md5_sha1, EVP_md5_sha1, SN_md5_sha1, LN_md5_sha1},
87
88
  // As a remnant of signing |EVP_MD|s, OpenSSL returned the corresponding
88
89
  // hash function when given a signature OID. To avoid unintended lax parsing