grpc 1.41.1 → 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.
- checksums.yaml +4 -4
- data/Makefile +55 -43
- data/include/grpc/event_engine/event_engine.h +82 -42
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +18 -0
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
- data/src/core/ext/filters/client_channel/client_channel.h +74 -27
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -5
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
- data/src/core/ext/filters/client_channel/subchannel.h +29 -49
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
- data/src/core/ext/service_config/service_config_call_data.h +72 -0
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +325 -362
- data/src/core/ext/xds/xds_api.h +134 -82
- data/src/core/ext/xds/xds_bootstrap.h +10 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +527 -314
- data/src/core/ext/xds/xds_client.h +42 -37
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
- data/src/core/lib/address_utils/parse_address.cc +2 -0
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +24 -6
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_trace.cc +1 -1
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +3 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +6 -4
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +44 -2
- data/src/core/lib/config/core_configuration.h +39 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +1 -1
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gprpp/arena.h +10 -0
- data/src/core/lib/gprpp/bitset.h +38 -16
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- data/src/core/lib/gprpp/match.h +1 -1
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/overload.h +1 -1
- data/src/core/lib/gprpp/status_helper.cc +23 -3
- data/src/core/lib/gprpp/status_helper.h +12 -1
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/http/httpcli.cc +200 -182
- data/src/core/lib/http/parser.cc +2 -2
- data/src/core/lib/iomgr/call_combiner.cc +28 -10
- data/src/core/lib/iomgr/combiner.cc +6 -21
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
- data/src/core/lib/iomgr/error.cc +113 -52
- data/src/core/lib/iomgr/error.h +50 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
- data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +6 -20
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
- data/src/core/lib/iomgr/resource_quota.cc +13 -11
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_posix.cc +4 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_windows.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +6 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +9 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.cc +73 -43
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- data/src/core/lib/slice/slice.cc +0 -16
- data/src/core/lib/slice/slice_api.cc +39 -0
- data/src/core/lib/slice/slice_buffer.cc +5 -5
- data/src/core/lib/slice/slice_intern.cc +8 -13
- data/src/core/lib/slice/slice_internal.h +1 -244
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
- data/src/core/lib/surface/call.cc +103 -120
- data/src/core/lib/surface/call.h +0 -6
- data/src/core/lib/surface/channel.cc +19 -32
- data/src/core/lib/surface/channel.h +0 -9
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +6 -5
- data/src/core/lib/surface/init.cc +0 -39
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +18 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +25 -17
- data/src/core/lib/surface/server.h +17 -10
- data/src/core/lib/surface/validate_metadata.cc +5 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +31 -10
- data/src/core/lib/transport/metadata.h +2 -1
- data/src/core/lib/transport/metadata_batch.cc +35 -371
- data/src/core/lib/transport/metadata_batch.h +905 -71
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +714 -846
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +1 -0
- data/src/core/lib/transport/transport.cc +4 -5
- data/src/core/lib/transport/transport_op_string.cc +40 -20
- data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
- data/src/core/tsi/ssl_transport_security.cc +10 -2
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +12 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- metadata +78 -66
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/transport/authority_override.cc +0 -40
- data/src/core/lib/transport/authority_override.h +0 -37
@@ -311,7 +311,7 @@ shared_examples 'basic GRPC message delivery is OK' do
|
|
311
311
|
|
312
312
|
it 'clients can cancel a call on the server' do
|
313
313
|
expected_code = StatusCodes::CANCELLED
|
314
|
-
expected_details = '
|
314
|
+
expected_details = 'CANCELLED'
|
315
315
|
cancel_proc = proc { |call| call.cancel }
|
316
316
|
client_cancel_test(cancel_proc, expected_code, expected_details)
|
317
317
|
end
|
@@ -120,10 +120,10 @@ void SetCurrentThreadIdentity(
|
|
120
120
|
ABSL_THREAD_IDENTITY_MODE == ABSL_THREAD_IDENTITY_MODE_USE_CPP11
|
121
121
|
|
122
122
|
// Please see the comment on `CurrentThreadIdentityIfPresent` in
|
123
|
-
// thread_identity.h.
|
124
|
-
// headers, we opt for the correct-but-slower option of
|
125
|
-
//
|
126
|
-
#
|
123
|
+
// thread_identity.h. When we cannot expose thread_local variables in
|
124
|
+
// headers, we opt for the correct-but-slower option of not inlining this
|
125
|
+
// function.
|
126
|
+
#ifndef ABSL_INTERNAL_INLINE_CURRENT_THREAD_IDENTITY_IF_PRESENT
|
127
127
|
ThreadIdentity* CurrentThreadIdentityIfPresent() { return thread_identity_ptr; }
|
128
128
|
#endif
|
129
129
|
#endif
|
@@ -236,13 +236,18 @@ ABSL_CONST_INIT extern thread_local ThreadIdentity* thread_identity_ptr;
|
|
236
236
|
#error Thread-local storage not detected on this platform
|
237
237
|
#endif
|
238
238
|
|
239
|
-
// thread_local variables cannot be in headers exposed by DLLs
|
240
|
-
//
|
241
|
-
//
|
242
|
-
//
|
239
|
+
// thread_local variables cannot be in headers exposed by DLLs or in certain
|
240
|
+
// build configurations on Apple platforms. However, it is important for
|
241
|
+
// performance reasons in general that `CurrentThreadIdentityIfPresent` be
|
242
|
+
// inlined. In the other cases we opt to have the function not be inlined. Note
|
243
243
|
// that `CurrentThreadIdentityIfPresent` is declared above so we can exclude
|
244
|
-
// this entire inline definition
|
245
|
-
#if !defined(
|
244
|
+
// this entire inline definition.
|
245
|
+
#if !defined(__APPLE__) && !defined(ABSL_BUILD_DLL) && \
|
246
|
+
!defined(ABSL_CONSUME_DLL)
|
247
|
+
#define ABSL_INTERNAL_INLINE_CURRENT_THREAD_IDENTITY_IF_PRESENT 1
|
248
|
+
#endif
|
249
|
+
|
250
|
+
#ifdef ABSL_INTERNAL_INLINE_CURRENT_THREAD_IDENTITY_IF_PRESENT
|
246
251
|
inline ThreadIdentity* CurrentThreadIdentityIfPresent() {
|
247
252
|
return thread_identity_ptr;
|
248
253
|
}
|
@@ -54,6 +54,7 @@ static bool posix_source_addr_factory_get_source_addr(
|
|
54
54
|
address_sorting_source_addr_factory* factory,
|
55
55
|
const address_sorting_address* dest_addr,
|
56
56
|
address_sorting_address* source_addr) {
|
57
|
+
(void)factory;
|
57
58
|
bool source_addr_exists = false;
|
58
59
|
// Android sets SOCK_CLOEXEC. Don't set this here for portability.
|
59
60
|
int s = socket(((struct sockaddr*)dest_addr)->sa_family, SOCK_DGRAM, 0);
|
@@ -59,7 +59,7 @@
|
|
59
59
|
#include <openssl/err.h>
|
60
60
|
#include <openssl/mem.h>
|
61
61
|
|
62
|
-
int i2d_ASN1_BOOLEAN(
|
62
|
+
int i2d_ASN1_BOOLEAN(ASN1_BOOLEAN a, unsigned char **pp)
|
63
63
|
{
|
64
64
|
int r;
|
65
65
|
unsigned char *p, *allocated = NULL;
|
@@ -88,36 +88,35 @@ int i2d_ASN1_BOOLEAN(int a, unsigned char **pp)
|
|
88
88
|
return r;
|
89
89
|
}
|
90
90
|
|
91
|
-
|
92
|
-
{
|
93
|
-
|
94
|
-
const unsigned char *p;
|
91
|
+
ASN1_BOOLEAN d2i_ASN1_BOOLEAN(ASN1_BOOLEAN *a, const unsigned char **pp,
|
92
|
+
long length) {
|
93
|
+
const unsigned char *p = *pp;
|
95
94
|
long len;
|
96
95
|
int inf, tag, xclass;
|
97
|
-
int i = 0;
|
98
|
-
|
99
|
-
p = *pp;
|
100
96
|
inf = ASN1_get_object(&p, &len, &tag, &xclass, length);
|
101
97
|
if (inf & 0x80) {
|
102
|
-
|
103
|
-
|
98
|
+
OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_OBJECT_HEADER);
|
99
|
+
return -1;
|
104
100
|
}
|
105
101
|
|
106
|
-
if (
|
107
|
-
|
108
|
-
|
102
|
+
if (inf & V_ASN1_CONSTRUCTED) {
|
103
|
+
OPENSSL_PUT_ERROR(ASN1, ASN1_R_TYPE_NOT_PRIMITIVE);
|
104
|
+
return -1;
|
105
|
+
}
|
106
|
+
|
107
|
+
if (tag != V_ASN1_BOOLEAN || xclass != V_ASN1_UNIVERSAL) {
|
108
|
+
OPENSSL_PUT_ERROR(ASN1, ASN1_R_EXPECTING_A_BOOLEAN);
|
109
|
+
return -1;
|
109
110
|
}
|
110
111
|
|
111
112
|
if (len != 1) {
|
112
|
-
|
113
|
-
|
113
|
+
OPENSSL_PUT_ERROR(ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH);
|
114
|
+
return -1;
|
114
115
|
}
|
115
|
-
ret = (
|
116
|
-
if (a != NULL)
|
116
|
+
ASN1_BOOLEAN ret = (ASN1_BOOLEAN)*(p++);
|
117
|
+
if (a != NULL) {
|
117
118
|
(*a) = ret;
|
119
|
+
}
|
118
120
|
*pp = p;
|
119
|
-
return
|
120
|
-
err:
|
121
|
-
OPENSSL_PUT_ERROR(ASN1, i);
|
122
|
-
return (ret);
|
121
|
+
return ret;
|
123
122
|
}
|
@@ -56,18 +56,23 @@
|
|
56
56
|
|
57
57
|
#include <openssl/asn1.h>
|
58
58
|
|
59
|
-
#include <
|
59
|
+
#include <assert.h>
|
60
|
+
#include <stdlib.h>
|
60
61
|
#include <string.h>
|
61
62
|
|
62
63
|
#include <openssl/err.h>
|
63
64
|
#include <openssl/mem.h>
|
64
65
|
#include <openssl/obj.h>
|
65
|
-
#include <openssl/stack.h>
|
66
66
|
|
67
|
-
|
67
|
+
#include "../internal.h"
|
68
|
+
#include "../lhash/internal.h"
|
69
|
+
#include "internal.h"
|
68
70
|
|
69
|
-
|
70
|
-
|
71
|
+
|
72
|
+
DEFINE_LHASH_OF(ASN1_STRING_TABLE)
|
73
|
+
|
74
|
+
static LHASH_OF(ASN1_STRING_TABLE) *string_tables = NULL;
|
75
|
+
static struct CRYPTO_STATIC_MUTEX string_tables_lock = CRYPTO_STATIC_MUTEX_INIT;
|
71
76
|
|
72
77
|
void ASN1_STRING_set_default_mask(unsigned long mask)
|
73
78
|
{
|
@@ -83,34 +88,36 @@ int ASN1_STRING_set_default_mask_asc(const char *p)
|
|
83
88
|
return 1;
|
84
89
|
}
|
85
90
|
|
91
|
+
static const ASN1_STRING_TABLE *asn1_string_table_get(int nid);
|
92
|
+
|
86
93
|
/*
|
87
94
|
* The following function generates an ASN1_STRING based on limits in a
|
88
95
|
* table. Frequently the types and length of an ASN1_STRING are restricted by
|
89
96
|
* a corresponding OID. For example certificates and certificate requests.
|
90
97
|
*/
|
91
98
|
|
92
|
-
ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
|
93
|
-
|
94
|
-
int inform, int nid)
|
99
|
+
ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, const unsigned char *in,
|
100
|
+
int len, int inform, int nid)
|
95
101
|
{
|
96
|
-
ASN1_STRING_TABLE *tbl;
|
97
102
|
ASN1_STRING *str = NULL;
|
98
|
-
unsigned long mask;
|
99
103
|
int ret;
|
100
|
-
if (!out)
|
104
|
+
if (!out) {
|
101
105
|
out = &str;
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
+
}
|
107
|
+
const ASN1_STRING_TABLE *tbl = asn1_string_table_get(nid);
|
108
|
+
if (tbl != NULL) {
|
109
|
+
unsigned long mask = tbl->mask;
|
110
|
+
if (!(tbl->flags & STABLE_NO_MASK)) {
|
106
111
|
mask &= B_ASN1_UTF8STRING;
|
107
|
-
|
108
|
-
|
112
|
+
}
|
113
|
+
ret = ASN1_mbstring_ncopy(out, in, len, inform, mask, tbl->minsize,
|
114
|
+
tbl->maxsize);
|
109
115
|
} else {
|
110
|
-
ret = ASN1_mbstring_copy(out, in,
|
116
|
+
ret = ASN1_mbstring_copy(out, in, len, inform, B_ASN1_UTF8STRING);
|
111
117
|
}
|
112
|
-
if (ret <= 0)
|
118
|
+
if (ret <= 0) {
|
113
119
|
return NULL;
|
120
|
+
}
|
114
121
|
return *out;
|
115
122
|
}
|
116
123
|
|
@@ -118,15 +125,13 @@ ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
|
|
118
125
|
* Now the tables and helper functions for the string table:
|
119
126
|
*/
|
120
127
|
|
121
|
-
/*
|
122
|
-
|
128
|
+
/* See RFC 5280. */
|
123
129
|
#define ub_name 32768
|
124
130
|
#define ub_common_name 64
|
125
131
|
#define ub_locality_name 128
|
126
132
|
#define ub_state_name 128
|
127
133
|
#define ub_organization_name 64
|
128
134
|
#define ub_organization_unit_name 64
|
129
|
-
#define ub_title 64
|
130
135
|
#define ub_email_address 128
|
131
136
|
#define ub_serial_number 64
|
132
137
|
|
@@ -157,120 +162,105 @@ static const ASN1_STRING_TABLE tbl_standard[] = {
|
|
157
162
|
{NID_ms_csp_name, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}
|
158
163
|
};
|
159
164
|
|
160
|
-
static int
|
161
|
-
const ASN1_STRING_TABLE **b)
|
165
|
+
static int table_cmp(const ASN1_STRING_TABLE *a, const ASN1_STRING_TABLE *b)
|
162
166
|
{
|
163
|
-
|
167
|
+
if (a->nid < b->nid) {
|
168
|
+
return -1;
|
169
|
+
}
|
170
|
+
if (a->nid > b->nid) {
|
171
|
+
return 1;
|
172
|
+
}
|
173
|
+
return 0;
|
164
174
|
}
|
165
175
|
|
166
|
-
static int
|
176
|
+
static int table_cmp_void(const void *a, const void *b)
|
167
177
|
{
|
168
|
-
|
169
|
-
const ASN1_STRING_TABLE *b = in_b;
|
170
|
-
return a->nid - b->nid;
|
178
|
+
return table_cmp(a, b);
|
171
179
|
}
|
172
180
|
|
173
|
-
ASN1_STRING_TABLE *
|
181
|
+
static uint32_t table_hash(const ASN1_STRING_TABLE *tbl)
|
174
182
|
{
|
175
|
-
|
176
|
-
size_t idx;
|
177
|
-
ASN1_STRING_TABLE *ttmp;
|
178
|
-
ASN1_STRING_TABLE fnd;
|
179
|
-
fnd.nid = nid;
|
180
|
-
|
181
|
-
ttmp =
|
182
|
-
bsearch(&fnd, tbl_standard,
|
183
|
-
sizeof(tbl_standard) / sizeof(ASN1_STRING_TABLE),
|
184
|
-
sizeof(ASN1_STRING_TABLE), table_cmp);
|
185
|
-
if (ttmp)
|
186
|
-
return ttmp;
|
187
|
-
if (!stable)
|
188
|
-
return NULL;
|
189
|
-
sk_ASN1_STRING_TABLE_sort(stable);
|
190
|
-
found = sk_ASN1_STRING_TABLE_find(stable, &idx, &fnd);
|
191
|
-
if (!found)
|
192
|
-
return NULL;
|
193
|
-
return sk_ASN1_STRING_TABLE_value(stable, idx);
|
183
|
+
return OPENSSL_hash32(&tbl->nid, sizeof(tbl->nid));
|
194
184
|
}
|
195
185
|
|
196
|
-
|
197
|
-
long minsize, long maxsize, unsigned long mask,
|
198
|
-
unsigned long flags)
|
186
|
+
static const ASN1_STRING_TABLE *asn1_string_table_get(int nid)
|
199
187
|
{
|
200
|
-
ASN1_STRING_TABLE
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
if (
|
206
|
-
|
207
|
-
return 0;
|
188
|
+
ASN1_STRING_TABLE key;
|
189
|
+
key.nid = nid;
|
190
|
+
const ASN1_STRING_TABLE *tbl =
|
191
|
+
bsearch(&key, tbl_standard, OPENSSL_ARRAY_SIZE(tbl_standard),
|
192
|
+
sizeof(ASN1_STRING_TABLE), table_cmp_void);
|
193
|
+
if (tbl != NULL) {
|
194
|
+
return tbl;
|
208
195
|
}
|
209
|
-
if (!(tmp = ASN1_STRING_TABLE_get(nid))) {
|
210
|
-
tmp = OPENSSL_malloc(sizeof(ASN1_STRING_TABLE));
|
211
|
-
if (!tmp) {
|
212
|
-
OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
|
213
|
-
return 0;
|
214
|
-
}
|
215
|
-
tmp->flags = flags | STABLE_FLAGS_MALLOC;
|
216
|
-
tmp->nid = nid;
|
217
|
-
tmp->minsize = tmp->maxsize = -1;
|
218
|
-
new_nid = 1;
|
219
|
-
} else
|
220
|
-
tmp->flags = (tmp->flags & STABLE_FLAGS_MALLOC) | flags;
|
221
|
-
if (minsize != -1)
|
222
|
-
tmp->minsize = minsize;
|
223
|
-
if (maxsize != -1)
|
224
|
-
tmp->maxsize = maxsize;
|
225
|
-
tmp->mask = mask;
|
226
|
-
if (new_nid)
|
227
|
-
sk_ASN1_STRING_TABLE_push(stable, tmp);
|
228
|
-
return 1;
|
229
|
-
}
|
230
196
|
|
231
|
-
|
232
|
-
{
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
197
|
+
CRYPTO_STATIC_MUTEX_lock_read(&string_tables_lock);
|
198
|
+
if (string_tables != NULL) {
|
199
|
+
tbl = lh_ASN1_STRING_TABLE_retrieve(string_tables, &key);
|
200
|
+
}
|
201
|
+
CRYPTO_STATIC_MUTEX_unlock_read(&string_tables_lock);
|
202
|
+
/* Note returning |tbl| without the lock is only safe because
|
203
|
+
* |ASN1_STRING_TABLE_add| cannot modify or delete existing entries. If we
|
204
|
+
* wish to support that, this function must copy the result under a lock. */
|
205
|
+
return tbl;
|
239
206
|
}
|
240
207
|
|
241
|
-
|
208
|
+
int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
|
209
|
+
unsigned long mask, unsigned long flags)
|
242
210
|
{
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
211
|
+
/* Existing entries cannot be overwritten. */
|
212
|
+
if (asn1_string_table_get(nid) != NULL) {
|
213
|
+
OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
214
|
+
return 0;
|
215
|
+
}
|
248
216
|
|
249
|
-
int
|
250
|
-
|
251
|
-
ASN1_STRING_TABLE *tmp;
|
252
|
-
int i, last_nid = -1;
|
217
|
+
int ret = 0;
|
218
|
+
CRYPTO_STATIC_MUTEX_lock_write(&string_tables_lock);
|
253
219
|
|
254
|
-
|
255
|
-
|
256
|
-
if (
|
257
|
-
|
258
|
-
|
220
|
+
if (string_tables == NULL) {
|
221
|
+
string_tables = lh_ASN1_STRING_TABLE_new(table_hash, table_cmp);
|
222
|
+
if (string_tables == NULL) {
|
223
|
+
goto err;
|
224
|
+
}
|
225
|
+
} else {
|
226
|
+
/* Check again for an existing entry. One may have been added while
|
227
|
+
* unlocked. */
|
228
|
+
ASN1_STRING_TABLE key;
|
229
|
+
key.nid = nid;
|
230
|
+
if (lh_ASN1_STRING_TABLE_retrieve(string_tables, &key) != NULL) {
|
231
|
+
OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
232
|
+
goto err;
|
259
233
|
}
|
260
|
-
last_nid = tmp->nid;
|
261
234
|
}
|
262
235
|
|
263
|
-
|
264
|
-
|
265
|
-
|
236
|
+
ASN1_STRING_TABLE *tbl = OPENSSL_malloc(sizeof(ASN1_STRING_TABLE));
|
237
|
+
if (tbl == NULL) {
|
238
|
+
goto err;
|
239
|
+
}
|
240
|
+
tbl->nid = nid;
|
241
|
+
tbl->flags = flags;
|
242
|
+
tbl->minsize = minsize;
|
243
|
+
tbl->maxsize = maxsize;
|
244
|
+
tbl->mask = mask;
|
245
|
+
ASN1_STRING_TABLE *old_tbl;
|
246
|
+
if (!lh_ASN1_STRING_TABLE_insert(string_tables, &old_tbl, tbl)) {
|
247
|
+
OPENSSL_free(tbl);
|
248
|
+
goto err;
|
266
249
|
}
|
250
|
+
assert(old_tbl == NULL);
|
251
|
+
ret = 1;
|
267
252
|
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
253
|
+
err:
|
254
|
+
CRYPTO_STATIC_MUTEX_unlock_write(&string_tables_lock);
|
255
|
+
return ret;
|
256
|
+
}
|
272
257
|
|
273
|
-
|
258
|
+
void ASN1_STRING_TABLE_cleanup(void)
|
259
|
+
{
|
274
260
|
}
|
275
261
|
|
276
|
-
|
262
|
+
void asn1_get_string_table_for_testing(const ASN1_STRING_TABLE **out_ptr,
|
263
|
+
size_t *out_len) {
|
264
|
+
*out_ptr = tbl_standard;
|
265
|
+
*out_len = OPENSSL_ARRAY_SIZE(tbl_standard);
|
266
|
+
}
|
@@ -175,6 +175,19 @@ const void *asn1_type_value_as_pointer(const ASN1_TYPE *a);
|
|
175
175
|
* ASN.1 PrintableString, and zero otherwise. */
|
176
176
|
int asn1_is_printable(uint32_t value);
|
177
177
|
|
178
|
+
typedef struct {
|
179
|
+
int nid;
|
180
|
+
long minsize;
|
181
|
+
long maxsize;
|
182
|
+
unsigned long mask;
|
183
|
+
unsigned long flags;
|
184
|
+
} ASN1_STRING_TABLE;
|
185
|
+
|
186
|
+
/* asn1_get_string_table_for_testing sets |*out_ptr| and |*out_len| to the table
|
187
|
+
* of built-in |ASN1_STRING_TABLE| values. It is exported for testing. */
|
188
|
+
OPENSSL_EXPORT void asn1_get_string_table_for_testing(
|
189
|
+
const ASN1_STRING_TABLE **out_ptr, size_t *out_len);
|
190
|
+
|
178
191
|
|
179
192
|
#if defined(__cplusplus)
|
180
193
|
} /* extern C */
|
@@ -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] =
|
49
|
+
v[d] = CRYPTO_rotr_u64(v[d] ^ v[a], 32);
|
52
50
|
v[c] = v[c] + v[d];
|
53
|
-
v[b] =
|
51
|
+
v[b] = CRYPTO_rotr_u64(v[b] ^ v[c], 24);
|
54
52
|
v[a] = v[a] + v[b] + y;
|
55
|
-
v[d] =
|
53
|
+
v[d] = CRYPTO_rotr_u64(v[d] ^ v[a], 16);
|
56
54
|
v[c] = v[c] + v[d];
|
57
|
-
v[b] =
|
55
|
+
v[b] = CRYPTO_rotr_u64(v[b] ^ v[c], 63);
|
58
56
|
}
|
59
57
|
|
60
58
|
static void blake2b_transform(
|
@@ -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];
|
41
|
-
x[
|
42
|
-
x[
|
43
|
-
x[
|
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];
|
75
|
-
counter_nonce[
|
76
|
-
counter_nonce[
|
77
|
-
counter_nonce[
|
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] =
|
85
|
-
key_u32[1] =
|
86
|
-
key_u32[2] =
|
87
|
-
key_u32[3] =
|
88
|
-
key_u32[4] =
|
89
|
-
key_u32[5] =
|
90
|
-
key_u32[6] =
|
91
|
-
key_u32[7] =
|
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
|
-
|
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] =
|
146
|
-
input[1] =
|
147
|
-
input[2] =
|
148
|
-
input[3] =
|
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] =
|
151
|
-
input[5] =
|
152
|
-
input[6] =
|
153
|
-
input[7] =
|
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] =
|
156
|
-
input[9] =
|
157
|
-
input[10] =
|
158
|
-
input[11] =
|
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] =
|
162
|
-
input[14] =
|
163
|
-
input[15] =
|
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);
|