aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--BUILD18
-rw-r--r--CMakeLists.txt78
-rw-r--r--Makefile88
-rw-r--r--bazel/grpc_build_system.bzl329
-rw-r--r--bazel/grpc_deps.bzl8
-rw-r--r--build.yaml41
-rw-r--r--config.m42
-rw-r--r--config.w322
-rw-r--r--doc/cpp/pending_api_cleanups.md3
-rw-r--r--doc/g_stands_for.md3
-rw-r--r--doc/naming.md64
-rw-r--r--gRPC-C++.podspec9
-rw-r--r--gRPC-Core.podspec13
-rw-r--r--gRPC-ProtoRPC.podspec2
-rw-r--r--gRPC-RxLibrary.podspec2
-rw-r--r--gRPC.podspec2
-rw-r--r--grpc.gemspec5
-rw-r--r--grpc.gyp8
-rw-r--r--include/grpcpp/impl/codegen/service_type.h37
-rw-r--r--package.xml9
-rw-r--r--src/core/ext/filters/client_channel/README.md18
-rw-r--r--src/core/ext/filters/client_channel/http_connect_handshaker.cc2
-rw-r--r--src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc33
-rw-r--r--src/core/ext/filters/client_channel/lb_policy/subchannel_list.h9
-rw-r--r--src/core/ext/filters/client_channel/resolver.h13
-rw-r--r--src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc12
-rw-r--r--src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc12
-rw-r--r--src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc18
-rw-r--r--src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h3
-rw-r--r--src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc7
-rw-r--r--src/core/ext/filters/load_reporting/server_load_reporting_filter.cc7
-rw-r--r--src/core/ext/filters/max_age/max_age_filter.cc3
-rw-r--r--src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc2
-rw-r--r--src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc2
-rw-r--r--src/core/ext/transport/chttp2/transport/chttp2_transport.cc3
-rw-r--r--src/core/lib/gprpp/fork.cc5
-rw-r--r--src/core/lib/http/httpcli.cc2
-rw-r--r--src/core/lib/iomgr/buffer_list.cc134
-rw-r--r--src/core/lib/iomgr/buffer_list.h96
-rw-r--r--src/core/lib/iomgr/endpoint.cc4
-rw-r--r--src/core/lib/iomgr/endpoint.h8
-rw-r--r--src/core/lib/iomgr/endpoint_cfstream.cc2
-rw-r--r--src/core/lib/iomgr/endpoint_pair_posix.cc4
-rw-r--r--src/core/lib/iomgr/ev_poll_posix.cc114
-rw-r--r--src/core/lib/iomgr/ev_posix.cc9
-rw-r--r--src/core/lib/iomgr/fork_posix.cc6
-rw-r--r--src/core/lib/iomgr/internal_errqueue.cc36
-rw-r--r--src/core/lib/iomgr/internal_errqueue.h83
-rw-r--r--src/core/lib/iomgr/port.h5
-rw-r--r--src/core/lib/iomgr/tcp_client_posix.cc2
-rw-r--r--src/core/lib/iomgr/tcp_custom.cc2
-rw-r--r--src/core/lib/iomgr/tcp_posix.cc312
-rw-r--r--src/core/lib/iomgr/tcp_posix.h3
-rw-r--r--src/core/lib/iomgr/tcp_server_posix.cc4
-rw-r--r--src/core/lib/iomgr/tcp_server_utils_posix_common.cc2
-rw-r--r--src/core/lib/iomgr/tcp_windows.cc2
-rw-r--r--src/core/lib/iomgr/timer_generic.cc7
-rw-r--r--src/core/lib/iomgr/udp_server.cc2
-rw-r--r--src/core/lib/security/credentials/jwt/json_token.h2
-rw-r--r--src/core/lib/security/credentials/jwt/jwt_verifier.cc2
-rw-r--r--src/core/lib/security/transport/secure_endpoint.cc4
-rw-r--r--src/core/lib/security/transport/security_handshaker.cc2
-rw-r--r--src/core/lib/surface/version.cc2
-rw-r--r--src/core/tsi/alts/crypt/aes_gcm.cc2
-rw-r--r--src/core/tsi/grpc_shadow_boringssl.h3006
-rw-r--r--src/core/tsi/ssl/session_cache/ssl_session.h2
-rw-r--r--src/core/tsi/ssl/session_cache/ssl_session_cache.h2
-rw-r--r--src/core/tsi/ssl_transport_security.cc6
-rw-r--r--src/core/tsi/ssl_types.h2
-rw-r--r--src/cpp/common/version_cc.cc2
-rw-r--r--src/csharp/Grpc.Core.Tests/ChannelCredentialsTest.cs37
-rw-r--r--src/csharp/Grpc.Core.Tests/FakeCredentials.cs10
-rw-r--r--src/csharp/Grpc.Core.Tests/MetadataTest.cs2
-rw-r--r--src/csharp/Grpc.Core/Channel.cs2
-rw-r--r--src/csharp/Grpc.Core/ChannelCredentials.cs39
-rw-r--r--src/csharp/Grpc.Core/Internal/AsyncCall.cs27
-rw-r--r--src/csharp/Grpc.Core/Internal/AsyncCallBase.cs32
-rw-r--r--src/csharp/Grpc.Core/Internal/AsyncCallServer.cs10
-rw-r--r--src/csharp/Grpc.Core/Metadata.cs4
-rwxr-xr-xsrc/csharp/Grpc.Core/Version.csproj.include2
-rw-r--r--src/csharp/Grpc.Core/VersionInfo.cs4
-rwxr-xr-xsrc/csharp/build_packages_dotnetcli.bat2
-rw-r--r--src/csharp/build_unitypackage.bat2
-rw-r--r--src/objective-c/!ProtoCompiler-gRPCPlugin.podspec2
-rw-r--r--src/objective-c/BoringSSL-GRPC.podspec4527
-rw-r--r--src/objective-c/BoringSSL.podspec1539
-rw-r--r--src/objective-c/GRPCClient/private/version.h2
-rw-r--r--src/objective-c/README.md22
-rw-r--r--src/objective-c/examples/Sample/Podfile2
-rw-r--r--src/objective-c/examples/SwiftSample/Podfile2
-rw-r--r--src/objective-c/grpc_shadow_boringssl_symbol_list2974
-rw-r--r--src/objective-c/tests/Connectivity/Podfile2
-rw-r--r--src/objective-c/tests/CronetUnitTests/CronetUnitTests.m4
-rw-r--r--src/objective-c/tests/Podfile6
-rw-r--r--src/objective-c/tests/Tests.xcodeproj/project.pbxproj8
-rw-r--r--src/objective-c/tests/version.h2
-rw-r--r--src/php/composer.json2
-rw-r--r--src/php/ext/grpc/version.h2
-rw-r--r--src/proto/grpc/testing/control.proto4
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi38
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi9
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/server.pyx.pxi37
-rw-r--r--src/python/grpcio/grpc/_grpcio_metadata.py2
-rw-r--r--src/python/grpcio/grpc_core_dependencies.py2
-rw-r--r--src/python/grpcio/grpc_version.py2
-rw-r--r--src/python/grpcio_health_checking/grpc_version.py2
-rw-r--r--src/python/grpcio_reflection/grpc_version.py2
-rw-r--r--src/python/grpcio_testing/grpc_version.py2
-rw-r--r--src/python/grpcio_tests/grpc_version.py2
-rw-r--r--src/ruby/lib/grpc/version.rb2
-rw-r--r--src/ruby/tools/version.rb2
-rw-r--r--templates/gRPC-Core.podspec.template3
-rw-r--r--templates/src/core/tsi/grpc_shadow_boringssl.h.template40
-rw-r--r--templates/src/objective-c/BoringSSL-GRPC.podspec.template1561
-rw-r--r--test/core/bad_client/bad_client.cc2
-rw-r--r--test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc117
-rw-r--r--test/core/client_channel/resolvers/fake_resolver_test.cc58
-rw-r--r--test/core/end2end/BUILD13
-rw-r--r--test/core/end2end/bad_server_response_test.cc2
-rwxr-xr-xtest/core/end2end/end2end_test.sh2
-rw-r--r--test/core/end2end/fixtures/http_proxy_fixture.cc10
-rw-r--r--test/core/end2end/inproc_callback_test.cc498
-rw-r--r--test/core/iomgr/BUILD13
-rw-r--r--test/core/iomgr/buffer_list_test.cc111
-rw-r--r--test/core/iomgr/endpoint_tests.cc7
-rw-r--r--test/core/iomgr/ios/CFStreamTests/Podfile1
-rw-r--r--test/core/iomgr/tcp_posix_test.cc109
-rw-r--r--test/core/iomgr/timer_list_test.cc4
-rw-r--r--test/core/tsi/ssl_transport_security_test.cc6
-rw-r--r--test/core/util/mock_endpoint.cc2
-rw-r--r--test/core/util/passthru_endpoint.cc2
-rw-r--r--test/core/util/trickle_endpoint.cc5
-rw-r--r--test/cpp/end2end/client_lb_end2end_test.cc68
-rw-r--r--test/cpp/microbenchmarks/bm_chttp2_transport.cc2
-rw-r--r--test/cpp/qps/BUILD67
-rw-r--r--test/cpp/qps/client.h45
-rw-r--r--test/cpp/qps/driver.cc6
-rw-r--r--test/cpp/qps/driver.h3
-rwxr-xr-xtest/cpp/qps/gen_build_yaml.py123
-rw-r--r--test/cpp/qps/histogram.h5
-rw-r--r--test/cpp/qps/inproc_sync_unary_ping_pong_test.cc2
-rwxr-xr-xtest/cpp/qps/json_run_localhost_scenario_gen.py38
-rw-r--r--test/cpp/qps/json_run_localhost_scenarios.bzl1
-rw-r--r--test/cpp/qps/qps_benchmark_script.bzl72
-rw-r--r--test/cpp/qps/qps_json_driver.cc19
-rwxr-xr-xtest/cpp/qps/qps_json_driver_scenario_gen.py38
-rw-r--r--test/cpp/qps/qps_json_driver_scenarios.bzl1
-rw-r--r--test/cpp/qps/qps_openloop_test.cc2
-rw-r--r--test/cpp/qps/secure_sync_unary_ping_pong_test.cc2
-rwxr-xr-x[-rw-r--r--]tools/buildgen/generate_build_additions.sh0
-rw-r--r--tools/buildgen/plugins/grpc_shadow_boringssl.py32
-rwxr-xr-xtools/distrib/check_shadow_boringssl_symbol_list.sh32
-rwxr-xr-xtools/distrib/generate_grpc_shadow_boringssl_symbol_list.sh45
-rw-r--r--tools/distrib/python/grpcio_tools/grpc_version.py2
-rwxr-xr-xtools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh2
-rw-r--r--tools/doxygen/Doxyfile.c++2
-rw-r--r--tools/doxygen/Doxyfile.c++.internal4
-rw-r--r--tools/doxygen/Doxyfile.core.internal5
-rwxr-xr-xtools/internal_ci/linux/grpc_bazel_on_foundry_base.sh10
-rw-r--r--tools/internal_ci/linux/grpc_msan_on_foundry.sh12
-rw-r--r--tools/internal_ci/linux/grpc_ubsan_on_foundry.sh10
-rw-r--r--tools/internal_ci/linux/pull_request/grpc_ubsan_on_foundry.sh10
-rw-r--r--tools/run_tests/generated/sources_and_headers.json60
-rw-r--r--tools/run_tests/generated/tests.json44
-rwxr-xr-xtools/run_tests/sanity/check_qps_scenario_changes.py33
-rw-r--r--tools/run_tests/sanity/sanity_tests.yaml2
166 files changed, 15165 insertions, 2320 deletions
diff --git a/BUILD b/BUILD
index b59170e05e..925e277cf7 100644
--- a/BUILD
+++ b/BUILD
@@ -64,11 +64,11 @@ config_setting(
)
# This should be updated along with build.yaml
-g_stands_for = "glider"
+g_stands_for = "gao"
core_version = "6.0.0-dev"
-version = "1.15.0-dev"
+version = "1.16.0-dev"
GPR_PUBLIC_HDRS = [
"include/grpc/support/alloc.h",
@@ -696,6 +696,7 @@ grpc_cc_library(
"src/core/lib/http/format_request.cc",
"src/core/lib/http/httpcli.cc",
"src/core/lib/http/parser.cc",
+ "src/core/lib/iomgr/buffer_list.cc",
"src/core/lib/iomgr/call_combiner.cc",
"src/core/lib/iomgr/combiner.cc",
"src/core/lib/iomgr/endpoint.cc",
@@ -716,6 +717,7 @@ grpc_cc_library(
"src/core/lib/iomgr/gethostname_fallback.cc",
"src/core/lib/iomgr/gethostname_host_name_max.cc",
"src/core/lib/iomgr/gethostname_sysconf.cc",
+ "src/core/lib/iomgr/internal_errqueue.cc",
"src/core/lib/iomgr/iocp_windows.cc",
"src/core/lib/iomgr/iomgr.cc",
"src/core/lib/iomgr/iomgr_custom.cc",
@@ -845,6 +847,7 @@ grpc_cc_library(
"src/core/lib/http/format_request.h",
"src/core/lib/http/httpcli.h",
"src/core/lib/http/parser.h",
+ "src/core/lib/iomgr/buffer_list.h",
"src/core/lib/iomgr/block_annotate.h",
"src/core/lib/iomgr/call_combiner.h",
"src/core/lib/iomgr/closure.h",
@@ -862,6 +865,7 @@ grpc_cc_library(
"src/core/lib/iomgr/executor.h",
"src/core/lib/iomgr/gethostname.h",
"src/core/lib/iomgr/gevent_util.h",
+ "src/core/lib/iomgr/internal_errqueue.h",
"src/core/lib/iomgr/iocp_windows.h",
"src/core/lib/iomgr/iomgr.h",
"src/core/lib/iomgr/iomgr_custom.h",
@@ -1549,6 +1553,7 @@ grpc_cc_library(
"grpc_base",
"grpc_transport_chttp2_alpn",
"tsi",
+ "grpc_shadow_boringssl",
],
)
@@ -1809,6 +1814,7 @@ grpc_cc_library(
"gpr",
"grpc_base",
"tsi_interface",
+ "grpc_shadow_boringssl",
],
)
@@ -1905,6 +1911,7 @@ grpc_cc_library(
"grpc_base",
"grpc_transport_chttp2_client_insecure",
"tsi_interface",
+ "grpc_shadow_boringssl",
],
)
@@ -2160,4 +2167,11 @@ grpc_cc_library(
],
)
+grpc_cc_library(
+ name = "grpc_shadow_boringssl",
+ hdrs = [
+ "src/core/tsi/grpc_shadow_boringssl.h",
+ ],
+)
+
grpc_generate_one_off_targets()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 32d7a9b94d..a21bb8b5fa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,7 +24,7 @@
cmake_minimum_required(VERSION 2.8)
set(PACKAGE_NAME "grpc")
-set(PACKAGE_VERSION "1.15.0-dev")
+set(PACKAGE_VERSION "1.16.0-dev")
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
@@ -230,6 +230,9 @@ add_dependencies(buildtests_c avl_test)
add_dependencies(buildtests_c bad_server_response_test)
add_dependencies(buildtests_c bin_decoder_test)
add_dependencies(buildtests_c bin_encoder_test)
+if(_gRPC_PLATFORM_LINUX)
+add_dependencies(buildtests_c buffer_list_test)
+endif()
add_dependencies(buildtests_c channel_create_test)
add_dependencies(buildtests_c chttp2_hpack_encoder_test)
add_dependencies(buildtests_c chttp2_stream_map_test)
@@ -331,6 +334,7 @@ if(_gRPC_PLATFORM_LINUX)
add_dependencies(buildtests_c httpscli_test)
endif()
add_dependencies(buildtests_c init_test)
+add_dependencies(buildtests_c inproc_callback_test)
add_dependencies(buildtests_c invalid_call_argument_test)
add_dependencies(buildtests_c json_rewrite)
add_dependencies(buildtests_c json_rewrite_test)
@@ -958,6 +962,7 @@ add_library(grpc
src/core/lib/http/format_request.cc
src/core/lib/http/httpcli.cc
src/core/lib/http/parser.cc
+ src/core/lib/iomgr/buffer_list.cc
src/core/lib/iomgr/call_combiner.cc
src/core/lib/iomgr/combiner.cc
src/core/lib/iomgr/endpoint.cc
@@ -978,6 +983,7 @@ add_library(grpc
src/core/lib/iomgr/gethostname_fallback.cc
src/core/lib/iomgr/gethostname_host_name_max.cc
src/core/lib/iomgr/gethostname_sysconf.cc
+ src/core/lib/iomgr/internal_errqueue.cc
src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.cc
src/core/lib/iomgr/iomgr_custom.cc
@@ -1364,6 +1370,7 @@ add_library(grpc_cronet
src/core/lib/http/format_request.cc
src/core/lib/http/httpcli.cc
src/core/lib/http/parser.cc
+ src/core/lib/iomgr/buffer_list.cc
src/core/lib/iomgr/call_combiner.cc
src/core/lib/iomgr/combiner.cc
src/core/lib/iomgr/endpoint.cc
@@ -1384,6 +1391,7 @@ add_library(grpc_cronet
src/core/lib/iomgr/gethostname_fallback.cc
src/core/lib/iomgr/gethostname_host_name_max.cc
src/core/lib/iomgr/gethostname_sysconf.cc
+ src/core/lib/iomgr/internal_errqueue.cc
src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.cc
src/core/lib/iomgr/iomgr_custom.cc
@@ -1756,6 +1764,7 @@ add_library(grpc_test_util
src/core/lib/http/format_request.cc
src/core/lib/http/httpcli.cc
src/core/lib/http/parser.cc
+ src/core/lib/iomgr/buffer_list.cc
src/core/lib/iomgr/call_combiner.cc
src/core/lib/iomgr/combiner.cc
src/core/lib/iomgr/endpoint.cc
@@ -1776,6 +1785,7 @@ add_library(grpc_test_util
src/core/lib/iomgr/gethostname_fallback.cc
src/core/lib/iomgr/gethostname_host_name_max.cc
src/core/lib/iomgr/gethostname_sysconf.cc
+ src/core/lib/iomgr/internal_errqueue.cc
src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.cc
src/core/lib/iomgr/iomgr_custom.cc
@@ -2064,6 +2074,7 @@ add_library(grpc_test_util_unsecure
src/core/lib/http/format_request.cc
src/core/lib/http/httpcli.cc
src/core/lib/http/parser.cc
+ src/core/lib/iomgr/buffer_list.cc
src/core/lib/iomgr/call_combiner.cc
src/core/lib/iomgr/combiner.cc
src/core/lib/iomgr/endpoint.cc
@@ -2084,6 +2095,7 @@ add_library(grpc_test_util_unsecure
src/core/lib/iomgr/gethostname_fallback.cc
src/core/lib/iomgr/gethostname_host_name_max.cc
src/core/lib/iomgr/gethostname_sysconf.cc
+ src/core/lib/iomgr/internal_errqueue.cc
src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.cc
src/core/lib/iomgr/iomgr_custom.cc
@@ -2351,6 +2363,7 @@ add_library(grpc_unsecure
src/core/lib/http/format_request.cc
src/core/lib/http/httpcli.cc
src/core/lib/http/parser.cc
+ src/core/lib/iomgr/buffer_list.cc
src/core/lib/iomgr/call_combiner.cc
src/core/lib/iomgr/combiner.cc
src/core/lib/iomgr/endpoint.cc
@@ -2371,6 +2384,7 @@ add_library(grpc_unsecure
src/core/lib/iomgr/gethostname_fallback.cc
src/core/lib/iomgr/gethostname_host_name_max.cc
src/core/lib/iomgr/gethostname_sysconf.cc
+ src/core/lib/iomgr/internal_errqueue.cc
src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.cc
src/core/lib/iomgr/iomgr_custom.cc
@@ -3191,6 +3205,7 @@ add_library(grpc++_cronet
src/core/lib/http/format_request.cc
src/core/lib/http/httpcli.cc
src/core/lib/http/parser.cc
+ src/core/lib/iomgr/buffer_list.cc
src/core/lib/iomgr/call_combiner.cc
src/core/lib/iomgr/combiner.cc
src/core/lib/iomgr/endpoint.cc
@@ -3211,6 +3226,7 @@ add_library(grpc++_cronet
src/core/lib/iomgr/gethostname_fallback.cc
src/core/lib/iomgr/gethostname_host_name_max.cc
src/core/lib/iomgr/gethostname_sysconf.cc
+ src/core/lib/iomgr/internal_errqueue.cc
src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.cc
src/core/lib/iomgr/iomgr_custom.cc
@@ -5836,6 +5852,37 @@ target_link_libraries(bin_encoder_test
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
+if(_gRPC_PLATFORM_LINUX)
+
+add_executable(buffer_list_test
+ test/core/iomgr/buffer_list_test.cc
+)
+
+
+target_include_directories(buffer_list_test
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
+ PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
+ PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
+ PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
+ PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
+ PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
+ PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
+ PRIVATE ${_gRPC_NANOPB_INCLUDE_DIR}
+)
+
+target_link_libraries(buffer_list_test
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_test_util
+ grpc
+ gpr_test_util
+ gpr
+)
+
+endif()
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
add_executable(channel_create_test
test/core/surface/channel_create_test.cc
@@ -7893,6 +7940,35 @@ target_link_libraries(init_test
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
+add_executable(inproc_callback_test
+ test/core/end2end/inproc_callback_test.cc
+)
+
+
+target_include_directories(inproc_callback_test
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
+ PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
+ PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
+ PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
+ PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
+ PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
+ PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
+ PRIVATE ${_gRPC_NANOPB_INCLUDE_DIR}
+)
+
+target_link_libraries(inproc_callback_test
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_test_util
+ grpc
+ gpr_test_util
+ gpr
+)
+
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+
add_executable(invalid_call_argument_test
test/core/end2end/invalid_call_argument_test.cc
)
diff --git a/Makefile b/Makefile
index 3454ef8587..96ea890bcb 100644
--- a/Makefile
+++ b/Makefile
@@ -437,8 +437,8 @@ Q = @
endif
CORE_VERSION = 6.0.0-dev
-CPP_VERSION = 1.15.0-dev
-CSHARP_VERSION = 1.15.0-dev
+CPP_VERSION = 1.16.0-dev
+CSHARP_VERSION = 1.16.0-dev
CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
@@ -978,6 +978,7 @@ avl_test: $(BINDIR)/$(CONFIG)/avl_test
bad_server_response_test: $(BINDIR)/$(CONFIG)/bad_server_response_test
bin_decoder_test: $(BINDIR)/$(CONFIG)/bin_decoder_test
bin_encoder_test: $(BINDIR)/$(CONFIG)/bin_encoder_test
+buffer_list_test: $(BINDIR)/$(CONFIG)/buffer_list_test
channel_create_test: $(BINDIR)/$(CONFIG)/channel_create_test
check_epollexclusive: $(BINDIR)/$(CONFIG)/check_epollexclusive
chttp2_hpack_encoder_test: $(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test
@@ -1053,6 +1054,7 @@ httpcli_format_request_test: $(BINDIR)/$(CONFIG)/httpcli_format_request_test
httpcli_test: $(BINDIR)/$(CONFIG)/httpcli_test
httpscli_test: $(BINDIR)/$(CONFIG)/httpscli_test
init_test: $(BINDIR)/$(CONFIG)/init_test
+inproc_callback_test: $(BINDIR)/$(CONFIG)/inproc_callback_test
invalid_call_argument_test: $(BINDIR)/$(CONFIG)/invalid_call_argument_test
json_fuzzer_test: $(BINDIR)/$(CONFIG)/json_fuzzer_test
json_rewrite: $(BINDIR)/$(CONFIG)/json_rewrite
@@ -1433,6 +1435,7 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/bad_server_response_test \
$(BINDIR)/$(CONFIG)/bin_decoder_test \
$(BINDIR)/$(CONFIG)/bin_encoder_test \
+ $(BINDIR)/$(CONFIG)/buffer_list_test \
$(BINDIR)/$(CONFIG)/channel_create_test \
$(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test \
$(BINDIR)/$(CONFIG)/chttp2_stream_map_test \
@@ -1500,6 +1503,7 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/httpcli_test \
$(BINDIR)/$(CONFIG)/httpscli_test \
$(BINDIR)/$(CONFIG)/init_test \
+ $(BINDIR)/$(CONFIG)/inproc_callback_test \
$(BINDIR)/$(CONFIG)/invalid_call_argument_test \
$(BINDIR)/$(CONFIG)/json_rewrite \
$(BINDIR)/$(CONFIG)/json_rewrite_test \
@@ -1948,6 +1952,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/bin_decoder_test || ( echo test bin_decoder_test failed ; exit 1 )
$(E) "[RUN] Testing bin_encoder_test"
$(Q) $(BINDIR)/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 )
+ $(E) "[RUN] Testing buffer_list_test"
+ $(Q) $(BINDIR)/$(CONFIG)/buffer_list_test || ( echo test buffer_list_test failed ; exit 1 )
$(E) "[RUN] Testing channel_create_test"
$(Q) $(BINDIR)/$(CONFIG)/channel_create_test || ( echo test channel_create_test failed ; exit 1 )
$(E) "[RUN] Testing chttp2_hpack_encoder_test"
@@ -2076,6 +2082,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/httpscli_test || ( echo test httpscli_test failed ; exit 1 )
$(E) "[RUN] Testing init_test"
$(Q) $(BINDIR)/$(CONFIG)/init_test || ( echo test init_test failed ; exit 1 )
+ $(E) "[RUN] Testing inproc_callback_test"
+ $(Q) $(BINDIR)/$(CONFIG)/inproc_callback_test || ( echo test inproc_callback_test failed ; exit 1 )
$(E) "[RUN] Testing invalid_call_argument_test"
$(Q) $(BINDIR)/$(CONFIG)/invalid_call_argument_test || ( echo test invalid_call_argument_test failed ; exit 1 )
$(E) "[RUN] Testing json_rewrite_test"
@@ -3456,6 +3464,7 @@ LIBGRPC_SRC = \
src/core/lib/http/format_request.cc \
src/core/lib/http/httpcli.cc \
src/core/lib/http/parser.cc \
+ src/core/lib/iomgr/buffer_list.cc \
src/core/lib/iomgr/call_combiner.cc \
src/core/lib/iomgr/combiner.cc \
src/core/lib/iomgr/endpoint.cc \
@@ -3476,6 +3485,7 @@ LIBGRPC_SRC = \
src/core/lib/iomgr/gethostname_fallback.cc \
src/core/lib/iomgr/gethostname_host_name_max.cc \
src/core/lib/iomgr/gethostname_sysconf.cc \
+ src/core/lib/iomgr/internal_errqueue.cc \
src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.cc \
src/core/lib/iomgr/iomgr_custom.cc \
@@ -3861,6 +3871,7 @@ LIBGRPC_CRONET_SRC = \
src/core/lib/http/format_request.cc \
src/core/lib/http/httpcli.cc \
src/core/lib/http/parser.cc \
+ src/core/lib/iomgr/buffer_list.cc \
src/core/lib/iomgr/call_combiner.cc \
src/core/lib/iomgr/combiner.cc \
src/core/lib/iomgr/endpoint.cc \
@@ -3881,6 +3892,7 @@ LIBGRPC_CRONET_SRC = \
src/core/lib/iomgr/gethostname_fallback.cc \
src/core/lib/iomgr/gethostname_host_name_max.cc \
src/core/lib/iomgr/gethostname_sysconf.cc \
+ src/core/lib/iomgr/internal_errqueue.cc \
src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.cc \
src/core/lib/iomgr/iomgr_custom.cc \
@@ -4251,6 +4263,7 @@ LIBGRPC_TEST_UTIL_SRC = \
src/core/lib/http/format_request.cc \
src/core/lib/http/httpcli.cc \
src/core/lib/http/parser.cc \
+ src/core/lib/iomgr/buffer_list.cc \
src/core/lib/iomgr/call_combiner.cc \
src/core/lib/iomgr/combiner.cc \
src/core/lib/iomgr/endpoint.cc \
@@ -4271,6 +4284,7 @@ LIBGRPC_TEST_UTIL_SRC = \
src/core/lib/iomgr/gethostname_fallback.cc \
src/core/lib/iomgr/gethostname_host_name_max.cc \
src/core/lib/iomgr/gethostname_sysconf.cc \
+ src/core/lib/iomgr/internal_errqueue.cc \
src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.cc \
src/core/lib/iomgr/iomgr_custom.cc \
@@ -4550,6 +4564,7 @@ LIBGRPC_TEST_UTIL_UNSECURE_SRC = \
src/core/lib/http/format_request.cc \
src/core/lib/http/httpcli.cc \
src/core/lib/http/parser.cc \
+ src/core/lib/iomgr/buffer_list.cc \
src/core/lib/iomgr/call_combiner.cc \
src/core/lib/iomgr/combiner.cc \
src/core/lib/iomgr/endpoint.cc \
@@ -4570,6 +4585,7 @@ LIBGRPC_TEST_UTIL_UNSECURE_SRC = \
src/core/lib/iomgr/gethostname_fallback.cc \
src/core/lib/iomgr/gethostname_host_name_max.cc \
src/core/lib/iomgr/gethostname_sysconf.cc \
+ src/core/lib/iomgr/internal_errqueue.cc \
src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.cc \
src/core/lib/iomgr/iomgr_custom.cc \
@@ -4815,6 +4831,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/http/format_request.cc \
src/core/lib/http/httpcli.cc \
src/core/lib/http/parser.cc \
+ src/core/lib/iomgr/buffer_list.cc \
src/core/lib/iomgr/call_combiner.cc \
src/core/lib/iomgr/combiner.cc \
src/core/lib/iomgr/endpoint.cc \
@@ -4835,6 +4852,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/iomgr/gethostname_fallback.cc \
src/core/lib/iomgr/gethostname_host_name_max.cc \
src/core/lib/iomgr/gethostname_sysconf.cc \
+ src/core/lib/iomgr/internal_errqueue.cc \
src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.cc \
src/core/lib/iomgr/iomgr_custom.cc \
@@ -5643,6 +5661,7 @@ LIBGRPC++_CRONET_SRC = \
src/core/lib/http/format_request.cc \
src/core/lib/http/httpcli.cc \
src/core/lib/http/parser.cc \
+ src/core/lib/iomgr/buffer_list.cc \
src/core/lib/iomgr/call_combiner.cc \
src/core/lib/iomgr/combiner.cc \
src/core/lib/iomgr/endpoint.cc \
@@ -5663,6 +5682,7 @@ LIBGRPC++_CRONET_SRC = \
src/core/lib/iomgr/gethostname_fallback.cc \
src/core/lib/iomgr/gethostname_host_name_max.cc \
src/core/lib/iomgr/gethostname_sysconf.cc \
+ src/core/lib/iomgr/internal_errqueue.cc \
src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.cc \
src/core/lib/iomgr/iomgr_custom.cc \
@@ -10697,6 +10717,38 @@ endif
endif
+BUFFER_LIST_TEST_SRC = \
+ test/core/iomgr/buffer_list_test.cc \
+
+BUFFER_LIST_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BUFFER_LIST_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/buffer_list_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/buffer_list_test: $(BUFFER_LIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(BUFFER_LIST_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/buffer_list_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/iomgr/buffer_list_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_buffer_list_test: $(BUFFER_LIST_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(BUFFER_LIST_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
CHANNEL_CREATE_TEST_SRC = \
test/core/surface/channel_create_test.cc \
@@ -13115,6 +13167,38 @@ endif
endif
+INPROC_CALLBACK_TEST_SRC = \
+ test/core/end2end/inproc_callback_test.cc \
+
+INPROC_CALLBACK_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INPROC_CALLBACK_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/inproc_callback_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/inproc_callback_test: $(INPROC_CALLBACK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(INPROC_CALLBACK_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/inproc_callback_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/end2end/inproc_callback_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_inproc_callback_test: $(INPROC_CALLBACK_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(INPROC_CALLBACK_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
INVALID_CALL_ARGUMENT_TEST_SRC = \
test/core/end2end/invalid_call_argument_test.cc \
diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl
index 73147bf3ac..b3f97650e8 100644
--- a/bazel/grpc_build_system.bzl
+++ b/bazel/grpc_build_system.bzl
@@ -24,178 +24,203 @@
#
# The set of pollers to test against if a test exercises polling
-POLLERS = ['epollex', 'epollsig', 'epoll1', 'poll', 'poll-cv']
+POLLERS = ["epollex", "epollsig", "epoll1", "poll", "poll-cv"]
def if_not_windows(a):
- return select({
- "//:windows": [],
- "//:windows_msvc": [],
- "//conditions:default": a,
- })
+ return select({
+ "//:windows": [],
+ "//:windows_msvc": [],
+ "//conditions:default": a,
+ })
def _get_external_deps(external_deps):
- ret = []
- for dep in external_deps:
- if dep == "address_sorting":
- ret += ["//third_party/address_sorting"]
- elif dep == "cares":
- ret += select({"//:grpc_no_ares": [],
- "//conditions:default": ["//external:cares"],})
- else:
- ret += ["//external:" + dep]
- return ret
+ ret = []
+ for dep in external_deps:
+ if dep == "address_sorting":
+ ret += ["//third_party/address_sorting"]
+ elif dep == "cares":
+ ret += select({
+ "//:grpc_no_ares": [],
+ "//conditions:default": ["//external:cares"],
+ })
+ else:
+ ret += ["//external:" + dep]
+ return ret
def _maybe_update_cc_library_hdrs(hdrs):
- ret = []
- hdrs_to_update = {
- "third_party/objective_c/Cronet/bidirectional_stream_c.h": "//third_party:objective_c/Cronet/bidirectional_stream_c.h",
- }
- for h in hdrs:
- if h in hdrs_to_update.keys():
- ret.append(hdrs_to_update[h])
- else:
- ret.append(h)
- return ret
-
-def grpc_cc_library(name, srcs = [], public_hdrs = [], hdrs = [],
- external_deps = [], deps = [], standalone = False,
- language = "C++", testonly = False, visibility = None,
- alwayslink = 0, data = []):
- copts = []
- if language.upper() == "C":
- copts = if_not_windows(["-std=c99"])
- native.cc_library(
- name = name,
- srcs = srcs,
- defines = select({"//:grpc_no_ares": ["GRPC_ARES=0"],
- "//conditions:default": [],}) +
- select({"//:remote_execution": ["GRPC_PORT_ISOLATED_RUNTIME=1"],
- "//conditions:default": [],}) +
- select({"//:grpc_allow_exceptions": ["GRPC_ALLOW_EXCEPTIONS=1"],
- "//:grpc_disallow_exceptions":
- ["GRPC_ALLOW_EXCEPTIONS=0"],
- "//conditions:default": [],}),
- hdrs = _maybe_update_cc_library_hdrs(hdrs + public_hdrs),
- deps = deps + _get_external_deps(external_deps),
- copts = copts,
- visibility = visibility,
- testonly = testonly,
- linkopts = if_not_windows(["-pthread"]),
- includes = [
- "include"
- ],
- alwayslink = alwayslink,
- data = data,
- )
+ ret = []
+ hdrs_to_update = {
+ "third_party/objective_c/Cronet/bidirectional_stream_c.h": "//third_party:objective_c/Cronet/bidirectional_stream_c.h",
+ }
+ for h in hdrs:
+ if h in hdrs_to_update.keys():
+ ret.append(hdrs_to_update[h])
+ else:
+ ret.append(h)
+ return ret
+
+def grpc_cc_library(
+ name,
+ srcs = [],
+ public_hdrs = [],
+ hdrs = [],
+ external_deps = [],
+ deps = [],
+ standalone = False,
+ language = "C++",
+ testonly = False,
+ visibility = None,
+ alwayslink = 0,
+ data = []):
+ copts = []
+ if language.upper() == "C":
+ copts = if_not_windows(["-std=c99"])
+ native.cc_library(
+ name = name,
+ srcs = srcs,
+ defines = select({
+ "//:grpc_no_ares": ["GRPC_ARES=0"],
+ "//conditions:default": [],
+ }) +
+ select({
+ "//:remote_execution": ["GRPC_PORT_ISOLATED_RUNTIME=1"],
+ "//conditions:default": [],
+ }) +
+ select({
+ "//:grpc_allow_exceptions": ["GRPC_ALLOW_EXCEPTIONS=1"],
+ "//:grpc_disallow_exceptions": ["GRPC_ALLOW_EXCEPTIONS=0"],
+ "//conditions:default": [],
+ }),
+ hdrs = _maybe_update_cc_library_hdrs(hdrs + public_hdrs),
+ deps = deps + _get_external_deps(external_deps),
+ copts = copts,
+ visibility = visibility,
+ testonly = testonly,
+ linkopts = if_not_windows(["-pthread"]),
+ includes = [
+ "include",
+ ],
+ alwayslink = alwayslink,
+ data = data,
+ )
def grpc_proto_plugin(name, srcs = [], deps = []):
- native.cc_binary(
- name = name,
- srcs = srcs,
- deps = deps,
- )
+ native.cc_binary(
+ name = name,
+ srcs = srcs,
+ deps = deps,
+ )
load("//:bazel/cc_grpc_library.bzl", "cc_grpc_library")
-def grpc_proto_library(name, srcs = [], deps = [], well_known_protos = False,
- has_services = True, use_external = False, generate_mocks = False):
- cc_grpc_library(
- name = name,
- srcs = srcs,
- deps = deps,
- well_known_protos = well_known_protos,
- proto_only = not has_services,
- use_external = use_external,
- generate_mocks = generate_mocks,
- )
+def grpc_proto_library(
+ name,
+ srcs = [],
+ deps = [],
+ well_known_protos = False,
+ has_services = True,
+ use_external = False,
+ generate_mocks = False):
+ cc_grpc_library(
+ name = name,
+ srcs = srcs,
+ deps = deps,
+ well_known_protos = well_known_protos,
+ proto_only = not has_services,
+ use_external = use_external,
+ generate_mocks = generate_mocks,
+ )
def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data = [], uses_polling = True, language = "C++", size = "medium", timeout = "moderate", tags = []):
- copts = []
- if language.upper() == "C":
- copts = if_not_windows(["-std=c99"])
- args = {
- 'name': name,
- 'srcs': srcs,
- 'args': args,
- 'data': data,
- 'deps': deps + _get_external_deps(external_deps),
- 'copts': copts,
- 'linkopts': if_not_windows(["-pthread"]),
- 'size': size,
- 'timeout': timeout,
- }
- if uses_polling:
- native.cc_test(testonly=True, tags=['manual'], **args)
- for poller in POLLERS:
- native.sh_test(
- name = name + '@poller=' + poller,
- data = [name],
- srcs = [
- '//test/core/util:run_with_poller_sh',
- ],
- size = size,
- timeout = timeout,
- args = [
- poller,
- '$(location %s)' % name,
- ] + args['args'],
- tags = tags,
- )
- else:
- native.cc_test(**args)
+ copts = []
+ if language.upper() == "C":
+ copts = if_not_windows(["-std=c99"])
+ args = {
+ "name": name,
+ "srcs": srcs,
+ "args": args,
+ "data": data,
+ "deps": deps + _get_external_deps(external_deps),
+ "copts": copts,
+ "linkopts": if_not_windows(["-pthread"]),
+ "size": size,
+ "timeout": timeout,
+ }
+ if uses_polling:
+ native.cc_test(testonly = True, tags = ["manual"], **args)
+ for poller in POLLERS:
+ native.sh_test(
+ name = name + "@poller=" + poller,
+ data = [name] + data,
+ srcs = [
+ "//test/core/util:run_with_poller_sh",
+ ],
+ size = size,
+ timeout = timeout,
+ args = [
+ poller,
+ "$(location %s)" % name,
+ ] + args["args"],
+ tags = tags,
+ )
+ else:
+ native.cc_test(**args)
def grpc_cc_binary(name, srcs = [], deps = [], external_deps = [], args = [], data = [], language = "C++", testonly = False, linkshared = False, linkopts = []):
- copts = []
- if language.upper() == "C":
- copts = ["-std=c99"]
- native.cc_binary(
- name = name,
- srcs = srcs,
- args = args,
- data = data,
- testonly = testonly,
- linkshared = linkshared,
- deps = deps + _get_external_deps(external_deps),
- copts = copts,
- linkopts = if_not_windows(["-pthread"]) + linkopts,
- )
-
-def grpc_generate_one_off_targets(): pass
+ copts = []
+ if language.upper() == "C":
+ copts = ["-std=c99"]
+ native.cc_binary(
+ name = name,
+ srcs = srcs,
+ args = args,
+ data = data,
+ testonly = testonly,
+ linkshared = linkshared,
+ deps = deps + _get_external_deps(external_deps),
+ copts = copts,
+ linkopts = if_not_windows(["-pthread"]) + linkopts,
+ )
+
+def grpc_generate_one_off_targets():
+ pass
def grpc_sh_test(name, srcs, args = [], data = []):
- native.sh_test(
- name = name,
- srcs = srcs,
- args = args,
- data = data)
+ native.sh_test(
+ name = name,
+ srcs = srcs,
+ args = args,
+ data = data,
+ )
def grpc_sh_binary(name, srcs, data = []):
- native.sh_binary(
- name = name,
- srcs = srcs,
- data = data)
+ native.sh_binary(
+ name = name,
+ srcs = srcs,
+ data = data,
+ )
def grpc_py_binary(name, srcs, data = [], deps = [], external_deps = [], testonly = False):
- native.py_binary(
- name = name,
- srcs = srcs,
- testonly = testonly,
- data = data,
- deps = deps + _get_external_deps(external_deps)
- )
+ native.py_binary(
+ name = name,
+ srcs = srcs,
+ testonly = testonly,
+ data = data,
+ deps = deps + _get_external_deps(external_deps),
+ )
def grpc_package(name, visibility = "private", features = []):
- if visibility == "tests":
- visibility = ["//test:__subpackages__"]
- elif visibility == "public":
- visibility = ["//visibility:public"]
- elif visibility == "private":
- visibility = []
- else:
- fail("Unknown visibility " + visibility)
-
- if len(visibility) != 0:
- native.package(
- default_visibility = visibility,
- features = features
- )
+ if visibility == "tests":
+ visibility = ["//test:__subpackages__"]
+ elif visibility == "public":
+ visibility = ["//visibility:public"]
+ elif visibility == "private":
+ visibility = []
+ else:
+ fail("Unknown visibility " + visibility)
+
+ if len(visibility) != 0:
+ native.package(
+ default_visibility = visibility,
+ features = features,
+ )
diff --git a/bazel/grpc_deps.bzl b/bazel/grpc_deps.bzl
index d7519b1453..4096720569 100644
--- a/bazel/grpc_deps.bzl
+++ b/bazel/grpc_deps.bzl
@@ -169,12 +169,12 @@ def grpc_deps():
if "com_github_bazelbuild_bazeltoolchains" not in native.existing_rules():
native.http_archive(
name = "com_github_bazelbuild_bazeltoolchains",
- strip_prefix = "bazel-toolchains-4653c01284d8a4a536f8f9bb47b7d10f94c549e7",
+ strip_prefix = "bazel-toolchains-cdea5b8675914d0a354d89f108de5d28e54e0edc",
urls = [
- "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/4653c01284d8a4a536f8f9bb47b7d10f94c549e7.tar.gz",
- "https://github.com/bazelbuild/bazel-toolchains/archive/4653c01284d8a4a536f8f9bb47b7d10f94c549e7.tar.gz",
+ "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/cdea5b8675914d0a354d89f108de5d28e54e0edc.tar.gz",
+ "https://github.com/bazelbuild/bazel-toolchains/archive/cdea5b8675914d0a354d89f108de5d28e54e0edc.tar.gz",
],
- sha256 = "1c4a532b396c698e6467a1548554571cb85fa091e472b05e398ebc836c315d77",
+ sha256 = "cefb6ccf86ca592baaa029bcef04148593c0efe8f734542f10293ea58f170715",
)
if "io_opencensus_cpp" not in native.existing_rules():
diff --git a/build.yaml b/build.yaml
index 34bec00933..a50a0a4ab6 100644
--- a/build.yaml
+++ b/build.yaml
@@ -13,8 +13,8 @@ settings:
'#09': Per-language overrides are possible with (eg) ruby_version tag here
'#10': See the expand_version.py for all the quirks here
core_version: 6.0.0-dev
- g_stands_for: glider
- version: 1.15.0-dev
+ g_stands_for: gao
+ version: 1.16.0-dev
filegroups:
- name: alts_proto
headers:
@@ -69,6 +69,7 @@ filegroups:
- grpc_transport_chttp2_client_insecure
- tsi_interface
- tsi
+ - grpc_shadow_boringssl
- name: alts_util
public_headers:
- include/grpc/grpc_security.h
@@ -255,6 +256,7 @@ filegroups:
- src/core/lib/http/format_request.cc
- src/core/lib/http/httpcli.cc
- src/core/lib/http/parser.cc
+ - src/core/lib/iomgr/buffer_list.cc
- src/core/lib/iomgr/call_combiner.cc
- src/core/lib/iomgr/combiner.cc
- src/core/lib/iomgr/endpoint.cc
@@ -275,6 +277,7 @@ filegroups:
- src/core/lib/iomgr/gethostname_fallback.cc
- src/core/lib/iomgr/gethostname_host_name_max.cc
- src/core/lib/iomgr/gethostname_sysconf.cc
+ - src/core/lib/iomgr/internal_errqueue.cc
- src/core/lib/iomgr/iocp_windows.cc
- src/core/lib/iomgr/iomgr.cc
- src/core/lib/iomgr/iomgr_custom.cc
@@ -433,6 +436,7 @@ filegroups:
- src/core/lib/http/httpcli.h
- src/core/lib/http/parser.h
- src/core/lib/iomgr/block_annotate.h
+ - src/core/lib/iomgr/buffer_list.h
- src/core/lib/iomgr/call_combiner.h
- src/core/lib/iomgr/closure.h
- src/core/lib/iomgr/combiner.h
@@ -448,6 +452,7 @@ filegroups:
- src/core/lib/iomgr/exec_ctx.h
- src/core/lib/iomgr/executor.h
- src/core/lib/iomgr/gethostname.h
+ - src/core/lib/iomgr/internal_errqueue.h
- src/core/lib/iomgr/iocp_windows.h
- src/core/lib/iomgr/iomgr.h
- src/core/lib/iomgr/iomgr_custom.h
@@ -841,6 +846,7 @@ filegroups:
- grpc_base
- grpc_transport_chttp2_alpn
- tsi
+ - grpc_shadow_boringssl
- name: grpc_server_backward_compatibility
headers:
- src/core/ext/filters/workarounds/workaround_utils.h
@@ -848,6 +854,9 @@ filegroups:
- src/core/ext/filters/workarounds/workaround_utils.cc
uses:
- grpc_base
+- name: grpc_shadow_boringssl
+ headers:
+ - src/core/tsi/grpc_shadow_boringssl.h
- name: grpc_test_util_base
build: test
headers:
@@ -1109,6 +1118,7 @@ filegroups:
- tsi_interface
- grpc_base
- grpc_trace
+ - grpc_shadow_boringssl
- name: tsi_interface
headers:
- src/core/tsi/transport_security.h
@@ -2133,6 +2143,20 @@ targets:
- grpc_test_util
- grpc
uses_polling: false
+- name: buffer_list_test
+ build: test
+ language: c
+ src:
+ - test/core/iomgr/buffer_list_test.cc
+ deps:
+ - grpc_test_util
+ - grpc
+ - gpr_test_util
+ - gpr
+ exclude_iomgrs:
+ - uv
+ platforms:
+ - linux
- name: channel_create_test
build: test
language: c
@@ -3016,6 +3040,19 @@ targets:
- gpr_test_util
- gpr
uses_polling: false
+- name: inproc_callback_test
+ build: test
+ language: c
+ headers:
+ - test/core/end2end/end2end_tests.h
+ src:
+ - test/core/end2end/inproc_callback_test.cc
+ deps:
+ - grpc_test_util
+ - grpc
+ - gpr_test_util
+ - gpr
+ uses_polling: false
- name: invalid_call_argument_test
cpu_cost: 0.1
build: test
diff --git a/config.m4 b/config.m4
index 7825274eea..af3624cdd1 100644
--- a/config.m4
+++ b/config.m4
@@ -108,6 +108,7 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/http/format_request.cc \
src/core/lib/http/httpcli.cc \
src/core/lib/http/parser.cc \
+ src/core/lib/iomgr/buffer_list.cc \
src/core/lib/iomgr/call_combiner.cc \
src/core/lib/iomgr/combiner.cc \
src/core/lib/iomgr/endpoint.cc \
@@ -128,6 +129,7 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/gethostname_fallback.cc \
src/core/lib/iomgr/gethostname_host_name_max.cc \
src/core/lib/iomgr/gethostname_sysconf.cc \
+ src/core/lib/iomgr/internal_errqueue.cc \
src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.cc \
src/core/lib/iomgr/iomgr_custom.cc \
diff --git a/config.w32 b/config.w32
index a9d1e6c9d0..ad91ee40bd 100644
--- a/config.w32
+++ b/config.w32
@@ -83,6 +83,7 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\http\\format_request.cc " +
"src\\core\\lib\\http\\httpcli.cc " +
"src\\core\\lib\\http\\parser.cc " +
+ "src\\core\\lib\\iomgr\\buffer_list.cc " +
"src\\core\\lib\\iomgr\\call_combiner.cc " +
"src\\core\\lib\\iomgr\\combiner.cc " +
"src\\core\\lib\\iomgr\\endpoint.cc " +
@@ -103,6 +104,7 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\iomgr\\gethostname_fallback.cc " +
"src\\core\\lib\\iomgr\\gethostname_host_name_max.cc " +
"src\\core\\lib\\iomgr\\gethostname_sysconf.cc " +
+ "src\\core\\lib\\iomgr\\internal_errqueue.cc " +
"src\\core\\lib\\iomgr\\iocp_windows.cc " +
"src\\core\\lib\\iomgr\\iomgr.cc " +
"src\\core\\lib\\iomgr\\iomgr_custom.cc " +
diff --git a/doc/cpp/pending_api_cleanups.md b/doc/cpp/pending_api_cleanups.md
index fa19b52002..5c231eda2c 100644
--- a/doc/cpp/pending_api_cleanups.md
+++ b/doc/cpp/pending_api_cleanups.md
@@ -17,3 +17,6 @@ number:
`include/grpc++/impl/codegen/client_context.h` (commit `9477724`)
- remove directory `include/grpc++` and all headers in it
(commit `eb06572`)
+- make all `Request` and `Mark` methods in `grpc::Service` take a
+ `size_t` argument for `index` rather than `int` (since that is only
+ used as a vector index)
diff --git a/doc/g_stands_for.md b/doc/g_stands_for.md
index b3ed9bd713..c89a6cb572 100644
--- a/doc/g_stands_for.md
+++ b/doc/g_stands_for.md
@@ -14,4 +14,5 @@
- 1.12 'g' stands for ['glorious'](https://github.com/grpc/grpc/tree/v1.12.x)
- 1.13 'g' stands for ['gloriosa'](https://github.com/grpc/grpc/tree/v1.13.x)
- 1.14 'g' stands for ['gladiolus'](https://github.com/grpc/grpc/tree/v1.14.x)
-- 1.15 'g' stands for ['glider'](https://github.com/grpc/grpc/tree/master)
+- 1.15 'g' stands for ['glider'](https://github.com/grpc/grpc/tree/v1.15.x)
+- 1.16 'g' stands for ['gao'](https://github.com/grpc/grpc/tree/master)
diff --git a/doc/naming.md b/doc/naming.md
index 676aa9f298..581c550567 100644
--- a/doc/naming.md
+++ b/doc/naming.md
@@ -14,34 +14,48 @@ be plugged in.
### Name Syntax
A fully qualified, self contained name used for gRPC channel construction
-uses the syntax:
-
-```
-scheme://authority/endpoint_name
-```
-
-Here, `scheme` indicates the name-system to be used. Currently, we
-support the following schemes:
-
-- `dns`
-
-- `ipv4` (IPv4 address)
-
-- `ipv6` (IPv6 address)
-
-- `unix` (path to unix domain socket -- unix systems only)
+uses URI syntax as defined in [RFC 3986](https://tools.ietf.org/html/rfc3986).
+
+The URI scheme indicates what resolver plugin to use. If no scheme
+prefix is specified or the scheme is unknown, the `dns` scheme is used
+by default.
+
+The URI path indicates the name to be resolved.
+
+Most gRPC implementations support the following URI schemes:
+
+- `dns:[//authority/]host[:port]` -- DNS (default)
+ - `host` is the host to resolve via DNS.
+ - `port` is the port to return for each address. If not specified,
+ 443 is used (but some implementations default to 80 for insecure
+ channels).
+ - `authority` indicates the DNS server to use, although this is only
+ supported by some implementations. (In C-core, the default DNS
+ resolver does not support this, but the c-ares based resolver
+ supports specifying this in the form "IP:port".)
+
+- `unix:path` or `unix://absolute_path` -- Unix domain sockets (Unix systems only)
+ - `path` indicates the location of the desired socket.
+ - In the first form, the path may be relative or absolute; in the
+ second form, the path must be absolute (i.e., there will actually be
+ three slashes, two prior to the path and another to begin the
+ absolute path).
+
+The following schemes are supported by the gRPC C-core implementation,
+but may not be supported in other languages:
+
+- `ipv4:address[:port][,address[:port],...]` -- IPv4 addresses
+ - Can specify multiple comma-delimited addresses of the form `address[:port]`:
+ - `address` is the IPv4 address to use.
+ - `port` is the port to use. If not specified, 443 is used.
+
+- `ipv6:address[:port][,address[:port],...]` -- IPv6 addresses
+ - Can specify multiple comma-delimited addresses of the form `address[:port]`:
+ - `address` is the IPv6 address to use.
+ - `port` is the port to use. If not specified, 443 is used.
In the future, additional schemes such as `etcd` could be added.
-The `authority` indicates some scheme-specific bootstrap information, e.g.,
-for DNS, the authority may include the IP[:port] of the DNS server to
-use. Often, a DNS name may be used as the authority, since the ability to
-resolve DNS names is already built into all gRPC client libraries.
-
-Finally, the `endpoint_name` indicates a concrete name to be looked up
-in a given name-system identified by the scheme and the authority. The
-syntax of the endpoint name is dictated by the scheme in use.
-
### Resolver Plugins
The gRPC client library will use the specified scheme to pick the right
diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec
index ae3bd4b312..581b9246bc 100644
--- a/gRPC-C++.podspec
+++ b/gRPC-C++.podspec
@@ -23,7 +23,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-C++'
# TODO (mxyan): use version that match gRPC version when pod is stabilized
- # version = '1.15.0-dev'
+ # version = '1.16.0-dev'
version = '0.0.3'
s.version = version
s.summary = 'gRPC C++ library'
@@ -31,7 +31,7 @@ Pod::Spec.new do |s|
s.license = 'Apache License, Version 2.0'
s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' }
- grpc_version = '1.15.0-dev'
+ grpc_version = '1.16.0-dev'
s.source = {
:git => 'https://github.com/grpc/grpc.git',
@@ -348,6 +348,7 @@ Pod::Spec.new do |s|
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security_grpc.h',
+ 'src/core/tsi/grpc_shadow_boringssl.h',
'src/core/ext/transport/chttp2/server/chttp2_server.h',
'src/core/ext/transport/inproc/inproc_transport.h',
'src/core/lib/avl/avl.h',
@@ -381,6 +382,7 @@ Pod::Spec.new do |s|
'src/core/lib/http/httpcli.h',
'src/core/lib/http/parser.h',
'src/core/lib/iomgr/block_annotate.h',
+ 'src/core/lib/iomgr/buffer_list.h',
'src/core/lib/iomgr/call_combiner.h',
'src/core/lib/iomgr/closure.h',
'src/core/lib/iomgr/combiner.h',
@@ -396,6 +398,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/exec_ctx.h',
'src/core/lib/iomgr/executor.h',
'src/core/lib/iomgr/gethostname.h',
+ 'src/core/lib/iomgr/internal_errqueue.h',
'src/core/lib/iomgr/iocp_windows.h',
'src/core/lib/iomgr/iomgr.h',
'src/core/lib/iomgr/iomgr_custom.h',
@@ -569,6 +572,7 @@ Pod::Spec.new do |s|
'src/core/lib/http/httpcli.h',
'src/core/lib/http/parser.h',
'src/core/lib/iomgr/block_annotate.h',
+ 'src/core/lib/iomgr/buffer_list.h',
'src/core/lib/iomgr/call_combiner.h',
'src/core/lib/iomgr/closure.h',
'src/core/lib/iomgr/combiner.h',
@@ -584,6 +588,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/exec_ctx.h',
'src/core/lib/iomgr/executor.h',
'src/core/lib/iomgr/gethostname.h',
+ 'src/core/lib/iomgr/internal_errqueue.h',
'src/core/lib/iomgr/iocp_windows.h',
'src/core/lib/iomgr/iomgr.h',
'src/core/lib/iomgr/iomgr_custom.h',
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 8e60a6065f..5a82a4200a 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -22,7 +22,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-Core'
- version = '1.15.0-dev'
+ version = '1.16.0-dev'
s.version = version
s.summary = 'Core cross-platform gRPC library, written in C'
s.homepage = 'https://grpc.io'
@@ -181,8 +181,9 @@ Pod::Spec.new do |s|
ss.header_mappings_dir = '.'
ss.libraries = 'z'
ss.dependency "#{s.name}/Interface", version
- ss.dependency 'BoringSSL', '~> 10.0'
+ ss.dependency 'BoringSSL-GRPC', '0.0.1'
ss.dependency 'nanopb', '~> 0.3'
+ ss.compiler_flags = '-DGRPC_SHADOW_BORINGSSL_SYMBOLS'
# To save you from scrolling, this is the last part of the podspec.
ss.source_files = 'src/core/lib/gpr/alloc.h',
@@ -359,6 +360,7 @@ Pod::Spec.new do |s|
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security_grpc.h',
+ 'src/core/tsi/grpc_shadow_boringssl.h',
'src/core/ext/transport/chttp2/server/chttp2_server.h',
'src/core/ext/transport/inproc/inproc_transport.h',
'src/core/lib/avl/avl.h',
@@ -392,6 +394,7 @@ Pod::Spec.new do |s|
'src/core/lib/http/httpcli.h',
'src/core/lib/http/parser.h',
'src/core/lib/iomgr/block_annotate.h',
+ 'src/core/lib/iomgr/buffer_list.h',
'src/core/lib/iomgr/call_combiner.h',
'src/core/lib/iomgr/closure.h',
'src/core/lib/iomgr/combiner.h',
@@ -407,6 +410,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/exec_ctx.h',
'src/core/lib/iomgr/executor.h',
'src/core/lib/iomgr/gethostname.h',
+ 'src/core/lib/iomgr/internal_errqueue.h',
'src/core/lib/iomgr/iocp_windows.h',
'src/core/lib/iomgr/iomgr.h',
'src/core/lib/iomgr/iomgr_custom.h',
@@ -536,6 +540,7 @@ Pod::Spec.new do |s|
'src/core/lib/http/format_request.cc',
'src/core/lib/http/httpcli.cc',
'src/core/lib/http/parser.cc',
+ 'src/core/lib/iomgr/buffer_list.cc',
'src/core/lib/iomgr/call_combiner.cc',
'src/core/lib/iomgr/combiner.cc',
'src/core/lib/iomgr/endpoint.cc',
@@ -556,6 +561,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/gethostname_fallback.cc',
'src/core/lib/iomgr/gethostname_host_name_max.cc',
'src/core/lib/iomgr/gethostname_sysconf.cc',
+ 'src/core/lib/iomgr/internal_errqueue.cc',
'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.cc',
'src/core/lib/iomgr/iomgr_custom.cc',
@@ -957,6 +963,7 @@ Pod::Spec.new do |s|
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security_grpc.h',
+ 'src/core/tsi/grpc_shadow_boringssl.h',
'src/core/ext/transport/chttp2/server/chttp2_server.h',
'src/core/ext/transport/inproc/inproc_transport.h',
'src/core/lib/avl/avl.h',
@@ -990,6 +997,7 @@ Pod::Spec.new do |s|
'src/core/lib/http/httpcli.h',
'src/core/lib/http/parser.h',
'src/core/lib/iomgr/block_annotate.h',
+ 'src/core/lib/iomgr/buffer_list.h',
'src/core/lib/iomgr/call_combiner.h',
'src/core/lib/iomgr/closure.h',
'src/core/lib/iomgr/combiner.h',
@@ -1005,6 +1013,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/exec_ctx.h',
'src/core/lib/iomgr/executor.h',
'src/core/lib/iomgr/gethostname.h',
+ 'src/core/lib/iomgr/internal_errqueue.h',
'src/core/lib/iomgr/iocp_windows.h',
'src/core/lib/iomgr/iomgr.h',
'src/core/lib/iomgr/iomgr_custom.h',
diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec
index 79ec679e3a..75fd592e75 100644
--- a/gRPC-ProtoRPC.podspec
+++ b/gRPC-ProtoRPC.podspec
@@ -21,7 +21,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-ProtoRPC'
- version = '1.15.0-dev'
+ version = '1.16.0-dev'
s.version = version
s.summary = 'RPC library for Protocol Buffers, based on gRPC'
s.homepage = 'https://grpc.io'
diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec
index 7a461e270f..ecd786e7b3 100644
--- a/gRPC-RxLibrary.podspec
+++ b/gRPC-RxLibrary.podspec
@@ -21,7 +21,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-RxLibrary'
- version = '1.15.0-dev'
+ version = '1.16.0-dev'
s.version = version
s.summary = 'Reactive Extensions library for iOS/OSX.'
s.homepage = 'https://grpc.io'
diff --git a/gRPC.podspec b/gRPC.podspec
index bf3f56bd54..9164b2169a 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -20,7 +20,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC'
- version = '1.15.0-dev'
+ version = '1.16.0-dev'
s.version = version
s.summary = 'gRPC client library for iOS/OSX'
s.homepage = 'https://grpc.io'
diff --git a/grpc.gemspec b/grpc.gemspec
index 94ce48d61e..c8e58faec9 100644
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -296,6 +296,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/tsi/ssl_transport_security.h )
s.files += %w( src/core/tsi/ssl_types.h )
s.files += %w( src/core/tsi/transport_security_grpc.h )
+ s.files += %w( src/core/tsi/grpc_shadow_boringssl.h )
s.files += %w( src/core/ext/transport/chttp2/server/chttp2_server.h )
s.files += %w( src/core/ext/transport/inproc/inproc_transport.h )
s.files += %w( src/core/lib/avl/avl.h )
@@ -329,6 +330,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/http/httpcli.h )
s.files += %w( src/core/lib/http/parser.h )
s.files += %w( src/core/lib/iomgr/block_annotate.h )
+ s.files += %w( src/core/lib/iomgr/buffer_list.h )
s.files += %w( src/core/lib/iomgr/call_combiner.h )
s.files += %w( src/core/lib/iomgr/closure.h )
s.files += %w( src/core/lib/iomgr/combiner.h )
@@ -344,6 +346,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/exec_ctx.h )
s.files += %w( src/core/lib/iomgr/executor.h )
s.files += %w( src/core/lib/iomgr/gethostname.h )
+ s.files += %w( src/core/lib/iomgr/internal_errqueue.h )
s.files += %w( src/core/lib/iomgr/iocp_windows.h )
s.files += %w( src/core/lib/iomgr/iomgr.h )
s.files += %w( src/core/lib/iomgr/iomgr_custom.h )
@@ -473,6 +476,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/http/format_request.cc )
s.files += %w( src/core/lib/http/httpcli.cc )
s.files += %w( src/core/lib/http/parser.cc )
+ s.files += %w( src/core/lib/iomgr/buffer_list.cc )
s.files += %w( src/core/lib/iomgr/call_combiner.cc )
s.files += %w( src/core/lib/iomgr/combiner.cc )
s.files += %w( src/core/lib/iomgr/endpoint.cc )
@@ -493,6 +497,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/gethostname_fallback.cc )
s.files += %w( src/core/lib/iomgr/gethostname_host_name_max.cc )
s.files += %w( src/core/lib/iomgr/gethostname_sysconf.cc )
+ s.files += %w( src/core/lib/iomgr/internal_errqueue.cc )
s.files += %w( src/core/lib/iomgr/iocp_windows.cc )
s.files += %w( src/core/lib/iomgr/iomgr.cc )
s.files += %w( src/core/lib/iomgr/iomgr_custom.cc )
diff --git a/grpc.gyp b/grpc.gyp
index a36998bcb3..654a531092 100644
--- a/grpc.gyp
+++ b/grpc.gyp
@@ -300,6 +300,7 @@
'src/core/lib/http/format_request.cc',
'src/core/lib/http/httpcli.cc',
'src/core/lib/http/parser.cc',
+ 'src/core/lib/iomgr/buffer_list.cc',
'src/core/lib/iomgr/call_combiner.cc',
'src/core/lib/iomgr/combiner.cc',
'src/core/lib/iomgr/endpoint.cc',
@@ -320,6 +321,7 @@
'src/core/lib/iomgr/gethostname_fallback.cc',
'src/core/lib/iomgr/gethostname_host_name_max.cc',
'src/core/lib/iomgr/gethostname_sysconf.cc',
+ 'src/core/lib/iomgr/internal_errqueue.cc',
'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.cc',
'src/core/lib/iomgr/iomgr_custom.cc',
@@ -660,6 +662,7 @@
'src/core/lib/http/format_request.cc',
'src/core/lib/http/httpcli.cc',
'src/core/lib/http/parser.cc',
+ 'src/core/lib/iomgr/buffer_list.cc',
'src/core/lib/iomgr/call_combiner.cc',
'src/core/lib/iomgr/combiner.cc',
'src/core/lib/iomgr/endpoint.cc',
@@ -680,6 +683,7 @@
'src/core/lib/iomgr/gethostname_fallback.cc',
'src/core/lib/iomgr/gethostname_host_name_max.cc',
'src/core/lib/iomgr/gethostname_sysconf.cc',
+ 'src/core/lib/iomgr/internal_errqueue.cc',
'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.cc',
'src/core/lib/iomgr/iomgr_custom.cc',
@@ -893,6 +897,7 @@
'src/core/lib/http/format_request.cc',
'src/core/lib/http/httpcli.cc',
'src/core/lib/http/parser.cc',
+ 'src/core/lib/iomgr/buffer_list.cc',
'src/core/lib/iomgr/call_combiner.cc',
'src/core/lib/iomgr/combiner.cc',
'src/core/lib/iomgr/endpoint.cc',
@@ -913,6 +918,7 @@
'src/core/lib/iomgr/gethostname_fallback.cc',
'src/core/lib/iomgr/gethostname_host_name_max.cc',
'src/core/lib/iomgr/gethostname_sysconf.cc',
+ 'src/core/lib/iomgr/internal_errqueue.cc',
'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.cc',
'src/core/lib/iomgr/iomgr_custom.cc',
@@ -1104,6 +1110,7 @@
'src/core/lib/http/format_request.cc',
'src/core/lib/http/httpcli.cc',
'src/core/lib/http/parser.cc',
+ 'src/core/lib/iomgr/buffer_list.cc',
'src/core/lib/iomgr/call_combiner.cc',
'src/core/lib/iomgr/combiner.cc',
'src/core/lib/iomgr/endpoint.cc',
@@ -1124,6 +1131,7 @@
'src/core/lib/iomgr/gethostname_fallback.cc',
'src/core/lib/iomgr/gethostname_host_name_max.cc',
'src/core/lib/iomgr/gethostname_sysconf.cc',
+ 'src/core/lib/iomgr/internal_errqueue.cc',
'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.cc',
'src/core/lib/iomgr/iomgr_custom.cc',
diff --git a/include/grpcpp/impl/codegen/service_type.h b/include/grpcpp/impl/codegen/service_type.h
index a0bbd659e2..9f1a052168 100644
--- a/include/grpcpp/impl/codegen/service_type.h
+++ b/include/grpcpp/impl/codegen/service_type.h
@@ -93,14 +93,19 @@ class Service {
internal::ServerAsyncStreamingInterface* stream,
CompletionQueue* call_cq,
ServerCompletionQueue* notification_cq, void* tag) {
- server_->RequestAsyncCall(methods_[index].get(), context, stream, call_cq,
+ // Typecast the index to size_t for indexing into a vector
+ // while preserving the API that existed before a compiler
+ // warning was first seen (grpc/grpc#11664)
+ size_t idx = static_cast<size_t>(index);
+ server_->RequestAsyncCall(methods_[idx].get(), context, stream, call_cq,
notification_cq, tag, request);
}
void RequestAsyncClientStreaming(
int index, ServerContext* context,
internal::ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq,
ServerCompletionQueue* notification_cq, void* tag) {
- server_->RequestAsyncCall(methods_[index].get(), context, stream, call_cq,
+ size_t idx = static_cast<size_t>(index);
+ server_->RequestAsyncCall(methods_[idx].get(), context, stream, call_cq,
notification_cq, tag);
}
template <class Message>
@@ -108,14 +113,16 @@ class Service {
int index, ServerContext* context, Message* request,
internal::ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq,
ServerCompletionQueue* notification_cq, void* tag) {
- server_->RequestAsyncCall(methods_[index].get(), context, stream, call_cq,
+ size_t idx = static_cast<size_t>(index);
+ server_->RequestAsyncCall(methods_[idx].get(), context, stream, call_cq,
notification_cq, tag, request);
}
void RequestAsyncBidiStreaming(
int index, ServerContext* context,
internal::ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq,
ServerCompletionQueue* notification_cq, void* tag) {
- server_->RequestAsyncCall(methods_[index].get(), context, stream, call_cq,
+ size_t idx = static_cast<size_t>(index);
+ server_->RequestAsyncCall(methods_[idx].get(), context, stream, call_cq,
notification_cq, tag);
}
@@ -126,46 +133,50 @@ class Service {
void MarkMethodAsync(int index) {
// This does not have to be a hard error, however no one has approached us
// with a use case yet. Please file an issue if you believe you have one.
+ size_t idx = static_cast<size_t>(index);
GPR_CODEGEN_ASSERT(
- methods_[index].get() != nullptr &&
+ methods_[idx].get() != nullptr &&
"Cannot mark the method as 'async' because it has already been "
"marked as 'generic'.");
- methods_[index]->SetServerAsyncType(
+ methods_[idx]->SetServerAsyncType(
internal::RpcServiceMethod::AsyncType::ASYNC);
}
void MarkMethodRaw(int index) {
// This does not have to be a hard error, however no one has approached us
// with a use case yet. Please file an issue if you believe you have one.
- GPR_CODEGEN_ASSERT(methods_[index].get() != nullptr &&
+ size_t idx = static_cast<size_t>(index);
+ GPR_CODEGEN_ASSERT(methods_[idx].get() != nullptr &&
"Cannot mark the method as 'raw' because it has already "
"been marked as 'generic'.");
- methods_[index]->SetServerAsyncType(
+ methods_[idx]->SetServerAsyncType(
internal::RpcServiceMethod::AsyncType::RAW);
}
void MarkMethodGeneric(int index) {
// This does not have to be a hard error, however no one has approached us
// with a use case yet. Please file an issue if you believe you have one.
+ size_t idx = static_cast<size_t>(index);
GPR_CODEGEN_ASSERT(
- methods_[index]->handler() != nullptr &&
+ methods_[idx]->handler() != nullptr &&
"Cannot mark the method as 'generic' because it has already been "
"marked as 'async' or 'raw'.");
- methods_[index].reset();
+ methods_[idx].reset();
}
void MarkMethodStreamed(int index, internal::MethodHandler* streamed_method) {
// This does not have to be a hard error, however no one has approached us
// with a use case yet. Please file an issue if you believe you have one.
- GPR_CODEGEN_ASSERT(methods_[index] && methods_[index]->handler() &&
+ size_t idx = static_cast<size_t>(index);
+ GPR_CODEGEN_ASSERT(methods_[idx] && methods_[idx]->handler() &&
"Cannot mark an async or generic method Streamed");
- methods_[index]->SetHandler(streamed_method);
+ methods_[idx]->SetHandler(streamed_method);
// From the server's point of view, streamed unary is a special
// case of BIDI_STREAMING that has 1 read and 1 write, in that order,
// and split server-side streaming is BIDI_STREAMING with 1 read and
// any number of writes, in that order.
- methods_[index]->SetMethodType(internal::RpcMethod::BIDI_STREAMING);
+ methods_[idx]->SetMethodType(internal::RpcMethod::BIDI_STREAMING);
}
private:
diff --git a/package.xml b/package.xml
index 9d202761f2..9c0e078e92 100644
--- a/package.xml
+++ b/package.xml
@@ -13,8 +13,8 @@
<date>2018-01-19</date>
<time>16:06:07</time>
<version>
- <release>1.15.0dev</release>
- <api>1.15.0dev</api>
+ <release>1.16.0dev</release>
+ <api>1.16.0dev</api>
</version>
<stability>
<release>beta</release>
@@ -301,6 +301,7 @@
<file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl_types.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security_grpc.h" role="src" />
+ <file baseinstalldir="/" name="src/core/tsi/grpc_shadow_boringssl.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/chttp2_server.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/inproc/inproc_transport.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/avl/avl.h" role="src" />
@@ -334,6 +335,7 @@
<file baseinstalldir="/" name="src/core/lib/http/httpcli.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/http/parser.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/block_annotate.h" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/iomgr/buffer_list.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/call_combiner.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/closure.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/combiner.h" role="src" />
@@ -349,6 +351,7 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/executor.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/gethostname.h" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/iomgr/internal_errqueue.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_custom.h" role="src" />
@@ -478,6 +481,7 @@
<file baseinstalldir="/" name="src/core/lib/http/format_request.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/http/httpcli.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/http/parser.cc" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/iomgr/buffer_list.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/call_combiner.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/combiner.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/endpoint.cc" role="src" />
@@ -498,6 +502,7 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/gethostname_fallback.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/gethostname_host_name_max.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/gethostname_sysconf.cc" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/iomgr/internal_errqueue.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_custom.cc" role="src" />
diff --git a/src/core/ext/filters/client_channel/README.md b/src/core/ext/filters/client_channel/README.md
index 7c209db12e..9676a4535b 100644
--- a/src/core/ext/filters/client_channel/README.md
+++ b/src/core/ext/filters/client_channel/README.md
@@ -46,20 +46,4 @@ construction arguments for concrete grpc_subchannel instances.
Naming for GRPC
===============
-Names in GRPC are represented by a URI (as defined in
-[RFC 3986](https://tools.ietf.org/html/rfc3986)).
-
-The following schemes are currently supported:
-
-dns:///host:port - dns schemes are currently supported so long as authority is
- empty (authority based dns resolution is expected in a future
- release)
-
-unix:path - the unix scheme is used to create and connect to unix domain
- sockets - the authority must be empty, and the path
- represents the absolute or relative path to the desired
- socket
-
-ipv4:host:port - a pre-resolved ipv4 dotted decimal address/port combination
-
-ipv6:[host]:port - a pre-resolved ipv6 address/port combination
+See [/doc/naming.md](gRPC name resolution).
diff --git a/src/core/ext/filters/client_channel/http_connect_handshaker.cc b/src/core/ext/filters/client_channel/http_connect_handshaker.cc
index 4e8b8b71db..7ce8da8c00 100644
--- a/src/core/ext/filters/client_channel/http_connect_handshaker.cc
+++ b/src/core/ext/filters/client_channel/http_connect_handshaker.cc
@@ -320,7 +320,7 @@ static void http_connect_handshaker_do_handshake(
// Take a new ref to be held by the write callback.
gpr_ref(&handshaker->refcount);
grpc_endpoint_write(args->endpoint, &handshaker->write_buffer,
- &handshaker->request_done_closure);
+ &handshaker->request_done_closure, nullptr);
gpr_mu_unlock(&handshaker->mu);
}
diff --git a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
index 9120abfa3c..602d6e92f9 100644
--- a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
@@ -126,7 +126,6 @@ class PickFirst : public LoadBalancingPolicy {
void ShutdownLocked() override;
void StartPickingLocked();
- void DestroyUnselectedSubchannelsLocked();
void UpdateChildRefsLocked();
// All our subchannels.
@@ -250,14 +249,9 @@ void PickFirst::CancelMatchingPicksLocked(uint32_t initial_metadata_flags_mask,
void PickFirst::StartPickingLocked() {
started_picking_ = true;
- if (subchannel_list_ != nullptr) {
- for (size_t i = 0; i < subchannel_list_->num_subchannels(); ++i) {
- if (subchannel_list_->subchannel(i)->subchannel() != nullptr) {
- subchannel_list_->subchannel(i)
- ->CheckConnectivityStateAndStartWatchingLocked();
- break;
- }
- }
+ if (subchannel_list_ != nullptr && subchannel_list_->num_subchannels() > 0) {
+ subchannel_list_->subchannel(0)
+ ->CheckConnectivityStateAndStartWatchingLocked();
}
}
@@ -294,15 +288,6 @@ bool PickFirst::PickLocked(PickState* pick, grpc_error** error) {
return false;
}
-void PickFirst::DestroyUnselectedSubchannelsLocked() {
- for (size_t i = 0; i < subchannel_list_->num_subchannels(); ++i) {
- PickFirstSubchannelData* sd = subchannel_list_->subchannel(i);
- if (selected_ != sd) {
- sd->UnrefSubchannelLocked("selected_different_subchannel");
- }
- }
-}
-
grpc_connectivity_state PickFirst::CheckConnectivityLocked(grpc_error** error) {
return grpc_connectivity_state_get(&state_tracker_, error);
}
@@ -419,7 +404,6 @@ void PickFirst::UpdateLocked(const grpc_channel_args& args) {
if (sd->CheckConnectivityStateLocked(&error) == GRPC_CHANNEL_READY) {
selected_ = sd;
subchannel_list_ = std::move(subchannel_list);
- DestroyUnselectedSubchannelsLocked();
sd->StartConnectivityWatchLocked();
// If there was a previously pending update (which may or may
// not have contained the currently selected subchannel), drop
@@ -504,7 +488,6 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
p->TryReresolutionLocked(&grpc_lb_pick_first_trace, GRPC_ERROR_NONE);
// In transient failure. Rely on re-resolution to recover.
p->selected_ = nullptr;
- UnrefSubchannelLocked("pf_selected_shutdown");
StopConnectivityWatchLocked();
} else {
grpc_connectivity_state_set(&p->state_tracker_, connectivity_state,
@@ -535,11 +518,9 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
case GRPC_CHANNEL_TRANSIENT_FAILURE: {
StopConnectivityWatchLocked();
PickFirstSubchannelData* sd = this;
- do {
- size_t next_index =
- (sd->Index() + 1) % subchannel_list()->num_subchannels();
- sd = subchannel_list()->subchannel(next_index);
- } while (sd->subchannel() == nullptr);
+ size_t next_index =
+ (sd->Index() + 1) % subchannel_list()->num_subchannels();
+ sd = subchannel_list()->subchannel(next_index);
// Case 1: Only set state to TRANSIENT_FAILURE if we've tried
// all subchannels.
if (sd->Index() == 0 && subchannel_list() == p->subchannel_list_.get()) {
@@ -600,8 +581,6 @@ void PickFirst::PickFirstSubchannelData::ProcessUnselectedReadyLocked() {
if (grpc_lb_pick_first_trace.enabled()) {
gpr_log(GPR_INFO, "Pick First %p selected subchannel %p", p, subchannel());
}
- // Drop all other subchannels, since we are now connected.
- p->DestroyUnselectedSubchannelsLocked();
// Update any calls that were waiting for a pick.
PickState* pick;
while ((pick = p->pending_picks_)) {
diff --git a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
index 0fa2f04e73..91ddaec8b8 100644
--- a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
+++ b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
@@ -102,11 +102,6 @@ class SubchannelData {
return pending_connectivity_state_unsafe_;
}
- // Unrefs the subchannel. May be used if an individual subchannel is
- // no longer needed even though the subchannel list as a whole is not
- // being unreffed.
- virtual void UnrefSubchannelLocked(const char* reason);
-
// Resets the connection backoff.
// TODO(roth): This method should go away when we move the backoff
// code out of the subchannel and into the LB policies.
@@ -154,6 +149,10 @@ class SubchannelData {
grpc_connectivity_state connectivity_state,
grpc_error* error) GRPC_ABSTRACT;
+ // Unrefs the subchannel. May be overridden by subclasses that need
+ // to perform extra cleanup when unreffing the subchannel.
+ virtual void UnrefSubchannelLocked(const char* reason);
+
private:
// Updates connected_subchannel_ based on pending_connectivity_state_unsafe_.
// Returns true if the connectivity state should be reported.
diff --git a/src/core/ext/filters/client_channel/resolver.h b/src/core/ext/filters/client_channel/resolver.h
index 48f2e89095..e9acbb7c41 100644
--- a/src/core/ext/filters/client_channel/resolver.h
+++ b/src/core/ext/filters/client_channel/resolver.h
@@ -81,18 +81,7 @@ class Resolver : public InternallyRefCountedWithTracing<Resolver> {
///
/// If this causes new data to become available, then the currently
/// pending call to \a NextLocked() will return the new result.
- ///
- /// Note: Currently, all resolvers are required to return a new result
- /// shortly after this method is called. For pull-based mechanisms, if
- /// the implementation decides to delay querying the name service, it
- /// should immediately return a new copy of the previously returned
- /// result (and it can then return the updated data later, when it
- /// actually does query the name service). For push-based mechanisms,
- /// the implementation should immediately return a new copy of the
- /// last-seen result.
- /// TODO(roth): Remove this requirement once we fix pick_first to not
- /// throw away unselected subchannels.
- virtual void RequestReresolutionLocked() GRPC_ABSTRACT;
+ virtual void RequestReresolutionLocked() {}
/// Resets the re-resolution backoff, if any.
/// This needs to be implemented only by pull-based implementations;
diff --git a/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc b/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
index f2bb5f3c71..dfa52867d8 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
@@ -373,13 +373,7 @@ void AresDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
void AresDnsResolver::MaybeStartResolvingLocked() {
// If there is an existing timer, the time it fires is the earliest time we
// can start the next resolution.
- if (have_next_resolution_timer_) {
- // TODO(dgq): remove the following two lines once Pick First stops
- // discarding subchannels after selecting.
- ++resolved_version_;
- MaybeFinishNextLocked();
- return;
- }
+ if (have_next_resolution_timer_) return;
if (last_resolution_timestamp_ >= 0) {
const grpc_millis earliest_next_resolution =
last_resolution_timestamp_ + min_time_between_resolutions_;
@@ -401,10 +395,6 @@ void AresDnsResolver::MaybeStartResolvingLocked() {
self.release();
grpc_timer_init(&next_resolution_timer_, ms_until_next_resolution,
&on_next_resolution_);
- // TODO(dgq): remove the following two lines once Pick First stops
- // discarding subchannels after selecting.
- ++resolved_version_;
- MaybeFinishNextLocked();
return;
}
}
diff --git a/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc b/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
index 282caf215c..65ff1ec1a5 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
@@ -247,13 +247,7 @@ void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
void NativeDnsResolver::MaybeStartResolvingLocked() {
// If there is an existing timer, the time it fires is the earliest time we
// can start the next resolution.
- if (have_next_resolution_timer_) {
- // TODO(dgq): remove the following two lines once Pick First stops
- // discarding subchannels after selecting.
- ++resolved_version_;
- MaybeFinishNextLocked();
- return;
- }
+ if (have_next_resolution_timer_) return;
if (last_resolution_timestamp_ >= 0) {
const grpc_millis earliest_next_resolution =
last_resolution_timestamp_ + min_time_between_resolutions_;
@@ -275,10 +269,6 @@ void NativeDnsResolver::MaybeStartResolvingLocked() {
self.release();
grpc_timer_init(&next_resolution_timer_, ms_until_next_resolution,
&on_next_resolution_);
- // TODO(dgq): remove the following two lines once Pick First stops
- // discarding subchannels after selecting.
- ++resolved_version_;
- MaybeFinishNextLocked();
return;
}
}
diff --git a/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc b/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc
index 99a33f2277..144ac24a56 100644
--- a/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc
@@ -73,11 +73,6 @@ class FakeResolver : public Resolver {
// Results to use for the pretended re-resolution in
// RequestReresolutionLocked().
grpc_channel_args* reresolution_results_ = nullptr;
- // TODO(juanlishen): This can go away once pick_first is changed to not throw
- // away its subchannels, since that will eliminate its dependence on
- // channel_saw_error_locked() causing an immediate resolver return.
- // A copy of the most-recently used resolution results.
- grpc_channel_args* last_used_results_ = nullptr;
// pending next completion, or NULL
grpc_closure* next_completion_ = nullptr;
// target result address for next completion
@@ -96,7 +91,6 @@ FakeResolver::FakeResolver(const ResolverArgs& args) : Resolver(args.combiner) {
FakeResolver::~FakeResolver() {
grpc_channel_args_destroy(next_results_);
grpc_channel_args_destroy(reresolution_results_);
- grpc_channel_args_destroy(last_used_results_);
grpc_channel_args_destroy(channel_args_);
}
@@ -109,17 +103,11 @@ void FakeResolver::NextLocked(grpc_channel_args** target_result,
}
void FakeResolver::RequestReresolutionLocked() {
- // A resolution must have been returned before an error is seen.
- GPR_ASSERT(last_used_results_ != nullptr);
- grpc_channel_args_destroy(next_results_);
if (reresolution_results_ != nullptr) {
+ grpc_channel_args_destroy(next_results_);
next_results_ = grpc_channel_args_copy(reresolution_results_);
- } else {
- // If reresolution_results is unavailable, re-resolve with the most-recently
- // used results to avoid a no-op re-resolution.
- next_results_ = grpc_channel_args_copy(last_used_results_);
+ MaybeFinishNextLocked();
}
- MaybeFinishNextLocked();
}
void FakeResolver::MaybeFinishNextLocked() {
@@ -161,8 +149,6 @@ void FakeResolverResponseGenerator::SetResponseLocked(void* arg,
FakeResolver* resolver = closure_arg->generator->resolver_;
grpc_channel_args_destroy(resolver->next_results_);
resolver->next_results_ = closure_arg->response;
- grpc_channel_args_destroy(resolver->last_used_results_);
- resolver->last_used_results_ = grpc_channel_args_copy(closure_arg->response);
resolver->MaybeFinishNextLocked();
Delete(closure_arg);
}
diff --git a/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h b/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h
index e5175f9b7b..708eaf1147 100644
--- a/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h
+++ b/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h
@@ -53,7 +53,8 @@ class FakeResolverResponseGenerator
// The new re-resolution response replaces any previous re-resolution
// response that may have been set by a previous call.
// If the re-resolution response is set to NULL, then the fake
- // resolver will return the last value set via \a SetResponse().
+ // resolver will not return anything when \a RequestReresolutionLocked()
+ // is called.
void SetReresolutionResponse(grpc_channel_args* response);
// Tells the resolver to return a transient failure (signalled by
diff --git a/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc b/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
index f74ac5aebe..801734764b 100644
--- a/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
@@ -50,8 +50,6 @@ class SockaddrResolver : public Resolver {
void NextLocked(grpc_channel_args** result,
grpc_closure* on_complete) override;
- void RequestReresolutionLocked() override;
-
void ShutdownLocked() override;
private:
@@ -90,11 +88,6 @@ void SockaddrResolver::NextLocked(grpc_channel_args** target_result,
MaybeFinishNextLocked();
}
-void SockaddrResolver::RequestReresolutionLocked() {
- published_ = false;
- MaybeFinishNextLocked();
-}
-
void SockaddrResolver::ShutdownLocked() {
if (next_completion_ != nullptr) {
*target_result_ = nullptr;
diff --git a/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc b/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc
index 6529046a5e..8ac34c629f 100644
--- a/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc
+++ b/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc
@@ -162,9 +162,10 @@ void ServerLoadReportingCallData::GetCensusSafeClientIpString(
} else if (addr->sa_family == GRPC_AF_INET6) {
grpc_sockaddr_in6* addr6 = reinterpret_cast<grpc_sockaddr_in6*>(addr);
*client_ip_string = static_cast<char*>(gpr_malloc(32 + 1));
- for (size_t i = 0; i < 16; ++i) {
- snprintf(*client_ip_string + i * 2, 2 + 1, "%02x",
- addr6->sin6_addr.__in6_u.__u6_addr8[i]);
+ uint32_t* addr6_next_long = reinterpret_cast<uint32_t*>(&addr6->sin6_addr);
+ for (size_t i = 0; i < 4; ++i) {
+ snprintf(*client_ip_string + 8 * i, 8 + 1, "%08x",
+ grpc_ntohl(*addr6_next_long++));
}
*size = 32;
} else {
diff --git a/src/core/ext/filters/max_age/max_age_filter.cc b/src/core/ext/filters/max_age/max_age_filter.cc
index 1fe8288bd0..431472609e 100644
--- a/src/core/ext/filters/max_age/max_age_filter.cc
+++ b/src/core/ext/filters/max_age/max_age_filter.cc
@@ -429,8 +429,7 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
? GRPC_MILLIS_INF_FUTURE
: DEFAULT_MAX_CONNECTION_IDLE_MS;
chand->idle_state = MAX_IDLE_STATE_INIT;
- gpr_atm_no_barrier_store(&chand->last_enter_idle_time_millis,
- GRPC_MILLIS_INF_PAST);
+ gpr_atm_no_barrier_store(&chand->last_enter_idle_time_millis, GPR_ATM_MIN);
for (size_t i = 0; i < args->channel_args->num_args; ++i) {
if (0 == strcmp(args->channel_args->args[i].key,
GRPC_ARG_MAX_CONNECTION_AGE_MS)) {
diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc b/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc
index dfed824cd5..5bdcb387c9 100644
--- a/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc
+++ b/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc
@@ -50,7 +50,7 @@ grpc_channel* grpc_insecure_channel_create_from_fd(
GPR_ASSERT(fcntl(fd, F_SETFL, flags | O_NONBLOCK) == 0);
grpc_endpoint* client = grpc_tcp_client_create_from_fd(
- grpc_fd_create(fd, "client", false), args, "fd-client");
+ grpc_fd_create(fd, "client", true), args, "fd-client");
grpc_transport* transport =
grpc_create_chttp2_transport(final_args, client, true);
diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc
index a0228785ee..e4bd91d07b 100644
--- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc
+++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc
@@ -44,7 +44,7 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
gpr_asprintf(&name, "fd:%d", fd);
grpc_endpoint* server_endpoint =
- grpc_tcp_create(grpc_fd_create(fd, name, false),
+ grpc_tcp_create(grpc_fd_create(fd, name, true),
grpc_server_get_channel_args(server), name);
gpr_free(name);
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc
index 36511fa608..027a57d606 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc
@@ -1029,7 +1029,8 @@ static void write_action(void* gt, grpc_error* error) {
grpc_endpoint_write(
t->ep, &t->outbuf,
GRPC_CLOSURE_INIT(&t->write_action_end_locked, write_action_end_locked, t,
- grpc_combiner_scheduler(t->combiner)));
+ grpc_combiner_scheduler(t->combiner)),
+ nullptr);
}
/* Callback from the grpc_endpoint after bytes have been written by calling
diff --git a/src/core/lib/gprpp/fork.cc b/src/core/lib/gprpp/fork.cc
index 0288c39680..3b9c16510a 100644
--- a/src/core/lib/gprpp/fork.cc
+++ b/src/core/lib/gprpp/fork.cc
@@ -222,8 +222,9 @@ void Fork::DecExecCtxCount() {
}
}
-void Fork::SetResetChildPollingEngineFunc(Fork::child_postfork_func func) {
- reset_child_polling_engine_ = func;
+void Fork::SetResetChildPollingEngineFunc(
+ Fork::child_postfork_func reset_child_polling_engine) {
+ reset_child_polling_engine_ = reset_child_polling_engine;
}
Fork::child_postfork_func Fork::GetResetChildPollingEngineFunc() {
return reset_child_polling_engine_;
diff --git a/src/core/lib/http/httpcli.cc b/src/core/lib/http/httpcli.cc
index 12060074c5..3bd7a2ce59 100644
--- a/src/core/lib/http/httpcli.cc
+++ b/src/core/lib/http/httpcli.cc
@@ -163,7 +163,7 @@ static void done_write(void* arg, grpc_error* error) {
static void start_write(internal_request* req) {
grpc_slice_ref_internal(req->request_text);
grpc_slice_buffer_add(&req->outgoing, req->request_text);
- grpc_endpoint_write(req->ep, &req->outgoing, &req->done_write);
+ grpc_endpoint_write(req->ep, &req->outgoing, &req->done_write, nullptr);
}
static void on_handshake_done(void* arg, grpc_endpoint* ep) {
diff --git a/src/core/lib/iomgr/buffer_list.cc b/src/core/lib/iomgr/buffer_list.cc
new file mode 100644
index 0000000000..6ada23db1c
--- /dev/null
+++ b/src/core/lib/iomgr/buffer_list.cc
@@ -0,0 +1,134 @@
+/*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <grpc/support/port_platform.h>
+
+#include "src/core/lib/iomgr/buffer_list.h"
+#include "src/core/lib/iomgr/port.h"
+
+#include <grpc/support/log.h>
+
+#ifdef GRPC_LINUX_ERRQUEUE
+#include <time.h>
+
+#include "src/core/lib/gprpp/memory.h"
+
+namespace grpc_core {
+void TracedBuffer::AddNewEntry(TracedBuffer** head, uint32_t seq_no,
+ void* arg) {
+ GPR_DEBUG_ASSERT(head != nullptr);
+ TracedBuffer* new_elem = New<TracedBuffer>(seq_no, arg);
+ /* Store the current time as the sendmsg time. */
+ new_elem->ts_.sendmsg_time = gpr_now(GPR_CLOCK_REALTIME);
+ if (*head == nullptr) {
+ *head = new_elem;
+ return;
+ }
+ /* Append at the end. */
+ TracedBuffer* ptr = *head;
+ while (ptr->next_ != nullptr) {
+ ptr = ptr->next_;
+ }
+ ptr->next_ = new_elem;
+}
+
+namespace {
+/** Fills gpr_timespec gts based on values from timespec ts */
+void fill_gpr_from_timestamp(gpr_timespec* gts, const struct timespec* ts) {
+ gts->tv_sec = ts->tv_sec;
+ gts->tv_nsec = static_cast<int32_t>(ts->tv_nsec);
+ gts->clock_type = GPR_CLOCK_REALTIME;
+}
+
+/** The saved callback function that will be invoked when we get all the
+ * timestamps that we are going to get for a TracedBuffer. */
+void (*timestamps_callback)(void*, grpc_core::Timestamps*,
+ grpc_error* shutdown_err);
+} /* namespace */
+
+void TracedBuffer::ProcessTimestamp(TracedBuffer** head,
+ struct sock_extended_err* serr,
+ struct scm_timestamping* tss) {
+ GPR_DEBUG_ASSERT(head != nullptr);
+ TracedBuffer* elem = *head;
+ TracedBuffer* next = nullptr;
+ while (elem != nullptr) {
+ /* The byte number refers to the sequence number of the last byte which this
+ * timestamp relates to. */
+ if (serr->ee_data >= elem->seq_no_) {
+ switch (serr->ee_info) {
+ case SCM_TSTAMP_SCHED:
+ fill_gpr_from_timestamp(&(elem->ts_.scheduled_time), &(tss->ts[0]));
+ elem = elem->next_;
+ break;
+ case SCM_TSTAMP_SND:
+ fill_gpr_from_timestamp(&(elem->ts_.sent_time), &(tss->ts[0]));
+ elem = elem->next_;
+ break;
+ case SCM_TSTAMP_ACK:
+ fill_gpr_from_timestamp(&(elem->ts_.acked_time), &(tss->ts[0]));
+ /* Got all timestamps. Do the callback and free this TracedBuffer.
+ * The thing below can be passed by value if we don't want the
+ * restriction on the lifetime. */
+ timestamps_callback(elem->arg_, &(elem->ts_), GRPC_ERROR_NONE);
+ next = elem->next_;
+ Delete<TracedBuffer>(elem);
+ *head = elem = next;
+ break;
+ default:
+ abort();
+ }
+ } else {
+ break;
+ }
+ }
+}
+
+void TracedBuffer::Shutdown(TracedBuffer** head, grpc_error* shutdown_err) {
+ GPR_DEBUG_ASSERT(head != nullptr);
+ TracedBuffer* elem = *head;
+ while (elem != nullptr) {
+ if (timestamps_callback) {
+ timestamps_callback(elem->arg_, &(elem->ts_), shutdown_err);
+ }
+ auto* next = elem->next_;
+ Delete<TracedBuffer>(elem);
+ elem = next;
+ }
+ *head = nullptr;
+ GRPC_ERROR_UNREF(shutdown_err);
+}
+
+void grpc_tcp_set_write_timestamps_callback(void (*fn)(void*,
+ grpc_core::Timestamps*,
+ grpc_error* error)) {
+ timestamps_callback = fn;
+}
+} /* namespace grpc_core */
+
+#else /* GRPC_LINUX_ERRQUEUE */
+
+namespace grpc_core {
+void grpc_tcp_set_write_timestamps_callback(void (*fn)(void*,
+ grpc_core::Timestamps*,
+ grpc_error* error)) {
+ gpr_log(GPR_DEBUG, "Timestamps callback is not enabled for this platform");
+}
+} /* namespace grpc_core */
+
+#endif /* GRPC_LINUX_ERRQUEUE */
diff --git a/src/core/lib/iomgr/buffer_list.h b/src/core/lib/iomgr/buffer_list.h
new file mode 100644
index 0000000000..cbbf50a657
--- /dev/null
+++ b/src/core/lib/iomgr/buffer_list.h
@@ -0,0 +1,96 @@
+/*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef GRPC_CORE_LIB_IOMGR_BUFFER_LIST_H
+#define GRPC_CORE_LIB_IOMGR_BUFFER_LIST_H
+
+#include <grpc/support/port_platform.h>
+
+#include "src/core/lib/iomgr/port.h"
+
+#include <grpc/support/time.h>
+
+#include "src/core/lib/gprpp/memory.h"
+#include "src/core/lib/iomgr/error.h"
+#include "src/core/lib/iomgr/internal_errqueue.h"
+
+namespace grpc_core {
+struct Timestamps {
+ /* TODO(yashykt): This would also need to store OPTSTAT once support is added
+ */
+ gpr_timespec sendmsg_time;
+ gpr_timespec scheduled_time;
+ gpr_timespec sent_time;
+ gpr_timespec acked_time;
+};
+
+/** TracedBuffer is a class to keep track of timestamps for a specific buffer in
+ * the TCP layer. We are only tracking timestamps for Linux kernels and hence
+ * this class would only be used by Linux platforms. For all other platforms,
+ * TracedBuffer would be an empty class.
+ *
+ * The timestamps collected are according to grpc_core::Timestamps declared
+ * above.
+ *
+ * A TracedBuffer list is kept track of using the head element of the list. If
+ * the head element of the list is nullptr, then the list is empty.
+ */
+#ifdef GRPC_LINUX_ERRQUEUE
+class TracedBuffer {
+ public:
+ /** Add a new entry in the TracedBuffer list pointed to by head. Also saves
+ * sendmsg_time with the current timestamp. */
+ static void AddNewEntry(grpc_core::TracedBuffer** head, uint32_t seq_no,
+ void* arg);
+
+ /** Processes a received timestamp based on sock_extended_err and
+ * scm_timestamping structures. It will invoke the timestamps callback if the
+ * timestamp type is SCM_TSTAMP_ACK. */
+ static void ProcessTimestamp(grpc_core::TracedBuffer** head,
+ struct sock_extended_err* serr,
+ struct scm_timestamping* tss);
+
+ /** Cleans the list by calling the callback for each traced buffer in the list
+ * with timestamps that it has. */
+ static void Shutdown(grpc_core::TracedBuffer** head,
+ grpc_error* shutdown_err);
+
+ private:
+ GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW
+
+ TracedBuffer(int seq_no, void* arg)
+ : seq_no_(seq_no), arg_(arg), next_(nullptr) {}
+
+ uint32_t seq_no_; /* The sequence number for the last byte in the buffer */
+ void* arg_; /* The arg to pass to timestamps_callback */
+ grpc_core::Timestamps ts_; /* The timestamps corresponding to this buffer */
+ grpc_core::TracedBuffer* next_; /* The next TracedBuffer in the list */
+};
+#else /* GRPC_LINUX_ERRQUEUE */
+class TracedBuffer {};
+#endif /* GRPC_LINUX_ERRQUEUE */
+
+/** Sets the callback function to call when timestamps for a write are
+ * collected. The callback does not own a reference to error. */
+void grpc_tcp_set_write_timestamps_callback(void (*fn)(void*,
+ grpc_core::Timestamps*,
+ grpc_error* error));
+
+}; /* namespace grpc_core */
+
+#endif /* GRPC_CORE_LIB_IOMGR_BUFFER_LIST_H */
diff --git a/src/core/lib/iomgr/endpoint.cc b/src/core/lib/iomgr/endpoint.cc
index 92e7930111..44fb47e19d 100644
--- a/src/core/lib/iomgr/endpoint.cc
+++ b/src/core/lib/iomgr/endpoint.cc
@@ -28,8 +28,8 @@ void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
}
void grpc_endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
- grpc_closure* cb) {
- ep->vtable->write(ep, slices, cb);
+ grpc_closure* cb, void* arg) {
+ ep->vtable->write(ep, slices, cb, arg);
}
void grpc_endpoint_add_to_pollset(grpc_endpoint* ep, grpc_pollset* pollset) {
diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h
index 15db1649fa..1f590a80ca 100644
--- a/src/core/lib/iomgr/endpoint.h
+++ b/src/core/lib/iomgr/endpoint.h
@@ -33,10 +33,12 @@
typedef struct grpc_endpoint grpc_endpoint;
typedef struct grpc_endpoint_vtable grpc_endpoint_vtable;
+class Timestamps;
struct grpc_endpoint_vtable {
void (*read)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb);
- void (*write)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb);
+ void (*write)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
+ void* arg);
void (*add_to_pollset)(grpc_endpoint* ep, grpc_pollset* pollset);
void (*add_to_pollset_set)(grpc_endpoint* ep, grpc_pollset_set* pollset);
void (*delete_from_pollset_set)(grpc_endpoint* ep, grpc_pollset_set* pollset);
@@ -70,9 +72,11 @@ int grpc_endpoint_get_fd(grpc_endpoint* ep);
\a slices may be mutated at will by the endpoint until cb is called.
No guarantee is made to the content of slices after a write EXCEPT that
it is a valid slice buffer.
+ \a arg is platform specific. It is currently only used by TCP on linux
+ platforms as an argument that would be forwarded to the timestamps callback.
*/
void grpc_endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
- grpc_closure* cb);
+ grpc_closure* cb, void* arg);
/* Causes any pending and future read/write callbacks to run immediately with
success==0 */
diff --git a/src/core/lib/iomgr/endpoint_cfstream.cc b/src/core/lib/iomgr/endpoint_cfstream.cc
index c3bc0cc8fd..df2cf508c8 100644
--- a/src/core/lib/iomgr/endpoint_cfstream.cc
+++ b/src/core/lib/iomgr/endpoint_cfstream.cc
@@ -268,7 +268,7 @@ static void CFStreamRead(grpc_endpoint* ep, grpc_slice_buffer* slices,
}
static void CFStreamWrite(grpc_endpoint* ep, grpc_slice_buffer* slices,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
CFStreamEndpoint* ep_impl = reinterpret_cast<CFStreamEndpoint*>(ep);
if (grpc_tcp_trace.enabled()) {
gpr_log(GPR_DEBUG, "CFStream endpoint:%p write (%p, %p) length:%zu",
diff --git a/src/core/lib/iomgr/endpoint_pair_posix.cc b/src/core/lib/iomgr/endpoint_pair_posix.cc
index 5c5c246f99..3afbfd7254 100644
--- a/src/core/lib/iomgr/endpoint_pair_posix.cc
+++ b/src/core/lib/iomgr/endpoint_pair_posix.cc
@@ -59,11 +59,11 @@ grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char* name,
grpc_core::ExecCtx exec_ctx;
gpr_asprintf(&final_name, "%s:client", name);
- p.client = grpc_tcp_create(grpc_fd_create(sv[1], final_name, false), args,
+ p.client = grpc_tcp_create(grpc_fd_create(sv[1], final_name, true), args,
"socketpair-server");
gpr_free(final_name);
gpr_asprintf(&final_name, "%s:server", name);
- p.server = grpc_tcp_create(grpc_fd_create(sv[0], final_name, false), args,
+ p.server = grpc_tcp_create(grpc_fd_create(sv[0], final_name, true), args,
"socketpair-client");
gpr_free(final_name);
diff --git a/src/core/lib/iomgr/ev_poll_posix.cc b/src/core/lib/iomgr/ev_poll_posix.cc
index fb4c71ef71..16562538a6 100644
--- a/src/core/lib/iomgr/ev_poll_posix.cc
+++ b/src/core/lib/iomgr/ev_poll_posix.cc
@@ -60,6 +60,19 @@ typedef struct grpc_fd_watcher {
grpc_fd* fd;
} grpc_fd_watcher;
+typedef struct grpc_cached_wakeup_fd grpc_cached_wakeup_fd;
+
+/* Only used when GRPC_ENABLE_FORK_SUPPORT=1 */
+struct grpc_fork_fd_list {
+ /* Only one of fd or cached_wakeup_fd will be set. The unused field will be
+ set to nullptr. */
+ grpc_fd* fd;
+ grpc_cached_wakeup_fd* cached_wakeup_fd;
+
+ grpc_fork_fd_list* next;
+ grpc_fork_fd_list* prev;
+};
+
struct grpc_fd {
int fd;
/* refst format:
@@ -108,8 +121,18 @@ struct grpc_fd {
grpc_closure* on_done_closure;
grpc_iomgr_object iomgr_object;
+
+ /* Only used when GRPC_ENABLE_FORK_SUPPORT=1 */
+ grpc_fork_fd_list* fork_fd_list;
};
+/* True when GRPC_ENABLE_FORK_SUPPORT=1. We do not support fork with poll-cv */
+static bool track_fds_for_fork = false;
+
+/* Only used when GRPC_ENABLE_FORK_SUPPORT=1 */
+static grpc_fork_fd_list* fork_fd_list_head = nullptr;
+static gpr_mu fork_fd_list_mu;
+
/* Begin polling on an fd.
Registers that the given pollset is interested in this fd - so that if read
or writability interest changes, the pollset can be kicked to pick up that
@@ -156,6 +179,9 @@ static void fd_unref(grpc_fd* fd);
typedef struct grpc_cached_wakeup_fd {
grpc_wakeup_fd fd;
struct grpc_cached_wakeup_fd* next;
+
+ /* Only used when GRPC_ENABLE_FORK_SUPPORT=1 */
+ grpc_fork_fd_list* fork_fd_list;
} grpc_cached_wakeup_fd;
struct grpc_pollset_worker {
@@ -281,9 +307,61 @@ poll_hash_table poll_cache;
grpc_cv_fd_table g_cvfds;
/*******************************************************************************
- * fd_posix.c
+ * functions to track opened fds. No-ops unless track_fds_for_fork is true.
*/
+static void fork_fd_list_remove_node(grpc_fork_fd_list* node) {
+ if (track_fds_for_fork) {
+ gpr_mu_lock(&fork_fd_list_mu);
+ if (fork_fd_list_head == node) {
+ fork_fd_list_head = node->next;
+ }
+ if (node->prev != nullptr) {
+ node->prev->next = node->next;
+ }
+ if (node->next != nullptr) {
+ node->next->prev = node->prev;
+ }
+ gpr_free(node);
+ gpr_mu_unlock(&fork_fd_list_mu);
+ }
+}
+
+static void fork_fd_list_add_node(grpc_fork_fd_list* node) {
+ gpr_mu_lock(&fork_fd_list_mu);
+ node->next = fork_fd_list_head;
+ node->prev = nullptr;
+ if (fork_fd_list_head != nullptr) {
+ fork_fd_list_head->prev = node;
+ }
+ fork_fd_list_head = node;
+ gpr_mu_unlock(&fork_fd_list_mu);
+}
+
+static void fork_fd_list_add_grpc_fd(grpc_fd* fd) {
+ if (track_fds_for_fork) {
+ fd->fork_fd_list =
+ static_cast<grpc_fork_fd_list*>(gpr_malloc(sizeof(grpc_fork_fd_list)));
+ fd->fork_fd_list->fd = fd;
+ fd->fork_fd_list->cached_wakeup_fd = nullptr;
+ fork_fd_list_add_node(fd->fork_fd_list);
+ }
+}
+
+static void fork_fd_list_add_wakeup_fd(grpc_cached_wakeup_fd* fd) {
+ if (track_fds_for_fork) {
+ fd->fork_fd_list =
+ static_cast<grpc_fork_fd_list*>(gpr_malloc(sizeof(grpc_fork_fd_list)));
+ fd->fork_fd_list->cached_wakeup_fd = fd;
+ fd->fork_fd_list->fd = nullptr;
+ fork_fd_list_add_node(fd->fork_fd_list);
+ }
+}
+
+ /*******************************************************************************
+ * fd_posix.c
+ */
+
#ifndef NDEBUG
#define REF_BY(fd, n, reason) ref_by(fd, n, reason, __FILE__, __LINE__)
#define UNREF_BY(fd, n, reason) unref_by(fd, n, reason, __FILE__, __LINE__)
@@ -319,6 +397,7 @@ static void unref_by(grpc_fd* fd, int n) {
if (old == n) {
gpr_mu_destroy(&fd->mu);
grpc_iomgr_unregister_object(&fd->iomgr_object);
+ fork_fd_list_remove_node(fd->fork_fd_list);
if (fd->shutdown) GRPC_ERROR_UNREF(fd->shutdown_error);
gpr_free(fd);
} else {
@@ -347,6 +426,7 @@ static grpc_fd* fd_create(int fd, const char* name, bool track_err) {
gpr_asprintf(&name2, "%s fd=%d", name, fd);
grpc_iomgr_register_object(&r->iomgr_object, name2);
gpr_free(name2);
+ fork_fd_list_add_grpc_fd(r);
return r;
}
@@ -822,6 +902,7 @@ static void pollset_destroy(grpc_pollset* pollset) {
GPR_ASSERT(!pollset_has_workers(pollset));
while (pollset->local_wakeup_cache) {
grpc_cached_wakeup_fd* next = pollset->local_wakeup_cache->next;
+ fork_fd_list_remove_node(pollset->local_wakeup_cache->fork_fd_list);
grpc_wakeup_fd_destroy(&pollset->local_wakeup_cache->fd);
gpr_free(pollset->local_wakeup_cache);
pollset->local_wakeup_cache = next;
@@ -895,6 +976,7 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
worker.wakeup_fd = static_cast<grpc_cached_wakeup_fd*>(
gpr_malloc(sizeof(*worker.wakeup_fd)));
error = grpc_wakeup_fd_init(&worker.wakeup_fd->fd);
+ fork_fd_list_add_wakeup_fd(worker.wakeup_fd);
if (error != GRPC_ERROR_NONE) {
GRPC_LOG_IF_ERROR("pollset_work", GRPC_ERROR_REF(error));
return error;
@@ -1705,6 +1787,10 @@ static void shutdown_engine(void) {
if (grpc_cv_wakeup_fds_enabled()) {
global_cv_fd_table_shutdown();
}
+ if (track_fds_for_fork) {
+ gpr_mu_destroy(&fork_fd_list_mu);
+ grpc_core::Fork::SetResetChildPollingEngineFunc(nullptr);
+ }
}
static const grpc_event_engine_vtable vtable = {
@@ -1742,6 +1828,26 @@ static const grpc_event_engine_vtable vtable = {
shutdown_engine,
};
+/* Called by the child process's post-fork handler to close open fds, including
+ * worker wakeup fds. This allows gRPC to shutdown in the child process without
+ * interfering with connections or RPCs ongoing in the parent. */
+static void reset_event_manager_on_fork() {
+ gpr_mu_lock(&fork_fd_list_mu);
+ while (fork_fd_list_head != nullptr) {
+ if (fork_fd_list_head->fd != nullptr) {
+ close(fork_fd_list_head->fd->fd);
+ fork_fd_list_head->fd->fd = -1;
+ } else {
+ close(fork_fd_list_head->cached_wakeup_fd->fd.read_fd);
+ fork_fd_list_head->cached_wakeup_fd->fd.read_fd = -1;
+ close(fork_fd_list_head->cached_wakeup_fd->fd.write_fd);
+ fork_fd_list_head->cached_wakeup_fd->fd.write_fd = -1;
+ }
+ fork_fd_list_head = fork_fd_list_head->next;
+ }
+ gpr_mu_unlock(&fork_fd_list_mu);
+}
+
const grpc_event_engine_vtable* grpc_init_poll_posix(bool explicit_request) {
if (!grpc_has_wakeup_fd()) {
gpr_log(GPR_ERROR, "Skipping poll because of no wakeup fd.");
@@ -1750,6 +1856,12 @@ const grpc_event_engine_vtable* grpc_init_poll_posix(bool explicit_request) {
if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
return nullptr;
}
+ if (grpc_core::Fork::Enabled()) {
+ track_fds_for_fork = true;
+ gpr_mu_init(&fork_fd_list_mu);
+ grpc_core::Fork::SetResetChildPollingEngineFunc(
+ reset_event_manager_on_fork);
+ }
return &vtable;
}
diff --git a/src/core/lib/iomgr/ev_posix.cc b/src/core/lib/iomgr/ev_posix.cc
index 0205363d5c..d4377e2d50 100644
--- a/src/core/lib/iomgr/ev_posix.cc
+++ b/src/core/lib/iomgr/ev_posix.cc
@@ -237,14 +237,19 @@ void grpc_event_engine_shutdown(void) {
}
bool grpc_event_engine_can_track_errors(void) {
+/* Only track errors if platform supports errqueue. */
+#ifdef GRPC_LINUX_ERRQUEUE
return g_event_engine->can_track_err;
+#else
+ return false;
+#endif /* GRPC_LINUX_ERRQUEUE */
}
grpc_fd* grpc_fd_create(int fd, const char* name, bool track_err) {
GRPC_POLLING_API_TRACE("fd_create(%d, %s, %d)", fd, name, track_err);
GRPC_FD_TRACE("fd_create(%d, %s, %d)", fd, name, track_err);
- GPR_DEBUG_ASSERT(!track_err || g_event_engine->can_track_err);
- return g_event_engine->fd_create(fd, name, track_err);
+ return g_event_engine->fd_create(fd, name,
+ track_err && g_event_engine->can_track_err);
}
int grpc_fd_wrapped_fd(grpc_fd* fd) {
diff --git a/src/core/lib/iomgr/fork_posix.cc b/src/core/lib/iomgr/fork_posix.cc
index ac85c81de2..e957bad73d 100644
--- a/src/core/lib/iomgr/fork_posix.cc
+++ b/src/core/lib/iomgr/fork_posix.cc
@@ -58,6 +58,12 @@ void grpc_prefork() {
"environment variable GRPC_ENABLE_FORK_SUPPORT=1");
return;
}
+ if (strcmp(grpc_get_poll_strategy_name(), "epoll1") != 0 &&
+ strcmp(grpc_get_poll_strategy_name(), "poll") != 0) {
+ gpr_log(GPR_ERROR,
+ "Fork support is only compatible with the epoll1 and poll polling "
+ "strategies");
+ }
if (!grpc_core::Fork::BlockExecCtx()) {
gpr_log(GPR_INFO,
"Other threads are currently calling into gRPC, skipping fork() "
diff --git a/src/core/lib/iomgr/internal_errqueue.cc b/src/core/lib/iomgr/internal_errqueue.cc
new file mode 100644
index 0000000000..99c22e9055
--- /dev/null
+++ b/src/core/lib/iomgr/internal_errqueue.cc
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <grpc/support/port_platform.h>
+
+#include "src/core/lib/iomgr/port.h"
+
+#include "src/core/lib/iomgr/internal_errqueue.h"
+
+#ifdef GRPC_POSIX_SOCKET_TCP
+
+bool kernel_supports_errqueue() {
+#ifdef LINUX_VERSION_CODE
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
+ return true;
+#endif /* LINUX_VERSION_CODE <= KERNEL_VERSION(4, 0, 0) */
+#endif /* LINUX_VERSION_CODE */
+ return false;
+}
+
+#endif /* GRPC_POSIX_SOCKET_TCP */
diff --git a/src/core/lib/iomgr/internal_errqueue.h b/src/core/lib/iomgr/internal_errqueue.h
new file mode 100644
index 0000000000..9d122808f9
--- /dev/null
+++ b/src/core/lib/iomgr/internal_errqueue.h
@@ -0,0 +1,83 @@
+/*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/* This file contains constants defined in <linux/errqueue.h> and
+ * <linux/net_tstamp.h> so as to allow collecting network timestamps in the
+ * kernel. This file allows tcp_posix.cc to compile on platforms that do not
+ * have <linux/errqueue.h> and <linux/net_tstamp.h>.
+ */
+
+#ifndef GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H
+#define GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H
+
+#include <grpc/support/port_platform.h>
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_POSIX_SOCKET_TCP
+
+#include <sys/types.h>
+#include <time.h>
+
+#ifdef GRPC_LINUX_ERRQUEUE
+#include <linux/errqueue.h>
+#include <linux/net_tstamp.h>
+#include <sys/socket.h>
+#endif /* GRPC_LINUX_ERRQUEUE */
+
+namespace grpc_core {
+
+#ifdef GRPC_LINUX_ERRQUEUE
+
+/* Redefining scm_timestamping in the same way that <linux/errqueue.h> defines
+ * it, so that code compiles on systems that don't have it. */
+struct scm_timestamping {
+ struct timespec ts[3];
+};
+/* Also redefine timestamp types */
+/* The timestamp type for when the driver passed skb to NIC, or HW. */
+constexpr int SCM_TSTAMP_SND = 0;
+/* The timestamp type for when data entered the packet scheduler. */
+constexpr int SCM_TSTAMP_SCHED = 1;
+/* The timestamp type for when data acknowledged by peer. */
+constexpr int SCM_TSTAMP_ACK = 2;
+/* Redefine required constants from <linux/net_tstamp.h> */
+constexpr uint32_t SOF_TIMESTAMPING_TX_SOFTWARE = 1u << 1;
+constexpr uint32_t SOF_TIMESTAMPING_SOFTWARE = 1u << 4;
+constexpr uint32_t SOF_TIMESTAMPING_OPT_ID = 1u << 7;
+constexpr uint32_t SOF_TIMESTAMPING_TX_SCHED = 1u << 8;
+constexpr uint32_t SOF_TIMESTAMPING_TX_ACK = 1u << 9;
+constexpr uint32_t SOF_TIMESTAMPING_OPT_TSONLY = 1u << 11;
+
+constexpr uint32_t kTimestampingSocketOptions = SOF_TIMESTAMPING_SOFTWARE |
+ SOF_TIMESTAMPING_OPT_ID |
+ SOF_TIMESTAMPING_OPT_TSONLY;
+constexpr uint32_t kTimestampingRecordingOptions =
+ SOF_TIMESTAMPING_TX_SCHED | SOF_TIMESTAMPING_TX_SOFTWARE |
+ SOF_TIMESTAMPING_TX_ACK;
+#endif /* GRPC_LINUX_ERRQUEUE */
+
+/* Returns true if kernel is capable of supporting errqueue and timestamping.
+ * Currently allowing only linux kernels above 4.0.0
+ */
+bool kernel_supports_errqueue();
+} // namespace grpc_core
+
+#endif /* GRPC_POSIX_SOCKET_TCP */
+
+#endif /* GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H */
diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h
index 066417b93c..abf96662f5 100644
--- a/src/core/lib/iomgr/port.h
+++ b/src/core/lib/iomgr/port.h
@@ -60,6 +60,11 @@
#define GRPC_HAVE_IP_PKTINFO 1
#define GRPC_HAVE_MSG_NOSIGNAL 1
#define GRPC_HAVE_UNIX_SOCKET 1
+#ifdef LINUX_VERSION_CODE
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
+#define GRPC_LINUX_ERRQUEUE 1
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0) */
+#endif /* LINUX_VERSION_CODE */
#define GRPC_LINUX_MULTIPOLL_WITH_EPOLL 1
#define GRPC_POSIX_FORK 1
#define GRPC_POSIX_HOST_NAME_MAX 1
diff --git a/src/core/lib/iomgr/tcp_client_posix.cc b/src/core/lib/iomgr/tcp_client_posix.cc
index 296ee74311..9c989b7dfe 100644
--- a/src/core/lib/iomgr/tcp_client_posix.cc
+++ b/src/core/lib/iomgr/tcp_client_posix.cc
@@ -279,7 +279,7 @@ grpc_error* grpc_tcp_client_prepare_fd(const grpc_channel_args* channel_args,
}
addr_str = grpc_sockaddr_to_uri(mapped_addr);
gpr_asprintf(&name, "tcp-client:%s", addr_str);
- *fdobj = grpc_fd_create(fd, name, false);
+ *fdobj = grpc_fd_create(fd, name, true);
gpr_free(name);
gpr_free(addr_str);
return GRPC_ERROR_NONE;
diff --git a/src/core/lib/iomgr/tcp_custom.cc b/src/core/lib/iomgr/tcp_custom.cc
index 990e8d632b..e02a1898f2 100644
--- a/src/core/lib/iomgr/tcp_custom.cc
+++ b/src/core/lib/iomgr/tcp_custom.cc
@@ -221,7 +221,7 @@ static void custom_write_callback(grpc_custom_socket* socket,
}
static void endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* write_slices,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
diff --git a/src/core/lib/iomgr/tcp_posix.cc b/src/core/lib/iomgr/tcp_posix.cc
index b53ffbf01c..ac1e919acb 100644
--- a/src/core/lib/iomgr/tcp_posix.cc
+++ b/src/core/lib/iomgr/tcp_posix.cc
@@ -27,7 +27,9 @@
#include <errno.h>
#include <limits.h>
+#include <netinet/in.h>
#include <stdbool.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
@@ -46,6 +48,7 @@
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gpr/useful.h"
+#include "src/core/lib/iomgr/buffer_list.h"
#include "src/core/lib/iomgr/ev_posix.h"
#include "src/core/lib/iomgr/executor.h"
#include "src/core/lib/profiling/timers.h"
@@ -97,17 +100,42 @@ struct grpc_tcp {
grpc_closure read_done_closure;
grpc_closure write_done_closure;
+ grpc_closure error_closure;
char* peer_string;
grpc_resource_user* resource_user;
grpc_resource_user_slice_allocator slice_allocator;
+
+ grpc_core::TracedBuffer* tb_head; /* List of traced buffers */
+ gpr_mu tb_mu; /* Lock for access to list of traced buffers */
+
+ /* grpc_endpoint_write takes an argument which if non-null means that the
+ * transport layer wants the TCP layer to collect timestamps for this write.
+ * This arg is forwarded to the timestamps callback function when the ACK
+ * timestamp is received from the kernel. This arg is a (void *) which allows
+ * users of this API to pass in a pointer to any kind of structure. This
+ * structure could actually be a tag or any book-keeping object that the user
+ * can use to distinguish between different traced writes. The only
+ * requirement from the TCP endpoint layer is that this arg should be non-null
+ * if the user wants timestamps for the write. */
+ void* outgoing_buffer_arg;
+ /* A counter which starts at 0. It is initialized the first time the socket
+ * options for collecting timestamps are set, and is incremented with each
+ * byte sent. */
+ int bytes_counter;
+ bool socket_ts_enabled; /* True if timestamping options are set on the socket
+ */
+ gpr_atm
+ stop_error_notification; /* Set to 1 if we do not want to be notified on
+ errors anymore */
};
struct backup_poller {
gpr_mu* pollset_mu;
grpc_closure run_poller;
};
+
} // namespace
#define BACKUP_POLLER_POLLSET(b) ((grpc_pollset*)((b) + 1))
@@ -302,6 +330,7 @@ static void tcp_free(grpc_tcp* tcp) {
grpc_slice_buffer_destroy_internal(&tcp->last_read_buffer);
grpc_resource_user_unref(tcp->resource_user);
gpr_free(tcp->peer_string);
+ gpr_mu_destroy(&tcp->tb_mu);
gpr_free(tcp);
}
@@ -347,6 +376,10 @@ static void tcp_destroy(grpc_endpoint* ep) {
grpc_network_status_unregister_endpoint(ep);
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
+ if (grpc_event_engine_can_track_errors()) {
+ gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
+ grpc_fd_set_error(tcp->em_fd);
+ }
TCP_UNREF(tcp, "destroy");
}
@@ -513,6 +546,235 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
}
}
+/* A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
+ * of bytes sent. */
+ssize_t tcp_send(int fd, const struct msghdr* msg) {
+ GPR_TIMER_SCOPE("sendmsg", 1);
+ ssize_t sent_length;
+ do {
+ /* TODO(klempner): Cork if this is a partial write */
+ GRPC_STATS_INC_SYSCALL_WRITE();
+ sent_length = sendmsg(fd, msg, SENDMSG_FLAGS);
+ } while (sent_length < 0 && errno == EINTR);
+ return sent_length;
+}
+
+/** This is to be called if outgoing_buffer_arg is not null. On linux platforms,
+ * this will call sendmsg with socket options set to collect timestamps inside
+ * the kernel. On return, sent_length is set to the return value of the sendmsg
+ * call. Returns false if setting the socket options failed. This is not
+ * implemented for non-linux platforms currently, and crashes out.
+ */
+static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
+ size_t sending_length,
+ ssize_t* sent_length, grpc_error** error);
+
+/** The callback function to be invoked when we get an error on the socket. */
+static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error);
+
+#ifdef GRPC_LINUX_ERRQUEUE
+static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
+ size_t sending_length,
+ ssize_t* sent_length,
+ grpc_error** error) {
+ if (!tcp->socket_ts_enabled) {
+ uint32_t opt = grpc_core::kTimestampingSocketOptions;
+ if (setsockopt(tcp->fd, SOL_SOCKET, SO_TIMESTAMPING,
+ static_cast<void*>(&opt), sizeof(opt)) != 0) {
+ *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "setsockopt"), tcp);
+ grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
+ if (grpc_tcp_trace.enabled()) {
+ gpr_log(GPR_ERROR, "Failed to set timestamping options on the socket.");
+ }
+ return false;
+ }
+ tcp->bytes_counter = -1;
+ tcp->socket_ts_enabled = true;
+ }
+ /* Set control message to indicate that you want timestamps. */
+ union {
+ char cmsg_buf[CMSG_SPACE(sizeof(uint32_t))];
+ struct cmsghdr align;
+ } u;
+ cmsghdr* cmsg = reinterpret_cast<cmsghdr*>(u.cmsg_buf);
+ cmsg->cmsg_level = SOL_SOCKET;
+ cmsg->cmsg_type = SO_TIMESTAMPING;
+ cmsg->cmsg_len = CMSG_LEN(sizeof(uint32_t));
+ *reinterpret_cast<int*>(CMSG_DATA(cmsg)) =
+ grpc_core::kTimestampingRecordingOptions;
+ msg->msg_control = u.cmsg_buf;
+ msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
+
+ /* If there was an error on sendmsg the logic in tcp_flush will handle it. */
+ ssize_t length = tcp_send(tcp->fd, msg);
+ *sent_length = length;
+ /* Only save timestamps if all the bytes were taken by sendmsg. */
+ if (sending_length == static_cast<size_t>(length)) {
+ gpr_mu_lock(&tcp->tb_mu);
+ grpc_core::TracedBuffer::AddNewEntry(
+ &tcp->tb_head, static_cast<int>(tcp->bytes_counter + length),
+ tcp->outgoing_buffer_arg);
+ gpr_mu_unlock(&tcp->tb_mu);
+ tcp->outgoing_buffer_arg = nullptr;
+ }
+ return true;
+}
+
+/** Reads \a cmsg to derive timestamps from the control messages. If a valid
+ * timestamp is found, the traced buffer list is updated with this timestamp.
+ * The caller of this function should be looping on the control messages found
+ * in \a msg. \a cmsg should point to the control message that the caller wants
+ * processed.
+ * On return, a pointer to a control message is returned. On the next iteration,
+ * CMSG_NXTHDR(msg, ret_val) should be passed as \a cmsg. */
+struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
+ struct cmsghdr* cmsg) {
+ auto next_cmsg = CMSG_NXTHDR(msg, cmsg);
+ if (next_cmsg == nullptr) {
+ if (grpc_tcp_trace.enabled()) {
+ gpr_log(GPR_ERROR, "Received timestamp without extended error");
+ }
+ return cmsg;
+ }
+
+ if (!(next_cmsg->cmsg_level == SOL_IP || next_cmsg->cmsg_level == SOL_IPV6) ||
+ !(next_cmsg->cmsg_type == IP_RECVERR ||
+ next_cmsg->cmsg_type == IPV6_RECVERR)) {
+ if (grpc_tcp_trace.enabled()) {
+ gpr_log(GPR_ERROR, "Unexpected control message");
+ }
+ return cmsg;
+ }
+
+ auto tss =
+ reinterpret_cast<struct grpc_core::scm_timestamping*>(CMSG_DATA(cmsg));
+ auto serr = reinterpret_cast<struct sock_extended_err*>(CMSG_DATA(next_cmsg));
+ if (serr->ee_errno != ENOMSG ||
+ serr->ee_origin != SO_EE_ORIGIN_TIMESTAMPING) {
+ gpr_log(GPR_ERROR, "Unexpected control message");
+ return cmsg;
+ }
+ /* The error handling can potentially be done on another thread so we need
+ * to protect the traced buffer list. A lock free list might be better. Using
+ * a simple mutex for now. */
+ gpr_mu_lock(&tcp->tb_mu);
+ grpc_core::TracedBuffer::ProcessTimestamp(&tcp->tb_head, serr, tss);
+ gpr_mu_unlock(&tcp->tb_mu);
+ return next_cmsg;
+}
+
+/** For linux platforms, reads the socket's error queue and processes error
+ * messages from the queue. Returns true if all the errors processed were
+ * timestamps. Returns false if any of the errors were not timestamps. For
+ * non-linux platforms, error processing is not used/enabled currently.
+ */
+static bool process_errors(grpc_tcp* tcp) {
+ while (true) {
+ struct iovec iov;
+ iov.iov_base = nullptr;
+ iov.iov_len = 0;
+ struct msghdr msg;
+ msg.msg_name = nullptr;
+ msg.msg_namelen = 0;
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 0;
+ msg.msg_flags = 0;
+
+ union {
+ char rbuf[1024 /*CMSG_SPACE(sizeof(scm_timestamping)) +
+ CMSG_SPACE(sizeof(sock_extended_err) + sizeof(sockaddr_in))*/];
+ struct cmsghdr align;
+ } aligned_buf;
+ memset(&aligned_buf, 0, sizeof(aligned_buf));
+
+ msg.msg_control = aligned_buf.rbuf;
+ msg.msg_controllen = sizeof(aligned_buf.rbuf);
+
+ int r, saved_errno;
+ do {
+ r = recvmsg(tcp->fd, &msg, MSG_ERRQUEUE);
+ saved_errno = errno;
+ } while (r < 0 && saved_errno == EINTR);
+
+ if (r == -1 && saved_errno == EAGAIN) {
+ return true; /* No more errors to process */
+ }
+ if (r == -1) {
+ return false;
+ }
+ if (grpc_tcp_trace.enabled()) {
+ if ((msg.msg_flags & MSG_CTRUNC) == 1) {
+ gpr_log(GPR_INFO, "Error message was truncated.");
+ }
+ }
+
+ if (msg.msg_controllen == 0) {
+ /* There was no control message found. It was probably spurious. */
+ return true;
+ }
+ for (auto cmsg = CMSG_FIRSTHDR(&msg); cmsg && cmsg->cmsg_len;
+ cmsg = CMSG_NXTHDR(&msg, cmsg)) {
+ if (cmsg->cmsg_level != SOL_SOCKET ||
+ cmsg->cmsg_type != SCM_TIMESTAMPING) {
+ /* Got a control message that is not a timestamp. Don't know how to
+ * handle this. */
+ if (grpc_tcp_trace.enabled()) {
+ gpr_log(GPR_INFO,
+ "unknown control message cmsg_level:%d cmsg_type:%d",
+ cmsg->cmsg_level, cmsg->cmsg_type);
+ }
+ return false;
+ }
+ process_timestamp(tcp, &msg, cmsg);
+ }
+ }
+}
+
+static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
+ grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
+ if (grpc_tcp_trace.enabled()) {
+ gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp, grpc_error_string(error));
+ }
+
+ if (error != GRPC_ERROR_NONE ||
+ static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
+ /* We aren't going to register to hear on error anymore, so it is safe to
+ * unref. */
+ grpc_core::TracedBuffer::Shutdown(&tcp->tb_head, GRPC_ERROR_REF(error));
+ TCP_UNREF(tcp, "error-tracking");
+ return;
+ }
+
+ /* We are still interested in collecting timestamps, so let's try reading
+ * them. */
+ if (!process_errors(tcp)) {
+ /* This was not a timestamps error. This was an actual error. Set the
+ * read and write closures to be ready.
+ */
+ grpc_fd_set_readable(tcp->em_fd);
+ grpc_fd_set_writable(tcp->em_fd);
+ }
+ GRPC_CLOSURE_INIT(&tcp->error_closure, tcp_handle_error, tcp,
+ grpc_schedule_on_exec_ctx);
+ grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
+}
+
+#else /* GRPC_LINUX_ERRQUEUE */
+static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
+ size_t sending_length,
+ ssize_t* sent_length,
+ grpc_error** error) {
+ gpr_log(GPR_ERROR, "Write with timestamps not supported for this platform");
+ GPR_ASSERT(0);
+ return false;
+}
+
+static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
+ gpr_log(GPR_ERROR, "Error handling is not supported for this platform");
+ GPR_ASSERT(0);
+}
+#endif /* GRPC_LINUX_ERRQUEUE */
+
/* returns true if done, false if pending; if returning true, *error is set */
#if defined(IOV_MAX) && IOV_MAX < 1000
#define MAX_WRITE_IOVEC IOV_MAX
@@ -557,19 +819,20 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
msg.msg_namelen = 0;
msg.msg_iov = iov;
msg.msg_iovlen = iov_size;
- msg.msg_control = nullptr;
- msg.msg_controllen = 0;
msg.msg_flags = 0;
+ if (tcp->outgoing_buffer_arg != nullptr) {
+ if (!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
+ error))
+ return true; /* something went wrong with timestamps */
+ } else {
+ msg.msg_control = nullptr;
+ msg.msg_controllen = 0;
- GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
- GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
+ GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
+ GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
- GPR_TIMER_SCOPE("sendmsg", 1);
- do {
- /* TODO(klempner): Cork if this is a partial write */
- GRPC_STATS_INC_SYSCALL_WRITE();
- sent_length = sendmsg(tcp->fd, &msg, SENDMSG_FLAGS);
- } while (sent_length < 0 && errno == EINTR);
+ sent_length = tcp_send(tcp->fd, &msg);
+ }
if (sent_length < 0) {
if (errno == EAGAIN) {
@@ -593,6 +856,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
}
GPR_ASSERT(tcp->outgoing_byte_idx == 0);
+ tcp->bytes_counter += sent_length;
trailing = sending_length - static_cast<size_t>(sent_length);
while (trailing > 0) {
size_t slice_length;
@@ -607,7 +871,6 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
trailing -= slice_length;
}
}
-
if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
*error = GRPC_ERROR_NONE;
grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
@@ -640,14 +903,13 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error) {
const char* str = grpc_error_string(error);
gpr_log(GPR_INFO, "write: %s", str);
}
-
GRPC_CLOSURE_SCHED(cb, error);
TCP_UNREF(tcp, "write");
}
}
static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
GPR_TIMER_SCOPE("tcp_write", 0);
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
grpc_error* error = GRPC_ERROR_NONE;
@@ -675,6 +937,10 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
}
tcp->outgoing_buffer = buf;
tcp->outgoing_byte_idx = 0;
+ tcp->outgoing_buffer_arg = arg;
+ if (arg) {
+ GPR_ASSERT(grpc_event_engine_can_track_errors());
+ }
if (!tcp_flush(tcp, &error)) {
TCP_REF(tcp, "write");
@@ -792,6 +1058,8 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
tcp->bytes_read_this_round = 0;
/* Will be set to false by the very first endpoint read function */
tcp->is_first_read = true;
+ tcp->bytes_counter = -1;
+ tcp->socket_ts_enabled = false;
/* paired with unref in grpc_tcp_destroy */
gpr_ref_init(&tcp->refcount, 1);
gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
@@ -803,6 +1071,19 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
/* Tell network status tracker about new endpoint */
grpc_network_status_register_endpoint(&tcp->base);
grpc_resource_quota_unref_internal(resource_quota);
+ gpr_mu_init(&tcp->tb_mu);
+ tcp->tb_head = nullptr;
+ /* Start being notified on errors if event engine can track errors. */
+ if (grpc_event_engine_can_track_errors()) {
+ /* Grab a ref to tcp so that we can safely access the tcp struct when
+ * processing errors. We unref when we no longer want to track errors
+ * separately. */
+ TCP_REF(tcp, "error-tracking");
+ gpr_atm_rel_store(&tcp->stop_error_notification, 0);
+ GRPC_CLOSURE_INIT(&tcp->error_closure, tcp_handle_error, tcp,
+ grpc_schedule_on_exec_ctx);
+ grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
+ }
return &tcp->base;
}
@@ -821,6 +1102,11 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
tcp->release_fd = fd;
tcp->release_fd_cb = done;
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
+ if (grpc_event_engine_can_track_errors()) {
+ /* Stop errors notification. */
+ gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
+ grpc_fd_set_error(tcp->em_fd);
+ }
TCP_UNREF(tcp, "destroy");
}
diff --git a/src/core/lib/iomgr/tcp_posix.h b/src/core/lib/iomgr/tcp_posix.h
index af89bd24db..eff825cb92 100644
--- a/src/core/lib/iomgr/tcp_posix.h
+++ b/src/core/lib/iomgr/tcp_posix.h
@@ -31,7 +31,10 @@
#include <grpc/support/port_platform.h>
+#include "src/core/lib/iomgr/port.h"
+
#include "src/core/lib/debug/trace.h"
+#include "src/core/lib/iomgr/buffer_list.h"
#include "src/core/lib/iomgr/endpoint.h"
#include "src/core/lib/iomgr/ev_posix.h"
diff --git a/src/core/lib/iomgr/tcp_server_posix.cc b/src/core/lib/iomgr/tcp_server_posix.cc
index 8ddf684fea..824db07fbf 100644
--- a/src/core/lib/iomgr/tcp_server_posix.cc
+++ b/src/core/lib/iomgr/tcp_server_posix.cc
@@ -226,7 +226,7 @@ static void on_read(void* arg, grpc_error* err) {
gpr_log(GPR_INFO, "SERVER_CONNECT: incoming connection: %s", addr_str);
}
- grpc_fd* fdobj = grpc_fd_create(fd, name, false);
+ grpc_fd* fdobj = grpc_fd_create(fd, name, true);
read_notifier_pollset =
sp->server->pollsets[static_cast<size_t>(gpr_atm_no_barrier_fetch_add(
@@ -362,7 +362,7 @@ static grpc_error* clone_port(grpc_tcp_listener* listener, unsigned count) {
listener->sibling = sp;
sp->server = listener->server;
sp->fd = fd;
- sp->emfd = grpc_fd_create(fd, name, false);
+ sp->emfd = grpc_fd_create(fd, name, true);
memcpy(&sp->addr, &listener->addr, sizeof(grpc_resolved_address));
sp->port = port;
sp->port_index = listener->port_index;
diff --git a/src/core/lib/iomgr/tcp_server_utils_posix_common.cc b/src/core/lib/iomgr/tcp_server_utils_posix_common.cc
index b9f8145572..9595c028ce 100644
--- a/src/core/lib/iomgr/tcp_server_utils_posix_common.cc
+++ b/src/core/lib/iomgr/tcp_server_utils_posix_common.cc
@@ -105,7 +105,7 @@ static grpc_error* add_socket_to_server(grpc_tcp_server* s, int fd,
s->tail = sp;
sp->server = s;
sp->fd = fd;
- sp->emfd = grpc_fd_create(fd, name, false);
+ sp->emfd = grpc_fd_create(fd, name, true);
memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
sp->port = port;
sp->port_index = port_index;
diff --git a/src/core/lib/iomgr/tcp_windows.cc b/src/core/lib/iomgr/tcp_windows.cc
index b3cb442f18..64c4a56ae9 100644
--- a/src/core/lib/iomgr/tcp_windows.cc
+++ b/src/core/lib/iomgr/tcp_windows.cc
@@ -296,7 +296,7 @@ static void on_write(void* tcpp, grpc_error* error) {
/* Initiates a write. */
static void win_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
grpc_tcp* tcp = (grpc_tcp*)ep;
grpc_winsocket* socket = tcp->socket;
grpc_winsocket_callback_info* info = &socket->write_info;
diff --git a/src/core/lib/iomgr/timer_generic.cc b/src/core/lib/iomgr/timer_generic.cc
index 4294162af7..008d37119a 100644
--- a/src/core/lib/iomgr/timer_generic.cc
+++ b/src/core/lib/iomgr/timer_generic.cc
@@ -291,7 +291,7 @@ static void timer_list_init() {
static void timer_list_shutdown() {
size_t i;
run_some_expired_timers(
- GPR_ATM_MAX, nullptr,
+ GRPC_MILLIS_INF_FUTURE, nullptr,
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Timer list shutdown"));
for (i = 0; i < g_num_shards; i++) {
timer_shard* shard = &g_shards[i];
@@ -714,9 +714,10 @@ static grpc_timer_check_result timer_check(grpc_millis* next) {
#if GPR_ARCH_64
gpr_log(GPR_INFO,
"TIMER CHECK BEGIN: now=%" PRId64 " next=%s tls_min=%" PRId64
- " glob_min=%" PRIdPTR,
+ " glob_min=%" PRId64,
now, next_str, min_timer,
- gpr_atm_no_barrier_load((gpr_atm*)(&g_shared_mutables.min_timer)));
+ static_cast<grpc_millis>(gpr_atm_no_barrier_load(
+ (gpr_atm*)(&g_shared_mutables.min_timer))));
#else
gpr_log(GPR_INFO, "TIMER CHECK BEGIN: now=%" PRId64 " next=%s min=%" PRId64,
now, next_str, min_timer);
diff --git a/src/core/lib/iomgr/udp_server.cc b/src/core/lib/iomgr/udp_server.cc
index bdb2d0e764..3dd7cab855 100644
--- a/src/core/lib/iomgr/udp_server.cc
+++ b/src/core/lib/iomgr/udp_server.cc
@@ -152,7 +152,7 @@ GrpcUdpListener::GrpcUdpListener(grpc_udp_server* server, int fd,
grpc_sockaddr_to_string(&addr_str, addr, 1);
gpr_asprintf(&name, "udp-server-listener:%s", addr_str);
gpr_free(addr_str);
- emfd_ = grpc_fd_create(fd, name, false);
+ emfd_ = grpc_fd_create(fd, name, true);
memcpy(&addr_, addr, sizeof(grpc_resolved_address));
GPR_ASSERT(emfd_);
gpr_free(name);
diff --git a/src/core/lib/security/credentials/jwt/json_token.h b/src/core/lib/security/credentials/jwt/json_token.h
index d0fb4ebd0a..3ed990140d 100644
--- a/src/core/lib/security/credentials/jwt/json_token.h
+++ b/src/core/lib/security/credentials/jwt/json_token.h
@@ -21,6 +21,8 @@
#include <grpc/support/port_platform.h>
+#include "src/core/tsi/grpc_shadow_boringssl.h"
+
#include <grpc/slice.h>
#include <openssl/rsa.h>
diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.cc b/src/core/lib/security/credentials/jwt/jwt_verifier.cc
index 5c47276e32..c7d1b36ff0 100644
--- a/src/core/lib/security/credentials/jwt/jwt_verifier.cc
+++ b/src/core/lib/security/credentials/jwt/jwt_verifier.cc
@@ -18,6 +18,8 @@
#include <grpc/support/port_platform.h>
+#include "src/core/tsi/grpc_shadow_boringssl.h"
+
#include "src/core/lib/security/credentials/jwt/jwt_verifier.h"
#include <limits.h>
diff --git a/src/core/lib/security/transport/secure_endpoint.cc b/src/core/lib/security/transport/secure_endpoint.cc
index 840b2e73bc..f40f969bb7 100644
--- a/src/core/lib/security/transport/secure_endpoint.cc
+++ b/src/core/lib/security/transport/secure_endpoint.cc
@@ -254,7 +254,7 @@ static void flush_write_staging_buffer(secure_endpoint* ep, uint8_t** cur,
}
static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
GPR_TIMER_SCOPE("secure_endpoint.endpoint_write", 0);
unsigned i;
@@ -342,7 +342,7 @@ static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
return;
}
- grpc_endpoint_write(ep->wrapped_ep, &ep->output_buffer, cb);
+ grpc_endpoint_write(ep->wrapped_ep, &ep->output_buffer, cb, arg);
}
static void endpoint_shutdown(grpc_endpoint* secure_ep, grpc_error* why) {
diff --git a/src/core/lib/security/transport/security_handshaker.cc b/src/core/lib/security/transport/security_handshaker.cc
index aff723ed04..d76d582638 100644
--- a/src/core/lib/security/transport/security_handshaker.cc
+++ b/src/core/lib/security/transport/security_handshaker.cc
@@ -259,7 +259,7 @@ static grpc_error* on_handshake_next_done_locked(
grpc_slice_buffer_reset_and_unref_internal(&h->outgoing);
grpc_slice_buffer_add(&h->outgoing, to_send);
grpc_endpoint_write(h->args->endpoint, &h->outgoing,
- &h->on_handshake_data_sent_to_peer);
+ &h->on_handshake_data_sent_to_peer, nullptr);
} else if (handshaker_result == nullptr) {
// There is nothing to send, but need to read from peer.
grpc_endpoint_read(h->args->endpoint, h->args->read_buffer,
diff --git a/src/core/lib/surface/version.cc b/src/core/lib/surface/version.cc
index e92fe2c5a1..a44f9acdc3 100644
--- a/src/core/lib/surface/version.cc
+++ b/src/core/lib/surface/version.cc
@@ -25,4 +25,4 @@
const char* grpc_version_string(void) { return "6.0.0-dev"; }
-const char* grpc_g_stands_for(void) { return "glider"; }
+const char* grpc_g_stands_for(void) { return "gao"; }
diff --git a/src/core/tsi/alts/crypt/aes_gcm.cc b/src/core/tsi/alts/crypt/aes_gcm.cc
index 02b1ac4492..c638ce76ee 100644
--- a/src/core/tsi/alts/crypt/aes_gcm.cc
+++ b/src/core/tsi/alts/crypt/aes_gcm.cc
@@ -18,6 +18,8 @@
#include <grpc/support/port_platform.h>
+#include "src/core/tsi/grpc_shadow_boringssl.h"
+
#include "src/core/tsi/alts/crypt/gsec.h"
#include <openssl/bio.h>
diff --git a/src/core/tsi/grpc_shadow_boringssl.h b/src/core/tsi/grpc_shadow_boringssl.h
new file mode 100644
index 0000000000..074be6d8d9
--- /dev/null
+++ b/src/core/tsi/grpc_shadow_boringssl.h
@@ -0,0 +1,3006 @@
+
+/*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// This file is autogenerated from a template file. Please make
+// modifications to
+// `templates/src/objective-c/tsi/grpc_shadow_boringssl.h.template`
+// instead. This file can be regenerated from the template by running
+// `tools/buildgen/generate_projects.sh`.
+
+#ifndef GRPC_CORE_TSI_GRPC_SHADOW_BORINGSSL_H
+#define GRPC_CORE_TSI_GRPC_SHADOW_BORINGSSL_H
+
+#ifdef GRPC_SHADOW_BORINGSSL_SYMBOLS
+
+#define BIO_f_ssl GRPC_SHADOW_BIO_f_ssl
+#define BIO_set_ssl GRPC_SHADOW_BIO_set_ssl
+#define SSL_CTX_add_client_custom_ext GRPC_SHADOW_SSL_CTX_add_client_custom_ext
+#define SSL_CTX_add_server_custom_ext GRPC_SHADOW_SSL_CTX_add_server_custom_ext
+#define DTLSv1_get_timeout GRPC_SHADOW_DTLSv1_get_timeout
+#define DTLSv1_handle_timeout GRPC_SHADOW_DTLSv1_handle_timeout
+#define DTLSv1_set_initial_timeout_duration GRPC_SHADOW_DTLSv1_set_initial_timeout_duration
+#define SSL_CTX_set_srtp_profiles GRPC_SHADOW_SSL_CTX_set_srtp_profiles
+#define SSL_CTX_set_tlsext_use_srtp GRPC_SHADOW_SSL_CTX_set_tlsext_use_srtp
+#define SSL_get_selected_srtp_profile GRPC_SHADOW_SSL_get_selected_srtp_profile
+#define SSL_get_srtp_profiles GRPC_SHADOW_SSL_get_srtp_profiles
+#define SSL_set_srtp_profiles GRPC_SHADOW_SSL_set_srtp_profiles
+#define SSL_set_tlsext_use_srtp GRPC_SHADOW_SSL_set_tlsext_use_srtp
+#define DTLS_client_method GRPC_SHADOW_DTLS_client_method
+#define DTLS_method GRPC_SHADOW_DTLS_method
+#define DTLS_server_method GRPC_SHADOW_DTLS_server_method
+#define DTLS_with_buffers_method GRPC_SHADOW_DTLS_with_buffers_method
+#define DTLSv1_2_client_method GRPC_SHADOW_DTLSv1_2_client_method
+#define DTLSv1_2_method GRPC_SHADOW_DTLSv1_2_method
+#define DTLSv1_2_server_method GRPC_SHADOW_DTLSv1_2_server_method
+#define DTLSv1_client_method GRPC_SHADOW_DTLSv1_client_method
+#define DTLSv1_method GRPC_SHADOW_DTLSv1_method
+#define DTLSv1_server_method GRPC_SHADOW_DTLSv1_server_method
+#define SSL_SESSION_from_bytes GRPC_SHADOW_SSL_SESSION_from_bytes
+#define SSL_SESSION_to_bytes GRPC_SHADOW_SSL_SESSION_to_bytes
+#define SSL_SESSION_to_bytes_for_ticket GRPC_SHADOW_SSL_SESSION_to_bytes_for_ticket
+#define i2d_SSL_SESSION GRPC_SHADOW_i2d_SSL_SESSION
+#define SSL_CTX_set0_client_CAs GRPC_SHADOW_SSL_CTX_set0_client_CAs
+#define SSL_CTX_set_cert_cb GRPC_SHADOW_SSL_CTX_set_cert_cb
+#define SSL_CTX_set_chain_and_key GRPC_SHADOW_SSL_CTX_set_chain_and_key
+#define SSL_CTX_set_ocsp_response GRPC_SHADOW_SSL_CTX_set_ocsp_response
+#define SSL_CTX_set_signed_cert_timestamp_list GRPC_SHADOW_SSL_CTX_set_signed_cert_timestamp_list
+#define SSL_CTX_use_certificate_ASN1 GRPC_SHADOW_SSL_CTX_use_certificate_ASN1
+#define SSL_get0_peer_certificates GRPC_SHADOW_SSL_get0_peer_certificates
+#define SSL_get0_server_requested_CAs GRPC_SHADOW_SSL_get0_server_requested_CAs
+#define SSL_set0_client_CAs GRPC_SHADOW_SSL_set0_client_CAs
+#define SSL_set_cert_cb GRPC_SHADOW_SSL_set_cert_cb
+#define SSL_set_chain_and_key GRPC_SHADOW_SSL_set_chain_and_key
+#define SSL_set_ocsp_response GRPC_SHADOW_SSL_set_ocsp_response
+#define SSL_set_signed_cert_timestamp_list GRPC_SHADOW_SSL_set_signed_cert_timestamp_list
+#define SSL_use_certificate_ASN1 GRPC_SHADOW_SSL_use_certificate_ASN1
+#define SSL_CIPHER_description GRPC_SHADOW_SSL_CIPHER_description
+#define SSL_CIPHER_get_auth_nid GRPC_SHADOW_SSL_CIPHER_get_auth_nid
+#define SSL_CIPHER_get_bits GRPC_SHADOW_SSL_CIPHER_get_bits
+#define SSL_CIPHER_get_cipher_nid GRPC_SHADOW_SSL_CIPHER_get_cipher_nid
+#define SSL_CIPHER_get_digest_nid GRPC_SHADOW_SSL_CIPHER_get_digest_nid
+#define SSL_CIPHER_get_id GRPC_SHADOW_SSL_CIPHER_get_id
+#define SSL_CIPHER_get_kx_name GRPC_SHADOW_SSL_CIPHER_get_kx_name
+#define SSL_CIPHER_get_kx_nid GRPC_SHADOW_SSL_CIPHER_get_kx_nid
+#define SSL_CIPHER_get_max_version GRPC_SHADOW_SSL_CIPHER_get_max_version
+#define SSL_CIPHER_get_min_version GRPC_SHADOW_SSL_CIPHER_get_min_version
+#define SSL_CIPHER_get_name GRPC_SHADOW_SSL_CIPHER_get_name
+#define SSL_CIPHER_get_prf_nid GRPC_SHADOW_SSL_CIPHER_get_prf_nid
+#define SSL_CIPHER_get_rfc_name GRPC_SHADOW_SSL_CIPHER_get_rfc_name
+#define SSL_CIPHER_get_version GRPC_SHADOW_SSL_CIPHER_get_version
+#define SSL_CIPHER_is_aead GRPC_SHADOW_SSL_CIPHER_is_aead
+#define SSL_CIPHER_is_block_cipher GRPC_SHADOW_SSL_CIPHER_is_block_cipher
+#define SSL_CIPHER_standard_name GRPC_SHADOW_SSL_CIPHER_standard_name
+#define SSL_COMP_add_compression_method GRPC_SHADOW_SSL_COMP_add_compression_method
+#define SSL_COMP_free_compression_methods GRPC_SHADOW_SSL_COMP_free_compression_methods
+#define SSL_COMP_get0_name GRPC_SHADOW_SSL_COMP_get0_name
+#define SSL_COMP_get_compression_methods GRPC_SHADOW_SSL_COMP_get_compression_methods
+#define SSL_COMP_get_id GRPC_SHADOW_SSL_COMP_get_id
+#define SSL_COMP_get_name GRPC_SHADOW_SSL_COMP_get_name
+#define SSL_get_cipher_by_value GRPC_SHADOW_SSL_get_cipher_by_value
+#define SSL_CTX_get_default_passwd_cb GRPC_SHADOW_SSL_CTX_get_default_passwd_cb
+#define SSL_CTX_get_default_passwd_cb_userdata GRPC_SHADOW_SSL_CTX_get_default_passwd_cb_userdata
+#define SSL_CTX_set_default_passwd_cb GRPC_SHADOW_SSL_CTX_set_default_passwd_cb
+#define SSL_CTX_set_default_passwd_cb_userdata GRPC_SHADOW_SSL_CTX_set_default_passwd_cb_userdata
+#define SSL_CTX_use_PrivateKey_file GRPC_SHADOW_SSL_CTX_use_PrivateKey_file
+#define SSL_CTX_use_RSAPrivateKey_file GRPC_SHADOW_SSL_CTX_use_RSAPrivateKey_file
+#define SSL_CTX_use_certificate_chain_file GRPC_SHADOW_SSL_CTX_use_certificate_chain_file
+#define SSL_CTX_use_certificate_file GRPC_SHADOW_SSL_CTX_use_certificate_file
+#define SSL_add_file_cert_subjects_to_stack GRPC_SHADOW_SSL_add_file_cert_subjects_to_stack
+#define SSL_load_client_CA_file GRPC_SHADOW_SSL_load_client_CA_file
+#define SSL_use_PrivateKey_file GRPC_SHADOW_SSL_use_PrivateKey_file
+#define SSL_use_RSAPrivateKey_file GRPC_SHADOW_SSL_use_RSAPrivateKey_file
+#define SSL_use_certificate_file GRPC_SHADOW_SSL_use_certificate_file
+#define SSL_get_curve_name GRPC_SHADOW_SSL_get_curve_name
+#define ERR_load_SSL_strings GRPC_SHADOW_ERR_load_SSL_strings
+#define OPENSSL_init_ssl GRPC_SHADOW_OPENSSL_init_ssl
+#define SSL_CTX_check_private_key GRPC_SHADOW_SSL_CTX_check_private_key
+#define SSL_CTX_cipher_in_group GRPC_SHADOW_SSL_CTX_cipher_in_group
+#define SSL_CTX_clear_mode GRPC_SHADOW_SSL_CTX_clear_mode
+#define SSL_CTX_clear_options GRPC_SHADOW_SSL_CTX_clear_options
+#define SSL_CTX_enable_ocsp_stapling GRPC_SHADOW_SSL_CTX_enable_ocsp_stapling
+#define SSL_CTX_enable_signed_cert_timestamps GRPC_SHADOW_SSL_CTX_enable_signed_cert_timestamps
+#define SSL_CTX_enable_tls_channel_id GRPC_SHADOW_SSL_CTX_enable_tls_channel_id
+#define SSL_CTX_free GRPC_SHADOW_SSL_CTX_free
+#define SSL_CTX_get0_privatekey GRPC_SHADOW_SSL_CTX_get0_privatekey
+#define SSL_CTX_get_ciphers GRPC_SHADOW_SSL_CTX_get_ciphers
+#define SSL_CTX_get_ex_data GRPC_SHADOW_SSL_CTX_get_ex_data
+#define SSL_CTX_get_ex_new_index GRPC_SHADOW_SSL_CTX_get_ex_new_index
+#define SSL_CTX_get_keylog_callback GRPC_SHADOW_SSL_CTX_get_keylog_callback
+#define SSL_CTX_get_max_cert_list GRPC_SHADOW_SSL_CTX_get_max_cert_list
+#define SSL_CTX_get_mode GRPC_SHADOW_SSL_CTX_get_mode
+#define SSL_CTX_get_options GRPC_SHADOW_SSL_CTX_get_options
+#define SSL_CTX_get_quiet_shutdown GRPC_SHADOW_SSL_CTX_get_quiet_shutdown
+#define SSL_CTX_get_read_ahead GRPC_SHADOW_SSL_CTX_get_read_ahead
+#define SSL_CTX_get_session_cache_mode GRPC_SHADOW_SSL_CTX_get_session_cache_mode
+#define SSL_CTX_get_tlsext_ticket_keys GRPC_SHADOW_SSL_CTX_get_tlsext_ticket_keys
+#define SSL_CTX_need_tmp_RSA GRPC_SHADOW_SSL_CTX_need_tmp_RSA
+#define SSL_CTX_new GRPC_SHADOW_SSL_CTX_new
+#define SSL_CTX_sess_accept GRPC_SHADOW_SSL_CTX_sess_accept
+#define SSL_CTX_sess_accept_good GRPC_SHADOW_SSL_CTX_sess_accept_good
+#define SSL_CTX_sess_accept_renegotiate GRPC_SHADOW_SSL_CTX_sess_accept_renegotiate
+#define SSL_CTX_sess_cache_full GRPC_SHADOW_SSL_CTX_sess_cache_full
+#define SSL_CTX_sess_cb_hits GRPC_SHADOW_SSL_CTX_sess_cb_hits
+#define SSL_CTX_sess_connect GRPC_SHADOW_SSL_CTX_sess_connect
+#define SSL_CTX_sess_connect_good GRPC_SHADOW_SSL_CTX_sess_connect_good
+#define SSL_CTX_sess_connect_renegotiate GRPC_SHADOW_SSL_CTX_sess_connect_renegotiate
+#define SSL_CTX_sess_get_cache_size GRPC_SHADOW_SSL_CTX_sess_get_cache_size
+#define SSL_CTX_sess_hits GRPC_SHADOW_SSL_CTX_sess_hits
+#define SSL_CTX_sess_misses GRPC_SHADOW_SSL_CTX_sess_misses
+#define SSL_CTX_sess_number GRPC_SHADOW_SSL_CTX_sess_number
+#define SSL_CTX_sess_set_cache_size GRPC_SHADOW_SSL_CTX_sess_set_cache_size
+#define SSL_CTX_sess_timeouts GRPC_SHADOW_SSL_CTX_sess_timeouts
+#define SSL_CTX_set0_buffer_pool GRPC_SHADOW_SSL_CTX_set0_buffer_pool
+#define SSL_CTX_set1_curves GRPC_SHADOW_SSL_CTX_set1_curves
+#define SSL_CTX_set1_curves_list GRPC_SHADOW_SSL_CTX_set1_curves_list
+#define SSL_CTX_set1_tls_channel_id GRPC_SHADOW_SSL_CTX_set1_tls_channel_id
+#define SSL_CTX_set_allow_unknown_alpn_protos GRPC_SHADOW_SSL_CTX_set_allow_unknown_alpn_protos
+#define SSL_CTX_set_alpn_protos GRPC_SHADOW_SSL_CTX_set_alpn_protos
+#define SSL_CTX_set_alpn_select_cb GRPC_SHADOW_SSL_CTX_set_alpn_select_cb
+#define SSL_CTX_set_cipher_list GRPC_SHADOW_SSL_CTX_set_cipher_list
+#define SSL_CTX_set_current_time_cb GRPC_SHADOW_SSL_CTX_set_current_time_cb
+#define SSL_CTX_set_custom_verify GRPC_SHADOW_SSL_CTX_set_custom_verify
+#define SSL_CTX_set_dos_protection_cb GRPC_SHADOW_SSL_CTX_set_dos_protection_cb
+#define SSL_CTX_set_early_data_enabled GRPC_SHADOW_SSL_CTX_set_early_data_enabled
+#define SSL_CTX_set_ex_data GRPC_SHADOW_SSL_CTX_set_ex_data
+#define SSL_CTX_set_false_start_allowed_without_alpn GRPC_SHADOW_SSL_CTX_set_false_start_allowed_without_alpn
+#define SSL_CTX_set_grease_enabled GRPC_SHADOW_SSL_CTX_set_grease_enabled
+#define SSL_CTX_set_keylog_callback GRPC_SHADOW_SSL_CTX_set_keylog_callback
+#define SSL_CTX_set_max_cert_list GRPC_SHADOW_SSL_CTX_set_max_cert_list
+#define SSL_CTX_set_max_send_fragment GRPC_SHADOW_SSL_CTX_set_max_send_fragment
+#define SSL_CTX_set_mode GRPC_SHADOW_SSL_CTX_set_mode
+#define SSL_CTX_set_msg_callback GRPC_SHADOW_SSL_CTX_set_msg_callback
+#define SSL_CTX_set_msg_callback_arg GRPC_SHADOW_SSL_CTX_set_msg_callback_arg
+#define SSL_CTX_set_next_proto_select_cb GRPC_SHADOW_SSL_CTX_set_next_proto_select_cb
+#define SSL_CTX_set_next_protos_advertised_cb GRPC_SHADOW_SSL_CTX_set_next_protos_advertised_cb
+#define SSL_CTX_set_options GRPC_SHADOW_SSL_CTX_set_options
+#define SSL_CTX_set_psk_client_callback GRPC_SHADOW_SSL_CTX_set_psk_client_callback
+#define SSL_CTX_set_psk_server_callback GRPC_SHADOW_SSL_CTX_set_psk_server_callback
+#define SSL_CTX_set_quiet_shutdown GRPC_SHADOW_SSL_CTX_set_quiet_shutdown
+#define SSL_CTX_set_read_ahead GRPC_SHADOW_SSL_CTX_set_read_ahead
+#define SSL_CTX_set_retain_only_sha256_of_client_certs GRPC_SHADOW_SSL_CTX_set_retain_only_sha256_of_client_certs
+#define SSL_CTX_set_select_certificate_cb GRPC_SHADOW_SSL_CTX_set_select_certificate_cb
+#define SSL_CTX_set_session_cache_mode GRPC_SHADOW_SSL_CTX_set_session_cache_mode
+#define SSL_CTX_set_session_id_context GRPC_SHADOW_SSL_CTX_set_session_id_context
+#define SSL_CTX_set_strict_cipher_list GRPC_SHADOW_SSL_CTX_set_strict_cipher_list
+#define SSL_CTX_set_ticket_aead_method GRPC_SHADOW_SSL_CTX_set_ticket_aead_method
+#define SSL_CTX_set_tls13_variant GRPC_SHADOW_SSL_CTX_set_tls13_variant
+#define SSL_CTX_set_tls_channel_id_enabled GRPC_SHADOW_SSL_CTX_set_tls_channel_id_enabled
+#define SSL_CTX_set_tlsext_servername_arg GRPC_SHADOW_SSL_CTX_set_tlsext_servername_arg
+#define SSL_CTX_set_tlsext_servername_callback GRPC_SHADOW_SSL_CTX_set_tlsext_servername_callback
+#define SSL_CTX_set_tlsext_ticket_key_cb GRPC_SHADOW_SSL_CTX_set_tlsext_ticket_key_cb
+#define SSL_CTX_set_tlsext_ticket_keys GRPC_SHADOW_SSL_CTX_set_tlsext_ticket_keys
+#define SSL_CTX_set_tmp_dh GRPC_SHADOW_SSL_CTX_set_tmp_dh
+#define SSL_CTX_set_tmp_dh_callback GRPC_SHADOW_SSL_CTX_set_tmp_dh_callback
+#define SSL_CTX_set_tmp_ecdh GRPC_SHADOW_SSL_CTX_set_tmp_ecdh
+#define SSL_CTX_set_tmp_rsa GRPC_SHADOW_SSL_CTX_set_tmp_rsa
+#define SSL_CTX_set_tmp_rsa_callback GRPC_SHADOW_SSL_CTX_set_tmp_rsa_callback
+#define SSL_CTX_up_ref GRPC_SHADOW_SSL_CTX_up_ref
+#define SSL_CTX_use_psk_identity_hint GRPC_SHADOW_SSL_CTX_use_psk_identity_hint
+#define SSL_accept GRPC_SHADOW_SSL_accept
+#define SSL_cache_hit GRPC_SHADOW_SSL_cache_hit
+#define SSL_certs_clear GRPC_SHADOW_SSL_certs_clear
+#define SSL_check_private_key GRPC_SHADOW_SSL_check_private_key
+#define SSL_clear GRPC_SHADOW_SSL_clear
+#define SSL_clear_mode GRPC_SHADOW_SSL_clear_mode
+#define SSL_clear_options GRPC_SHADOW_SSL_clear_options
+#define SSL_connect GRPC_SHADOW_SSL_connect
+#define SSL_cutthrough_complete GRPC_SHADOW_SSL_cutthrough_complete
+#define SSL_do_handshake GRPC_SHADOW_SSL_do_handshake
+#define SSL_dummy_pq_padding_used GRPC_SHADOW_SSL_dummy_pq_padding_used
+#define SSL_early_data_accepted GRPC_SHADOW_SSL_early_data_accepted
+#define SSL_enable_ocsp_stapling GRPC_SHADOW_SSL_enable_ocsp_stapling
+#define SSL_enable_signed_cert_timestamps GRPC_SHADOW_SSL_enable_signed_cert_timestamps
+#define SSL_enable_tls_channel_id GRPC_SHADOW_SSL_enable_tls_channel_id
+#define SSL_free GRPC_SHADOW_SSL_free
+#define SSL_get0_alpn_selected GRPC_SHADOW_SSL_get0_alpn_selected
+#define SSL_get0_certificate_types GRPC_SHADOW_SSL_get0_certificate_types
+#define SSL_get0_next_proto_negotiated GRPC_SHADOW_SSL_get0_next_proto_negotiated
+#define SSL_get0_ocsp_response GRPC_SHADOW_SSL_get0_ocsp_response
+#define SSL_get0_session_id_context GRPC_SHADOW_SSL_get0_session_id_context
+#define SSL_get0_signed_cert_timestamp_list GRPC_SHADOW_SSL_get0_signed_cert_timestamp_list
+#define SSL_get_SSL_CTX GRPC_SHADOW_SSL_get_SSL_CTX
+#define SSL_get_cipher_list GRPC_SHADOW_SSL_get_cipher_list
+#define SSL_get_ciphers GRPC_SHADOW_SSL_get_ciphers
+#define SSL_get_client_random GRPC_SHADOW_SSL_get_client_random
+#define SSL_get_current_cipher GRPC_SHADOW_SSL_get_current_cipher
+#define SSL_get_current_compression GRPC_SHADOW_SSL_get_current_compression
+#define SSL_get_current_expansion GRPC_SHADOW_SSL_get_current_expansion
+#define SSL_get_curve_id GRPC_SHADOW_SSL_get_curve_id
+#define SSL_get_default_timeout GRPC_SHADOW_SSL_get_default_timeout
+#define SSL_get_error GRPC_SHADOW_SSL_get_error
+#define SSL_get_ex_data GRPC_SHADOW_SSL_get_ex_data
+#define SSL_get_ex_new_index GRPC_SHADOW_SSL_get_ex_new_index
+#define SSL_get_extms_support GRPC_SHADOW_SSL_get_extms_support
+#define SSL_get_fd GRPC_SHADOW_SSL_get_fd
+#define SSL_get_finished GRPC_SHADOW_SSL_get_finished
+#define SSL_get_info_callback GRPC_SHADOW_SSL_get_info_callback
+#define SSL_get_ivs GRPC_SHADOW_SSL_get_ivs
+#define SSL_get_max_cert_list GRPC_SHADOW_SSL_get_max_cert_list
+#define SSL_get_mode GRPC_SHADOW_SSL_get_mode
+#define SSL_get_negotiated_token_binding_param GRPC_SHADOW_SSL_get_negotiated_token_binding_param
+#define SSL_get_options GRPC_SHADOW_SSL_get_options
+#define SSL_get_peer_finished GRPC_SHADOW_SSL_get_peer_finished
+#define SSL_get_peer_quic_transport_params GRPC_SHADOW_SSL_get_peer_quic_transport_params
+#define SSL_get_peer_signature_algorithm GRPC_SHADOW_SSL_get_peer_signature_algorithm
+#define SSL_get_pending_cipher GRPC_SHADOW_SSL_get_pending_cipher
+#define SSL_get_privatekey GRPC_SHADOW_SSL_get_privatekey
+#define SSL_get_psk_identity GRPC_SHADOW_SSL_get_psk_identity
+#define SSL_get_psk_identity_hint GRPC_SHADOW_SSL_get_psk_identity_hint
+#define SSL_get_quiet_shutdown GRPC_SHADOW_SSL_get_quiet_shutdown
+#define SSL_get_rbio GRPC_SHADOW_SSL_get_rbio
+#define SSL_get_read_ahead GRPC_SHADOW_SSL_get_read_ahead
+#define SSL_get_read_sequence GRPC_SHADOW_SSL_get_read_sequence
+#define SSL_get_rfd GRPC_SHADOW_SSL_get_rfd
+#define SSL_get_secure_renegotiation_support GRPC_SHADOW_SSL_get_secure_renegotiation_support
+#define SSL_get_server_random GRPC_SHADOW_SSL_get_server_random
+#define SSL_get_server_tmp_key GRPC_SHADOW_SSL_get_server_tmp_key
+#define SSL_get_servername GRPC_SHADOW_SSL_get_servername
+#define SSL_get_servername_type GRPC_SHADOW_SSL_get_servername_type
+#define SSL_get_shared_ciphers GRPC_SHADOW_SSL_get_shared_ciphers
+#define SSL_get_shutdown GRPC_SHADOW_SSL_get_shutdown
+#define SSL_get_structure_sizes GRPC_SHADOW_SSL_get_structure_sizes
+#define SSL_get_ticket_age_skew GRPC_SHADOW_SSL_get_ticket_age_skew
+#define SSL_get_tls_channel_id GRPC_SHADOW_SSL_get_tls_channel_id
+#define SSL_get_tls_unique GRPC_SHADOW_SSL_get_tls_unique
+#define SSL_get_verify_mode GRPC_SHADOW_SSL_get_verify_mode
+#define SSL_get_wbio GRPC_SHADOW_SSL_get_wbio
+#define SSL_get_wfd GRPC_SHADOW_SSL_get_wfd
+#define SSL_get_write_sequence GRPC_SHADOW_SSL_get_write_sequence
+#define SSL_in_early_data GRPC_SHADOW_SSL_in_early_data
+#define SSL_in_false_start GRPC_SHADOW_SSL_in_false_start
+#define SSL_in_init GRPC_SHADOW_SSL_in_init
+#define SSL_is_draft_downgrade GRPC_SHADOW_SSL_is_draft_downgrade
+#define SSL_is_dtls GRPC_SHADOW_SSL_is_dtls
+#define SSL_is_init_finished GRPC_SHADOW_SSL_is_init_finished
+#define SSL_is_server GRPC_SHADOW_SSL_is_server
+#define SSL_is_token_binding_negotiated GRPC_SHADOW_SSL_is_token_binding_negotiated
+#define SSL_library_init GRPC_SHADOW_SSL_library_init
+#define SSL_load_error_strings GRPC_SHADOW_SSL_load_error_strings
+#define SSL_need_tmp_RSA GRPC_SHADOW_SSL_need_tmp_RSA
+#define SSL_new GRPC_SHADOW_SSL_new
+#define SSL_num_renegotiations GRPC_SHADOW_SSL_num_renegotiations
+#define SSL_peek GRPC_SHADOW_SSL_peek
+#define SSL_pending GRPC_SHADOW_SSL_pending
+#define SSL_read GRPC_SHADOW_SSL_read
+#define SSL_renegotiate GRPC_SHADOW_SSL_renegotiate
+#define SSL_renegotiate_pending GRPC_SHADOW_SSL_renegotiate_pending
+#define SSL_reset_early_data_reject GRPC_SHADOW_SSL_reset_early_data_reject
+#define SSL_select_next_proto GRPC_SHADOW_SSL_select_next_proto
+#define SSL_send_fatal_alert GRPC_SHADOW_SSL_send_fatal_alert
+#define SSL_session_reused GRPC_SHADOW_SSL_session_reused
+#define SSL_set0_rbio GRPC_SHADOW_SSL_set0_rbio
+#define SSL_set0_wbio GRPC_SHADOW_SSL_set0_wbio
+#define SSL_set1_curves GRPC_SHADOW_SSL_set1_curves
+#define SSL_set1_curves_list GRPC_SHADOW_SSL_set1_curves_list
+#define SSL_set1_tls_channel_id GRPC_SHADOW_SSL_set1_tls_channel_id
+#define SSL_set_SSL_CTX GRPC_SHADOW_SSL_set_SSL_CTX
+#define SSL_set_accept_state GRPC_SHADOW_SSL_set_accept_state
+#define SSL_set_alpn_protos GRPC_SHADOW_SSL_set_alpn_protos
+#define SSL_set_bio GRPC_SHADOW_SSL_set_bio
+#define SSL_set_cipher_list GRPC_SHADOW_SSL_set_cipher_list
+#define SSL_set_connect_state GRPC_SHADOW_SSL_set_connect_state
+#define SSL_set_custom_verify GRPC_SHADOW_SSL_set_custom_verify
+#define SSL_set_dummy_pq_padding_size GRPC_SHADOW_SSL_set_dummy_pq_padding_size
+#define SSL_set_early_data_enabled GRPC_SHADOW_SSL_set_early_data_enabled
+#define SSL_set_ex_data GRPC_SHADOW_SSL_set_ex_data
+#define SSL_set_fd GRPC_SHADOW_SSL_set_fd
+#define SSL_set_info_callback GRPC_SHADOW_SSL_set_info_callback
+#define SSL_set_max_cert_list GRPC_SHADOW_SSL_set_max_cert_list
+#define SSL_set_max_send_fragment GRPC_SHADOW_SSL_set_max_send_fragment
+#define SSL_set_mode GRPC_SHADOW_SSL_set_mode
+#define SSL_set_msg_callback GRPC_SHADOW_SSL_set_msg_callback
+#define SSL_set_msg_callback_arg GRPC_SHADOW_SSL_set_msg_callback_arg
+#define SSL_set_mtu GRPC_SHADOW_SSL_set_mtu
+#define SSL_set_options GRPC_SHADOW_SSL_set_options
+#define SSL_set_psk_client_callback GRPC_SHADOW_SSL_set_psk_client_callback
+#define SSL_set_psk_server_callback GRPC_SHADOW_SSL_set_psk_server_callback
+#define SSL_set_quic_transport_params GRPC_SHADOW_SSL_set_quic_transport_params
+#define SSL_set_quiet_shutdown GRPC_SHADOW_SSL_set_quiet_shutdown
+#define SSL_set_read_ahead GRPC_SHADOW_SSL_set_read_ahead
+#define SSL_set_renegotiate_mode GRPC_SHADOW_SSL_set_renegotiate_mode
+#define SSL_set_retain_only_sha256_of_client_certs GRPC_SHADOW_SSL_set_retain_only_sha256_of_client_certs
+#define SSL_set_rfd GRPC_SHADOW_SSL_set_rfd
+#define SSL_set_session_id_context GRPC_SHADOW_SSL_set_session_id_context
+#define SSL_set_shutdown GRPC_SHADOW_SSL_set_shutdown
+#define SSL_set_state GRPC_SHADOW_SSL_set_state
+#define SSL_set_strict_cipher_list GRPC_SHADOW_SSL_set_strict_cipher_list
+#define SSL_set_tls13_variant GRPC_SHADOW_SSL_set_tls13_variant
+#define SSL_set_tls_channel_id_enabled GRPC_SHADOW_SSL_set_tls_channel_id_enabled
+#define SSL_set_tlsext_host_name GRPC_SHADOW_SSL_set_tlsext_host_name
+#define SSL_set_tmp_dh GRPC_SHADOW_SSL_set_tmp_dh
+#define SSL_set_tmp_dh_callback GRPC_SHADOW_SSL_set_tmp_dh_callback
+#define SSL_set_tmp_ecdh GRPC_SHADOW_SSL_set_tmp_ecdh
+#define SSL_set_tmp_rsa GRPC_SHADOW_SSL_set_tmp_rsa
+#define SSL_set_tmp_rsa_callback GRPC_SHADOW_SSL_set_tmp_rsa_callback
+#define SSL_set_token_binding_params GRPC_SHADOW_SSL_set_token_binding_params
+#define SSL_set_wfd GRPC_SHADOW_SSL_set_wfd
+#define SSL_shutdown GRPC_SHADOW_SSL_shutdown
+#define SSL_state GRPC_SHADOW_SSL_state
+#define SSL_total_renegotiations GRPC_SHADOW_SSL_total_renegotiations
+#define SSL_use_psk_identity_hint GRPC_SHADOW_SSL_use_psk_identity_hint
+#define SSL_want GRPC_SHADOW_SSL_want
+#define SSL_write GRPC_SHADOW_SSL_write
+#define SSL_CTX_set_private_key_method GRPC_SHADOW_SSL_CTX_set_private_key_method
+#define SSL_CTX_set_signing_algorithm_prefs GRPC_SHADOW_SSL_CTX_set_signing_algorithm_prefs
+#define SSL_CTX_set_verify_algorithm_prefs GRPC_SHADOW_SSL_CTX_set_verify_algorithm_prefs
+#define SSL_CTX_use_PrivateKey GRPC_SHADOW_SSL_CTX_use_PrivateKey
+#define SSL_CTX_use_PrivateKey_ASN1 GRPC_SHADOW_SSL_CTX_use_PrivateKey_ASN1
+#define SSL_CTX_use_RSAPrivateKey GRPC_SHADOW_SSL_CTX_use_RSAPrivateKey
+#define SSL_CTX_use_RSAPrivateKey_ASN1 GRPC_SHADOW_SSL_CTX_use_RSAPrivateKey_ASN1
+#define SSL_get_signature_algorithm_digest GRPC_SHADOW_SSL_get_signature_algorithm_digest
+#define SSL_get_signature_algorithm_key_type GRPC_SHADOW_SSL_get_signature_algorithm_key_type
+#define SSL_get_signature_algorithm_name GRPC_SHADOW_SSL_get_signature_algorithm_name
+#define SSL_is_signature_algorithm_rsa_pss GRPC_SHADOW_SSL_is_signature_algorithm_rsa_pss
+#define SSL_set_private_key_method GRPC_SHADOW_SSL_set_private_key_method
+#define SSL_set_signing_algorithm_prefs GRPC_SHADOW_SSL_set_signing_algorithm_prefs
+#define SSL_use_PrivateKey GRPC_SHADOW_SSL_use_PrivateKey
+#define SSL_use_PrivateKey_ASN1 GRPC_SHADOW_SSL_use_PrivateKey_ASN1
+#define SSL_use_RSAPrivateKey GRPC_SHADOW_SSL_use_RSAPrivateKey
+#define SSL_use_RSAPrivateKey_ASN1 GRPC_SHADOW_SSL_use_RSAPrivateKey_ASN1
+#define SSL_CTX_add_session GRPC_SHADOW_SSL_CTX_add_session
+#define SSL_CTX_flush_sessions GRPC_SHADOW_SSL_CTX_flush_sessions
+#define SSL_CTX_get_channel_id_cb GRPC_SHADOW_SSL_CTX_get_channel_id_cb
+#define SSL_CTX_get_info_callback GRPC_SHADOW_SSL_CTX_get_info_callback
+#define SSL_CTX_get_timeout GRPC_SHADOW_SSL_CTX_get_timeout
+#define SSL_CTX_remove_session GRPC_SHADOW_SSL_CTX_remove_session
+#define SSL_CTX_sess_get_get_cb GRPC_SHADOW_SSL_CTX_sess_get_get_cb
+#define SSL_CTX_sess_get_new_cb GRPC_SHADOW_SSL_CTX_sess_get_new_cb
+#define SSL_CTX_sess_get_remove_cb GRPC_SHADOW_SSL_CTX_sess_get_remove_cb
+#define SSL_CTX_sess_set_get_cb GRPC_SHADOW_SSL_CTX_sess_set_get_cb
+#define SSL_CTX_sess_set_new_cb GRPC_SHADOW_SSL_CTX_sess_set_new_cb
+#define SSL_CTX_sess_set_remove_cb GRPC_SHADOW_SSL_CTX_sess_set_remove_cb
+#define SSL_CTX_set_channel_id_cb GRPC_SHADOW_SSL_CTX_set_channel_id_cb
+#define SSL_CTX_set_info_callback GRPC_SHADOW_SSL_CTX_set_info_callback
+#define SSL_CTX_set_session_psk_dhe_timeout GRPC_SHADOW_SSL_CTX_set_session_psk_dhe_timeout
+#define SSL_CTX_set_timeout GRPC_SHADOW_SSL_CTX_set_timeout
+#define SSL_SESSION_free GRPC_SHADOW_SSL_SESSION_free
+#define SSL_SESSION_get0_peer GRPC_SHADOW_SSL_SESSION_get0_peer
+#define SSL_SESSION_get0_ticket GRPC_SHADOW_SSL_SESSION_get0_ticket
+#define SSL_SESSION_get_ex_data GRPC_SHADOW_SSL_SESSION_get_ex_data
+#define SSL_SESSION_get_ex_new_index GRPC_SHADOW_SSL_SESSION_get_ex_new_index
+#define SSL_SESSION_get_id GRPC_SHADOW_SSL_SESSION_get_id
+#define SSL_SESSION_get_master_key GRPC_SHADOW_SSL_SESSION_get_master_key
+#define SSL_SESSION_get_ticket_lifetime_hint GRPC_SHADOW_SSL_SESSION_get_ticket_lifetime_hint
+#define SSL_SESSION_get_time GRPC_SHADOW_SSL_SESSION_get_time
+#define SSL_SESSION_get_timeout GRPC_SHADOW_SSL_SESSION_get_timeout
+#define SSL_SESSION_has_ticket GRPC_SHADOW_SSL_SESSION_has_ticket
+#define SSL_SESSION_is_resumable GRPC_SHADOW_SSL_SESSION_is_resumable
+#define SSL_SESSION_new GRPC_SHADOW_SSL_SESSION_new
+#define SSL_SESSION_set1_id_context GRPC_SHADOW_SSL_SESSION_set1_id_context
+#define SSL_SESSION_set_ex_data GRPC_SHADOW_SSL_SESSION_set_ex_data
+#define SSL_SESSION_set_time GRPC_SHADOW_SSL_SESSION_set_time
+#define SSL_SESSION_set_timeout GRPC_SHADOW_SSL_SESSION_set_timeout
+#define SSL_SESSION_should_be_single_use GRPC_SHADOW_SSL_SESSION_should_be_single_use
+#define SSL_SESSION_up_ref GRPC_SHADOW_SSL_SESSION_up_ref
+#define SSL_get1_session GRPC_SHADOW_SSL_get1_session
+#define SSL_get_session GRPC_SHADOW_SSL_get_session
+#define SSL_magic_pending_session_ptr GRPC_SHADOW_SSL_magic_pending_session_ptr
+#define SSL_set_session GRPC_SHADOW_SSL_set_session
+#define SSL_alert_desc_string GRPC_SHADOW_SSL_alert_desc_string
+#define SSL_alert_desc_string_long GRPC_SHADOW_SSL_alert_desc_string_long
+#define SSL_alert_type_string GRPC_SHADOW_SSL_alert_type_string
+#define SSL_alert_type_string_long GRPC_SHADOW_SSL_alert_type_string_long
+#define SSL_state_string GRPC_SHADOW_SSL_state_string
+#define SSL_state_string_long GRPC_SHADOW_SSL_state_string_long
+#define SSL_CTX_set_max_proto_version GRPC_SHADOW_SSL_CTX_set_max_proto_version
+#define SSL_CTX_set_min_proto_version GRPC_SHADOW_SSL_CTX_set_min_proto_version
+#define SSL_SESSION_get_protocol_version GRPC_SHADOW_SSL_SESSION_get_protocol_version
+#define SSL_SESSION_get_version GRPC_SHADOW_SSL_SESSION_get_version
+#define SSL_SESSION_set_protocol_version GRPC_SHADOW_SSL_SESSION_set_protocol_version
+#define SSL_get_version GRPC_SHADOW_SSL_get_version
+#define SSL_set_max_proto_version GRPC_SHADOW_SSL_set_max_proto_version
+#define SSL_set_min_proto_version GRPC_SHADOW_SSL_set_min_proto_version
+#define SSL_version GRPC_SHADOW_SSL_version
+#define PEM_read_SSL_SESSION GRPC_SHADOW_PEM_read_SSL_SESSION
+#define PEM_read_bio_SSL_SESSION GRPC_SHADOW_PEM_read_bio_SSL_SESSION
+#define PEM_write_SSL_SESSION GRPC_SHADOW_PEM_write_SSL_SESSION
+#define PEM_write_bio_SSL_SESSION GRPC_SHADOW_PEM_write_bio_SSL_SESSION
+#define SSL_CTX_add0_chain_cert GRPC_SHADOW_SSL_CTX_add0_chain_cert
+#define SSL_CTX_add1_chain_cert GRPC_SHADOW_SSL_CTX_add1_chain_cert
+#define SSL_CTX_add_client_CA GRPC_SHADOW_SSL_CTX_add_client_CA
+#define SSL_CTX_add_extra_chain_cert GRPC_SHADOW_SSL_CTX_add_extra_chain_cert
+#define SSL_CTX_clear_chain_certs GRPC_SHADOW_SSL_CTX_clear_chain_certs
+#define SSL_CTX_clear_extra_chain_certs GRPC_SHADOW_SSL_CTX_clear_extra_chain_certs
+#define SSL_CTX_get0_certificate GRPC_SHADOW_SSL_CTX_get0_certificate
+#define SSL_CTX_get0_chain_certs GRPC_SHADOW_SSL_CTX_get0_chain_certs
+#define SSL_CTX_get0_param GRPC_SHADOW_SSL_CTX_get0_param
+#define SSL_CTX_get_cert_store GRPC_SHADOW_SSL_CTX_get_cert_store
+#define SSL_CTX_get_client_CA_list GRPC_SHADOW_SSL_CTX_get_client_CA_list
+#define SSL_CTX_get_extra_chain_certs GRPC_SHADOW_SSL_CTX_get_extra_chain_certs
+#define SSL_CTX_get_verify_callback GRPC_SHADOW_SSL_CTX_get_verify_callback
+#define SSL_CTX_get_verify_depth GRPC_SHADOW_SSL_CTX_get_verify_depth
+#define SSL_CTX_get_verify_mode GRPC_SHADOW_SSL_CTX_get_verify_mode
+#define SSL_CTX_load_verify_locations GRPC_SHADOW_SSL_CTX_load_verify_locations
+#define SSL_CTX_set0_chain GRPC_SHADOW_SSL_CTX_set0_chain
+#define SSL_CTX_set0_verify_cert_store GRPC_SHADOW_SSL_CTX_set0_verify_cert_store
+#define SSL_CTX_set1_chain GRPC_SHADOW_SSL_CTX_set1_chain
+#define SSL_CTX_set1_param GRPC_SHADOW_SSL_CTX_set1_param
+#define SSL_CTX_set1_verify_cert_store GRPC_SHADOW_SSL_CTX_set1_verify_cert_store
+#define SSL_CTX_set_cert_store GRPC_SHADOW_SSL_CTX_set_cert_store
+#define SSL_CTX_set_cert_verify_callback GRPC_SHADOW_SSL_CTX_set_cert_verify_callback
+#define SSL_CTX_set_client_CA_list GRPC_SHADOW_SSL_CTX_set_client_CA_list
+#define SSL_CTX_set_client_cert_cb GRPC_SHADOW_SSL_CTX_set_client_cert_cb
+#define SSL_CTX_set_default_verify_paths GRPC_SHADOW_SSL_CTX_set_default_verify_paths
+#define SSL_CTX_set_purpose GRPC_SHADOW_SSL_CTX_set_purpose
+#define SSL_CTX_set_trust GRPC_SHADOW_SSL_CTX_set_trust
+#define SSL_CTX_set_verify GRPC_SHADOW_SSL_CTX_set_verify
+#define SSL_CTX_set_verify_depth GRPC_SHADOW_SSL_CTX_set_verify_depth
+#define SSL_CTX_use_certificate GRPC_SHADOW_SSL_CTX_use_certificate
+#define SSL_add0_chain_cert GRPC_SHADOW_SSL_add0_chain_cert
+#define SSL_add1_chain_cert GRPC_SHADOW_SSL_add1_chain_cert
+#define SSL_add_client_CA GRPC_SHADOW_SSL_add_client_CA
+#define SSL_alert_from_verify_result GRPC_SHADOW_SSL_alert_from_verify_result
+#define SSL_clear_chain_certs GRPC_SHADOW_SSL_clear_chain_certs
+#define SSL_dup_CA_list GRPC_SHADOW_SSL_dup_CA_list
+#define SSL_get0_chain_certs GRPC_SHADOW_SSL_get0_chain_certs
+#define SSL_get0_param GRPC_SHADOW_SSL_get0_param
+#define SSL_get_certificate GRPC_SHADOW_SSL_get_certificate
+#define SSL_get_client_CA_list GRPC_SHADOW_SSL_get_client_CA_list
+#define SSL_get_ex_data_X509_STORE_CTX_idx GRPC_SHADOW_SSL_get_ex_data_X509_STORE_CTX_idx
+#define SSL_get_peer_cert_chain GRPC_SHADOW_SSL_get_peer_cert_chain
+#define SSL_get_peer_certificate GRPC_SHADOW_SSL_get_peer_certificate
+#define SSL_get_peer_full_cert_chain GRPC_SHADOW_SSL_get_peer_full_cert_chain
+#define SSL_get_verify_callback GRPC_SHADOW_SSL_get_verify_callback
+#define SSL_get_verify_depth GRPC_SHADOW_SSL_get_verify_depth
+#define SSL_get_verify_result GRPC_SHADOW_SSL_get_verify_result
+#define SSL_set0_chain GRPC_SHADOW_SSL_set0_chain
+#define SSL_set0_verify_cert_store GRPC_SHADOW_SSL_set0_verify_cert_store
+#define SSL_set1_chain GRPC_SHADOW_SSL_set1_chain
+#define SSL_set1_param GRPC_SHADOW_SSL_set1_param
+#define SSL_set1_verify_cert_store GRPC_SHADOW_SSL_set1_verify_cert_store
+#define SSL_set_client_CA_list GRPC_SHADOW_SSL_set_client_CA_list
+#define SSL_set_purpose GRPC_SHADOW_SSL_set_purpose
+#define SSL_set_trust GRPC_SHADOW_SSL_set_trust
+#define SSL_set_verify GRPC_SHADOW_SSL_set_verify
+#define SSL_set_verify_depth GRPC_SHADOW_SSL_set_verify_depth
+#define SSL_set_verify_result GRPC_SHADOW_SSL_set_verify_result
+#define SSL_use_certificate GRPC_SHADOW_SSL_use_certificate
+#define d2i_SSL_SESSION GRPC_SHADOW_d2i_SSL_SESSION
+#define d2i_SSL_SESSION_bio GRPC_SHADOW_d2i_SSL_SESSION_bio
+#define i2d_SSL_SESSION_bio GRPC_SHADOW_i2d_SSL_SESSION_bio
+#define SSL_export_early_keying_material GRPC_SHADOW_SSL_export_early_keying_material
+#define SSL_export_keying_material GRPC_SHADOW_SSL_export_keying_material
+#define SSL_generate_key_block GRPC_SHADOW_SSL_generate_key_block
+#define SSL_get_key_block_len GRPC_SHADOW_SSL_get_key_block_len
+#define SSL_CTX_set_ed25519_enabled GRPC_SHADOW_SSL_CTX_set_ed25519_enabled
+#define SSL_early_callback_ctx_extension_get GRPC_SHADOW_SSL_early_callback_ctx_extension_get
+#define SSL_extension_supported GRPC_SHADOW_SSL_extension_supported
+#define SSLv23_client_method GRPC_SHADOW_SSLv23_client_method
+#define SSLv23_method GRPC_SHADOW_SSLv23_method
+#define SSLv23_server_method GRPC_SHADOW_SSLv23_server_method
+#define TLS_client_method GRPC_SHADOW_TLS_client_method
+#define TLS_method GRPC_SHADOW_TLS_method
+#define TLS_server_method GRPC_SHADOW_TLS_server_method
+#define TLS_with_buffers_method GRPC_SHADOW_TLS_with_buffers_method
+#define TLSv1_1_client_method GRPC_SHADOW_TLSv1_1_client_method
+#define TLSv1_1_method GRPC_SHADOW_TLSv1_1_method
+#define TLSv1_1_server_method GRPC_SHADOW_TLSv1_1_server_method
+#define TLSv1_2_client_method GRPC_SHADOW_TLSv1_2_client_method
+#define TLSv1_2_method GRPC_SHADOW_TLSv1_2_method
+#define TLSv1_2_server_method GRPC_SHADOW_TLSv1_2_server_method
+#define TLSv1_client_method GRPC_SHADOW_TLSv1_client_method
+#define TLSv1_method GRPC_SHADOW_TLSv1_method
+#define TLSv1_server_method GRPC_SHADOW_TLSv1_server_method
+#define SSL_max_seal_overhead GRPC_SHADOW_SSL_max_seal_overhead
+#define OPENSSL_cpuid_setup GRPC_SHADOW_OPENSSL_cpuid_setup
+#define CRYPTO_has_asm GRPC_SHADOW_CRYPTO_has_asm
+#define CRYPTO_is_confidential_build GRPC_SHADOW_CRYPTO_is_confidential_build
+#define CRYPTO_library_init GRPC_SHADOW_CRYPTO_library_init
+#define CRYPTO_malloc_init GRPC_SHADOW_CRYPTO_malloc_init
+#define ENGINE_load_builtin_engines GRPC_SHADOW_ENGINE_load_builtin_engines
+#define ENGINE_register_all_complete GRPC_SHADOW_ENGINE_register_all_complete
+#define OPENSSL_ia32cap_P GRPC_SHADOW_OPENSSL_ia32cap_P
+#define OPENSSL_init_crypto GRPC_SHADOW_OPENSSL_init_crypto
+#define OPENSSL_load_builtin_modules GRPC_SHADOW_OPENSSL_load_builtin_modules
+#define OpenSSL_version GRPC_SHADOW_OpenSSL_version
+#define OpenSSL_version_num GRPC_SHADOW_OpenSSL_version_num
+#define SSLeay GRPC_SHADOW_SSLeay
+#define SSLeay_version GRPC_SHADOW_SSLeay_version
+#define CRYPTO_cleanup_all_ex_data GRPC_SHADOW_CRYPTO_cleanup_all_ex_data
+#define CRYPTO_free_ex_data GRPC_SHADOW_CRYPTO_free_ex_data
+#define CRYPTO_get_ex_data GRPC_SHADOW_CRYPTO_get_ex_data
+#define CRYPTO_get_ex_new_index GRPC_SHADOW_CRYPTO_get_ex_new_index
+#define CRYPTO_new_ex_data GRPC_SHADOW_CRYPTO_new_ex_data
+#define CRYPTO_set_ex_data GRPC_SHADOW_CRYPTO_set_ex_data
+#define BIO_snprintf GRPC_SHADOW_BIO_snprintf
+#define BIO_vsnprintf GRPC_SHADOW_BIO_vsnprintf
+#define CRYPTO_memcmp GRPC_SHADOW_CRYPTO_memcmp
+#define OPENSSL_cleanse GRPC_SHADOW_OPENSSL_cleanse
+#define OPENSSL_free GRPC_SHADOW_OPENSSL_free
+#define OPENSSL_hash32 GRPC_SHADOW_OPENSSL_hash32
+#define OPENSSL_malloc GRPC_SHADOW_OPENSSL_malloc
+#define OPENSSL_realloc GRPC_SHADOW_OPENSSL_realloc
+#define OPENSSL_strcasecmp GRPC_SHADOW_OPENSSL_strcasecmp
+#define OPENSSL_strdup GRPC_SHADOW_OPENSSL_strdup
+#define OPENSSL_strncasecmp GRPC_SHADOW_OPENSSL_strncasecmp
+#define OPENSSL_strnlen GRPC_SHADOW_OPENSSL_strnlen
+#define OPENSSL_tolower GRPC_SHADOW_OPENSSL_tolower
+#define CRYPTO_refcount_dec_and_test_zero GRPC_SHADOW_CRYPTO_refcount_dec_and_test_zero
+#define CRYPTO_refcount_inc GRPC_SHADOW_CRYPTO_refcount_inc
+#define CRYPTO_THREADID_current GRPC_SHADOW_CRYPTO_THREADID_current
+#define CRYPTO_THREADID_set_callback GRPC_SHADOW_CRYPTO_THREADID_set_callback
+#define CRYPTO_THREADID_set_numeric GRPC_SHADOW_CRYPTO_THREADID_set_numeric
+#define CRYPTO_THREADID_set_pointer GRPC_SHADOW_CRYPTO_THREADID_set_pointer
+#define CRYPTO_get_dynlock_create_callback GRPC_SHADOW_CRYPTO_get_dynlock_create_callback
+#define CRYPTO_get_dynlock_destroy_callback GRPC_SHADOW_CRYPTO_get_dynlock_destroy_callback
+#define CRYPTO_get_dynlock_lock_callback GRPC_SHADOW_CRYPTO_get_dynlock_lock_callback
+#define CRYPTO_get_lock_name GRPC_SHADOW_CRYPTO_get_lock_name
+#define CRYPTO_get_locking_callback GRPC_SHADOW_CRYPTO_get_locking_callback
+#define CRYPTO_num_locks GRPC_SHADOW_CRYPTO_num_locks
+#define CRYPTO_set_add_lock_callback GRPC_SHADOW_CRYPTO_set_add_lock_callback
+#define CRYPTO_set_dynlock_create_callback GRPC_SHADOW_CRYPTO_set_dynlock_create_callback
+#define CRYPTO_set_dynlock_destroy_callback GRPC_SHADOW_CRYPTO_set_dynlock_destroy_callback
+#define CRYPTO_set_dynlock_lock_callback GRPC_SHADOW_CRYPTO_set_dynlock_lock_callback
+#define CRYPTO_set_id_callback GRPC_SHADOW_CRYPTO_set_id_callback
+#define CRYPTO_set_locking_callback GRPC_SHADOW_CRYPTO_set_locking_callback
+#define CRYPTO_MUTEX_cleanup GRPC_SHADOW_CRYPTO_MUTEX_cleanup
+#define CRYPTO_MUTEX_init GRPC_SHADOW_CRYPTO_MUTEX_init
+#define CRYPTO_MUTEX_lock_read GRPC_SHADOW_CRYPTO_MUTEX_lock_read
+#define CRYPTO_MUTEX_lock_write GRPC_SHADOW_CRYPTO_MUTEX_lock_write
+#define CRYPTO_MUTEX_unlock_read GRPC_SHADOW_CRYPTO_MUTEX_unlock_read
+#define CRYPTO_MUTEX_unlock_write GRPC_SHADOW_CRYPTO_MUTEX_unlock_write
+#define CRYPTO_STATIC_MUTEX_lock_read GRPC_SHADOW_CRYPTO_STATIC_MUTEX_lock_read
+#define CRYPTO_STATIC_MUTEX_lock_write GRPC_SHADOW_CRYPTO_STATIC_MUTEX_lock_write
+#define CRYPTO_STATIC_MUTEX_unlock_read GRPC_SHADOW_CRYPTO_STATIC_MUTEX_unlock_read
+#define CRYPTO_STATIC_MUTEX_unlock_write GRPC_SHADOW_CRYPTO_STATIC_MUTEX_unlock_write
+#define CRYPTO_get_thread_local GRPC_SHADOW_CRYPTO_get_thread_local
+#define CRYPTO_once GRPC_SHADOW_CRYPTO_once
+#define CRYPTO_set_thread_local GRPC_SHADOW_CRYPTO_set_thread_local
+#define sk_deep_copy GRPC_SHADOW_sk_deep_copy
+#define sk_delete GRPC_SHADOW_sk_delete
+#define sk_delete_ptr GRPC_SHADOW_sk_delete_ptr
+#define sk_dup GRPC_SHADOW_sk_dup
+#define sk_find GRPC_SHADOW_sk_find
+#define sk_free GRPC_SHADOW_sk_free
+#define sk_insert GRPC_SHADOW_sk_insert
+#define sk_is_sorted GRPC_SHADOW_sk_is_sorted
+#define sk_new GRPC_SHADOW_sk_new
+#define sk_new_null GRPC_SHADOW_sk_new_null
+#define sk_num GRPC_SHADOW_sk_num
+#define sk_pop GRPC_SHADOW_sk_pop
+#define sk_pop_free GRPC_SHADOW_sk_pop_free
+#define sk_push GRPC_SHADOW_sk_push
+#define sk_set GRPC_SHADOW_sk_set
+#define sk_set_cmp_func GRPC_SHADOW_sk_set_cmp_func
+#define sk_shift GRPC_SHADOW_sk_shift
+#define sk_sort GRPC_SHADOW_sk_sort
+#define sk_value GRPC_SHADOW_sk_value
+#define sk_zero GRPC_SHADOW_sk_zero
+#define lh_delete GRPC_SHADOW_lh_delete
+#define lh_doall GRPC_SHADOW_lh_doall
+#define lh_doall_arg GRPC_SHADOW_lh_doall_arg
+#define lh_free GRPC_SHADOW_lh_free
+#define lh_insert GRPC_SHADOW_lh_insert
+#define lh_new GRPC_SHADOW_lh_new
+#define lh_num_items GRPC_SHADOW_lh_num_items
+#define lh_retrieve GRPC_SHADOW_lh_retrieve
+#define lh_strhash GRPC_SHADOW_lh_strhash
+#define ERR_SAVE_STATE_free GRPC_SHADOW_ERR_SAVE_STATE_free
+#define ERR_add_error_data GRPC_SHADOW_ERR_add_error_data
+#define ERR_add_error_dataf GRPC_SHADOW_ERR_add_error_dataf
+#define ERR_clear_error GRPC_SHADOW_ERR_clear_error
+#define ERR_clear_system_error GRPC_SHADOW_ERR_clear_system_error
+#define ERR_error_string GRPC_SHADOW_ERR_error_string
+#define ERR_error_string_n GRPC_SHADOW_ERR_error_string_n
+#define ERR_free_strings GRPC_SHADOW_ERR_free_strings
+#define ERR_func_error_string GRPC_SHADOW_ERR_func_error_string
+#define ERR_get_error GRPC_SHADOW_ERR_get_error
+#define ERR_get_error_line GRPC_SHADOW_ERR_get_error_line
+#define ERR_get_error_line_data GRPC_SHADOW_ERR_get_error_line_data
+#define ERR_get_next_error_library GRPC_SHADOW_ERR_get_next_error_library
+#define ERR_lib_error_string GRPC_SHADOW_ERR_lib_error_string
+#define ERR_load_BIO_strings GRPC_SHADOW_ERR_load_BIO_strings
+#define ERR_load_ERR_strings GRPC_SHADOW_ERR_load_ERR_strings
+#define ERR_load_crypto_strings GRPC_SHADOW_ERR_load_crypto_strings
+#define ERR_peek_error GRPC_SHADOW_ERR_peek_error
+#define ERR_peek_error_line GRPC_SHADOW_ERR_peek_error_line
+#define ERR_peek_error_line_data GRPC_SHADOW_ERR_peek_error_line_data
+#define ERR_peek_last_error GRPC_SHADOW_ERR_peek_last_error
+#define ERR_peek_last_error_line GRPC_SHADOW_ERR_peek_last_error_line
+#define ERR_peek_last_error_line_data GRPC_SHADOW_ERR_peek_last_error_line_data
+#define ERR_pop_to_mark GRPC_SHADOW_ERR_pop_to_mark
+#define ERR_print_errors_cb GRPC_SHADOW_ERR_print_errors_cb
+#define ERR_print_errors_fp GRPC_SHADOW_ERR_print_errors_fp
+#define ERR_put_error GRPC_SHADOW_ERR_put_error
+#define ERR_reason_error_string GRPC_SHADOW_ERR_reason_error_string
+#define ERR_remove_state GRPC_SHADOW_ERR_remove_state
+#define ERR_remove_thread_state GRPC_SHADOW_ERR_remove_thread_state
+#define ERR_restore_state GRPC_SHADOW_ERR_restore_state
+#define ERR_save_state GRPC_SHADOW_ERR_save_state
+#define ERR_set_mark GRPC_SHADOW_ERR_set_mark
+#define kOpenSSLReasonStringData GRPC_SHADOW_kOpenSSLReasonStringData
+#define kOpenSSLReasonValues GRPC_SHADOW_kOpenSSLReasonValues
+#define kOpenSSLReasonValuesLen GRPC_SHADOW_kOpenSSLReasonValuesLen
+#define EVP_DecodeBase64 GRPC_SHADOW_EVP_DecodeBase64
+#define EVP_DecodeBlock GRPC_SHADOW_EVP_DecodeBlock
+#define EVP_DecodeFinal GRPC_SHADOW_EVP_DecodeFinal
+#define EVP_DecodeInit GRPC_SHADOW_EVP_DecodeInit
+#define EVP_DecodeUpdate GRPC_SHADOW_EVP_DecodeUpdate
+#define EVP_DecodedLength GRPC_SHADOW_EVP_DecodedLength
+#define EVP_EncodeBlock GRPC_SHADOW_EVP_EncodeBlock
+#define EVP_EncodeFinal GRPC_SHADOW_EVP_EncodeFinal
+#define EVP_EncodeInit GRPC_SHADOW_EVP_EncodeInit
+#define EVP_EncodeUpdate GRPC_SHADOW_EVP_EncodeUpdate
+#define EVP_EncodedLength GRPC_SHADOW_EVP_EncodedLength
+#define CBB_finish_i2d GRPC_SHADOW_CBB_finish_i2d
+#define CBS_asn1_ber_to_der GRPC_SHADOW_CBS_asn1_ber_to_der
+#define CBS_get_asn1_implicit_string GRPC_SHADOW_CBS_get_asn1_implicit_string
+#define CBS_asn1_bitstring_has_bit GRPC_SHADOW_CBS_asn1_bitstring_has_bit
+#define CBS_asn1_oid_to_text GRPC_SHADOW_CBS_asn1_oid_to_text
+#define CBS_contains_zero_byte GRPC_SHADOW_CBS_contains_zero_byte
+#define CBS_copy_bytes GRPC_SHADOW_CBS_copy_bytes
+#define CBS_data GRPC_SHADOW_CBS_data
+#define CBS_get_any_asn1 GRPC_SHADOW_CBS_get_any_asn1
+#define CBS_get_any_asn1_element GRPC_SHADOW_CBS_get_any_asn1_element
+#define CBS_get_any_ber_asn1_element GRPC_SHADOW_CBS_get_any_ber_asn1_element
+#define CBS_get_asn1 GRPC_SHADOW_CBS_get_asn1
+#define CBS_get_asn1_bool GRPC_SHADOW_CBS_get_asn1_bool
+#define CBS_get_asn1_element GRPC_SHADOW_CBS_get_asn1_element
+#define CBS_get_asn1_uint64 GRPC_SHADOW_CBS_get_asn1_uint64
+#define CBS_get_bytes GRPC_SHADOW_CBS_get_bytes
+#define CBS_get_last_u8 GRPC_SHADOW_CBS_get_last_u8
+#define CBS_get_optional_asn1 GRPC_SHADOW_CBS_get_optional_asn1
+#define CBS_get_optional_asn1_bool GRPC_SHADOW_CBS_get_optional_asn1_bool
+#define CBS_get_optional_asn1_octet_string GRPC_SHADOW_CBS_get_optional_asn1_octet_string
+#define CBS_get_optional_asn1_uint64 GRPC_SHADOW_CBS_get_optional_asn1_uint64
+#define CBS_get_u16 GRPC_SHADOW_CBS_get_u16
+#define CBS_get_u16_length_prefixed GRPC_SHADOW_CBS_get_u16_length_prefixed
+#define CBS_get_u24 GRPC_SHADOW_CBS_get_u24
+#define CBS_get_u24_length_prefixed GRPC_SHADOW_CBS_get_u24_length_prefixed
+#define CBS_get_u32 GRPC_SHADOW_CBS_get_u32
+#define CBS_get_u8 GRPC_SHADOW_CBS_get_u8
+#define CBS_get_u8_length_prefixed GRPC_SHADOW_CBS_get_u8_length_prefixed
+#define CBS_init GRPC_SHADOW_CBS_init
+#define CBS_is_valid_asn1_bitstring GRPC_SHADOW_CBS_is_valid_asn1_bitstring
+#define CBS_len GRPC_SHADOW_CBS_len
+#define CBS_mem_equal GRPC_SHADOW_CBS_mem_equal
+#define CBS_peek_asn1_tag GRPC_SHADOW_CBS_peek_asn1_tag
+#define CBS_skip GRPC_SHADOW_CBS_skip
+#define CBS_stow GRPC_SHADOW_CBS_stow
+#define CBS_strdup GRPC_SHADOW_CBS_strdup
+#define CBB_add_asn1 GRPC_SHADOW_CBB_add_asn1
+#define CBB_add_asn1_bool GRPC_SHADOW_CBB_add_asn1_bool
+#define CBB_add_asn1_octet_string GRPC_SHADOW_CBB_add_asn1_octet_string
+#define CBB_add_asn1_oid_from_text GRPC_SHADOW_CBB_add_asn1_oid_from_text
+#define CBB_add_asn1_uint64 GRPC_SHADOW_CBB_add_asn1_uint64
+#define CBB_add_bytes GRPC_SHADOW_CBB_add_bytes
+#define CBB_add_space GRPC_SHADOW_CBB_add_space
+#define CBB_add_u16 GRPC_SHADOW_CBB_add_u16
+#define CBB_add_u16_length_prefixed GRPC_SHADOW_CBB_add_u16_length_prefixed
+#define CBB_add_u24 GRPC_SHADOW_CBB_add_u24
+#define CBB_add_u24_length_prefixed GRPC_SHADOW_CBB_add_u24_length_prefixed
+#define CBB_add_u32 GRPC_SHADOW_CBB_add_u32
+#define CBB_add_u8 GRPC_SHADOW_CBB_add_u8
+#define CBB_add_u8_length_prefixed GRPC_SHADOW_CBB_add_u8_length_prefixed
+#define CBB_cleanup GRPC_SHADOW_CBB_cleanup
+#define CBB_data GRPC_SHADOW_CBB_data
+#define CBB_did_write GRPC_SHADOW_CBB_did_write
+#define CBB_discard_child GRPC_SHADOW_CBB_discard_child
+#define CBB_finish GRPC_SHADOW_CBB_finish
+#define CBB_flush GRPC_SHADOW_CBB_flush
+#define CBB_flush_asn1_set_of GRPC_SHADOW_CBB_flush_asn1_set_of
+#define CBB_init GRPC_SHADOW_CBB_init
+#define CBB_init_fixed GRPC_SHADOW_CBB_init_fixed
+#define CBB_len GRPC_SHADOW_CBB_len
+#define CBB_reserve GRPC_SHADOW_CBB_reserve
+#define CBB_zero GRPC_SHADOW_CBB_zero
+#define CRYPTO_BUFFER_POOL_free GRPC_SHADOW_CRYPTO_BUFFER_POOL_free
+#define CRYPTO_BUFFER_POOL_new GRPC_SHADOW_CRYPTO_BUFFER_POOL_new
+#define CRYPTO_BUFFER_data GRPC_SHADOW_CRYPTO_BUFFER_data
+#define CRYPTO_BUFFER_free GRPC_SHADOW_CRYPTO_BUFFER_free
+#define CRYPTO_BUFFER_init_CBS GRPC_SHADOW_CRYPTO_BUFFER_init_CBS
+#define CRYPTO_BUFFER_len GRPC_SHADOW_CRYPTO_BUFFER_len
+#define CRYPTO_BUFFER_new GRPC_SHADOW_CRYPTO_BUFFER_new
+#define CRYPTO_BUFFER_new_from_CBS GRPC_SHADOW_CRYPTO_BUFFER_new_from_CBS
+#define CRYPTO_BUFFER_up_ref GRPC_SHADOW_CRYPTO_BUFFER_up_ref
+#define AES_cbc_encrypt GRPC_SHADOW_AES_cbc_encrypt
+#define AES_cfb128_encrypt GRPC_SHADOW_AES_cfb128_encrypt
+#define AES_ctr128_encrypt GRPC_SHADOW_AES_ctr128_encrypt
+#define AES_decrypt GRPC_SHADOW_AES_decrypt
+#define AES_ecb_encrypt GRPC_SHADOW_AES_ecb_encrypt
+#define AES_encrypt GRPC_SHADOW_AES_encrypt
+#define AES_ofb128_encrypt GRPC_SHADOW_AES_ofb128_encrypt
+#define AES_set_decrypt_key GRPC_SHADOW_AES_set_decrypt_key
+#define AES_set_encrypt_key GRPC_SHADOW_AES_set_encrypt_key
+#define AES_unwrap_key GRPC_SHADOW_AES_unwrap_key
+#define AES_wrap_key GRPC_SHADOW_AES_wrap_key
+#define BN_BLINDING_convert GRPC_SHADOW_BN_BLINDING_convert
+#define BN_BLINDING_free GRPC_SHADOW_BN_BLINDING_free
+#define BN_BLINDING_invert GRPC_SHADOW_BN_BLINDING_invert
+#define BN_BLINDING_new GRPC_SHADOW_BN_BLINDING_new
+#define BN_CTX_end GRPC_SHADOW_BN_CTX_end
+#define BN_CTX_free GRPC_SHADOW_BN_CTX_free
+#define BN_CTX_get GRPC_SHADOW_BN_CTX_get
+#define BN_CTX_new GRPC_SHADOW_BN_CTX_new
+#define BN_CTX_start GRPC_SHADOW_BN_CTX_start
+#define BN_GENCB_call GRPC_SHADOW_BN_GENCB_call
+#define BN_GENCB_set GRPC_SHADOW_BN_GENCB_set
+#define BN_MONT_CTX_copy GRPC_SHADOW_BN_MONT_CTX_copy
+#define BN_MONT_CTX_free GRPC_SHADOW_BN_MONT_CTX_free
+#define BN_MONT_CTX_new GRPC_SHADOW_BN_MONT_CTX_new
+#define BN_MONT_CTX_new_for_modulus GRPC_SHADOW_BN_MONT_CTX_new_for_modulus
+#define BN_MONT_CTX_set GRPC_SHADOW_BN_MONT_CTX_set
+#define BN_MONT_CTX_set_locked GRPC_SHADOW_BN_MONT_CTX_set_locked
+#define BN_abs_is_word GRPC_SHADOW_BN_abs_is_word
+#define BN_add GRPC_SHADOW_BN_add
+#define BN_add_word GRPC_SHADOW_BN_add_word
+#define BN_bin2bn GRPC_SHADOW_BN_bin2bn
+#define BN_bn2bin GRPC_SHADOW_BN_bn2bin
+#define BN_bn2bin_padded GRPC_SHADOW_BN_bn2bin_padded
+#define BN_bn2le_padded GRPC_SHADOW_BN_bn2le_padded
+#define BN_clear GRPC_SHADOW_BN_clear
+#define BN_clear_bit GRPC_SHADOW_BN_clear_bit
+#define BN_clear_free GRPC_SHADOW_BN_clear_free
+#define BN_cmp GRPC_SHADOW_BN_cmp
+#define BN_cmp_word GRPC_SHADOW_BN_cmp_word
+#define BN_copy GRPC_SHADOW_BN_copy
+#define BN_count_low_zero_bits GRPC_SHADOW_BN_count_low_zero_bits
+#define BN_div GRPC_SHADOW_BN_div
+#define BN_div_word GRPC_SHADOW_BN_div_word
+#define BN_dup GRPC_SHADOW_BN_dup
+#define BN_enhanced_miller_rabin_primality_test GRPC_SHADOW_BN_enhanced_miller_rabin_primality_test
+#define BN_equal_consttime GRPC_SHADOW_BN_equal_consttime
+#define BN_exp GRPC_SHADOW_BN_exp
+#define BN_free GRPC_SHADOW_BN_free
+#define BN_from_montgomery GRPC_SHADOW_BN_from_montgomery
+#define BN_gcd GRPC_SHADOW_BN_gcd
+#define BN_generate_prime_ex GRPC_SHADOW_BN_generate_prime_ex
+#define BN_get_u64 GRPC_SHADOW_BN_get_u64
+#define BN_get_word GRPC_SHADOW_BN_get_word
+#define BN_init GRPC_SHADOW_BN_init
+#define BN_is_bit_set GRPC_SHADOW_BN_is_bit_set
+#define BN_is_negative GRPC_SHADOW_BN_is_negative
+#define BN_is_odd GRPC_SHADOW_BN_is_odd
+#define BN_is_one GRPC_SHADOW_BN_is_one
+#define BN_is_pow2 GRPC_SHADOW_BN_is_pow2
+#define BN_is_prime_ex GRPC_SHADOW_BN_is_prime_ex
+#define BN_is_prime_fasttest_ex GRPC_SHADOW_BN_is_prime_fasttest_ex
+#define BN_is_word GRPC_SHADOW_BN_is_word
+#define BN_is_zero GRPC_SHADOW_BN_is_zero
+#define BN_le2bn GRPC_SHADOW_BN_le2bn
+#define BN_lshift GRPC_SHADOW_BN_lshift
+#define BN_lshift1 GRPC_SHADOW_BN_lshift1
+#define BN_mask_bits GRPC_SHADOW_BN_mask_bits
+#define BN_mod_add GRPC_SHADOW_BN_mod_add
+#define BN_mod_add_quick GRPC_SHADOW_BN_mod_add_quick
+#define BN_mod_exp GRPC_SHADOW_BN_mod_exp
+#define BN_mod_exp2_mont GRPC_SHADOW_BN_mod_exp2_mont
+#define BN_mod_exp_mont GRPC_SHADOW_BN_mod_exp_mont
+#define BN_mod_exp_mont_consttime GRPC_SHADOW_BN_mod_exp_mont_consttime
+#define BN_mod_exp_mont_word GRPC_SHADOW_BN_mod_exp_mont_word
+#define BN_mod_inverse GRPC_SHADOW_BN_mod_inverse
+#define BN_mod_inverse_blinded GRPC_SHADOW_BN_mod_inverse_blinded
+#define BN_mod_inverse_odd GRPC_SHADOW_BN_mod_inverse_odd
+#define BN_mod_lshift GRPC_SHADOW_BN_mod_lshift
+#define BN_mod_lshift1 GRPC_SHADOW_BN_mod_lshift1
+#define BN_mod_lshift1_quick GRPC_SHADOW_BN_mod_lshift1_quick
+#define BN_mod_lshift_quick GRPC_SHADOW_BN_mod_lshift_quick
+#define BN_mod_mul GRPC_SHADOW_BN_mod_mul
+#define BN_mod_mul_montgomery GRPC_SHADOW_BN_mod_mul_montgomery
+#define BN_mod_pow2 GRPC_SHADOW_BN_mod_pow2
+#define BN_mod_sqr GRPC_SHADOW_BN_mod_sqr
+#define BN_mod_sqrt GRPC_SHADOW_BN_mod_sqrt
+#define BN_mod_sub GRPC_SHADOW_BN_mod_sub
+#define BN_mod_sub_quick GRPC_SHADOW_BN_mod_sub_quick
+#define BN_mod_word GRPC_SHADOW_BN_mod_word
+#define BN_mul GRPC_SHADOW_BN_mul
+#define BN_mul_word GRPC_SHADOW_BN_mul_word
+#define BN_new GRPC_SHADOW_BN_new
+#define BN_nnmod GRPC_SHADOW_BN_nnmod
+#define BN_nnmod_pow2 GRPC_SHADOW_BN_nnmod_pow2
+#define BN_num_bits GRPC_SHADOW_BN_num_bits
+#define BN_num_bits_word GRPC_SHADOW_BN_num_bits_word
+#define BN_num_bytes GRPC_SHADOW_BN_num_bytes
+#define BN_one GRPC_SHADOW_BN_one
+#define BN_primality_test GRPC_SHADOW_BN_primality_test
+#define BN_pseudo_rand GRPC_SHADOW_BN_pseudo_rand
+#define BN_pseudo_rand_range GRPC_SHADOW_BN_pseudo_rand_range
+#define BN_rand GRPC_SHADOW_BN_rand
+#define BN_rand_range GRPC_SHADOW_BN_rand_range
+#define BN_rand_range_ex GRPC_SHADOW_BN_rand_range_ex
+#define BN_rshift GRPC_SHADOW_BN_rshift
+#define BN_rshift1 GRPC_SHADOW_BN_rshift1
+#define BN_set_bit GRPC_SHADOW_BN_set_bit
+#define BN_set_negative GRPC_SHADOW_BN_set_negative
+#define BN_set_u64 GRPC_SHADOW_BN_set_u64
+#define BN_set_word GRPC_SHADOW_BN_set_word
+#define BN_sqr GRPC_SHADOW_BN_sqr
+#define BN_sqrt GRPC_SHADOW_BN_sqrt
+#define BN_sub GRPC_SHADOW_BN_sub
+#define BN_sub_word GRPC_SHADOW_BN_sub_word
+#define BN_to_montgomery GRPC_SHADOW_BN_to_montgomery
+#define BN_uadd GRPC_SHADOW_BN_uadd
+#define BN_ucmp GRPC_SHADOW_BN_ucmp
+#define BN_usub GRPC_SHADOW_BN_usub
+#define BN_value_one GRPC_SHADOW_BN_value_one
+#define BN_zero GRPC_SHADOW_BN_zero
+#define BORINGSSL_self_test GRPC_SHADOW_BORINGSSL_self_test
+#define CRYPTO_POLYVAL_finish GRPC_SHADOW_CRYPTO_POLYVAL_finish
+#define CRYPTO_POLYVAL_init GRPC_SHADOW_CRYPTO_POLYVAL_init
+#define CRYPTO_POLYVAL_update_blocks GRPC_SHADOW_CRYPTO_POLYVAL_update_blocks
+#define CRYPTO_cbc128_decrypt GRPC_SHADOW_CRYPTO_cbc128_decrypt
+#define CRYPTO_cbc128_encrypt GRPC_SHADOW_CRYPTO_cbc128_encrypt
+#define CRYPTO_ccm128_decrypt GRPC_SHADOW_CRYPTO_ccm128_decrypt
+#define CRYPTO_ccm128_encrypt GRPC_SHADOW_CRYPTO_ccm128_encrypt
+#define CRYPTO_ccm128_init GRPC_SHADOW_CRYPTO_ccm128_init
+#define CRYPTO_ccm128_max_input GRPC_SHADOW_CRYPTO_ccm128_max_input
+#define CRYPTO_cfb128_1_encrypt GRPC_SHADOW_CRYPTO_cfb128_1_encrypt
+#define CRYPTO_cfb128_8_encrypt GRPC_SHADOW_CRYPTO_cfb128_8_encrypt
+#define CRYPTO_cfb128_encrypt GRPC_SHADOW_CRYPTO_cfb128_encrypt
+#define CRYPTO_ctr128_encrypt GRPC_SHADOW_CRYPTO_ctr128_encrypt
+#define CRYPTO_ctr128_encrypt_ctr32 GRPC_SHADOW_CRYPTO_ctr128_encrypt_ctr32
+#define CRYPTO_gcm128_aad GRPC_SHADOW_CRYPTO_gcm128_aad
+#define CRYPTO_gcm128_decrypt GRPC_SHADOW_CRYPTO_gcm128_decrypt
+#define CRYPTO_gcm128_decrypt_ctr32 GRPC_SHADOW_CRYPTO_gcm128_decrypt_ctr32
+#define CRYPTO_gcm128_encrypt GRPC_SHADOW_CRYPTO_gcm128_encrypt
+#define CRYPTO_gcm128_encrypt_ctr32 GRPC_SHADOW_CRYPTO_gcm128_encrypt_ctr32
+#define CRYPTO_gcm128_finish GRPC_SHADOW_CRYPTO_gcm128_finish
+#define CRYPTO_gcm128_init GRPC_SHADOW_CRYPTO_gcm128_init
+#define CRYPTO_gcm128_setiv GRPC_SHADOW_CRYPTO_gcm128_setiv
+#define CRYPTO_gcm128_tag GRPC_SHADOW_CRYPTO_gcm128_tag
+#define CRYPTO_ghash_init GRPC_SHADOW_CRYPTO_ghash_init
+#define CRYPTO_ofb128_encrypt GRPC_SHADOW_CRYPTO_ofb128_encrypt
+#define CRYPTO_sysrand GRPC_SHADOW_CRYPTO_sysrand
+#define CRYPTO_tls1_prf GRPC_SHADOW_CRYPTO_tls1_prf
+#define CTR_DRBG_clear GRPC_SHADOW_CTR_DRBG_clear
+#define CTR_DRBG_generate GRPC_SHADOW_CTR_DRBG_generate
+#define CTR_DRBG_init GRPC_SHADOW_CTR_DRBG_init
+#define CTR_DRBG_reseed GRPC_SHADOW_CTR_DRBG_reseed
+#define DES_decrypt3 GRPC_SHADOW_DES_decrypt3
+#define DES_ecb3_encrypt GRPC_SHADOW_DES_ecb3_encrypt
+#define DES_ecb_encrypt GRPC_SHADOW_DES_ecb_encrypt
+#define DES_ede2_cbc_encrypt GRPC_SHADOW_DES_ede2_cbc_encrypt
+#define DES_ede3_cbc_encrypt GRPC_SHADOW_DES_ede3_cbc_encrypt
+#define DES_encrypt3 GRPC_SHADOW_DES_encrypt3
+#define DES_ncbc_encrypt GRPC_SHADOW_DES_ncbc_encrypt
+#define DES_set_key GRPC_SHADOW_DES_set_key
+#define DES_set_key_unchecked GRPC_SHADOW_DES_set_key_unchecked
+#define DES_set_odd_parity GRPC_SHADOW_DES_set_odd_parity
+#define ECDSA_SIG_free GRPC_SHADOW_ECDSA_SIG_free
+#define ECDSA_SIG_get0 GRPC_SHADOW_ECDSA_SIG_get0
+#define ECDSA_SIG_new GRPC_SHADOW_ECDSA_SIG_new
+#define ECDSA_SIG_set0 GRPC_SHADOW_ECDSA_SIG_set0
+#define ECDSA_do_sign GRPC_SHADOW_ECDSA_do_sign
+#define ECDSA_do_verify GRPC_SHADOW_ECDSA_do_verify
+#define EC_GFp_mont_method GRPC_SHADOW_EC_GFp_mont_method
+#define EC_GFp_nistp224_method GRPC_SHADOW_EC_GFp_nistp224_method
+#define EC_GFp_nistp256_method GRPC_SHADOW_EC_GFp_nistp256_method
+#define EC_GFp_nistz256_method GRPC_SHADOW_EC_GFp_nistz256_method
+#define EC_GROUP_cmp GRPC_SHADOW_EC_GROUP_cmp
+#define EC_GROUP_dup GRPC_SHADOW_EC_GROUP_dup
+#define EC_GROUP_free GRPC_SHADOW_EC_GROUP_free
+#define EC_GROUP_get0_generator GRPC_SHADOW_EC_GROUP_get0_generator
+#define EC_GROUP_get0_order GRPC_SHADOW_EC_GROUP_get0_order
+#define EC_GROUP_get_cofactor GRPC_SHADOW_EC_GROUP_get_cofactor
+#define EC_GROUP_get_curve_GFp GRPC_SHADOW_EC_GROUP_get_curve_GFp
+#define EC_GROUP_get_curve_name GRPC_SHADOW_EC_GROUP_get_curve_name
+#define EC_GROUP_get_degree GRPC_SHADOW_EC_GROUP_get_degree
+#define EC_GROUP_get_order GRPC_SHADOW_EC_GROUP_get_order
+#define EC_GROUP_method_of GRPC_SHADOW_EC_GROUP_method_of
+#define EC_GROUP_new_by_curve_name GRPC_SHADOW_EC_GROUP_new_by_curve_name
+#define EC_GROUP_new_curve_GFp GRPC_SHADOW_EC_GROUP_new_curve_GFp
+#define EC_GROUP_set_asn1_flag GRPC_SHADOW_EC_GROUP_set_asn1_flag
+#define EC_GROUP_set_generator GRPC_SHADOW_EC_GROUP_set_generator
+#define EC_GROUP_set_point_conversion_form GRPC_SHADOW_EC_GROUP_set_point_conversion_form
+#define EC_KEY_check_fips GRPC_SHADOW_EC_KEY_check_fips
+#define EC_KEY_check_key GRPC_SHADOW_EC_KEY_check_key
+#define EC_KEY_dup GRPC_SHADOW_EC_KEY_dup
+#define EC_KEY_free GRPC_SHADOW_EC_KEY_free
+#define EC_KEY_generate_key GRPC_SHADOW_EC_KEY_generate_key
+#define EC_KEY_generate_key_fips GRPC_SHADOW_EC_KEY_generate_key_fips
+#define EC_KEY_get0_group GRPC_SHADOW_EC_KEY_get0_group
+#define EC_KEY_get0_private_key GRPC_SHADOW_EC_KEY_get0_private_key
+#define EC_KEY_get0_public_key GRPC_SHADOW_EC_KEY_get0_public_key
+#define EC_KEY_get_conv_form GRPC_SHADOW_EC_KEY_get_conv_form
+#define EC_KEY_get_enc_flags GRPC_SHADOW_EC_KEY_get_enc_flags
+#define EC_KEY_get_ex_data GRPC_SHADOW_EC_KEY_get_ex_data
+#define EC_KEY_get_ex_new_index GRPC_SHADOW_EC_KEY_get_ex_new_index
+#define EC_KEY_is_opaque GRPC_SHADOW_EC_KEY_is_opaque
+#define EC_KEY_new GRPC_SHADOW_EC_KEY_new
+#define EC_KEY_new_by_curve_name GRPC_SHADOW_EC_KEY_new_by_curve_name
+#define EC_KEY_new_method GRPC_SHADOW_EC_KEY_new_method
+#define EC_KEY_set_asn1_flag GRPC_SHADOW_EC_KEY_set_asn1_flag
+#define EC_KEY_set_conv_form GRPC_SHADOW_EC_KEY_set_conv_form
+#define EC_KEY_set_enc_flags GRPC_SHADOW_EC_KEY_set_enc_flags
+#define EC_KEY_set_ex_data GRPC_SHADOW_EC_KEY_set_ex_data
+#define EC_KEY_set_group GRPC_SHADOW_EC_KEY_set_group
+#define EC_KEY_set_private_key GRPC_SHADOW_EC_KEY_set_private_key
+#define EC_KEY_set_public_key GRPC_SHADOW_EC_KEY_set_public_key
+#define EC_KEY_set_public_key_affine_coordinates GRPC_SHADOW_EC_KEY_set_public_key_affine_coordinates
+#define EC_KEY_up_ref GRPC_SHADOW_EC_KEY_up_ref
+#define EC_METHOD_get_field_type GRPC_SHADOW_EC_METHOD_get_field_type
+#define EC_POINT_add GRPC_SHADOW_EC_POINT_add
+#define EC_POINT_clear_free GRPC_SHADOW_EC_POINT_clear_free
+#define EC_POINT_cmp GRPC_SHADOW_EC_POINT_cmp
+#define EC_POINT_copy GRPC_SHADOW_EC_POINT_copy
+#define EC_POINT_dbl GRPC_SHADOW_EC_POINT_dbl
+#define EC_POINT_dup GRPC_SHADOW_EC_POINT_dup
+#define EC_POINT_free GRPC_SHADOW_EC_POINT_free
+#define EC_POINT_get_affine_coordinates_GFp GRPC_SHADOW_EC_POINT_get_affine_coordinates_GFp
+#define EC_POINT_invert GRPC_SHADOW_EC_POINT_invert
+#define EC_POINT_is_at_infinity GRPC_SHADOW_EC_POINT_is_at_infinity
+#define EC_POINT_is_on_curve GRPC_SHADOW_EC_POINT_is_on_curve
+#define EC_POINT_make_affine GRPC_SHADOW_EC_POINT_make_affine
+#define EC_POINT_mul GRPC_SHADOW_EC_POINT_mul
+#define EC_POINT_new GRPC_SHADOW_EC_POINT_new
+#define EC_POINT_oct2point GRPC_SHADOW_EC_POINT_oct2point
+#define EC_POINT_point2oct GRPC_SHADOW_EC_POINT_point2oct
+#define EC_POINT_set_affine_coordinates_GFp GRPC_SHADOW_EC_POINT_set_affine_coordinates_GFp
+#define EC_POINT_set_compressed_coordinates_GFp GRPC_SHADOW_EC_POINT_set_compressed_coordinates_GFp
+#define EC_POINT_set_to_infinity GRPC_SHADOW_EC_POINT_set_to_infinity
+#define EC_POINTs_make_affine GRPC_SHADOW_EC_POINTs_make_affine
+#define EC_get_builtin_curves GRPC_SHADOW_EC_get_builtin_curves
+#define EVP_AEAD_CTX_aead GRPC_SHADOW_EVP_AEAD_CTX_aead
+#define EVP_AEAD_CTX_cleanup GRPC_SHADOW_EVP_AEAD_CTX_cleanup
+#define EVP_AEAD_CTX_free GRPC_SHADOW_EVP_AEAD_CTX_free
+#define EVP_AEAD_CTX_get_iv GRPC_SHADOW_EVP_AEAD_CTX_get_iv
+#define EVP_AEAD_CTX_init GRPC_SHADOW_EVP_AEAD_CTX_init
+#define EVP_AEAD_CTX_init_with_direction GRPC_SHADOW_EVP_AEAD_CTX_init_with_direction
+#define EVP_AEAD_CTX_new GRPC_SHADOW_EVP_AEAD_CTX_new
+#define EVP_AEAD_CTX_open GRPC_SHADOW_EVP_AEAD_CTX_open
+#define EVP_AEAD_CTX_open_gather GRPC_SHADOW_EVP_AEAD_CTX_open_gather
+#define EVP_AEAD_CTX_seal GRPC_SHADOW_EVP_AEAD_CTX_seal
+#define EVP_AEAD_CTX_seal_scatter GRPC_SHADOW_EVP_AEAD_CTX_seal_scatter
+#define EVP_AEAD_CTX_tag_len GRPC_SHADOW_EVP_AEAD_CTX_tag_len
+#define EVP_AEAD_CTX_zero GRPC_SHADOW_EVP_AEAD_CTX_zero
+#define EVP_AEAD_key_length GRPC_SHADOW_EVP_AEAD_key_length
+#define EVP_AEAD_max_overhead GRPC_SHADOW_EVP_AEAD_max_overhead
+#define EVP_AEAD_max_tag_len GRPC_SHADOW_EVP_AEAD_max_tag_len
+#define EVP_AEAD_nonce_length GRPC_SHADOW_EVP_AEAD_nonce_length
+#define EVP_CIPHER_CTX_block_size GRPC_SHADOW_EVP_CIPHER_CTX_block_size
+#define EVP_CIPHER_CTX_cipher GRPC_SHADOW_EVP_CIPHER_CTX_cipher
+#define EVP_CIPHER_CTX_cleanup GRPC_SHADOW_EVP_CIPHER_CTX_cleanup
+#define EVP_CIPHER_CTX_copy GRPC_SHADOW_EVP_CIPHER_CTX_copy
+#define EVP_CIPHER_CTX_ctrl GRPC_SHADOW_EVP_CIPHER_CTX_ctrl
+#define EVP_CIPHER_CTX_flags GRPC_SHADOW_EVP_CIPHER_CTX_flags
+#define EVP_CIPHER_CTX_free GRPC_SHADOW_EVP_CIPHER_CTX_free
+#define EVP_CIPHER_CTX_get_app_data GRPC_SHADOW_EVP_CIPHER_CTX_get_app_data
+#define EVP_CIPHER_CTX_init GRPC_SHADOW_EVP_CIPHER_CTX_init
+#define EVP_CIPHER_CTX_iv_length GRPC_SHADOW_EVP_CIPHER_CTX_iv_length
+#define EVP_CIPHER_CTX_key_length GRPC_SHADOW_EVP_CIPHER_CTX_key_length
+#define EVP_CIPHER_CTX_mode GRPC_SHADOW_EVP_CIPHER_CTX_mode
+#define EVP_CIPHER_CTX_new GRPC_SHADOW_EVP_CIPHER_CTX_new
+#define EVP_CIPHER_CTX_nid GRPC_SHADOW_EVP_CIPHER_CTX_nid
+#define EVP_CIPHER_CTX_reset GRPC_SHADOW_EVP_CIPHER_CTX_reset
+#define EVP_CIPHER_CTX_set_app_data GRPC_SHADOW_EVP_CIPHER_CTX_set_app_data
+#define EVP_CIPHER_CTX_set_flags GRPC_SHADOW_EVP_CIPHER_CTX_set_flags
+#define EVP_CIPHER_CTX_set_key_length GRPC_SHADOW_EVP_CIPHER_CTX_set_key_length
+#define EVP_CIPHER_CTX_set_padding GRPC_SHADOW_EVP_CIPHER_CTX_set_padding
+#define EVP_CIPHER_block_size GRPC_SHADOW_EVP_CIPHER_block_size
+#define EVP_CIPHER_flags GRPC_SHADOW_EVP_CIPHER_flags
+#define EVP_CIPHER_iv_length GRPC_SHADOW_EVP_CIPHER_iv_length
+#define EVP_CIPHER_key_length GRPC_SHADOW_EVP_CIPHER_key_length
+#define EVP_CIPHER_mode GRPC_SHADOW_EVP_CIPHER_mode
+#define EVP_CIPHER_nid GRPC_SHADOW_EVP_CIPHER_nid
+#define EVP_Cipher GRPC_SHADOW_EVP_Cipher
+#define EVP_CipherFinal_ex GRPC_SHADOW_EVP_CipherFinal_ex
+#define EVP_CipherInit GRPC_SHADOW_EVP_CipherInit
+#define EVP_CipherInit_ex GRPC_SHADOW_EVP_CipherInit_ex
+#define EVP_CipherUpdate GRPC_SHADOW_EVP_CipherUpdate
+#define EVP_DecryptFinal_ex GRPC_SHADOW_EVP_DecryptFinal_ex
+#define EVP_DecryptInit GRPC_SHADOW_EVP_DecryptInit
+#define EVP_DecryptInit_ex GRPC_SHADOW_EVP_DecryptInit_ex
+#define EVP_DecryptUpdate GRPC_SHADOW_EVP_DecryptUpdate
+#define EVP_Digest GRPC_SHADOW_EVP_Digest
+#define EVP_DigestFinal GRPC_SHADOW_EVP_DigestFinal
+#define EVP_DigestFinal_ex GRPC_SHADOW_EVP_DigestFinal_ex
+#define EVP_DigestInit GRPC_SHADOW_EVP_DigestInit
+#define EVP_DigestInit_ex GRPC_SHADOW_EVP_DigestInit_ex
+#define EVP_DigestUpdate GRPC_SHADOW_EVP_DigestUpdate
+#define EVP_EncryptFinal_ex GRPC_SHADOW_EVP_EncryptFinal_ex
+#define EVP_EncryptInit GRPC_SHADOW_EVP_EncryptInit
+#define EVP_EncryptInit_ex GRPC_SHADOW_EVP_EncryptInit_ex
+#define EVP_EncryptUpdate GRPC_SHADOW_EVP_EncryptUpdate
+#define EVP_MD_CTX_block_size GRPC_SHADOW_EVP_MD_CTX_block_size
+#define EVP_MD_CTX_cleanup GRPC_SHADOW_EVP_MD_CTX_cleanup
+#define EVP_MD_CTX_copy GRPC_SHADOW_EVP_MD_CTX_copy
+#define EVP_MD_CTX_copy_ex GRPC_SHADOW_EVP_MD_CTX_copy_ex
+#define EVP_MD_CTX_create GRPC_SHADOW_EVP_MD_CTX_create
+#define EVP_MD_CTX_destroy GRPC_SHADOW_EVP_MD_CTX_destroy
+#define EVP_MD_CTX_free GRPC_SHADOW_EVP_MD_CTX_free
+#define EVP_MD_CTX_init GRPC_SHADOW_EVP_MD_CTX_init
+#define EVP_MD_CTX_md GRPC_SHADOW_EVP_MD_CTX_md
+#define EVP_MD_CTX_new GRPC_SHADOW_EVP_MD_CTX_new
+#define EVP_MD_CTX_reset GRPC_SHADOW_EVP_MD_CTX_reset
+#define EVP_MD_CTX_size GRPC_SHADOW_EVP_MD_CTX_size
+#define EVP_MD_CTX_type GRPC_SHADOW_EVP_MD_CTX_type
+#define EVP_MD_block_size GRPC_SHADOW_EVP_MD_block_size
+#define EVP_MD_flags GRPC_SHADOW_EVP_MD_flags
+#define EVP_MD_size GRPC_SHADOW_EVP_MD_size
+#define EVP_MD_type GRPC_SHADOW_EVP_MD_type
+#define EVP_add_cipher_alias GRPC_SHADOW_EVP_add_cipher_alias
+#define EVP_add_digest GRPC_SHADOW_EVP_add_digest
+#define EVP_aead_aes_128_gcm GRPC_SHADOW_EVP_aead_aes_128_gcm
+#define EVP_aead_aes_128_gcm_tls12 GRPC_SHADOW_EVP_aead_aes_128_gcm_tls12
+#define EVP_aead_aes_256_gcm GRPC_SHADOW_EVP_aead_aes_256_gcm
+#define EVP_aead_aes_256_gcm_tls12 GRPC_SHADOW_EVP_aead_aes_256_gcm_tls12
+#define EVP_aes_128_cbc GRPC_SHADOW_EVP_aes_128_cbc
+#define EVP_aes_128_ctr GRPC_SHADOW_EVP_aes_128_ctr
+#define EVP_aes_128_ecb GRPC_SHADOW_EVP_aes_128_ecb
+#define EVP_aes_128_gcm GRPC_SHADOW_EVP_aes_128_gcm
+#define EVP_aes_128_ofb GRPC_SHADOW_EVP_aes_128_ofb
+#define EVP_aes_192_cbc GRPC_SHADOW_EVP_aes_192_cbc
+#define EVP_aes_192_ctr GRPC_SHADOW_EVP_aes_192_ctr
+#define EVP_aes_192_ecb GRPC_SHADOW_EVP_aes_192_ecb
+#define EVP_aes_192_gcm GRPC_SHADOW_EVP_aes_192_gcm
+#define EVP_aes_256_cbc GRPC_SHADOW_EVP_aes_256_cbc
+#define EVP_aes_256_ctr GRPC_SHADOW_EVP_aes_256_ctr
+#define EVP_aes_256_ecb GRPC_SHADOW_EVP_aes_256_ecb
+#define EVP_aes_256_gcm GRPC_SHADOW_EVP_aes_256_gcm
+#define EVP_aes_256_ofb GRPC_SHADOW_EVP_aes_256_ofb
+#define EVP_des_cbc GRPC_SHADOW_EVP_des_cbc
+#define EVP_des_ecb GRPC_SHADOW_EVP_des_ecb
+#define EVP_des_ede GRPC_SHADOW_EVP_des_ede
+#define EVP_des_ede3 GRPC_SHADOW_EVP_des_ede3
+#define EVP_des_ede3_cbc GRPC_SHADOW_EVP_des_ede3_cbc
+#define EVP_des_ede_cbc GRPC_SHADOW_EVP_des_ede_cbc
+#define EVP_has_aes_hardware GRPC_SHADOW_EVP_has_aes_hardware
+#define EVP_md4 GRPC_SHADOW_EVP_md4
+#define EVP_md5 GRPC_SHADOW_EVP_md5
+#define EVP_md5_sha1 GRPC_SHADOW_EVP_md5_sha1
+#define EVP_sha1 GRPC_SHADOW_EVP_sha1
+#define EVP_sha224 GRPC_SHADOW_EVP_sha224
+#define EVP_sha256 GRPC_SHADOW_EVP_sha256
+#define EVP_sha384 GRPC_SHADOW_EVP_sha384
+#define EVP_sha512 GRPC_SHADOW_EVP_sha512
+#define HMAC GRPC_SHADOW_HMAC
+#define HMAC_CTX_cleanup GRPC_SHADOW_HMAC_CTX_cleanup
+#define HMAC_CTX_copy GRPC_SHADOW_HMAC_CTX_copy
+#define HMAC_CTX_copy_ex GRPC_SHADOW_HMAC_CTX_copy_ex
+#define HMAC_CTX_free GRPC_SHADOW_HMAC_CTX_free
+#define HMAC_CTX_init GRPC_SHADOW_HMAC_CTX_init
+#define HMAC_CTX_new GRPC_SHADOW_HMAC_CTX_new
+#define HMAC_CTX_reset GRPC_SHADOW_HMAC_CTX_reset
+#define HMAC_Final GRPC_SHADOW_HMAC_Final
+#define HMAC_Init GRPC_SHADOW_HMAC_Init
+#define HMAC_Init_ex GRPC_SHADOW_HMAC_Init_ex
+#define HMAC_Update GRPC_SHADOW_HMAC_Update
+#define HMAC_size GRPC_SHADOW_HMAC_size
+#define MD4 GRPC_SHADOW_MD4
+#define MD4_Final GRPC_SHADOW_MD4_Final
+#define MD4_Init GRPC_SHADOW_MD4_Init
+#define MD4_Transform GRPC_SHADOW_MD4_Transform
+#define MD4_Update GRPC_SHADOW_MD4_Update
+#define MD5 GRPC_SHADOW_MD5
+#define MD5_Final GRPC_SHADOW_MD5_Final
+#define MD5_Init GRPC_SHADOW_MD5_Init
+#define MD5_Transform GRPC_SHADOW_MD5_Transform
+#define MD5_Update GRPC_SHADOW_MD5_Update
+#define OPENSSL_built_in_curves GRPC_SHADOW_OPENSSL_built_in_curves
+#define RAND_bytes GRPC_SHADOW_RAND_bytes
+#define RAND_bytes_with_additional_data GRPC_SHADOW_RAND_bytes_with_additional_data
+#define RAND_pseudo_bytes GRPC_SHADOW_RAND_pseudo_bytes
+#define RAND_set_urandom_fd GRPC_SHADOW_RAND_set_urandom_fd
+#define RSAZ_1024_mod_exp_avx2 GRPC_SHADOW_RSAZ_1024_mod_exp_avx2
+#define RSA_add_pkcs1_prefix GRPC_SHADOW_RSA_add_pkcs1_prefix
+#define RSA_bits GRPC_SHADOW_RSA_bits
+#define RSA_blinding_on GRPC_SHADOW_RSA_blinding_on
+#define RSA_check_fips GRPC_SHADOW_RSA_check_fips
+#define RSA_check_key GRPC_SHADOW_RSA_check_key
+#define RSA_decrypt GRPC_SHADOW_RSA_decrypt
+#define RSA_default_method GRPC_SHADOW_RSA_default_method
+#define RSA_encrypt GRPC_SHADOW_RSA_encrypt
+#define RSA_flags GRPC_SHADOW_RSA_flags
+#define RSA_free GRPC_SHADOW_RSA_free
+#define RSA_generate_key_ex GRPC_SHADOW_RSA_generate_key_ex
+#define RSA_generate_key_fips GRPC_SHADOW_RSA_generate_key_fips
+#define RSA_get0_crt_params GRPC_SHADOW_RSA_get0_crt_params
+#define RSA_get0_factors GRPC_SHADOW_RSA_get0_factors
+#define RSA_get0_key GRPC_SHADOW_RSA_get0_key
+#define RSA_get_ex_data GRPC_SHADOW_RSA_get_ex_data
+#define RSA_get_ex_new_index GRPC_SHADOW_RSA_get_ex_new_index
+#define RSA_is_opaque GRPC_SHADOW_RSA_is_opaque
+#define RSA_new GRPC_SHADOW_RSA_new
+#define RSA_new_method GRPC_SHADOW_RSA_new_method
+#define RSA_padding_add_PKCS1_OAEP_mgf1 GRPC_SHADOW_RSA_padding_add_PKCS1_OAEP_mgf1
+#define RSA_padding_add_PKCS1_PSS_mgf1 GRPC_SHADOW_RSA_padding_add_PKCS1_PSS_mgf1
+#define RSA_padding_add_PKCS1_type_1 GRPC_SHADOW_RSA_padding_add_PKCS1_type_1
+#define RSA_padding_add_PKCS1_type_2 GRPC_SHADOW_RSA_padding_add_PKCS1_type_2
+#define RSA_padding_add_none GRPC_SHADOW_RSA_padding_add_none
+#define RSA_padding_check_PKCS1_OAEP_mgf1 GRPC_SHADOW_RSA_padding_check_PKCS1_OAEP_mgf1
+#define RSA_padding_check_PKCS1_type_1 GRPC_SHADOW_RSA_padding_check_PKCS1_type_1
+#define RSA_padding_check_PKCS1_type_2 GRPC_SHADOW_RSA_padding_check_PKCS1_type_2
+#define RSA_private_decrypt GRPC_SHADOW_RSA_private_decrypt
+#define RSA_private_encrypt GRPC_SHADOW_RSA_private_encrypt
+#define RSA_private_transform GRPC_SHADOW_RSA_private_transform
+#define RSA_public_decrypt GRPC_SHADOW_RSA_public_decrypt
+#define RSA_public_encrypt GRPC_SHADOW_RSA_public_encrypt
+#define RSA_set0_crt_params GRPC_SHADOW_RSA_set0_crt_params
+#define RSA_set0_factors GRPC_SHADOW_RSA_set0_factors
+#define RSA_set0_key GRPC_SHADOW_RSA_set0_key
+#define RSA_set_ex_data GRPC_SHADOW_RSA_set_ex_data
+#define RSA_sign GRPC_SHADOW_RSA_sign
+#define RSA_sign_pss_mgf1 GRPC_SHADOW_RSA_sign_pss_mgf1
+#define RSA_sign_raw GRPC_SHADOW_RSA_sign_raw
+#define RSA_size GRPC_SHADOW_RSA_size
+#define RSA_up_ref GRPC_SHADOW_RSA_up_ref
+#define RSA_verify GRPC_SHADOW_RSA_verify
+#define RSA_verify_PKCS1_PSS_mgf1 GRPC_SHADOW_RSA_verify_PKCS1_PSS_mgf1
+#define RSA_verify_pss_mgf1 GRPC_SHADOW_RSA_verify_pss_mgf1
+#define RSA_verify_raw GRPC_SHADOW_RSA_verify_raw
+#define SHA1 GRPC_SHADOW_SHA1
+#define SHA1_Final GRPC_SHADOW_SHA1_Final
+#define SHA1_Init GRPC_SHADOW_SHA1_Init
+#define SHA1_Transform GRPC_SHADOW_SHA1_Transform
+#define SHA1_Update GRPC_SHADOW_SHA1_Update
+#define SHA224 GRPC_SHADOW_SHA224
+#define SHA224_Final GRPC_SHADOW_SHA224_Final
+#define SHA224_Init GRPC_SHADOW_SHA224_Init
+#define SHA224_Update GRPC_SHADOW_SHA224_Update
+#define SHA256 GRPC_SHADOW_SHA256
+#define SHA256_Final GRPC_SHADOW_SHA256_Final
+#define SHA256_Init GRPC_SHADOW_SHA256_Init
+#define SHA256_Transform GRPC_SHADOW_SHA256_Transform
+#define SHA256_Update GRPC_SHADOW_SHA256_Update
+#define SHA384 GRPC_SHADOW_SHA384
+#define SHA384_Final GRPC_SHADOW_SHA384_Final
+#define SHA384_Init GRPC_SHADOW_SHA384_Init
+#define SHA384_Update GRPC_SHADOW_SHA384_Update
+#define SHA512 GRPC_SHADOW_SHA512
+#define SHA512_Final GRPC_SHADOW_SHA512_Final
+#define SHA512_Init GRPC_SHADOW_SHA512_Init
+#define SHA512_Transform GRPC_SHADOW_SHA512_Transform
+#define SHA512_Update GRPC_SHADOW_SHA512_Update
+#define aes_ctr_set_key GRPC_SHADOW_aes_ctr_set_key
+#define bn_abs_sub_consttime GRPC_SHADOW_bn_abs_sub_consttime
+#define bn_add_words GRPC_SHADOW_bn_add_words
+#define bn_copy_words GRPC_SHADOW_bn_copy_words
+#define bn_div_consttime GRPC_SHADOW_bn_div_consttime
+#define bn_expand GRPC_SHADOW_bn_expand
+#define bn_fits_in_words GRPC_SHADOW_bn_fits_in_words
+#define bn_from_montgomery_small GRPC_SHADOW_bn_from_montgomery_small
+#define bn_in_range_words GRPC_SHADOW_bn_in_range_words
+#define bn_is_bit_set_words GRPC_SHADOW_bn_is_bit_set_words
+#define bn_is_relatively_prime GRPC_SHADOW_bn_is_relatively_prime
+#define bn_jacobi GRPC_SHADOW_bn_jacobi
+#define bn_lcm_consttime GRPC_SHADOW_bn_lcm_consttime
+#define bn_less_than_montgomery_R GRPC_SHADOW_bn_less_than_montgomery_R
+#define bn_less_than_words GRPC_SHADOW_bn_less_than_words
+#define bn_minimal_width GRPC_SHADOW_bn_minimal_width
+#define bn_mod_add_consttime GRPC_SHADOW_bn_mod_add_consttime
+#define bn_mod_exp_base_2_consttime GRPC_SHADOW_bn_mod_exp_base_2_consttime
+#define bn_mod_exp_mont_small GRPC_SHADOW_bn_mod_exp_mont_small
+#define bn_mod_inverse_consttime GRPC_SHADOW_bn_mod_inverse_consttime
+#define bn_mod_inverse_prime GRPC_SHADOW_bn_mod_inverse_prime
+#define bn_mod_inverse_prime_mont_small GRPC_SHADOW_bn_mod_inverse_prime_mont_small
+#define bn_mod_inverse_secret_prime GRPC_SHADOW_bn_mod_inverse_secret_prime
+#define bn_mod_lshift1_consttime GRPC_SHADOW_bn_mod_lshift1_consttime
+#define bn_mod_lshift_consttime GRPC_SHADOW_bn_mod_lshift_consttime
+#define bn_mod_mul_montgomery_small GRPC_SHADOW_bn_mod_mul_montgomery_small
+#define bn_mod_sub_consttime GRPC_SHADOW_bn_mod_sub_consttime
+#define bn_mod_u16_consttime GRPC_SHADOW_bn_mod_u16_consttime
+#define bn_mont_n0 GRPC_SHADOW_bn_mont_n0
+#define bn_mul_add_words GRPC_SHADOW_bn_mul_add_words
+#define bn_mul_comba4 GRPC_SHADOW_bn_mul_comba4
+#define bn_mul_comba8 GRPC_SHADOW_bn_mul_comba8
+#define bn_mul_consttime GRPC_SHADOW_bn_mul_consttime
+#define bn_mul_small GRPC_SHADOW_bn_mul_small
+#define bn_mul_words GRPC_SHADOW_bn_mul_words
+#define bn_odd_number_is_obviously_composite GRPC_SHADOW_bn_odd_number_is_obviously_composite
+#define bn_one_to_montgomery GRPC_SHADOW_bn_one_to_montgomery
+#define bn_one_to_montgomery_small GRPC_SHADOW_bn_one_to_montgomery_small
+#define bn_rand_range_words GRPC_SHADOW_bn_rand_range_words
+#define bn_rand_secret_range GRPC_SHADOW_bn_rand_secret_range
+#define bn_resize_words GRPC_SHADOW_bn_resize_words
+#define bn_rshift1_words GRPC_SHADOW_bn_rshift1_words
+#define bn_rshift_secret_shift GRPC_SHADOW_bn_rshift_secret_shift
+#define bn_select_words GRPC_SHADOW_bn_select_words
+#define bn_set_minimal_width GRPC_SHADOW_bn_set_minimal_width
+#define bn_set_words GRPC_SHADOW_bn_set_words
+#define bn_sqr_comba4 GRPC_SHADOW_bn_sqr_comba4
+#define bn_sqr_comba8 GRPC_SHADOW_bn_sqr_comba8
+#define bn_sqr_consttime GRPC_SHADOW_bn_sqr_consttime
+#define bn_sqr_small GRPC_SHADOW_bn_sqr_small
+#define bn_sqr_words GRPC_SHADOW_bn_sqr_words
+#define bn_sub_words GRPC_SHADOW_bn_sub_words
+#define bn_to_montgomery_small GRPC_SHADOW_bn_to_montgomery_small
+#define bn_uadd_consttime GRPC_SHADOW_bn_uadd_consttime
+#define bn_usub_consttime GRPC_SHADOW_bn_usub_consttime
+#define bn_wexpand GRPC_SHADOW_bn_wexpand
+#define crypto_gcm_clmul_enabled GRPC_SHADOW_crypto_gcm_clmul_enabled
+#define ec_GFp_mont_field_decode GRPC_SHADOW_ec_GFp_mont_field_decode
+#define ec_GFp_mont_field_encode GRPC_SHADOW_ec_GFp_mont_field_encode
+#define ec_GFp_mont_field_mul GRPC_SHADOW_ec_GFp_mont_field_mul
+#define ec_GFp_mont_field_sqr GRPC_SHADOW_ec_GFp_mont_field_sqr
+#define ec_GFp_mont_group_finish GRPC_SHADOW_ec_GFp_mont_group_finish
+#define ec_GFp_mont_group_init GRPC_SHADOW_ec_GFp_mont_group_init
+#define ec_GFp_mont_group_set_curve GRPC_SHADOW_ec_GFp_mont_group_set_curve
+#define ec_GFp_nistp_recode_scalar_bits GRPC_SHADOW_ec_GFp_nistp_recode_scalar_bits
+#define ec_GFp_simple_add GRPC_SHADOW_ec_GFp_simple_add
+#define ec_GFp_simple_cmp GRPC_SHADOW_ec_GFp_simple_cmp
+#define ec_GFp_simple_dbl GRPC_SHADOW_ec_GFp_simple_dbl
+#define ec_GFp_simple_field_mul GRPC_SHADOW_ec_GFp_simple_field_mul
+#define ec_GFp_simple_field_sqr GRPC_SHADOW_ec_GFp_simple_field_sqr
+#define ec_GFp_simple_group_finish GRPC_SHADOW_ec_GFp_simple_group_finish
+#define ec_GFp_simple_group_get_curve GRPC_SHADOW_ec_GFp_simple_group_get_curve
+#define ec_GFp_simple_group_get_degree GRPC_SHADOW_ec_GFp_simple_group_get_degree
+#define ec_GFp_simple_group_init GRPC_SHADOW_ec_GFp_simple_group_init
+#define ec_GFp_simple_group_set_curve GRPC_SHADOW_ec_GFp_simple_group_set_curve
+#define ec_GFp_simple_invert GRPC_SHADOW_ec_GFp_simple_invert
+#define ec_GFp_simple_is_at_infinity GRPC_SHADOW_ec_GFp_simple_is_at_infinity
+#define ec_GFp_simple_is_on_curve GRPC_SHADOW_ec_GFp_simple_is_on_curve
+#define ec_GFp_simple_make_affine GRPC_SHADOW_ec_GFp_simple_make_affine
+#define ec_GFp_simple_point_copy GRPC_SHADOW_ec_GFp_simple_point_copy
+#define ec_GFp_simple_point_finish GRPC_SHADOW_ec_GFp_simple_point_finish
+#define ec_GFp_simple_point_init GRPC_SHADOW_ec_GFp_simple_point_init
+#define ec_GFp_simple_point_set_affine_coordinates GRPC_SHADOW_ec_GFp_simple_point_set_affine_coordinates
+#define ec_GFp_simple_point_set_to_infinity GRPC_SHADOW_ec_GFp_simple_point_set_to_infinity
+#define ec_GFp_simple_points_make_affine GRPC_SHADOW_ec_GFp_simple_points_make_affine
+#define ec_bignum_to_scalar GRPC_SHADOW_ec_bignum_to_scalar
+#define ec_bignum_to_scalar_unchecked GRPC_SHADOW_ec_bignum_to_scalar_unchecked
+#define ec_compute_wNAF GRPC_SHADOW_ec_compute_wNAF
+#define ec_group_new GRPC_SHADOW_ec_group_new
+#define ec_point_mul_scalar GRPC_SHADOW_ec_point_mul_scalar
+#define ec_point_mul_scalar_public GRPC_SHADOW_ec_point_mul_scalar_public
+#define ec_random_nonzero_scalar GRPC_SHADOW_ec_random_nonzero_scalar
+#define ec_wNAF_mul GRPC_SHADOW_ec_wNAF_mul
+#define kBoringSSLRSASqrtTwo GRPC_SHADOW_kBoringSSLRSASqrtTwo
+#define kBoringSSLRSASqrtTwoLen GRPC_SHADOW_kBoringSSLRSASqrtTwoLen
+#define md4_block_data_order GRPC_SHADOW_md4_block_data_order
+#define rsa_default_decrypt GRPC_SHADOW_rsa_default_decrypt
+#define rsa_default_private_transform GRPC_SHADOW_rsa_default_private_transform
+#define rsa_default_sign_raw GRPC_SHADOW_rsa_default_sign_raw
+#define rsa_default_size GRPC_SHADOW_rsa_default_size
+#define FIPS_mode GRPC_SHADOW_FIPS_mode
+#define aesni_gcm_decrypt GRPC_SHADOW_aesni_gcm_decrypt
+#define aesni_gcm_encrypt GRPC_SHADOW_aesni_gcm_encrypt
+#define aesni_cbc_encrypt GRPC_SHADOW_aesni_cbc_encrypt
+#define aesni_ccm64_decrypt_blocks GRPC_SHADOW_aesni_ccm64_decrypt_blocks
+#define aesni_ccm64_encrypt_blocks GRPC_SHADOW_aesni_ccm64_encrypt_blocks
+#define aesni_ctr32_encrypt_blocks GRPC_SHADOW_aesni_ctr32_encrypt_blocks
+#define aesni_decrypt GRPC_SHADOW_aesni_decrypt
+#define aesni_ecb_encrypt GRPC_SHADOW_aesni_ecb_encrypt
+#define aesni_encrypt GRPC_SHADOW_aesni_encrypt
+#define aesni_ocb_decrypt GRPC_SHADOW_aesni_ocb_decrypt
+#define aesni_ocb_encrypt GRPC_SHADOW_aesni_ocb_encrypt
+#define aesni_set_decrypt_key GRPC_SHADOW_aesni_set_decrypt_key
+#define aesni_set_encrypt_key GRPC_SHADOW_aesni_set_encrypt_key
+#define aesni_xts_decrypt GRPC_SHADOW_aesni_xts_decrypt
+#define aesni_xts_encrypt GRPC_SHADOW_aesni_xts_encrypt
+#define asm_AES_cbc_encrypt GRPC_SHADOW_asm_AES_cbc_encrypt
+#define asm_AES_decrypt GRPC_SHADOW_asm_AES_decrypt
+#define asm_AES_encrypt GRPC_SHADOW_asm_AES_encrypt
+#define asm_AES_set_decrypt_key GRPC_SHADOW_asm_AES_set_decrypt_key
+#define asm_AES_set_encrypt_key GRPC_SHADOW_asm_AES_set_encrypt_key
+#define bsaes_cbc_encrypt GRPC_SHADOW_bsaes_cbc_encrypt
+#define bsaes_ctr32_encrypt_blocks GRPC_SHADOW_bsaes_ctr32_encrypt_blocks
+#define bsaes_xts_decrypt GRPC_SHADOW_bsaes_xts_decrypt
+#define bsaes_xts_encrypt GRPC_SHADOW_bsaes_xts_encrypt
+#define gcm_ghash_4bit GRPC_SHADOW_gcm_ghash_4bit
+#define gcm_ghash_avx GRPC_SHADOW_gcm_ghash_avx
+#define gcm_ghash_clmul GRPC_SHADOW_gcm_ghash_clmul
+#define gcm_gmult_4bit GRPC_SHADOW_gcm_gmult_4bit
+#define gcm_gmult_avx GRPC_SHADOW_gcm_gmult_avx
+#define gcm_gmult_clmul GRPC_SHADOW_gcm_gmult_clmul
+#define gcm_init_avx GRPC_SHADOW_gcm_init_avx
+#define gcm_init_clmul GRPC_SHADOW_gcm_init_clmul
+#define md5_block_asm_data_order GRPC_SHADOW_md5_block_asm_data_order
+#define ecp_nistz256_avx2_select_w7 GRPC_SHADOW_ecp_nistz256_avx2_select_w7
+#define ecp_nistz256_mul_mont GRPC_SHADOW_ecp_nistz256_mul_mont
+#define ecp_nistz256_neg GRPC_SHADOW_ecp_nistz256_neg
+#define ecp_nistz256_point_add GRPC_SHADOW_ecp_nistz256_point_add
+#define ecp_nistz256_point_add_affine GRPC_SHADOW_ecp_nistz256_point_add_affine
+#define ecp_nistz256_point_double GRPC_SHADOW_ecp_nistz256_point_double
+#define ecp_nistz256_select_w5 GRPC_SHADOW_ecp_nistz256_select_w5
+#define ecp_nistz256_select_w7 GRPC_SHADOW_ecp_nistz256_select_w7
+#define ecp_nistz256_sqr_mont GRPC_SHADOW_ecp_nistz256_sqr_mont
+#define CRYPTO_rdrand GRPC_SHADOW_CRYPTO_rdrand
+#define CRYPTO_rdrand_multiple8_buf GRPC_SHADOW_CRYPTO_rdrand_multiple8_buf
+#define rsaz_1024_gather5_avx2 GRPC_SHADOW_rsaz_1024_gather5_avx2
+#define rsaz_1024_mul_avx2 GRPC_SHADOW_rsaz_1024_mul_avx2
+#define rsaz_1024_norm2red_avx2 GRPC_SHADOW_rsaz_1024_norm2red_avx2
+#define rsaz_1024_red2norm_avx2 GRPC_SHADOW_rsaz_1024_red2norm_avx2
+#define rsaz_1024_scatter5_avx2 GRPC_SHADOW_rsaz_1024_scatter5_avx2
+#define rsaz_1024_sqr_avx2 GRPC_SHADOW_rsaz_1024_sqr_avx2
+#define rsaz_avx2_eligible GRPC_SHADOW_rsaz_avx2_eligible
+#define sha1_block_data_order GRPC_SHADOW_sha1_block_data_order
+#define sha256_block_data_order GRPC_SHADOW_sha256_block_data_order
+#define sha512_block_data_order GRPC_SHADOW_sha512_block_data_order
+#define vpaes_cbc_encrypt GRPC_SHADOW_vpaes_cbc_encrypt
+#define vpaes_decrypt GRPC_SHADOW_vpaes_decrypt
+#define vpaes_encrypt GRPC_SHADOW_vpaes_encrypt
+#define vpaes_set_decrypt_key GRPC_SHADOW_vpaes_set_decrypt_key
+#define vpaes_set_encrypt_key GRPC_SHADOW_vpaes_set_encrypt_key
+#define bn_from_montgomery GRPC_SHADOW_bn_from_montgomery
+#define bn_gather5 GRPC_SHADOW_bn_gather5
+#define bn_mul_mont_gather5 GRPC_SHADOW_bn_mul_mont_gather5
+#define bn_power5 GRPC_SHADOW_bn_power5
+#define bn_scatter5 GRPC_SHADOW_bn_scatter5
+#define bn_sqr8x_internal GRPC_SHADOW_bn_sqr8x_internal
+#define bn_mul_mont GRPC_SHADOW_bn_mul_mont
+#define EVP_get_digestbyname GRPC_SHADOW_EVP_get_digestbyname
+#define EVP_get_digestbynid GRPC_SHADOW_EVP_get_digestbynid
+#define EVP_get_digestbyobj GRPC_SHADOW_EVP_get_digestbyobj
+#define EVP_marshal_digest_algorithm GRPC_SHADOW_EVP_marshal_digest_algorithm
+#define EVP_parse_digest_algorithm GRPC_SHADOW_EVP_parse_digest_algorithm
+#define EVP_get_cipherbyname GRPC_SHADOW_EVP_get_cipherbyname
+#define EVP_get_cipherbynid GRPC_SHADOW_EVP_get_cipherbynid
+#define EVP_BytesToKey GRPC_SHADOW_EVP_BytesToKey
+#define EVP_enc_null GRPC_SHADOW_EVP_enc_null
+#define EVP_rc2_40_cbc GRPC_SHADOW_EVP_rc2_40_cbc
+#define EVP_rc2_cbc GRPC_SHADOW_EVP_rc2_cbc
+#define EVP_rc4 GRPC_SHADOW_EVP_rc4
+#define EVP_aead_aes_128_gcm_siv GRPC_SHADOW_EVP_aead_aes_128_gcm_siv
+#define EVP_aead_aes_256_gcm_siv GRPC_SHADOW_EVP_aead_aes_256_gcm_siv
+#define EVP_aead_aes_128_ctr_hmac_sha256 GRPC_SHADOW_EVP_aead_aes_128_ctr_hmac_sha256
+#define EVP_aead_aes_256_ctr_hmac_sha256 GRPC_SHADOW_EVP_aead_aes_256_ctr_hmac_sha256
+#define EVP_aead_aes_128_ccm_bluetooth GRPC_SHADOW_EVP_aead_aes_128_ccm_bluetooth
+#define EVP_aead_aes_128_ccm_bluetooth_8 GRPC_SHADOW_EVP_aead_aes_128_ccm_bluetooth_8
+#define EVP_aead_chacha20_poly1305 GRPC_SHADOW_EVP_aead_chacha20_poly1305
+#define EVP_tls_cbc_copy_mac GRPC_SHADOW_EVP_tls_cbc_copy_mac
+#define EVP_tls_cbc_digest_record GRPC_SHADOW_EVP_tls_cbc_digest_record
+#define EVP_tls_cbc_record_digest_supported GRPC_SHADOW_EVP_tls_cbc_record_digest_supported
+#define EVP_tls_cbc_remove_padding GRPC_SHADOW_EVP_tls_cbc_remove_padding
+#define EVP_aead_aes_128_cbc_sha1_tls GRPC_SHADOW_EVP_aead_aes_128_cbc_sha1_tls
+#define EVP_aead_aes_128_cbc_sha1_tls_implicit_iv GRPC_SHADOW_EVP_aead_aes_128_cbc_sha1_tls_implicit_iv
+#define EVP_aead_aes_128_cbc_sha256_tls GRPC_SHADOW_EVP_aead_aes_128_cbc_sha256_tls
+#define EVP_aead_aes_256_cbc_sha1_tls GRPC_SHADOW_EVP_aead_aes_256_cbc_sha1_tls
+#define EVP_aead_aes_256_cbc_sha1_tls_implicit_iv GRPC_SHADOW_EVP_aead_aes_256_cbc_sha1_tls_implicit_iv
+#define EVP_aead_aes_256_cbc_sha256_tls GRPC_SHADOW_EVP_aead_aes_256_cbc_sha256_tls
+#define EVP_aead_aes_256_cbc_sha384_tls GRPC_SHADOW_EVP_aead_aes_256_cbc_sha384_tls
+#define EVP_aead_des_ede3_cbc_sha1_tls GRPC_SHADOW_EVP_aead_des_ede3_cbc_sha1_tls
+#define EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv GRPC_SHADOW_EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv
+#define EVP_aead_null_sha1_tls GRPC_SHADOW_EVP_aead_null_sha1_tls
+#define EVP_aead_aes_128_cbc_sha1_ssl3 GRPC_SHADOW_EVP_aead_aes_128_cbc_sha1_ssl3
+#define EVP_aead_aes_256_cbc_sha1_ssl3 GRPC_SHADOW_EVP_aead_aes_256_cbc_sha1_ssl3
+#define EVP_aead_des_ede3_cbc_sha1_ssl3 GRPC_SHADOW_EVP_aead_des_ede3_cbc_sha1_ssl3
+#define EVP_aead_null_sha1_ssl3 GRPC_SHADOW_EVP_aead_null_sha1_ssl3
+#define aes128gcmsiv_aes_ks GRPC_SHADOW_aes128gcmsiv_aes_ks
+#define aes128gcmsiv_aes_ks_enc_x1 GRPC_SHADOW_aes128gcmsiv_aes_ks_enc_x1
+#define aes128gcmsiv_dec GRPC_SHADOW_aes128gcmsiv_dec
+#define aes128gcmsiv_ecb_enc_block GRPC_SHADOW_aes128gcmsiv_ecb_enc_block
+#define aes128gcmsiv_enc_msg_x4 GRPC_SHADOW_aes128gcmsiv_enc_msg_x4
+#define aes128gcmsiv_enc_msg_x8 GRPC_SHADOW_aes128gcmsiv_enc_msg_x8
+#define aes128gcmsiv_kdf GRPC_SHADOW_aes128gcmsiv_kdf
+#define aes256gcmsiv_aes_ks GRPC_SHADOW_aes256gcmsiv_aes_ks
+#define aes256gcmsiv_aes_ks_enc_x1 GRPC_SHADOW_aes256gcmsiv_aes_ks_enc_x1
+#define aes256gcmsiv_dec GRPC_SHADOW_aes256gcmsiv_dec
+#define aes256gcmsiv_ecb_enc_block GRPC_SHADOW_aes256gcmsiv_ecb_enc_block
+#define aes256gcmsiv_enc_msg_x4 GRPC_SHADOW_aes256gcmsiv_enc_msg_x4
+#define aes256gcmsiv_enc_msg_x8 GRPC_SHADOW_aes256gcmsiv_enc_msg_x8
+#define aes256gcmsiv_kdf GRPC_SHADOW_aes256gcmsiv_kdf
+#define aesgcmsiv_htable6_init GRPC_SHADOW_aesgcmsiv_htable6_init
+#define aesgcmsiv_htable_init GRPC_SHADOW_aesgcmsiv_htable_init
+#define aesgcmsiv_htable_polyval GRPC_SHADOW_aesgcmsiv_htable_polyval
+#define aesgcmsiv_polyval_horner GRPC_SHADOW_aesgcmsiv_polyval_horner
+#define chacha20_poly1305_open GRPC_SHADOW_chacha20_poly1305_open
+#define chacha20_poly1305_seal GRPC_SHADOW_chacha20_poly1305_seal
+#define RC4 GRPC_SHADOW_RC4
+#define RC4_set_key GRPC_SHADOW_RC4_set_key
+#define CONF_VALUE_new GRPC_SHADOW_CONF_VALUE_new
+#define CONF_modules_free GRPC_SHADOW_CONF_modules_free
+#define CONF_modules_load_file GRPC_SHADOW_CONF_modules_load_file
+#define CONF_parse_list GRPC_SHADOW_CONF_parse_list
+#define NCONF_free GRPC_SHADOW_NCONF_free
+#define NCONF_get_section GRPC_SHADOW_NCONF_get_section
+#define NCONF_get_string GRPC_SHADOW_NCONF_get_string
+#define NCONF_load GRPC_SHADOW_NCONF_load
+#define NCONF_load_bio GRPC_SHADOW_NCONF_load_bio
+#define NCONF_new GRPC_SHADOW_NCONF_new
+#define OPENSSL_config GRPC_SHADOW_OPENSSL_config
+#define OPENSSL_no_config GRPC_SHADOW_OPENSSL_no_config
+#define CRYPTO_chacha_20 GRPC_SHADOW_CRYPTO_chacha_20
+#define ChaCha20_ctr32 GRPC_SHADOW_ChaCha20_ctr32
+#define CRYPTO_poly1305_finish GRPC_SHADOW_CRYPTO_poly1305_finish
+#define CRYPTO_poly1305_init GRPC_SHADOW_CRYPTO_poly1305_init
+#define CRYPTO_poly1305_update GRPC_SHADOW_CRYPTO_poly1305_update
+#define SPAKE2_CTX_free GRPC_SHADOW_SPAKE2_CTX_free
+#define SPAKE2_CTX_new GRPC_SHADOW_SPAKE2_CTX_new
+#define SPAKE2_generate_msg GRPC_SHADOW_SPAKE2_generate_msg
+#define SPAKE2_process_msg GRPC_SHADOW_SPAKE2_process_msg
+#define ED25519_keypair GRPC_SHADOW_ED25519_keypair
+#define ED25519_keypair_from_seed GRPC_SHADOW_ED25519_keypair_from_seed
+#define ED25519_sign GRPC_SHADOW_ED25519_sign
+#define ED25519_verify GRPC_SHADOW_ED25519_verify
+#define X25519 GRPC_SHADOW_X25519
+#define X25519_keypair GRPC_SHADOW_X25519_keypair
+#define X25519_public_from_private GRPC_SHADOW_X25519_public_from_private
+#define x25519_ge_add GRPC_SHADOW_x25519_ge_add
+#define x25519_ge_frombytes_vartime GRPC_SHADOW_x25519_ge_frombytes_vartime
+#define x25519_ge_p1p1_to_p2 GRPC_SHADOW_x25519_ge_p1p1_to_p2
+#define x25519_ge_p1p1_to_p3 GRPC_SHADOW_x25519_ge_p1p1_to_p3
+#define x25519_ge_p3_to_cached GRPC_SHADOW_x25519_ge_p3_to_cached
+#define x25519_ge_scalarmult GRPC_SHADOW_x25519_ge_scalarmult
+#define x25519_ge_scalarmult_base GRPC_SHADOW_x25519_ge_scalarmult_base
+#define x25519_ge_scalarmult_small_precomp GRPC_SHADOW_x25519_ge_scalarmult_small_precomp
+#define x25519_ge_sub GRPC_SHADOW_x25519_ge_sub
+#define x25519_ge_tobytes GRPC_SHADOW_x25519_ge_tobytes
+#define x25519_sc_reduce GRPC_SHADOW_x25519_sc_reduce
+#define BUF_MEM_append GRPC_SHADOW_BUF_MEM_append
+#define BUF_MEM_free GRPC_SHADOW_BUF_MEM_free
+#define BUF_MEM_grow GRPC_SHADOW_BUF_MEM_grow
+#define BUF_MEM_grow_clean GRPC_SHADOW_BUF_MEM_grow_clean
+#define BUF_MEM_new GRPC_SHADOW_BUF_MEM_new
+#define BUF_MEM_reserve GRPC_SHADOW_BUF_MEM_reserve
+#define BUF_memdup GRPC_SHADOW_BUF_memdup
+#define BUF_strdup GRPC_SHADOW_BUF_strdup
+#define BUF_strlcat GRPC_SHADOW_BUF_strlcat
+#define BUF_strlcpy GRPC_SHADOW_BUF_strlcpy
+#define BUF_strndup GRPC_SHADOW_BUF_strndup
+#define BUF_strnlen GRPC_SHADOW_BUF_strnlen
+#define BN_marshal_asn1 GRPC_SHADOW_BN_marshal_asn1
+#define BN_parse_asn1_unsigned GRPC_SHADOW_BN_parse_asn1_unsigned
+#define BN_asc2bn GRPC_SHADOW_BN_asc2bn
+#define BN_bn2cbb_padded GRPC_SHADOW_BN_bn2cbb_padded
+#define BN_bn2dec GRPC_SHADOW_BN_bn2dec
+#define BN_bn2hex GRPC_SHADOW_BN_bn2hex
+#define BN_bn2mpi GRPC_SHADOW_BN_bn2mpi
+#define BN_dec2bn GRPC_SHADOW_BN_dec2bn
+#define BN_hex2bn GRPC_SHADOW_BN_hex2bn
+#define BN_mpi2bn GRPC_SHADOW_BN_mpi2bn
+#define BN_print GRPC_SHADOW_BN_print
+#define BN_print_fp GRPC_SHADOW_BN_print_fp
+#define BIO_callback_ctrl GRPC_SHADOW_BIO_callback_ctrl
+#define BIO_clear_flags GRPC_SHADOW_BIO_clear_flags
+#define BIO_clear_retry_flags GRPC_SHADOW_BIO_clear_retry_flags
+#define BIO_copy_next_retry GRPC_SHADOW_BIO_copy_next_retry
+#define BIO_ctrl GRPC_SHADOW_BIO_ctrl
+#define BIO_ctrl_pending GRPC_SHADOW_BIO_ctrl_pending
+#define BIO_eof GRPC_SHADOW_BIO_eof
+#define BIO_find_type GRPC_SHADOW_BIO_find_type
+#define BIO_flush GRPC_SHADOW_BIO_flush
+#define BIO_free GRPC_SHADOW_BIO_free
+#define BIO_free_all GRPC_SHADOW_BIO_free_all
+#define BIO_get_data GRPC_SHADOW_BIO_get_data
+#define BIO_get_init GRPC_SHADOW_BIO_get_init
+#define BIO_get_new_index GRPC_SHADOW_BIO_get_new_index
+#define BIO_get_retry_flags GRPC_SHADOW_BIO_get_retry_flags
+#define BIO_get_retry_reason GRPC_SHADOW_BIO_get_retry_reason
+#define BIO_get_shutdown GRPC_SHADOW_BIO_get_shutdown
+#define BIO_gets GRPC_SHADOW_BIO_gets
+#define BIO_indent GRPC_SHADOW_BIO_indent
+#define BIO_int_ctrl GRPC_SHADOW_BIO_int_ctrl
+#define BIO_meth_free GRPC_SHADOW_BIO_meth_free
+#define BIO_meth_new GRPC_SHADOW_BIO_meth_new
+#define BIO_meth_set_create GRPC_SHADOW_BIO_meth_set_create
+#define BIO_meth_set_ctrl GRPC_SHADOW_BIO_meth_set_ctrl
+#define BIO_meth_set_destroy GRPC_SHADOW_BIO_meth_set_destroy
+#define BIO_meth_set_gets GRPC_SHADOW_BIO_meth_set_gets
+#define BIO_meth_set_puts GRPC_SHADOW_BIO_meth_set_puts
+#define BIO_meth_set_read GRPC_SHADOW_BIO_meth_set_read
+#define BIO_meth_set_write GRPC_SHADOW_BIO_meth_set_write
+#define BIO_method_type GRPC_SHADOW_BIO_method_type
+#define BIO_new GRPC_SHADOW_BIO_new
+#define BIO_next GRPC_SHADOW_BIO_next
+#define BIO_number_read GRPC_SHADOW_BIO_number_read
+#define BIO_number_written GRPC_SHADOW_BIO_number_written
+#define BIO_pending GRPC_SHADOW_BIO_pending
+#define BIO_pop GRPC_SHADOW_BIO_pop
+#define BIO_ptr_ctrl GRPC_SHADOW_BIO_ptr_ctrl
+#define BIO_push GRPC_SHADOW_BIO_push
+#define BIO_puts GRPC_SHADOW_BIO_puts
+#define BIO_read GRPC_SHADOW_BIO_read
+#define BIO_read_asn1 GRPC_SHADOW_BIO_read_asn1
+#define BIO_reset GRPC_SHADOW_BIO_reset
+#define BIO_set_close GRPC_SHADOW_BIO_set_close
+#define BIO_set_data GRPC_SHADOW_BIO_set_data
+#define BIO_set_flags GRPC_SHADOW_BIO_set_flags
+#define BIO_set_init GRPC_SHADOW_BIO_set_init
+#define BIO_set_retry_read GRPC_SHADOW_BIO_set_retry_read
+#define BIO_set_retry_special GRPC_SHADOW_BIO_set_retry_special
+#define BIO_set_retry_write GRPC_SHADOW_BIO_set_retry_write
+#define BIO_set_shutdown GRPC_SHADOW_BIO_set_shutdown
+#define BIO_set_write_buffer_size GRPC_SHADOW_BIO_set_write_buffer_size
+#define BIO_should_io_special GRPC_SHADOW_BIO_should_io_special
+#define BIO_should_read GRPC_SHADOW_BIO_should_read
+#define BIO_should_retry GRPC_SHADOW_BIO_should_retry
+#define BIO_should_write GRPC_SHADOW_BIO_should_write
+#define BIO_test_flags GRPC_SHADOW_BIO_test_flags
+#define BIO_up_ref GRPC_SHADOW_BIO_up_ref
+#define BIO_vfree GRPC_SHADOW_BIO_vfree
+#define BIO_wpending GRPC_SHADOW_BIO_wpending
+#define BIO_write GRPC_SHADOW_BIO_write
+#define ERR_print_errors GRPC_SHADOW_ERR_print_errors
+#define BIO_get_mem_data GRPC_SHADOW_BIO_get_mem_data
+#define BIO_get_mem_ptr GRPC_SHADOW_BIO_get_mem_ptr
+#define BIO_mem_contents GRPC_SHADOW_BIO_mem_contents
+#define BIO_new_mem_buf GRPC_SHADOW_BIO_new_mem_buf
+#define BIO_s_mem GRPC_SHADOW_BIO_s_mem
+#define BIO_set_mem_buf GRPC_SHADOW_BIO_set_mem_buf
+#define BIO_set_mem_eof_return GRPC_SHADOW_BIO_set_mem_eof_return
+#define BIO_do_connect GRPC_SHADOW_BIO_do_connect
+#define BIO_new_connect GRPC_SHADOW_BIO_new_connect
+#define BIO_s_connect GRPC_SHADOW_BIO_s_connect
+#define BIO_set_conn_hostname GRPC_SHADOW_BIO_set_conn_hostname
+#define BIO_set_conn_int_port GRPC_SHADOW_BIO_set_conn_int_port
+#define BIO_set_conn_port GRPC_SHADOW_BIO_set_conn_port
+#define BIO_set_nbio GRPC_SHADOW_BIO_set_nbio
+#define BIO_get_fd GRPC_SHADOW_BIO_get_fd
+#define BIO_new_fd GRPC_SHADOW_BIO_new_fd
+#define BIO_s_fd GRPC_SHADOW_BIO_s_fd
+#define BIO_set_fd GRPC_SHADOW_BIO_set_fd
+#define bio_fd_should_retry GRPC_SHADOW_bio_fd_should_retry
+#define BIO_append_filename GRPC_SHADOW_BIO_append_filename
+#define BIO_get_fp GRPC_SHADOW_BIO_get_fp
+#define BIO_new_file GRPC_SHADOW_BIO_new_file
+#define BIO_new_fp GRPC_SHADOW_BIO_new_fp
+#define BIO_read_filename GRPC_SHADOW_BIO_read_filename
+#define BIO_rw_filename GRPC_SHADOW_BIO_rw_filename
+#define BIO_s_file GRPC_SHADOW_BIO_s_file
+#define BIO_set_fp GRPC_SHADOW_BIO_set_fp
+#define BIO_write_filename GRPC_SHADOW_BIO_write_filename
+#define BIO_hexdump GRPC_SHADOW_BIO_hexdump
+#define BIO_ctrl_get_read_request GRPC_SHADOW_BIO_ctrl_get_read_request
+#define BIO_ctrl_get_write_guarantee GRPC_SHADOW_BIO_ctrl_get_write_guarantee
+#define BIO_new_bio_pair GRPC_SHADOW_BIO_new_bio_pair
+#define BIO_shutdown_wr GRPC_SHADOW_BIO_shutdown_wr
+#define BIO_printf GRPC_SHADOW_BIO_printf
+#define BIO_new_socket GRPC_SHADOW_BIO_new_socket
+#define BIO_s_socket GRPC_SHADOW_BIO_s_socket
+#define bio_clear_socket_error GRPC_SHADOW_bio_clear_socket_error
+#define bio_ip_and_port_to_socket_and_addr GRPC_SHADOW_bio_ip_and_port_to_socket_and_addr
+#define bio_sock_error GRPC_SHADOW_bio_sock_error
+#define bio_socket_nbio GRPC_SHADOW_bio_socket_nbio
+#define RAND_enable_fork_unsafe_buffering GRPC_SHADOW_RAND_enable_fork_unsafe_buffering
+#define rand_fork_unsafe_buffering_enabled GRPC_SHADOW_rand_fork_unsafe_buffering_enabled
+#define RAND_SSLeay GRPC_SHADOW_RAND_SSLeay
+#define RAND_add GRPC_SHADOW_RAND_add
+#define RAND_cleanup GRPC_SHADOW_RAND_cleanup
+#define RAND_egd GRPC_SHADOW_RAND_egd
+#define RAND_file_name GRPC_SHADOW_RAND_file_name
+#define RAND_get_rand_method GRPC_SHADOW_RAND_get_rand_method
+#define RAND_load_file GRPC_SHADOW_RAND_load_file
+#define RAND_poll GRPC_SHADOW_RAND_poll
+#define RAND_seed GRPC_SHADOW_RAND_seed
+#define RAND_set_rand_method GRPC_SHADOW_RAND_set_rand_method
+#define RAND_status GRPC_SHADOW_RAND_status
+#define OBJ_cbs2nid GRPC_SHADOW_OBJ_cbs2nid
+#define OBJ_cmp GRPC_SHADOW_OBJ_cmp
+#define OBJ_create GRPC_SHADOW_OBJ_create
+#define OBJ_dup GRPC_SHADOW_OBJ_dup
+#define OBJ_get0_data GRPC_SHADOW_OBJ_get0_data
+#define OBJ_length GRPC_SHADOW_OBJ_length
+#define OBJ_ln2nid GRPC_SHADOW_OBJ_ln2nid
+#define OBJ_nid2cbb GRPC_SHADOW_OBJ_nid2cbb
+#define OBJ_nid2ln GRPC_SHADOW_OBJ_nid2ln
+#define OBJ_nid2obj GRPC_SHADOW_OBJ_nid2obj
+#define OBJ_nid2sn GRPC_SHADOW_OBJ_nid2sn
+#define OBJ_obj2nid GRPC_SHADOW_OBJ_obj2nid
+#define OBJ_obj2txt GRPC_SHADOW_OBJ_obj2txt
+#define OBJ_sn2nid GRPC_SHADOW_OBJ_sn2nid
+#define OBJ_txt2nid GRPC_SHADOW_OBJ_txt2nid
+#define OBJ_txt2obj GRPC_SHADOW_OBJ_txt2obj
+#define OBJ_find_sigid_algs GRPC_SHADOW_OBJ_find_sigid_algs
+#define OBJ_find_sigid_by_algs GRPC_SHADOW_OBJ_find_sigid_by_algs
+#define ASN1_BIT_STRING_check GRPC_SHADOW_ASN1_BIT_STRING_check
+#define ASN1_BIT_STRING_get_bit GRPC_SHADOW_ASN1_BIT_STRING_get_bit
+#define ASN1_BIT_STRING_set GRPC_SHADOW_ASN1_BIT_STRING_set
+#define ASN1_BIT_STRING_set_bit GRPC_SHADOW_ASN1_BIT_STRING_set_bit
+#define c2i_ASN1_BIT_STRING GRPC_SHADOW_c2i_ASN1_BIT_STRING
+#define i2c_ASN1_BIT_STRING GRPC_SHADOW_i2c_ASN1_BIT_STRING
+#define d2i_ASN1_BOOLEAN GRPC_SHADOW_d2i_ASN1_BOOLEAN
+#define i2d_ASN1_BOOLEAN GRPC_SHADOW_i2d_ASN1_BOOLEAN
+#define ASN1_d2i_bio GRPC_SHADOW_ASN1_d2i_bio
+#define ASN1_d2i_fp GRPC_SHADOW_ASN1_d2i_fp
+#define ASN1_item_d2i_bio GRPC_SHADOW_ASN1_item_d2i_bio
+#define ASN1_item_d2i_fp GRPC_SHADOW_ASN1_item_d2i_fp
+#define ASN1_dup GRPC_SHADOW_ASN1_dup
+#define ASN1_item_dup GRPC_SHADOW_ASN1_item_dup
+#define ASN1_ENUMERATED_get GRPC_SHADOW_ASN1_ENUMERATED_get
+#define ASN1_ENUMERATED_set GRPC_SHADOW_ASN1_ENUMERATED_set
+#define ASN1_ENUMERATED_to_BN GRPC_SHADOW_ASN1_ENUMERATED_to_BN
+#define BN_to_ASN1_ENUMERATED GRPC_SHADOW_BN_to_ASN1_ENUMERATED
+#define ASN1_GENERALIZEDTIME_adj GRPC_SHADOW_ASN1_GENERALIZEDTIME_adj
+#define ASN1_GENERALIZEDTIME_check GRPC_SHADOW_ASN1_GENERALIZEDTIME_check
+#define ASN1_GENERALIZEDTIME_set GRPC_SHADOW_ASN1_GENERALIZEDTIME_set
+#define ASN1_GENERALIZEDTIME_set_string GRPC_SHADOW_ASN1_GENERALIZEDTIME_set_string
+#define asn1_generalizedtime_to_tm GRPC_SHADOW_asn1_generalizedtime_to_tm
+#define ASN1_i2d_bio GRPC_SHADOW_ASN1_i2d_bio
+#define ASN1_i2d_fp GRPC_SHADOW_ASN1_i2d_fp
+#define ASN1_item_i2d_bio GRPC_SHADOW_ASN1_item_i2d_bio
+#define ASN1_item_i2d_fp GRPC_SHADOW_ASN1_item_i2d_fp
+#define ASN1_INTEGER_cmp GRPC_SHADOW_ASN1_INTEGER_cmp
+#define ASN1_INTEGER_dup GRPC_SHADOW_ASN1_INTEGER_dup
+#define ASN1_INTEGER_get GRPC_SHADOW_ASN1_INTEGER_get
+#define ASN1_INTEGER_set GRPC_SHADOW_ASN1_INTEGER_set
+#define ASN1_INTEGER_set_uint64 GRPC_SHADOW_ASN1_INTEGER_set_uint64
+#define ASN1_INTEGER_to_BN GRPC_SHADOW_ASN1_INTEGER_to_BN
+#define BN_to_ASN1_INTEGER GRPC_SHADOW_BN_to_ASN1_INTEGER
+#define c2i_ASN1_INTEGER GRPC_SHADOW_c2i_ASN1_INTEGER
+#define d2i_ASN1_UINTEGER GRPC_SHADOW_d2i_ASN1_UINTEGER
+#define i2c_ASN1_INTEGER GRPC_SHADOW_i2c_ASN1_INTEGER
+#define ASN1_mbstring_copy GRPC_SHADOW_ASN1_mbstring_copy
+#define ASN1_mbstring_ncopy GRPC_SHADOW_ASN1_mbstring_ncopy
+#define ASN1_OBJECT_create GRPC_SHADOW_ASN1_OBJECT_create
+#define ASN1_OBJECT_free GRPC_SHADOW_ASN1_OBJECT_free
+#define ASN1_OBJECT_new GRPC_SHADOW_ASN1_OBJECT_new
+#define c2i_ASN1_OBJECT GRPC_SHADOW_c2i_ASN1_OBJECT
+#define d2i_ASN1_OBJECT GRPC_SHADOW_d2i_ASN1_OBJECT
+#define i2a_ASN1_OBJECT GRPC_SHADOW_i2a_ASN1_OBJECT
+#define i2d_ASN1_OBJECT GRPC_SHADOW_i2d_ASN1_OBJECT
+#define i2t_ASN1_OBJECT GRPC_SHADOW_i2t_ASN1_OBJECT
+#define ASN1_OCTET_STRING_cmp GRPC_SHADOW_ASN1_OCTET_STRING_cmp
+#define ASN1_OCTET_STRING_dup GRPC_SHADOW_ASN1_OCTET_STRING_dup
+#define ASN1_OCTET_STRING_set GRPC_SHADOW_ASN1_OCTET_STRING_set
+#define ASN1_PRINTABLE_type GRPC_SHADOW_ASN1_PRINTABLE_type
+#define ASN1_STRING_TABLE_add GRPC_SHADOW_ASN1_STRING_TABLE_add
+#define ASN1_STRING_TABLE_cleanup GRPC_SHADOW_ASN1_STRING_TABLE_cleanup
+#define ASN1_STRING_TABLE_get GRPC_SHADOW_ASN1_STRING_TABLE_get
+#define ASN1_STRING_get_default_mask GRPC_SHADOW_ASN1_STRING_get_default_mask
+#define ASN1_STRING_set_by_NID GRPC_SHADOW_ASN1_STRING_set_by_NID
+#define ASN1_STRING_set_default_mask GRPC_SHADOW_ASN1_STRING_set_default_mask
+#define ASN1_STRING_set_default_mask_asc GRPC_SHADOW_ASN1_STRING_set_default_mask_asc
+#define ASN1_TIME_adj GRPC_SHADOW_ASN1_TIME_adj
+#define ASN1_TIME_check GRPC_SHADOW_ASN1_TIME_check
+#define ASN1_TIME_diff GRPC_SHADOW_ASN1_TIME_diff
+#define ASN1_TIME_free GRPC_SHADOW_ASN1_TIME_free
+#define ASN1_TIME_it GRPC_SHADOW_ASN1_TIME_it
+#define ASN1_TIME_new GRPC_SHADOW_ASN1_TIME_new
+#define ASN1_TIME_set GRPC_SHADOW_ASN1_TIME_set
+#define ASN1_TIME_set_string GRPC_SHADOW_ASN1_TIME_set_string
+#define ASN1_TIME_to_generalizedtime GRPC_SHADOW_ASN1_TIME_to_generalizedtime
+#define d2i_ASN1_TIME GRPC_SHADOW_d2i_ASN1_TIME
+#define i2d_ASN1_TIME GRPC_SHADOW_i2d_ASN1_TIME
+#define ASN1_TYPE_cmp GRPC_SHADOW_ASN1_TYPE_cmp
+#define ASN1_TYPE_get GRPC_SHADOW_ASN1_TYPE_get
+#define ASN1_TYPE_set GRPC_SHADOW_ASN1_TYPE_set
+#define ASN1_TYPE_set1 GRPC_SHADOW_ASN1_TYPE_set1
+#define ASN1_UTCTIME_adj GRPC_SHADOW_ASN1_UTCTIME_adj
+#define ASN1_UTCTIME_check GRPC_SHADOW_ASN1_UTCTIME_check
+#define ASN1_UTCTIME_cmp_time_t GRPC_SHADOW_ASN1_UTCTIME_cmp_time_t
+#define ASN1_UTCTIME_set GRPC_SHADOW_ASN1_UTCTIME_set
+#define ASN1_UTCTIME_set_string GRPC_SHADOW_ASN1_UTCTIME_set_string
+#define asn1_utctime_to_tm GRPC_SHADOW_asn1_utctime_to_tm
+#define UTF8_getc GRPC_SHADOW_UTF8_getc
+#define UTF8_putc GRPC_SHADOW_UTF8_putc
+#define ASN1_STRING_cmp GRPC_SHADOW_ASN1_STRING_cmp
+#define ASN1_STRING_copy GRPC_SHADOW_ASN1_STRING_copy
+#define ASN1_STRING_data GRPC_SHADOW_ASN1_STRING_data
+#define ASN1_STRING_dup GRPC_SHADOW_ASN1_STRING_dup
+#define ASN1_STRING_free GRPC_SHADOW_ASN1_STRING_free
+#define ASN1_STRING_get0_data GRPC_SHADOW_ASN1_STRING_get0_data
+#define ASN1_STRING_length GRPC_SHADOW_ASN1_STRING_length
+#define ASN1_STRING_length_set GRPC_SHADOW_ASN1_STRING_length_set
+#define ASN1_STRING_new GRPC_SHADOW_ASN1_STRING_new
+#define ASN1_STRING_set GRPC_SHADOW_ASN1_STRING_set
+#define ASN1_STRING_set0 GRPC_SHADOW_ASN1_STRING_set0
+#define ASN1_STRING_type GRPC_SHADOW_ASN1_STRING_type
+#define ASN1_STRING_type_new GRPC_SHADOW_ASN1_STRING_type_new
+#define ASN1_get_object GRPC_SHADOW_ASN1_get_object
+#define ASN1_object_size GRPC_SHADOW_ASN1_object_size
+#define ASN1_put_eoc GRPC_SHADOW_ASN1_put_eoc
+#define ASN1_put_object GRPC_SHADOW_ASN1_put_object
+#define ASN1_tag2str GRPC_SHADOW_ASN1_tag2str
+#define ASN1_item_pack GRPC_SHADOW_ASN1_item_pack
+#define ASN1_item_unpack GRPC_SHADOW_ASN1_item_unpack
+#define i2a_ASN1_ENUMERATED GRPC_SHADOW_i2a_ASN1_ENUMERATED
+#define i2a_ASN1_INTEGER GRPC_SHADOW_i2a_ASN1_INTEGER
+#define i2a_ASN1_STRING GRPC_SHADOW_i2a_ASN1_STRING
+#define ASN1_item_d2i GRPC_SHADOW_ASN1_item_d2i
+#define ASN1_item_ex_d2i GRPC_SHADOW_ASN1_item_ex_d2i
+#define ASN1_tag2bit GRPC_SHADOW_ASN1_tag2bit
+#define asn1_ex_c2i GRPC_SHADOW_asn1_ex_c2i
+#define ASN1_item_ex_i2d GRPC_SHADOW_ASN1_item_ex_i2d
+#define ASN1_item_i2d GRPC_SHADOW_ASN1_item_i2d
+#define ASN1_item_ndef_i2d GRPC_SHADOW_ASN1_item_ndef_i2d
+#define asn1_ex_i2c GRPC_SHADOW_asn1_ex_i2c
+#define ASN1_item_ex_free GRPC_SHADOW_ASN1_item_ex_free
+#define ASN1_item_free GRPC_SHADOW_ASN1_item_free
+#define ASN1_primitive_free GRPC_SHADOW_ASN1_primitive_free
+#define ASN1_template_free GRPC_SHADOW_ASN1_template_free
+#define asn1_item_combine_free GRPC_SHADOW_asn1_item_combine_free
+#define ASN1_item_ex_new GRPC_SHADOW_ASN1_item_ex_new
+#define ASN1_item_new GRPC_SHADOW_ASN1_item_new
+#define ASN1_primitive_new GRPC_SHADOW_ASN1_primitive_new
+#define ASN1_template_new GRPC_SHADOW_ASN1_template_new
+#define ASN1_ANY_it GRPC_SHADOW_ASN1_ANY_it
+#define ASN1_BIT_STRING_free GRPC_SHADOW_ASN1_BIT_STRING_free
+#define ASN1_BIT_STRING_it GRPC_SHADOW_ASN1_BIT_STRING_it
+#define ASN1_BIT_STRING_new GRPC_SHADOW_ASN1_BIT_STRING_new
+#define ASN1_BMPSTRING_free GRPC_SHADOW_ASN1_BMPSTRING_free
+#define ASN1_BMPSTRING_it GRPC_SHADOW_ASN1_BMPSTRING_it
+#define ASN1_BMPSTRING_new GRPC_SHADOW_ASN1_BMPSTRING_new
+#define ASN1_BOOLEAN_it GRPC_SHADOW_ASN1_BOOLEAN_it
+#define ASN1_ENUMERATED_free GRPC_SHADOW_ASN1_ENUMERATED_free
+#define ASN1_ENUMERATED_it GRPC_SHADOW_ASN1_ENUMERATED_it
+#define ASN1_ENUMERATED_new GRPC_SHADOW_ASN1_ENUMERATED_new
+#define ASN1_FBOOLEAN_it GRPC_SHADOW_ASN1_FBOOLEAN_it
+#define ASN1_GENERALIZEDTIME_free GRPC_SHADOW_ASN1_GENERALIZEDTIME_free
+#define ASN1_GENERALIZEDTIME_it GRPC_SHADOW_ASN1_GENERALIZEDTIME_it
+#define ASN1_GENERALIZEDTIME_new GRPC_SHADOW_ASN1_GENERALIZEDTIME_new
+#define ASN1_GENERALSTRING_free GRPC_SHADOW_ASN1_GENERALSTRING_free
+#define ASN1_GENERALSTRING_it GRPC_SHADOW_ASN1_GENERALSTRING_it
+#define ASN1_GENERALSTRING_new GRPC_SHADOW_ASN1_GENERALSTRING_new
+#define ASN1_IA5STRING_free GRPC_SHADOW_ASN1_IA5STRING_free
+#define ASN1_IA5STRING_it GRPC_SHADOW_ASN1_IA5STRING_it
+#define ASN1_IA5STRING_new GRPC_SHADOW_ASN1_IA5STRING_new
+#define ASN1_INTEGER_free GRPC_SHADOW_ASN1_INTEGER_free
+#define ASN1_INTEGER_it GRPC_SHADOW_ASN1_INTEGER_it
+#define ASN1_INTEGER_new GRPC_SHADOW_ASN1_INTEGER_new
+#define ASN1_NULL_free GRPC_SHADOW_ASN1_NULL_free
+#define ASN1_NULL_it GRPC_SHADOW_ASN1_NULL_it
+#define ASN1_NULL_new GRPC_SHADOW_ASN1_NULL_new
+#define ASN1_OBJECT_it GRPC_SHADOW_ASN1_OBJECT_it
+#define ASN1_OCTET_STRING_NDEF_it GRPC_SHADOW_ASN1_OCTET_STRING_NDEF_it
+#define ASN1_OCTET_STRING_free GRPC_SHADOW_ASN1_OCTET_STRING_free
+#define ASN1_OCTET_STRING_it GRPC_SHADOW_ASN1_OCTET_STRING_it
+#define ASN1_OCTET_STRING_new GRPC_SHADOW_ASN1_OCTET_STRING_new
+#define ASN1_PRINTABLESTRING_free GRPC_SHADOW_ASN1_PRINTABLESTRING_free
+#define ASN1_PRINTABLESTRING_it GRPC_SHADOW_ASN1_PRINTABLESTRING_it
+#define ASN1_PRINTABLESTRING_new GRPC_SHADOW_ASN1_PRINTABLESTRING_new
+#define ASN1_PRINTABLE_free GRPC_SHADOW_ASN1_PRINTABLE_free
+#define ASN1_PRINTABLE_it GRPC_SHADOW_ASN1_PRINTABLE_it
+#define ASN1_PRINTABLE_new GRPC_SHADOW_ASN1_PRINTABLE_new
+#define ASN1_SEQUENCE_ANY_it GRPC_SHADOW_ASN1_SEQUENCE_ANY_it
+#define ASN1_SEQUENCE_it GRPC_SHADOW_ASN1_SEQUENCE_it
+#define ASN1_SET_ANY_it GRPC_SHADOW_ASN1_SET_ANY_it
+#define ASN1_T61STRING_free GRPC_SHADOW_ASN1_T61STRING_free
+#define ASN1_T61STRING_it GRPC_SHADOW_ASN1_T61STRING_it
+#define ASN1_T61STRING_new GRPC_SHADOW_ASN1_T61STRING_new
+#define ASN1_TBOOLEAN_it GRPC_SHADOW_ASN1_TBOOLEAN_it
+#define ASN1_TYPE_free GRPC_SHADOW_ASN1_TYPE_free
+#define ASN1_TYPE_new GRPC_SHADOW_ASN1_TYPE_new
+#define ASN1_UNIVERSALSTRING_free GRPC_SHADOW_ASN1_UNIVERSALSTRING_free
+#define ASN1_UNIVERSALSTRING_it GRPC_SHADOW_ASN1_UNIVERSALSTRING_it
+#define ASN1_UNIVERSALSTRING_new GRPC_SHADOW_ASN1_UNIVERSALSTRING_new
+#define ASN1_UTCTIME_free GRPC_SHADOW_ASN1_UTCTIME_free
+#define ASN1_UTCTIME_it GRPC_SHADOW_ASN1_UTCTIME_it
+#define ASN1_UTCTIME_new GRPC_SHADOW_ASN1_UTCTIME_new
+#define ASN1_UTF8STRING_free GRPC_SHADOW_ASN1_UTF8STRING_free
+#define ASN1_UTF8STRING_it GRPC_SHADOW_ASN1_UTF8STRING_it
+#define ASN1_UTF8STRING_new GRPC_SHADOW_ASN1_UTF8STRING_new
+#define ASN1_VISIBLESTRING_free GRPC_SHADOW_ASN1_VISIBLESTRING_free
+#define ASN1_VISIBLESTRING_it GRPC_SHADOW_ASN1_VISIBLESTRING_it
+#define ASN1_VISIBLESTRING_new GRPC_SHADOW_ASN1_VISIBLESTRING_new
+#define DIRECTORYSTRING_free GRPC_SHADOW_DIRECTORYSTRING_free
+#define DIRECTORYSTRING_it GRPC_SHADOW_DIRECTORYSTRING_it
+#define DIRECTORYSTRING_new GRPC_SHADOW_DIRECTORYSTRING_new
+#define DISPLAYTEXT_free GRPC_SHADOW_DISPLAYTEXT_free
+#define DISPLAYTEXT_it GRPC_SHADOW_DISPLAYTEXT_it
+#define DISPLAYTEXT_new GRPC_SHADOW_DISPLAYTEXT_new
+#define d2i_ASN1_BIT_STRING GRPC_SHADOW_d2i_ASN1_BIT_STRING
+#define d2i_ASN1_BMPSTRING GRPC_SHADOW_d2i_ASN1_BMPSTRING
+#define d2i_ASN1_ENUMERATED GRPC_SHADOW_d2i_ASN1_ENUMERATED
+#define d2i_ASN1_GENERALIZEDTIME GRPC_SHADOW_d2i_ASN1_GENERALIZEDTIME
+#define d2i_ASN1_GENERALSTRING GRPC_SHADOW_d2i_ASN1_GENERALSTRING
+#define d2i_ASN1_IA5STRING GRPC_SHADOW_d2i_ASN1_IA5STRING
+#define d2i_ASN1_INTEGER GRPC_SHADOW_d2i_ASN1_INTEGER
+#define d2i_ASN1_NULL GRPC_SHADOW_d2i_ASN1_NULL
+#define d2i_ASN1_OCTET_STRING GRPC_SHADOW_d2i_ASN1_OCTET_STRING
+#define d2i_ASN1_PRINTABLE GRPC_SHADOW_d2i_ASN1_PRINTABLE
+#define d2i_ASN1_PRINTABLESTRING GRPC_SHADOW_d2i_ASN1_PRINTABLESTRING
+#define d2i_ASN1_SEQUENCE_ANY GRPC_SHADOW_d2i_ASN1_SEQUENCE_ANY
+#define d2i_ASN1_SET_ANY GRPC_SHADOW_d2i_ASN1_SET_ANY
+#define d2i_ASN1_T61STRING GRPC_SHADOW_d2i_ASN1_T61STRING
+#define d2i_ASN1_TYPE GRPC_SHADOW_d2i_ASN1_TYPE
+#define d2i_ASN1_UNIVERSALSTRING GRPC_SHADOW_d2i_ASN1_UNIVERSALSTRING
+#define d2i_ASN1_UTCTIME GRPC_SHADOW_d2i_ASN1_UTCTIME
+#define d2i_ASN1_UTF8STRING GRPC_SHADOW_d2i_ASN1_UTF8STRING
+#define d2i_ASN1_VISIBLESTRING GRPC_SHADOW_d2i_ASN1_VISIBLESTRING
+#define d2i_DIRECTORYSTRING GRPC_SHADOW_d2i_DIRECTORYSTRING
+#define d2i_DISPLAYTEXT GRPC_SHADOW_d2i_DISPLAYTEXT
+#define i2d_ASN1_BIT_STRING GRPC_SHADOW_i2d_ASN1_BIT_STRING
+#define i2d_ASN1_BMPSTRING GRPC_SHADOW_i2d_ASN1_BMPSTRING
+#define i2d_ASN1_ENUMERATED GRPC_SHADOW_i2d_ASN1_ENUMERATED
+#define i2d_ASN1_GENERALIZEDTIME GRPC_SHADOW_i2d_ASN1_GENERALIZEDTIME
+#define i2d_ASN1_GENERALSTRING GRPC_SHADOW_i2d_ASN1_GENERALSTRING
+#define i2d_ASN1_IA5STRING GRPC_SHADOW_i2d_ASN1_IA5STRING
+#define i2d_ASN1_INTEGER GRPC_SHADOW_i2d_ASN1_INTEGER
+#define i2d_ASN1_NULL GRPC_SHADOW_i2d_ASN1_NULL
+#define i2d_ASN1_OCTET_STRING GRPC_SHADOW_i2d_ASN1_OCTET_STRING
+#define i2d_ASN1_PRINTABLE GRPC_SHADOW_i2d_ASN1_PRINTABLE
+#define i2d_ASN1_PRINTABLESTRING GRPC_SHADOW_i2d_ASN1_PRINTABLESTRING
+#define i2d_ASN1_SEQUENCE_ANY GRPC_SHADOW_i2d_ASN1_SEQUENCE_ANY
+#define i2d_ASN1_SET_ANY GRPC_SHADOW_i2d_ASN1_SET_ANY
+#define i2d_ASN1_T61STRING GRPC_SHADOW_i2d_ASN1_T61STRING
+#define i2d_ASN1_TYPE GRPC_SHADOW_i2d_ASN1_TYPE
+#define i2d_ASN1_UNIVERSALSTRING GRPC_SHADOW_i2d_ASN1_UNIVERSALSTRING
+#define i2d_ASN1_UTCTIME GRPC_SHADOW_i2d_ASN1_UTCTIME
+#define i2d_ASN1_UTF8STRING GRPC_SHADOW_i2d_ASN1_UTF8STRING
+#define i2d_ASN1_VISIBLESTRING GRPC_SHADOW_i2d_ASN1_VISIBLESTRING
+#define i2d_DIRECTORYSTRING GRPC_SHADOW_i2d_DIRECTORYSTRING
+#define i2d_DISPLAYTEXT GRPC_SHADOW_i2d_DISPLAYTEXT
+#define asn1_do_adb GRPC_SHADOW_asn1_do_adb
+#define asn1_enc_free GRPC_SHADOW_asn1_enc_free
+#define asn1_enc_init GRPC_SHADOW_asn1_enc_init
+#define asn1_enc_restore GRPC_SHADOW_asn1_enc_restore
+#define asn1_enc_save GRPC_SHADOW_asn1_enc_save
+#define asn1_get_choice_selector GRPC_SHADOW_asn1_get_choice_selector
+#define asn1_get_field_ptr GRPC_SHADOW_asn1_get_field_ptr
+#define asn1_refcount_dec_and_test_zero GRPC_SHADOW_asn1_refcount_dec_and_test_zero
+#define asn1_refcount_set_one GRPC_SHADOW_asn1_refcount_set_one
+#define asn1_set_choice_selector GRPC_SHADOW_asn1_set_choice_selector
+#define OPENSSL_gmtime GRPC_SHADOW_OPENSSL_gmtime
+#define OPENSSL_gmtime_adj GRPC_SHADOW_OPENSSL_gmtime_adj
+#define OPENSSL_gmtime_diff GRPC_SHADOW_OPENSSL_gmtime_diff
+#define ENGINE_free GRPC_SHADOW_ENGINE_free
+#define ENGINE_get_ECDSA_method GRPC_SHADOW_ENGINE_get_ECDSA_method
+#define ENGINE_get_RSA_method GRPC_SHADOW_ENGINE_get_RSA_method
+#define ENGINE_new GRPC_SHADOW_ENGINE_new
+#define ENGINE_set_ECDSA_method GRPC_SHADOW_ENGINE_set_ECDSA_method
+#define ENGINE_set_RSA_method GRPC_SHADOW_ENGINE_set_RSA_method
+#define METHOD_ref GRPC_SHADOW_METHOD_ref
+#define METHOD_unref GRPC_SHADOW_METHOD_unref
+#define DH_compute_key GRPC_SHADOW_DH_compute_key
+#define DH_free GRPC_SHADOW_DH_free
+#define DH_generate_key GRPC_SHADOW_DH_generate_key
+#define DH_generate_parameters_ex GRPC_SHADOW_DH_generate_parameters_ex
+#define DH_get0_key GRPC_SHADOW_DH_get0_key
+#define DH_get0_pqg GRPC_SHADOW_DH_get0_pqg
+#define DH_get_ex_data GRPC_SHADOW_DH_get_ex_data
+#define DH_get_ex_new_index GRPC_SHADOW_DH_get_ex_new_index
+#define DH_new GRPC_SHADOW_DH_new
+#define DH_num_bits GRPC_SHADOW_DH_num_bits
+#define DH_set0_key GRPC_SHADOW_DH_set0_key
+#define DH_set0_pqg GRPC_SHADOW_DH_set0_pqg
+#define DH_set_ex_data GRPC_SHADOW_DH_set_ex_data
+#define DH_size GRPC_SHADOW_DH_size
+#define DH_up_ref GRPC_SHADOW_DH_up_ref
+#define DHparams_dup GRPC_SHADOW_DHparams_dup
+#define BN_get_rfc3526_prime_1536 GRPC_SHADOW_BN_get_rfc3526_prime_1536
+#define DH_check GRPC_SHADOW_DH_check
+#define DH_check_pub_key GRPC_SHADOW_DH_check_pub_key
+#define DH_marshal_parameters GRPC_SHADOW_DH_marshal_parameters
+#define DH_parse_parameters GRPC_SHADOW_DH_parse_parameters
+#define d2i_DHparams GRPC_SHADOW_d2i_DHparams
+#define i2d_DHparams GRPC_SHADOW_i2d_DHparams
+#define DSA_SIG_free GRPC_SHADOW_DSA_SIG_free
+#define DSA_SIG_new GRPC_SHADOW_DSA_SIG_new
+#define DSA_check_signature GRPC_SHADOW_DSA_check_signature
+#define DSA_do_check_signature GRPC_SHADOW_DSA_do_check_signature
+#define DSA_do_sign GRPC_SHADOW_DSA_do_sign
+#define DSA_do_verify GRPC_SHADOW_DSA_do_verify
+#define DSA_dup_DH GRPC_SHADOW_DSA_dup_DH
+#define DSA_free GRPC_SHADOW_DSA_free
+#define DSA_generate_key GRPC_SHADOW_DSA_generate_key
+#define DSA_generate_parameters_ex GRPC_SHADOW_DSA_generate_parameters_ex
+#define DSA_get0_key GRPC_SHADOW_DSA_get0_key
+#define DSA_get0_pqg GRPC_SHADOW_DSA_get0_pqg
+#define DSA_get_ex_data GRPC_SHADOW_DSA_get_ex_data
+#define DSA_get_ex_new_index GRPC_SHADOW_DSA_get_ex_new_index
+#define DSA_new GRPC_SHADOW_DSA_new
+#define DSA_set0_key GRPC_SHADOW_DSA_set0_key
+#define DSA_set0_pqg GRPC_SHADOW_DSA_set0_pqg
+#define DSA_set_ex_data GRPC_SHADOW_DSA_set_ex_data
+#define DSA_sign GRPC_SHADOW_DSA_sign
+#define DSA_size GRPC_SHADOW_DSA_size
+#define DSA_up_ref GRPC_SHADOW_DSA_up_ref
+#define DSA_verify GRPC_SHADOW_DSA_verify
+#define DSAparams_dup GRPC_SHADOW_DSAparams_dup
+#define DSA_SIG_marshal GRPC_SHADOW_DSA_SIG_marshal
+#define DSA_SIG_parse GRPC_SHADOW_DSA_SIG_parse
+#define DSA_marshal_parameters GRPC_SHADOW_DSA_marshal_parameters
+#define DSA_marshal_private_key GRPC_SHADOW_DSA_marshal_private_key
+#define DSA_marshal_public_key GRPC_SHADOW_DSA_marshal_public_key
+#define DSA_parse_parameters GRPC_SHADOW_DSA_parse_parameters
+#define DSA_parse_private_key GRPC_SHADOW_DSA_parse_private_key
+#define DSA_parse_public_key GRPC_SHADOW_DSA_parse_public_key
+#define d2i_DSAPrivateKey GRPC_SHADOW_d2i_DSAPrivateKey
+#define d2i_DSAPublicKey GRPC_SHADOW_d2i_DSAPublicKey
+#define d2i_DSA_SIG GRPC_SHADOW_d2i_DSA_SIG
+#define d2i_DSAparams GRPC_SHADOW_d2i_DSAparams
+#define i2d_DSAPrivateKey GRPC_SHADOW_i2d_DSAPrivateKey
+#define i2d_DSAPublicKey GRPC_SHADOW_i2d_DSAPublicKey
+#define i2d_DSA_SIG GRPC_SHADOW_i2d_DSA_SIG
+#define i2d_DSAparams GRPC_SHADOW_i2d_DSAparams
+#define RSAPrivateKey_dup GRPC_SHADOW_RSAPrivateKey_dup
+#define RSAPublicKey_dup GRPC_SHADOW_RSAPublicKey_dup
+#define RSA_marshal_private_key GRPC_SHADOW_RSA_marshal_private_key
+#define RSA_marshal_public_key GRPC_SHADOW_RSA_marshal_public_key
+#define RSA_parse_private_key GRPC_SHADOW_RSA_parse_private_key
+#define RSA_parse_public_key GRPC_SHADOW_RSA_parse_public_key
+#define RSA_private_key_from_bytes GRPC_SHADOW_RSA_private_key_from_bytes
+#define RSA_private_key_to_bytes GRPC_SHADOW_RSA_private_key_to_bytes
+#define RSA_public_key_from_bytes GRPC_SHADOW_RSA_public_key_from_bytes
+#define RSA_public_key_to_bytes GRPC_SHADOW_RSA_public_key_to_bytes
+#define d2i_RSAPrivateKey GRPC_SHADOW_d2i_RSAPrivateKey
+#define d2i_RSAPublicKey GRPC_SHADOW_d2i_RSAPublicKey
+#define i2d_RSAPrivateKey GRPC_SHADOW_i2d_RSAPrivateKey
+#define i2d_RSAPublicKey GRPC_SHADOW_i2d_RSAPublicKey
+#define EC_KEY_marshal_curve_name GRPC_SHADOW_EC_KEY_marshal_curve_name
+#define EC_KEY_marshal_private_key GRPC_SHADOW_EC_KEY_marshal_private_key
+#define EC_KEY_parse_curve_name GRPC_SHADOW_EC_KEY_parse_curve_name
+#define EC_KEY_parse_parameters GRPC_SHADOW_EC_KEY_parse_parameters
+#define EC_KEY_parse_private_key GRPC_SHADOW_EC_KEY_parse_private_key
+#define EC_POINT_point2cbb GRPC_SHADOW_EC_POINT_point2cbb
+#define d2i_ECParameters GRPC_SHADOW_d2i_ECParameters
+#define d2i_ECPrivateKey GRPC_SHADOW_d2i_ECPrivateKey
+#define i2d_ECParameters GRPC_SHADOW_i2d_ECParameters
+#define i2d_ECPrivateKey GRPC_SHADOW_i2d_ECPrivateKey
+#define i2o_ECPublicKey GRPC_SHADOW_i2o_ECPublicKey
+#define o2i_ECPublicKey GRPC_SHADOW_o2i_ECPublicKey
+#define ECDH_compute_key GRPC_SHADOW_ECDH_compute_key
+#define ECDSA_SIG_from_bytes GRPC_SHADOW_ECDSA_SIG_from_bytes
+#define ECDSA_SIG_marshal GRPC_SHADOW_ECDSA_SIG_marshal
+#define ECDSA_SIG_max_len GRPC_SHADOW_ECDSA_SIG_max_len
+#define ECDSA_SIG_parse GRPC_SHADOW_ECDSA_SIG_parse
+#define ECDSA_SIG_to_bytes GRPC_SHADOW_ECDSA_SIG_to_bytes
+#define ECDSA_sign GRPC_SHADOW_ECDSA_sign
+#define ECDSA_size GRPC_SHADOW_ECDSA_size
+#define ECDSA_verify GRPC_SHADOW_ECDSA_verify
+#define d2i_ECDSA_SIG GRPC_SHADOW_d2i_ECDSA_SIG
+#define i2d_ECDSA_SIG GRPC_SHADOW_i2d_ECDSA_SIG
+#define AES_CMAC GRPC_SHADOW_AES_CMAC
+#define CMAC_CTX_free GRPC_SHADOW_CMAC_CTX_free
+#define CMAC_CTX_new GRPC_SHADOW_CMAC_CTX_new
+#define CMAC_Final GRPC_SHADOW_CMAC_Final
+#define CMAC_Init GRPC_SHADOW_CMAC_Init
+#define CMAC_Reset GRPC_SHADOW_CMAC_Reset
+#define CMAC_Update GRPC_SHADOW_CMAC_Update
+#define EVP_DigestSign GRPC_SHADOW_EVP_DigestSign
+#define EVP_DigestSignFinal GRPC_SHADOW_EVP_DigestSignFinal
+#define EVP_DigestSignInit GRPC_SHADOW_EVP_DigestSignInit
+#define EVP_DigestSignUpdate GRPC_SHADOW_EVP_DigestSignUpdate
+#define EVP_DigestVerify GRPC_SHADOW_EVP_DigestVerify
+#define EVP_DigestVerifyFinal GRPC_SHADOW_EVP_DigestVerifyFinal
+#define EVP_DigestVerifyInit GRPC_SHADOW_EVP_DigestVerifyInit
+#define EVP_DigestVerifyUpdate GRPC_SHADOW_EVP_DigestVerifyUpdate
+#define EVP_PKEY_CTX_get_signature_md GRPC_SHADOW_EVP_PKEY_CTX_get_signature_md
+#define EVP_PKEY_CTX_set_signature_md GRPC_SHADOW_EVP_PKEY_CTX_set_signature_md
+#define EVP_PKEY_assign GRPC_SHADOW_EVP_PKEY_assign
+#define EVP_PKEY_assign_DSA GRPC_SHADOW_EVP_PKEY_assign_DSA
+#define EVP_PKEY_assign_EC_KEY GRPC_SHADOW_EVP_PKEY_assign_EC_KEY
+#define EVP_PKEY_assign_RSA GRPC_SHADOW_EVP_PKEY_assign_RSA
+#define EVP_PKEY_bits GRPC_SHADOW_EVP_PKEY_bits
+#define EVP_PKEY_cmp GRPC_SHADOW_EVP_PKEY_cmp
+#define EVP_PKEY_cmp_parameters GRPC_SHADOW_EVP_PKEY_cmp_parameters
+#define EVP_PKEY_copy_parameters GRPC_SHADOW_EVP_PKEY_copy_parameters
+#define EVP_PKEY_free GRPC_SHADOW_EVP_PKEY_free
+#define EVP_PKEY_get0_DH GRPC_SHADOW_EVP_PKEY_get0_DH
+#define EVP_PKEY_get0_DSA GRPC_SHADOW_EVP_PKEY_get0_DSA
+#define EVP_PKEY_get0_EC_KEY GRPC_SHADOW_EVP_PKEY_get0_EC_KEY
+#define EVP_PKEY_get0_RSA GRPC_SHADOW_EVP_PKEY_get0_RSA
+#define EVP_PKEY_get1_DSA GRPC_SHADOW_EVP_PKEY_get1_DSA
+#define EVP_PKEY_get1_EC_KEY GRPC_SHADOW_EVP_PKEY_get1_EC_KEY
+#define EVP_PKEY_get1_RSA GRPC_SHADOW_EVP_PKEY_get1_RSA
+#define EVP_PKEY_id GRPC_SHADOW_EVP_PKEY_id
+#define EVP_PKEY_is_opaque GRPC_SHADOW_EVP_PKEY_is_opaque
+#define EVP_PKEY_missing_parameters GRPC_SHADOW_EVP_PKEY_missing_parameters
+#define EVP_PKEY_new GRPC_SHADOW_EVP_PKEY_new
+#define EVP_PKEY_set1_DSA GRPC_SHADOW_EVP_PKEY_set1_DSA
+#define EVP_PKEY_set1_EC_KEY GRPC_SHADOW_EVP_PKEY_set1_EC_KEY
+#define EVP_PKEY_set1_RSA GRPC_SHADOW_EVP_PKEY_set1_RSA
+#define EVP_PKEY_set_type GRPC_SHADOW_EVP_PKEY_set_type
+#define EVP_PKEY_size GRPC_SHADOW_EVP_PKEY_size
+#define EVP_PKEY_type GRPC_SHADOW_EVP_PKEY_type
+#define EVP_PKEY_up_ref GRPC_SHADOW_EVP_PKEY_up_ref
+#define EVP_cleanup GRPC_SHADOW_EVP_cleanup
+#define OPENSSL_add_all_algorithms_conf GRPC_SHADOW_OPENSSL_add_all_algorithms_conf
+#define OpenSSL_add_all_algorithms GRPC_SHADOW_OpenSSL_add_all_algorithms
+#define OpenSSL_add_all_ciphers GRPC_SHADOW_OpenSSL_add_all_ciphers
+#define OpenSSL_add_all_digests GRPC_SHADOW_OpenSSL_add_all_digests
+#define EVP_marshal_private_key GRPC_SHADOW_EVP_marshal_private_key
+#define EVP_marshal_public_key GRPC_SHADOW_EVP_marshal_public_key
+#define EVP_parse_private_key GRPC_SHADOW_EVP_parse_private_key
+#define EVP_parse_public_key GRPC_SHADOW_EVP_parse_public_key
+#define d2i_AutoPrivateKey GRPC_SHADOW_d2i_AutoPrivateKey
+#define d2i_PrivateKey GRPC_SHADOW_d2i_PrivateKey
+#define i2d_PublicKey GRPC_SHADOW_i2d_PublicKey
+#define EVP_PKEY_CTX_ctrl GRPC_SHADOW_EVP_PKEY_CTX_ctrl
+#define EVP_PKEY_CTX_dup GRPC_SHADOW_EVP_PKEY_CTX_dup
+#define EVP_PKEY_CTX_free GRPC_SHADOW_EVP_PKEY_CTX_free
+#define EVP_PKEY_CTX_get0_pkey GRPC_SHADOW_EVP_PKEY_CTX_get0_pkey
+#define EVP_PKEY_CTX_new GRPC_SHADOW_EVP_PKEY_CTX_new
+#define EVP_PKEY_CTX_new_id GRPC_SHADOW_EVP_PKEY_CTX_new_id
+#define EVP_PKEY_decrypt GRPC_SHADOW_EVP_PKEY_decrypt
+#define EVP_PKEY_decrypt_init GRPC_SHADOW_EVP_PKEY_decrypt_init
+#define EVP_PKEY_derive GRPC_SHADOW_EVP_PKEY_derive
+#define EVP_PKEY_derive_init GRPC_SHADOW_EVP_PKEY_derive_init
+#define EVP_PKEY_derive_set_peer GRPC_SHADOW_EVP_PKEY_derive_set_peer
+#define EVP_PKEY_encrypt GRPC_SHADOW_EVP_PKEY_encrypt
+#define EVP_PKEY_encrypt_init GRPC_SHADOW_EVP_PKEY_encrypt_init
+#define EVP_PKEY_keygen GRPC_SHADOW_EVP_PKEY_keygen
+#define EVP_PKEY_keygen_init GRPC_SHADOW_EVP_PKEY_keygen_init
+#define EVP_PKEY_sign GRPC_SHADOW_EVP_PKEY_sign
+#define EVP_PKEY_sign_init GRPC_SHADOW_EVP_PKEY_sign_init
+#define EVP_PKEY_verify GRPC_SHADOW_EVP_PKEY_verify
+#define EVP_PKEY_verify_init GRPC_SHADOW_EVP_PKEY_verify_init
+#define EVP_PKEY_verify_recover GRPC_SHADOW_EVP_PKEY_verify_recover
+#define EVP_PKEY_verify_recover_init GRPC_SHADOW_EVP_PKEY_verify_recover_init
+#define dsa_asn1_meth GRPC_SHADOW_dsa_asn1_meth
+#define ec_pkey_meth GRPC_SHADOW_ec_pkey_meth
+#define ec_asn1_meth GRPC_SHADOW_ec_asn1_meth
+#define ed25519_pkey_meth GRPC_SHADOW_ed25519_pkey_meth
+#define EVP_PKEY_new_ed25519_private GRPC_SHADOW_EVP_PKEY_new_ed25519_private
+#define EVP_PKEY_new_ed25519_public GRPC_SHADOW_EVP_PKEY_new_ed25519_public
+#define ed25519_asn1_meth GRPC_SHADOW_ed25519_asn1_meth
+#define EVP_PKEY_CTX_get0_rsa_oaep_label GRPC_SHADOW_EVP_PKEY_CTX_get0_rsa_oaep_label
+#define EVP_PKEY_CTX_get_rsa_mgf1_md GRPC_SHADOW_EVP_PKEY_CTX_get_rsa_mgf1_md
+#define EVP_PKEY_CTX_get_rsa_oaep_md GRPC_SHADOW_EVP_PKEY_CTX_get_rsa_oaep_md
+#define EVP_PKEY_CTX_get_rsa_padding GRPC_SHADOW_EVP_PKEY_CTX_get_rsa_padding
+#define EVP_PKEY_CTX_get_rsa_pss_saltlen GRPC_SHADOW_EVP_PKEY_CTX_get_rsa_pss_saltlen
+#define EVP_PKEY_CTX_set0_rsa_oaep_label GRPC_SHADOW_EVP_PKEY_CTX_set0_rsa_oaep_label
+#define EVP_PKEY_CTX_set_rsa_keygen_bits GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_keygen_bits
+#define EVP_PKEY_CTX_set_rsa_keygen_pubexp GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_keygen_pubexp
+#define EVP_PKEY_CTX_set_rsa_mgf1_md GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_mgf1_md
+#define EVP_PKEY_CTX_set_rsa_oaep_md GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_oaep_md
+#define EVP_PKEY_CTX_set_rsa_padding GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_padding
+#define EVP_PKEY_CTX_set_rsa_pss_saltlen GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_pss_saltlen
+#define rsa_pkey_meth GRPC_SHADOW_rsa_pkey_meth
+#define rsa_asn1_meth GRPC_SHADOW_rsa_asn1_meth
+#define PKCS5_PBKDF2_HMAC GRPC_SHADOW_PKCS5_PBKDF2_HMAC
+#define PKCS5_PBKDF2_HMAC_SHA1 GRPC_SHADOW_PKCS5_PBKDF2_HMAC_SHA1
+#define EVP_PKEY_print_params GRPC_SHADOW_EVP_PKEY_print_params
+#define EVP_PKEY_print_private GRPC_SHADOW_EVP_PKEY_print_private
+#define EVP_PKEY_print_public GRPC_SHADOW_EVP_PKEY_print_public
+#define EVP_PBE_scrypt GRPC_SHADOW_EVP_PBE_scrypt
+#define EVP_SignFinal GRPC_SHADOW_EVP_SignFinal
+#define EVP_SignInit GRPC_SHADOW_EVP_SignInit
+#define EVP_SignInit_ex GRPC_SHADOW_EVP_SignInit_ex
+#define EVP_SignUpdate GRPC_SHADOW_EVP_SignUpdate
+#define EVP_VerifyFinal GRPC_SHADOW_EVP_VerifyFinal
+#define EVP_VerifyInit GRPC_SHADOW_EVP_VerifyInit
+#define EVP_VerifyInit_ex GRPC_SHADOW_EVP_VerifyInit_ex
+#define EVP_VerifyUpdate GRPC_SHADOW_EVP_VerifyUpdate
+#define HKDF GRPC_SHADOW_HKDF
+#define HKDF_expand GRPC_SHADOW_HKDF_expand
+#define HKDF_extract GRPC_SHADOW_HKDF_extract
+#define PEM_read_DSAPrivateKey GRPC_SHADOW_PEM_read_DSAPrivateKey
+#define PEM_read_DSA_PUBKEY GRPC_SHADOW_PEM_read_DSA_PUBKEY
+#define PEM_read_DSAparams GRPC_SHADOW_PEM_read_DSAparams
+#define PEM_read_ECPrivateKey GRPC_SHADOW_PEM_read_ECPrivateKey
+#define PEM_read_EC_PUBKEY GRPC_SHADOW_PEM_read_EC_PUBKEY
+#define PEM_read_PUBKEY GRPC_SHADOW_PEM_read_PUBKEY
+#define PEM_read_RSAPrivateKey GRPC_SHADOW_PEM_read_RSAPrivateKey
+#define PEM_read_RSAPublicKey GRPC_SHADOW_PEM_read_RSAPublicKey
+#define PEM_read_RSA_PUBKEY GRPC_SHADOW_PEM_read_RSA_PUBKEY
+#define PEM_read_X509_CRL GRPC_SHADOW_PEM_read_X509_CRL
+#define PEM_read_X509_REQ GRPC_SHADOW_PEM_read_X509_REQ
+#define PEM_read_bio_DSAPrivateKey GRPC_SHADOW_PEM_read_bio_DSAPrivateKey
+#define PEM_read_bio_DSA_PUBKEY GRPC_SHADOW_PEM_read_bio_DSA_PUBKEY
+#define PEM_read_bio_DSAparams GRPC_SHADOW_PEM_read_bio_DSAparams
+#define PEM_read_bio_ECPrivateKey GRPC_SHADOW_PEM_read_bio_ECPrivateKey
+#define PEM_read_bio_EC_PUBKEY GRPC_SHADOW_PEM_read_bio_EC_PUBKEY
+#define PEM_read_bio_PUBKEY GRPC_SHADOW_PEM_read_bio_PUBKEY
+#define PEM_read_bio_RSAPrivateKey GRPC_SHADOW_PEM_read_bio_RSAPrivateKey
+#define PEM_read_bio_RSAPublicKey GRPC_SHADOW_PEM_read_bio_RSAPublicKey
+#define PEM_read_bio_RSA_PUBKEY GRPC_SHADOW_PEM_read_bio_RSA_PUBKEY
+#define PEM_read_bio_X509_CRL GRPC_SHADOW_PEM_read_bio_X509_CRL
+#define PEM_read_bio_X509_REQ GRPC_SHADOW_PEM_read_bio_X509_REQ
+#define PEM_write_DHparams GRPC_SHADOW_PEM_write_DHparams
+#define PEM_write_DSAPrivateKey GRPC_SHADOW_PEM_write_DSAPrivateKey
+#define PEM_write_DSA_PUBKEY GRPC_SHADOW_PEM_write_DSA_PUBKEY
+#define PEM_write_DSAparams GRPC_SHADOW_PEM_write_DSAparams
+#define PEM_write_ECPrivateKey GRPC_SHADOW_PEM_write_ECPrivateKey
+#define PEM_write_EC_PUBKEY GRPC_SHADOW_PEM_write_EC_PUBKEY
+#define PEM_write_PUBKEY GRPC_SHADOW_PEM_write_PUBKEY
+#define PEM_write_RSAPrivateKey GRPC_SHADOW_PEM_write_RSAPrivateKey
+#define PEM_write_RSAPublicKey GRPC_SHADOW_PEM_write_RSAPublicKey
+#define PEM_write_RSA_PUBKEY GRPC_SHADOW_PEM_write_RSA_PUBKEY
+#define PEM_write_X509_CRL GRPC_SHADOW_PEM_write_X509_CRL
+#define PEM_write_X509_REQ GRPC_SHADOW_PEM_write_X509_REQ
+#define PEM_write_X509_REQ_NEW GRPC_SHADOW_PEM_write_X509_REQ_NEW
+#define PEM_write_bio_DHparams GRPC_SHADOW_PEM_write_bio_DHparams
+#define PEM_write_bio_DSAPrivateKey GRPC_SHADOW_PEM_write_bio_DSAPrivateKey
+#define PEM_write_bio_DSA_PUBKEY GRPC_SHADOW_PEM_write_bio_DSA_PUBKEY
+#define PEM_write_bio_DSAparams GRPC_SHADOW_PEM_write_bio_DSAparams
+#define PEM_write_bio_ECPrivateKey GRPC_SHADOW_PEM_write_bio_ECPrivateKey
+#define PEM_write_bio_EC_PUBKEY GRPC_SHADOW_PEM_write_bio_EC_PUBKEY
+#define PEM_write_bio_PUBKEY GRPC_SHADOW_PEM_write_bio_PUBKEY
+#define PEM_write_bio_RSAPrivateKey GRPC_SHADOW_PEM_write_bio_RSAPrivateKey
+#define PEM_write_bio_RSAPublicKey GRPC_SHADOW_PEM_write_bio_RSAPublicKey
+#define PEM_write_bio_RSA_PUBKEY GRPC_SHADOW_PEM_write_bio_RSA_PUBKEY
+#define PEM_write_bio_X509_CRL GRPC_SHADOW_PEM_write_bio_X509_CRL
+#define PEM_write_bio_X509_REQ GRPC_SHADOW_PEM_write_bio_X509_REQ
+#define PEM_write_bio_X509_REQ_NEW GRPC_SHADOW_PEM_write_bio_X509_REQ_NEW
+#define PEM_X509_INFO_read GRPC_SHADOW_PEM_X509_INFO_read
+#define PEM_X509_INFO_read_bio GRPC_SHADOW_PEM_X509_INFO_read_bio
+#define PEM_X509_INFO_write_bio GRPC_SHADOW_PEM_X509_INFO_write_bio
+#define PEM_ASN1_read GRPC_SHADOW_PEM_ASN1_read
+#define PEM_ASN1_write GRPC_SHADOW_PEM_ASN1_write
+#define PEM_ASN1_write_bio GRPC_SHADOW_PEM_ASN1_write_bio
+#define PEM_bytes_read_bio GRPC_SHADOW_PEM_bytes_read_bio
+#define PEM_def_callback GRPC_SHADOW_PEM_def_callback
+#define PEM_dek_info GRPC_SHADOW_PEM_dek_info
+#define PEM_do_header GRPC_SHADOW_PEM_do_header
+#define PEM_get_EVP_CIPHER_INFO GRPC_SHADOW_PEM_get_EVP_CIPHER_INFO
+#define PEM_proc_type GRPC_SHADOW_PEM_proc_type
+#define PEM_read GRPC_SHADOW_PEM_read
+#define PEM_read_bio GRPC_SHADOW_PEM_read_bio
+#define PEM_write GRPC_SHADOW_PEM_write
+#define PEM_write_bio GRPC_SHADOW_PEM_write_bio
+#define PEM_ASN1_read_bio GRPC_SHADOW_PEM_ASN1_read_bio
+#define PEM_read_PKCS8 GRPC_SHADOW_PEM_read_PKCS8
+#define PEM_read_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_PEM_read_PKCS8_PRIV_KEY_INFO
+#define PEM_read_bio_PKCS8 GRPC_SHADOW_PEM_read_bio_PKCS8
+#define PEM_read_bio_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_PEM_read_bio_PKCS8_PRIV_KEY_INFO
+#define PEM_write_PKCS8 GRPC_SHADOW_PEM_write_PKCS8
+#define PEM_write_PKCS8PrivateKey GRPC_SHADOW_PEM_write_PKCS8PrivateKey
+#define PEM_write_PKCS8PrivateKey_nid GRPC_SHADOW_PEM_write_PKCS8PrivateKey_nid
+#define PEM_write_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_PEM_write_PKCS8_PRIV_KEY_INFO
+#define PEM_write_bio_PKCS8 GRPC_SHADOW_PEM_write_bio_PKCS8
+#define PEM_write_bio_PKCS8PrivateKey GRPC_SHADOW_PEM_write_bio_PKCS8PrivateKey
+#define PEM_write_bio_PKCS8PrivateKey_nid GRPC_SHADOW_PEM_write_bio_PKCS8PrivateKey_nid
+#define PEM_write_bio_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_PEM_write_bio_PKCS8_PRIV_KEY_INFO
+#define d2i_PKCS8PrivateKey_bio GRPC_SHADOW_d2i_PKCS8PrivateKey_bio
+#define d2i_PKCS8PrivateKey_fp GRPC_SHADOW_d2i_PKCS8PrivateKey_fp
+#define i2d_PKCS8PrivateKey_bio GRPC_SHADOW_i2d_PKCS8PrivateKey_bio
+#define i2d_PKCS8PrivateKey_fp GRPC_SHADOW_i2d_PKCS8PrivateKey_fp
+#define i2d_PKCS8PrivateKey_nid_bio GRPC_SHADOW_i2d_PKCS8PrivateKey_nid_bio
+#define i2d_PKCS8PrivateKey_nid_fp GRPC_SHADOW_i2d_PKCS8PrivateKey_nid_fp
+#define PEM_read_DHparams GRPC_SHADOW_PEM_read_DHparams
+#define PEM_read_PrivateKey GRPC_SHADOW_PEM_read_PrivateKey
+#define PEM_read_bio_DHparams GRPC_SHADOW_PEM_read_bio_DHparams
+#define PEM_read_bio_PrivateKey GRPC_SHADOW_PEM_read_bio_PrivateKey
+#define PEM_write_PrivateKey GRPC_SHADOW_PEM_write_PrivateKey
+#define PEM_write_bio_PrivateKey GRPC_SHADOW_PEM_write_bio_PrivateKey
+#define PEM_read_X509 GRPC_SHADOW_PEM_read_X509
+#define PEM_read_bio_X509 GRPC_SHADOW_PEM_read_bio_X509
+#define PEM_write_X509 GRPC_SHADOW_PEM_write_X509
+#define PEM_write_bio_X509 GRPC_SHADOW_PEM_write_bio_X509
+#define PEM_read_X509_AUX GRPC_SHADOW_PEM_read_X509_AUX
+#define PEM_read_bio_X509_AUX GRPC_SHADOW_PEM_read_bio_X509_AUX
+#define PEM_write_X509_AUX GRPC_SHADOW_PEM_write_X509_AUX
+#define PEM_write_bio_X509_AUX GRPC_SHADOW_PEM_write_bio_X509_AUX
+#define ASN1_digest GRPC_SHADOW_ASN1_digest
+#define ASN1_item_digest GRPC_SHADOW_ASN1_item_digest
+#define ASN1_item_sign GRPC_SHADOW_ASN1_item_sign
+#define ASN1_item_sign_ctx GRPC_SHADOW_ASN1_item_sign_ctx
+#define ASN1_STRING_print_ex GRPC_SHADOW_ASN1_STRING_print_ex
+#define ASN1_STRING_print_ex_fp GRPC_SHADOW_ASN1_STRING_print_ex_fp
+#define ASN1_STRING_to_UTF8 GRPC_SHADOW_ASN1_STRING_to_UTF8
+#define X509_NAME_print_ex GRPC_SHADOW_X509_NAME_print_ex
+#define X509_NAME_print_ex_fp GRPC_SHADOW_X509_NAME_print_ex_fp
+#define ASN1_item_verify GRPC_SHADOW_ASN1_item_verify
+#define x509_digest_sign_algorithm GRPC_SHADOW_x509_digest_sign_algorithm
+#define x509_digest_verify_init GRPC_SHADOW_x509_digest_verify_init
+#define ASN1_generate_nconf GRPC_SHADOW_ASN1_generate_nconf
+#define ASN1_generate_v3 GRPC_SHADOW_ASN1_generate_v3
+#define X509_LOOKUP_hash_dir GRPC_SHADOW_X509_LOOKUP_hash_dir
+#define X509_LOOKUP_file GRPC_SHADOW_X509_LOOKUP_file
+#define X509_load_cert_crl_file GRPC_SHADOW_X509_load_cert_crl_file
+#define X509_load_cert_file GRPC_SHADOW_X509_load_cert_file
+#define X509_load_crl_file GRPC_SHADOW_X509_load_crl_file
+#define i2d_PrivateKey GRPC_SHADOW_i2d_PrivateKey
+#define RSA_PSS_PARAMS_free GRPC_SHADOW_RSA_PSS_PARAMS_free
+#define RSA_PSS_PARAMS_it GRPC_SHADOW_RSA_PSS_PARAMS_it
+#define RSA_PSS_PARAMS_new GRPC_SHADOW_RSA_PSS_PARAMS_new
+#define d2i_RSA_PSS_PARAMS GRPC_SHADOW_d2i_RSA_PSS_PARAMS
+#define i2d_RSA_PSS_PARAMS GRPC_SHADOW_i2d_RSA_PSS_PARAMS
+#define x509_print_rsa_pss_params GRPC_SHADOW_x509_print_rsa_pss_params
+#define x509_rsa_ctx_to_pss GRPC_SHADOW_x509_rsa_ctx_to_pss
+#define x509_rsa_pss_to_ctx GRPC_SHADOW_x509_rsa_pss_to_ctx
+#define X509_CRL_print GRPC_SHADOW_X509_CRL_print
+#define X509_CRL_print_fp GRPC_SHADOW_X509_CRL_print_fp
+#define X509_REQ_print GRPC_SHADOW_X509_REQ_print
+#define X509_REQ_print_ex GRPC_SHADOW_X509_REQ_print_ex
+#define X509_REQ_print_fp GRPC_SHADOW_X509_REQ_print_fp
+#define ASN1_GENERALIZEDTIME_print GRPC_SHADOW_ASN1_GENERALIZEDTIME_print
+#define ASN1_STRING_print GRPC_SHADOW_ASN1_STRING_print
+#define ASN1_TIME_print GRPC_SHADOW_ASN1_TIME_print
+#define ASN1_UTCTIME_print GRPC_SHADOW_ASN1_UTCTIME_print
+#define X509_NAME_print GRPC_SHADOW_X509_NAME_print
+#define X509_ocspid_print GRPC_SHADOW_X509_ocspid_print
+#define X509_print GRPC_SHADOW_X509_print
+#define X509_print_ex GRPC_SHADOW_X509_print_ex
+#define X509_print_ex_fp GRPC_SHADOW_X509_print_ex_fp
+#define X509_print_fp GRPC_SHADOW_X509_print_fp
+#define X509_signature_print GRPC_SHADOW_X509_signature_print
+#define X509_CERT_AUX_print GRPC_SHADOW_X509_CERT_AUX_print
+#define PKCS8_pkey_get0 GRPC_SHADOW_PKCS8_pkey_get0
+#define PKCS8_pkey_set0 GRPC_SHADOW_PKCS8_pkey_set0
+#define X509_signature_dump GRPC_SHADOW_X509_signature_dump
+#define X509_ATTRIBUTE_count GRPC_SHADOW_X509_ATTRIBUTE_count
+#define X509_ATTRIBUTE_create_by_NID GRPC_SHADOW_X509_ATTRIBUTE_create_by_NID
+#define X509_ATTRIBUTE_create_by_OBJ GRPC_SHADOW_X509_ATTRIBUTE_create_by_OBJ
+#define X509_ATTRIBUTE_create_by_txt GRPC_SHADOW_X509_ATTRIBUTE_create_by_txt
+#define X509_ATTRIBUTE_get0_data GRPC_SHADOW_X509_ATTRIBUTE_get0_data
+#define X509_ATTRIBUTE_get0_object GRPC_SHADOW_X509_ATTRIBUTE_get0_object
+#define X509_ATTRIBUTE_get0_type GRPC_SHADOW_X509_ATTRIBUTE_get0_type
+#define X509_ATTRIBUTE_set1_data GRPC_SHADOW_X509_ATTRIBUTE_set1_data
+#define X509_ATTRIBUTE_set1_object GRPC_SHADOW_X509_ATTRIBUTE_set1_object
+#define X509at_add1_attr GRPC_SHADOW_X509at_add1_attr
+#define X509at_add1_attr_by_NID GRPC_SHADOW_X509at_add1_attr_by_NID
+#define X509at_add1_attr_by_OBJ GRPC_SHADOW_X509at_add1_attr_by_OBJ
+#define X509at_add1_attr_by_txt GRPC_SHADOW_X509at_add1_attr_by_txt
+#define X509at_delete_attr GRPC_SHADOW_X509at_delete_attr
+#define X509at_get0_data_by_OBJ GRPC_SHADOW_X509at_get0_data_by_OBJ
+#define X509at_get_attr GRPC_SHADOW_X509at_get_attr
+#define X509at_get_attr_by_NID GRPC_SHADOW_X509at_get_attr_by_NID
+#define X509at_get_attr_by_OBJ GRPC_SHADOW_X509at_get_attr_by_OBJ
+#define X509at_get_attr_count GRPC_SHADOW_X509at_get_attr_count
+#define X509_CRL_check_suiteb GRPC_SHADOW_X509_CRL_check_suiteb
+#define X509_CRL_cmp GRPC_SHADOW_X509_CRL_cmp
+#define X509_CRL_match GRPC_SHADOW_X509_CRL_match
+#define X509_NAME_cmp GRPC_SHADOW_X509_NAME_cmp
+#define X509_NAME_hash GRPC_SHADOW_X509_NAME_hash
+#define X509_NAME_hash_old GRPC_SHADOW_X509_NAME_hash_old
+#define X509_chain_check_suiteb GRPC_SHADOW_X509_chain_check_suiteb
+#define X509_chain_up_ref GRPC_SHADOW_X509_chain_up_ref
+#define X509_check_private_key GRPC_SHADOW_X509_check_private_key
+#define X509_cmp GRPC_SHADOW_X509_cmp
+#define X509_find_by_issuer_and_serial GRPC_SHADOW_X509_find_by_issuer_and_serial
+#define X509_find_by_subject GRPC_SHADOW_X509_find_by_subject
+#define X509_get0_pubkey_bitstr GRPC_SHADOW_X509_get0_pubkey_bitstr
+#define X509_get_issuer_name GRPC_SHADOW_X509_get_issuer_name
+#define X509_get_pubkey GRPC_SHADOW_X509_get_pubkey
+#define X509_get_serialNumber GRPC_SHADOW_X509_get_serialNumber
+#define X509_get_subject_name GRPC_SHADOW_X509_get_subject_name
+#define X509_issuer_and_serial_cmp GRPC_SHADOW_X509_issuer_and_serial_cmp
+#define X509_issuer_and_serial_hash GRPC_SHADOW_X509_issuer_and_serial_hash
+#define X509_issuer_name_cmp GRPC_SHADOW_X509_issuer_name_cmp
+#define X509_issuer_name_hash GRPC_SHADOW_X509_issuer_name_hash
+#define X509_issuer_name_hash_old GRPC_SHADOW_X509_issuer_name_hash_old
+#define X509_subject_name_cmp GRPC_SHADOW_X509_subject_name_cmp
+#define X509_subject_name_hash GRPC_SHADOW_X509_subject_name_hash
+#define X509_subject_name_hash_old GRPC_SHADOW_X509_subject_name_hash_old
+#define X509_STORE_load_locations GRPC_SHADOW_X509_STORE_load_locations
+#define X509_STORE_set_default_paths GRPC_SHADOW_X509_STORE_set_default_paths
+#define X509_get_default_cert_area GRPC_SHADOW_X509_get_default_cert_area
+#define X509_get_default_cert_dir GRPC_SHADOW_X509_get_default_cert_dir
+#define X509_get_default_cert_dir_env GRPC_SHADOW_X509_get_default_cert_dir_env
+#define X509_get_default_cert_file GRPC_SHADOW_X509_get_default_cert_file
+#define X509_get_default_cert_file_env GRPC_SHADOW_X509_get_default_cert_file_env
+#define X509_get_default_private_dir GRPC_SHADOW_X509_get_default_private_dir
+#define X509_CRL_add1_ext_i2d GRPC_SHADOW_X509_CRL_add1_ext_i2d
+#define X509_CRL_add_ext GRPC_SHADOW_X509_CRL_add_ext
+#define X509_CRL_delete_ext GRPC_SHADOW_X509_CRL_delete_ext
+#define X509_CRL_get_ext GRPC_SHADOW_X509_CRL_get_ext
+#define X509_CRL_get_ext_by_NID GRPC_SHADOW_X509_CRL_get_ext_by_NID
+#define X509_CRL_get_ext_by_OBJ GRPC_SHADOW_X509_CRL_get_ext_by_OBJ
+#define X509_CRL_get_ext_by_critical GRPC_SHADOW_X509_CRL_get_ext_by_critical
+#define X509_CRL_get_ext_count GRPC_SHADOW_X509_CRL_get_ext_count
+#define X509_CRL_get_ext_d2i GRPC_SHADOW_X509_CRL_get_ext_d2i
+#define X509_REVOKED_add1_ext_i2d GRPC_SHADOW_X509_REVOKED_add1_ext_i2d
+#define X509_REVOKED_add_ext GRPC_SHADOW_X509_REVOKED_add_ext
+#define X509_REVOKED_delete_ext GRPC_SHADOW_X509_REVOKED_delete_ext
+#define X509_REVOKED_get_ext GRPC_SHADOW_X509_REVOKED_get_ext
+#define X509_REVOKED_get_ext_by_NID GRPC_SHADOW_X509_REVOKED_get_ext_by_NID
+#define X509_REVOKED_get_ext_by_OBJ GRPC_SHADOW_X509_REVOKED_get_ext_by_OBJ
+#define X509_REVOKED_get_ext_by_critical GRPC_SHADOW_X509_REVOKED_get_ext_by_critical
+#define X509_REVOKED_get_ext_count GRPC_SHADOW_X509_REVOKED_get_ext_count
+#define X509_REVOKED_get_ext_d2i GRPC_SHADOW_X509_REVOKED_get_ext_d2i
+#define X509_add1_ext_i2d GRPC_SHADOW_X509_add1_ext_i2d
+#define X509_add_ext GRPC_SHADOW_X509_add_ext
+#define X509_delete_ext GRPC_SHADOW_X509_delete_ext
+#define X509_get_ext GRPC_SHADOW_X509_get_ext
+#define X509_get_ext_by_NID GRPC_SHADOW_X509_get_ext_by_NID
+#define X509_get_ext_by_OBJ GRPC_SHADOW_X509_get_ext_by_OBJ
+#define X509_get_ext_by_critical GRPC_SHADOW_X509_get_ext_by_critical
+#define X509_get_ext_count GRPC_SHADOW_X509_get_ext_count
+#define X509_get_ext_d2i GRPC_SHADOW_X509_get_ext_d2i
+#define X509_LOOKUP_by_alias GRPC_SHADOW_X509_LOOKUP_by_alias
+#define X509_LOOKUP_by_fingerprint GRPC_SHADOW_X509_LOOKUP_by_fingerprint
+#define X509_LOOKUP_by_issuer_serial GRPC_SHADOW_X509_LOOKUP_by_issuer_serial
+#define X509_LOOKUP_by_subject GRPC_SHADOW_X509_LOOKUP_by_subject
+#define X509_LOOKUP_ctrl GRPC_SHADOW_X509_LOOKUP_ctrl
+#define X509_LOOKUP_free GRPC_SHADOW_X509_LOOKUP_free
+#define X509_LOOKUP_init GRPC_SHADOW_X509_LOOKUP_init
+#define X509_LOOKUP_new GRPC_SHADOW_X509_LOOKUP_new
+#define X509_LOOKUP_shutdown GRPC_SHADOW_X509_LOOKUP_shutdown
+#define X509_OBJECT_free_contents GRPC_SHADOW_X509_OBJECT_free_contents
+#define X509_OBJECT_get0_X509 GRPC_SHADOW_X509_OBJECT_get0_X509
+#define X509_OBJECT_get_type GRPC_SHADOW_X509_OBJECT_get_type
+#define X509_OBJECT_idx_by_subject GRPC_SHADOW_X509_OBJECT_idx_by_subject
+#define X509_OBJECT_retrieve_by_subject GRPC_SHADOW_X509_OBJECT_retrieve_by_subject
+#define X509_OBJECT_retrieve_match GRPC_SHADOW_X509_OBJECT_retrieve_match
+#define X509_OBJECT_up_ref_count GRPC_SHADOW_X509_OBJECT_up_ref_count
+#define X509_STORE_CTX_get0_store GRPC_SHADOW_X509_STORE_CTX_get0_store
+#define X509_STORE_CTX_get1_issuer GRPC_SHADOW_X509_STORE_CTX_get1_issuer
+#define X509_STORE_add_cert GRPC_SHADOW_X509_STORE_add_cert
+#define X509_STORE_add_crl GRPC_SHADOW_X509_STORE_add_crl
+#define X509_STORE_add_lookup GRPC_SHADOW_X509_STORE_add_lookup
+#define X509_STORE_free GRPC_SHADOW_X509_STORE_free
+#define X509_STORE_get0_objects GRPC_SHADOW_X509_STORE_get0_objects
+#define X509_STORE_get0_param GRPC_SHADOW_X509_STORE_get0_param
+#define X509_STORE_get1_certs GRPC_SHADOW_X509_STORE_get1_certs
+#define X509_STORE_get1_crls GRPC_SHADOW_X509_STORE_get1_crls
+#define X509_STORE_get_by_subject GRPC_SHADOW_X509_STORE_get_by_subject
+#define X509_STORE_new GRPC_SHADOW_X509_STORE_new
+#define X509_STORE_set0_additional_untrusted GRPC_SHADOW_X509_STORE_set0_additional_untrusted
+#define X509_STORE_set1_param GRPC_SHADOW_X509_STORE_set1_param
+#define X509_STORE_set_depth GRPC_SHADOW_X509_STORE_set_depth
+#define X509_STORE_set_flags GRPC_SHADOW_X509_STORE_set_flags
+#define X509_STORE_set_lookup_crls_cb GRPC_SHADOW_X509_STORE_set_lookup_crls_cb
+#define X509_STORE_set_purpose GRPC_SHADOW_X509_STORE_set_purpose
+#define X509_STORE_set_trust GRPC_SHADOW_X509_STORE_set_trust
+#define X509_STORE_set_verify_cb GRPC_SHADOW_X509_STORE_set_verify_cb
+#define X509_STORE_up_ref GRPC_SHADOW_X509_STORE_up_ref
+#define X509_NAME_oneline GRPC_SHADOW_X509_NAME_oneline
+#define X509_REQ_to_X509 GRPC_SHADOW_X509_REQ_to_X509
+#define X509_REQ_add1_attr GRPC_SHADOW_X509_REQ_add1_attr
+#define X509_REQ_add1_attr_by_NID GRPC_SHADOW_X509_REQ_add1_attr_by_NID
+#define X509_REQ_add1_attr_by_OBJ GRPC_SHADOW_X509_REQ_add1_attr_by_OBJ
+#define X509_REQ_add1_attr_by_txt GRPC_SHADOW_X509_REQ_add1_attr_by_txt
+#define X509_REQ_add_extensions GRPC_SHADOW_X509_REQ_add_extensions
+#define X509_REQ_add_extensions_nid GRPC_SHADOW_X509_REQ_add_extensions_nid
+#define X509_REQ_check_private_key GRPC_SHADOW_X509_REQ_check_private_key
+#define X509_REQ_delete_attr GRPC_SHADOW_X509_REQ_delete_attr
+#define X509_REQ_extension_nid GRPC_SHADOW_X509_REQ_extension_nid
+#define X509_REQ_get_attr GRPC_SHADOW_X509_REQ_get_attr
+#define X509_REQ_get_attr_by_NID GRPC_SHADOW_X509_REQ_get_attr_by_NID
+#define X509_REQ_get_attr_by_OBJ GRPC_SHADOW_X509_REQ_get_attr_by_OBJ
+#define X509_REQ_get_attr_count GRPC_SHADOW_X509_REQ_get_attr_count
+#define X509_REQ_get_extension_nids GRPC_SHADOW_X509_REQ_get_extension_nids
+#define X509_REQ_get_extensions GRPC_SHADOW_X509_REQ_get_extensions
+#define X509_REQ_get_pubkey GRPC_SHADOW_X509_REQ_get_pubkey
+#define X509_REQ_set_extension_nids GRPC_SHADOW_X509_REQ_set_extension_nids
+#define X509_to_X509_REQ GRPC_SHADOW_X509_to_X509_REQ
+#define X509_get0_extensions GRPC_SHADOW_X509_get0_extensions
+#define X509_get0_notAfter GRPC_SHADOW_X509_get0_notAfter
+#define X509_get0_notBefore GRPC_SHADOW_X509_get0_notBefore
+#define X509_set_issuer_name GRPC_SHADOW_X509_set_issuer_name
+#define X509_set_notAfter GRPC_SHADOW_X509_set_notAfter
+#define X509_set_notBefore GRPC_SHADOW_X509_set_notBefore
+#define X509_set_pubkey GRPC_SHADOW_X509_set_pubkey
+#define X509_set_serialNumber GRPC_SHADOW_X509_set_serialNumber
+#define X509_set_subject_name GRPC_SHADOW_X509_set_subject_name
+#define X509_set_version GRPC_SHADOW_X509_set_version
+#define X509_TRUST_add GRPC_SHADOW_X509_TRUST_add
+#define X509_TRUST_cleanup GRPC_SHADOW_X509_TRUST_cleanup
+#define X509_TRUST_get0 GRPC_SHADOW_X509_TRUST_get0
+#define X509_TRUST_get0_name GRPC_SHADOW_X509_TRUST_get0_name
+#define X509_TRUST_get_by_id GRPC_SHADOW_X509_TRUST_get_by_id
+#define X509_TRUST_get_count GRPC_SHADOW_X509_TRUST_get_count
+#define X509_TRUST_get_flags GRPC_SHADOW_X509_TRUST_get_flags
+#define X509_TRUST_get_trust GRPC_SHADOW_X509_TRUST_get_trust
+#define X509_TRUST_set GRPC_SHADOW_X509_TRUST_set
+#define X509_TRUST_set_default GRPC_SHADOW_X509_TRUST_set_default
+#define X509_check_trust GRPC_SHADOW_X509_check_trust
+#define X509_verify_cert_error_string GRPC_SHADOW_X509_verify_cert_error_string
+#define X509_EXTENSION_create_by_NID GRPC_SHADOW_X509_EXTENSION_create_by_NID
+#define X509_EXTENSION_create_by_OBJ GRPC_SHADOW_X509_EXTENSION_create_by_OBJ
+#define X509_EXTENSION_get_critical GRPC_SHADOW_X509_EXTENSION_get_critical
+#define X509_EXTENSION_get_data GRPC_SHADOW_X509_EXTENSION_get_data
+#define X509_EXTENSION_get_object GRPC_SHADOW_X509_EXTENSION_get_object
+#define X509_EXTENSION_set_critical GRPC_SHADOW_X509_EXTENSION_set_critical
+#define X509_EXTENSION_set_data GRPC_SHADOW_X509_EXTENSION_set_data
+#define X509_EXTENSION_set_object GRPC_SHADOW_X509_EXTENSION_set_object
+#define X509v3_add_ext GRPC_SHADOW_X509v3_add_ext
+#define X509v3_delete_ext GRPC_SHADOW_X509v3_delete_ext
+#define X509v3_get_ext GRPC_SHADOW_X509v3_get_ext
+#define X509v3_get_ext_by_NID GRPC_SHADOW_X509v3_get_ext_by_NID
+#define X509v3_get_ext_by_OBJ GRPC_SHADOW_X509v3_get_ext_by_OBJ
+#define X509v3_get_ext_by_critical GRPC_SHADOW_X509v3_get_ext_by_critical
+#define X509v3_get_ext_count GRPC_SHADOW_X509v3_get_ext_count
+#define X509_CRL_diff GRPC_SHADOW_X509_CRL_diff
+#define X509_STORE_CTX_cleanup GRPC_SHADOW_X509_STORE_CTX_cleanup
+#define X509_STORE_CTX_free GRPC_SHADOW_X509_STORE_CTX_free
+#define X509_STORE_CTX_get0_current_crl GRPC_SHADOW_X509_STORE_CTX_get0_current_crl
+#define X509_STORE_CTX_get0_current_issuer GRPC_SHADOW_X509_STORE_CTX_get0_current_issuer
+#define X509_STORE_CTX_get0_param GRPC_SHADOW_X509_STORE_CTX_get0_param
+#define X509_STORE_CTX_get0_parent_ctx GRPC_SHADOW_X509_STORE_CTX_get0_parent_ctx
+#define X509_STORE_CTX_get0_policy_tree GRPC_SHADOW_X509_STORE_CTX_get0_policy_tree
+#define X509_STORE_CTX_get0_untrusted GRPC_SHADOW_X509_STORE_CTX_get0_untrusted
+#define X509_STORE_CTX_get1_chain GRPC_SHADOW_X509_STORE_CTX_get1_chain
+#define X509_STORE_CTX_get_chain GRPC_SHADOW_X509_STORE_CTX_get_chain
+#define X509_STORE_CTX_get_current_cert GRPC_SHADOW_X509_STORE_CTX_get_current_cert
+#define X509_STORE_CTX_get_error GRPC_SHADOW_X509_STORE_CTX_get_error
+#define X509_STORE_CTX_get_error_depth GRPC_SHADOW_X509_STORE_CTX_get_error_depth
+#define X509_STORE_CTX_get_ex_data GRPC_SHADOW_X509_STORE_CTX_get_ex_data
+#define X509_STORE_CTX_get_ex_new_index GRPC_SHADOW_X509_STORE_CTX_get_ex_new_index
+#define X509_STORE_CTX_get_explicit_policy GRPC_SHADOW_X509_STORE_CTX_get_explicit_policy
+#define X509_STORE_CTX_init GRPC_SHADOW_X509_STORE_CTX_init
+#define X509_STORE_CTX_new GRPC_SHADOW_X509_STORE_CTX_new
+#define X509_STORE_CTX_purpose_inherit GRPC_SHADOW_X509_STORE_CTX_purpose_inherit
+#define X509_STORE_CTX_set0_crls GRPC_SHADOW_X509_STORE_CTX_set0_crls
+#define X509_STORE_CTX_set0_param GRPC_SHADOW_X509_STORE_CTX_set0_param
+#define X509_STORE_CTX_set_cert GRPC_SHADOW_X509_STORE_CTX_set_cert
+#define X509_STORE_CTX_set_chain GRPC_SHADOW_X509_STORE_CTX_set_chain
+#define X509_STORE_CTX_set_default GRPC_SHADOW_X509_STORE_CTX_set_default
+#define X509_STORE_CTX_set_depth GRPC_SHADOW_X509_STORE_CTX_set_depth
+#define X509_STORE_CTX_set_error GRPC_SHADOW_X509_STORE_CTX_set_error
+#define X509_STORE_CTX_set_ex_data GRPC_SHADOW_X509_STORE_CTX_set_ex_data
+#define X509_STORE_CTX_set_flags GRPC_SHADOW_X509_STORE_CTX_set_flags
+#define X509_STORE_CTX_set_purpose GRPC_SHADOW_X509_STORE_CTX_set_purpose
+#define X509_STORE_CTX_set_time GRPC_SHADOW_X509_STORE_CTX_set_time
+#define X509_STORE_CTX_set_trust GRPC_SHADOW_X509_STORE_CTX_set_trust
+#define X509_STORE_CTX_set_verify_cb GRPC_SHADOW_X509_STORE_CTX_set_verify_cb
+#define X509_STORE_CTX_trusted_stack GRPC_SHADOW_X509_STORE_CTX_trusted_stack
+#define X509_STORE_CTX_zero GRPC_SHADOW_X509_STORE_CTX_zero
+#define X509_cmp_current_time GRPC_SHADOW_X509_cmp_current_time
+#define X509_cmp_time GRPC_SHADOW_X509_cmp_time
+#define X509_gmtime_adj GRPC_SHADOW_X509_gmtime_adj
+#define X509_time_adj GRPC_SHADOW_X509_time_adj
+#define X509_time_adj_ex GRPC_SHADOW_X509_time_adj_ex
+#define X509_verify_cert GRPC_SHADOW_X509_verify_cert
+#define X509_VERIFY_PARAM_add0_policy GRPC_SHADOW_X509_VERIFY_PARAM_add0_policy
+#define X509_VERIFY_PARAM_add0_table GRPC_SHADOW_X509_VERIFY_PARAM_add0_table
+#define X509_VERIFY_PARAM_add1_host GRPC_SHADOW_X509_VERIFY_PARAM_add1_host
+#define X509_VERIFY_PARAM_clear_flags GRPC_SHADOW_X509_VERIFY_PARAM_clear_flags
+#define X509_VERIFY_PARAM_free GRPC_SHADOW_X509_VERIFY_PARAM_free
+#define X509_VERIFY_PARAM_get0 GRPC_SHADOW_X509_VERIFY_PARAM_get0
+#define X509_VERIFY_PARAM_get0_name GRPC_SHADOW_X509_VERIFY_PARAM_get0_name
+#define X509_VERIFY_PARAM_get0_peername GRPC_SHADOW_X509_VERIFY_PARAM_get0_peername
+#define X509_VERIFY_PARAM_get_count GRPC_SHADOW_X509_VERIFY_PARAM_get_count
+#define X509_VERIFY_PARAM_get_depth GRPC_SHADOW_X509_VERIFY_PARAM_get_depth
+#define X509_VERIFY_PARAM_get_flags GRPC_SHADOW_X509_VERIFY_PARAM_get_flags
+#define X509_VERIFY_PARAM_inherit GRPC_SHADOW_X509_VERIFY_PARAM_inherit
+#define X509_VERIFY_PARAM_lookup GRPC_SHADOW_X509_VERIFY_PARAM_lookup
+#define X509_VERIFY_PARAM_new GRPC_SHADOW_X509_VERIFY_PARAM_new
+#define X509_VERIFY_PARAM_set1 GRPC_SHADOW_X509_VERIFY_PARAM_set1
+#define X509_VERIFY_PARAM_set1_email GRPC_SHADOW_X509_VERIFY_PARAM_set1_email
+#define X509_VERIFY_PARAM_set1_host GRPC_SHADOW_X509_VERIFY_PARAM_set1_host
+#define X509_VERIFY_PARAM_set1_ip GRPC_SHADOW_X509_VERIFY_PARAM_set1_ip
+#define X509_VERIFY_PARAM_set1_ip_asc GRPC_SHADOW_X509_VERIFY_PARAM_set1_ip_asc
+#define X509_VERIFY_PARAM_set1_name GRPC_SHADOW_X509_VERIFY_PARAM_set1_name
+#define X509_VERIFY_PARAM_set1_policies GRPC_SHADOW_X509_VERIFY_PARAM_set1_policies
+#define X509_VERIFY_PARAM_set_depth GRPC_SHADOW_X509_VERIFY_PARAM_set_depth
+#define X509_VERIFY_PARAM_set_flags GRPC_SHADOW_X509_VERIFY_PARAM_set_flags
+#define X509_VERIFY_PARAM_set_hostflags GRPC_SHADOW_X509_VERIFY_PARAM_set_hostflags
+#define X509_VERIFY_PARAM_set_purpose GRPC_SHADOW_X509_VERIFY_PARAM_set_purpose
+#define X509_VERIFY_PARAM_set_time GRPC_SHADOW_X509_VERIFY_PARAM_set_time
+#define X509_VERIFY_PARAM_set_trust GRPC_SHADOW_X509_VERIFY_PARAM_set_trust
+#define X509_VERIFY_PARAM_table_cleanup GRPC_SHADOW_X509_VERIFY_PARAM_table_cleanup
+#define X509_CRL_set_issuer_name GRPC_SHADOW_X509_CRL_set_issuer_name
+#define X509_CRL_set_lastUpdate GRPC_SHADOW_X509_CRL_set_lastUpdate
+#define X509_CRL_set_nextUpdate GRPC_SHADOW_X509_CRL_set_nextUpdate
+#define X509_CRL_set_version GRPC_SHADOW_X509_CRL_set_version
+#define X509_CRL_sort GRPC_SHADOW_X509_CRL_sort
+#define X509_CRL_up_ref GRPC_SHADOW_X509_CRL_up_ref
+#define X509_REVOKED_set_revocationDate GRPC_SHADOW_X509_REVOKED_set_revocationDate
+#define X509_REVOKED_set_serialNumber GRPC_SHADOW_X509_REVOKED_set_serialNumber
+#define X509_NAME_ENTRY_create_by_NID GRPC_SHADOW_X509_NAME_ENTRY_create_by_NID
+#define X509_NAME_ENTRY_create_by_OBJ GRPC_SHADOW_X509_NAME_ENTRY_create_by_OBJ
+#define X509_NAME_ENTRY_create_by_txt GRPC_SHADOW_X509_NAME_ENTRY_create_by_txt
+#define X509_NAME_ENTRY_get_data GRPC_SHADOW_X509_NAME_ENTRY_get_data
+#define X509_NAME_ENTRY_get_object GRPC_SHADOW_X509_NAME_ENTRY_get_object
+#define X509_NAME_ENTRY_set_data GRPC_SHADOW_X509_NAME_ENTRY_set_data
+#define X509_NAME_ENTRY_set_object GRPC_SHADOW_X509_NAME_ENTRY_set_object
+#define X509_NAME_add_entry GRPC_SHADOW_X509_NAME_add_entry
+#define X509_NAME_add_entry_by_NID GRPC_SHADOW_X509_NAME_add_entry_by_NID
+#define X509_NAME_add_entry_by_OBJ GRPC_SHADOW_X509_NAME_add_entry_by_OBJ
+#define X509_NAME_add_entry_by_txt GRPC_SHADOW_X509_NAME_add_entry_by_txt
+#define X509_NAME_delete_entry GRPC_SHADOW_X509_NAME_delete_entry
+#define X509_NAME_entry_count GRPC_SHADOW_X509_NAME_entry_count
+#define X509_NAME_get_entry GRPC_SHADOW_X509_NAME_get_entry
+#define X509_NAME_get_index_by_NID GRPC_SHADOW_X509_NAME_get_index_by_NID
+#define X509_NAME_get_index_by_OBJ GRPC_SHADOW_X509_NAME_get_index_by_OBJ
+#define X509_NAME_get_text_by_NID GRPC_SHADOW_X509_NAME_get_text_by_NID
+#define X509_NAME_get_text_by_OBJ GRPC_SHADOW_X509_NAME_get_text_by_OBJ
+#define X509_REQ_set_pubkey GRPC_SHADOW_X509_REQ_set_pubkey
+#define X509_REQ_set_subject_name GRPC_SHADOW_X509_REQ_set_subject_name
+#define X509_REQ_set_version GRPC_SHADOW_X509_REQ_set_version
+#define NETSCAPE_SPKI_b64_decode GRPC_SHADOW_NETSCAPE_SPKI_b64_decode
+#define NETSCAPE_SPKI_b64_encode GRPC_SHADOW_NETSCAPE_SPKI_b64_encode
+#define NETSCAPE_SPKI_get_pubkey GRPC_SHADOW_NETSCAPE_SPKI_get_pubkey
+#define NETSCAPE_SPKI_set_pubkey GRPC_SHADOW_NETSCAPE_SPKI_set_pubkey
+#define X509_ALGORS_it GRPC_SHADOW_X509_ALGORS_it
+#define X509_ALGOR_cmp GRPC_SHADOW_X509_ALGOR_cmp
+#define X509_ALGOR_dup GRPC_SHADOW_X509_ALGOR_dup
+#define X509_ALGOR_free GRPC_SHADOW_X509_ALGOR_free
+#define X509_ALGOR_get0 GRPC_SHADOW_X509_ALGOR_get0
+#define X509_ALGOR_it GRPC_SHADOW_X509_ALGOR_it
+#define X509_ALGOR_new GRPC_SHADOW_X509_ALGOR_new
+#define X509_ALGOR_set0 GRPC_SHADOW_X509_ALGOR_set0
+#define X509_ALGOR_set_md GRPC_SHADOW_X509_ALGOR_set_md
+#define d2i_X509_ALGOR GRPC_SHADOW_d2i_X509_ALGOR
+#define d2i_X509_ALGORS GRPC_SHADOW_d2i_X509_ALGORS
+#define i2d_X509_ALGOR GRPC_SHADOW_i2d_X509_ALGOR
+#define i2d_X509_ALGORS GRPC_SHADOW_i2d_X509_ALGORS
+#define NETSCAPE_SPKI_sign GRPC_SHADOW_NETSCAPE_SPKI_sign
+#define NETSCAPE_SPKI_verify GRPC_SHADOW_NETSCAPE_SPKI_verify
+#define X509_CRL_digest GRPC_SHADOW_X509_CRL_digest
+#define X509_CRL_sign GRPC_SHADOW_X509_CRL_sign
+#define X509_CRL_sign_ctx GRPC_SHADOW_X509_CRL_sign_ctx
+#define X509_NAME_digest GRPC_SHADOW_X509_NAME_digest
+#define X509_REQ_digest GRPC_SHADOW_X509_REQ_digest
+#define X509_REQ_sign GRPC_SHADOW_X509_REQ_sign
+#define X509_REQ_sign_ctx GRPC_SHADOW_X509_REQ_sign_ctx
+#define X509_REQ_verify GRPC_SHADOW_X509_REQ_verify
+#define X509_digest GRPC_SHADOW_X509_digest
+#define X509_pubkey_digest GRPC_SHADOW_X509_pubkey_digest
+#define X509_sign GRPC_SHADOW_X509_sign
+#define X509_sign_ctx GRPC_SHADOW_X509_sign_ctx
+#define X509_verify GRPC_SHADOW_X509_verify
+#define d2i_DSAPrivateKey_bio GRPC_SHADOW_d2i_DSAPrivateKey_bio
+#define d2i_DSAPrivateKey_fp GRPC_SHADOW_d2i_DSAPrivateKey_fp
+#define d2i_DSA_PUBKEY_bio GRPC_SHADOW_d2i_DSA_PUBKEY_bio
+#define d2i_DSA_PUBKEY_fp GRPC_SHADOW_d2i_DSA_PUBKEY_fp
+#define d2i_ECPrivateKey_bio GRPC_SHADOW_d2i_ECPrivateKey_bio
+#define d2i_ECPrivateKey_fp GRPC_SHADOW_d2i_ECPrivateKey_fp
+#define d2i_EC_PUBKEY_bio GRPC_SHADOW_d2i_EC_PUBKEY_bio
+#define d2i_EC_PUBKEY_fp GRPC_SHADOW_d2i_EC_PUBKEY_fp
+#define d2i_PKCS8_PRIV_KEY_INFO_bio GRPC_SHADOW_d2i_PKCS8_PRIV_KEY_INFO_bio
+#define d2i_PKCS8_PRIV_KEY_INFO_fp GRPC_SHADOW_d2i_PKCS8_PRIV_KEY_INFO_fp
+#define d2i_PKCS8_bio GRPC_SHADOW_d2i_PKCS8_bio
+#define d2i_PKCS8_fp GRPC_SHADOW_d2i_PKCS8_fp
+#define d2i_PUBKEY_bio GRPC_SHADOW_d2i_PUBKEY_bio
+#define d2i_PUBKEY_fp GRPC_SHADOW_d2i_PUBKEY_fp
+#define d2i_PrivateKey_bio GRPC_SHADOW_d2i_PrivateKey_bio
+#define d2i_PrivateKey_fp GRPC_SHADOW_d2i_PrivateKey_fp
+#define d2i_RSAPrivateKey_bio GRPC_SHADOW_d2i_RSAPrivateKey_bio
+#define d2i_RSAPrivateKey_fp GRPC_SHADOW_d2i_RSAPrivateKey_fp
+#define d2i_RSAPublicKey_bio GRPC_SHADOW_d2i_RSAPublicKey_bio
+#define d2i_RSAPublicKey_fp GRPC_SHADOW_d2i_RSAPublicKey_fp
+#define d2i_RSA_PUBKEY_bio GRPC_SHADOW_d2i_RSA_PUBKEY_bio
+#define d2i_RSA_PUBKEY_fp GRPC_SHADOW_d2i_RSA_PUBKEY_fp
+#define d2i_X509_CRL_bio GRPC_SHADOW_d2i_X509_CRL_bio
+#define d2i_X509_CRL_fp GRPC_SHADOW_d2i_X509_CRL_fp
+#define d2i_X509_REQ_bio GRPC_SHADOW_d2i_X509_REQ_bio
+#define d2i_X509_REQ_fp GRPC_SHADOW_d2i_X509_REQ_fp
+#define d2i_X509_bio GRPC_SHADOW_d2i_X509_bio
+#define d2i_X509_fp GRPC_SHADOW_d2i_X509_fp
+#define i2d_DSAPrivateKey_bio GRPC_SHADOW_i2d_DSAPrivateKey_bio
+#define i2d_DSAPrivateKey_fp GRPC_SHADOW_i2d_DSAPrivateKey_fp
+#define i2d_DSA_PUBKEY_bio GRPC_SHADOW_i2d_DSA_PUBKEY_bio
+#define i2d_DSA_PUBKEY_fp GRPC_SHADOW_i2d_DSA_PUBKEY_fp
+#define i2d_ECPrivateKey_bio GRPC_SHADOW_i2d_ECPrivateKey_bio
+#define i2d_ECPrivateKey_fp GRPC_SHADOW_i2d_ECPrivateKey_fp
+#define i2d_EC_PUBKEY_bio GRPC_SHADOW_i2d_EC_PUBKEY_bio
+#define i2d_EC_PUBKEY_fp GRPC_SHADOW_i2d_EC_PUBKEY_fp
+#define i2d_PKCS8PrivateKeyInfo_bio GRPC_SHADOW_i2d_PKCS8PrivateKeyInfo_bio
+#define i2d_PKCS8PrivateKeyInfo_fp GRPC_SHADOW_i2d_PKCS8PrivateKeyInfo_fp
+#define i2d_PKCS8_PRIV_KEY_INFO_bio GRPC_SHADOW_i2d_PKCS8_PRIV_KEY_INFO_bio
+#define i2d_PKCS8_PRIV_KEY_INFO_fp GRPC_SHADOW_i2d_PKCS8_PRIV_KEY_INFO_fp
+#define i2d_PKCS8_bio GRPC_SHADOW_i2d_PKCS8_bio
+#define i2d_PKCS8_fp GRPC_SHADOW_i2d_PKCS8_fp
+#define i2d_PUBKEY_bio GRPC_SHADOW_i2d_PUBKEY_bio
+#define i2d_PUBKEY_fp GRPC_SHADOW_i2d_PUBKEY_fp
+#define i2d_PrivateKey_bio GRPC_SHADOW_i2d_PrivateKey_bio
+#define i2d_PrivateKey_fp GRPC_SHADOW_i2d_PrivateKey_fp
+#define i2d_RSAPrivateKey_bio GRPC_SHADOW_i2d_RSAPrivateKey_bio
+#define i2d_RSAPrivateKey_fp GRPC_SHADOW_i2d_RSAPrivateKey_fp
+#define i2d_RSAPublicKey_bio GRPC_SHADOW_i2d_RSAPublicKey_bio
+#define i2d_RSAPublicKey_fp GRPC_SHADOW_i2d_RSAPublicKey_fp
+#define i2d_RSA_PUBKEY_bio GRPC_SHADOW_i2d_RSA_PUBKEY_bio
+#define i2d_RSA_PUBKEY_fp GRPC_SHADOW_i2d_RSA_PUBKEY_fp
+#define i2d_X509_CRL_bio GRPC_SHADOW_i2d_X509_CRL_bio
+#define i2d_X509_CRL_fp GRPC_SHADOW_i2d_X509_CRL_fp
+#define i2d_X509_REQ_bio GRPC_SHADOW_i2d_X509_REQ_bio
+#define i2d_X509_REQ_fp GRPC_SHADOW_i2d_X509_REQ_fp
+#define i2d_X509_bio GRPC_SHADOW_i2d_X509_bio
+#define i2d_X509_fp GRPC_SHADOW_i2d_X509_fp
+#define X509_ATTRIBUTE_SET_it GRPC_SHADOW_X509_ATTRIBUTE_SET_it
+#define X509_ATTRIBUTE_create GRPC_SHADOW_X509_ATTRIBUTE_create
+#define X509_ATTRIBUTE_dup GRPC_SHADOW_X509_ATTRIBUTE_dup
+#define X509_ATTRIBUTE_free GRPC_SHADOW_X509_ATTRIBUTE_free
+#define X509_ATTRIBUTE_it GRPC_SHADOW_X509_ATTRIBUTE_it
+#define X509_ATTRIBUTE_new GRPC_SHADOW_X509_ATTRIBUTE_new
+#define d2i_X509_ATTRIBUTE GRPC_SHADOW_d2i_X509_ATTRIBUTE
+#define i2d_X509_ATTRIBUTE GRPC_SHADOW_i2d_X509_ATTRIBUTE
+#define X509_CRL_INFO_free GRPC_SHADOW_X509_CRL_INFO_free
+#define X509_CRL_INFO_it GRPC_SHADOW_X509_CRL_INFO_it
+#define X509_CRL_INFO_new GRPC_SHADOW_X509_CRL_INFO_new
+#define X509_CRL_METHOD_free GRPC_SHADOW_X509_CRL_METHOD_free
+#define X509_CRL_METHOD_new GRPC_SHADOW_X509_CRL_METHOD_new
+#define X509_CRL_add0_revoked GRPC_SHADOW_X509_CRL_add0_revoked
+#define X509_CRL_dup GRPC_SHADOW_X509_CRL_dup
+#define X509_CRL_free GRPC_SHADOW_X509_CRL_free
+#define X509_CRL_get0_by_cert GRPC_SHADOW_X509_CRL_get0_by_cert
+#define X509_CRL_get0_by_serial GRPC_SHADOW_X509_CRL_get0_by_serial
+#define X509_CRL_get_meth_data GRPC_SHADOW_X509_CRL_get_meth_data
+#define X509_CRL_it GRPC_SHADOW_X509_CRL_it
+#define X509_CRL_new GRPC_SHADOW_X509_CRL_new
+#define X509_CRL_set_default_method GRPC_SHADOW_X509_CRL_set_default_method
+#define X509_CRL_set_meth_data GRPC_SHADOW_X509_CRL_set_meth_data
+#define X509_CRL_verify GRPC_SHADOW_X509_CRL_verify
+#define X509_REVOKED_dup GRPC_SHADOW_X509_REVOKED_dup
+#define X509_REVOKED_free GRPC_SHADOW_X509_REVOKED_free
+#define X509_REVOKED_it GRPC_SHADOW_X509_REVOKED_it
+#define X509_REVOKED_new GRPC_SHADOW_X509_REVOKED_new
+#define d2i_X509_CRL GRPC_SHADOW_d2i_X509_CRL
+#define d2i_X509_CRL_INFO GRPC_SHADOW_d2i_X509_CRL_INFO
+#define d2i_X509_REVOKED GRPC_SHADOW_d2i_X509_REVOKED
+#define i2d_X509_CRL GRPC_SHADOW_i2d_X509_CRL
+#define i2d_X509_CRL_INFO GRPC_SHADOW_i2d_X509_CRL_INFO
+#define i2d_X509_REVOKED GRPC_SHADOW_i2d_X509_REVOKED
+#define X509_EXTENSIONS_it GRPC_SHADOW_X509_EXTENSIONS_it
+#define X509_EXTENSION_dup GRPC_SHADOW_X509_EXTENSION_dup
+#define X509_EXTENSION_free GRPC_SHADOW_X509_EXTENSION_free
+#define X509_EXTENSION_it GRPC_SHADOW_X509_EXTENSION_it
+#define X509_EXTENSION_new GRPC_SHADOW_X509_EXTENSION_new
+#define d2i_X509_EXTENSION GRPC_SHADOW_d2i_X509_EXTENSION
+#define d2i_X509_EXTENSIONS GRPC_SHADOW_d2i_X509_EXTENSIONS
+#define i2d_X509_EXTENSION GRPC_SHADOW_i2d_X509_EXTENSION
+#define i2d_X509_EXTENSIONS GRPC_SHADOW_i2d_X509_EXTENSIONS
+#define X509_INFO_free GRPC_SHADOW_X509_INFO_free
+#define X509_INFO_new GRPC_SHADOW_X509_INFO_new
+#define X509_NAME_ENTRIES_it GRPC_SHADOW_X509_NAME_ENTRIES_it
+#define X509_NAME_ENTRY_dup GRPC_SHADOW_X509_NAME_ENTRY_dup
+#define X509_NAME_ENTRY_free GRPC_SHADOW_X509_NAME_ENTRY_free
+#define X509_NAME_ENTRY_it GRPC_SHADOW_X509_NAME_ENTRY_it
+#define X509_NAME_ENTRY_new GRPC_SHADOW_X509_NAME_ENTRY_new
+#define X509_NAME_ENTRY_set GRPC_SHADOW_X509_NAME_ENTRY_set
+#define X509_NAME_INTERNAL_it GRPC_SHADOW_X509_NAME_INTERNAL_it
+#define X509_NAME_dup GRPC_SHADOW_X509_NAME_dup
+#define X509_NAME_free GRPC_SHADOW_X509_NAME_free
+#define X509_NAME_get0_der GRPC_SHADOW_X509_NAME_get0_der
+#define X509_NAME_it GRPC_SHADOW_X509_NAME_it
+#define X509_NAME_new GRPC_SHADOW_X509_NAME_new
+#define X509_NAME_set GRPC_SHADOW_X509_NAME_set
+#define d2i_X509_NAME GRPC_SHADOW_d2i_X509_NAME
+#define d2i_X509_NAME_ENTRY GRPC_SHADOW_d2i_X509_NAME_ENTRY
+#define i2d_X509_NAME GRPC_SHADOW_i2d_X509_NAME
+#define i2d_X509_NAME_ENTRY GRPC_SHADOW_i2d_X509_NAME_ENTRY
+#define X509_PKEY_free GRPC_SHADOW_X509_PKEY_free
+#define X509_PKEY_new GRPC_SHADOW_X509_PKEY_new
+#define X509_PUBKEY_free GRPC_SHADOW_X509_PUBKEY_free
+#define X509_PUBKEY_get GRPC_SHADOW_X509_PUBKEY_get
+#define X509_PUBKEY_get0_param GRPC_SHADOW_X509_PUBKEY_get0_param
+#define X509_PUBKEY_it GRPC_SHADOW_X509_PUBKEY_it
+#define X509_PUBKEY_new GRPC_SHADOW_X509_PUBKEY_new
+#define X509_PUBKEY_set GRPC_SHADOW_X509_PUBKEY_set
+#define X509_PUBKEY_set0_param GRPC_SHADOW_X509_PUBKEY_set0_param
+#define d2i_DSA_PUBKEY GRPC_SHADOW_d2i_DSA_PUBKEY
+#define d2i_EC_PUBKEY GRPC_SHADOW_d2i_EC_PUBKEY
+#define d2i_PUBKEY GRPC_SHADOW_d2i_PUBKEY
+#define d2i_RSA_PUBKEY GRPC_SHADOW_d2i_RSA_PUBKEY
+#define d2i_X509_PUBKEY GRPC_SHADOW_d2i_X509_PUBKEY
+#define i2d_DSA_PUBKEY GRPC_SHADOW_i2d_DSA_PUBKEY
+#define i2d_EC_PUBKEY GRPC_SHADOW_i2d_EC_PUBKEY
+#define i2d_PUBKEY GRPC_SHADOW_i2d_PUBKEY
+#define i2d_RSA_PUBKEY GRPC_SHADOW_i2d_RSA_PUBKEY
+#define i2d_X509_PUBKEY GRPC_SHADOW_i2d_X509_PUBKEY
+#define X509_REQ_INFO_free GRPC_SHADOW_X509_REQ_INFO_free
+#define X509_REQ_INFO_it GRPC_SHADOW_X509_REQ_INFO_it
+#define X509_REQ_INFO_new GRPC_SHADOW_X509_REQ_INFO_new
+#define X509_REQ_dup GRPC_SHADOW_X509_REQ_dup
+#define X509_REQ_free GRPC_SHADOW_X509_REQ_free
+#define X509_REQ_it GRPC_SHADOW_X509_REQ_it
+#define X509_REQ_new GRPC_SHADOW_X509_REQ_new
+#define d2i_X509_REQ GRPC_SHADOW_d2i_X509_REQ
+#define d2i_X509_REQ_INFO GRPC_SHADOW_d2i_X509_REQ_INFO
+#define i2d_X509_REQ GRPC_SHADOW_i2d_X509_REQ
+#define i2d_X509_REQ_INFO GRPC_SHADOW_i2d_X509_REQ_INFO
+#define X509_SIG_free GRPC_SHADOW_X509_SIG_free
+#define X509_SIG_it GRPC_SHADOW_X509_SIG_it
+#define X509_SIG_new GRPC_SHADOW_X509_SIG_new
+#define d2i_X509_SIG GRPC_SHADOW_d2i_X509_SIG
+#define i2d_X509_SIG GRPC_SHADOW_i2d_X509_SIG
+#define NETSCAPE_SPKAC_free GRPC_SHADOW_NETSCAPE_SPKAC_free
+#define NETSCAPE_SPKAC_it GRPC_SHADOW_NETSCAPE_SPKAC_it
+#define NETSCAPE_SPKAC_new GRPC_SHADOW_NETSCAPE_SPKAC_new
+#define NETSCAPE_SPKI_free GRPC_SHADOW_NETSCAPE_SPKI_free
+#define NETSCAPE_SPKI_it GRPC_SHADOW_NETSCAPE_SPKI_it
+#define NETSCAPE_SPKI_new GRPC_SHADOW_NETSCAPE_SPKI_new
+#define d2i_NETSCAPE_SPKAC GRPC_SHADOW_d2i_NETSCAPE_SPKAC
+#define d2i_NETSCAPE_SPKI GRPC_SHADOW_d2i_NETSCAPE_SPKI
+#define i2d_NETSCAPE_SPKAC GRPC_SHADOW_i2d_NETSCAPE_SPKAC
+#define i2d_NETSCAPE_SPKI GRPC_SHADOW_i2d_NETSCAPE_SPKI
+#define X509_VAL_free GRPC_SHADOW_X509_VAL_free
+#define X509_VAL_it GRPC_SHADOW_X509_VAL_it
+#define X509_VAL_new GRPC_SHADOW_X509_VAL_new
+#define d2i_X509_VAL GRPC_SHADOW_d2i_X509_VAL
+#define i2d_X509_VAL GRPC_SHADOW_i2d_X509_VAL
+#define X509_CINF_free GRPC_SHADOW_X509_CINF_free
+#define X509_CINF_it GRPC_SHADOW_X509_CINF_it
+#define X509_CINF_new GRPC_SHADOW_X509_CINF_new
+#define X509_dup GRPC_SHADOW_X509_dup
+#define X509_free GRPC_SHADOW_X509_free
+#define X509_get0_signature GRPC_SHADOW_X509_get0_signature
+#define X509_get_ex_data GRPC_SHADOW_X509_get_ex_data
+#define X509_get_ex_new_index GRPC_SHADOW_X509_get_ex_new_index
+#define X509_get_signature_nid GRPC_SHADOW_X509_get_signature_nid
+#define X509_it GRPC_SHADOW_X509_it
+#define X509_new GRPC_SHADOW_X509_new
+#define X509_parse_from_buffer GRPC_SHADOW_X509_parse_from_buffer
+#define X509_set_ex_data GRPC_SHADOW_X509_set_ex_data
+#define X509_up_ref GRPC_SHADOW_X509_up_ref
+#define d2i_X509 GRPC_SHADOW_d2i_X509
+#define d2i_X509_AUX GRPC_SHADOW_d2i_X509_AUX
+#define d2i_X509_CINF GRPC_SHADOW_d2i_X509_CINF
+#define i2d_X509 GRPC_SHADOW_i2d_X509
+#define i2d_X509_AUX GRPC_SHADOW_i2d_X509_AUX
+#define i2d_X509_CINF GRPC_SHADOW_i2d_X509_CINF
+#define X509_CERT_AUX_free GRPC_SHADOW_X509_CERT_AUX_free
+#define X509_CERT_AUX_it GRPC_SHADOW_X509_CERT_AUX_it
+#define X509_CERT_AUX_new GRPC_SHADOW_X509_CERT_AUX_new
+#define X509_add1_reject_object GRPC_SHADOW_X509_add1_reject_object
+#define X509_add1_trust_object GRPC_SHADOW_X509_add1_trust_object
+#define X509_alias_get0 GRPC_SHADOW_X509_alias_get0
+#define X509_alias_set1 GRPC_SHADOW_X509_alias_set1
+#define X509_keyid_get0 GRPC_SHADOW_X509_keyid_get0
+#define X509_keyid_set1 GRPC_SHADOW_X509_keyid_set1
+#define X509_reject_clear GRPC_SHADOW_X509_reject_clear
+#define X509_trust_clear GRPC_SHADOW_X509_trust_clear
+#define d2i_X509_CERT_AUX GRPC_SHADOW_d2i_X509_CERT_AUX
+#define i2d_X509_CERT_AUX GRPC_SHADOW_i2d_X509_CERT_AUX
+#define policy_cache_find_data GRPC_SHADOW_policy_cache_find_data
+#define policy_cache_free GRPC_SHADOW_policy_cache_free
+#define policy_cache_set GRPC_SHADOW_policy_cache_set
+#define policy_data_free GRPC_SHADOW_policy_data_free
+#define policy_data_new GRPC_SHADOW_policy_data_new
+#define X509_policy_level_get0_node GRPC_SHADOW_X509_policy_level_get0_node
+#define X509_policy_level_node_count GRPC_SHADOW_X509_policy_level_node_count
+#define X509_policy_node_get0_parent GRPC_SHADOW_X509_policy_node_get0_parent
+#define X509_policy_node_get0_policy GRPC_SHADOW_X509_policy_node_get0_policy
+#define X509_policy_node_get0_qualifiers GRPC_SHADOW_X509_policy_node_get0_qualifiers
+#define X509_policy_tree_get0_level GRPC_SHADOW_X509_policy_tree_get0_level
+#define X509_policy_tree_get0_policies GRPC_SHADOW_X509_policy_tree_get0_policies
+#define X509_policy_tree_get0_user_policies GRPC_SHADOW_X509_policy_tree_get0_user_policies
+#define X509_policy_tree_level_count GRPC_SHADOW_X509_policy_tree_level_count
+#define policy_cache_set_mapping GRPC_SHADOW_policy_cache_set_mapping
+#define level_add_node GRPC_SHADOW_level_add_node
+#define level_find_node GRPC_SHADOW_level_find_node
+#define policy_node_cmp_new GRPC_SHADOW_policy_node_cmp_new
+#define policy_node_free GRPC_SHADOW_policy_node_free
+#define policy_node_match GRPC_SHADOW_policy_node_match
+#define tree_find_sk GRPC_SHADOW_tree_find_sk
+#define X509_policy_check GRPC_SHADOW_X509_policy_check
+#define X509_policy_tree_free GRPC_SHADOW_X509_policy_tree_free
+#define v3_akey_id GRPC_SHADOW_v3_akey_id
+#define AUTHORITY_KEYID_free GRPC_SHADOW_AUTHORITY_KEYID_free
+#define AUTHORITY_KEYID_it GRPC_SHADOW_AUTHORITY_KEYID_it
+#define AUTHORITY_KEYID_new GRPC_SHADOW_AUTHORITY_KEYID_new
+#define d2i_AUTHORITY_KEYID GRPC_SHADOW_d2i_AUTHORITY_KEYID
+#define i2d_AUTHORITY_KEYID GRPC_SHADOW_i2d_AUTHORITY_KEYID
+#define GENERAL_NAME_print GRPC_SHADOW_GENERAL_NAME_print
+#define a2i_GENERAL_NAME GRPC_SHADOW_a2i_GENERAL_NAME
+#define i2v_GENERAL_NAME GRPC_SHADOW_i2v_GENERAL_NAME
+#define i2v_GENERAL_NAMES GRPC_SHADOW_i2v_GENERAL_NAMES
+#define v2i_GENERAL_NAME GRPC_SHADOW_v2i_GENERAL_NAME
+#define v2i_GENERAL_NAMES GRPC_SHADOW_v2i_GENERAL_NAMES
+#define v2i_GENERAL_NAME_ex GRPC_SHADOW_v2i_GENERAL_NAME_ex
+#define v3_alt GRPC_SHADOW_v3_alt
+#define BASIC_CONSTRAINTS_free GRPC_SHADOW_BASIC_CONSTRAINTS_free
+#define BASIC_CONSTRAINTS_it GRPC_SHADOW_BASIC_CONSTRAINTS_it
+#define BASIC_CONSTRAINTS_new GRPC_SHADOW_BASIC_CONSTRAINTS_new
+#define d2i_BASIC_CONSTRAINTS GRPC_SHADOW_d2i_BASIC_CONSTRAINTS
+#define i2d_BASIC_CONSTRAINTS GRPC_SHADOW_i2d_BASIC_CONSTRAINTS
+#define v3_bcons GRPC_SHADOW_v3_bcons
+#define i2v_ASN1_BIT_STRING GRPC_SHADOW_i2v_ASN1_BIT_STRING
+#define v2i_ASN1_BIT_STRING GRPC_SHADOW_v2i_ASN1_BIT_STRING
+#define v3_key_usage GRPC_SHADOW_v3_key_usage
+#define v3_nscert GRPC_SHADOW_v3_nscert
+#define X509V3_EXT_CRL_add_nconf GRPC_SHADOW_X509V3_EXT_CRL_add_nconf
+#define X509V3_EXT_REQ_add_nconf GRPC_SHADOW_X509V3_EXT_REQ_add_nconf
+#define X509V3_EXT_add_nconf GRPC_SHADOW_X509V3_EXT_add_nconf
+#define X509V3_EXT_add_nconf_sk GRPC_SHADOW_X509V3_EXT_add_nconf_sk
+#define X509V3_EXT_i2d GRPC_SHADOW_X509V3_EXT_i2d
+#define X509V3_EXT_nconf GRPC_SHADOW_X509V3_EXT_nconf
+#define X509V3_EXT_nconf_nid GRPC_SHADOW_X509V3_EXT_nconf_nid
+#define X509V3_get_section GRPC_SHADOW_X509V3_get_section
+#define X509V3_get_string GRPC_SHADOW_X509V3_get_string
+#define X509V3_section_free GRPC_SHADOW_X509V3_section_free
+#define X509V3_set_ctx GRPC_SHADOW_X509V3_set_ctx
+#define X509V3_set_nconf GRPC_SHADOW_X509V3_set_nconf
+#define X509V3_string_free GRPC_SHADOW_X509V3_string_free
+#define CERTIFICATEPOLICIES_free GRPC_SHADOW_CERTIFICATEPOLICIES_free
+#define CERTIFICATEPOLICIES_it GRPC_SHADOW_CERTIFICATEPOLICIES_it
+#define CERTIFICATEPOLICIES_new GRPC_SHADOW_CERTIFICATEPOLICIES_new
+#define NOTICEREF_free GRPC_SHADOW_NOTICEREF_free
+#define NOTICEREF_it GRPC_SHADOW_NOTICEREF_it
+#define NOTICEREF_new GRPC_SHADOW_NOTICEREF_new
+#define POLICYINFO_free GRPC_SHADOW_POLICYINFO_free
+#define POLICYINFO_it GRPC_SHADOW_POLICYINFO_it
+#define POLICYINFO_new GRPC_SHADOW_POLICYINFO_new
+#define POLICYQUALINFO_free GRPC_SHADOW_POLICYQUALINFO_free
+#define POLICYQUALINFO_it GRPC_SHADOW_POLICYQUALINFO_it
+#define POLICYQUALINFO_new GRPC_SHADOW_POLICYQUALINFO_new
+#define USERNOTICE_free GRPC_SHADOW_USERNOTICE_free
+#define USERNOTICE_it GRPC_SHADOW_USERNOTICE_it
+#define USERNOTICE_new GRPC_SHADOW_USERNOTICE_new
+#define X509_POLICY_NODE_print GRPC_SHADOW_X509_POLICY_NODE_print
+#define d2i_CERTIFICATEPOLICIES GRPC_SHADOW_d2i_CERTIFICATEPOLICIES
+#define d2i_NOTICEREF GRPC_SHADOW_d2i_NOTICEREF
+#define d2i_POLICYINFO GRPC_SHADOW_d2i_POLICYINFO
+#define d2i_POLICYQUALINFO GRPC_SHADOW_d2i_POLICYQUALINFO
+#define d2i_USERNOTICE GRPC_SHADOW_d2i_USERNOTICE
+#define i2d_CERTIFICATEPOLICIES GRPC_SHADOW_i2d_CERTIFICATEPOLICIES
+#define i2d_NOTICEREF GRPC_SHADOW_i2d_NOTICEREF
+#define i2d_POLICYINFO GRPC_SHADOW_i2d_POLICYINFO
+#define i2d_POLICYQUALINFO GRPC_SHADOW_i2d_POLICYQUALINFO
+#define i2d_USERNOTICE GRPC_SHADOW_i2d_USERNOTICE
+#define v3_cpols GRPC_SHADOW_v3_cpols
+#define CRL_DIST_POINTS_free GRPC_SHADOW_CRL_DIST_POINTS_free
+#define CRL_DIST_POINTS_it GRPC_SHADOW_CRL_DIST_POINTS_it
+#define CRL_DIST_POINTS_new GRPC_SHADOW_CRL_DIST_POINTS_new
+#define DIST_POINT_NAME_free GRPC_SHADOW_DIST_POINT_NAME_free
+#define DIST_POINT_NAME_it GRPC_SHADOW_DIST_POINT_NAME_it
+#define DIST_POINT_NAME_new GRPC_SHADOW_DIST_POINT_NAME_new
+#define DIST_POINT_free GRPC_SHADOW_DIST_POINT_free
+#define DIST_POINT_it GRPC_SHADOW_DIST_POINT_it
+#define DIST_POINT_new GRPC_SHADOW_DIST_POINT_new
+#define DIST_POINT_set_dpname GRPC_SHADOW_DIST_POINT_set_dpname
+#define ISSUING_DIST_POINT_free GRPC_SHADOW_ISSUING_DIST_POINT_free
+#define ISSUING_DIST_POINT_it GRPC_SHADOW_ISSUING_DIST_POINT_it
+#define ISSUING_DIST_POINT_new GRPC_SHADOW_ISSUING_DIST_POINT_new
+#define d2i_CRL_DIST_POINTS GRPC_SHADOW_d2i_CRL_DIST_POINTS
+#define d2i_DIST_POINT GRPC_SHADOW_d2i_DIST_POINT
+#define d2i_DIST_POINT_NAME GRPC_SHADOW_d2i_DIST_POINT_NAME
+#define d2i_ISSUING_DIST_POINT GRPC_SHADOW_d2i_ISSUING_DIST_POINT
+#define i2d_CRL_DIST_POINTS GRPC_SHADOW_i2d_CRL_DIST_POINTS
+#define i2d_DIST_POINT GRPC_SHADOW_i2d_DIST_POINT
+#define i2d_DIST_POINT_NAME GRPC_SHADOW_i2d_DIST_POINT_NAME
+#define i2d_ISSUING_DIST_POINT GRPC_SHADOW_i2d_ISSUING_DIST_POINT
+#define v3_crld GRPC_SHADOW_v3_crld
+#define v3_freshest_crl GRPC_SHADOW_v3_freshest_crl
+#define v3_idp GRPC_SHADOW_v3_idp
+#define i2s_ASN1_ENUMERATED_TABLE GRPC_SHADOW_i2s_ASN1_ENUMERATED_TABLE
+#define v3_crl_reason GRPC_SHADOW_v3_crl_reason
+#define EXTENDED_KEY_USAGE_free GRPC_SHADOW_EXTENDED_KEY_USAGE_free
+#define EXTENDED_KEY_USAGE_it GRPC_SHADOW_EXTENDED_KEY_USAGE_it
+#define EXTENDED_KEY_USAGE_new GRPC_SHADOW_EXTENDED_KEY_USAGE_new
+#define d2i_EXTENDED_KEY_USAGE GRPC_SHADOW_d2i_EXTENDED_KEY_USAGE
+#define i2d_EXTENDED_KEY_USAGE GRPC_SHADOW_i2d_EXTENDED_KEY_USAGE
+#define v3_ext_ku GRPC_SHADOW_v3_ext_ku
+#define v3_ocsp_accresp GRPC_SHADOW_v3_ocsp_accresp
+#define EDIPARTYNAME_free GRPC_SHADOW_EDIPARTYNAME_free
+#define EDIPARTYNAME_it GRPC_SHADOW_EDIPARTYNAME_it
+#define EDIPARTYNAME_new GRPC_SHADOW_EDIPARTYNAME_new
+#define GENERAL_NAMES_free GRPC_SHADOW_GENERAL_NAMES_free
+#define GENERAL_NAMES_it GRPC_SHADOW_GENERAL_NAMES_it
+#define GENERAL_NAMES_new GRPC_SHADOW_GENERAL_NAMES_new
+#define GENERAL_NAME_cmp GRPC_SHADOW_GENERAL_NAME_cmp
+#define GENERAL_NAME_dup GRPC_SHADOW_GENERAL_NAME_dup
+#define GENERAL_NAME_free GRPC_SHADOW_GENERAL_NAME_free
+#define GENERAL_NAME_get0_otherName GRPC_SHADOW_GENERAL_NAME_get0_otherName
+#define GENERAL_NAME_get0_value GRPC_SHADOW_GENERAL_NAME_get0_value
+#define GENERAL_NAME_it GRPC_SHADOW_GENERAL_NAME_it
+#define GENERAL_NAME_new GRPC_SHADOW_GENERAL_NAME_new
+#define GENERAL_NAME_set0_othername GRPC_SHADOW_GENERAL_NAME_set0_othername
+#define GENERAL_NAME_set0_value GRPC_SHADOW_GENERAL_NAME_set0_value
+#define OTHERNAME_cmp GRPC_SHADOW_OTHERNAME_cmp
+#define OTHERNAME_free GRPC_SHADOW_OTHERNAME_free
+#define OTHERNAME_it GRPC_SHADOW_OTHERNAME_it
+#define OTHERNAME_new GRPC_SHADOW_OTHERNAME_new
+#define d2i_EDIPARTYNAME GRPC_SHADOW_d2i_EDIPARTYNAME
+#define d2i_GENERAL_NAME GRPC_SHADOW_d2i_GENERAL_NAME
+#define d2i_GENERAL_NAMES GRPC_SHADOW_d2i_GENERAL_NAMES
+#define d2i_OTHERNAME GRPC_SHADOW_d2i_OTHERNAME
+#define i2d_EDIPARTYNAME GRPC_SHADOW_i2d_EDIPARTYNAME
+#define i2d_GENERAL_NAME GRPC_SHADOW_i2d_GENERAL_NAME
+#define i2d_GENERAL_NAMES GRPC_SHADOW_i2d_GENERAL_NAMES
+#define i2d_OTHERNAME GRPC_SHADOW_i2d_OTHERNAME
+#define v3_ns_ia5_list GRPC_SHADOW_v3_ns_ia5_list
+#define ACCESS_DESCRIPTION_free GRPC_SHADOW_ACCESS_DESCRIPTION_free
+#define ACCESS_DESCRIPTION_it GRPC_SHADOW_ACCESS_DESCRIPTION_it
+#define ACCESS_DESCRIPTION_new GRPC_SHADOW_ACCESS_DESCRIPTION_new
+#define AUTHORITY_INFO_ACCESS_free GRPC_SHADOW_AUTHORITY_INFO_ACCESS_free
+#define AUTHORITY_INFO_ACCESS_it GRPC_SHADOW_AUTHORITY_INFO_ACCESS_it
+#define AUTHORITY_INFO_ACCESS_new GRPC_SHADOW_AUTHORITY_INFO_ACCESS_new
+#define d2i_ACCESS_DESCRIPTION GRPC_SHADOW_d2i_ACCESS_DESCRIPTION
+#define d2i_AUTHORITY_INFO_ACCESS GRPC_SHADOW_d2i_AUTHORITY_INFO_ACCESS
+#define i2a_ACCESS_DESCRIPTION GRPC_SHADOW_i2a_ACCESS_DESCRIPTION
+#define i2d_ACCESS_DESCRIPTION GRPC_SHADOW_i2d_ACCESS_DESCRIPTION
+#define i2d_AUTHORITY_INFO_ACCESS GRPC_SHADOW_i2d_AUTHORITY_INFO_ACCESS
+#define v3_info GRPC_SHADOW_v3_info
+#define v3_sinfo GRPC_SHADOW_v3_sinfo
+#define v3_crl_num GRPC_SHADOW_v3_crl_num
+#define v3_delta_crl GRPC_SHADOW_v3_delta_crl
+#define v3_inhibit_anyp GRPC_SHADOW_v3_inhibit_anyp
+#define X509V3_EXT_add GRPC_SHADOW_X509V3_EXT_add
+#define X509V3_EXT_add_alias GRPC_SHADOW_X509V3_EXT_add_alias
+#define X509V3_EXT_add_list GRPC_SHADOW_X509V3_EXT_add_list
+#define X509V3_EXT_cleanup GRPC_SHADOW_X509V3_EXT_cleanup
+#define X509V3_EXT_d2i GRPC_SHADOW_X509V3_EXT_d2i
+#define X509V3_EXT_free GRPC_SHADOW_X509V3_EXT_free
+#define X509V3_EXT_get GRPC_SHADOW_X509V3_EXT_get
+#define X509V3_EXT_get_nid GRPC_SHADOW_X509V3_EXT_get_nid
+#define X509V3_add1_i2d GRPC_SHADOW_X509V3_add1_i2d
+#define X509V3_add_standard_extensions GRPC_SHADOW_X509V3_add_standard_extensions
+#define X509V3_get_d2i GRPC_SHADOW_X509V3_get_d2i
+#define GENERAL_SUBTREE_free GRPC_SHADOW_GENERAL_SUBTREE_free
+#define GENERAL_SUBTREE_it GRPC_SHADOW_GENERAL_SUBTREE_it
+#define GENERAL_SUBTREE_new GRPC_SHADOW_GENERAL_SUBTREE_new
+#define NAME_CONSTRAINTS_check GRPC_SHADOW_NAME_CONSTRAINTS_check
+#define NAME_CONSTRAINTS_free GRPC_SHADOW_NAME_CONSTRAINTS_free
+#define NAME_CONSTRAINTS_it GRPC_SHADOW_NAME_CONSTRAINTS_it
+#define NAME_CONSTRAINTS_new GRPC_SHADOW_NAME_CONSTRAINTS_new
+#define v3_name_constraints GRPC_SHADOW_v3_name_constraints
+#define v3_pci GRPC_SHADOW_v3_pci
+#define PROXY_CERT_INFO_EXTENSION_free GRPC_SHADOW_PROXY_CERT_INFO_EXTENSION_free
+#define PROXY_CERT_INFO_EXTENSION_it GRPC_SHADOW_PROXY_CERT_INFO_EXTENSION_it
+#define PROXY_CERT_INFO_EXTENSION_new GRPC_SHADOW_PROXY_CERT_INFO_EXTENSION_new
+#define PROXY_POLICY_free GRPC_SHADOW_PROXY_POLICY_free
+#define PROXY_POLICY_it GRPC_SHADOW_PROXY_POLICY_it
+#define PROXY_POLICY_new GRPC_SHADOW_PROXY_POLICY_new
+#define d2i_PROXY_CERT_INFO_EXTENSION GRPC_SHADOW_d2i_PROXY_CERT_INFO_EXTENSION
+#define d2i_PROXY_POLICY GRPC_SHADOW_d2i_PROXY_POLICY
+#define i2d_PROXY_CERT_INFO_EXTENSION GRPC_SHADOW_i2d_PROXY_CERT_INFO_EXTENSION
+#define i2d_PROXY_POLICY GRPC_SHADOW_i2d_PROXY_POLICY
+#define POLICY_CONSTRAINTS_free GRPC_SHADOW_POLICY_CONSTRAINTS_free
+#define POLICY_CONSTRAINTS_it GRPC_SHADOW_POLICY_CONSTRAINTS_it
+#define POLICY_CONSTRAINTS_new GRPC_SHADOW_POLICY_CONSTRAINTS_new
+#define v3_policy_constraints GRPC_SHADOW_v3_policy_constraints
+#define PKEY_USAGE_PERIOD_free GRPC_SHADOW_PKEY_USAGE_PERIOD_free
+#define PKEY_USAGE_PERIOD_it GRPC_SHADOW_PKEY_USAGE_PERIOD_it
+#define PKEY_USAGE_PERIOD_new GRPC_SHADOW_PKEY_USAGE_PERIOD_new
+#define d2i_PKEY_USAGE_PERIOD GRPC_SHADOW_d2i_PKEY_USAGE_PERIOD
+#define i2d_PKEY_USAGE_PERIOD GRPC_SHADOW_i2d_PKEY_USAGE_PERIOD
+#define v3_pkey_usage_period GRPC_SHADOW_v3_pkey_usage_period
+#define POLICY_MAPPINGS_it GRPC_SHADOW_POLICY_MAPPINGS_it
+#define POLICY_MAPPING_free GRPC_SHADOW_POLICY_MAPPING_free
+#define POLICY_MAPPING_it GRPC_SHADOW_POLICY_MAPPING_it
+#define POLICY_MAPPING_new GRPC_SHADOW_POLICY_MAPPING_new
+#define v3_policy_mappings GRPC_SHADOW_v3_policy_mappings
+#define X509V3_EXT_print GRPC_SHADOW_X509V3_EXT_print
+#define X509V3_EXT_print_fp GRPC_SHADOW_X509V3_EXT_print_fp
+#define X509V3_EXT_val_prn GRPC_SHADOW_X509V3_EXT_val_prn
+#define X509V3_extensions_print GRPC_SHADOW_X509V3_extensions_print
+#define X509_PURPOSE_add GRPC_SHADOW_X509_PURPOSE_add
+#define X509_PURPOSE_cleanup GRPC_SHADOW_X509_PURPOSE_cleanup
+#define X509_PURPOSE_get0 GRPC_SHADOW_X509_PURPOSE_get0
+#define X509_PURPOSE_get0_name GRPC_SHADOW_X509_PURPOSE_get0_name
+#define X509_PURPOSE_get0_sname GRPC_SHADOW_X509_PURPOSE_get0_sname
+#define X509_PURPOSE_get_by_id GRPC_SHADOW_X509_PURPOSE_get_by_id
+#define X509_PURPOSE_get_by_sname GRPC_SHADOW_X509_PURPOSE_get_by_sname
+#define X509_PURPOSE_get_count GRPC_SHADOW_X509_PURPOSE_get_count
+#define X509_PURPOSE_get_id GRPC_SHADOW_X509_PURPOSE_get_id
+#define X509_PURPOSE_get_trust GRPC_SHADOW_X509_PURPOSE_get_trust
+#define X509_PURPOSE_set GRPC_SHADOW_X509_PURPOSE_set
+#define X509_check_akid GRPC_SHADOW_X509_check_akid
+#define X509_check_ca GRPC_SHADOW_X509_check_ca
+#define X509_check_issued GRPC_SHADOW_X509_check_issued
+#define X509_check_purpose GRPC_SHADOW_X509_check_purpose
+#define X509_supported_extension GRPC_SHADOW_X509_supported_extension
+#define i2s_ASN1_OCTET_STRING GRPC_SHADOW_i2s_ASN1_OCTET_STRING
+#define s2i_ASN1_OCTET_STRING GRPC_SHADOW_s2i_ASN1_OCTET_STRING
+#define v3_skey_id GRPC_SHADOW_v3_skey_id
+#define SXNETID_free GRPC_SHADOW_SXNETID_free
+#define SXNETID_it GRPC_SHADOW_SXNETID_it
+#define SXNETID_new GRPC_SHADOW_SXNETID_new
+#define SXNET_add_id_INTEGER GRPC_SHADOW_SXNET_add_id_INTEGER
+#define SXNET_add_id_asc GRPC_SHADOW_SXNET_add_id_asc
+#define SXNET_add_id_ulong GRPC_SHADOW_SXNET_add_id_ulong
+#define SXNET_free GRPC_SHADOW_SXNET_free
+#define SXNET_get_id_INTEGER GRPC_SHADOW_SXNET_get_id_INTEGER
+#define SXNET_get_id_asc GRPC_SHADOW_SXNET_get_id_asc
+#define SXNET_get_id_ulong GRPC_SHADOW_SXNET_get_id_ulong
+#define SXNET_it GRPC_SHADOW_SXNET_it
+#define SXNET_new GRPC_SHADOW_SXNET_new
+#define d2i_SXNET GRPC_SHADOW_d2i_SXNET
+#define d2i_SXNETID GRPC_SHADOW_d2i_SXNETID
+#define i2d_SXNET GRPC_SHADOW_i2d_SXNET
+#define i2d_SXNETID GRPC_SHADOW_i2d_SXNETID
+#define v3_sxnet GRPC_SHADOW_v3_sxnet
+#define X509V3_NAME_from_section GRPC_SHADOW_X509V3_NAME_from_section
+#define X509V3_add_value GRPC_SHADOW_X509V3_add_value
+#define X509V3_add_value_bool GRPC_SHADOW_X509V3_add_value_bool
+#define X509V3_add_value_bool_nf GRPC_SHADOW_X509V3_add_value_bool_nf
+#define X509V3_add_value_int GRPC_SHADOW_X509V3_add_value_int
+#define X509V3_add_value_uchar GRPC_SHADOW_X509V3_add_value_uchar
+#define X509V3_conf_free GRPC_SHADOW_X509V3_conf_free
+#define X509V3_get_value_bool GRPC_SHADOW_X509V3_get_value_bool
+#define X509V3_get_value_int GRPC_SHADOW_X509V3_get_value_int
+#define X509V3_parse_list GRPC_SHADOW_X509V3_parse_list
+#define X509_REQ_get1_email GRPC_SHADOW_X509_REQ_get1_email
+#define X509_check_email GRPC_SHADOW_X509_check_email
+#define X509_check_host GRPC_SHADOW_X509_check_host
+#define X509_check_ip GRPC_SHADOW_X509_check_ip
+#define X509_check_ip_asc GRPC_SHADOW_X509_check_ip_asc
+#define X509_email_free GRPC_SHADOW_X509_email_free
+#define X509_get1_email GRPC_SHADOW_X509_get1_email
+#define X509_get1_ocsp GRPC_SHADOW_X509_get1_ocsp
+#define a2i_IPADDRESS GRPC_SHADOW_a2i_IPADDRESS
+#define a2i_IPADDRESS_NC GRPC_SHADOW_a2i_IPADDRESS_NC
+#define a2i_ipadd GRPC_SHADOW_a2i_ipadd
+#define hex_to_string GRPC_SHADOW_hex_to_string
+#define i2s_ASN1_ENUMERATED GRPC_SHADOW_i2s_ASN1_ENUMERATED
+#define i2s_ASN1_INTEGER GRPC_SHADOW_i2s_ASN1_INTEGER
+#define name_cmp GRPC_SHADOW_name_cmp
+#define s2i_ASN1_INTEGER GRPC_SHADOW_s2i_ASN1_INTEGER
+#define string_to_hex GRPC_SHADOW_string_to_hex
+#define PKCS7_get_raw_certificates GRPC_SHADOW_PKCS7_get_raw_certificates
+#define pkcs7_bundle GRPC_SHADOW_pkcs7_bundle
+#define pkcs7_parse_header GRPC_SHADOW_pkcs7_parse_header
+#define PKCS7_bundle_CRLs GRPC_SHADOW_PKCS7_bundle_CRLs
+#define PKCS7_bundle_certificates GRPC_SHADOW_PKCS7_bundle_certificates
+#define PKCS7_get_CRLs GRPC_SHADOW_PKCS7_get_CRLs
+#define PKCS7_get_PEM_CRLs GRPC_SHADOW_PKCS7_get_PEM_CRLs
+#define PKCS7_get_PEM_certificates GRPC_SHADOW_PKCS7_get_PEM_certificates
+#define PKCS7_get_certificates GRPC_SHADOW_PKCS7_get_certificates
+#define PKCS8_marshal_encrypted_private_key GRPC_SHADOW_PKCS8_marshal_encrypted_private_key
+#define PKCS8_parse_encrypted_private_key GRPC_SHADOW_PKCS8_parse_encrypted_private_key
+#define pkcs12_key_gen GRPC_SHADOW_pkcs12_key_gen
+#define pkcs8_pbe_decrypt GRPC_SHADOW_pkcs8_pbe_decrypt
+#define EVP_PKCS82PKEY GRPC_SHADOW_EVP_PKCS82PKEY
+#define EVP_PKEY2PKCS8 GRPC_SHADOW_EVP_PKEY2PKCS8
+#define PKCS12_PBE_add GRPC_SHADOW_PKCS12_PBE_add
+#define PKCS12_free GRPC_SHADOW_PKCS12_free
+#define PKCS12_get_key_and_certs GRPC_SHADOW_PKCS12_get_key_and_certs
+#define PKCS12_parse GRPC_SHADOW_PKCS12_parse
+#define PKCS12_verify_mac GRPC_SHADOW_PKCS12_verify_mac
+#define PKCS8_PRIV_KEY_INFO_free GRPC_SHADOW_PKCS8_PRIV_KEY_INFO_free
+#define PKCS8_PRIV_KEY_INFO_it GRPC_SHADOW_PKCS8_PRIV_KEY_INFO_it
+#define PKCS8_PRIV_KEY_INFO_new GRPC_SHADOW_PKCS8_PRIV_KEY_INFO_new
+#define PKCS8_decrypt GRPC_SHADOW_PKCS8_decrypt
+#define PKCS8_encrypt GRPC_SHADOW_PKCS8_encrypt
+#define d2i_PKCS12 GRPC_SHADOW_d2i_PKCS12
+#define d2i_PKCS12_bio GRPC_SHADOW_d2i_PKCS12_bio
+#define d2i_PKCS12_fp GRPC_SHADOW_d2i_PKCS12_fp
+#define d2i_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_d2i_PKCS8_PRIV_KEY_INFO
+#define i2d_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_i2d_PKCS8_PRIV_KEY_INFO
+#define PKCS5_pbe2_decrypt_init GRPC_SHADOW_PKCS5_pbe2_decrypt_init
+#define PKCS5_pbe2_encrypt_init GRPC_SHADOW_PKCS5_pbe2_encrypt_init
+
+#endif /* GRPC_SHADOW_BORINGSSL_SYMBOLS */
+
+#endif /* GRPC_CORE_TSI_GRPC_SHADOW_BORINGSSL_H */
diff --git a/src/core/tsi/ssl/session_cache/ssl_session.h b/src/core/tsi/ssl/session_cache/ssl_session.h
index 115221ec06..e847267cb3 100644
--- a/src/core/tsi/ssl/session_cache/ssl_session.h
+++ b/src/core/tsi/ssl/session_cache/ssl_session.h
@@ -21,6 +21,8 @@
#include <grpc/support/port_platform.h>
+#include "src/core/tsi/grpc_shadow_boringssl.h"
+
#include <grpc/slice.h>
extern "C" {
diff --git a/src/core/tsi/ssl/session_cache/ssl_session_cache.h b/src/core/tsi/ssl/session_cache/ssl_session_cache.h
index a90cca1a2e..37fa2d124c 100644
--- a/src/core/tsi/ssl/session_cache/ssl_session_cache.h
+++ b/src/core/tsi/ssl/session_cache/ssl_session_cache.h
@@ -21,6 +21,8 @@
#include <grpc/support/port_platform.h>
+#include "src/core/tsi/grpc_shadow_boringssl.h"
+
#include <grpc/slice.h>
#include <grpc/support/sync.h>
diff --git a/src/core/tsi/ssl_transport_security.cc b/src/core/tsi/ssl_transport_security.cc
index 44bad0d19a..d6a72ada0d 100644
--- a/src/core/tsi/ssl_transport_security.cc
+++ b/src/core/tsi/ssl_transport_security.cc
@@ -18,6 +18,8 @@
#include <grpc/support/port_platform.h>
+#include "src/core/tsi/grpc_shadow_boringssl.h"
+
#include "src/core/tsi/ssl_transport_security.h"
#include <limits.h>
@@ -1049,9 +1051,9 @@ static tsi_result ssl_handshaker_result_extract_peer(
}
const char* session_reused = SSL_session_reused(impl->ssl) ? "true" : "false";
- result = tsi_construct_string_peer_property(
+ result = tsi_construct_string_peer_property_from_cstring(
TSI_SSL_SESSION_REUSED_PEER_PROPERTY, session_reused,
- strlen(session_reused) + 1, &peer->properties[peer->property_count]);
+ &peer->properties[peer->property_count]);
if (result != TSI_OK) return result;
peer->property_count++;
diff --git a/src/core/tsi/ssl_types.h b/src/core/tsi/ssl_types.h
index b15d02be39..0ce5e2ee6f 100644
--- a/src/core/tsi/ssl_types.h
+++ b/src/core/tsi/ssl_types.h
@@ -29,6 +29,8 @@
#include <grpc/support/port_platform.h>
+#include "src/core/tsi/grpc_shadow_boringssl.h"
+
#include <openssl/ssl.h>
#ifdef OPENSSL_IS_BORINGSSL
diff --git a/src/cpp/common/version_cc.cc b/src/cpp/common/version_cc.cc
index b8fca9a6ee..cc797f1546 100644
--- a/src/cpp/common/version_cc.cc
+++ b/src/cpp/common/version_cc.cc
@@ -22,5 +22,5 @@
#include <grpcpp/grpcpp.h>
namespace grpc {
-grpc::string Version() { return "1.15.0-dev"; }
+grpc::string Version() { return "1.16.0-dev"; }
} // namespace grpc
diff --git a/src/csharp/Grpc.Core.Tests/ChannelCredentialsTest.cs b/src/csharp/Grpc.Core.Tests/ChannelCredentialsTest.cs
index 62cc904a61..843d88bfb6 100644
--- a/src/csharp/Grpc.Core.Tests/ChannelCredentialsTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ChannelCredentialsTest.cs
@@ -17,13 +17,7 @@
#endregion
using System;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.Threading.Tasks;
-using Grpc.Core;
using Grpc.Core.Internal;
-using Grpc.Core.Utils;
using NUnit.Framework;
namespace Grpc.Core.Tests
@@ -44,9 +38,38 @@ namespace Grpc.Core.Tests
Assert.Throws(typeof(ArgumentNullException), () => ChannelCredentials.Create(null, new FakeCallCredentials()));
Assert.Throws(typeof(ArgumentNullException), () => ChannelCredentials.Create(new FakeChannelCredentials(true), null));
-
+
// forbid composing non-composable
Assert.Throws(typeof(ArgumentException), () => ChannelCredentials.Create(new FakeChannelCredentials(false), new FakeCallCredentials()));
}
+
+ [Test]
+ public void ChannelCredentials_NativeCredentialsAreReused()
+ {
+ // always returning the same native object is critical for subchannel sharing to work with secure channels
+ var creds = new SslCredentials();
+ var nativeCreds1 = creds.GetNativeCredentials();
+ var nativeCreds2 = creds.GetNativeCredentials();
+ Assert.AreSame(nativeCreds1, nativeCreds2);
+ }
+
+ [Test]
+ public void ChannelCredentials_CreateExceptionIsCached()
+ {
+ var creds = new ChannelCredentialsWithCreateNativeThrows();
+ var ex1 = Assert.Throws(typeof(Exception), () => creds.GetNativeCredentials());
+ var ex2 = Assert.Throws(typeof(Exception), () => creds.GetNativeCredentials());
+ Assert.AreSame(ex1, ex2);
+ }
+
+ internal class ChannelCredentialsWithCreateNativeThrows : ChannelCredentials
+ {
+ internal override bool IsComposable => false;
+
+ internal override ChannelCredentialsSafeHandle CreateNativeCredentials()
+ {
+ throw new Exception("Creation of native credentials has failed on purpose.");
+ }
+ }
}
}
diff --git a/src/csharp/Grpc.Core.Tests/FakeCredentials.cs b/src/csharp/Grpc.Core.Tests/FakeCredentials.cs
index 7d658576e5..f23c9e9757 100644
--- a/src/csharp/Grpc.Core.Tests/FakeCredentials.cs
+++ b/src/csharp/Grpc.Core.Tests/FakeCredentials.cs
@@ -16,15 +16,7 @@
#endregion
-using System;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.Threading.Tasks;
-using Grpc.Core;
using Grpc.Core.Internal;
-using Grpc.Core.Utils;
-using NUnit.Framework;
namespace Grpc.Core.Tests
{
@@ -42,7 +34,7 @@ namespace Grpc.Core.Tests
get { return composable; }
}
- internal override ChannelCredentialsSafeHandle ToNativeCredentials()
+ internal override ChannelCredentialsSafeHandle CreateNativeCredentials()
{
return null;
}
diff --git a/src/csharp/Grpc.Core.Tests/MetadataTest.cs b/src/csharp/Grpc.Core.Tests/MetadataTest.cs
index 8916731757..171c5c470e 100644
--- a/src/csharp/Grpc.Core.Tests/MetadataTest.cs
+++ b/src/csharp/Grpc.Core.Tests/MetadataTest.cs
@@ -66,6 +66,8 @@ namespace Grpc.Core.Tests
new Metadata.Entry("0123456789abc", "XYZ");
new Metadata.Entry("-abc", "XYZ");
new Metadata.Entry("a_bc_", "XYZ");
+ new Metadata.Entry("abc.xyz", "XYZ");
+ new Metadata.Entry("abc.xyz-bin", new byte[] {1, 2, 3});
Assert.Throws(typeof(ArgumentException), () => new Metadata.Entry("abc[", "xyz"));
Assert.Throws(typeof(ArgumentException), () => new Metadata.Entry("abc/", "xyz"));
}
diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs
index e9930b6fbc..7912b06b71 100644
--- a/src/csharp/Grpc.Core/Channel.cs
+++ b/src/csharp/Grpc.Core/Channel.cs
@@ -72,9 +72,9 @@ namespace Grpc.Core
this.environment = GrpcEnvironment.AddRef();
this.completionQueue = this.environment.PickCompletionQueue();
- using (var nativeCredentials = credentials.ToNativeCredentials())
using (var nativeChannelArgs = ChannelOptions.CreateChannelArgs(this.options.Values))
{
+ var nativeCredentials = credentials.GetNativeCredentials();
if (nativeCredentials != null)
{
this.handle = ChannelSafeHandle.CreateSecure(nativeCredentials, target, nativeChannelArgs);
diff --git a/src/csharp/Grpc.Core/ChannelCredentials.cs b/src/csharp/Grpc.Core/ChannelCredentials.cs
index ba482897d7..3ce32f31b7 100644
--- a/src/csharp/Grpc.Core/ChannelCredentials.cs
+++ b/src/csharp/Grpc.Core/ChannelCredentials.cs
@@ -31,6 +31,19 @@ namespace Grpc.Core
public abstract class ChannelCredentials
{
static readonly ChannelCredentials InsecureInstance = new InsecureCredentialsImpl();
+ readonly Lazy<ChannelCredentialsSafeHandle> cachedNativeCredentials;
+
+ /// <summary>
+ /// Creates a new instance of channel credentials
+ /// </summary>
+ public ChannelCredentials()
+ {
+ // Native credentials object need to be kept alive once initialized for subchannel sharing to work correctly
+ // with secure connections. See https://github.com/grpc/grpc/issues/15207.
+ // We rely on finalizer to clean up the native portion of ChannelCredentialsSafeHandle after the ChannelCredentials
+ // instance becomes unused.
+ this.cachedNativeCredentials = new Lazy<ChannelCredentialsSafeHandle>(() => CreateNativeCredentials());
+ }
/// <summary>
/// Returns instance of credentials that provides no security and
@@ -57,11 +70,22 @@ namespace Grpc.Core
}
/// <summary>
- /// Creates native object for the credentials. May return null if insecure channel
- /// should be created.
+ /// Gets native object for the credentials, creating one if it already doesn't exist. May return null if insecure channel
+ /// should be created. Caller must not call <c>Dispose()</c> on the returned native credentials as their lifetime
+ /// is managed by this class (and instances of native credentials are cached).
+ /// </summary>
+ /// <returns>The native credentials.</returns>
+ internal ChannelCredentialsSafeHandle GetNativeCredentials()
+ {
+ return cachedNativeCredentials.Value;
+ }
+
+ /// <summary>
+ /// Creates a new native object for the credentials. May return null if insecure channel
+ /// should be created. For internal use only, use <see cref="GetNativeCredentials"/> instead.
/// </summary>
/// <returns>The native credentials.</returns>
- internal abstract ChannelCredentialsSafeHandle ToNativeCredentials();
+ internal abstract ChannelCredentialsSafeHandle CreateNativeCredentials();
/// <summary>
/// Returns <c>true</c> if this credential type allows being composed by <c>CompositeCredentials</c>.
@@ -73,7 +97,7 @@ namespace Grpc.Core
private sealed class InsecureCredentialsImpl : ChannelCredentials
{
- internal override ChannelCredentialsSafeHandle ToNativeCredentials()
+ internal override ChannelCredentialsSafeHandle CreateNativeCredentials()
{
return null;
}
@@ -145,7 +169,7 @@ namespace Grpc.Core
get { return true; }
}
- internal override ChannelCredentialsSafeHandle ToNativeCredentials()
+ internal override ChannelCredentialsSafeHandle CreateNativeCredentials()
{
return ChannelCredentialsSafeHandle.CreateSslCredentials(rootCertificates, keyCertificatePair);
}
@@ -173,12 +197,11 @@ namespace Grpc.Core
GrpcPreconditions.CheckArgument(channelCredentials.IsComposable, "Supplied channel credentials do not allow composition.");
}
- internal override ChannelCredentialsSafeHandle ToNativeCredentials()
+ internal override ChannelCredentialsSafeHandle CreateNativeCredentials()
{
- using (var channelCreds = channelCredentials.ToNativeCredentials())
using (var callCreds = callCredentials.ToNativeCredentials())
{
- var nativeComposite = ChannelCredentialsSafeHandle.CreateComposite(channelCreds, callCreds);
+ var nativeComposite = ChannelCredentialsSafeHandle.CreateComposite(channelCredentials.GetNativeCredentials(), callCreds);
if (nativeComposite.IsInvalid)
{
throw new ArgumentException("Error creating native composite credentials. Likely, this is because you are trying to compose incompatible credentials.");
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs
index 3c9e090ba4..66902f3caa 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs
@@ -325,9 +325,18 @@ namespace Grpc.Core.Internal
}
}
- protected override void OnAfterReleaseResources()
+ protected override void OnAfterReleaseResourcesLocked()
{
details.Channel.RemoveCallReference(this);
+ }
+
+ protected override void OnAfterReleaseResourcesUnlocked()
+ {
+ // If cancellation callback is in progress, this can block
+ // so we need to do this outside of call's lock to prevent
+ // deadlock.
+ // See https://github.com/grpc/grpc/issues/14777
+ // See https://github.com/dotnet/corefx/issues/14903
cancellationTokenRegistration?.Dispose();
}
@@ -448,6 +457,7 @@ namespace Grpc.Core.Internal
TResponse msg = default(TResponse);
var deserializeException = TryDeserialize(receivedMessage, out msg);
+ bool releasedResources;
lock (myLock)
{
finished = true;
@@ -464,7 +474,12 @@ namespace Grpc.Core.Internal
streamingWriteTcs = null;
}
- ReleaseResourcesIfPossible();
+ releasedResources = ReleaseResourcesIfPossible();
+ }
+
+ if (releasedResources)
+ {
+ OnAfterReleaseResourcesUnlocked();
}
responseHeadersTcs.SetResult(responseHeaders);
@@ -494,6 +509,7 @@ namespace Grpc.Core.Internal
TaskCompletionSource<object> delayedStreamingWriteTcs = null;
+ bool releasedResources;
lock (myLock)
{
finished = true;
@@ -504,7 +520,12 @@ namespace Grpc.Core.Internal
streamingWriteTcs = null;
}
- ReleaseResourcesIfPossible();
+ releasedResources = ReleaseResourcesIfPossible();
+ }
+
+ if (releasedResources)
+ {
+ OnAfterReleaseResourcesUnlocked();
}
if (delayedStreamingWriteTcs != null)
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
index 3273c26b88..5a53049e4b 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
@@ -196,10 +196,14 @@ namespace Grpc.Core.Internal
call.Dispose();
}
disposed = true;
- OnAfterReleaseResources();
+ OnAfterReleaseResourcesLocked();
}
- protected virtual void OnAfterReleaseResources()
+ protected virtual void OnAfterReleaseResourcesLocked()
+ {
+ }
+
+ protected virtual void OnAfterReleaseResourcesUnlocked()
{
}
@@ -235,6 +239,7 @@ namespace Grpc.Core.Internal
{
bool delayCompletion = false;
TaskCompletionSource<object> origTcs = null;
+ bool releasedResources;
lock (myLock)
{
if (!success && !finished && IsClient) {
@@ -252,7 +257,12 @@ namespace Grpc.Core.Internal
streamingWriteTcs = null;
}
- ReleaseResourcesIfPossible();
+ releasedResources = ReleaseResourcesIfPossible();
+ }
+
+ if (releasedResources)
+ {
+ OnAfterReleaseResourcesUnlocked();
}
if (!success)
@@ -282,9 +292,15 @@ namespace Grpc.Core.Internal
/// </summary>
protected void HandleSendStatusFromServerFinished(bool success)
{
+ bool releasedResources;
lock (myLock)
{
- ReleaseResourcesIfPossible();
+ releasedResources = ReleaseResourcesIfPossible();
+ }
+
+ if (releasedResources)
+ {
+ OnAfterReleaseResourcesUnlocked();
}
if (!success)
@@ -310,6 +326,7 @@ namespace Grpc.Core.Internal
var deserializeException = (success && receivedMessage != null) ? TryDeserialize(receivedMessage, out msg) : null;
TaskCompletionSource<TRead> origTcs = null;
+ bool releasedResources;
lock (myLock)
{
origTcs = streamingReadTcs;
@@ -332,7 +349,12 @@ namespace Grpc.Core.Internal
streamingReadTcs = null;
}
- ReleaseResourcesIfPossible();
+ releasedResources = ReleaseResourcesIfPossible();
+ }
+
+ if (releasedResources)
+ {
+ OnAfterReleaseResourcesUnlocked();
}
if (deserializeException != null && !IsClient)
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs b/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs
index 11acb27533..0ceca4abb8 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs
@@ -184,7 +184,7 @@ namespace Grpc.Core.Internal
throw new InvalidOperationException("Call be only called for client calls");
}
- protected override void OnAfterReleaseResources()
+ protected override void OnAfterReleaseResourcesLocked()
{
server.RemoveCallReference(this);
}
@@ -206,6 +206,7 @@ namespace Grpc.Core.Internal
{
// NOTE: because this event is a result of batch containing GRPC_OP_RECV_CLOSE_ON_SERVER,
// success will be always set to true.
+ bool releasedResources;
lock (myLock)
{
finished = true;
@@ -217,7 +218,12 @@ namespace Grpc.Core.Internal
streamingReadTcs = new TaskCompletionSource<TRequest>();
streamingReadTcs.SetResult(default(TRequest));
}
- ReleaseResourcesIfPossible();
+ releasedResources = ReleaseResourcesIfPossible();
+ }
+
+ if (releasedResources)
+ {
+ OnAfterReleaseResourcesUnlocked();
}
if (cancelled)
diff --git a/src/csharp/Grpc.Core/Metadata.cs b/src/csharp/Grpc.Core/Metadata.cs
index 0e4456278c..281952d6d4 100644
--- a/src/csharp/Grpc.Core/Metadata.cs
+++ b/src/csharp/Grpc.Core/Metadata.cs
@@ -225,7 +225,7 @@ namespace Grpc.Core
/// </summary>
public class Entry
{
- private static readonly Regex ValidKeyRegex = new Regex("^[a-z0-9_-]+$");
+ private static readonly Regex ValidKeyRegex = new Regex("^[.a-z0-9_-]+$");
readonly string key;
readonly string value;
@@ -360,7 +360,7 @@ namespace Grpc.Core
{
var normalized = GrpcPreconditions.CheckNotNull(key, "key").ToLowerInvariant();
GrpcPreconditions.CheckArgument(ValidKeyRegex.IsMatch(normalized),
- "Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores and hyphens.");
+ "Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores, hyphens and dots.");
return normalized;
}
diff --git a/src/csharp/Grpc.Core/Version.csproj.include b/src/csharp/Grpc.Core/Version.csproj.include
index 45bd8ebd85..18515ea1e8 100755
--- a/src/csharp/Grpc.Core/Version.csproj.include
+++ b/src/csharp/Grpc.Core/Version.csproj.include
@@ -1,7 +1,7 @@
<!-- This file is generated -->
<Project>
<PropertyGroup>
- <GrpcCsharpVersion>1.15.0-dev</GrpcCsharpVersion>
+ <GrpcCsharpVersion>1.16.0-dev</GrpcCsharpVersion>
<GoogleProtobufVersion>3.6.1</GoogleProtobufVersion>
</PropertyGroup>
</Project>
diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs
index 295e0f2577..55d09dda7a 100644
--- a/src/csharp/Grpc.Core/VersionInfo.cs
+++ b/src/csharp/Grpc.Core/VersionInfo.cs
@@ -33,11 +33,11 @@ namespace Grpc.Core
/// <summary>
/// Current <c>AssemblyFileVersion</c> of gRPC C# assemblies
/// </summary>
- public const string CurrentAssemblyFileVersion = "1.15.0.0";
+ public const string CurrentAssemblyFileVersion = "1.16.0.0";
/// <summary>
/// Current version of gRPC C#
/// </summary>
- public const string CurrentVersion = "1.15.0-dev";
+ public const string CurrentVersion = "1.16.0-dev";
}
}
diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat
index 8f38f0aa20..24d016104c 100755
--- a/src/csharp/build_packages_dotnetcli.bat
+++ b/src/csharp/build_packages_dotnetcli.bat
@@ -13,7 +13,7 @@
@rem limitations under the License.
@rem Current package versions
-set VERSION=1.15.0-dev
+set VERSION=1.16.0-dev
@rem Adjust the location of nuget.exe
set NUGET=C:\nuget\nuget.exe
diff --git a/src/csharp/build_unitypackage.bat b/src/csharp/build_unitypackage.bat
index 9c53114b84..4e7ac4e414 100644
--- a/src/csharp/build_unitypackage.bat
+++ b/src/csharp/build_unitypackage.bat
@@ -13,7 +13,7 @@
@rem limitations under the License.
@rem Current package versions
-set VERSION=1.15.0-dev
+set VERSION=1.16.0-dev
@rem Adjust the location of nuget.exe
set NUGET=C:\nuget\nuget.exe
diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index 5e9a9a4513..200cee5b7b 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -42,7 +42,7 @@ Pod::Spec.new do |s|
# exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
# before them.
s.name = '!ProtoCompiler-gRPCPlugin'
- v = '1.15.0-dev'
+ v = '1.16.0-dev'
s.version = v
s.summary = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.'
s.description = <<-DESC
diff --git a/src/objective-c/BoringSSL-GRPC.podspec b/src/objective-c/BoringSSL-GRPC.podspec
new file mode 100644
index 0000000000..704b35a29e
--- /dev/null
+++ b/src/objective-c/BoringSSL-GRPC.podspec
@@ -0,0 +1,4527 @@
+
+# This file has been automatically generated from a template file.
+# Please make modifications to
+# `templates/src/objective-c/BoringSSL-GRPC.podspec.template` instead. This
+# file can be regenerated from the template by running
+# `tools/buildgen/generate_projects.sh`.
+
+# BoringSSL CocoaPods podspec
+
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Pod::Spec.new do |s|
+ s.name = 'BoringSSL-GRPC'
+ version = '0.0.1'
+ s.version = version
+ s.summary = 'BoringSSL is a fork of OpenSSL that is designed to meet Google\'s needs.'
+ # Adapted from the homepage:
+ s.description = <<-DESC
+ BoringSSL is a fork of OpenSSL that is designed to meet Google's needs.
+
+ Although BoringSSL is an open source project, it is not intended for general use, as OpenSSL is.
+ We don't recommend that third parties depend upon it. Doing so is likely to be frustrating
+ because there are no guarantees of API stability. Only the latest version of this pod is
+ supported, and every new version is a new major version.
+
+ We update Google libraries and programs that use BoringSSL as needed when deciding to make API
+ changes. This allows us to mostly avoid compromises in the name of compatibility. It works for
+ us, but it may not work for you.
+
+ As a Cocoapods pod, it has the advantage over OpenSSL's pods that the library doesn't need to
+ be precompiled. This eliminates the 10 - 20 minutes of wait the first time a user does "pod
+ install", lets it be used as a dynamic framework (pending solution of Cocoapods' issue #4605),
+ and works with bitcode automatically. It's also thought to be smaller than OpenSSL (which takes
+ 1MB - 2MB per ARM architecture), but we don't have specific numbers yet.
+
+ BoringSSL arose because Google used OpenSSL for many years in various ways and, over time, built
+ up a large number of patches that were maintained while tracking upstream OpenSSL. As Google's
+ product portfolio became more complex, more copies of OpenSSL sprung up and the effort involved
+ in maintaining all these patches in multiple places was growing steadily.
+
+ Currently BoringSSL is the SSL library in Chrome/Chromium, Android (but it's not part of the
+ NDK) and a number of other apps/programs.
+ DESC
+ s.homepage = 'https://github.com/google/boringssl'
+ s.license = { :type => 'Mixed', :file => 'LICENSE' }
+ # "The name and email addresses of the library maintainers, not the Podspec maintainer."
+ s.authors = 'Adam Langley', 'David Benjamin', 'Matt Braithwaite'
+
+ s.source = {
+ :git => 'https://github.com/google/boringssl.git',
+ :commit => "b29b21a81b32ec273f118f589f46d56ad3332420",
+ }
+
+ s.ios.deployment_target = '5.0'
+ s.osx.deployment_target = '10.7'
+
+ name = 'openssl'
+
+ # When creating a dynamic framework, name it openssl.framework instead of BoringSSL.framework.
+ # This lets users write their includes like `#include <openssl/ssl.h>` as opposed to `#include
+ # <BoringSSL/ssl.h>`.
+ s.module_name = name
+
+ # When creating a dynamic framework, copy the headers under `include/openssl/` into the root of
+ # the `Headers/` directory of the framework (i.e., not under `Headers/include/openssl`).
+ #
+ # TODO(jcanizales): Debug why this doesn't work on macOS.
+ s.header_mappings_dir = 'include/openssl'
+
+ # The above has an undesired effect when creating a static library: It forces users to write
+ # includes like `#include <BoringSSL/ssl.h>`. `s.header_dir` adds a path prefix to that, and
+ # because Cocoapods lets omit the pod name when including headers of static libraries, the
+ # following lets users write `#include <openssl/ssl.h>`.
+ s.header_dir = name
+
+ # The module map and umbrella header created automatically by Cocoapods don't work for C libraries
+ # like this one. The following file, and a correct umbrella header, are created on the fly by the
+ # `prepare_command` of this pod.
+ s.module_map = 'include/openssl/BoringSSL.modulemap'
+
+ # We don't need to inhibit all warnings; only -Wno-shorten-64-to-32. But Cocoapods' linter doesn't
+ # want that for some reason.
+ s.compiler_flags = '-DOPENSSL_NO_ASM', '-GCC_WARN_INHIBIT_ALL_WARNINGS', '-w'
+ s.requires_arc = false
+
+ # Like many other C libraries, BoringSSL has its public headers under `include/<libname>/` and its
+ # sources and private headers in other directories outside `include/`. Cocoapods' linter doesn't
+ # allow any header to be listed outside the `header_mappings_dir` (even though doing so works in
+ # practice). Because we need our `header_mappings_dir` to be `include/openssl/` for the reason
+ # mentioned above, we work around the linter limitation by dividing the pod into two subspecs, one
+ # for public headers and the other for implementation. Each gets its own `header_mappings_dir`,
+ # making the linter happy.
+ s.subspec 'Interface' do |ss|
+ ss.header_mappings_dir = 'include/openssl'
+ ss.source_files = 'include/openssl/*.h'
+ end
+ s.subspec 'Implementation' do |ss|
+ ss.header_mappings_dir = '.'
+ ss.source_files = 'ssl/*.{h,cc}',
+ 'ssl/**/*.{h,cc}',
+ '*.{h,c}',
+ 'crypto/*.{h,c}',
+ 'crypto/**/*.{h,c}',
+ 'third_party/fiat/*.{h,c}'
+ ss.private_header_files = 'ssl/*.h',
+ 'ssl/**/*.h',
+ '*.h',
+ 'crypto/*.h',
+ 'crypto/**/*.h'
+ # bcm.c includes other source files, creating duplicated symbols. Since it is not used, we
+ # explicitly exclude it from the pod.
+ # TODO (mxyan): Work with BoringSSL team to remove this hack.
+ ss.exclude_files = 'crypto/fipsmodule/bcm.c',
+ '**/*_test.*',
+ '**/test_*.*',
+ '**/test/*.*'
+
+ ss.dependency "#{s.name}/Interface", version
+ end
+
+ s.prepare_command = <<-END_OF_COMMAND
+ # Add a module map and an umbrella header
+ cat > include/openssl/umbrella.h <<EOF
+ #include "ssl.h"
+ #include "crypto.h"
+ #include "aes.h"
+ /* The following macros are defined by base.h. The latter is the first file included by the
+ other headers. */
+ #if defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
+ # include "arm_arch.h"
+ #endif
+ #include "asn1.h"
+ #include "asn1_mac.h"
+ #include "asn1t.h"
+ #include "blowfish.h"
+ #include "cast.h"
+ #include "chacha.h"
+ #include "cmac.h"
+ #include "conf.h"
+ #include "cpu.h"
+ #include "curve25519.h"
+ #include "des.h"
+ #include "dtls1.h"
+ #include "hkdf.h"
+ #include "md4.h"
+ #include "md5.h"
+ #include "obj_mac.h"
+ #include "objects.h"
+ #include "opensslv.h"
+ #include "ossl_typ.h"
+ #include "pkcs12.h"
+ #include "pkcs7.h"
+ #include "pkcs8.h"
+ #include "poly1305.h"
+ #include "rand.h"
+ #include "rc4.h"
+ #include "ripemd.h"
+ #include "safestack.h"
+ #include "srtp.h"
+ #include "x509.h"
+ #include "x509v3.h"
+ EOF
+ cat > include/openssl/BoringSSL.modulemap <<EOF
+ framework module openssl {
+ umbrella header "umbrella.h"
+ textual header "arm_arch.h"
+ export *
+ module * { export * }
+ }
+ EOF
+
+ # This is a bit ridiculous, but requiring people to install Go in order to build is slightly
+ # more ridiculous IMO.
+ # TODO(jcanizales): Translate err_data_generate.go into a Bash or Ruby script.
+ cat > err_data.c <<EOF
+ /* Copyright (c) 2015, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+ /* This file was generated by err_data_generate.go. */
+
+ #include <openssl/base.h>
+ #include <openssl/err.h>
+ #include <openssl/type_check.h>
+
+
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_NONE == 1, library_values_changed_1);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_SYS == 2, library_values_changed_2);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_BN == 3, library_values_changed_3);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_RSA == 4, library_values_changed_4);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_DH == 5, library_values_changed_5);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_EVP == 6, library_values_changed_6);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_BUF == 7, library_values_changed_7);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_OBJ == 8, library_values_changed_8);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_PEM == 9, library_values_changed_9);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_DSA == 10, library_values_changed_10);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_X509 == 11, library_values_changed_11);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_ASN1 == 12, library_values_changed_12);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_CONF == 13, library_values_changed_13);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_CRYPTO == 14, library_values_changed_14);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_EC == 15, library_values_changed_15);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_SSL == 16, library_values_changed_16);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_BIO == 17, library_values_changed_17);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_PKCS7 == 18, library_values_changed_18);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_PKCS8 == 19, library_values_changed_19);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_X509V3 == 20, library_values_changed_20);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_RAND == 21, library_values_changed_21);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_ENGINE == 22, library_values_changed_22);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_OCSP == 23, library_values_changed_23);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_UI == 24, library_values_changed_24);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_COMP == 25, library_values_changed_25);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_ECDSA == 26, library_values_changed_26);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_ECDH == 27, library_values_changed_27);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_HMAC == 28, library_values_changed_28);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_DIGEST == 29, library_values_changed_29);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_CIPHER == 30, library_values_changed_30);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_HKDF == 31, library_values_changed_31);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_USER == 32, library_values_changed_32);
+ OPENSSL_COMPILE_ASSERT(ERR_NUM_LIBS == 33, library_values_changed_num);
+
+ const uint32_t kOpenSSLReasonValues[] = {
+ 0xc320838,
+ 0xc328852,
+ 0xc330861,
+ 0xc338871,
+ 0xc340880,
+ 0xc348899,
+ 0xc3508a5,
+ 0xc3588c2,
+ 0xc3608e2,
+ 0xc3688f0,
+ 0xc370900,
+ 0xc37890d,
+ 0xc38091d,
+ 0xc388928,
+ 0xc39093e,
+ 0xc39894d,
+ 0xc3a0961,
+ 0xc3a8845,
+ 0xc3b00ea,
+ 0xc3b88d4,
+ 0x10320845,
+ 0x10329513,
+ 0x1033151f,
+ 0x10339538,
+ 0x1034154b,
+ 0x10348eed,
+ 0x10350c5e,
+ 0x1035955e,
+ 0x10361573,
+ 0x10369586,
+ 0x103715a5,
+ 0x103795be,
+ 0x103815d3,
+ 0x103895f1,
+ 0x10391600,
+ 0x1039961c,
+ 0x103a1637,
+ 0x103a9646,
+ 0x103b1662,
+ 0x103b967d,
+ 0x103c1694,
+ 0x103c80ea,
+ 0x103d16a5,
+ 0x103d96b9,
+ 0x103e16d8,
+ 0x103e96e7,
+ 0x103f16fe,
+ 0x103f9711,
+ 0x10400c22,
+ 0x10409724,
+ 0x10411742,
+ 0x10419755,
+ 0x1042176f,
+ 0x1042977f,
+ 0x10431793,
+ 0x104397a9,
+ 0x104417c1,
+ 0x104497d6,
+ 0x104517ea,
+ 0x104597fc,
+ 0x104605fb,
+ 0x1046894d,
+ 0x10471811,
+ 0x10479828,
+ 0x1048183d,
+ 0x1048984b,
+ 0x10490e4f,
+ 0x14320c05,
+ 0x14328c13,
+ 0x14330c22,
+ 0x14338c34,
+ 0x143400ac,
+ 0x143480ea,
+ 0x18320083,
+ 0x18328f43,
+ 0x183300ac,
+ 0x18338f59,
+ 0x18340f6d,
+ 0x183480ea,
+ 0x18350f82,
+ 0x18358f9a,
+ 0x18360faf,
+ 0x18368fc3,
+ 0x18370fe7,
+ 0x18378ffd,
+ 0x18381011,
+ 0x18389021,
+ 0x18390a73,
+ 0x18399031,
+ 0x183a1059,
+ 0x183a907f,
+ 0x183b0c6a,
+ 0x183b90b4,
+ 0x183c10c6,
+ 0x183c90d1,
+ 0x183d10e1,
+ 0x183d90f2,
+ 0x183e1103,
+ 0x183e9115,
+ 0x183f113e,
+ 0x183f9157,
+ 0x1840116f,
+ 0x184086d3,
+ 0x184110a2,
+ 0x1841906d,
+ 0x1842108c,
+ 0x18429046,
+ 0x20321196,
+ 0x243211a2,
+ 0x24328993,
+ 0x243311b4,
+ 0x243391c1,
+ 0x243411ce,
+ 0x243491e0,
+ 0x243511ef,
+ 0x2435920c,
+ 0x24361219,
+ 0x24369227,
+ 0x24371235,
+ 0x24379243,
+ 0x2438124c,
+ 0x24389259,
+ 0x2439126c,
+ 0x28320c52,
+ 0x28328c6a,
+ 0x28330c22,
+ 0x28338c7d,
+ 0x28340c5e,
+ 0x283480ac,
+ 0x283500ea,
+ 0x2c322c30,
+ 0x2c329283,
+ 0x2c332c3e,
+ 0x2c33ac50,
+ 0x2c342c64,
+ 0x2c34ac76,
+ 0x2c352c91,
+ 0x2c35aca3,
+ 0x2c362cb6,
+ 0x2c36832d,
+ 0x2c372cc3,
+ 0x2c37acd5,
+ 0x2c382cfa,
+ 0x2c38ad11,
+ 0x2c392d1f,
+ 0x2c39ad2f,
+ 0x2c3a2d41,
+ 0x2c3aad55,
+ 0x2c3b2d66,
+ 0x2c3bad85,
+ 0x2c3c1295,
+ 0x2c3c92ab,
+ 0x2c3d2d99,
+ 0x2c3d92c4,
+ 0x2c3e2db6,
+ 0x2c3eadc4,
+ 0x2c3f2ddc,
+ 0x2c3fadf4,
+ 0x2c402e01,
+ 0x2c409196,
+ 0x2c412e12,
+ 0x2c41ae25,
+ 0x2c42116f,
+ 0x2c42ae36,
+ 0x2c430720,
+ 0x2c43ad77,
+ 0x2c442ce8,
+ 0x30320000,
+ 0x30328015,
+ 0x3033001f,
+ 0x30338038,
+ 0x3034004a,
+ 0x30348064,
+ 0x3035006b,
+ 0x30358083,
+ 0x30360094,
+ 0x303680ac,
+ 0x303700b9,
+ 0x303780c8,
+ 0x303800ea,
+ 0x303880f7,
+ 0x3039010a,
+ 0x30398125,
+ 0x303a013a,
+ 0x303a814e,
+ 0x303b0162,
+ 0x303b8173,
+ 0x303c018c,
+ 0x303c81a9,
+ 0x303d01b7,
+ 0x303d81cb,
+ 0x303e01db,
+ 0x303e81f4,
+ 0x303f0204,
+ 0x303f8217,
+ 0x30400226,
+ 0x30408232,
+ 0x30410247,
+ 0x30418257,
+ 0x3042026e,
+ 0x3042827b,
+ 0x3043028e,
+ 0x3043829d,
+ 0x304402b2,
+ 0x304482d3,
+ 0x304502e6,
+ 0x304582f9,
+ 0x30460312,
+ 0x3046832d,
+ 0x3047034a,
+ 0x30478363,
+ 0x30480371,
+ 0x30488382,
+ 0x30490391,
+ 0x304983a9,
+ 0x304a03bb,
+ 0x304a83cf,
+ 0x304b03ee,
+ 0x304b8401,
+ 0x304c040c,
+ 0x304c841d,
+ 0x304d0429,
+ 0x304d843f,
+ 0x304e044d,
+ 0x304e8463,
+ 0x304f0475,
+ 0x304f8487,
+ 0x3050049a,
+ 0x305084ad,
+ 0x305104be,
+ 0x305184ce,
+ 0x305204e6,
+ 0x305284fb,
+ 0x30530513,
+ 0x30538527,
+ 0x3054053f,
+ 0x30548558,
+ 0x30550571,
+ 0x3055858e,
+ 0x30560599,
+ 0x305685b1,
+ 0x305705c1,
+ 0x305785d2,
+ 0x305805e5,
+ 0x305885fb,
+ 0x30590604,
+ 0x30598619,
+ 0x305a062c,
+ 0x305a863b,
+ 0x305b065b,
+ 0x305b866a,
+ 0x305c068b,
+ 0x305c86a7,
+ 0x305d06b3,
+ 0x305d86d3,
+ 0x305e06ef,
+ 0x305e8700,
+ 0x305f0716,
+ 0x305f8720,
+ 0x34320b63,
+ 0x34328b77,
+ 0x34330b94,
+ 0x34338ba7,
+ 0x34340bb6,
+ 0x34348bef,
+ 0x34350bd3,
+ 0x3c320083,
+ 0x3c328ca7,
+ 0x3c330cc0,
+ 0x3c338cdb,
+ 0x3c340cf8,
+ 0x3c348d22,
+ 0x3c350d3d,
+ 0x3c358d63,
+ 0x3c360d7c,
+ 0x3c368d94,
+ 0x3c370da5,
+ 0x3c378db3,
+ 0x3c380dc0,
+ 0x3c388dd4,
+ 0x3c390c6a,
+ 0x3c398de8,
+ 0x3c3a0dfc,
+ 0x3c3a890d,
+ 0x3c3b0e0c,
+ 0x3c3b8e27,
+ 0x3c3c0e39,
+ 0x3c3c8e6c,
+ 0x3c3d0e76,
+ 0x3c3d8e8a,
+ 0x3c3e0e98,
+ 0x3c3e8ebd,
+ 0x3c3f0c93,
+ 0x3c3f8ea6,
+ 0x3c4000ac,
+ 0x3c4080ea,
+ 0x3c410d13,
+ 0x3c418d52,
+ 0x3c420e4f,
+ 0x403218a4,
+ 0x403298ba,
+ 0x403318e8,
+ 0x403398f2,
+ 0x40341909,
+ 0x40349927,
+ 0x40351937,
+ 0x40359949,
+ 0x40361956,
+ 0x40369962,
+ 0x40371977,
+ 0x40379989,
+ 0x40381994,
+ 0x403899a6,
+ 0x40390eed,
+ 0x403999b6,
+ 0x403a19c9,
+ 0x403a99ea,
+ 0x403b19fb,
+ 0x403b9a0b,
+ 0x403c0064,
+ 0x403c8083,
+ 0x403d1a8f,
+ 0x403d9aa5,
+ 0x403e1ab4,
+ 0x403e9aec,
+ 0x403f1b06,
+ 0x403f9b14,
+ 0x40401b29,
+ 0x40409b3d,
+ 0x40411b5a,
+ 0x40419b75,
+ 0x40421b8e,
+ 0x40429ba1,
+ 0x40431bb5,
+ 0x40439bcd,
+ 0x40441be4,
+ 0x404480ac,
+ 0x40451bf9,
+ 0x40459c0b,
+ 0x40461c2f,
+ 0x40469c4f,
+ 0x40471c5d,
+ 0x40479c84,
+ 0x40481cc1,
+ 0x40489cda,
+ 0x40491cf1,
+ 0x40499d0b,
+ 0x404a1d22,
+ 0x404a9d40,
+ 0x404b1d58,
+ 0x404b9d6f,
+ 0x404c1d85,
+ 0x404c9d97,
+ 0x404d1db8,
+ 0x404d9dda,
+ 0x404e1dee,
+ 0x404e9dfb,
+ 0x404f1e28,
+ 0x404f9e51,
+ 0x40501e8c,
+ 0x40509ea0,
+ 0x40511ebb,
+ 0x40521ecb,
+ 0x40529eef,
+ 0x40531f07,
+ 0x40539f1a,
+ 0x40541f2f,
+ 0x40549f52,
+ 0x40551f60,
+ 0x40559f7d,
+ 0x40561f8a,
+ 0x40569fa3,
+ 0x40571fbb,
+ 0x40579fce,
+ 0x40581fe3,
+ 0x4058a00a,
+ 0x40592039,
+ 0x4059a066,
+ 0x405a207a,
+ 0x405aa08a,
+ 0x405b20a2,
+ 0x405ba0b3,
+ 0x405c20c6,
+ 0x405ca105,
+ 0x405d2112,
+ 0x405da129,
+ 0x405e2167,
+ 0x405e8ab1,
+ 0x405f2188,
+ 0x405fa195,
+ 0x406021a3,
+ 0x4060a1c5,
+ 0x40612209,
+ 0x4061a241,
+ 0x40622258,
+ 0x4062a269,
+ 0x4063227a,
+ 0x4063a28f,
+ 0x406422a6,
+ 0x4064a2d2,
+ 0x406522ed,
+ 0x4065a304,
+ 0x4066231c,
+ 0x4066a346,
+ 0x40672371,
+ 0x4067a392,
+ 0x406823b9,
+ 0x4068a3da,
+ 0x4069240c,
+ 0x4069a43a,
+ 0x406a245b,
+ 0x406aa47b,
+ 0x406b2603,
+ 0x406ba626,
+ 0x406c263c,
+ 0x406ca8b7,
+ 0x406d28e6,
+ 0x406da90e,
+ 0x406e293c,
+ 0x406ea989,
+ 0x406f29a8,
+ 0x406fa9e0,
+ 0x407029f3,
+ 0x4070aa10,
+ 0x40710800,
+ 0x4071aa22,
+ 0x40722a35,
+ 0x4072aa4e,
+ 0x40732a66,
+ 0x40739482,
+ 0x40742a7a,
+ 0x4074aa94,
+ 0x40752aa5,
+ 0x4075aab9,
+ 0x40762ac7,
+ 0x40769259,
+ 0x40772aec,
+ 0x4077ab0e,
+ 0x40782b29,
+ 0x4078ab62,
+ 0x40792b79,
+ 0x4079ab8f,
+ 0x407a2b9b,
+ 0x407aabae,
+ 0x407b2bc3,
+ 0x407babd5,
+ 0x407c2c06,
+ 0x407cac0f,
+ 0x407d23f5,
+ 0x407d9e61,
+ 0x407e2b3e,
+ 0x407ea01a,
+ 0x407f1c71,
+ 0x407f9a31,
+ 0x40801e38,
+ 0x40809c99,
+ 0x40811edd,
+ 0x40819e12,
+ 0x40822927,
+ 0x40829a17,
+ 0x40831ff5,
+ 0x4083a2b7,
+ 0x40841cad,
+ 0x4084a052,
+ 0x408520d7,
+ 0x4085a1ed,
+ 0x40862149,
+ 0x40869e7b,
+ 0x4087296d,
+ 0x4087a21e,
+ 0x40881a78,
+ 0x4088a3a5,
+ 0x40891ac7,
+ 0x40899a54,
+ 0x408a265c,
+ 0x408a9862,
+ 0x408b2bea,
+ 0x408ba9bd,
+ 0x408c20e7,
+ 0x408c987e,
+ 0x41f4252e,
+ 0x41f925c0,
+ 0x41fe24b3,
+ 0x41fea6a8,
+ 0x41ff2799,
+ 0x42032547,
+ 0x42082569,
+ 0x4208a5a5,
+ 0x42092497,
+ 0x4209a5df,
+ 0x420a24ee,
+ 0x420aa4ce,
+ 0x420b250e,
+ 0x420ba587,
+ 0x420c27b5,
+ 0x420ca675,
+ 0x420d268f,
+ 0x420da6c6,
+ 0x421226e0,
+ 0x4217277c,
+ 0x4217a722,
+ 0x421c2744,
+ 0x421f26ff,
+ 0x422127cc,
+ 0x4226275f,
+ 0x422b289b,
+ 0x422ba849,
+ 0x422c2883,
+ 0x422ca808,
+ 0x422d27e7,
+ 0x422da868,
+ 0x422e282e,
+ 0x422ea954,
+ 0x4432072b,
+ 0x4432873a,
+ 0x44330746,
+ 0x44338754,
+ 0x44340767,
+ 0x44348778,
+ 0x4435077f,
+ 0x44358789,
+ 0x4436079c,
+ 0x443687b2,
+ 0x443707c4,
+ 0x443787d1,
+ 0x443807e0,
+ 0x443887e8,
+ 0x44390800,
+ 0x4439880e,
+ 0x443a0821,
+ 0x48321283,
+ 0x48329295,
+ 0x483312ab,
+ 0x483392c4,
+ 0x4c3212e9,
+ 0x4c3292f9,
+ 0x4c33130c,
+ 0x4c33932c,
+ 0x4c3400ac,
+ 0x4c3480ea,
+ 0x4c351338,
+ 0x4c359346,
+ 0x4c361362,
+ 0x4c369375,
+ 0x4c371384,
+ 0x4c379392,
+ 0x4c3813a7,
+ 0x4c3893b3,
+ 0x4c3913d3,
+ 0x4c3993fd,
+ 0x4c3a1416,
+ 0x4c3a942f,
+ 0x4c3b05fb,
+ 0x4c3b9448,
+ 0x4c3c145a,
+ 0x4c3c9469,
+ 0x4c3d1482,
+ 0x4c3d8c45,
+ 0x4c3e14db,
+ 0x4c3e9491,
+ 0x4c3f14fd,
+ 0x4c3f9259,
+ 0x4c4014a7,
+ 0x4c4092d5,
+ 0x4c4114cb,
+ 0x50322e48,
+ 0x5032ae57,
+ 0x50332e62,
+ 0x5033ae72,
+ 0x50342e8b,
+ 0x5034aea5,
+ 0x50352eb3,
+ 0x5035aec9,
+ 0x50362edb,
+ 0x5036aef1,
+ 0x50372f0a,
+ 0x5037af1d,
+ 0x50382f35,
+ 0x5038af46,
+ 0x50392f5b,
+ 0x5039af6f,
+ 0x503a2f8f,
+ 0x503aafa5,
+ 0x503b2fbd,
+ 0x503bafcf,
+ 0x503c2feb,
+ 0x503cb002,
+ 0x503d301b,
+ 0x503db031,
+ 0x503e303e,
+ 0x503eb054,
+ 0x503f3066,
+ 0x503f8382,
+ 0x50403079,
+ 0x5040b089,
+ 0x504130a3,
+ 0x5041b0b2,
+ 0x504230cc,
+ 0x5042b0e9,
+ 0x504330f9,
+ 0x5043b109,
+ 0x50443118,
+ 0x5044843f,
+ 0x5045312c,
+ 0x5045b14a,
+ 0x5046315d,
+ 0x5046b173,
+ 0x50473185,
+ 0x5047b19a,
+ 0x504831c0,
+ 0x5048b1ce,
+ 0x504931e1,
+ 0x5049b1f6,
+ 0x504a320c,
+ 0x504ab21c,
+ 0x504b323c,
+ 0x504bb24f,
+ 0x504c3272,
+ 0x504cb2a0,
+ 0x504d32b2,
+ 0x504db2cf,
+ 0x504e32ea,
+ 0x504eb306,
+ 0x504f3318,
+ 0x504fb32f,
+ 0x5050333e,
+ 0x505086ef,
+ 0x50513351,
+ 0x58320f2b,
+ 0x68320eed,
+ 0x68328c6a,
+ 0x68330c7d,
+ 0x68338efb,
+ 0x68340f0b,
+ 0x683480ea,
+ 0x6c320ec9,
+ 0x6c328c34,
+ 0x6c330ed4,
+ 0x74320a19,
+ 0x743280ac,
+ 0x74330c45,
+ 0x7832097e,
+ 0x78328993,
+ 0x7833099f,
+ 0x78338083,
+ 0x783409ae,
+ 0x783489c3,
+ 0x783509e2,
+ 0x78358a04,
+ 0x78360a19,
+ 0x78368a2f,
+ 0x78370a3f,
+ 0x78378a60,
+ 0x78380a73,
+ 0x78388a85,
+ 0x78390a92,
+ 0x78398ab1,
+ 0x783a0ac6,
+ 0x783a8ad4,
+ 0x783b0ade,
+ 0x783b8af2,
+ 0x783c0b09,
+ 0x783c8b1e,
+ 0x783d0b35,
+ 0x783d8b4a,
+ 0x783e0aa0,
+ 0x783e8a52,
+ 0x7c321185,
+ };
+
+ const size_t kOpenSSLReasonValuesLen = sizeof(kOpenSSLReasonValues) / sizeof(kOpenSSLReasonValues[0]);
+
+ const char kOpenSSLReasonStringData[] =
+ "ASN1_LENGTH_MISMATCH\\0"
+ "AUX_ERROR\\0"
+ "BAD_GET_ASN1_OBJECT_CALL\\0"
+ "BAD_OBJECT_HEADER\\0"
+ "BMPSTRING_IS_WRONG_LENGTH\\0"
+ "BN_LIB\\0"
+ "BOOLEAN_IS_WRONG_LENGTH\\0"
+ "BUFFER_TOO_SMALL\\0"
+ "CONTEXT_NOT_INITIALISED\\0"
+ "DECODE_ERROR\\0"
+ "DEPTH_EXCEEDED\\0"
+ "DIGEST_AND_KEY_TYPE_NOT_SUPPORTED\\0"
+ "ENCODE_ERROR\\0"
+ "ERROR_GETTING_TIME\\0"
+ "EXPECTING_AN_ASN1_SEQUENCE\\0"
+ "EXPECTING_AN_INTEGER\\0"
+ "EXPECTING_AN_OBJECT\\0"
+ "EXPECTING_A_BOOLEAN\\0"
+ "EXPECTING_A_TIME\\0"
+ "EXPLICIT_LENGTH_MISMATCH\\0"
+ "EXPLICIT_TAG_NOT_CONSTRUCTED\\0"
+ "FIELD_MISSING\\0"
+ "FIRST_NUM_TOO_LARGE\\0"
+ "HEADER_TOO_LONG\\0"
+ "ILLEGAL_BITSTRING_FORMAT\\0"
+ "ILLEGAL_BOOLEAN\\0"
+ "ILLEGAL_CHARACTERS\\0"
+ "ILLEGAL_FORMAT\\0"
+ "ILLEGAL_HEX\\0"
+ "ILLEGAL_IMPLICIT_TAG\\0"
+ "ILLEGAL_INTEGER\\0"
+ "ILLEGAL_NESTED_TAGGING\\0"
+ "ILLEGAL_NULL\\0"
+ "ILLEGAL_NULL_VALUE\\0"
+ "ILLEGAL_OBJECT\\0"
+ "ILLEGAL_OPTIONAL_ANY\\0"
+ "ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE\\0"
+ "ILLEGAL_TAGGED_ANY\\0"
+ "ILLEGAL_TIME_VALUE\\0"
+ "INTEGER_NOT_ASCII_FORMAT\\0"
+ "INTEGER_TOO_LARGE_FOR_LONG\\0"
+ "INVALID_BIT_STRING_BITS_LEFT\\0"
+ "INVALID_BMPSTRING_LENGTH\\0"
+ "INVALID_DIGIT\\0"
+ "INVALID_MODIFIER\\0"
+ "INVALID_NUMBER\\0"
+ "INVALID_OBJECT_ENCODING\\0"
+ "INVALID_SEPARATOR\\0"
+ "INVALID_TIME_FORMAT\\0"
+ "INVALID_UNIVERSALSTRING_LENGTH\\0"
+ "INVALID_UTF8STRING\\0"
+ "LIST_ERROR\\0"
+ "MISSING_ASN1_EOS\\0"
+ "MISSING_EOC\\0"
+ "MISSING_SECOND_NUMBER\\0"
+ "MISSING_VALUE\\0"
+ "MSTRING_NOT_UNIVERSAL\\0"
+ "MSTRING_WRONG_TAG\\0"
+ "NESTED_ASN1_ERROR\\0"
+ "NESTED_ASN1_STRING\\0"
+ "NON_HEX_CHARACTERS\\0"
+ "NOT_ASCII_FORMAT\\0"
+ "NOT_ENOUGH_DATA\\0"
+ "NO_MATCHING_CHOICE_TYPE\\0"
+ "NULL_IS_WRONG_LENGTH\\0"
+ "OBJECT_NOT_ASCII_FORMAT\\0"
+ "ODD_NUMBER_OF_CHARS\\0"
+ "SECOND_NUMBER_TOO_LARGE\\0"
+ "SEQUENCE_LENGTH_MISMATCH\\0"
+ "SEQUENCE_NOT_CONSTRUCTED\\0"
+ "SEQUENCE_OR_SET_NEEDS_CONFIG\\0"
+ "SHORT_LINE\\0"
+ "STREAMING_NOT_SUPPORTED\\0"
+ "STRING_TOO_LONG\\0"
+ "STRING_TOO_SHORT\\0"
+ "TAG_VALUE_TOO_HIGH\\0"
+ "TIME_NOT_ASCII_FORMAT\\0"
+ "TOO_LONG\\0"
+ "TYPE_NOT_CONSTRUCTED\\0"
+ "TYPE_NOT_PRIMITIVE\\0"
+ "UNEXPECTED_EOC\\0"
+ "UNIVERSALSTRING_IS_WRONG_LENGTH\\0"
+ "UNKNOWN_FORMAT\\0"
+ "UNKNOWN_MESSAGE_DIGEST_ALGORITHM\\0"
+ "UNKNOWN_SIGNATURE_ALGORITHM\\0"
+ "UNKNOWN_TAG\\0"
+ "UNSUPPORTED_ANY_DEFINED_BY_TYPE\\0"
+ "UNSUPPORTED_PUBLIC_KEY_TYPE\\0"
+ "UNSUPPORTED_TYPE\\0"
+ "WRONG_PUBLIC_KEY_TYPE\\0"
+ "WRONG_TAG\\0"
+ "WRONG_TYPE\\0"
+ "BAD_FOPEN_MODE\\0"
+ "BROKEN_PIPE\\0"
+ "CONNECT_ERROR\\0"
+ "ERROR_SETTING_NBIO\\0"
+ "INVALID_ARGUMENT\\0"
+ "IN_USE\\0"
+ "KEEPALIVE\\0"
+ "NBIO_CONNECT_ERROR\\0"
+ "NO_HOSTNAME_SPECIFIED\\0"
+ "NO_PORT_SPECIFIED\\0"
+ "NO_SUCH_FILE\\0"
+ "NULL_PARAMETER\\0"
+ "SYS_LIB\\0"
+ "UNABLE_TO_CREATE_SOCKET\\0"
+ "UNINITIALIZED\\0"
+ "UNSUPPORTED_METHOD\\0"
+ "WRITE_TO_READ_ONLY_BIO\\0"
+ "ARG2_LT_ARG3\\0"
+ "BAD_ENCODING\\0"
+ "BAD_RECIPROCAL\\0"
+ "BIGNUM_TOO_LONG\\0"
+ "BITS_TOO_SMALL\\0"
+ "CALLED_WITH_EVEN_MODULUS\\0"
+ "DIV_BY_ZERO\\0"
+ "EXPAND_ON_STATIC_BIGNUM_DATA\\0"
+ "INPUT_NOT_REDUCED\\0"
+ "INVALID_INPUT\\0"
+ "INVALID_RANGE\\0"
+ "NEGATIVE_NUMBER\\0"
+ "NOT_A_SQUARE\\0"
+ "NOT_INITIALIZED\\0"
+ "NO_INVERSE\\0"
+ "PRIVATE_KEY_TOO_LARGE\\0"
+ "P_IS_NOT_PRIME\\0"
+ "TOO_MANY_ITERATIONS\\0"
+ "TOO_MANY_TEMPORARY_VARIABLES\\0"
+ "AES_KEY_SETUP_FAILED\\0"
+ "BAD_DECRYPT\\0"
+ "BAD_KEY_LENGTH\\0"
+ "CTRL_NOT_IMPLEMENTED\\0"
+ "CTRL_OPERATION_NOT_IMPLEMENTED\\0"
+ "DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH\\0"
+ "INITIALIZATION_ERROR\\0"
+ "INPUT_NOT_INITIALIZED\\0"
+ "INVALID_AD_SIZE\\0"
+ "INVALID_KEY_LENGTH\\0"
+ "INVALID_NONCE\\0"
+ "INVALID_NONCE_SIZE\\0"
+ "INVALID_OPERATION\\0"
+ "IV_TOO_LARGE\\0"
+ "NO_CIPHER_SET\\0"
+ "NO_DIRECTION_SET\\0"
+ "OUTPUT_ALIASES_INPUT\\0"
+ "TAG_TOO_LARGE\\0"
+ "TOO_LARGE\\0"
+ "UNSUPPORTED_AD_SIZE\\0"
+ "UNSUPPORTED_INPUT_SIZE\\0"
+ "UNSUPPORTED_KEY_SIZE\\0"
+ "UNSUPPORTED_NONCE_SIZE\\0"
+ "UNSUPPORTED_TAG_SIZE\\0"
+ "WRONG_FINAL_BLOCK_LENGTH\\0"
+ "LIST_CANNOT_BE_NULL\\0"
+ "MISSING_CLOSE_SQUARE_BRACKET\\0"
+ "MISSING_EQUAL_SIGN\\0"
+ "NO_CLOSE_BRACE\\0"
+ "UNABLE_TO_CREATE_NEW_SECTION\\0"
+ "VARIABLE_EXPANSION_TOO_LONG\\0"
+ "VARIABLE_HAS_NO_VALUE\\0"
+ "BAD_GENERATOR\\0"
+ "INVALID_PUBKEY\\0"
+ "MODULUS_TOO_LARGE\\0"
+ "NO_PRIVATE_VALUE\\0"
+ "UNKNOWN_HASH\\0"
+ "BAD_Q_VALUE\\0"
+ "BAD_VERSION\\0"
+ "MISSING_PARAMETERS\\0"
+ "NEED_NEW_SETUP_VALUES\\0"
+ "BIGNUM_OUT_OF_RANGE\\0"
+ "COORDINATES_OUT_OF_RANGE\\0"
+ "D2I_ECPKPARAMETERS_FAILURE\\0"
+ "EC_GROUP_NEW_BY_NAME_FAILURE\\0"
+ "GROUP2PKPARAMETERS_FAILURE\\0"
+ "GROUP_MISMATCH\\0"
+ "I2D_ECPKPARAMETERS_FAILURE\\0"
+ "INCOMPATIBLE_OBJECTS\\0"
+ "INVALID_COFACTOR\\0"
+ "INVALID_COMPRESSED_POINT\\0"
+ "INVALID_COMPRESSION_BIT\\0"
+ "INVALID_ENCODING\\0"
+ "INVALID_FIELD\\0"
+ "INVALID_FORM\\0"
+ "INVALID_GROUP_ORDER\\0"
+ "INVALID_PRIVATE_KEY\\0"
+ "MISSING_PRIVATE_KEY\\0"
+ "NON_NAMED_CURVE\\0"
+ "PKPARAMETERS2GROUP_FAILURE\\0"
+ "POINT_AT_INFINITY\\0"
+ "POINT_IS_NOT_ON_CURVE\\0"
+ "PUBLIC_KEY_VALIDATION_FAILED\\0"
+ "SLOT_FULL\\0"
+ "UNDEFINED_GENERATOR\\0"
+ "UNKNOWN_GROUP\\0"
+ "UNKNOWN_ORDER\\0"
+ "WRONG_CURVE_PARAMETERS\\0"
+ "WRONG_ORDER\\0"
+ "KDF_FAILED\\0"
+ "POINT_ARITHMETIC_FAILURE\\0"
+ "BAD_SIGNATURE\\0"
+ "NOT_IMPLEMENTED\\0"
+ "RANDOM_NUMBER_GENERATION_FAILED\\0"
+ "OPERATION_NOT_SUPPORTED\\0"
+ "COMMAND_NOT_SUPPORTED\\0"
+ "DIFFERENT_KEY_TYPES\\0"
+ "DIFFERENT_PARAMETERS\\0"
+ "EXPECTING_AN_EC_KEY_KEY\\0"
+ "EXPECTING_AN_RSA_KEY\\0"
+ "EXPECTING_A_DSA_KEY\\0"
+ "ILLEGAL_OR_UNSUPPORTED_PADDING_MODE\\0"
+ "INVALID_DIGEST_LENGTH\\0"
+ "INVALID_DIGEST_TYPE\\0"
+ "INVALID_KEYBITS\\0"
+ "INVALID_MGF1_MD\\0"
+ "INVALID_PADDING_MODE\\0"
+ "INVALID_PARAMETERS\\0"
+ "INVALID_PSS_SALTLEN\\0"
+ "INVALID_SIGNATURE\\0"
+ "KEYS_NOT_SET\\0"
+ "MEMORY_LIMIT_EXCEEDED\\0"
+ "NOT_A_PRIVATE_KEY\\0"
+ "NO_DEFAULT_DIGEST\\0"
+ "NO_KEY_SET\\0"
+ "NO_MDC2_SUPPORT\\0"
+ "NO_NID_FOR_CURVE\\0"
+ "NO_OPERATION_SET\\0"
+ "NO_PARAMETERS_SET\\0"
+ "OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\\0"
+ "OPERATON_NOT_INITIALIZED\\0"
+ "UNKNOWN_PUBLIC_KEY_TYPE\\0"
+ "UNSUPPORTED_ALGORITHM\\0"
+ "OUTPUT_TOO_LARGE\\0"
+ "UNKNOWN_NID\\0"
+ "BAD_BASE64_DECODE\\0"
+ "BAD_END_LINE\\0"
+ "BAD_IV_CHARS\\0"
+ "BAD_PASSWORD_READ\\0"
+ "CIPHER_IS_NULL\\0"
+ "ERROR_CONVERTING_PRIVATE_KEY\\0"
+ "NOT_DEK_INFO\\0"
+ "NOT_ENCRYPTED\\0"
+ "NOT_PROC_TYPE\\0"
+ "NO_START_LINE\\0"
+ "READ_KEY\\0"
+ "SHORT_HEADER\\0"
+ "UNSUPPORTED_CIPHER\\0"
+ "UNSUPPORTED_ENCRYPTION\\0"
+ "BAD_PKCS7_VERSION\\0"
+ "NOT_PKCS7_SIGNED_DATA\\0"
+ "NO_CERTIFICATES_INCLUDED\\0"
+ "NO_CRLS_INCLUDED\\0"
+ "BAD_ITERATION_COUNT\\0"
+ "BAD_PKCS12_DATA\\0"
+ "BAD_PKCS12_VERSION\\0"
+ "CIPHER_HAS_NO_OBJECT_IDENTIFIER\\0"
+ "CRYPT_ERROR\\0"
+ "ENCRYPT_ERROR\\0"
+ "ERROR_SETTING_CIPHER_PARAMS\\0"
+ "INCORRECT_PASSWORD\\0"
+ "KEYGEN_FAILURE\\0"
+ "KEY_GEN_ERROR\\0"
+ "METHOD_NOT_SUPPORTED\\0"
+ "MISSING_MAC\\0"
+ "MULTIPLE_PRIVATE_KEYS_IN_PKCS12\\0"
+ "PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED\\0"
+ "PKCS12_TOO_DEEPLY_NESTED\\0"
+ "PRIVATE_KEY_DECODE_ERROR\\0"
+ "PRIVATE_KEY_ENCODE_ERROR\\0"
+ "UNKNOWN_ALGORITHM\\0"
+ "UNKNOWN_CIPHER\\0"
+ "UNKNOWN_CIPHER_ALGORITHM\\0"
+ "UNKNOWN_DIGEST\\0"
+ "UNSUPPORTED_KEYLENGTH\\0"
+ "UNSUPPORTED_KEY_DERIVATION_FUNCTION\\0"
+ "UNSUPPORTED_PRF\\0"
+ "UNSUPPORTED_PRIVATE_KEY_ALGORITHM\\0"
+ "UNSUPPORTED_SALT_TYPE\\0"
+ "BAD_E_VALUE\\0"
+ "BAD_FIXED_HEADER_DECRYPT\\0"
+ "BAD_PAD_BYTE_COUNT\\0"
+ "BAD_RSA_PARAMETERS\\0"
+ "BLOCK_TYPE_IS_NOT_01\\0"
+ "BN_NOT_INITIALIZED\\0"
+ "CANNOT_RECOVER_MULTI_PRIME_KEY\\0"
+ "CRT_PARAMS_ALREADY_GIVEN\\0"
+ "CRT_VALUES_INCORRECT\\0"
+ "DATA_LEN_NOT_EQUAL_TO_MOD_LEN\\0"
+ "DATA_TOO_LARGE\\0"
+ "DATA_TOO_LARGE_FOR_KEY_SIZE\\0"
+ "DATA_TOO_LARGE_FOR_MODULUS\\0"
+ "DATA_TOO_SMALL\\0"
+ "DATA_TOO_SMALL_FOR_KEY_SIZE\\0"
+ "DIGEST_TOO_BIG_FOR_RSA_KEY\\0"
+ "D_E_NOT_CONGRUENT_TO_1\\0"
+ "EMPTY_PUBLIC_KEY\\0"
+ "FIRST_OCTET_INVALID\\0"
+ "INCONSISTENT_SET_OF_CRT_VALUES\\0"
+ "INTERNAL_ERROR\\0"
+ "INVALID_MESSAGE_LENGTH\\0"
+ "KEY_SIZE_TOO_SMALL\\0"
+ "LAST_OCTET_INVALID\\0"
+ "MUST_HAVE_AT_LEAST_TWO_PRIMES\\0"
+ "NO_PUBLIC_EXPONENT\\0"
+ "NULL_BEFORE_BLOCK_MISSING\\0"
+ "N_NOT_EQUAL_P_Q\\0"
+ "OAEP_DECODING_ERROR\\0"
+ "ONLY_ONE_OF_P_Q_GIVEN\\0"
+ "OUTPUT_BUFFER_TOO_SMALL\\0"
+ "PADDING_CHECK_FAILED\\0"
+ "PKCS_DECODING_ERROR\\0"
+ "SLEN_CHECK_FAILED\\0"
+ "SLEN_RECOVERY_FAILED\\0"
+ "UNKNOWN_ALGORITHM_TYPE\\0"
+ "UNKNOWN_PADDING_TYPE\\0"
+ "VALUE_MISSING\\0"
+ "WRONG_SIGNATURE_LENGTH\\0"
+ "ALPN_MISMATCH_ON_EARLY_DATA\\0"
+ "APPLICATION_DATA_INSTEAD_OF_HANDSHAKE\\0"
+ "APP_DATA_IN_HANDSHAKE\\0"
+ "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\\0"
+ "BAD_ALERT\\0"
+ "BAD_CHANGE_CIPHER_SPEC\\0"
+ "BAD_DATA_RETURNED_BY_CALLBACK\\0"
+ "BAD_DH_P_LENGTH\\0"
+ "BAD_DIGEST_LENGTH\\0"
+ "BAD_ECC_CERT\\0"
+ "BAD_ECPOINT\\0"
+ "BAD_HANDSHAKE_RECORD\\0"
+ "BAD_HELLO_REQUEST\\0"
+ "BAD_LENGTH\\0"
+ "BAD_PACKET_LENGTH\\0"
+ "BAD_RSA_ENCRYPT\\0"
+ "BAD_SRTP_MKI_VALUE\\0"
+ "BAD_SRTP_PROTECTION_PROFILE_LIST\\0"
+ "BAD_SSL_FILETYPE\\0"
+ "BAD_WRITE_RETRY\\0"
+ "BIO_NOT_SET\\0"
+ "BLOCK_CIPHER_PAD_IS_WRONG\\0"
+ "BUFFERED_MESSAGES_ON_CIPHER_CHANGE\\0"
+ "CANNOT_HAVE_BOTH_PRIVKEY_AND_METHOD\\0"
+ "CANNOT_PARSE_LEAF_CERT\\0"
+ "CA_DN_LENGTH_MISMATCH\\0"
+ "CA_DN_TOO_LONG\\0"
+ "CCS_RECEIVED_EARLY\\0"
+ "CERTIFICATE_AND_PRIVATE_KEY_MISMATCH\\0"
+ "CERTIFICATE_VERIFY_FAILED\\0"
+ "CERT_CB_ERROR\\0"
+ "CERT_LENGTH_MISMATCH\\0"
+ "CHANNEL_ID_NOT_P256\\0"
+ "CHANNEL_ID_SIGNATURE_INVALID\\0"
+ "CIPHER_OR_HASH_UNAVAILABLE\\0"
+ "CLIENTHELLO_PARSE_FAILED\\0"
+ "CLIENTHELLO_TLSEXT\\0"
+ "CONNECTION_REJECTED\\0"
+ "CONNECTION_TYPE_NOT_SET\\0"
+ "CUSTOM_EXTENSION_ERROR\\0"
+ "DATA_LENGTH_TOO_LONG\\0"
+ "DECRYPTION_FAILED\\0"
+ "DECRYPTION_FAILED_OR_BAD_RECORD_MAC\\0"
+ "DH_PUBLIC_VALUE_LENGTH_IS_WRONG\\0"
+ "DH_P_TOO_LONG\\0"
+ "DIGEST_CHECK_FAILED\\0"
+ "DOWNGRADE_DETECTED\\0"
+ "DTLS_MESSAGE_TOO_BIG\\0"
+ "DUPLICATE_EXTENSION\\0"
+ "DUPLICATE_KEY_SHARE\\0"
+ "ECC_CERT_NOT_FOR_SIGNING\\0"
+ "EMS_STATE_INCONSISTENT\\0"
+ "ENCRYPTED_LENGTH_TOO_LONG\\0"
+ "ERROR_ADDING_EXTENSION\\0"
+ "ERROR_IN_RECEIVED_CIPHER_LIST\\0"
+ "ERROR_PARSING_EXTENSION\\0"
+ "EXCESSIVE_MESSAGE_SIZE\\0"
+ "EXTRA_DATA_IN_MESSAGE\\0"
+ "FRAGMENT_MISMATCH\\0"
+ "GOT_NEXT_PROTO_WITHOUT_EXTENSION\\0"
+ "HANDSHAKE_FAILURE_ON_CLIENT_HELLO\\0"
+ "HTTPS_PROXY_REQUEST\\0"
+ "HTTP_REQUEST\\0"
+ "INAPPROPRIATE_FALLBACK\\0"
+ "INVALID_ALPN_PROTOCOL\\0"
+ "INVALID_COMMAND\\0"
+ "INVALID_COMPRESSION_LIST\\0"
+ "INVALID_MESSAGE\\0"
+ "INVALID_OUTER_RECORD_TYPE\\0"
+ "INVALID_SCT_LIST\\0"
+ "INVALID_SSL_SESSION\\0"
+ "INVALID_TICKET_KEYS_LENGTH\\0"
+ "LENGTH_MISMATCH\\0"
+ "MISSING_EXTENSION\\0"
+ "MISSING_KEY_SHARE\\0"
+ "MISSING_RSA_CERTIFICATE\\0"
+ "MISSING_TMP_DH_KEY\\0"
+ "MISSING_TMP_ECDH_KEY\\0"
+ "MIXED_SPECIAL_OPERATOR_WITH_GROUPS\\0"
+ "MTU_TOO_SMALL\\0"
+ "NEGOTIATED_BOTH_NPN_AND_ALPN\\0"
+ "NESTED_GROUP\\0"
+ "NO_CERTIFICATES_RETURNED\\0"
+ "NO_CERTIFICATE_ASSIGNED\\0"
+ "NO_CERTIFICATE_SET\\0"
+ "NO_CIPHERS_AVAILABLE\\0"
+ "NO_CIPHERS_PASSED\\0"
+ "NO_CIPHERS_SPECIFIED\\0"
+ "NO_CIPHER_MATCH\\0"
+ "NO_COMMON_SIGNATURE_ALGORITHMS\\0"
+ "NO_COMPRESSION_SPECIFIED\\0"
+ "NO_GROUPS_SPECIFIED\\0"
+ "NO_METHOD_SPECIFIED\\0"
+ "NO_P256_SUPPORT\\0"
+ "NO_PRIVATE_KEY_ASSIGNED\\0"
+ "NO_RENEGOTIATION\\0"
+ "NO_REQUIRED_DIGEST\\0"
+ "NO_SHARED_CIPHER\\0"
+ "NO_SHARED_GROUP\\0"
+ "NO_SUPPORTED_VERSIONS_ENABLED\\0"
+ "NULL_SSL_CTX\\0"
+ "NULL_SSL_METHOD_PASSED\\0"
+ "OLD_SESSION_CIPHER_NOT_RETURNED\\0"
+ "OLD_SESSION_PRF_HASH_MISMATCH\\0"
+ "OLD_SESSION_VERSION_NOT_RETURNED\\0"
+ "PARSE_TLSEXT\\0"
+ "PATH_TOO_LONG\\0"
+ "PEER_DID_NOT_RETURN_A_CERTIFICATE\\0"
+ "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\\0"
+ "PRE_SHARED_KEY_MUST_BE_LAST\\0"
+ "PROTOCOL_IS_SHUTDOWN\\0"
+ "PSK_IDENTITY_BINDER_COUNT_MISMATCH\\0"
+ "PSK_IDENTITY_NOT_FOUND\\0"
+ "PSK_NO_CLIENT_CB\\0"
+ "PSK_NO_SERVER_CB\\0"
+ "READ_TIMEOUT_EXPIRED\\0"
+ "RECORD_LENGTH_MISMATCH\\0"
+ "RECORD_TOO_LARGE\\0"
+ "RENEGOTIATION_EMS_MISMATCH\\0"
+ "RENEGOTIATION_ENCODING_ERR\\0"
+ "RENEGOTIATION_MISMATCH\\0"
+ "REQUIRED_CIPHER_MISSING\\0"
+ "RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION\\0"
+ "RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION\\0"
+ "SCSV_RECEIVED_WHEN_RENEGOTIATING\\0"
+ "SERVERHELLO_TLSEXT\\0"
+ "SERVER_CERT_CHANGED\\0"
+ "SESSION_ID_CONTEXT_UNINITIALIZED\\0"
+ "SESSION_MAY_NOT_BE_CREATED\\0"
+ "SHUTDOWN_WHILE_IN_INIT\\0"
+ "SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER\\0"
+ "SRTP_COULD_NOT_ALLOCATE_PROFILES\\0"
+ "SRTP_UNKNOWN_PROTECTION_PROFILE\\0"
+ "SSL3_EXT_INVALID_SERVERNAME\\0"
+ "SSLV3_ALERT_BAD_CERTIFICATE\\0"
+ "SSLV3_ALERT_BAD_RECORD_MAC\\0"
+ "SSLV3_ALERT_CERTIFICATE_EXPIRED\\0"
+ "SSLV3_ALERT_CERTIFICATE_REVOKED\\0"
+ "SSLV3_ALERT_CERTIFICATE_UNKNOWN\\0"
+ "SSLV3_ALERT_CLOSE_NOTIFY\\0"
+ "SSLV3_ALERT_DECOMPRESSION_FAILURE\\0"
+ "SSLV3_ALERT_HANDSHAKE_FAILURE\\0"
+ "SSLV3_ALERT_ILLEGAL_PARAMETER\\0"
+ "SSLV3_ALERT_NO_CERTIFICATE\\0"
+ "SSLV3_ALERT_UNEXPECTED_MESSAGE\\0"
+ "SSLV3_ALERT_UNSUPPORTED_CERTIFICATE\\0"
+ "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\\0"
+ "SSL_HANDSHAKE_FAILURE\\0"
+ "SSL_SESSION_ID_CONTEXT_TOO_LONG\\0"
+ "TICKET_ENCRYPTION_FAILED\\0"
+ "TLSV1_ALERT_ACCESS_DENIED\\0"
+ "TLSV1_ALERT_DECODE_ERROR\\0"
+ "TLSV1_ALERT_DECRYPTION_FAILED\\0"
+ "TLSV1_ALERT_DECRYPT_ERROR\\0"
+ "TLSV1_ALERT_EXPORT_RESTRICTION\\0"
+ "TLSV1_ALERT_INAPPROPRIATE_FALLBACK\\0"
+ "TLSV1_ALERT_INSUFFICIENT_SECURITY\\0"
+ "TLSV1_ALERT_INTERNAL_ERROR\\0"
+ "TLSV1_ALERT_NO_RENEGOTIATION\\0"
+ "TLSV1_ALERT_PROTOCOL_VERSION\\0"
+ "TLSV1_ALERT_RECORD_OVERFLOW\\0"
+ "TLSV1_ALERT_UNKNOWN_CA\\0"
+ "TLSV1_ALERT_USER_CANCELLED\\0"
+ "TLSV1_BAD_CERTIFICATE_HASH_VALUE\\0"
+ "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\\0"
+ "TLSV1_CERTIFICATE_REQUIRED\\0"
+ "TLSV1_CERTIFICATE_UNOBTAINABLE\\0"
+ "TLSV1_UNKNOWN_PSK_IDENTITY\\0"
+ "TLSV1_UNRECOGNIZED_NAME\\0"
+ "TLSV1_UNSUPPORTED_EXTENSION\\0"
+ "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\\0"
+ "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\\0"
+ "TOO_MANY_EMPTY_FRAGMENTS\\0"
+ "TOO_MANY_KEY_UPDATES\\0"
+ "TOO_MANY_WARNING_ALERTS\\0"
+ "TOO_MUCH_READ_EARLY_DATA\\0"
+ "TOO_MUCH_SKIPPED_EARLY_DATA\\0"
+ "UNABLE_TO_FIND_ECDH_PARAMETERS\\0"
+ "UNEXPECTED_EXTENSION\\0"
+ "UNEXPECTED_EXTENSION_ON_EARLY_DATA\\0"
+ "UNEXPECTED_MESSAGE\\0"
+ "UNEXPECTED_OPERATOR_IN_GROUP\\0"
+ "UNEXPECTED_RECORD\\0"
+ "UNKNOWN_ALERT_TYPE\\0"
+ "UNKNOWN_CERTIFICATE_TYPE\\0"
+ "UNKNOWN_CIPHER_RETURNED\\0"
+ "UNKNOWN_CIPHER_TYPE\\0"
+ "UNKNOWN_KEY_EXCHANGE_TYPE\\0"
+ "UNKNOWN_PROTOCOL\\0"
+ "UNKNOWN_SSL_VERSION\\0"
+ "UNKNOWN_STATE\\0"
+ "UNSAFE_LEGACY_RENEGOTIATION_DISABLED\\0"
+ "UNSUPPORTED_COMPRESSION_ALGORITHM\\0"
+ "UNSUPPORTED_ELLIPTIC_CURVE\\0"
+ "UNSUPPORTED_PROTOCOL\\0"
+ "UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY\\0"
+ "WRONG_CERTIFICATE_TYPE\\0"
+ "WRONG_CIPHER_RETURNED\\0"
+ "WRONG_CURVE\\0"
+ "WRONG_MESSAGE_TYPE\\0"
+ "WRONG_SIGNATURE_TYPE\\0"
+ "WRONG_SSL_VERSION\\0"
+ "WRONG_VERSION_NUMBER\\0"
+ "WRONG_VERSION_ON_EARLY_DATA\\0"
+ "X509_LIB\\0"
+ "X509_VERIFICATION_SETUP_PROBLEMS\\0"
+ "AKID_MISMATCH\\0"
+ "BAD_X509_FILETYPE\\0"
+ "BASE64_DECODE_ERROR\\0"
+ "CANT_CHECK_DH_KEY\\0"
+ "CERT_ALREADY_IN_HASH_TABLE\\0"
+ "CRL_ALREADY_DELTA\\0"
+ "CRL_VERIFY_FAILURE\\0"
+ "IDP_MISMATCH\\0"
+ "INVALID_DIRECTORY\\0"
+ "INVALID_FIELD_NAME\\0"
+ "INVALID_PARAMETER\\0"
+ "INVALID_PSS_PARAMETERS\\0"
+ "INVALID_TRUST\\0"
+ "ISSUER_MISMATCH\\0"
+ "KEY_TYPE_MISMATCH\\0"
+ "KEY_VALUES_MISMATCH\\0"
+ "LOADING_CERT_DIR\\0"
+ "LOADING_DEFAULTS\\0"
+ "NAME_TOO_LONG\\0"
+ "NEWER_CRL_NOT_NEWER\\0"
+ "NO_CERT_SET_FOR_US_TO_VERIFY\\0"
+ "NO_CRL_NUMBER\\0"
+ "PUBLIC_KEY_DECODE_ERROR\\0"
+ "PUBLIC_KEY_ENCODE_ERROR\\0"
+ "SHOULD_RETRY\\0"
+ "UNKNOWN_KEY_TYPE\\0"
+ "UNKNOWN_PURPOSE_ID\\0"
+ "UNKNOWN_TRUST_ID\\0"
+ "WRONG_LOOKUP_TYPE\\0"
+ "BAD_IP_ADDRESS\\0"
+ "BAD_OBJECT\\0"
+ "BN_DEC2BN_ERROR\\0"
+ "BN_TO_ASN1_INTEGER_ERROR\\0"
+ "CANNOT_FIND_FREE_FUNCTION\\0"
+ "DIRNAME_ERROR\\0"
+ "DISTPOINT_ALREADY_SET\\0"
+ "DUPLICATE_ZONE_ID\\0"
+ "ERROR_CONVERTING_ZONE\\0"
+ "ERROR_CREATING_EXTENSION\\0"
+ "ERROR_IN_EXTENSION\\0"
+ "EXPECTED_A_SECTION_NAME\\0"
+ "EXTENSION_EXISTS\\0"
+ "EXTENSION_NAME_ERROR\\0"
+ "EXTENSION_NOT_FOUND\\0"
+ "EXTENSION_SETTING_NOT_SUPPORTED\\0"
+ "EXTENSION_VALUE_ERROR\\0"
+ "ILLEGAL_EMPTY_EXTENSION\\0"
+ "ILLEGAL_HEX_DIGIT\\0"
+ "INCORRECT_POLICY_SYNTAX_TAG\\0"
+ "INVALID_BOOLEAN_STRING\\0"
+ "INVALID_EXTENSION_STRING\\0"
+ "INVALID_MULTIPLE_RDNS\\0"
+ "INVALID_NAME\\0"
+ "INVALID_NULL_ARGUMENT\\0"
+ "INVALID_NULL_NAME\\0"
+ "INVALID_NULL_VALUE\\0"
+ "INVALID_NUMBERS\\0"
+ "INVALID_OBJECT_IDENTIFIER\\0"
+ "INVALID_OPTION\\0"
+ "INVALID_POLICY_IDENTIFIER\\0"
+ "INVALID_PROXY_POLICY_SETTING\\0"
+ "INVALID_PURPOSE\\0"
+ "INVALID_SECTION\\0"
+ "INVALID_SYNTAX\\0"
+ "ISSUER_DECODE_ERROR\\0"
+ "NEED_ORGANIZATION_AND_NUMBERS\\0"
+ "NO_CONFIG_DATABASE\\0"
+ "NO_ISSUER_CERTIFICATE\\0"
+ "NO_ISSUER_DETAILS\\0"
+ "NO_POLICY_IDENTIFIER\\0"
+ "NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED\\0"
+ "NO_PUBLIC_KEY\\0"
+ "NO_SUBJECT_DETAILS\\0"
+ "ODD_NUMBER_OF_DIGITS\\0"
+ "OPERATION_NOT_DEFINED\\0"
+ "OTHERNAME_ERROR\\0"
+ "POLICY_LANGUAGE_ALREADY_DEFINED\\0"
+ "POLICY_PATH_LENGTH\\0"
+ "POLICY_PATH_LENGTH_ALREADY_DEFINED\\0"
+ "POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY\\0"
+ "SECTION_NOT_FOUND\\0"
+ "UNABLE_TO_GET_ISSUER_DETAILS\\0"
+ "UNABLE_TO_GET_ISSUER_KEYID\\0"
+ "UNKNOWN_BIT_STRING_ARGUMENT\\0"
+ "UNKNOWN_EXTENSION\\0"
+ "UNKNOWN_EXTENSION_NAME\\0"
+ "UNKNOWN_OPTION\\0"
+ "UNSUPPORTED_OPTION\\0"
+ "USER_TOO_LONG\\0"
+ "";
+ EOF
+
+ sed -i'.back' '/^#define \\([A-Za-z0-9_]*\\) \\1/d' include/openssl/ssl.h
+ sed -i'.back' 'N;/^#define \\([A-Za-z0-9_]*\\) *\\\\\\n *\\1/d' include/openssl/ssl.h
+ sed -i'.back' 's/#ifndef md5_block_data_order/#ifndef GRPC_SHADOW_md5_block_data_order/g' crypto/fipsmodule/md5/md5.c
+ END_OF_COMMAND
+
+ # Redefine symbols to avoid conflict when the same app also depends on OpenSSL. The list of
+ # symbols are src/objective-c/grpc_shadow_boringssl_symbol_list.
+ # This is the last part of this file.
+ s.prefix_header_contents =
+ '#define BIO_f_ssl GRPC_SHADOW_BIO_f_ssl',
+ '#define BIO_set_ssl GRPC_SHADOW_BIO_set_ssl',
+ '#define SSL_CTX_add_client_custom_ext GRPC_SHADOW_SSL_CTX_add_client_custom_ext',
+ '#define SSL_CTX_add_server_custom_ext GRPC_SHADOW_SSL_CTX_add_server_custom_ext',
+ '#define DTLSv1_get_timeout GRPC_SHADOW_DTLSv1_get_timeout',
+ '#define DTLSv1_handle_timeout GRPC_SHADOW_DTLSv1_handle_timeout',
+ '#define DTLSv1_set_initial_timeout_duration GRPC_SHADOW_DTLSv1_set_initial_timeout_duration',
+ '#define SSL_CTX_set_srtp_profiles GRPC_SHADOW_SSL_CTX_set_srtp_profiles',
+ '#define SSL_CTX_set_tlsext_use_srtp GRPC_SHADOW_SSL_CTX_set_tlsext_use_srtp',
+ '#define SSL_get_selected_srtp_profile GRPC_SHADOW_SSL_get_selected_srtp_profile',
+ '#define SSL_get_srtp_profiles GRPC_SHADOW_SSL_get_srtp_profiles',
+ '#define SSL_set_srtp_profiles GRPC_SHADOW_SSL_set_srtp_profiles',
+ '#define SSL_set_tlsext_use_srtp GRPC_SHADOW_SSL_set_tlsext_use_srtp',
+ '#define DTLS_client_method GRPC_SHADOW_DTLS_client_method',
+ '#define DTLS_method GRPC_SHADOW_DTLS_method',
+ '#define DTLS_server_method GRPC_SHADOW_DTLS_server_method',
+ '#define DTLS_with_buffers_method GRPC_SHADOW_DTLS_with_buffers_method',
+ '#define DTLSv1_2_client_method GRPC_SHADOW_DTLSv1_2_client_method',
+ '#define DTLSv1_2_method GRPC_SHADOW_DTLSv1_2_method',
+ '#define DTLSv1_2_server_method GRPC_SHADOW_DTLSv1_2_server_method',
+ '#define DTLSv1_client_method GRPC_SHADOW_DTLSv1_client_method',
+ '#define DTLSv1_method GRPC_SHADOW_DTLSv1_method',
+ '#define DTLSv1_server_method GRPC_SHADOW_DTLSv1_server_method',
+ '#define SSL_SESSION_from_bytes GRPC_SHADOW_SSL_SESSION_from_bytes',
+ '#define SSL_SESSION_to_bytes GRPC_SHADOW_SSL_SESSION_to_bytes',
+ '#define SSL_SESSION_to_bytes_for_ticket GRPC_SHADOW_SSL_SESSION_to_bytes_for_ticket',
+ '#define i2d_SSL_SESSION GRPC_SHADOW_i2d_SSL_SESSION',
+ '#define SSL_CTX_set0_client_CAs GRPC_SHADOW_SSL_CTX_set0_client_CAs',
+ '#define SSL_CTX_set_cert_cb GRPC_SHADOW_SSL_CTX_set_cert_cb',
+ '#define SSL_CTX_set_chain_and_key GRPC_SHADOW_SSL_CTX_set_chain_and_key',
+ '#define SSL_CTX_set_ocsp_response GRPC_SHADOW_SSL_CTX_set_ocsp_response',
+ '#define SSL_CTX_set_signed_cert_timestamp_list GRPC_SHADOW_SSL_CTX_set_signed_cert_timestamp_list',
+ '#define SSL_CTX_use_certificate_ASN1 GRPC_SHADOW_SSL_CTX_use_certificate_ASN1',
+ '#define SSL_get0_peer_certificates GRPC_SHADOW_SSL_get0_peer_certificates',
+ '#define SSL_get0_server_requested_CAs GRPC_SHADOW_SSL_get0_server_requested_CAs',
+ '#define SSL_set0_client_CAs GRPC_SHADOW_SSL_set0_client_CAs',
+ '#define SSL_set_cert_cb GRPC_SHADOW_SSL_set_cert_cb',
+ '#define SSL_set_chain_and_key GRPC_SHADOW_SSL_set_chain_and_key',
+ '#define SSL_set_ocsp_response GRPC_SHADOW_SSL_set_ocsp_response',
+ '#define SSL_set_signed_cert_timestamp_list GRPC_SHADOW_SSL_set_signed_cert_timestamp_list',
+ '#define SSL_use_certificate_ASN1 GRPC_SHADOW_SSL_use_certificate_ASN1',
+ '#define SSL_CIPHER_description GRPC_SHADOW_SSL_CIPHER_description',
+ '#define SSL_CIPHER_get_auth_nid GRPC_SHADOW_SSL_CIPHER_get_auth_nid',
+ '#define SSL_CIPHER_get_bits GRPC_SHADOW_SSL_CIPHER_get_bits',
+ '#define SSL_CIPHER_get_cipher_nid GRPC_SHADOW_SSL_CIPHER_get_cipher_nid',
+ '#define SSL_CIPHER_get_digest_nid GRPC_SHADOW_SSL_CIPHER_get_digest_nid',
+ '#define SSL_CIPHER_get_id GRPC_SHADOW_SSL_CIPHER_get_id',
+ '#define SSL_CIPHER_get_kx_name GRPC_SHADOW_SSL_CIPHER_get_kx_name',
+ '#define SSL_CIPHER_get_kx_nid GRPC_SHADOW_SSL_CIPHER_get_kx_nid',
+ '#define SSL_CIPHER_get_max_version GRPC_SHADOW_SSL_CIPHER_get_max_version',
+ '#define SSL_CIPHER_get_min_version GRPC_SHADOW_SSL_CIPHER_get_min_version',
+ '#define SSL_CIPHER_get_name GRPC_SHADOW_SSL_CIPHER_get_name',
+ '#define SSL_CIPHER_get_prf_nid GRPC_SHADOW_SSL_CIPHER_get_prf_nid',
+ '#define SSL_CIPHER_get_rfc_name GRPC_SHADOW_SSL_CIPHER_get_rfc_name',
+ '#define SSL_CIPHER_get_version GRPC_SHADOW_SSL_CIPHER_get_version',
+ '#define SSL_CIPHER_is_aead GRPC_SHADOW_SSL_CIPHER_is_aead',
+ '#define SSL_CIPHER_is_block_cipher GRPC_SHADOW_SSL_CIPHER_is_block_cipher',
+ '#define SSL_CIPHER_standard_name GRPC_SHADOW_SSL_CIPHER_standard_name',
+ '#define SSL_COMP_add_compression_method GRPC_SHADOW_SSL_COMP_add_compression_method',
+ '#define SSL_COMP_free_compression_methods GRPC_SHADOW_SSL_COMP_free_compression_methods',
+ '#define SSL_COMP_get0_name GRPC_SHADOW_SSL_COMP_get0_name',
+ '#define SSL_COMP_get_compression_methods GRPC_SHADOW_SSL_COMP_get_compression_methods',
+ '#define SSL_COMP_get_id GRPC_SHADOW_SSL_COMP_get_id',
+ '#define SSL_COMP_get_name GRPC_SHADOW_SSL_COMP_get_name',
+ '#define SSL_get_cipher_by_value GRPC_SHADOW_SSL_get_cipher_by_value',
+ '#define SSL_CTX_get_default_passwd_cb GRPC_SHADOW_SSL_CTX_get_default_passwd_cb',
+ '#define SSL_CTX_get_default_passwd_cb_userdata GRPC_SHADOW_SSL_CTX_get_default_passwd_cb_userdata',
+ '#define SSL_CTX_set_default_passwd_cb GRPC_SHADOW_SSL_CTX_set_default_passwd_cb',
+ '#define SSL_CTX_set_default_passwd_cb_userdata GRPC_SHADOW_SSL_CTX_set_default_passwd_cb_userdata',
+ '#define SSL_CTX_use_PrivateKey_file GRPC_SHADOW_SSL_CTX_use_PrivateKey_file',
+ '#define SSL_CTX_use_RSAPrivateKey_file GRPC_SHADOW_SSL_CTX_use_RSAPrivateKey_file',
+ '#define SSL_CTX_use_certificate_chain_file GRPC_SHADOW_SSL_CTX_use_certificate_chain_file',
+ '#define SSL_CTX_use_certificate_file GRPC_SHADOW_SSL_CTX_use_certificate_file',
+ '#define SSL_add_file_cert_subjects_to_stack GRPC_SHADOW_SSL_add_file_cert_subjects_to_stack',
+ '#define SSL_load_client_CA_file GRPC_SHADOW_SSL_load_client_CA_file',
+ '#define SSL_use_PrivateKey_file GRPC_SHADOW_SSL_use_PrivateKey_file',
+ '#define SSL_use_RSAPrivateKey_file GRPC_SHADOW_SSL_use_RSAPrivateKey_file',
+ '#define SSL_use_certificate_file GRPC_SHADOW_SSL_use_certificate_file',
+ '#define SSL_get_curve_name GRPC_SHADOW_SSL_get_curve_name',
+ '#define ERR_load_SSL_strings GRPC_SHADOW_ERR_load_SSL_strings',
+ '#define OPENSSL_init_ssl GRPC_SHADOW_OPENSSL_init_ssl',
+ '#define SSL_CTX_check_private_key GRPC_SHADOW_SSL_CTX_check_private_key',
+ '#define SSL_CTX_cipher_in_group GRPC_SHADOW_SSL_CTX_cipher_in_group',
+ '#define SSL_CTX_clear_mode GRPC_SHADOW_SSL_CTX_clear_mode',
+ '#define SSL_CTX_clear_options GRPC_SHADOW_SSL_CTX_clear_options',
+ '#define SSL_CTX_enable_ocsp_stapling GRPC_SHADOW_SSL_CTX_enable_ocsp_stapling',
+ '#define SSL_CTX_enable_signed_cert_timestamps GRPC_SHADOW_SSL_CTX_enable_signed_cert_timestamps',
+ '#define SSL_CTX_enable_tls_channel_id GRPC_SHADOW_SSL_CTX_enable_tls_channel_id',
+ '#define SSL_CTX_free GRPC_SHADOW_SSL_CTX_free',
+ '#define SSL_CTX_get0_privatekey GRPC_SHADOW_SSL_CTX_get0_privatekey',
+ '#define SSL_CTX_get_ciphers GRPC_SHADOW_SSL_CTX_get_ciphers',
+ '#define SSL_CTX_get_ex_data GRPC_SHADOW_SSL_CTX_get_ex_data',
+ '#define SSL_CTX_get_ex_new_index GRPC_SHADOW_SSL_CTX_get_ex_new_index',
+ '#define SSL_CTX_get_keylog_callback GRPC_SHADOW_SSL_CTX_get_keylog_callback',
+ '#define SSL_CTX_get_max_cert_list GRPC_SHADOW_SSL_CTX_get_max_cert_list',
+ '#define SSL_CTX_get_mode GRPC_SHADOW_SSL_CTX_get_mode',
+ '#define SSL_CTX_get_options GRPC_SHADOW_SSL_CTX_get_options',
+ '#define SSL_CTX_get_quiet_shutdown GRPC_SHADOW_SSL_CTX_get_quiet_shutdown',
+ '#define SSL_CTX_get_read_ahead GRPC_SHADOW_SSL_CTX_get_read_ahead',
+ '#define SSL_CTX_get_session_cache_mode GRPC_SHADOW_SSL_CTX_get_session_cache_mode',
+ '#define SSL_CTX_get_tlsext_ticket_keys GRPC_SHADOW_SSL_CTX_get_tlsext_ticket_keys',
+ '#define SSL_CTX_need_tmp_RSA GRPC_SHADOW_SSL_CTX_need_tmp_RSA',
+ '#define SSL_CTX_new GRPC_SHADOW_SSL_CTX_new',
+ '#define SSL_CTX_sess_accept GRPC_SHADOW_SSL_CTX_sess_accept',
+ '#define SSL_CTX_sess_accept_good GRPC_SHADOW_SSL_CTX_sess_accept_good',
+ '#define SSL_CTX_sess_accept_renegotiate GRPC_SHADOW_SSL_CTX_sess_accept_renegotiate',
+ '#define SSL_CTX_sess_cache_full GRPC_SHADOW_SSL_CTX_sess_cache_full',
+ '#define SSL_CTX_sess_cb_hits GRPC_SHADOW_SSL_CTX_sess_cb_hits',
+ '#define SSL_CTX_sess_connect GRPC_SHADOW_SSL_CTX_sess_connect',
+ '#define SSL_CTX_sess_connect_good GRPC_SHADOW_SSL_CTX_sess_connect_good',
+ '#define SSL_CTX_sess_connect_renegotiate GRPC_SHADOW_SSL_CTX_sess_connect_renegotiate',
+ '#define SSL_CTX_sess_get_cache_size GRPC_SHADOW_SSL_CTX_sess_get_cache_size',
+ '#define SSL_CTX_sess_hits GRPC_SHADOW_SSL_CTX_sess_hits',
+ '#define SSL_CTX_sess_misses GRPC_SHADOW_SSL_CTX_sess_misses',
+ '#define SSL_CTX_sess_number GRPC_SHADOW_SSL_CTX_sess_number',
+ '#define SSL_CTX_sess_set_cache_size GRPC_SHADOW_SSL_CTX_sess_set_cache_size',
+ '#define SSL_CTX_sess_timeouts GRPC_SHADOW_SSL_CTX_sess_timeouts',
+ '#define SSL_CTX_set0_buffer_pool GRPC_SHADOW_SSL_CTX_set0_buffer_pool',
+ '#define SSL_CTX_set1_curves GRPC_SHADOW_SSL_CTX_set1_curves',
+ '#define SSL_CTX_set1_curves_list GRPC_SHADOW_SSL_CTX_set1_curves_list',
+ '#define SSL_CTX_set1_tls_channel_id GRPC_SHADOW_SSL_CTX_set1_tls_channel_id',
+ '#define SSL_CTX_set_allow_unknown_alpn_protos GRPC_SHADOW_SSL_CTX_set_allow_unknown_alpn_protos',
+ '#define SSL_CTX_set_alpn_protos GRPC_SHADOW_SSL_CTX_set_alpn_protos',
+ '#define SSL_CTX_set_alpn_select_cb GRPC_SHADOW_SSL_CTX_set_alpn_select_cb',
+ '#define SSL_CTX_set_cipher_list GRPC_SHADOW_SSL_CTX_set_cipher_list',
+ '#define SSL_CTX_set_current_time_cb GRPC_SHADOW_SSL_CTX_set_current_time_cb',
+ '#define SSL_CTX_set_custom_verify GRPC_SHADOW_SSL_CTX_set_custom_verify',
+ '#define SSL_CTX_set_dos_protection_cb GRPC_SHADOW_SSL_CTX_set_dos_protection_cb',
+ '#define SSL_CTX_set_early_data_enabled GRPC_SHADOW_SSL_CTX_set_early_data_enabled',
+ '#define SSL_CTX_set_ex_data GRPC_SHADOW_SSL_CTX_set_ex_data',
+ '#define SSL_CTX_set_false_start_allowed_without_alpn GRPC_SHADOW_SSL_CTX_set_false_start_allowed_without_alpn',
+ '#define SSL_CTX_set_grease_enabled GRPC_SHADOW_SSL_CTX_set_grease_enabled',
+ '#define SSL_CTX_set_keylog_callback GRPC_SHADOW_SSL_CTX_set_keylog_callback',
+ '#define SSL_CTX_set_max_cert_list GRPC_SHADOW_SSL_CTX_set_max_cert_list',
+ '#define SSL_CTX_set_max_send_fragment GRPC_SHADOW_SSL_CTX_set_max_send_fragment',
+ '#define SSL_CTX_set_mode GRPC_SHADOW_SSL_CTX_set_mode',
+ '#define SSL_CTX_set_msg_callback GRPC_SHADOW_SSL_CTX_set_msg_callback',
+ '#define SSL_CTX_set_msg_callback_arg GRPC_SHADOW_SSL_CTX_set_msg_callback_arg',
+ '#define SSL_CTX_set_next_proto_select_cb GRPC_SHADOW_SSL_CTX_set_next_proto_select_cb',
+ '#define SSL_CTX_set_next_protos_advertised_cb GRPC_SHADOW_SSL_CTX_set_next_protos_advertised_cb',
+ '#define SSL_CTX_set_options GRPC_SHADOW_SSL_CTX_set_options',
+ '#define SSL_CTX_set_psk_client_callback GRPC_SHADOW_SSL_CTX_set_psk_client_callback',
+ '#define SSL_CTX_set_psk_server_callback GRPC_SHADOW_SSL_CTX_set_psk_server_callback',
+ '#define SSL_CTX_set_quiet_shutdown GRPC_SHADOW_SSL_CTX_set_quiet_shutdown',
+ '#define SSL_CTX_set_read_ahead GRPC_SHADOW_SSL_CTX_set_read_ahead',
+ '#define SSL_CTX_set_retain_only_sha256_of_client_certs GRPC_SHADOW_SSL_CTX_set_retain_only_sha256_of_client_certs',
+ '#define SSL_CTX_set_select_certificate_cb GRPC_SHADOW_SSL_CTX_set_select_certificate_cb',
+ '#define SSL_CTX_set_session_cache_mode GRPC_SHADOW_SSL_CTX_set_session_cache_mode',
+ '#define SSL_CTX_set_session_id_context GRPC_SHADOW_SSL_CTX_set_session_id_context',
+ '#define SSL_CTX_set_strict_cipher_list GRPC_SHADOW_SSL_CTX_set_strict_cipher_list',
+ '#define SSL_CTX_set_ticket_aead_method GRPC_SHADOW_SSL_CTX_set_ticket_aead_method',
+ '#define SSL_CTX_set_tls13_variant GRPC_SHADOW_SSL_CTX_set_tls13_variant',
+ '#define SSL_CTX_set_tls_channel_id_enabled GRPC_SHADOW_SSL_CTX_set_tls_channel_id_enabled',
+ '#define SSL_CTX_set_tlsext_servername_arg GRPC_SHADOW_SSL_CTX_set_tlsext_servername_arg',
+ '#define SSL_CTX_set_tlsext_servername_callback GRPC_SHADOW_SSL_CTX_set_tlsext_servername_callback',
+ '#define SSL_CTX_set_tlsext_ticket_key_cb GRPC_SHADOW_SSL_CTX_set_tlsext_ticket_key_cb',
+ '#define SSL_CTX_set_tlsext_ticket_keys GRPC_SHADOW_SSL_CTX_set_tlsext_ticket_keys',
+ '#define SSL_CTX_set_tmp_dh GRPC_SHADOW_SSL_CTX_set_tmp_dh',
+ '#define SSL_CTX_set_tmp_dh_callback GRPC_SHADOW_SSL_CTX_set_tmp_dh_callback',
+ '#define SSL_CTX_set_tmp_ecdh GRPC_SHADOW_SSL_CTX_set_tmp_ecdh',
+ '#define SSL_CTX_set_tmp_rsa GRPC_SHADOW_SSL_CTX_set_tmp_rsa',
+ '#define SSL_CTX_set_tmp_rsa_callback GRPC_SHADOW_SSL_CTX_set_tmp_rsa_callback',
+ '#define SSL_CTX_up_ref GRPC_SHADOW_SSL_CTX_up_ref',
+ '#define SSL_CTX_use_psk_identity_hint GRPC_SHADOW_SSL_CTX_use_psk_identity_hint',
+ '#define SSL_accept GRPC_SHADOW_SSL_accept',
+ '#define SSL_cache_hit GRPC_SHADOW_SSL_cache_hit',
+ '#define SSL_certs_clear GRPC_SHADOW_SSL_certs_clear',
+ '#define SSL_check_private_key GRPC_SHADOW_SSL_check_private_key',
+ '#define SSL_clear GRPC_SHADOW_SSL_clear',
+ '#define SSL_clear_mode GRPC_SHADOW_SSL_clear_mode',
+ '#define SSL_clear_options GRPC_SHADOW_SSL_clear_options',
+ '#define SSL_connect GRPC_SHADOW_SSL_connect',
+ '#define SSL_cutthrough_complete GRPC_SHADOW_SSL_cutthrough_complete',
+ '#define SSL_do_handshake GRPC_SHADOW_SSL_do_handshake',
+ '#define SSL_dummy_pq_padding_used GRPC_SHADOW_SSL_dummy_pq_padding_used',
+ '#define SSL_early_data_accepted GRPC_SHADOW_SSL_early_data_accepted',
+ '#define SSL_enable_ocsp_stapling GRPC_SHADOW_SSL_enable_ocsp_stapling',
+ '#define SSL_enable_signed_cert_timestamps GRPC_SHADOW_SSL_enable_signed_cert_timestamps',
+ '#define SSL_enable_tls_channel_id GRPC_SHADOW_SSL_enable_tls_channel_id',
+ '#define SSL_free GRPC_SHADOW_SSL_free',
+ '#define SSL_get0_alpn_selected GRPC_SHADOW_SSL_get0_alpn_selected',
+ '#define SSL_get0_certificate_types GRPC_SHADOW_SSL_get0_certificate_types',
+ '#define SSL_get0_next_proto_negotiated GRPC_SHADOW_SSL_get0_next_proto_negotiated',
+ '#define SSL_get0_ocsp_response GRPC_SHADOW_SSL_get0_ocsp_response',
+ '#define SSL_get0_session_id_context GRPC_SHADOW_SSL_get0_session_id_context',
+ '#define SSL_get0_signed_cert_timestamp_list GRPC_SHADOW_SSL_get0_signed_cert_timestamp_list',
+ '#define SSL_get_SSL_CTX GRPC_SHADOW_SSL_get_SSL_CTX',
+ '#define SSL_get_cipher_list GRPC_SHADOW_SSL_get_cipher_list',
+ '#define SSL_get_ciphers GRPC_SHADOW_SSL_get_ciphers',
+ '#define SSL_get_client_random GRPC_SHADOW_SSL_get_client_random',
+ '#define SSL_get_current_cipher GRPC_SHADOW_SSL_get_current_cipher',
+ '#define SSL_get_current_compression GRPC_SHADOW_SSL_get_current_compression',
+ '#define SSL_get_current_expansion GRPC_SHADOW_SSL_get_current_expansion',
+ '#define SSL_get_curve_id GRPC_SHADOW_SSL_get_curve_id',
+ '#define SSL_get_default_timeout GRPC_SHADOW_SSL_get_default_timeout',
+ '#define SSL_get_error GRPC_SHADOW_SSL_get_error',
+ '#define SSL_get_ex_data GRPC_SHADOW_SSL_get_ex_data',
+ '#define SSL_get_ex_new_index GRPC_SHADOW_SSL_get_ex_new_index',
+ '#define SSL_get_extms_support GRPC_SHADOW_SSL_get_extms_support',
+ '#define SSL_get_fd GRPC_SHADOW_SSL_get_fd',
+ '#define SSL_get_finished GRPC_SHADOW_SSL_get_finished',
+ '#define SSL_get_info_callback GRPC_SHADOW_SSL_get_info_callback',
+ '#define SSL_get_ivs GRPC_SHADOW_SSL_get_ivs',
+ '#define SSL_get_max_cert_list GRPC_SHADOW_SSL_get_max_cert_list',
+ '#define SSL_get_mode GRPC_SHADOW_SSL_get_mode',
+ '#define SSL_get_negotiated_token_binding_param GRPC_SHADOW_SSL_get_negotiated_token_binding_param',
+ '#define SSL_get_options GRPC_SHADOW_SSL_get_options',
+ '#define SSL_get_peer_finished GRPC_SHADOW_SSL_get_peer_finished',
+ '#define SSL_get_peer_quic_transport_params GRPC_SHADOW_SSL_get_peer_quic_transport_params',
+ '#define SSL_get_peer_signature_algorithm GRPC_SHADOW_SSL_get_peer_signature_algorithm',
+ '#define SSL_get_pending_cipher GRPC_SHADOW_SSL_get_pending_cipher',
+ '#define SSL_get_privatekey GRPC_SHADOW_SSL_get_privatekey',
+ '#define SSL_get_psk_identity GRPC_SHADOW_SSL_get_psk_identity',
+ '#define SSL_get_psk_identity_hint GRPC_SHADOW_SSL_get_psk_identity_hint',
+ '#define SSL_get_quiet_shutdown GRPC_SHADOW_SSL_get_quiet_shutdown',
+ '#define SSL_get_rbio GRPC_SHADOW_SSL_get_rbio',
+ '#define SSL_get_read_ahead GRPC_SHADOW_SSL_get_read_ahead',
+ '#define SSL_get_read_sequence GRPC_SHADOW_SSL_get_read_sequence',
+ '#define SSL_get_rfd GRPC_SHADOW_SSL_get_rfd',
+ '#define SSL_get_secure_renegotiation_support GRPC_SHADOW_SSL_get_secure_renegotiation_support',
+ '#define SSL_get_server_random GRPC_SHADOW_SSL_get_server_random',
+ '#define SSL_get_server_tmp_key GRPC_SHADOW_SSL_get_server_tmp_key',
+ '#define SSL_get_servername GRPC_SHADOW_SSL_get_servername',
+ '#define SSL_get_servername_type GRPC_SHADOW_SSL_get_servername_type',
+ '#define SSL_get_shared_ciphers GRPC_SHADOW_SSL_get_shared_ciphers',
+ '#define SSL_get_shutdown GRPC_SHADOW_SSL_get_shutdown',
+ '#define SSL_get_structure_sizes GRPC_SHADOW_SSL_get_structure_sizes',
+ '#define SSL_get_ticket_age_skew GRPC_SHADOW_SSL_get_ticket_age_skew',
+ '#define SSL_get_tls_channel_id GRPC_SHADOW_SSL_get_tls_channel_id',
+ '#define SSL_get_tls_unique GRPC_SHADOW_SSL_get_tls_unique',
+ '#define SSL_get_verify_mode GRPC_SHADOW_SSL_get_verify_mode',
+ '#define SSL_get_wbio GRPC_SHADOW_SSL_get_wbio',
+ '#define SSL_get_wfd GRPC_SHADOW_SSL_get_wfd',
+ '#define SSL_get_write_sequence GRPC_SHADOW_SSL_get_write_sequence',
+ '#define SSL_in_early_data GRPC_SHADOW_SSL_in_early_data',
+ '#define SSL_in_false_start GRPC_SHADOW_SSL_in_false_start',
+ '#define SSL_in_init GRPC_SHADOW_SSL_in_init',
+ '#define SSL_is_draft_downgrade GRPC_SHADOW_SSL_is_draft_downgrade',
+ '#define SSL_is_dtls GRPC_SHADOW_SSL_is_dtls',
+ '#define SSL_is_init_finished GRPC_SHADOW_SSL_is_init_finished',
+ '#define SSL_is_server GRPC_SHADOW_SSL_is_server',
+ '#define SSL_is_token_binding_negotiated GRPC_SHADOW_SSL_is_token_binding_negotiated',
+ '#define SSL_library_init GRPC_SHADOW_SSL_library_init',
+ '#define SSL_load_error_strings GRPC_SHADOW_SSL_load_error_strings',
+ '#define SSL_need_tmp_RSA GRPC_SHADOW_SSL_need_tmp_RSA',
+ '#define SSL_new GRPC_SHADOW_SSL_new',
+ '#define SSL_num_renegotiations GRPC_SHADOW_SSL_num_renegotiations',
+ '#define SSL_peek GRPC_SHADOW_SSL_peek',
+ '#define SSL_pending GRPC_SHADOW_SSL_pending',
+ '#define SSL_read GRPC_SHADOW_SSL_read',
+ '#define SSL_renegotiate GRPC_SHADOW_SSL_renegotiate',
+ '#define SSL_renegotiate_pending GRPC_SHADOW_SSL_renegotiate_pending',
+ '#define SSL_reset_early_data_reject GRPC_SHADOW_SSL_reset_early_data_reject',
+ '#define SSL_select_next_proto GRPC_SHADOW_SSL_select_next_proto',
+ '#define SSL_send_fatal_alert GRPC_SHADOW_SSL_send_fatal_alert',
+ '#define SSL_session_reused GRPC_SHADOW_SSL_session_reused',
+ '#define SSL_set0_rbio GRPC_SHADOW_SSL_set0_rbio',
+ '#define SSL_set0_wbio GRPC_SHADOW_SSL_set0_wbio',
+ '#define SSL_set1_curves GRPC_SHADOW_SSL_set1_curves',
+ '#define SSL_set1_curves_list GRPC_SHADOW_SSL_set1_curves_list',
+ '#define SSL_set1_tls_channel_id GRPC_SHADOW_SSL_set1_tls_channel_id',
+ '#define SSL_set_SSL_CTX GRPC_SHADOW_SSL_set_SSL_CTX',
+ '#define SSL_set_accept_state GRPC_SHADOW_SSL_set_accept_state',
+ '#define SSL_set_alpn_protos GRPC_SHADOW_SSL_set_alpn_protos',
+ '#define SSL_set_bio GRPC_SHADOW_SSL_set_bio',
+ '#define SSL_set_cipher_list GRPC_SHADOW_SSL_set_cipher_list',
+ '#define SSL_set_connect_state GRPC_SHADOW_SSL_set_connect_state',
+ '#define SSL_set_custom_verify GRPC_SHADOW_SSL_set_custom_verify',
+ '#define SSL_set_dummy_pq_padding_size GRPC_SHADOW_SSL_set_dummy_pq_padding_size',
+ '#define SSL_set_early_data_enabled GRPC_SHADOW_SSL_set_early_data_enabled',
+ '#define SSL_set_ex_data GRPC_SHADOW_SSL_set_ex_data',
+ '#define SSL_set_fd GRPC_SHADOW_SSL_set_fd',
+ '#define SSL_set_info_callback GRPC_SHADOW_SSL_set_info_callback',
+ '#define SSL_set_max_cert_list GRPC_SHADOW_SSL_set_max_cert_list',
+ '#define SSL_set_max_send_fragment GRPC_SHADOW_SSL_set_max_send_fragment',
+ '#define SSL_set_mode GRPC_SHADOW_SSL_set_mode',
+ '#define SSL_set_msg_callback GRPC_SHADOW_SSL_set_msg_callback',
+ '#define SSL_set_msg_callback_arg GRPC_SHADOW_SSL_set_msg_callback_arg',
+ '#define SSL_set_mtu GRPC_SHADOW_SSL_set_mtu',
+ '#define SSL_set_options GRPC_SHADOW_SSL_set_options',
+ '#define SSL_set_psk_client_callback GRPC_SHADOW_SSL_set_psk_client_callback',
+ '#define SSL_set_psk_server_callback GRPC_SHADOW_SSL_set_psk_server_callback',
+ '#define SSL_set_quic_transport_params GRPC_SHADOW_SSL_set_quic_transport_params',
+ '#define SSL_set_quiet_shutdown GRPC_SHADOW_SSL_set_quiet_shutdown',
+ '#define SSL_set_read_ahead GRPC_SHADOW_SSL_set_read_ahead',
+ '#define SSL_set_renegotiate_mode GRPC_SHADOW_SSL_set_renegotiate_mode',
+ '#define SSL_set_retain_only_sha256_of_client_certs GRPC_SHADOW_SSL_set_retain_only_sha256_of_client_certs',
+ '#define SSL_set_rfd GRPC_SHADOW_SSL_set_rfd',
+ '#define SSL_set_session_id_context GRPC_SHADOW_SSL_set_session_id_context',
+ '#define SSL_set_shutdown GRPC_SHADOW_SSL_set_shutdown',
+ '#define SSL_set_state GRPC_SHADOW_SSL_set_state',
+ '#define SSL_set_strict_cipher_list GRPC_SHADOW_SSL_set_strict_cipher_list',
+ '#define SSL_set_tls13_variant GRPC_SHADOW_SSL_set_tls13_variant',
+ '#define SSL_set_tls_channel_id_enabled GRPC_SHADOW_SSL_set_tls_channel_id_enabled',
+ '#define SSL_set_tlsext_host_name GRPC_SHADOW_SSL_set_tlsext_host_name',
+ '#define SSL_set_tmp_dh GRPC_SHADOW_SSL_set_tmp_dh',
+ '#define SSL_set_tmp_dh_callback GRPC_SHADOW_SSL_set_tmp_dh_callback',
+ '#define SSL_set_tmp_ecdh GRPC_SHADOW_SSL_set_tmp_ecdh',
+ '#define SSL_set_tmp_rsa GRPC_SHADOW_SSL_set_tmp_rsa',
+ '#define SSL_set_tmp_rsa_callback GRPC_SHADOW_SSL_set_tmp_rsa_callback',
+ '#define SSL_set_token_binding_params GRPC_SHADOW_SSL_set_token_binding_params',
+ '#define SSL_set_wfd GRPC_SHADOW_SSL_set_wfd',
+ '#define SSL_shutdown GRPC_SHADOW_SSL_shutdown',
+ '#define SSL_state GRPC_SHADOW_SSL_state',
+ '#define SSL_total_renegotiations GRPC_SHADOW_SSL_total_renegotiations',
+ '#define SSL_use_psk_identity_hint GRPC_SHADOW_SSL_use_psk_identity_hint',
+ '#define SSL_want GRPC_SHADOW_SSL_want',
+ '#define SSL_write GRPC_SHADOW_SSL_write',
+ '#define SSL_CTX_set_private_key_method GRPC_SHADOW_SSL_CTX_set_private_key_method',
+ '#define SSL_CTX_set_signing_algorithm_prefs GRPC_SHADOW_SSL_CTX_set_signing_algorithm_prefs',
+ '#define SSL_CTX_set_verify_algorithm_prefs GRPC_SHADOW_SSL_CTX_set_verify_algorithm_prefs',
+ '#define SSL_CTX_use_PrivateKey GRPC_SHADOW_SSL_CTX_use_PrivateKey',
+ '#define SSL_CTX_use_PrivateKey_ASN1 GRPC_SHADOW_SSL_CTX_use_PrivateKey_ASN1',
+ '#define SSL_CTX_use_RSAPrivateKey GRPC_SHADOW_SSL_CTX_use_RSAPrivateKey',
+ '#define SSL_CTX_use_RSAPrivateKey_ASN1 GRPC_SHADOW_SSL_CTX_use_RSAPrivateKey_ASN1',
+ '#define SSL_get_signature_algorithm_digest GRPC_SHADOW_SSL_get_signature_algorithm_digest',
+ '#define SSL_get_signature_algorithm_key_type GRPC_SHADOW_SSL_get_signature_algorithm_key_type',
+ '#define SSL_get_signature_algorithm_name GRPC_SHADOW_SSL_get_signature_algorithm_name',
+ '#define SSL_is_signature_algorithm_rsa_pss GRPC_SHADOW_SSL_is_signature_algorithm_rsa_pss',
+ '#define SSL_set_private_key_method GRPC_SHADOW_SSL_set_private_key_method',
+ '#define SSL_set_signing_algorithm_prefs GRPC_SHADOW_SSL_set_signing_algorithm_prefs',
+ '#define SSL_use_PrivateKey GRPC_SHADOW_SSL_use_PrivateKey',
+ '#define SSL_use_PrivateKey_ASN1 GRPC_SHADOW_SSL_use_PrivateKey_ASN1',
+ '#define SSL_use_RSAPrivateKey GRPC_SHADOW_SSL_use_RSAPrivateKey',
+ '#define SSL_use_RSAPrivateKey_ASN1 GRPC_SHADOW_SSL_use_RSAPrivateKey_ASN1',
+ '#define SSL_CTX_add_session GRPC_SHADOW_SSL_CTX_add_session',
+ '#define SSL_CTX_flush_sessions GRPC_SHADOW_SSL_CTX_flush_sessions',
+ '#define SSL_CTX_get_channel_id_cb GRPC_SHADOW_SSL_CTX_get_channel_id_cb',
+ '#define SSL_CTX_get_info_callback GRPC_SHADOW_SSL_CTX_get_info_callback',
+ '#define SSL_CTX_get_timeout GRPC_SHADOW_SSL_CTX_get_timeout',
+ '#define SSL_CTX_remove_session GRPC_SHADOW_SSL_CTX_remove_session',
+ '#define SSL_CTX_sess_get_get_cb GRPC_SHADOW_SSL_CTX_sess_get_get_cb',
+ '#define SSL_CTX_sess_get_new_cb GRPC_SHADOW_SSL_CTX_sess_get_new_cb',
+ '#define SSL_CTX_sess_get_remove_cb GRPC_SHADOW_SSL_CTX_sess_get_remove_cb',
+ '#define SSL_CTX_sess_set_get_cb GRPC_SHADOW_SSL_CTX_sess_set_get_cb',
+ '#define SSL_CTX_sess_set_new_cb GRPC_SHADOW_SSL_CTX_sess_set_new_cb',
+ '#define SSL_CTX_sess_set_remove_cb GRPC_SHADOW_SSL_CTX_sess_set_remove_cb',
+ '#define SSL_CTX_set_channel_id_cb GRPC_SHADOW_SSL_CTX_set_channel_id_cb',
+ '#define SSL_CTX_set_info_callback GRPC_SHADOW_SSL_CTX_set_info_callback',
+ '#define SSL_CTX_set_session_psk_dhe_timeout GRPC_SHADOW_SSL_CTX_set_session_psk_dhe_timeout',
+ '#define SSL_CTX_set_timeout GRPC_SHADOW_SSL_CTX_set_timeout',
+ '#define SSL_SESSION_free GRPC_SHADOW_SSL_SESSION_free',
+ '#define SSL_SESSION_get0_peer GRPC_SHADOW_SSL_SESSION_get0_peer',
+ '#define SSL_SESSION_get0_ticket GRPC_SHADOW_SSL_SESSION_get0_ticket',
+ '#define SSL_SESSION_get_ex_data GRPC_SHADOW_SSL_SESSION_get_ex_data',
+ '#define SSL_SESSION_get_ex_new_index GRPC_SHADOW_SSL_SESSION_get_ex_new_index',
+ '#define SSL_SESSION_get_id GRPC_SHADOW_SSL_SESSION_get_id',
+ '#define SSL_SESSION_get_master_key GRPC_SHADOW_SSL_SESSION_get_master_key',
+ '#define SSL_SESSION_get_ticket_lifetime_hint GRPC_SHADOW_SSL_SESSION_get_ticket_lifetime_hint',
+ '#define SSL_SESSION_get_time GRPC_SHADOW_SSL_SESSION_get_time',
+ '#define SSL_SESSION_get_timeout GRPC_SHADOW_SSL_SESSION_get_timeout',
+ '#define SSL_SESSION_has_ticket GRPC_SHADOW_SSL_SESSION_has_ticket',
+ '#define SSL_SESSION_is_resumable GRPC_SHADOW_SSL_SESSION_is_resumable',
+ '#define SSL_SESSION_new GRPC_SHADOW_SSL_SESSION_new',
+ '#define SSL_SESSION_set1_id_context GRPC_SHADOW_SSL_SESSION_set1_id_context',
+ '#define SSL_SESSION_set_ex_data GRPC_SHADOW_SSL_SESSION_set_ex_data',
+ '#define SSL_SESSION_set_time GRPC_SHADOW_SSL_SESSION_set_time',
+ '#define SSL_SESSION_set_timeout GRPC_SHADOW_SSL_SESSION_set_timeout',
+ '#define SSL_SESSION_should_be_single_use GRPC_SHADOW_SSL_SESSION_should_be_single_use',
+ '#define SSL_SESSION_up_ref GRPC_SHADOW_SSL_SESSION_up_ref',
+ '#define SSL_get1_session GRPC_SHADOW_SSL_get1_session',
+ '#define SSL_get_session GRPC_SHADOW_SSL_get_session',
+ '#define SSL_magic_pending_session_ptr GRPC_SHADOW_SSL_magic_pending_session_ptr',
+ '#define SSL_set_session GRPC_SHADOW_SSL_set_session',
+ '#define SSL_alert_desc_string GRPC_SHADOW_SSL_alert_desc_string',
+ '#define SSL_alert_desc_string_long GRPC_SHADOW_SSL_alert_desc_string_long',
+ '#define SSL_alert_type_string GRPC_SHADOW_SSL_alert_type_string',
+ '#define SSL_alert_type_string_long GRPC_SHADOW_SSL_alert_type_string_long',
+ '#define SSL_state_string GRPC_SHADOW_SSL_state_string',
+ '#define SSL_state_string_long GRPC_SHADOW_SSL_state_string_long',
+ '#define SSL_CTX_set_max_proto_version GRPC_SHADOW_SSL_CTX_set_max_proto_version',
+ '#define SSL_CTX_set_min_proto_version GRPC_SHADOW_SSL_CTX_set_min_proto_version',
+ '#define SSL_SESSION_get_protocol_version GRPC_SHADOW_SSL_SESSION_get_protocol_version',
+ '#define SSL_SESSION_get_version GRPC_SHADOW_SSL_SESSION_get_version',
+ '#define SSL_SESSION_set_protocol_version GRPC_SHADOW_SSL_SESSION_set_protocol_version',
+ '#define SSL_get_version GRPC_SHADOW_SSL_get_version',
+ '#define SSL_set_max_proto_version GRPC_SHADOW_SSL_set_max_proto_version',
+ '#define SSL_set_min_proto_version GRPC_SHADOW_SSL_set_min_proto_version',
+ '#define SSL_version GRPC_SHADOW_SSL_version',
+ '#define PEM_read_SSL_SESSION GRPC_SHADOW_PEM_read_SSL_SESSION',
+ '#define PEM_read_bio_SSL_SESSION GRPC_SHADOW_PEM_read_bio_SSL_SESSION',
+ '#define PEM_write_SSL_SESSION GRPC_SHADOW_PEM_write_SSL_SESSION',
+ '#define PEM_write_bio_SSL_SESSION GRPC_SHADOW_PEM_write_bio_SSL_SESSION',
+ '#define SSL_CTX_add0_chain_cert GRPC_SHADOW_SSL_CTX_add0_chain_cert',
+ '#define SSL_CTX_add1_chain_cert GRPC_SHADOW_SSL_CTX_add1_chain_cert',
+ '#define SSL_CTX_add_client_CA GRPC_SHADOW_SSL_CTX_add_client_CA',
+ '#define SSL_CTX_add_extra_chain_cert GRPC_SHADOW_SSL_CTX_add_extra_chain_cert',
+ '#define SSL_CTX_clear_chain_certs GRPC_SHADOW_SSL_CTX_clear_chain_certs',
+ '#define SSL_CTX_clear_extra_chain_certs GRPC_SHADOW_SSL_CTX_clear_extra_chain_certs',
+ '#define SSL_CTX_get0_certificate GRPC_SHADOW_SSL_CTX_get0_certificate',
+ '#define SSL_CTX_get0_chain_certs GRPC_SHADOW_SSL_CTX_get0_chain_certs',
+ '#define SSL_CTX_get0_param GRPC_SHADOW_SSL_CTX_get0_param',
+ '#define SSL_CTX_get_cert_store GRPC_SHADOW_SSL_CTX_get_cert_store',
+ '#define SSL_CTX_get_client_CA_list GRPC_SHADOW_SSL_CTX_get_client_CA_list',
+ '#define SSL_CTX_get_extra_chain_certs GRPC_SHADOW_SSL_CTX_get_extra_chain_certs',
+ '#define SSL_CTX_get_verify_callback GRPC_SHADOW_SSL_CTX_get_verify_callback',
+ '#define SSL_CTX_get_verify_depth GRPC_SHADOW_SSL_CTX_get_verify_depth',
+ '#define SSL_CTX_get_verify_mode GRPC_SHADOW_SSL_CTX_get_verify_mode',
+ '#define SSL_CTX_load_verify_locations GRPC_SHADOW_SSL_CTX_load_verify_locations',
+ '#define SSL_CTX_set0_chain GRPC_SHADOW_SSL_CTX_set0_chain',
+ '#define SSL_CTX_set0_verify_cert_store GRPC_SHADOW_SSL_CTX_set0_verify_cert_store',
+ '#define SSL_CTX_set1_chain GRPC_SHADOW_SSL_CTX_set1_chain',
+ '#define SSL_CTX_set1_param GRPC_SHADOW_SSL_CTX_set1_param',
+ '#define SSL_CTX_set1_verify_cert_store GRPC_SHADOW_SSL_CTX_set1_verify_cert_store',
+ '#define SSL_CTX_set_cert_store GRPC_SHADOW_SSL_CTX_set_cert_store',
+ '#define SSL_CTX_set_cert_verify_callback GRPC_SHADOW_SSL_CTX_set_cert_verify_callback',
+ '#define SSL_CTX_set_client_CA_list GRPC_SHADOW_SSL_CTX_set_client_CA_list',
+ '#define SSL_CTX_set_client_cert_cb GRPC_SHADOW_SSL_CTX_set_client_cert_cb',
+ '#define SSL_CTX_set_default_verify_paths GRPC_SHADOW_SSL_CTX_set_default_verify_paths',
+ '#define SSL_CTX_set_purpose GRPC_SHADOW_SSL_CTX_set_purpose',
+ '#define SSL_CTX_set_trust GRPC_SHADOW_SSL_CTX_set_trust',
+ '#define SSL_CTX_set_verify GRPC_SHADOW_SSL_CTX_set_verify',
+ '#define SSL_CTX_set_verify_depth GRPC_SHADOW_SSL_CTX_set_verify_depth',
+ '#define SSL_CTX_use_certificate GRPC_SHADOW_SSL_CTX_use_certificate',
+ '#define SSL_add0_chain_cert GRPC_SHADOW_SSL_add0_chain_cert',
+ '#define SSL_add1_chain_cert GRPC_SHADOW_SSL_add1_chain_cert',
+ '#define SSL_add_client_CA GRPC_SHADOW_SSL_add_client_CA',
+ '#define SSL_alert_from_verify_result GRPC_SHADOW_SSL_alert_from_verify_result',
+ '#define SSL_clear_chain_certs GRPC_SHADOW_SSL_clear_chain_certs',
+ '#define SSL_dup_CA_list GRPC_SHADOW_SSL_dup_CA_list',
+ '#define SSL_get0_chain_certs GRPC_SHADOW_SSL_get0_chain_certs',
+ '#define SSL_get0_param GRPC_SHADOW_SSL_get0_param',
+ '#define SSL_get_certificate GRPC_SHADOW_SSL_get_certificate',
+ '#define SSL_get_client_CA_list GRPC_SHADOW_SSL_get_client_CA_list',
+ '#define SSL_get_ex_data_X509_STORE_CTX_idx GRPC_SHADOW_SSL_get_ex_data_X509_STORE_CTX_idx',
+ '#define SSL_get_peer_cert_chain GRPC_SHADOW_SSL_get_peer_cert_chain',
+ '#define SSL_get_peer_certificate GRPC_SHADOW_SSL_get_peer_certificate',
+ '#define SSL_get_peer_full_cert_chain GRPC_SHADOW_SSL_get_peer_full_cert_chain',
+ '#define SSL_get_verify_callback GRPC_SHADOW_SSL_get_verify_callback',
+ '#define SSL_get_verify_depth GRPC_SHADOW_SSL_get_verify_depth',
+ '#define SSL_get_verify_result GRPC_SHADOW_SSL_get_verify_result',
+ '#define SSL_set0_chain GRPC_SHADOW_SSL_set0_chain',
+ '#define SSL_set0_verify_cert_store GRPC_SHADOW_SSL_set0_verify_cert_store',
+ '#define SSL_set1_chain GRPC_SHADOW_SSL_set1_chain',
+ '#define SSL_set1_param GRPC_SHADOW_SSL_set1_param',
+ '#define SSL_set1_verify_cert_store GRPC_SHADOW_SSL_set1_verify_cert_store',
+ '#define SSL_set_client_CA_list GRPC_SHADOW_SSL_set_client_CA_list',
+ '#define SSL_set_purpose GRPC_SHADOW_SSL_set_purpose',
+ '#define SSL_set_trust GRPC_SHADOW_SSL_set_trust',
+ '#define SSL_set_verify GRPC_SHADOW_SSL_set_verify',
+ '#define SSL_set_verify_depth GRPC_SHADOW_SSL_set_verify_depth',
+ '#define SSL_set_verify_result GRPC_SHADOW_SSL_set_verify_result',
+ '#define SSL_use_certificate GRPC_SHADOW_SSL_use_certificate',
+ '#define d2i_SSL_SESSION GRPC_SHADOW_d2i_SSL_SESSION',
+ '#define d2i_SSL_SESSION_bio GRPC_SHADOW_d2i_SSL_SESSION_bio',
+ '#define i2d_SSL_SESSION_bio GRPC_SHADOW_i2d_SSL_SESSION_bio',
+ '#define SSL_export_early_keying_material GRPC_SHADOW_SSL_export_early_keying_material',
+ '#define SSL_export_keying_material GRPC_SHADOW_SSL_export_keying_material',
+ '#define SSL_generate_key_block GRPC_SHADOW_SSL_generate_key_block',
+ '#define SSL_get_key_block_len GRPC_SHADOW_SSL_get_key_block_len',
+ '#define SSL_CTX_set_ed25519_enabled GRPC_SHADOW_SSL_CTX_set_ed25519_enabled',
+ '#define SSL_early_callback_ctx_extension_get GRPC_SHADOW_SSL_early_callback_ctx_extension_get',
+ '#define SSL_extension_supported GRPC_SHADOW_SSL_extension_supported',
+ '#define SSLv23_client_method GRPC_SHADOW_SSLv23_client_method',
+ '#define SSLv23_method GRPC_SHADOW_SSLv23_method',
+ '#define SSLv23_server_method GRPC_SHADOW_SSLv23_server_method',
+ '#define TLS_client_method GRPC_SHADOW_TLS_client_method',
+ '#define TLS_method GRPC_SHADOW_TLS_method',
+ '#define TLS_server_method GRPC_SHADOW_TLS_server_method',
+ '#define TLS_with_buffers_method GRPC_SHADOW_TLS_with_buffers_method',
+ '#define TLSv1_1_client_method GRPC_SHADOW_TLSv1_1_client_method',
+ '#define TLSv1_1_method GRPC_SHADOW_TLSv1_1_method',
+ '#define TLSv1_1_server_method GRPC_SHADOW_TLSv1_1_server_method',
+ '#define TLSv1_2_client_method GRPC_SHADOW_TLSv1_2_client_method',
+ '#define TLSv1_2_method GRPC_SHADOW_TLSv1_2_method',
+ '#define TLSv1_2_server_method GRPC_SHADOW_TLSv1_2_server_method',
+ '#define TLSv1_client_method GRPC_SHADOW_TLSv1_client_method',
+ '#define TLSv1_method GRPC_SHADOW_TLSv1_method',
+ '#define TLSv1_server_method GRPC_SHADOW_TLSv1_server_method',
+ '#define SSL_max_seal_overhead GRPC_SHADOW_SSL_max_seal_overhead',
+ '#define OPENSSL_cpuid_setup GRPC_SHADOW_OPENSSL_cpuid_setup',
+ '#define CRYPTO_has_asm GRPC_SHADOW_CRYPTO_has_asm',
+ '#define CRYPTO_is_confidential_build GRPC_SHADOW_CRYPTO_is_confidential_build',
+ '#define CRYPTO_library_init GRPC_SHADOW_CRYPTO_library_init',
+ '#define CRYPTO_malloc_init GRPC_SHADOW_CRYPTO_malloc_init',
+ '#define ENGINE_load_builtin_engines GRPC_SHADOW_ENGINE_load_builtin_engines',
+ '#define ENGINE_register_all_complete GRPC_SHADOW_ENGINE_register_all_complete',
+ '#define OPENSSL_ia32cap_P GRPC_SHADOW_OPENSSL_ia32cap_P',
+ '#define OPENSSL_init_crypto GRPC_SHADOW_OPENSSL_init_crypto',
+ '#define OPENSSL_load_builtin_modules GRPC_SHADOW_OPENSSL_load_builtin_modules',
+ '#define OpenSSL_version GRPC_SHADOW_OpenSSL_version',
+ '#define OpenSSL_version_num GRPC_SHADOW_OpenSSL_version_num',
+ '#define SSLeay GRPC_SHADOW_SSLeay',
+ '#define SSLeay_version GRPC_SHADOW_SSLeay_version',
+ '#define CRYPTO_cleanup_all_ex_data GRPC_SHADOW_CRYPTO_cleanup_all_ex_data',
+ '#define CRYPTO_free_ex_data GRPC_SHADOW_CRYPTO_free_ex_data',
+ '#define CRYPTO_get_ex_data GRPC_SHADOW_CRYPTO_get_ex_data',
+ '#define CRYPTO_get_ex_new_index GRPC_SHADOW_CRYPTO_get_ex_new_index',
+ '#define CRYPTO_new_ex_data GRPC_SHADOW_CRYPTO_new_ex_data',
+ '#define CRYPTO_set_ex_data GRPC_SHADOW_CRYPTO_set_ex_data',
+ '#define BIO_snprintf GRPC_SHADOW_BIO_snprintf',
+ '#define BIO_vsnprintf GRPC_SHADOW_BIO_vsnprintf',
+ '#define CRYPTO_memcmp GRPC_SHADOW_CRYPTO_memcmp',
+ '#define OPENSSL_cleanse GRPC_SHADOW_OPENSSL_cleanse',
+ '#define OPENSSL_free GRPC_SHADOW_OPENSSL_free',
+ '#define OPENSSL_hash32 GRPC_SHADOW_OPENSSL_hash32',
+ '#define OPENSSL_malloc GRPC_SHADOW_OPENSSL_malloc',
+ '#define OPENSSL_realloc GRPC_SHADOW_OPENSSL_realloc',
+ '#define OPENSSL_strcasecmp GRPC_SHADOW_OPENSSL_strcasecmp',
+ '#define OPENSSL_strdup GRPC_SHADOW_OPENSSL_strdup',
+ '#define OPENSSL_strncasecmp GRPC_SHADOW_OPENSSL_strncasecmp',
+ '#define OPENSSL_strnlen GRPC_SHADOW_OPENSSL_strnlen',
+ '#define OPENSSL_tolower GRPC_SHADOW_OPENSSL_tolower',
+ '#define CRYPTO_refcount_dec_and_test_zero GRPC_SHADOW_CRYPTO_refcount_dec_and_test_zero',
+ '#define CRYPTO_refcount_inc GRPC_SHADOW_CRYPTO_refcount_inc',
+ '#define CRYPTO_THREADID_current GRPC_SHADOW_CRYPTO_THREADID_current',
+ '#define CRYPTO_THREADID_set_callback GRPC_SHADOW_CRYPTO_THREADID_set_callback',
+ '#define CRYPTO_THREADID_set_numeric GRPC_SHADOW_CRYPTO_THREADID_set_numeric',
+ '#define CRYPTO_THREADID_set_pointer GRPC_SHADOW_CRYPTO_THREADID_set_pointer',
+ '#define CRYPTO_get_dynlock_create_callback GRPC_SHADOW_CRYPTO_get_dynlock_create_callback',
+ '#define CRYPTO_get_dynlock_destroy_callback GRPC_SHADOW_CRYPTO_get_dynlock_destroy_callback',
+ '#define CRYPTO_get_dynlock_lock_callback GRPC_SHADOW_CRYPTO_get_dynlock_lock_callback',
+ '#define CRYPTO_get_lock_name GRPC_SHADOW_CRYPTO_get_lock_name',
+ '#define CRYPTO_get_locking_callback GRPC_SHADOW_CRYPTO_get_locking_callback',
+ '#define CRYPTO_num_locks GRPC_SHADOW_CRYPTO_num_locks',
+ '#define CRYPTO_set_add_lock_callback GRPC_SHADOW_CRYPTO_set_add_lock_callback',
+ '#define CRYPTO_set_dynlock_create_callback GRPC_SHADOW_CRYPTO_set_dynlock_create_callback',
+ '#define CRYPTO_set_dynlock_destroy_callback GRPC_SHADOW_CRYPTO_set_dynlock_destroy_callback',
+ '#define CRYPTO_set_dynlock_lock_callback GRPC_SHADOW_CRYPTO_set_dynlock_lock_callback',
+ '#define CRYPTO_set_id_callback GRPC_SHADOW_CRYPTO_set_id_callback',
+ '#define CRYPTO_set_locking_callback GRPC_SHADOW_CRYPTO_set_locking_callback',
+ '#define CRYPTO_MUTEX_cleanup GRPC_SHADOW_CRYPTO_MUTEX_cleanup',
+ '#define CRYPTO_MUTEX_init GRPC_SHADOW_CRYPTO_MUTEX_init',
+ '#define CRYPTO_MUTEX_lock_read GRPC_SHADOW_CRYPTO_MUTEX_lock_read',
+ '#define CRYPTO_MUTEX_lock_write GRPC_SHADOW_CRYPTO_MUTEX_lock_write',
+ '#define CRYPTO_MUTEX_unlock_read GRPC_SHADOW_CRYPTO_MUTEX_unlock_read',
+ '#define CRYPTO_MUTEX_unlock_write GRPC_SHADOW_CRYPTO_MUTEX_unlock_write',
+ '#define CRYPTO_STATIC_MUTEX_lock_read GRPC_SHADOW_CRYPTO_STATIC_MUTEX_lock_read',
+ '#define CRYPTO_STATIC_MUTEX_lock_write GRPC_SHADOW_CRYPTO_STATIC_MUTEX_lock_write',
+ '#define CRYPTO_STATIC_MUTEX_unlock_read GRPC_SHADOW_CRYPTO_STATIC_MUTEX_unlock_read',
+ '#define CRYPTO_STATIC_MUTEX_unlock_write GRPC_SHADOW_CRYPTO_STATIC_MUTEX_unlock_write',
+ '#define CRYPTO_get_thread_local GRPC_SHADOW_CRYPTO_get_thread_local',
+ '#define CRYPTO_once GRPC_SHADOW_CRYPTO_once',
+ '#define CRYPTO_set_thread_local GRPC_SHADOW_CRYPTO_set_thread_local',
+ '#define sk_deep_copy GRPC_SHADOW_sk_deep_copy',
+ '#define sk_delete GRPC_SHADOW_sk_delete',
+ '#define sk_delete_ptr GRPC_SHADOW_sk_delete_ptr',
+ '#define sk_dup GRPC_SHADOW_sk_dup',
+ '#define sk_find GRPC_SHADOW_sk_find',
+ '#define sk_free GRPC_SHADOW_sk_free',
+ '#define sk_insert GRPC_SHADOW_sk_insert',
+ '#define sk_is_sorted GRPC_SHADOW_sk_is_sorted',
+ '#define sk_new GRPC_SHADOW_sk_new',
+ '#define sk_new_null GRPC_SHADOW_sk_new_null',
+ '#define sk_num GRPC_SHADOW_sk_num',
+ '#define sk_pop GRPC_SHADOW_sk_pop',
+ '#define sk_pop_free GRPC_SHADOW_sk_pop_free',
+ '#define sk_push GRPC_SHADOW_sk_push',
+ '#define sk_set GRPC_SHADOW_sk_set',
+ '#define sk_set_cmp_func GRPC_SHADOW_sk_set_cmp_func',
+ '#define sk_shift GRPC_SHADOW_sk_shift',
+ '#define sk_sort GRPC_SHADOW_sk_sort',
+ '#define sk_value GRPC_SHADOW_sk_value',
+ '#define sk_zero GRPC_SHADOW_sk_zero',
+ '#define lh_delete GRPC_SHADOW_lh_delete',
+ '#define lh_doall GRPC_SHADOW_lh_doall',
+ '#define lh_doall_arg GRPC_SHADOW_lh_doall_arg',
+ '#define lh_free GRPC_SHADOW_lh_free',
+ '#define lh_insert GRPC_SHADOW_lh_insert',
+ '#define lh_new GRPC_SHADOW_lh_new',
+ '#define lh_num_items GRPC_SHADOW_lh_num_items',
+ '#define lh_retrieve GRPC_SHADOW_lh_retrieve',
+ '#define lh_strhash GRPC_SHADOW_lh_strhash',
+ '#define ERR_SAVE_STATE_free GRPC_SHADOW_ERR_SAVE_STATE_free',
+ '#define ERR_add_error_data GRPC_SHADOW_ERR_add_error_data',
+ '#define ERR_add_error_dataf GRPC_SHADOW_ERR_add_error_dataf',
+ '#define ERR_clear_error GRPC_SHADOW_ERR_clear_error',
+ '#define ERR_clear_system_error GRPC_SHADOW_ERR_clear_system_error',
+ '#define ERR_error_string GRPC_SHADOW_ERR_error_string',
+ '#define ERR_error_string_n GRPC_SHADOW_ERR_error_string_n',
+ '#define ERR_free_strings GRPC_SHADOW_ERR_free_strings',
+ '#define ERR_func_error_string GRPC_SHADOW_ERR_func_error_string',
+ '#define ERR_get_error GRPC_SHADOW_ERR_get_error',
+ '#define ERR_get_error_line GRPC_SHADOW_ERR_get_error_line',
+ '#define ERR_get_error_line_data GRPC_SHADOW_ERR_get_error_line_data',
+ '#define ERR_get_next_error_library GRPC_SHADOW_ERR_get_next_error_library',
+ '#define ERR_lib_error_string GRPC_SHADOW_ERR_lib_error_string',
+ '#define ERR_load_BIO_strings GRPC_SHADOW_ERR_load_BIO_strings',
+ '#define ERR_load_ERR_strings GRPC_SHADOW_ERR_load_ERR_strings',
+ '#define ERR_load_crypto_strings GRPC_SHADOW_ERR_load_crypto_strings',
+ '#define ERR_peek_error GRPC_SHADOW_ERR_peek_error',
+ '#define ERR_peek_error_line GRPC_SHADOW_ERR_peek_error_line',
+ '#define ERR_peek_error_line_data GRPC_SHADOW_ERR_peek_error_line_data',
+ '#define ERR_peek_last_error GRPC_SHADOW_ERR_peek_last_error',
+ '#define ERR_peek_last_error_line GRPC_SHADOW_ERR_peek_last_error_line',
+ '#define ERR_peek_last_error_line_data GRPC_SHADOW_ERR_peek_last_error_line_data',
+ '#define ERR_pop_to_mark GRPC_SHADOW_ERR_pop_to_mark',
+ '#define ERR_print_errors_cb GRPC_SHADOW_ERR_print_errors_cb',
+ '#define ERR_print_errors_fp GRPC_SHADOW_ERR_print_errors_fp',
+ '#define ERR_put_error GRPC_SHADOW_ERR_put_error',
+ '#define ERR_reason_error_string GRPC_SHADOW_ERR_reason_error_string',
+ '#define ERR_remove_state GRPC_SHADOW_ERR_remove_state',
+ '#define ERR_remove_thread_state GRPC_SHADOW_ERR_remove_thread_state',
+ '#define ERR_restore_state GRPC_SHADOW_ERR_restore_state',
+ '#define ERR_save_state GRPC_SHADOW_ERR_save_state',
+ '#define ERR_set_mark GRPC_SHADOW_ERR_set_mark',
+ '#define kOpenSSLReasonStringData GRPC_SHADOW_kOpenSSLReasonStringData',
+ '#define kOpenSSLReasonValues GRPC_SHADOW_kOpenSSLReasonValues',
+ '#define kOpenSSLReasonValuesLen GRPC_SHADOW_kOpenSSLReasonValuesLen',
+ '#define EVP_DecodeBase64 GRPC_SHADOW_EVP_DecodeBase64',
+ '#define EVP_DecodeBlock GRPC_SHADOW_EVP_DecodeBlock',
+ '#define EVP_DecodeFinal GRPC_SHADOW_EVP_DecodeFinal',
+ '#define EVP_DecodeInit GRPC_SHADOW_EVP_DecodeInit',
+ '#define EVP_DecodeUpdate GRPC_SHADOW_EVP_DecodeUpdate',
+ '#define EVP_DecodedLength GRPC_SHADOW_EVP_DecodedLength',
+ '#define EVP_EncodeBlock GRPC_SHADOW_EVP_EncodeBlock',
+ '#define EVP_EncodeFinal GRPC_SHADOW_EVP_EncodeFinal',
+ '#define EVP_EncodeInit GRPC_SHADOW_EVP_EncodeInit',
+ '#define EVP_EncodeUpdate GRPC_SHADOW_EVP_EncodeUpdate',
+ '#define EVP_EncodedLength GRPC_SHADOW_EVP_EncodedLength',
+ '#define CBB_finish_i2d GRPC_SHADOW_CBB_finish_i2d',
+ '#define CBS_asn1_ber_to_der GRPC_SHADOW_CBS_asn1_ber_to_der',
+ '#define CBS_get_asn1_implicit_string GRPC_SHADOW_CBS_get_asn1_implicit_string',
+ '#define CBS_asn1_bitstring_has_bit GRPC_SHADOW_CBS_asn1_bitstring_has_bit',
+ '#define CBS_asn1_oid_to_text GRPC_SHADOW_CBS_asn1_oid_to_text',
+ '#define CBS_contains_zero_byte GRPC_SHADOW_CBS_contains_zero_byte',
+ '#define CBS_copy_bytes GRPC_SHADOW_CBS_copy_bytes',
+ '#define CBS_data GRPC_SHADOW_CBS_data',
+ '#define CBS_get_any_asn1 GRPC_SHADOW_CBS_get_any_asn1',
+ '#define CBS_get_any_asn1_element GRPC_SHADOW_CBS_get_any_asn1_element',
+ '#define CBS_get_any_ber_asn1_element GRPC_SHADOW_CBS_get_any_ber_asn1_element',
+ '#define CBS_get_asn1 GRPC_SHADOW_CBS_get_asn1',
+ '#define CBS_get_asn1_bool GRPC_SHADOW_CBS_get_asn1_bool',
+ '#define CBS_get_asn1_element GRPC_SHADOW_CBS_get_asn1_element',
+ '#define CBS_get_asn1_uint64 GRPC_SHADOW_CBS_get_asn1_uint64',
+ '#define CBS_get_bytes GRPC_SHADOW_CBS_get_bytes',
+ '#define CBS_get_last_u8 GRPC_SHADOW_CBS_get_last_u8',
+ '#define CBS_get_optional_asn1 GRPC_SHADOW_CBS_get_optional_asn1',
+ '#define CBS_get_optional_asn1_bool GRPC_SHADOW_CBS_get_optional_asn1_bool',
+ '#define CBS_get_optional_asn1_octet_string GRPC_SHADOW_CBS_get_optional_asn1_octet_string',
+ '#define CBS_get_optional_asn1_uint64 GRPC_SHADOW_CBS_get_optional_asn1_uint64',
+ '#define CBS_get_u16 GRPC_SHADOW_CBS_get_u16',
+ '#define CBS_get_u16_length_prefixed GRPC_SHADOW_CBS_get_u16_length_prefixed',
+ '#define CBS_get_u24 GRPC_SHADOW_CBS_get_u24',
+ '#define CBS_get_u24_length_prefixed GRPC_SHADOW_CBS_get_u24_length_prefixed',
+ '#define CBS_get_u32 GRPC_SHADOW_CBS_get_u32',
+ '#define CBS_get_u8 GRPC_SHADOW_CBS_get_u8',
+ '#define CBS_get_u8_length_prefixed GRPC_SHADOW_CBS_get_u8_length_prefixed',
+ '#define CBS_init GRPC_SHADOW_CBS_init',
+ '#define CBS_is_valid_asn1_bitstring GRPC_SHADOW_CBS_is_valid_asn1_bitstring',
+ '#define CBS_len GRPC_SHADOW_CBS_len',
+ '#define CBS_mem_equal GRPC_SHADOW_CBS_mem_equal',
+ '#define CBS_peek_asn1_tag GRPC_SHADOW_CBS_peek_asn1_tag',
+ '#define CBS_skip GRPC_SHADOW_CBS_skip',
+ '#define CBS_stow GRPC_SHADOW_CBS_stow',
+ '#define CBS_strdup GRPC_SHADOW_CBS_strdup',
+ '#define CBB_add_asn1 GRPC_SHADOW_CBB_add_asn1',
+ '#define CBB_add_asn1_bool GRPC_SHADOW_CBB_add_asn1_bool',
+ '#define CBB_add_asn1_octet_string GRPC_SHADOW_CBB_add_asn1_octet_string',
+ '#define CBB_add_asn1_oid_from_text GRPC_SHADOW_CBB_add_asn1_oid_from_text',
+ '#define CBB_add_asn1_uint64 GRPC_SHADOW_CBB_add_asn1_uint64',
+ '#define CBB_add_bytes GRPC_SHADOW_CBB_add_bytes',
+ '#define CBB_add_space GRPC_SHADOW_CBB_add_space',
+ '#define CBB_add_u16 GRPC_SHADOW_CBB_add_u16',
+ '#define CBB_add_u16_length_prefixed GRPC_SHADOW_CBB_add_u16_length_prefixed',
+ '#define CBB_add_u24 GRPC_SHADOW_CBB_add_u24',
+ '#define CBB_add_u24_length_prefixed GRPC_SHADOW_CBB_add_u24_length_prefixed',
+ '#define CBB_add_u32 GRPC_SHADOW_CBB_add_u32',
+ '#define CBB_add_u8 GRPC_SHADOW_CBB_add_u8',
+ '#define CBB_add_u8_length_prefixed GRPC_SHADOW_CBB_add_u8_length_prefixed',
+ '#define CBB_cleanup GRPC_SHADOW_CBB_cleanup',
+ '#define CBB_data GRPC_SHADOW_CBB_data',
+ '#define CBB_did_write GRPC_SHADOW_CBB_did_write',
+ '#define CBB_discard_child GRPC_SHADOW_CBB_discard_child',
+ '#define CBB_finish GRPC_SHADOW_CBB_finish',
+ '#define CBB_flush GRPC_SHADOW_CBB_flush',
+ '#define CBB_flush_asn1_set_of GRPC_SHADOW_CBB_flush_asn1_set_of',
+ '#define CBB_init GRPC_SHADOW_CBB_init',
+ '#define CBB_init_fixed GRPC_SHADOW_CBB_init_fixed',
+ '#define CBB_len GRPC_SHADOW_CBB_len',
+ '#define CBB_reserve GRPC_SHADOW_CBB_reserve',
+ '#define CBB_zero GRPC_SHADOW_CBB_zero',
+ '#define CRYPTO_BUFFER_POOL_free GRPC_SHADOW_CRYPTO_BUFFER_POOL_free',
+ '#define CRYPTO_BUFFER_POOL_new GRPC_SHADOW_CRYPTO_BUFFER_POOL_new',
+ '#define CRYPTO_BUFFER_data GRPC_SHADOW_CRYPTO_BUFFER_data',
+ '#define CRYPTO_BUFFER_free GRPC_SHADOW_CRYPTO_BUFFER_free',
+ '#define CRYPTO_BUFFER_init_CBS GRPC_SHADOW_CRYPTO_BUFFER_init_CBS',
+ '#define CRYPTO_BUFFER_len GRPC_SHADOW_CRYPTO_BUFFER_len',
+ '#define CRYPTO_BUFFER_new GRPC_SHADOW_CRYPTO_BUFFER_new',
+ '#define CRYPTO_BUFFER_new_from_CBS GRPC_SHADOW_CRYPTO_BUFFER_new_from_CBS',
+ '#define CRYPTO_BUFFER_up_ref GRPC_SHADOW_CRYPTO_BUFFER_up_ref',
+ '#define AES_cbc_encrypt GRPC_SHADOW_AES_cbc_encrypt',
+ '#define AES_cfb128_encrypt GRPC_SHADOW_AES_cfb128_encrypt',
+ '#define AES_ctr128_encrypt GRPC_SHADOW_AES_ctr128_encrypt',
+ '#define AES_decrypt GRPC_SHADOW_AES_decrypt',
+ '#define AES_ecb_encrypt GRPC_SHADOW_AES_ecb_encrypt',
+ '#define AES_encrypt GRPC_SHADOW_AES_encrypt',
+ '#define AES_ofb128_encrypt GRPC_SHADOW_AES_ofb128_encrypt',
+ '#define AES_set_decrypt_key GRPC_SHADOW_AES_set_decrypt_key',
+ '#define AES_set_encrypt_key GRPC_SHADOW_AES_set_encrypt_key',
+ '#define AES_unwrap_key GRPC_SHADOW_AES_unwrap_key',
+ '#define AES_wrap_key GRPC_SHADOW_AES_wrap_key',
+ '#define BN_BLINDING_convert GRPC_SHADOW_BN_BLINDING_convert',
+ '#define BN_BLINDING_free GRPC_SHADOW_BN_BLINDING_free',
+ '#define BN_BLINDING_invert GRPC_SHADOW_BN_BLINDING_invert',
+ '#define BN_BLINDING_new GRPC_SHADOW_BN_BLINDING_new',
+ '#define BN_CTX_end GRPC_SHADOW_BN_CTX_end',
+ '#define BN_CTX_free GRPC_SHADOW_BN_CTX_free',
+ '#define BN_CTX_get GRPC_SHADOW_BN_CTX_get',
+ '#define BN_CTX_new GRPC_SHADOW_BN_CTX_new',
+ '#define BN_CTX_start GRPC_SHADOW_BN_CTX_start',
+ '#define BN_GENCB_call GRPC_SHADOW_BN_GENCB_call',
+ '#define BN_GENCB_set GRPC_SHADOW_BN_GENCB_set',
+ '#define BN_MONT_CTX_copy GRPC_SHADOW_BN_MONT_CTX_copy',
+ '#define BN_MONT_CTX_free GRPC_SHADOW_BN_MONT_CTX_free',
+ '#define BN_MONT_CTX_new GRPC_SHADOW_BN_MONT_CTX_new',
+ '#define BN_MONT_CTX_new_for_modulus GRPC_SHADOW_BN_MONT_CTX_new_for_modulus',
+ '#define BN_MONT_CTX_set GRPC_SHADOW_BN_MONT_CTX_set',
+ '#define BN_MONT_CTX_set_locked GRPC_SHADOW_BN_MONT_CTX_set_locked',
+ '#define BN_abs_is_word GRPC_SHADOW_BN_abs_is_word',
+ '#define BN_add GRPC_SHADOW_BN_add',
+ '#define BN_add_word GRPC_SHADOW_BN_add_word',
+ '#define BN_bin2bn GRPC_SHADOW_BN_bin2bn',
+ '#define BN_bn2bin GRPC_SHADOW_BN_bn2bin',
+ '#define BN_bn2bin_padded GRPC_SHADOW_BN_bn2bin_padded',
+ '#define BN_bn2le_padded GRPC_SHADOW_BN_bn2le_padded',
+ '#define BN_clear GRPC_SHADOW_BN_clear',
+ '#define BN_clear_bit GRPC_SHADOW_BN_clear_bit',
+ '#define BN_clear_free GRPC_SHADOW_BN_clear_free',
+ '#define BN_cmp GRPC_SHADOW_BN_cmp',
+ '#define BN_cmp_word GRPC_SHADOW_BN_cmp_word',
+ '#define BN_copy GRPC_SHADOW_BN_copy',
+ '#define BN_count_low_zero_bits GRPC_SHADOW_BN_count_low_zero_bits',
+ '#define BN_div GRPC_SHADOW_BN_div',
+ '#define BN_div_word GRPC_SHADOW_BN_div_word',
+ '#define BN_dup GRPC_SHADOW_BN_dup',
+ '#define BN_enhanced_miller_rabin_primality_test GRPC_SHADOW_BN_enhanced_miller_rabin_primality_test',
+ '#define BN_equal_consttime GRPC_SHADOW_BN_equal_consttime',
+ '#define BN_exp GRPC_SHADOW_BN_exp',
+ '#define BN_free GRPC_SHADOW_BN_free',
+ '#define BN_from_montgomery GRPC_SHADOW_BN_from_montgomery',
+ '#define BN_gcd GRPC_SHADOW_BN_gcd',
+ '#define BN_generate_prime_ex GRPC_SHADOW_BN_generate_prime_ex',
+ '#define BN_get_u64 GRPC_SHADOW_BN_get_u64',
+ '#define BN_get_word GRPC_SHADOW_BN_get_word',
+ '#define BN_init GRPC_SHADOW_BN_init',
+ '#define BN_is_bit_set GRPC_SHADOW_BN_is_bit_set',
+ '#define BN_is_negative GRPC_SHADOW_BN_is_negative',
+ '#define BN_is_odd GRPC_SHADOW_BN_is_odd',
+ '#define BN_is_one GRPC_SHADOW_BN_is_one',
+ '#define BN_is_pow2 GRPC_SHADOW_BN_is_pow2',
+ '#define BN_is_prime_ex GRPC_SHADOW_BN_is_prime_ex',
+ '#define BN_is_prime_fasttest_ex GRPC_SHADOW_BN_is_prime_fasttest_ex',
+ '#define BN_is_word GRPC_SHADOW_BN_is_word',
+ '#define BN_is_zero GRPC_SHADOW_BN_is_zero',
+ '#define BN_le2bn GRPC_SHADOW_BN_le2bn',
+ '#define BN_lshift GRPC_SHADOW_BN_lshift',
+ '#define BN_lshift1 GRPC_SHADOW_BN_lshift1',
+ '#define BN_mask_bits GRPC_SHADOW_BN_mask_bits',
+ '#define BN_mod_add GRPC_SHADOW_BN_mod_add',
+ '#define BN_mod_add_quick GRPC_SHADOW_BN_mod_add_quick',
+ '#define BN_mod_exp GRPC_SHADOW_BN_mod_exp',
+ '#define BN_mod_exp2_mont GRPC_SHADOW_BN_mod_exp2_mont',
+ '#define BN_mod_exp_mont GRPC_SHADOW_BN_mod_exp_mont',
+ '#define BN_mod_exp_mont_consttime GRPC_SHADOW_BN_mod_exp_mont_consttime',
+ '#define BN_mod_exp_mont_word GRPC_SHADOW_BN_mod_exp_mont_word',
+ '#define BN_mod_inverse GRPC_SHADOW_BN_mod_inverse',
+ '#define BN_mod_inverse_blinded GRPC_SHADOW_BN_mod_inverse_blinded',
+ '#define BN_mod_inverse_odd GRPC_SHADOW_BN_mod_inverse_odd',
+ '#define BN_mod_lshift GRPC_SHADOW_BN_mod_lshift',
+ '#define BN_mod_lshift1 GRPC_SHADOW_BN_mod_lshift1',
+ '#define BN_mod_lshift1_quick GRPC_SHADOW_BN_mod_lshift1_quick',
+ '#define BN_mod_lshift_quick GRPC_SHADOW_BN_mod_lshift_quick',
+ '#define BN_mod_mul GRPC_SHADOW_BN_mod_mul',
+ '#define BN_mod_mul_montgomery GRPC_SHADOW_BN_mod_mul_montgomery',
+ '#define BN_mod_pow2 GRPC_SHADOW_BN_mod_pow2',
+ '#define BN_mod_sqr GRPC_SHADOW_BN_mod_sqr',
+ '#define BN_mod_sqrt GRPC_SHADOW_BN_mod_sqrt',
+ '#define BN_mod_sub GRPC_SHADOW_BN_mod_sub',
+ '#define BN_mod_sub_quick GRPC_SHADOW_BN_mod_sub_quick',
+ '#define BN_mod_word GRPC_SHADOW_BN_mod_word',
+ '#define BN_mul GRPC_SHADOW_BN_mul',
+ '#define BN_mul_word GRPC_SHADOW_BN_mul_word',
+ '#define BN_new GRPC_SHADOW_BN_new',
+ '#define BN_nnmod GRPC_SHADOW_BN_nnmod',
+ '#define BN_nnmod_pow2 GRPC_SHADOW_BN_nnmod_pow2',
+ '#define BN_num_bits GRPC_SHADOW_BN_num_bits',
+ '#define BN_num_bits_word GRPC_SHADOW_BN_num_bits_word',
+ '#define BN_num_bytes GRPC_SHADOW_BN_num_bytes',
+ '#define BN_one GRPC_SHADOW_BN_one',
+ '#define BN_primality_test GRPC_SHADOW_BN_primality_test',
+ '#define BN_pseudo_rand GRPC_SHADOW_BN_pseudo_rand',
+ '#define BN_pseudo_rand_range GRPC_SHADOW_BN_pseudo_rand_range',
+ '#define BN_rand GRPC_SHADOW_BN_rand',
+ '#define BN_rand_range GRPC_SHADOW_BN_rand_range',
+ '#define BN_rand_range_ex GRPC_SHADOW_BN_rand_range_ex',
+ '#define BN_rshift GRPC_SHADOW_BN_rshift',
+ '#define BN_rshift1 GRPC_SHADOW_BN_rshift1',
+ '#define BN_set_bit GRPC_SHADOW_BN_set_bit',
+ '#define BN_set_negative GRPC_SHADOW_BN_set_negative',
+ '#define BN_set_u64 GRPC_SHADOW_BN_set_u64',
+ '#define BN_set_word GRPC_SHADOW_BN_set_word',
+ '#define BN_sqr GRPC_SHADOW_BN_sqr',
+ '#define BN_sqrt GRPC_SHADOW_BN_sqrt',
+ '#define BN_sub GRPC_SHADOW_BN_sub',
+ '#define BN_sub_word GRPC_SHADOW_BN_sub_word',
+ '#define BN_to_montgomery GRPC_SHADOW_BN_to_montgomery',
+ '#define BN_uadd GRPC_SHADOW_BN_uadd',
+ '#define BN_ucmp GRPC_SHADOW_BN_ucmp',
+ '#define BN_usub GRPC_SHADOW_BN_usub',
+ '#define BN_value_one GRPC_SHADOW_BN_value_one',
+ '#define BN_zero GRPC_SHADOW_BN_zero',
+ '#define BORINGSSL_self_test GRPC_SHADOW_BORINGSSL_self_test',
+ '#define CRYPTO_POLYVAL_finish GRPC_SHADOW_CRYPTO_POLYVAL_finish',
+ '#define CRYPTO_POLYVAL_init GRPC_SHADOW_CRYPTO_POLYVAL_init',
+ '#define CRYPTO_POLYVAL_update_blocks GRPC_SHADOW_CRYPTO_POLYVAL_update_blocks',
+ '#define CRYPTO_cbc128_decrypt GRPC_SHADOW_CRYPTO_cbc128_decrypt',
+ '#define CRYPTO_cbc128_encrypt GRPC_SHADOW_CRYPTO_cbc128_encrypt',
+ '#define CRYPTO_ccm128_decrypt GRPC_SHADOW_CRYPTO_ccm128_decrypt',
+ '#define CRYPTO_ccm128_encrypt GRPC_SHADOW_CRYPTO_ccm128_encrypt',
+ '#define CRYPTO_ccm128_init GRPC_SHADOW_CRYPTO_ccm128_init',
+ '#define CRYPTO_ccm128_max_input GRPC_SHADOW_CRYPTO_ccm128_max_input',
+ '#define CRYPTO_cfb128_1_encrypt GRPC_SHADOW_CRYPTO_cfb128_1_encrypt',
+ '#define CRYPTO_cfb128_8_encrypt GRPC_SHADOW_CRYPTO_cfb128_8_encrypt',
+ '#define CRYPTO_cfb128_encrypt GRPC_SHADOW_CRYPTO_cfb128_encrypt',
+ '#define CRYPTO_ctr128_encrypt GRPC_SHADOW_CRYPTO_ctr128_encrypt',
+ '#define CRYPTO_ctr128_encrypt_ctr32 GRPC_SHADOW_CRYPTO_ctr128_encrypt_ctr32',
+ '#define CRYPTO_gcm128_aad GRPC_SHADOW_CRYPTO_gcm128_aad',
+ '#define CRYPTO_gcm128_decrypt GRPC_SHADOW_CRYPTO_gcm128_decrypt',
+ '#define CRYPTO_gcm128_decrypt_ctr32 GRPC_SHADOW_CRYPTO_gcm128_decrypt_ctr32',
+ '#define CRYPTO_gcm128_encrypt GRPC_SHADOW_CRYPTO_gcm128_encrypt',
+ '#define CRYPTO_gcm128_encrypt_ctr32 GRPC_SHADOW_CRYPTO_gcm128_encrypt_ctr32',
+ '#define CRYPTO_gcm128_finish GRPC_SHADOW_CRYPTO_gcm128_finish',
+ '#define CRYPTO_gcm128_init GRPC_SHADOW_CRYPTO_gcm128_init',
+ '#define CRYPTO_gcm128_setiv GRPC_SHADOW_CRYPTO_gcm128_setiv',
+ '#define CRYPTO_gcm128_tag GRPC_SHADOW_CRYPTO_gcm128_tag',
+ '#define CRYPTO_ghash_init GRPC_SHADOW_CRYPTO_ghash_init',
+ '#define CRYPTO_ofb128_encrypt GRPC_SHADOW_CRYPTO_ofb128_encrypt',
+ '#define CRYPTO_sysrand GRPC_SHADOW_CRYPTO_sysrand',
+ '#define CRYPTO_tls1_prf GRPC_SHADOW_CRYPTO_tls1_prf',
+ '#define CTR_DRBG_clear GRPC_SHADOW_CTR_DRBG_clear',
+ '#define CTR_DRBG_generate GRPC_SHADOW_CTR_DRBG_generate',
+ '#define CTR_DRBG_init GRPC_SHADOW_CTR_DRBG_init',
+ '#define CTR_DRBG_reseed GRPC_SHADOW_CTR_DRBG_reseed',
+ '#define DES_decrypt3 GRPC_SHADOW_DES_decrypt3',
+ '#define DES_ecb3_encrypt GRPC_SHADOW_DES_ecb3_encrypt',
+ '#define DES_ecb_encrypt GRPC_SHADOW_DES_ecb_encrypt',
+ '#define DES_ede2_cbc_encrypt GRPC_SHADOW_DES_ede2_cbc_encrypt',
+ '#define DES_ede3_cbc_encrypt GRPC_SHADOW_DES_ede3_cbc_encrypt',
+ '#define DES_encrypt3 GRPC_SHADOW_DES_encrypt3',
+ '#define DES_ncbc_encrypt GRPC_SHADOW_DES_ncbc_encrypt',
+ '#define DES_set_key GRPC_SHADOW_DES_set_key',
+ '#define DES_set_key_unchecked GRPC_SHADOW_DES_set_key_unchecked',
+ '#define DES_set_odd_parity GRPC_SHADOW_DES_set_odd_parity',
+ '#define ECDSA_SIG_free GRPC_SHADOW_ECDSA_SIG_free',
+ '#define ECDSA_SIG_get0 GRPC_SHADOW_ECDSA_SIG_get0',
+ '#define ECDSA_SIG_new GRPC_SHADOW_ECDSA_SIG_new',
+ '#define ECDSA_SIG_set0 GRPC_SHADOW_ECDSA_SIG_set0',
+ '#define ECDSA_do_sign GRPC_SHADOW_ECDSA_do_sign',
+ '#define ECDSA_do_verify GRPC_SHADOW_ECDSA_do_verify',
+ '#define EC_GFp_mont_method GRPC_SHADOW_EC_GFp_mont_method',
+ '#define EC_GFp_nistp224_method GRPC_SHADOW_EC_GFp_nistp224_method',
+ '#define EC_GFp_nistp256_method GRPC_SHADOW_EC_GFp_nistp256_method',
+ '#define EC_GFp_nistz256_method GRPC_SHADOW_EC_GFp_nistz256_method',
+ '#define EC_GROUP_cmp GRPC_SHADOW_EC_GROUP_cmp',
+ '#define EC_GROUP_dup GRPC_SHADOW_EC_GROUP_dup',
+ '#define EC_GROUP_free GRPC_SHADOW_EC_GROUP_free',
+ '#define EC_GROUP_get0_generator GRPC_SHADOW_EC_GROUP_get0_generator',
+ '#define EC_GROUP_get0_order GRPC_SHADOW_EC_GROUP_get0_order',
+ '#define EC_GROUP_get_cofactor GRPC_SHADOW_EC_GROUP_get_cofactor',
+ '#define EC_GROUP_get_curve_GFp GRPC_SHADOW_EC_GROUP_get_curve_GFp',
+ '#define EC_GROUP_get_curve_name GRPC_SHADOW_EC_GROUP_get_curve_name',
+ '#define EC_GROUP_get_degree GRPC_SHADOW_EC_GROUP_get_degree',
+ '#define EC_GROUP_get_order GRPC_SHADOW_EC_GROUP_get_order',
+ '#define EC_GROUP_method_of GRPC_SHADOW_EC_GROUP_method_of',
+ '#define EC_GROUP_new_by_curve_name GRPC_SHADOW_EC_GROUP_new_by_curve_name',
+ '#define EC_GROUP_new_curve_GFp GRPC_SHADOW_EC_GROUP_new_curve_GFp',
+ '#define EC_GROUP_set_asn1_flag GRPC_SHADOW_EC_GROUP_set_asn1_flag',
+ '#define EC_GROUP_set_generator GRPC_SHADOW_EC_GROUP_set_generator',
+ '#define EC_GROUP_set_point_conversion_form GRPC_SHADOW_EC_GROUP_set_point_conversion_form',
+ '#define EC_KEY_check_fips GRPC_SHADOW_EC_KEY_check_fips',
+ '#define EC_KEY_check_key GRPC_SHADOW_EC_KEY_check_key',
+ '#define EC_KEY_dup GRPC_SHADOW_EC_KEY_dup',
+ '#define EC_KEY_free GRPC_SHADOW_EC_KEY_free',
+ '#define EC_KEY_generate_key GRPC_SHADOW_EC_KEY_generate_key',
+ '#define EC_KEY_generate_key_fips GRPC_SHADOW_EC_KEY_generate_key_fips',
+ '#define EC_KEY_get0_group GRPC_SHADOW_EC_KEY_get0_group',
+ '#define EC_KEY_get0_private_key GRPC_SHADOW_EC_KEY_get0_private_key',
+ '#define EC_KEY_get0_public_key GRPC_SHADOW_EC_KEY_get0_public_key',
+ '#define EC_KEY_get_conv_form GRPC_SHADOW_EC_KEY_get_conv_form',
+ '#define EC_KEY_get_enc_flags GRPC_SHADOW_EC_KEY_get_enc_flags',
+ '#define EC_KEY_get_ex_data GRPC_SHADOW_EC_KEY_get_ex_data',
+ '#define EC_KEY_get_ex_new_index GRPC_SHADOW_EC_KEY_get_ex_new_index',
+ '#define EC_KEY_is_opaque GRPC_SHADOW_EC_KEY_is_opaque',
+ '#define EC_KEY_new GRPC_SHADOW_EC_KEY_new',
+ '#define EC_KEY_new_by_curve_name GRPC_SHADOW_EC_KEY_new_by_curve_name',
+ '#define EC_KEY_new_method GRPC_SHADOW_EC_KEY_new_method',
+ '#define EC_KEY_set_asn1_flag GRPC_SHADOW_EC_KEY_set_asn1_flag',
+ '#define EC_KEY_set_conv_form GRPC_SHADOW_EC_KEY_set_conv_form',
+ '#define EC_KEY_set_enc_flags GRPC_SHADOW_EC_KEY_set_enc_flags',
+ '#define EC_KEY_set_ex_data GRPC_SHADOW_EC_KEY_set_ex_data',
+ '#define EC_KEY_set_group GRPC_SHADOW_EC_KEY_set_group',
+ '#define EC_KEY_set_private_key GRPC_SHADOW_EC_KEY_set_private_key',
+ '#define EC_KEY_set_public_key GRPC_SHADOW_EC_KEY_set_public_key',
+ '#define EC_KEY_set_public_key_affine_coordinates GRPC_SHADOW_EC_KEY_set_public_key_affine_coordinates',
+ '#define EC_KEY_up_ref GRPC_SHADOW_EC_KEY_up_ref',
+ '#define EC_METHOD_get_field_type GRPC_SHADOW_EC_METHOD_get_field_type',
+ '#define EC_POINT_add GRPC_SHADOW_EC_POINT_add',
+ '#define EC_POINT_clear_free GRPC_SHADOW_EC_POINT_clear_free',
+ '#define EC_POINT_cmp GRPC_SHADOW_EC_POINT_cmp',
+ '#define EC_POINT_copy GRPC_SHADOW_EC_POINT_copy',
+ '#define EC_POINT_dbl GRPC_SHADOW_EC_POINT_dbl',
+ '#define EC_POINT_dup GRPC_SHADOW_EC_POINT_dup',
+ '#define EC_POINT_free GRPC_SHADOW_EC_POINT_free',
+ '#define EC_POINT_get_affine_coordinates_GFp GRPC_SHADOW_EC_POINT_get_affine_coordinates_GFp',
+ '#define EC_POINT_invert GRPC_SHADOW_EC_POINT_invert',
+ '#define EC_POINT_is_at_infinity GRPC_SHADOW_EC_POINT_is_at_infinity',
+ '#define EC_POINT_is_on_curve GRPC_SHADOW_EC_POINT_is_on_curve',
+ '#define EC_POINT_make_affine GRPC_SHADOW_EC_POINT_make_affine',
+ '#define EC_POINT_mul GRPC_SHADOW_EC_POINT_mul',
+ '#define EC_POINT_new GRPC_SHADOW_EC_POINT_new',
+ '#define EC_POINT_oct2point GRPC_SHADOW_EC_POINT_oct2point',
+ '#define EC_POINT_point2oct GRPC_SHADOW_EC_POINT_point2oct',
+ '#define EC_POINT_set_affine_coordinates_GFp GRPC_SHADOW_EC_POINT_set_affine_coordinates_GFp',
+ '#define EC_POINT_set_compressed_coordinates_GFp GRPC_SHADOW_EC_POINT_set_compressed_coordinates_GFp',
+ '#define EC_POINT_set_to_infinity GRPC_SHADOW_EC_POINT_set_to_infinity',
+ '#define EC_POINTs_make_affine GRPC_SHADOW_EC_POINTs_make_affine',
+ '#define EC_get_builtin_curves GRPC_SHADOW_EC_get_builtin_curves',
+ '#define EVP_AEAD_CTX_aead GRPC_SHADOW_EVP_AEAD_CTX_aead',
+ '#define EVP_AEAD_CTX_cleanup GRPC_SHADOW_EVP_AEAD_CTX_cleanup',
+ '#define EVP_AEAD_CTX_free GRPC_SHADOW_EVP_AEAD_CTX_free',
+ '#define EVP_AEAD_CTX_get_iv GRPC_SHADOW_EVP_AEAD_CTX_get_iv',
+ '#define EVP_AEAD_CTX_init GRPC_SHADOW_EVP_AEAD_CTX_init',
+ '#define EVP_AEAD_CTX_init_with_direction GRPC_SHADOW_EVP_AEAD_CTX_init_with_direction',
+ '#define EVP_AEAD_CTX_new GRPC_SHADOW_EVP_AEAD_CTX_new',
+ '#define EVP_AEAD_CTX_open GRPC_SHADOW_EVP_AEAD_CTX_open',
+ '#define EVP_AEAD_CTX_open_gather GRPC_SHADOW_EVP_AEAD_CTX_open_gather',
+ '#define EVP_AEAD_CTX_seal GRPC_SHADOW_EVP_AEAD_CTX_seal',
+ '#define EVP_AEAD_CTX_seal_scatter GRPC_SHADOW_EVP_AEAD_CTX_seal_scatter',
+ '#define EVP_AEAD_CTX_tag_len GRPC_SHADOW_EVP_AEAD_CTX_tag_len',
+ '#define EVP_AEAD_CTX_zero GRPC_SHADOW_EVP_AEAD_CTX_zero',
+ '#define EVP_AEAD_key_length GRPC_SHADOW_EVP_AEAD_key_length',
+ '#define EVP_AEAD_max_overhead GRPC_SHADOW_EVP_AEAD_max_overhead',
+ '#define EVP_AEAD_max_tag_len GRPC_SHADOW_EVP_AEAD_max_tag_len',
+ '#define EVP_AEAD_nonce_length GRPC_SHADOW_EVP_AEAD_nonce_length',
+ '#define EVP_CIPHER_CTX_block_size GRPC_SHADOW_EVP_CIPHER_CTX_block_size',
+ '#define EVP_CIPHER_CTX_cipher GRPC_SHADOW_EVP_CIPHER_CTX_cipher',
+ '#define EVP_CIPHER_CTX_cleanup GRPC_SHADOW_EVP_CIPHER_CTX_cleanup',
+ '#define EVP_CIPHER_CTX_copy GRPC_SHADOW_EVP_CIPHER_CTX_copy',
+ '#define EVP_CIPHER_CTX_ctrl GRPC_SHADOW_EVP_CIPHER_CTX_ctrl',
+ '#define EVP_CIPHER_CTX_flags GRPC_SHADOW_EVP_CIPHER_CTX_flags',
+ '#define EVP_CIPHER_CTX_free GRPC_SHADOW_EVP_CIPHER_CTX_free',
+ '#define EVP_CIPHER_CTX_get_app_data GRPC_SHADOW_EVP_CIPHER_CTX_get_app_data',
+ '#define EVP_CIPHER_CTX_init GRPC_SHADOW_EVP_CIPHER_CTX_init',
+ '#define EVP_CIPHER_CTX_iv_length GRPC_SHADOW_EVP_CIPHER_CTX_iv_length',
+ '#define EVP_CIPHER_CTX_key_length GRPC_SHADOW_EVP_CIPHER_CTX_key_length',
+ '#define EVP_CIPHER_CTX_mode GRPC_SHADOW_EVP_CIPHER_CTX_mode',
+ '#define EVP_CIPHER_CTX_new GRPC_SHADOW_EVP_CIPHER_CTX_new',
+ '#define EVP_CIPHER_CTX_nid GRPC_SHADOW_EVP_CIPHER_CTX_nid',
+ '#define EVP_CIPHER_CTX_reset GRPC_SHADOW_EVP_CIPHER_CTX_reset',
+ '#define EVP_CIPHER_CTX_set_app_data GRPC_SHADOW_EVP_CIPHER_CTX_set_app_data',
+ '#define EVP_CIPHER_CTX_set_flags GRPC_SHADOW_EVP_CIPHER_CTX_set_flags',
+ '#define EVP_CIPHER_CTX_set_key_length GRPC_SHADOW_EVP_CIPHER_CTX_set_key_length',
+ '#define EVP_CIPHER_CTX_set_padding GRPC_SHADOW_EVP_CIPHER_CTX_set_padding',
+ '#define EVP_CIPHER_block_size GRPC_SHADOW_EVP_CIPHER_block_size',
+ '#define EVP_CIPHER_flags GRPC_SHADOW_EVP_CIPHER_flags',
+ '#define EVP_CIPHER_iv_length GRPC_SHADOW_EVP_CIPHER_iv_length',
+ '#define EVP_CIPHER_key_length GRPC_SHADOW_EVP_CIPHER_key_length',
+ '#define EVP_CIPHER_mode GRPC_SHADOW_EVP_CIPHER_mode',
+ '#define EVP_CIPHER_nid GRPC_SHADOW_EVP_CIPHER_nid',
+ '#define EVP_Cipher GRPC_SHADOW_EVP_Cipher',
+ '#define EVP_CipherFinal_ex GRPC_SHADOW_EVP_CipherFinal_ex',
+ '#define EVP_CipherInit GRPC_SHADOW_EVP_CipherInit',
+ '#define EVP_CipherInit_ex GRPC_SHADOW_EVP_CipherInit_ex',
+ '#define EVP_CipherUpdate GRPC_SHADOW_EVP_CipherUpdate',
+ '#define EVP_DecryptFinal_ex GRPC_SHADOW_EVP_DecryptFinal_ex',
+ '#define EVP_DecryptInit GRPC_SHADOW_EVP_DecryptInit',
+ '#define EVP_DecryptInit_ex GRPC_SHADOW_EVP_DecryptInit_ex',
+ '#define EVP_DecryptUpdate GRPC_SHADOW_EVP_DecryptUpdate',
+ '#define EVP_Digest GRPC_SHADOW_EVP_Digest',
+ '#define EVP_DigestFinal GRPC_SHADOW_EVP_DigestFinal',
+ '#define EVP_DigestFinal_ex GRPC_SHADOW_EVP_DigestFinal_ex',
+ '#define EVP_DigestInit GRPC_SHADOW_EVP_DigestInit',
+ '#define EVP_DigestInit_ex GRPC_SHADOW_EVP_DigestInit_ex',
+ '#define EVP_DigestUpdate GRPC_SHADOW_EVP_DigestUpdate',
+ '#define EVP_EncryptFinal_ex GRPC_SHADOW_EVP_EncryptFinal_ex',
+ '#define EVP_EncryptInit GRPC_SHADOW_EVP_EncryptInit',
+ '#define EVP_EncryptInit_ex GRPC_SHADOW_EVP_EncryptInit_ex',
+ '#define EVP_EncryptUpdate GRPC_SHADOW_EVP_EncryptUpdate',
+ '#define EVP_MD_CTX_block_size GRPC_SHADOW_EVP_MD_CTX_block_size',
+ '#define EVP_MD_CTX_cleanup GRPC_SHADOW_EVP_MD_CTX_cleanup',
+ '#define EVP_MD_CTX_copy GRPC_SHADOW_EVP_MD_CTX_copy',
+ '#define EVP_MD_CTX_copy_ex GRPC_SHADOW_EVP_MD_CTX_copy_ex',
+ '#define EVP_MD_CTX_create GRPC_SHADOW_EVP_MD_CTX_create',
+ '#define EVP_MD_CTX_destroy GRPC_SHADOW_EVP_MD_CTX_destroy',
+ '#define EVP_MD_CTX_free GRPC_SHADOW_EVP_MD_CTX_free',
+ '#define EVP_MD_CTX_init GRPC_SHADOW_EVP_MD_CTX_init',
+ '#define EVP_MD_CTX_md GRPC_SHADOW_EVP_MD_CTX_md',
+ '#define EVP_MD_CTX_new GRPC_SHADOW_EVP_MD_CTX_new',
+ '#define EVP_MD_CTX_reset GRPC_SHADOW_EVP_MD_CTX_reset',
+ '#define EVP_MD_CTX_size GRPC_SHADOW_EVP_MD_CTX_size',
+ '#define EVP_MD_CTX_type GRPC_SHADOW_EVP_MD_CTX_type',
+ '#define EVP_MD_block_size GRPC_SHADOW_EVP_MD_block_size',
+ '#define EVP_MD_flags GRPC_SHADOW_EVP_MD_flags',
+ '#define EVP_MD_size GRPC_SHADOW_EVP_MD_size',
+ '#define EVP_MD_type GRPC_SHADOW_EVP_MD_type',
+ '#define EVP_add_cipher_alias GRPC_SHADOW_EVP_add_cipher_alias',
+ '#define EVP_add_digest GRPC_SHADOW_EVP_add_digest',
+ '#define EVP_aead_aes_128_gcm GRPC_SHADOW_EVP_aead_aes_128_gcm',
+ '#define EVP_aead_aes_128_gcm_tls12 GRPC_SHADOW_EVP_aead_aes_128_gcm_tls12',
+ '#define EVP_aead_aes_256_gcm GRPC_SHADOW_EVP_aead_aes_256_gcm',
+ '#define EVP_aead_aes_256_gcm_tls12 GRPC_SHADOW_EVP_aead_aes_256_gcm_tls12',
+ '#define EVP_aes_128_cbc GRPC_SHADOW_EVP_aes_128_cbc',
+ '#define EVP_aes_128_ctr GRPC_SHADOW_EVP_aes_128_ctr',
+ '#define EVP_aes_128_ecb GRPC_SHADOW_EVP_aes_128_ecb',
+ '#define EVP_aes_128_gcm GRPC_SHADOW_EVP_aes_128_gcm',
+ '#define EVP_aes_128_ofb GRPC_SHADOW_EVP_aes_128_ofb',
+ '#define EVP_aes_192_cbc GRPC_SHADOW_EVP_aes_192_cbc',
+ '#define EVP_aes_192_ctr GRPC_SHADOW_EVP_aes_192_ctr',
+ '#define EVP_aes_192_ecb GRPC_SHADOW_EVP_aes_192_ecb',
+ '#define EVP_aes_192_gcm GRPC_SHADOW_EVP_aes_192_gcm',
+ '#define EVP_aes_256_cbc GRPC_SHADOW_EVP_aes_256_cbc',
+ '#define EVP_aes_256_ctr GRPC_SHADOW_EVP_aes_256_ctr',
+ '#define EVP_aes_256_ecb GRPC_SHADOW_EVP_aes_256_ecb',
+ '#define EVP_aes_256_gcm GRPC_SHADOW_EVP_aes_256_gcm',
+ '#define EVP_aes_256_ofb GRPC_SHADOW_EVP_aes_256_ofb',
+ '#define EVP_des_cbc GRPC_SHADOW_EVP_des_cbc',
+ '#define EVP_des_ecb GRPC_SHADOW_EVP_des_ecb',
+ '#define EVP_des_ede GRPC_SHADOW_EVP_des_ede',
+ '#define EVP_des_ede3 GRPC_SHADOW_EVP_des_ede3',
+ '#define EVP_des_ede3_cbc GRPC_SHADOW_EVP_des_ede3_cbc',
+ '#define EVP_des_ede_cbc GRPC_SHADOW_EVP_des_ede_cbc',
+ '#define EVP_has_aes_hardware GRPC_SHADOW_EVP_has_aes_hardware',
+ '#define EVP_md4 GRPC_SHADOW_EVP_md4',
+ '#define EVP_md5 GRPC_SHADOW_EVP_md5',
+ '#define EVP_md5_sha1 GRPC_SHADOW_EVP_md5_sha1',
+ '#define EVP_sha1 GRPC_SHADOW_EVP_sha1',
+ '#define EVP_sha224 GRPC_SHADOW_EVP_sha224',
+ '#define EVP_sha256 GRPC_SHADOW_EVP_sha256',
+ '#define EVP_sha384 GRPC_SHADOW_EVP_sha384',
+ '#define EVP_sha512 GRPC_SHADOW_EVP_sha512',
+ '#define HMAC GRPC_SHADOW_HMAC',
+ '#define HMAC_CTX_cleanup GRPC_SHADOW_HMAC_CTX_cleanup',
+ '#define HMAC_CTX_copy GRPC_SHADOW_HMAC_CTX_copy',
+ '#define HMAC_CTX_copy_ex GRPC_SHADOW_HMAC_CTX_copy_ex',
+ '#define HMAC_CTX_free GRPC_SHADOW_HMAC_CTX_free',
+ '#define HMAC_CTX_init GRPC_SHADOW_HMAC_CTX_init',
+ '#define HMAC_CTX_new GRPC_SHADOW_HMAC_CTX_new',
+ '#define HMAC_CTX_reset GRPC_SHADOW_HMAC_CTX_reset',
+ '#define HMAC_Final GRPC_SHADOW_HMAC_Final',
+ '#define HMAC_Init GRPC_SHADOW_HMAC_Init',
+ '#define HMAC_Init_ex GRPC_SHADOW_HMAC_Init_ex',
+ '#define HMAC_Update GRPC_SHADOW_HMAC_Update',
+ '#define HMAC_size GRPC_SHADOW_HMAC_size',
+ '#define MD4 GRPC_SHADOW_MD4',
+ '#define MD4_Final GRPC_SHADOW_MD4_Final',
+ '#define MD4_Init GRPC_SHADOW_MD4_Init',
+ '#define MD4_Transform GRPC_SHADOW_MD4_Transform',
+ '#define MD4_Update GRPC_SHADOW_MD4_Update',
+ '#define MD5 GRPC_SHADOW_MD5',
+ '#define MD5_Final GRPC_SHADOW_MD5_Final',
+ '#define MD5_Init GRPC_SHADOW_MD5_Init',
+ '#define MD5_Transform GRPC_SHADOW_MD5_Transform',
+ '#define MD5_Update GRPC_SHADOW_MD5_Update',
+ '#define OPENSSL_built_in_curves GRPC_SHADOW_OPENSSL_built_in_curves',
+ '#define RAND_bytes GRPC_SHADOW_RAND_bytes',
+ '#define RAND_bytes_with_additional_data GRPC_SHADOW_RAND_bytes_with_additional_data',
+ '#define RAND_pseudo_bytes GRPC_SHADOW_RAND_pseudo_bytes',
+ '#define RAND_set_urandom_fd GRPC_SHADOW_RAND_set_urandom_fd',
+ '#define RSAZ_1024_mod_exp_avx2 GRPC_SHADOW_RSAZ_1024_mod_exp_avx2',
+ '#define RSA_add_pkcs1_prefix GRPC_SHADOW_RSA_add_pkcs1_prefix',
+ '#define RSA_bits GRPC_SHADOW_RSA_bits',
+ '#define RSA_blinding_on GRPC_SHADOW_RSA_blinding_on',
+ '#define RSA_check_fips GRPC_SHADOW_RSA_check_fips',
+ '#define RSA_check_key GRPC_SHADOW_RSA_check_key',
+ '#define RSA_decrypt GRPC_SHADOW_RSA_decrypt',
+ '#define RSA_default_method GRPC_SHADOW_RSA_default_method',
+ '#define RSA_encrypt GRPC_SHADOW_RSA_encrypt',
+ '#define RSA_flags GRPC_SHADOW_RSA_flags',
+ '#define RSA_free GRPC_SHADOW_RSA_free',
+ '#define RSA_generate_key_ex GRPC_SHADOW_RSA_generate_key_ex',
+ '#define RSA_generate_key_fips GRPC_SHADOW_RSA_generate_key_fips',
+ '#define RSA_get0_crt_params GRPC_SHADOW_RSA_get0_crt_params',
+ '#define RSA_get0_factors GRPC_SHADOW_RSA_get0_factors',
+ '#define RSA_get0_key GRPC_SHADOW_RSA_get0_key',
+ '#define RSA_get_ex_data GRPC_SHADOW_RSA_get_ex_data',
+ '#define RSA_get_ex_new_index GRPC_SHADOW_RSA_get_ex_new_index',
+ '#define RSA_is_opaque GRPC_SHADOW_RSA_is_opaque',
+ '#define RSA_new GRPC_SHADOW_RSA_new',
+ '#define RSA_new_method GRPC_SHADOW_RSA_new_method',
+ '#define RSA_padding_add_PKCS1_OAEP_mgf1 GRPC_SHADOW_RSA_padding_add_PKCS1_OAEP_mgf1',
+ '#define RSA_padding_add_PKCS1_PSS_mgf1 GRPC_SHADOW_RSA_padding_add_PKCS1_PSS_mgf1',
+ '#define RSA_padding_add_PKCS1_type_1 GRPC_SHADOW_RSA_padding_add_PKCS1_type_1',
+ '#define RSA_padding_add_PKCS1_type_2 GRPC_SHADOW_RSA_padding_add_PKCS1_type_2',
+ '#define RSA_padding_add_none GRPC_SHADOW_RSA_padding_add_none',
+ '#define RSA_padding_check_PKCS1_OAEP_mgf1 GRPC_SHADOW_RSA_padding_check_PKCS1_OAEP_mgf1',
+ '#define RSA_padding_check_PKCS1_type_1 GRPC_SHADOW_RSA_padding_check_PKCS1_type_1',
+ '#define RSA_padding_check_PKCS1_type_2 GRPC_SHADOW_RSA_padding_check_PKCS1_type_2',
+ '#define RSA_private_decrypt GRPC_SHADOW_RSA_private_decrypt',
+ '#define RSA_private_encrypt GRPC_SHADOW_RSA_private_encrypt',
+ '#define RSA_private_transform GRPC_SHADOW_RSA_private_transform',
+ '#define RSA_public_decrypt GRPC_SHADOW_RSA_public_decrypt',
+ '#define RSA_public_encrypt GRPC_SHADOW_RSA_public_encrypt',
+ '#define RSA_set0_crt_params GRPC_SHADOW_RSA_set0_crt_params',
+ '#define RSA_set0_factors GRPC_SHADOW_RSA_set0_factors',
+ '#define RSA_set0_key GRPC_SHADOW_RSA_set0_key',
+ '#define RSA_set_ex_data GRPC_SHADOW_RSA_set_ex_data',
+ '#define RSA_sign GRPC_SHADOW_RSA_sign',
+ '#define RSA_sign_pss_mgf1 GRPC_SHADOW_RSA_sign_pss_mgf1',
+ '#define RSA_sign_raw GRPC_SHADOW_RSA_sign_raw',
+ '#define RSA_size GRPC_SHADOW_RSA_size',
+ '#define RSA_up_ref GRPC_SHADOW_RSA_up_ref',
+ '#define RSA_verify GRPC_SHADOW_RSA_verify',
+ '#define RSA_verify_PKCS1_PSS_mgf1 GRPC_SHADOW_RSA_verify_PKCS1_PSS_mgf1',
+ '#define RSA_verify_pss_mgf1 GRPC_SHADOW_RSA_verify_pss_mgf1',
+ '#define RSA_verify_raw GRPC_SHADOW_RSA_verify_raw',
+ '#define SHA1 GRPC_SHADOW_SHA1',
+ '#define SHA1_Final GRPC_SHADOW_SHA1_Final',
+ '#define SHA1_Init GRPC_SHADOW_SHA1_Init',
+ '#define SHA1_Transform GRPC_SHADOW_SHA1_Transform',
+ '#define SHA1_Update GRPC_SHADOW_SHA1_Update',
+ '#define SHA224 GRPC_SHADOW_SHA224',
+ '#define SHA224_Final GRPC_SHADOW_SHA224_Final',
+ '#define SHA224_Init GRPC_SHADOW_SHA224_Init',
+ '#define SHA224_Update GRPC_SHADOW_SHA224_Update',
+ '#define SHA256 GRPC_SHADOW_SHA256',
+ '#define SHA256_Final GRPC_SHADOW_SHA256_Final',
+ '#define SHA256_Init GRPC_SHADOW_SHA256_Init',
+ '#define SHA256_Transform GRPC_SHADOW_SHA256_Transform',
+ '#define SHA256_Update GRPC_SHADOW_SHA256_Update',
+ '#define SHA384 GRPC_SHADOW_SHA384',
+ '#define SHA384_Final GRPC_SHADOW_SHA384_Final',
+ '#define SHA384_Init GRPC_SHADOW_SHA384_Init',
+ '#define SHA384_Update GRPC_SHADOW_SHA384_Update',
+ '#define SHA512 GRPC_SHADOW_SHA512',
+ '#define SHA512_Final GRPC_SHADOW_SHA512_Final',
+ '#define SHA512_Init GRPC_SHADOW_SHA512_Init',
+ '#define SHA512_Transform GRPC_SHADOW_SHA512_Transform',
+ '#define SHA512_Update GRPC_SHADOW_SHA512_Update',
+ '#define aes_ctr_set_key GRPC_SHADOW_aes_ctr_set_key',
+ '#define bn_abs_sub_consttime GRPC_SHADOW_bn_abs_sub_consttime',
+ '#define bn_add_words GRPC_SHADOW_bn_add_words',
+ '#define bn_copy_words GRPC_SHADOW_bn_copy_words',
+ '#define bn_div_consttime GRPC_SHADOW_bn_div_consttime',
+ '#define bn_expand GRPC_SHADOW_bn_expand',
+ '#define bn_fits_in_words GRPC_SHADOW_bn_fits_in_words',
+ '#define bn_from_montgomery_small GRPC_SHADOW_bn_from_montgomery_small',
+ '#define bn_in_range_words GRPC_SHADOW_bn_in_range_words',
+ '#define bn_is_bit_set_words GRPC_SHADOW_bn_is_bit_set_words',
+ '#define bn_is_relatively_prime GRPC_SHADOW_bn_is_relatively_prime',
+ '#define bn_jacobi GRPC_SHADOW_bn_jacobi',
+ '#define bn_lcm_consttime GRPC_SHADOW_bn_lcm_consttime',
+ '#define bn_less_than_montgomery_R GRPC_SHADOW_bn_less_than_montgomery_R',
+ '#define bn_less_than_words GRPC_SHADOW_bn_less_than_words',
+ '#define bn_minimal_width GRPC_SHADOW_bn_minimal_width',
+ '#define bn_mod_add_consttime GRPC_SHADOW_bn_mod_add_consttime',
+ '#define bn_mod_exp_base_2_consttime GRPC_SHADOW_bn_mod_exp_base_2_consttime',
+ '#define bn_mod_exp_mont_small GRPC_SHADOW_bn_mod_exp_mont_small',
+ '#define bn_mod_inverse_consttime GRPC_SHADOW_bn_mod_inverse_consttime',
+ '#define bn_mod_inverse_prime GRPC_SHADOW_bn_mod_inverse_prime',
+ '#define bn_mod_inverse_prime_mont_small GRPC_SHADOW_bn_mod_inverse_prime_mont_small',
+ '#define bn_mod_inverse_secret_prime GRPC_SHADOW_bn_mod_inverse_secret_prime',
+ '#define bn_mod_lshift1_consttime GRPC_SHADOW_bn_mod_lshift1_consttime',
+ '#define bn_mod_lshift_consttime GRPC_SHADOW_bn_mod_lshift_consttime',
+ '#define bn_mod_mul_montgomery_small GRPC_SHADOW_bn_mod_mul_montgomery_small',
+ '#define bn_mod_sub_consttime GRPC_SHADOW_bn_mod_sub_consttime',
+ '#define bn_mod_u16_consttime GRPC_SHADOW_bn_mod_u16_consttime',
+ '#define bn_mont_n0 GRPC_SHADOW_bn_mont_n0',
+ '#define bn_mul_add_words GRPC_SHADOW_bn_mul_add_words',
+ '#define bn_mul_comba4 GRPC_SHADOW_bn_mul_comba4',
+ '#define bn_mul_comba8 GRPC_SHADOW_bn_mul_comba8',
+ '#define bn_mul_consttime GRPC_SHADOW_bn_mul_consttime',
+ '#define bn_mul_small GRPC_SHADOW_bn_mul_small',
+ '#define bn_mul_words GRPC_SHADOW_bn_mul_words',
+ '#define bn_odd_number_is_obviously_composite GRPC_SHADOW_bn_odd_number_is_obviously_composite',
+ '#define bn_one_to_montgomery GRPC_SHADOW_bn_one_to_montgomery',
+ '#define bn_one_to_montgomery_small GRPC_SHADOW_bn_one_to_montgomery_small',
+ '#define bn_rand_range_words GRPC_SHADOW_bn_rand_range_words',
+ '#define bn_rand_secret_range GRPC_SHADOW_bn_rand_secret_range',
+ '#define bn_resize_words GRPC_SHADOW_bn_resize_words',
+ '#define bn_rshift1_words GRPC_SHADOW_bn_rshift1_words',
+ '#define bn_rshift_secret_shift GRPC_SHADOW_bn_rshift_secret_shift',
+ '#define bn_select_words GRPC_SHADOW_bn_select_words',
+ '#define bn_set_minimal_width GRPC_SHADOW_bn_set_minimal_width',
+ '#define bn_set_words GRPC_SHADOW_bn_set_words',
+ '#define bn_sqr_comba4 GRPC_SHADOW_bn_sqr_comba4',
+ '#define bn_sqr_comba8 GRPC_SHADOW_bn_sqr_comba8',
+ '#define bn_sqr_consttime GRPC_SHADOW_bn_sqr_consttime',
+ '#define bn_sqr_small GRPC_SHADOW_bn_sqr_small',
+ '#define bn_sqr_words GRPC_SHADOW_bn_sqr_words',
+ '#define bn_sub_words GRPC_SHADOW_bn_sub_words',
+ '#define bn_to_montgomery_small GRPC_SHADOW_bn_to_montgomery_small',
+ '#define bn_uadd_consttime GRPC_SHADOW_bn_uadd_consttime',
+ '#define bn_usub_consttime GRPC_SHADOW_bn_usub_consttime',
+ '#define bn_wexpand GRPC_SHADOW_bn_wexpand',
+ '#define crypto_gcm_clmul_enabled GRPC_SHADOW_crypto_gcm_clmul_enabled',
+ '#define ec_GFp_mont_field_decode GRPC_SHADOW_ec_GFp_mont_field_decode',
+ '#define ec_GFp_mont_field_encode GRPC_SHADOW_ec_GFp_mont_field_encode',
+ '#define ec_GFp_mont_field_mul GRPC_SHADOW_ec_GFp_mont_field_mul',
+ '#define ec_GFp_mont_field_sqr GRPC_SHADOW_ec_GFp_mont_field_sqr',
+ '#define ec_GFp_mont_group_finish GRPC_SHADOW_ec_GFp_mont_group_finish',
+ '#define ec_GFp_mont_group_init GRPC_SHADOW_ec_GFp_mont_group_init',
+ '#define ec_GFp_mont_group_set_curve GRPC_SHADOW_ec_GFp_mont_group_set_curve',
+ '#define ec_GFp_nistp_recode_scalar_bits GRPC_SHADOW_ec_GFp_nistp_recode_scalar_bits',
+ '#define ec_GFp_simple_add GRPC_SHADOW_ec_GFp_simple_add',
+ '#define ec_GFp_simple_cmp GRPC_SHADOW_ec_GFp_simple_cmp',
+ '#define ec_GFp_simple_dbl GRPC_SHADOW_ec_GFp_simple_dbl',
+ '#define ec_GFp_simple_field_mul GRPC_SHADOW_ec_GFp_simple_field_mul',
+ '#define ec_GFp_simple_field_sqr GRPC_SHADOW_ec_GFp_simple_field_sqr',
+ '#define ec_GFp_simple_group_finish GRPC_SHADOW_ec_GFp_simple_group_finish',
+ '#define ec_GFp_simple_group_get_curve GRPC_SHADOW_ec_GFp_simple_group_get_curve',
+ '#define ec_GFp_simple_group_get_degree GRPC_SHADOW_ec_GFp_simple_group_get_degree',
+ '#define ec_GFp_simple_group_init GRPC_SHADOW_ec_GFp_simple_group_init',
+ '#define ec_GFp_simple_group_set_curve GRPC_SHADOW_ec_GFp_simple_group_set_curve',
+ '#define ec_GFp_simple_invert GRPC_SHADOW_ec_GFp_simple_invert',
+ '#define ec_GFp_simple_is_at_infinity GRPC_SHADOW_ec_GFp_simple_is_at_infinity',
+ '#define ec_GFp_simple_is_on_curve GRPC_SHADOW_ec_GFp_simple_is_on_curve',
+ '#define ec_GFp_simple_make_affine GRPC_SHADOW_ec_GFp_simple_make_affine',
+ '#define ec_GFp_simple_point_copy GRPC_SHADOW_ec_GFp_simple_point_copy',
+ '#define ec_GFp_simple_point_finish GRPC_SHADOW_ec_GFp_simple_point_finish',
+ '#define ec_GFp_simple_point_init GRPC_SHADOW_ec_GFp_simple_point_init',
+ '#define ec_GFp_simple_point_set_affine_coordinates GRPC_SHADOW_ec_GFp_simple_point_set_affine_coordinates',
+ '#define ec_GFp_simple_point_set_to_infinity GRPC_SHADOW_ec_GFp_simple_point_set_to_infinity',
+ '#define ec_GFp_simple_points_make_affine GRPC_SHADOW_ec_GFp_simple_points_make_affine',
+ '#define ec_bignum_to_scalar GRPC_SHADOW_ec_bignum_to_scalar',
+ '#define ec_bignum_to_scalar_unchecked GRPC_SHADOW_ec_bignum_to_scalar_unchecked',
+ '#define ec_compute_wNAF GRPC_SHADOW_ec_compute_wNAF',
+ '#define ec_group_new GRPC_SHADOW_ec_group_new',
+ '#define ec_point_mul_scalar GRPC_SHADOW_ec_point_mul_scalar',
+ '#define ec_point_mul_scalar_public GRPC_SHADOW_ec_point_mul_scalar_public',
+ '#define ec_random_nonzero_scalar GRPC_SHADOW_ec_random_nonzero_scalar',
+ '#define ec_wNAF_mul GRPC_SHADOW_ec_wNAF_mul',
+ '#define kBoringSSLRSASqrtTwo GRPC_SHADOW_kBoringSSLRSASqrtTwo',
+ '#define kBoringSSLRSASqrtTwoLen GRPC_SHADOW_kBoringSSLRSASqrtTwoLen',
+ '#define md4_block_data_order GRPC_SHADOW_md4_block_data_order',
+ '#define rsa_default_decrypt GRPC_SHADOW_rsa_default_decrypt',
+ '#define rsa_default_private_transform GRPC_SHADOW_rsa_default_private_transform',
+ '#define rsa_default_sign_raw GRPC_SHADOW_rsa_default_sign_raw',
+ '#define rsa_default_size GRPC_SHADOW_rsa_default_size',
+ '#define FIPS_mode GRPC_SHADOW_FIPS_mode',
+ '#define aesni_gcm_decrypt GRPC_SHADOW_aesni_gcm_decrypt',
+ '#define aesni_gcm_encrypt GRPC_SHADOW_aesni_gcm_encrypt',
+ '#define aesni_cbc_encrypt GRPC_SHADOW_aesni_cbc_encrypt',
+ '#define aesni_ccm64_decrypt_blocks GRPC_SHADOW_aesni_ccm64_decrypt_blocks',
+ '#define aesni_ccm64_encrypt_blocks GRPC_SHADOW_aesni_ccm64_encrypt_blocks',
+ '#define aesni_ctr32_encrypt_blocks GRPC_SHADOW_aesni_ctr32_encrypt_blocks',
+ '#define aesni_decrypt GRPC_SHADOW_aesni_decrypt',
+ '#define aesni_ecb_encrypt GRPC_SHADOW_aesni_ecb_encrypt',
+ '#define aesni_encrypt GRPC_SHADOW_aesni_encrypt',
+ '#define aesni_ocb_decrypt GRPC_SHADOW_aesni_ocb_decrypt',
+ '#define aesni_ocb_encrypt GRPC_SHADOW_aesni_ocb_encrypt',
+ '#define aesni_set_decrypt_key GRPC_SHADOW_aesni_set_decrypt_key',
+ '#define aesni_set_encrypt_key GRPC_SHADOW_aesni_set_encrypt_key',
+ '#define aesni_xts_decrypt GRPC_SHADOW_aesni_xts_decrypt',
+ '#define aesni_xts_encrypt GRPC_SHADOW_aesni_xts_encrypt',
+ '#define asm_AES_cbc_encrypt GRPC_SHADOW_asm_AES_cbc_encrypt',
+ '#define asm_AES_decrypt GRPC_SHADOW_asm_AES_decrypt',
+ '#define asm_AES_encrypt GRPC_SHADOW_asm_AES_encrypt',
+ '#define asm_AES_set_decrypt_key GRPC_SHADOW_asm_AES_set_decrypt_key',
+ '#define asm_AES_set_encrypt_key GRPC_SHADOW_asm_AES_set_encrypt_key',
+ '#define bsaes_cbc_encrypt GRPC_SHADOW_bsaes_cbc_encrypt',
+ '#define bsaes_ctr32_encrypt_blocks GRPC_SHADOW_bsaes_ctr32_encrypt_blocks',
+ '#define bsaes_xts_decrypt GRPC_SHADOW_bsaes_xts_decrypt',
+ '#define bsaes_xts_encrypt GRPC_SHADOW_bsaes_xts_encrypt',
+ '#define gcm_ghash_4bit GRPC_SHADOW_gcm_ghash_4bit',
+ '#define gcm_ghash_avx GRPC_SHADOW_gcm_ghash_avx',
+ '#define gcm_ghash_clmul GRPC_SHADOW_gcm_ghash_clmul',
+ '#define gcm_gmult_4bit GRPC_SHADOW_gcm_gmult_4bit',
+ '#define gcm_gmult_avx GRPC_SHADOW_gcm_gmult_avx',
+ '#define gcm_gmult_clmul GRPC_SHADOW_gcm_gmult_clmul',
+ '#define gcm_init_avx GRPC_SHADOW_gcm_init_avx',
+ '#define gcm_init_clmul GRPC_SHADOW_gcm_init_clmul',
+ '#define md5_block_asm_data_order GRPC_SHADOW_md5_block_asm_data_order',
+ '#define ecp_nistz256_avx2_select_w7 GRPC_SHADOW_ecp_nistz256_avx2_select_w7',
+ '#define ecp_nistz256_mul_mont GRPC_SHADOW_ecp_nistz256_mul_mont',
+ '#define ecp_nistz256_neg GRPC_SHADOW_ecp_nistz256_neg',
+ '#define ecp_nistz256_point_add GRPC_SHADOW_ecp_nistz256_point_add',
+ '#define ecp_nistz256_point_add_affine GRPC_SHADOW_ecp_nistz256_point_add_affine',
+ '#define ecp_nistz256_point_double GRPC_SHADOW_ecp_nistz256_point_double',
+ '#define ecp_nistz256_select_w5 GRPC_SHADOW_ecp_nistz256_select_w5',
+ '#define ecp_nistz256_select_w7 GRPC_SHADOW_ecp_nistz256_select_w7',
+ '#define ecp_nistz256_sqr_mont GRPC_SHADOW_ecp_nistz256_sqr_mont',
+ '#define CRYPTO_rdrand GRPC_SHADOW_CRYPTO_rdrand',
+ '#define CRYPTO_rdrand_multiple8_buf GRPC_SHADOW_CRYPTO_rdrand_multiple8_buf',
+ '#define rsaz_1024_gather5_avx2 GRPC_SHADOW_rsaz_1024_gather5_avx2',
+ '#define rsaz_1024_mul_avx2 GRPC_SHADOW_rsaz_1024_mul_avx2',
+ '#define rsaz_1024_norm2red_avx2 GRPC_SHADOW_rsaz_1024_norm2red_avx2',
+ '#define rsaz_1024_red2norm_avx2 GRPC_SHADOW_rsaz_1024_red2norm_avx2',
+ '#define rsaz_1024_scatter5_avx2 GRPC_SHADOW_rsaz_1024_scatter5_avx2',
+ '#define rsaz_1024_sqr_avx2 GRPC_SHADOW_rsaz_1024_sqr_avx2',
+ '#define rsaz_avx2_eligible GRPC_SHADOW_rsaz_avx2_eligible',
+ '#define sha1_block_data_order GRPC_SHADOW_sha1_block_data_order',
+ '#define sha256_block_data_order GRPC_SHADOW_sha256_block_data_order',
+ '#define sha512_block_data_order GRPC_SHADOW_sha512_block_data_order',
+ '#define vpaes_cbc_encrypt GRPC_SHADOW_vpaes_cbc_encrypt',
+ '#define vpaes_decrypt GRPC_SHADOW_vpaes_decrypt',
+ '#define vpaes_encrypt GRPC_SHADOW_vpaes_encrypt',
+ '#define vpaes_set_decrypt_key GRPC_SHADOW_vpaes_set_decrypt_key',
+ '#define vpaes_set_encrypt_key GRPC_SHADOW_vpaes_set_encrypt_key',
+ '#define bn_from_montgomery GRPC_SHADOW_bn_from_montgomery',
+ '#define bn_gather5 GRPC_SHADOW_bn_gather5',
+ '#define bn_mul_mont_gather5 GRPC_SHADOW_bn_mul_mont_gather5',
+ '#define bn_power5 GRPC_SHADOW_bn_power5',
+ '#define bn_scatter5 GRPC_SHADOW_bn_scatter5',
+ '#define bn_sqr8x_internal GRPC_SHADOW_bn_sqr8x_internal',
+ '#define bn_mul_mont GRPC_SHADOW_bn_mul_mont',
+ '#define EVP_get_digestbyname GRPC_SHADOW_EVP_get_digestbyname',
+ '#define EVP_get_digestbynid GRPC_SHADOW_EVP_get_digestbynid',
+ '#define EVP_get_digestbyobj GRPC_SHADOW_EVP_get_digestbyobj',
+ '#define EVP_marshal_digest_algorithm GRPC_SHADOW_EVP_marshal_digest_algorithm',
+ '#define EVP_parse_digest_algorithm GRPC_SHADOW_EVP_parse_digest_algorithm',
+ '#define EVP_get_cipherbyname GRPC_SHADOW_EVP_get_cipherbyname',
+ '#define EVP_get_cipherbynid GRPC_SHADOW_EVP_get_cipherbynid',
+ '#define EVP_BytesToKey GRPC_SHADOW_EVP_BytesToKey',
+ '#define EVP_enc_null GRPC_SHADOW_EVP_enc_null',
+ '#define EVP_rc2_40_cbc GRPC_SHADOW_EVP_rc2_40_cbc',
+ '#define EVP_rc2_cbc GRPC_SHADOW_EVP_rc2_cbc',
+ '#define EVP_rc4 GRPC_SHADOW_EVP_rc4',
+ '#define EVP_aead_aes_128_gcm_siv GRPC_SHADOW_EVP_aead_aes_128_gcm_siv',
+ '#define EVP_aead_aes_256_gcm_siv GRPC_SHADOW_EVP_aead_aes_256_gcm_siv',
+ '#define EVP_aead_aes_128_ctr_hmac_sha256 GRPC_SHADOW_EVP_aead_aes_128_ctr_hmac_sha256',
+ '#define EVP_aead_aes_256_ctr_hmac_sha256 GRPC_SHADOW_EVP_aead_aes_256_ctr_hmac_sha256',
+ '#define EVP_aead_aes_128_ccm_bluetooth GRPC_SHADOW_EVP_aead_aes_128_ccm_bluetooth',
+ '#define EVP_aead_aes_128_ccm_bluetooth_8 GRPC_SHADOW_EVP_aead_aes_128_ccm_bluetooth_8',
+ '#define EVP_aead_chacha20_poly1305 GRPC_SHADOW_EVP_aead_chacha20_poly1305',
+ '#define EVP_tls_cbc_copy_mac GRPC_SHADOW_EVP_tls_cbc_copy_mac',
+ '#define EVP_tls_cbc_digest_record GRPC_SHADOW_EVP_tls_cbc_digest_record',
+ '#define EVP_tls_cbc_record_digest_supported GRPC_SHADOW_EVP_tls_cbc_record_digest_supported',
+ '#define EVP_tls_cbc_remove_padding GRPC_SHADOW_EVP_tls_cbc_remove_padding',
+ '#define EVP_aead_aes_128_cbc_sha1_tls GRPC_SHADOW_EVP_aead_aes_128_cbc_sha1_tls',
+ '#define EVP_aead_aes_128_cbc_sha1_tls_implicit_iv GRPC_SHADOW_EVP_aead_aes_128_cbc_sha1_tls_implicit_iv',
+ '#define EVP_aead_aes_128_cbc_sha256_tls GRPC_SHADOW_EVP_aead_aes_128_cbc_sha256_tls',
+ '#define EVP_aead_aes_256_cbc_sha1_tls GRPC_SHADOW_EVP_aead_aes_256_cbc_sha1_tls',
+ '#define EVP_aead_aes_256_cbc_sha1_tls_implicit_iv GRPC_SHADOW_EVP_aead_aes_256_cbc_sha1_tls_implicit_iv',
+ '#define EVP_aead_aes_256_cbc_sha256_tls GRPC_SHADOW_EVP_aead_aes_256_cbc_sha256_tls',
+ '#define EVP_aead_aes_256_cbc_sha384_tls GRPC_SHADOW_EVP_aead_aes_256_cbc_sha384_tls',
+ '#define EVP_aead_des_ede3_cbc_sha1_tls GRPC_SHADOW_EVP_aead_des_ede3_cbc_sha1_tls',
+ '#define EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv GRPC_SHADOW_EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv',
+ '#define EVP_aead_null_sha1_tls GRPC_SHADOW_EVP_aead_null_sha1_tls',
+ '#define EVP_aead_aes_128_cbc_sha1_ssl3 GRPC_SHADOW_EVP_aead_aes_128_cbc_sha1_ssl3',
+ '#define EVP_aead_aes_256_cbc_sha1_ssl3 GRPC_SHADOW_EVP_aead_aes_256_cbc_sha1_ssl3',
+ '#define EVP_aead_des_ede3_cbc_sha1_ssl3 GRPC_SHADOW_EVP_aead_des_ede3_cbc_sha1_ssl3',
+ '#define EVP_aead_null_sha1_ssl3 GRPC_SHADOW_EVP_aead_null_sha1_ssl3',
+ '#define aes128gcmsiv_aes_ks GRPC_SHADOW_aes128gcmsiv_aes_ks',
+ '#define aes128gcmsiv_aes_ks_enc_x1 GRPC_SHADOW_aes128gcmsiv_aes_ks_enc_x1',
+ '#define aes128gcmsiv_dec GRPC_SHADOW_aes128gcmsiv_dec',
+ '#define aes128gcmsiv_ecb_enc_block GRPC_SHADOW_aes128gcmsiv_ecb_enc_block',
+ '#define aes128gcmsiv_enc_msg_x4 GRPC_SHADOW_aes128gcmsiv_enc_msg_x4',
+ '#define aes128gcmsiv_enc_msg_x8 GRPC_SHADOW_aes128gcmsiv_enc_msg_x8',
+ '#define aes128gcmsiv_kdf GRPC_SHADOW_aes128gcmsiv_kdf',
+ '#define aes256gcmsiv_aes_ks GRPC_SHADOW_aes256gcmsiv_aes_ks',
+ '#define aes256gcmsiv_aes_ks_enc_x1 GRPC_SHADOW_aes256gcmsiv_aes_ks_enc_x1',
+ '#define aes256gcmsiv_dec GRPC_SHADOW_aes256gcmsiv_dec',
+ '#define aes256gcmsiv_ecb_enc_block GRPC_SHADOW_aes256gcmsiv_ecb_enc_block',
+ '#define aes256gcmsiv_enc_msg_x4 GRPC_SHADOW_aes256gcmsiv_enc_msg_x4',
+ '#define aes256gcmsiv_enc_msg_x8 GRPC_SHADOW_aes256gcmsiv_enc_msg_x8',
+ '#define aes256gcmsiv_kdf GRPC_SHADOW_aes256gcmsiv_kdf',
+ '#define aesgcmsiv_htable6_init GRPC_SHADOW_aesgcmsiv_htable6_init',
+ '#define aesgcmsiv_htable_init GRPC_SHADOW_aesgcmsiv_htable_init',
+ '#define aesgcmsiv_htable_polyval GRPC_SHADOW_aesgcmsiv_htable_polyval',
+ '#define aesgcmsiv_polyval_horner GRPC_SHADOW_aesgcmsiv_polyval_horner',
+ '#define chacha20_poly1305_open GRPC_SHADOW_chacha20_poly1305_open',
+ '#define chacha20_poly1305_seal GRPC_SHADOW_chacha20_poly1305_seal',
+ '#define RC4 GRPC_SHADOW_RC4',
+ '#define RC4_set_key GRPC_SHADOW_RC4_set_key',
+ '#define CONF_VALUE_new GRPC_SHADOW_CONF_VALUE_new',
+ '#define CONF_modules_free GRPC_SHADOW_CONF_modules_free',
+ '#define CONF_modules_load_file GRPC_SHADOW_CONF_modules_load_file',
+ '#define CONF_parse_list GRPC_SHADOW_CONF_parse_list',
+ '#define NCONF_free GRPC_SHADOW_NCONF_free',
+ '#define NCONF_get_section GRPC_SHADOW_NCONF_get_section',
+ '#define NCONF_get_string GRPC_SHADOW_NCONF_get_string',
+ '#define NCONF_load GRPC_SHADOW_NCONF_load',
+ '#define NCONF_load_bio GRPC_SHADOW_NCONF_load_bio',
+ '#define NCONF_new GRPC_SHADOW_NCONF_new',
+ '#define OPENSSL_config GRPC_SHADOW_OPENSSL_config',
+ '#define OPENSSL_no_config GRPC_SHADOW_OPENSSL_no_config',
+ '#define CRYPTO_chacha_20 GRPC_SHADOW_CRYPTO_chacha_20',
+ '#define ChaCha20_ctr32 GRPC_SHADOW_ChaCha20_ctr32',
+ '#define CRYPTO_poly1305_finish GRPC_SHADOW_CRYPTO_poly1305_finish',
+ '#define CRYPTO_poly1305_init GRPC_SHADOW_CRYPTO_poly1305_init',
+ '#define CRYPTO_poly1305_update GRPC_SHADOW_CRYPTO_poly1305_update',
+ '#define SPAKE2_CTX_free GRPC_SHADOW_SPAKE2_CTX_free',
+ '#define SPAKE2_CTX_new GRPC_SHADOW_SPAKE2_CTX_new',
+ '#define SPAKE2_generate_msg GRPC_SHADOW_SPAKE2_generate_msg',
+ '#define SPAKE2_process_msg GRPC_SHADOW_SPAKE2_process_msg',
+ '#define ED25519_keypair GRPC_SHADOW_ED25519_keypair',
+ '#define ED25519_keypair_from_seed GRPC_SHADOW_ED25519_keypair_from_seed',
+ '#define ED25519_sign GRPC_SHADOW_ED25519_sign',
+ '#define ED25519_verify GRPC_SHADOW_ED25519_verify',
+ '#define X25519 GRPC_SHADOW_X25519',
+ '#define X25519_keypair GRPC_SHADOW_X25519_keypair',
+ '#define X25519_public_from_private GRPC_SHADOW_X25519_public_from_private',
+ '#define x25519_ge_add GRPC_SHADOW_x25519_ge_add',
+ '#define x25519_ge_frombytes_vartime GRPC_SHADOW_x25519_ge_frombytes_vartime',
+ '#define x25519_ge_p1p1_to_p2 GRPC_SHADOW_x25519_ge_p1p1_to_p2',
+ '#define x25519_ge_p1p1_to_p3 GRPC_SHADOW_x25519_ge_p1p1_to_p3',
+ '#define x25519_ge_p3_to_cached GRPC_SHADOW_x25519_ge_p3_to_cached',
+ '#define x25519_ge_scalarmult GRPC_SHADOW_x25519_ge_scalarmult',
+ '#define x25519_ge_scalarmult_base GRPC_SHADOW_x25519_ge_scalarmult_base',
+ '#define x25519_ge_scalarmult_small_precomp GRPC_SHADOW_x25519_ge_scalarmult_small_precomp',
+ '#define x25519_ge_sub GRPC_SHADOW_x25519_ge_sub',
+ '#define x25519_ge_tobytes GRPC_SHADOW_x25519_ge_tobytes',
+ '#define x25519_sc_reduce GRPC_SHADOW_x25519_sc_reduce',
+ '#define BUF_MEM_append GRPC_SHADOW_BUF_MEM_append',
+ '#define BUF_MEM_free GRPC_SHADOW_BUF_MEM_free',
+ '#define BUF_MEM_grow GRPC_SHADOW_BUF_MEM_grow',
+ '#define BUF_MEM_grow_clean GRPC_SHADOW_BUF_MEM_grow_clean',
+ '#define BUF_MEM_new GRPC_SHADOW_BUF_MEM_new',
+ '#define BUF_MEM_reserve GRPC_SHADOW_BUF_MEM_reserve',
+ '#define BUF_memdup GRPC_SHADOW_BUF_memdup',
+ '#define BUF_strdup GRPC_SHADOW_BUF_strdup',
+ '#define BUF_strlcat GRPC_SHADOW_BUF_strlcat',
+ '#define BUF_strlcpy GRPC_SHADOW_BUF_strlcpy',
+ '#define BUF_strndup GRPC_SHADOW_BUF_strndup',
+ '#define BUF_strnlen GRPC_SHADOW_BUF_strnlen',
+ '#define BN_marshal_asn1 GRPC_SHADOW_BN_marshal_asn1',
+ '#define BN_parse_asn1_unsigned GRPC_SHADOW_BN_parse_asn1_unsigned',
+ '#define BN_asc2bn GRPC_SHADOW_BN_asc2bn',
+ '#define BN_bn2cbb_padded GRPC_SHADOW_BN_bn2cbb_padded',
+ '#define BN_bn2dec GRPC_SHADOW_BN_bn2dec',
+ '#define BN_bn2hex GRPC_SHADOW_BN_bn2hex',
+ '#define BN_bn2mpi GRPC_SHADOW_BN_bn2mpi',
+ '#define BN_dec2bn GRPC_SHADOW_BN_dec2bn',
+ '#define BN_hex2bn GRPC_SHADOW_BN_hex2bn',
+ '#define BN_mpi2bn GRPC_SHADOW_BN_mpi2bn',
+ '#define BN_print GRPC_SHADOW_BN_print',
+ '#define BN_print_fp GRPC_SHADOW_BN_print_fp',
+ '#define BIO_callback_ctrl GRPC_SHADOW_BIO_callback_ctrl',
+ '#define BIO_clear_flags GRPC_SHADOW_BIO_clear_flags',
+ '#define BIO_clear_retry_flags GRPC_SHADOW_BIO_clear_retry_flags',
+ '#define BIO_copy_next_retry GRPC_SHADOW_BIO_copy_next_retry',
+ '#define BIO_ctrl GRPC_SHADOW_BIO_ctrl',
+ '#define BIO_ctrl_pending GRPC_SHADOW_BIO_ctrl_pending',
+ '#define BIO_eof GRPC_SHADOW_BIO_eof',
+ '#define BIO_find_type GRPC_SHADOW_BIO_find_type',
+ '#define BIO_flush GRPC_SHADOW_BIO_flush',
+ '#define BIO_free GRPC_SHADOW_BIO_free',
+ '#define BIO_free_all GRPC_SHADOW_BIO_free_all',
+ '#define BIO_get_data GRPC_SHADOW_BIO_get_data',
+ '#define BIO_get_init GRPC_SHADOW_BIO_get_init',
+ '#define BIO_get_new_index GRPC_SHADOW_BIO_get_new_index',
+ '#define BIO_get_retry_flags GRPC_SHADOW_BIO_get_retry_flags',
+ '#define BIO_get_retry_reason GRPC_SHADOW_BIO_get_retry_reason',
+ '#define BIO_get_shutdown GRPC_SHADOW_BIO_get_shutdown',
+ '#define BIO_gets GRPC_SHADOW_BIO_gets',
+ '#define BIO_indent GRPC_SHADOW_BIO_indent',
+ '#define BIO_int_ctrl GRPC_SHADOW_BIO_int_ctrl',
+ '#define BIO_meth_free GRPC_SHADOW_BIO_meth_free',
+ '#define BIO_meth_new GRPC_SHADOW_BIO_meth_new',
+ '#define BIO_meth_set_create GRPC_SHADOW_BIO_meth_set_create',
+ '#define BIO_meth_set_ctrl GRPC_SHADOW_BIO_meth_set_ctrl',
+ '#define BIO_meth_set_destroy GRPC_SHADOW_BIO_meth_set_destroy',
+ '#define BIO_meth_set_gets GRPC_SHADOW_BIO_meth_set_gets',
+ '#define BIO_meth_set_puts GRPC_SHADOW_BIO_meth_set_puts',
+ '#define BIO_meth_set_read GRPC_SHADOW_BIO_meth_set_read',
+ '#define BIO_meth_set_write GRPC_SHADOW_BIO_meth_set_write',
+ '#define BIO_method_type GRPC_SHADOW_BIO_method_type',
+ '#define BIO_new GRPC_SHADOW_BIO_new',
+ '#define BIO_next GRPC_SHADOW_BIO_next',
+ '#define BIO_number_read GRPC_SHADOW_BIO_number_read',
+ '#define BIO_number_written GRPC_SHADOW_BIO_number_written',
+ '#define BIO_pending GRPC_SHADOW_BIO_pending',
+ '#define BIO_pop GRPC_SHADOW_BIO_pop',
+ '#define BIO_ptr_ctrl GRPC_SHADOW_BIO_ptr_ctrl',
+ '#define BIO_push GRPC_SHADOW_BIO_push',
+ '#define BIO_puts GRPC_SHADOW_BIO_puts',
+ '#define BIO_read GRPC_SHADOW_BIO_read',
+ '#define BIO_read_asn1 GRPC_SHADOW_BIO_read_asn1',
+ '#define BIO_reset GRPC_SHADOW_BIO_reset',
+ '#define BIO_set_close GRPC_SHADOW_BIO_set_close',
+ '#define BIO_set_data GRPC_SHADOW_BIO_set_data',
+ '#define BIO_set_flags GRPC_SHADOW_BIO_set_flags',
+ '#define BIO_set_init GRPC_SHADOW_BIO_set_init',
+ '#define BIO_set_retry_read GRPC_SHADOW_BIO_set_retry_read',
+ '#define BIO_set_retry_special GRPC_SHADOW_BIO_set_retry_special',
+ '#define BIO_set_retry_write GRPC_SHADOW_BIO_set_retry_write',
+ '#define BIO_set_shutdown GRPC_SHADOW_BIO_set_shutdown',
+ '#define BIO_set_write_buffer_size GRPC_SHADOW_BIO_set_write_buffer_size',
+ '#define BIO_should_io_special GRPC_SHADOW_BIO_should_io_special',
+ '#define BIO_should_read GRPC_SHADOW_BIO_should_read',
+ '#define BIO_should_retry GRPC_SHADOW_BIO_should_retry',
+ '#define BIO_should_write GRPC_SHADOW_BIO_should_write',
+ '#define BIO_test_flags GRPC_SHADOW_BIO_test_flags',
+ '#define BIO_up_ref GRPC_SHADOW_BIO_up_ref',
+ '#define BIO_vfree GRPC_SHADOW_BIO_vfree',
+ '#define BIO_wpending GRPC_SHADOW_BIO_wpending',
+ '#define BIO_write GRPC_SHADOW_BIO_write',
+ '#define ERR_print_errors GRPC_SHADOW_ERR_print_errors',
+ '#define BIO_get_mem_data GRPC_SHADOW_BIO_get_mem_data',
+ '#define BIO_get_mem_ptr GRPC_SHADOW_BIO_get_mem_ptr',
+ '#define BIO_mem_contents GRPC_SHADOW_BIO_mem_contents',
+ '#define BIO_new_mem_buf GRPC_SHADOW_BIO_new_mem_buf',
+ '#define BIO_s_mem GRPC_SHADOW_BIO_s_mem',
+ '#define BIO_set_mem_buf GRPC_SHADOW_BIO_set_mem_buf',
+ '#define BIO_set_mem_eof_return GRPC_SHADOW_BIO_set_mem_eof_return',
+ '#define BIO_do_connect GRPC_SHADOW_BIO_do_connect',
+ '#define BIO_new_connect GRPC_SHADOW_BIO_new_connect',
+ '#define BIO_s_connect GRPC_SHADOW_BIO_s_connect',
+ '#define BIO_set_conn_hostname GRPC_SHADOW_BIO_set_conn_hostname',
+ '#define BIO_set_conn_int_port GRPC_SHADOW_BIO_set_conn_int_port',
+ '#define BIO_set_conn_port GRPC_SHADOW_BIO_set_conn_port',
+ '#define BIO_set_nbio GRPC_SHADOW_BIO_set_nbio',
+ '#define BIO_get_fd GRPC_SHADOW_BIO_get_fd',
+ '#define BIO_new_fd GRPC_SHADOW_BIO_new_fd',
+ '#define BIO_s_fd GRPC_SHADOW_BIO_s_fd',
+ '#define BIO_set_fd GRPC_SHADOW_BIO_set_fd',
+ '#define bio_fd_should_retry GRPC_SHADOW_bio_fd_should_retry',
+ '#define BIO_append_filename GRPC_SHADOW_BIO_append_filename',
+ '#define BIO_get_fp GRPC_SHADOW_BIO_get_fp',
+ '#define BIO_new_file GRPC_SHADOW_BIO_new_file',
+ '#define BIO_new_fp GRPC_SHADOW_BIO_new_fp',
+ '#define BIO_read_filename GRPC_SHADOW_BIO_read_filename',
+ '#define BIO_rw_filename GRPC_SHADOW_BIO_rw_filename',
+ '#define BIO_s_file GRPC_SHADOW_BIO_s_file',
+ '#define BIO_set_fp GRPC_SHADOW_BIO_set_fp',
+ '#define BIO_write_filename GRPC_SHADOW_BIO_write_filename',
+ '#define BIO_hexdump GRPC_SHADOW_BIO_hexdump',
+ '#define BIO_ctrl_get_read_request GRPC_SHADOW_BIO_ctrl_get_read_request',
+ '#define BIO_ctrl_get_write_guarantee GRPC_SHADOW_BIO_ctrl_get_write_guarantee',
+ '#define BIO_new_bio_pair GRPC_SHADOW_BIO_new_bio_pair',
+ '#define BIO_shutdown_wr GRPC_SHADOW_BIO_shutdown_wr',
+ '#define BIO_printf GRPC_SHADOW_BIO_printf',
+ '#define BIO_new_socket GRPC_SHADOW_BIO_new_socket',
+ '#define BIO_s_socket GRPC_SHADOW_BIO_s_socket',
+ '#define bio_clear_socket_error GRPC_SHADOW_bio_clear_socket_error',
+ '#define bio_ip_and_port_to_socket_and_addr GRPC_SHADOW_bio_ip_and_port_to_socket_and_addr',
+ '#define bio_sock_error GRPC_SHADOW_bio_sock_error',
+ '#define bio_socket_nbio GRPC_SHADOW_bio_socket_nbio',
+ '#define RAND_enable_fork_unsafe_buffering GRPC_SHADOW_RAND_enable_fork_unsafe_buffering',
+ '#define rand_fork_unsafe_buffering_enabled GRPC_SHADOW_rand_fork_unsafe_buffering_enabled',
+ '#define RAND_SSLeay GRPC_SHADOW_RAND_SSLeay',
+ '#define RAND_add GRPC_SHADOW_RAND_add',
+ '#define RAND_cleanup GRPC_SHADOW_RAND_cleanup',
+ '#define RAND_egd GRPC_SHADOW_RAND_egd',
+ '#define RAND_file_name GRPC_SHADOW_RAND_file_name',
+ '#define RAND_get_rand_method GRPC_SHADOW_RAND_get_rand_method',
+ '#define RAND_load_file GRPC_SHADOW_RAND_load_file',
+ '#define RAND_poll GRPC_SHADOW_RAND_poll',
+ '#define RAND_seed GRPC_SHADOW_RAND_seed',
+ '#define RAND_set_rand_method GRPC_SHADOW_RAND_set_rand_method',
+ '#define RAND_status GRPC_SHADOW_RAND_status',
+ '#define OBJ_cbs2nid GRPC_SHADOW_OBJ_cbs2nid',
+ '#define OBJ_cmp GRPC_SHADOW_OBJ_cmp',
+ '#define OBJ_create GRPC_SHADOW_OBJ_create',
+ '#define OBJ_dup GRPC_SHADOW_OBJ_dup',
+ '#define OBJ_get0_data GRPC_SHADOW_OBJ_get0_data',
+ '#define OBJ_length GRPC_SHADOW_OBJ_length',
+ '#define OBJ_ln2nid GRPC_SHADOW_OBJ_ln2nid',
+ '#define OBJ_nid2cbb GRPC_SHADOW_OBJ_nid2cbb',
+ '#define OBJ_nid2ln GRPC_SHADOW_OBJ_nid2ln',
+ '#define OBJ_nid2obj GRPC_SHADOW_OBJ_nid2obj',
+ '#define OBJ_nid2sn GRPC_SHADOW_OBJ_nid2sn',
+ '#define OBJ_obj2nid GRPC_SHADOW_OBJ_obj2nid',
+ '#define OBJ_obj2txt GRPC_SHADOW_OBJ_obj2txt',
+ '#define OBJ_sn2nid GRPC_SHADOW_OBJ_sn2nid',
+ '#define OBJ_txt2nid GRPC_SHADOW_OBJ_txt2nid',
+ '#define OBJ_txt2obj GRPC_SHADOW_OBJ_txt2obj',
+ '#define OBJ_find_sigid_algs GRPC_SHADOW_OBJ_find_sigid_algs',
+ '#define OBJ_find_sigid_by_algs GRPC_SHADOW_OBJ_find_sigid_by_algs',
+ '#define ASN1_BIT_STRING_check GRPC_SHADOW_ASN1_BIT_STRING_check',
+ '#define ASN1_BIT_STRING_get_bit GRPC_SHADOW_ASN1_BIT_STRING_get_bit',
+ '#define ASN1_BIT_STRING_set GRPC_SHADOW_ASN1_BIT_STRING_set',
+ '#define ASN1_BIT_STRING_set_bit GRPC_SHADOW_ASN1_BIT_STRING_set_bit',
+ '#define c2i_ASN1_BIT_STRING GRPC_SHADOW_c2i_ASN1_BIT_STRING',
+ '#define i2c_ASN1_BIT_STRING GRPC_SHADOW_i2c_ASN1_BIT_STRING',
+ '#define d2i_ASN1_BOOLEAN GRPC_SHADOW_d2i_ASN1_BOOLEAN',
+ '#define i2d_ASN1_BOOLEAN GRPC_SHADOW_i2d_ASN1_BOOLEAN',
+ '#define ASN1_d2i_bio GRPC_SHADOW_ASN1_d2i_bio',
+ '#define ASN1_d2i_fp GRPC_SHADOW_ASN1_d2i_fp',
+ '#define ASN1_item_d2i_bio GRPC_SHADOW_ASN1_item_d2i_bio',
+ '#define ASN1_item_d2i_fp GRPC_SHADOW_ASN1_item_d2i_fp',
+ '#define ASN1_dup GRPC_SHADOW_ASN1_dup',
+ '#define ASN1_item_dup GRPC_SHADOW_ASN1_item_dup',
+ '#define ASN1_ENUMERATED_get GRPC_SHADOW_ASN1_ENUMERATED_get',
+ '#define ASN1_ENUMERATED_set GRPC_SHADOW_ASN1_ENUMERATED_set',
+ '#define ASN1_ENUMERATED_to_BN GRPC_SHADOW_ASN1_ENUMERATED_to_BN',
+ '#define BN_to_ASN1_ENUMERATED GRPC_SHADOW_BN_to_ASN1_ENUMERATED',
+ '#define ASN1_GENERALIZEDTIME_adj GRPC_SHADOW_ASN1_GENERALIZEDTIME_adj',
+ '#define ASN1_GENERALIZEDTIME_check GRPC_SHADOW_ASN1_GENERALIZEDTIME_check',
+ '#define ASN1_GENERALIZEDTIME_set GRPC_SHADOW_ASN1_GENERALIZEDTIME_set',
+ '#define ASN1_GENERALIZEDTIME_set_string GRPC_SHADOW_ASN1_GENERALIZEDTIME_set_string',
+ '#define asn1_generalizedtime_to_tm GRPC_SHADOW_asn1_generalizedtime_to_tm',
+ '#define ASN1_i2d_bio GRPC_SHADOW_ASN1_i2d_bio',
+ '#define ASN1_i2d_fp GRPC_SHADOW_ASN1_i2d_fp',
+ '#define ASN1_item_i2d_bio GRPC_SHADOW_ASN1_item_i2d_bio',
+ '#define ASN1_item_i2d_fp GRPC_SHADOW_ASN1_item_i2d_fp',
+ '#define ASN1_INTEGER_cmp GRPC_SHADOW_ASN1_INTEGER_cmp',
+ '#define ASN1_INTEGER_dup GRPC_SHADOW_ASN1_INTEGER_dup',
+ '#define ASN1_INTEGER_get GRPC_SHADOW_ASN1_INTEGER_get',
+ '#define ASN1_INTEGER_set GRPC_SHADOW_ASN1_INTEGER_set',
+ '#define ASN1_INTEGER_set_uint64 GRPC_SHADOW_ASN1_INTEGER_set_uint64',
+ '#define ASN1_INTEGER_to_BN GRPC_SHADOW_ASN1_INTEGER_to_BN',
+ '#define BN_to_ASN1_INTEGER GRPC_SHADOW_BN_to_ASN1_INTEGER',
+ '#define c2i_ASN1_INTEGER GRPC_SHADOW_c2i_ASN1_INTEGER',
+ '#define d2i_ASN1_UINTEGER GRPC_SHADOW_d2i_ASN1_UINTEGER',
+ '#define i2c_ASN1_INTEGER GRPC_SHADOW_i2c_ASN1_INTEGER',
+ '#define ASN1_mbstring_copy GRPC_SHADOW_ASN1_mbstring_copy',
+ '#define ASN1_mbstring_ncopy GRPC_SHADOW_ASN1_mbstring_ncopy',
+ '#define ASN1_OBJECT_create GRPC_SHADOW_ASN1_OBJECT_create',
+ '#define ASN1_OBJECT_free GRPC_SHADOW_ASN1_OBJECT_free',
+ '#define ASN1_OBJECT_new GRPC_SHADOW_ASN1_OBJECT_new',
+ '#define c2i_ASN1_OBJECT GRPC_SHADOW_c2i_ASN1_OBJECT',
+ '#define d2i_ASN1_OBJECT GRPC_SHADOW_d2i_ASN1_OBJECT',
+ '#define i2a_ASN1_OBJECT GRPC_SHADOW_i2a_ASN1_OBJECT',
+ '#define i2d_ASN1_OBJECT GRPC_SHADOW_i2d_ASN1_OBJECT',
+ '#define i2t_ASN1_OBJECT GRPC_SHADOW_i2t_ASN1_OBJECT',
+ '#define ASN1_OCTET_STRING_cmp GRPC_SHADOW_ASN1_OCTET_STRING_cmp',
+ '#define ASN1_OCTET_STRING_dup GRPC_SHADOW_ASN1_OCTET_STRING_dup',
+ '#define ASN1_OCTET_STRING_set GRPC_SHADOW_ASN1_OCTET_STRING_set',
+ '#define ASN1_PRINTABLE_type GRPC_SHADOW_ASN1_PRINTABLE_type',
+ '#define ASN1_STRING_TABLE_add GRPC_SHADOW_ASN1_STRING_TABLE_add',
+ '#define ASN1_STRING_TABLE_cleanup GRPC_SHADOW_ASN1_STRING_TABLE_cleanup',
+ '#define ASN1_STRING_TABLE_get GRPC_SHADOW_ASN1_STRING_TABLE_get',
+ '#define ASN1_STRING_get_default_mask GRPC_SHADOW_ASN1_STRING_get_default_mask',
+ '#define ASN1_STRING_set_by_NID GRPC_SHADOW_ASN1_STRING_set_by_NID',
+ '#define ASN1_STRING_set_default_mask GRPC_SHADOW_ASN1_STRING_set_default_mask',
+ '#define ASN1_STRING_set_default_mask_asc GRPC_SHADOW_ASN1_STRING_set_default_mask_asc',
+ '#define ASN1_TIME_adj GRPC_SHADOW_ASN1_TIME_adj',
+ '#define ASN1_TIME_check GRPC_SHADOW_ASN1_TIME_check',
+ '#define ASN1_TIME_diff GRPC_SHADOW_ASN1_TIME_diff',
+ '#define ASN1_TIME_free GRPC_SHADOW_ASN1_TIME_free',
+ '#define ASN1_TIME_it GRPC_SHADOW_ASN1_TIME_it',
+ '#define ASN1_TIME_new GRPC_SHADOW_ASN1_TIME_new',
+ '#define ASN1_TIME_set GRPC_SHADOW_ASN1_TIME_set',
+ '#define ASN1_TIME_set_string GRPC_SHADOW_ASN1_TIME_set_string',
+ '#define ASN1_TIME_to_generalizedtime GRPC_SHADOW_ASN1_TIME_to_generalizedtime',
+ '#define d2i_ASN1_TIME GRPC_SHADOW_d2i_ASN1_TIME',
+ '#define i2d_ASN1_TIME GRPC_SHADOW_i2d_ASN1_TIME',
+ '#define ASN1_TYPE_cmp GRPC_SHADOW_ASN1_TYPE_cmp',
+ '#define ASN1_TYPE_get GRPC_SHADOW_ASN1_TYPE_get',
+ '#define ASN1_TYPE_set GRPC_SHADOW_ASN1_TYPE_set',
+ '#define ASN1_TYPE_set1 GRPC_SHADOW_ASN1_TYPE_set1',
+ '#define ASN1_UTCTIME_adj GRPC_SHADOW_ASN1_UTCTIME_adj',
+ '#define ASN1_UTCTIME_check GRPC_SHADOW_ASN1_UTCTIME_check',
+ '#define ASN1_UTCTIME_cmp_time_t GRPC_SHADOW_ASN1_UTCTIME_cmp_time_t',
+ '#define ASN1_UTCTIME_set GRPC_SHADOW_ASN1_UTCTIME_set',
+ '#define ASN1_UTCTIME_set_string GRPC_SHADOW_ASN1_UTCTIME_set_string',
+ '#define asn1_utctime_to_tm GRPC_SHADOW_asn1_utctime_to_tm',
+ '#define UTF8_getc GRPC_SHADOW_UTF8_getc',
+ '#define UTF8_putc GRPC_SHADOW_UTF8_putc',
+ '#define ASN1_STRING_cmp GRPC_SHADOW_ASN1_STRING_cmp',
+ '#define ASN1_STRING_copy GRPC_SHADOW_ASN1_STRING_copy',
+ '#define ASN1_STRING_data GRPC_SHADOW_ASN1_STRING_data',
+ '#define ASN1_STRING_dup GRPC_SHADOW_ASN1_STRING_dup',
+ '#define ASN1_STRING_free GRPC_SHADOW_ASN1_STRING_free',
+ '#define ASN1_STRING_get0_data GRPC_SHADOW_ASN1_STRING_get0_data',
+ '#define ASN1_STRING_length GRPC_SHADOW_ASN1_STRING_length',
+ '#define ASN1_STRING_length_set GRPC_SHADOW_ASN1_STRING_length_set',
+ '#define ASN1_STRING_new GRPC_SHADOW_ASN1_STRING_new',
+ '#define ASN1_STRING_set GRPC_SHADOW_ASN1_STRING_set',
+ '#define ASN1_STRING_set0 GRPC_SHADOW_ASN1_STRING_set0',
+ '#define ASN1_STRING_type GRPC_SHADOW_ASN1_STRING_type',
+ '#define ASN1_STRING_type_new GRPC_SHADOW_ASN1_STRING_type_new',
+ '#define ASN1_get_object GRPC_SHADOW_ASN1_get_object',
+ '#define ASN1_object_size GRPC_SHADOW_ASN1_object_size',
+ '#define ASN1_put_eoc GRPC_SHADOW_ASN1_put_eoc',
+ '#define ASN1_put_object GRPC_SHADOW_ASN1_put_object',
+ '#define ASN1_tag2str GRPC_SHADOW_ASN1_tag2str',
+ '#define ASN1_item_pack GRPC_SHADOW_ASN1_item_pack',
+ '#define ASN1_item_unpack GRPC_SHADOW_ASN1_item_unpack',
+ '#define i2a_ASN1_ENUMERATED GRPC_SHADOW_i2a_ASN1_ENUMERATED',
+ '#define i2a_ASN1_INTEGER GRPC_SHADOW_i2a_ASN1_INTEGER',
+ '#define i2a_ASN1_STRING GRPC_SHADOW_i2a_ASN1_STRING',
+ '#define ASN1_item_d2i GRPC_SHADOW_ASN1_item_d2i',
+ '#define ASN1_item_ex_d2i GRPC_SHADOW_ASN1_item_ex_d2i',
+ '#define ASN1_tag2bit GRPC_SHADOW_ASN1_tag2bit',
+ '#define asn1_ex_c2i GRPC_SHADOW_asn1_ex_c2i',
+ '#define ASN1_item_ex_i2d GRPC_SHADOW_ASN1_item_ex_i2d',
+ '#define ASN1_item_i2d GRPC_SHADOW_ASN1_item_i2d',
+ '#define ASN1_item_ndef_i2d GRPC_SHADOW_ASN1_item_ndef_i2d',
+ '#define asn1_ex_i2c GRPC_SHADOW_asn1_ex_i2c',
+ '#define ASN1_item_ex_free GRPC_SHADOW_ASN1_item_ex_free',
+ '#define ASN1_item_free GRPC_SHADOW_ASN1_item_free',
+ '#define ASN1_primitive_free GRPC_SHADOW_ASN1_primitive_free',
+ '#define ASN1_template_free GRPC_SHADOW_ASN1_template_free',
+ '#define asn1_item_combine_free GRPC_SHADOW_asn1_item_combine_free',
+ '#define ASN1_item_ex_new GRPC_SHADOW_ASN1_item_ex_new',
+ '#define ASN1_item_new GRPC_SHADOW_ASN1_item_new',
+ '#define ASN1_primitive_new GRPC_SHADOW_ASN1_primitive_new',
+ '#define ASN1_template_new GRPC_SHADOW_ASN1_template_new',
+ '#define ASN1_ANY_it GRPC_SHADOW_ASN1_ANY_it',
+ '#define ASN1_BIT_STRING_free GRPC_SHADOW_ASN1_BIT_STRING_free',
+ '#define ASN1_BIT_STRING_it GRPC_SHADOW_ASN1_BIT_STRING_it',
+ '#define ASN1_BIT_STRING_new GRPC_SHADOW_ASN1_BIT_STRING_new',
+ '#define ASN1_BMPSTRING_free GRPC_SHADOW_ASN1_BMPSTRING_free',
+ '#define ASN1_BMPSTRING_it GRPC_SHADOW_ASN1_BMPSTRING_it',
+ '#define ASN1_BMPSTRING_new GRPC_SHADOW_ASN1_BMPSTRING_new',
+ '#define ASN1_BOOLEAN_it GRPC_SHADOW_ASN1_BOOLEAN_it',
+ '#define ASN1_ENUMERATED_free GRPC_SHADOW_ASN1_ENUMERATED_free',
+ '#define ASN1_ENUMERATED_it GRPC_SHADOW_ASN1_ENUMERATED_it',
+ '#define ASN1_ENUMERATED_new GRPC_SHADOW_ASN1_ENUMERATED_new',
+ '#define ASN1_FBOOLEAN_it GRPC_SHADOW_ASN1_FBOOLEAN_it',
+ '#define ASN1_GENERALIZEDTIME_free GRPC_SHADOW_ASN1_GENERALIZEDTIME_free',
+ '#define ASN1_GENERALIZEDTIME_it GRPC_SHADOW_ASN1_GENERALIZEDTIME_it',
+ '#define ASN1_GENERALIZEDTIME_new GRPC_SHADOW_ASN1_GENERALIZEDTIME_new',
+ '#define ASN1_GENERALSTRING_free GRPC_SHADOW_ASN1_GENERALSTRING_free',
+ '#define ASN1_GENERALSTRING_it GRPC_SHADOW_ASN1_GENERALSTRING_it',
+ '#define ASN1_GENERALSTRING_new GRPC_SHADOW_ASN1_GENERALSTRING_new',
+ '#define ASN1_IA5STRING_free GRPC_SHADOW_ASN1_IA5STRING_free',
+ '#define ASN1_IA5STRING_it GRPC_SHADOW_ASN1_IA5STRING_it',
+ '#define ASN1_IA5STRING_new GRPC_SHADOW_ASN1_IA5STRING_new',
+ '#define ASN1_INTEGER_free GRPC_SHADOW_ASN1_INTEGER_free',
+ '#define ASN1_INTEGER_it GRPC_SHADOW_ASN1_INTEGER_it',
+ '#define ASN1_INTEGER_new GRPC_SHADOW_ASN1_INTEGER_new',
+ '#define ASN1_NULL_free GRPC_SHADOW_ASN1_NULL_free',
+ '#define ASN1_NULL_it GRPC_SHADOW_ASN1_NULL_it',
+ '#define ASN1_NULL_new GRPC_SHADOW_ASN1_NULL_new',
+ '#define ASN1_OBJECT_it GRPC_SHADOW_ASN1_OBJECT_it',
+ '#define ASN1_OCTET_STRING_NDEF_it GRPC_SHADOW_ASN1_OCTET_STRING_NDEF_it',
+ '#define ASN1_OCTET_STRING_free GRPC_SHADOW_ASN1_OCTET_STRING_free',
+ '#define ASN1_OCTET_STRING_it GRPC_SHADOW_ASN1_OCTET_STRING_it',
+ '#define ASN1_OCTET_STRING_new GRPC_SHADOW_ASN1_OCTET_STRING_new',
+ '#define ASN1_PRINTABLESTRING_free GRPC_SHADOW_ASN1_PRINTABLESTRING_free',
+ '#define ASN1_PRINTABLESTRING_it GRPC_SHADOW_ASN1_PRINTABLESTRING_it',
+ '#define ASN1_PRINTABLESTRING_new GRPC_SHADOW_ASN1_PRINTABLESTRING_new',
+ '#define ASN1_PRINTABLE_free GRPC_SHADOW_ASN1_PRINTABLE_free',
+ '#define ASN1_PRINTABLE_it GRPC_SHADOW_ASN1_PRINTABLE_it',
+ '#define ASN1_PRINTABLE_new GRPC_SHADOW_ASN1_PRINTABLE_new',
+ '#define ASN1_SEQUENCE_ANY_it GRPC_SHADOW_ASN1_SEQUENCE_ANY_it',
+ '#define ASN1_SEQUENCE_it GRPC_SHADOW_ASN1_SEQUENCE_it',
+ '#define ASN1_SET_ANY_it GRPC_SHADOW_ASN1_SET_ANY_it',
+ '#define ASN1_T61STRING_free GRPC_SHADOW_ASN1_T61STRING_free',
+ '#define ASN1_T61STRING_it GRPC_SHADOW_ASN1_T61STRING_it',
+ '#define ASN1_T61STRING_new GRPC_SHADOW_ASN1_T61STRING_new',
+ '#define ASN1_TBOOLEAN_it GRPC_SHADOW_ASN1_TBOOLEAN_it',
+ '#define ASN1_TYPE_free GRPC_SHADOW_ASN1_TYPE_free',
+ '#define ASN1_TYPE_new GRPC_SHADOW_ASN1_TYPE_new',
+ '#define ASN1_UNIVERSALSTRING_free GRPC_SHADOW_ASN1_UNIVERSALSTRING_free',
+ '#define ASN1_UNIVERSALSTRING_it GRPC_SHADOW_ASN1_UNIVERSALSTRING_it',
+ '#define ASN1_UNIVERSALSTRING_new GRPC_SHADOW_ASN1_UNIVERSALSTRING_new',
+ '#define ASN1_UTCTIME_free GRPC_SHADOW_ASN1_UTCTIME_free',
+ '#define ASN1_UTCTIME_it GRPC_SHADOW_ASN1_UTCTIME_it',
+ '#define ASN1_UTCTIME_new GRPC_SHADOW_ASN1_UTCTIME_new',
+ '#define ASN1_UTF8STRING_free GRPC_SHADOW_ASN1_UTF8STRING_free',
+ '#define ASN1_UTF8STRING_it GRPC_SHADOW_ASN1_UTF8STRING_it',
+ '#define ASN1_UTF8STRING_new GRPC_SHADOW_ASN1_UTF8STRING_new',
+ '#define ASN1_VISIBLESTRING_free GRPC_SHADOW_ASN1_VISIBLESTRING_free',
+ '#define ASN1_VISIBLESTRING_it GRPC_SHADOW_ASN1_VISIBLESTRING_it',
+ '#define ASN1_VISIBLESTRING_new GRPC_SHADOW_ASN1_VISIBLESTRING_new',
+ '#define DIRECTORYSTRING_free GRPC_SHADOW_DIRECTORYSTRING_free',
+ '#define DIRECTORYSTRING_it GRPC_SHADOW_DIRECTORYSTRING_it',
+ '#define DIRECTORYSTRING_new GRPC_SHADOW_DIRECTORYSTRING_new',
+ '#define DISPLAYTEXT_free GRPC_SHADOW_DISPLAYTEXT_free',
+ '#define DISPLAYTEXT_it GRPC_SHADOW_DISPLAYTEXT_it',
+ '#define DISPLAYTEXT_new GRPC_SHADOW_DISPLAYTEXT_new',
+ '#define d2i_ASN1_BIT_STRING GRPC_SHADOW_d2i_ASN1_BIT_STRING',
+ '#define d2i_ASN1_BMPSTRING GRPC_SHADOW_d2i_ASN1_BMPSTRING',
+ '#define d2i_ASN1_ENUMERATED GRPC_SHADOW_d2i_ASN1_ENUMERATED',
+ '#define d2i_ASN1_GENERALIZEDTIME GRPC_SHADOW_d2i_ASN1_GENERALIZEDTIME',
+ '#define d2i_ASN1_GENERALSTRING GRPC_SHADOW_d2i_ASN1_GENERALSTRING',
+ '#define d2i_ASN1_IA5STRING GRPC_SHADOW_d2i_ASN1_IA5STRING',
+ '#define d2i_ASN1_INTEGER GRPC_SHADOW_d2i_ASN1_INTEGER',
+ '#define d2i_ASN1_NULL GRPC_SHADOW_d2i_ASN1_NULL',
+ '#define d2i_ASN1_OCTET_STRING GRPC_SHADOW_d2i_ASN1_OCTET_STRING',
+ '#define d2i_ASN1_PRINTABLE GRPC_SHADOW_d2i_ASN1_PRINTABLE',
+ '#define d2i_ASN1_PRINTABLESTRING GRPC_SHADOW_d2i_ASN1_PRINTABLESTRING',
+ '#define d2i_ASN1_SEQUENCE_ANY GRPC_SHADOW_d2i_ASN1_SEQUENCE_ANY',
+ '#define d2i_ASN1_SET_ANY GRPC_SHADOW_d2i_ASN1_SET_ANY',
+ '#define d2i_ASN1_T61STRING GRPC_SHADOW_d2i_ASN1_T61STRING',
+ '#define d2i_ASN1_TYPE GRPC_SHADOW_d2i_ASN1_TYPE',
+ '#define d2i_ASN1_UNIVERSALSTRING GRPC_SHADOW_d2i_ASN1_UNIVERSALSTRING',
+ '#define d2i_ASN1_UTCTIME GRPC_SHADOW_d2i_ASN1_UTCTIME',
+ '#define d2i_ASN1_UTF8STRING GRPC_SHADOW_d2i_ASN1_UTF8STRING',
+ '#define d2i_ASN1_VISIBLESTRING GRPC_SHADOW_d2i_ASN1_VISIBLESTRING',
+ '#define d2i_DIRECTORYSTRING GRPC_SHADOW_d2i_DIRECTORYSTRING',
+ '#define d2i_DISPLAYTEXT GRPC_SHADOW_d2i_DISPLAYTEXT',
+ '#define i2d_ASN1_BIT_STRING GRPC_SHADOW_i2d_ASN1_BIT_STRING',
+ '#define i2d_ASN1_BMPSTRING GRPC_SHADOW_i2d_ASN1_BMPSTRING',
+ '#define i2d_ASN1_ENUMERATED GRPC_SHADOW_i2d_ASN1_ENUMERATED',
+ '#define i2d_ASN1_GENERALIZEDTIME GRPC_SHADOW_i2d_ASN1_GENERALIZEDTIME',
+ '#define i2d_ASN1_GENERALSTRING GRPC_SHADOW_i2d_ASN1_GENERALSTRING',
+ '#define i2d_ASN1_IA5STRING GRPC_SHADOW_i2d_ASN1_IA5STRING',
+ '#define i2d_ASN1_INTEGER GRPC_SHADOW_i2d_ASN1_INTEGER',
+ '#define i2d_ASN1_NULL GRPC_SHADOW_i2d_ASN1_NULL',
+ '#define i2d_ASN1_OCTET_STRING GRPC_SHADOW_i2d_ASN1_OCTET_STRING',
+ '#define i2d_ASN1_PRINTABLE GRPC_SHADOW_i2d_ASN1_PRINTABLE',
+ '#define i2d_ASN1_PRINTABLESTRING GRPC_SHADOW_i2d_ASN1_PRINTABLESTRING',
+ '#define i2d_ASN1_SEQUENCE_ANY GRPC_SHADOW_i2d_ASN1_SEQUENCE_ANY',
+ '#define i2d_ASN1_SET_ANY GRPC_SHADOW_i2d_ASN1_SET_ANY',
+ '#define i2d_ASN1_T61STRING GRPC_SHADOW_i2d_ASN1_T61STRING',
+ '#define i2d_ASN1_TYPE GRPC_SHADOW_i2d_ASN1_TYPE',
+ '#define i2d_ASN1_UNIVERSALSTRING GRPC_SHADOW_i2d_ASN1_UNIVERSALSTRING',
+ '#define i2d_ASN1_UTCTIME GRPC_SHADOW_i2d_ASN1_UTCTIME',
+ '#define i2d_ASN1_UTF8STRING GRPC_SHADOW_i2d_ASN1_UTF8STRING',
+ '#define i2d_ASN1_VISIBLESTRING GRPC_SHADOW_i2d_ASN1_VISIBLESTRING',
+ '#define i2d_DIRECTORYSTRING GRPC_SHADOW_i2d_DIRECTORYSTRING',
+ '#define i2d_DISPLAYTEXT GRPC_SHADOW_i2d_DISPLAYTEXT',
+ '#define asn1_do_adb GRPC_SHADOW_asn1_do_adb',
+ '#define asn1_enc_free GRPC_SHADOW_asn1_enc_free',
+ '#define asn1_enc_init GRPC_SHADOW_asn1_enc_init',
+ '#define asn1_enc_restore GRPC_SHADOW_asn1_enc_restore',
+ '#define asn1_enc_save GRPC_SHADOW_asn1_enc_save',
+ '#define asn1_get_choice_selector GRPC_SHADOW_asn1_get_choice_selector',
+ '#define asn1_get_field_ptr GRPC_SHADOW_asn1_get_field_ptr',
+ '#define asn1_refcount_dec_and_test_zero GRPC_SHADOW_asn1_refcount_dec_and_test_zero',
+ '#define asn1_refcount_set_one GRPC_SHADOW_asn1_refcount_set_one',
+ '#define asn1_set_choice_selector GRPC_SHADOW_asn1_set_choice_selector',
+ '#define OPENSSL_gmtime GRPC_SHADOW_OPENSSL_gmtime',
+ '#define OPENSSL_gmtime_adj GRPC_SHADOW_OPENSSL_gmtime_adj',
+ '#define OPENSSL_gmtime_diff GRPC_SHADOW_OPENSSL_gmtime_diff',
+ '#define ENGINE_free GRPC_SHADOW_ENGINE_free',
+ '#define ENGINE_get_ECDSA_method GRPC_SHADOW_ENGINE_get_ECDSA_method',
+ '#define ENGINE_get_RSA_method GRPC_SHADOW_ENGINE_get_RSA_method',
+ '#define ENGINE_new GRPC_SHADOW_ENGINE_new',
+ '#define ENGINE_set_ECDSA_method GRPC_SHADOW_ENGINE_set_ECDSA_method',
+ '#define ENGINE_set_RSA_method GRPC_SHADOW_ENGINE_set_RSA_method',
+ '#define METHOD_ref GRPC_SHADOW_METHOD_ref',
+ '#define METHOD_unref GRPC_SHADOW_METHOD_unref',
+ '#define DH_compute_key GRPC_SHADOW_DH_compute_key',
+ '#define DH_free GRPC_SHADOW_DH_free',
+ '#define DH_generate_key GRPC_SHADOW_DH_generate_key',
+ '#define DH_generate_parameters_ex GRPC_SHADOW_DH_generate_parameters_ex',
+ '#define DH_get0_key GRPC_SHADOW_DH_get0_key',
+ '#define DH_get0_pqg GRPC_SHADOW_DH_get0_pqg',
+ '#define DH_get_ex_data GRPC_SHADOW_DH_get_ex_data',
+ '#define DH_get_ex_new_index GRPC_SHADOW_DH_get_ex_new_index',
+ '#define DH_new GRPC_SHADOW_DH_new',
+ '#define DH_num_bits GRPC_SHADOW_DH_num_bits',
+ '#define DH_set0_key GRPC_SHADOW_DH_set0_key',
+ '#define DH_set0_pqg GRPC_SHADOW_DH_set0_pqg',
+ '#define DH_set_ex_data GRPC_SHADOW_DH_set_ex_data',
+ '#define DH_size GRPC_SHADOW_DH_size',
+ '#define DH_up_ref GRPC_SHADOW_DH_up_ref',
+ '#define DHparams_dup GRPC_SHADOW_DHparams_dup',
+ '#define BN_get_rfc3526_prime_1536 GRPC_SHADOW_BN_get_rfc3526_prime_1536',
+ '#define DH_check GRPC_SHADOW_DH_check',
+ '#define DH_check_pub_key GRPC_SHADOW_DH_check_pub_key',
+ '#define DH_marshal_parameters GRPC_SHADOW_DH_marshal_parameters',
+ '#define DH_parse_parameters GRPC_SHADOW_DH_parse_parameters',
+ '#define d2i_DHparams GRPC_SHADOW_d2i_DHparams',
+ '#define i2d_DHparams GRPC_SHADOW_i2d_DHparams',
+ '#define DSA_SIG_free GRPC_SHADOW_DSA_SIG_free',
+ '#define DSA_SIG_new GRPC_SHADOW_DSA_SIG_new',
+ '#define DSA_check_signature GRPC_SHADOW_DSA_check_signature',
+ '#define DSA_do_check_signature GRPC_SHADOW_DSA_do_check_signature',
+ '#define DSA_do_sign GRPC_SHADOW_DSA_do_sign',
+ '#define DSA_do_verify GRPC_SHADOW_DSA_do_verify',
+ '#define DSA_dup_DH GRPC_SHADOW_DSA_dup_DH',
+ '#define DSA_free GRPC_SHADOW_DSA_free',
+ '#define DSA_generate_key GRPC_SHADOW_DSA_generate_key',
+ '#define DSA_generate_parameters_ex GRPC_SHADOW_DSA_generate_parameters_ex',
+ '#define DSA_get0_key GRPC_SHADOW_DSA_get0_key',
+ '#define DSA_get0_pqg GRPC_SHADOW_DSA_get0_pqg',
+ '#define DSA_get_ex_data GRPC_SHADOW_DSA_get_ex_data',
+ '#define DSA_get_ex_new_index GRPC_SHADOW_DSA_get_ex_new_index',
+ '#define DSA_new GRPC_SHADOW_DSA_new',
+ '#define DSA_set0_key GRPC_SHADOW_DSA_set0_key',
+ '#define DSA_set0_pqg GRPC_SHADOW_DSA_set0_pqg',
+ '#define DSA_set_ex_data GRPC_SHADOW_DSA_set_ex_data',
+ '#define DSA_sign GRPC_SHADOW_DSA_sign',
+ '#define DSA_size GRPC_SHADOW_DSA_size',
+ '#define DSA_up_ref GRPC_SHADOW_DSA_up_ref',
+ '#define DSA_verify GRPC_SHADOW_DSA_verify',
+ '#define DSAparams_dup GRPC_SHADOW_DSAparams_dup',
+ '#define DSA_SIG_marshal GRPC_SHADOW_DSA_SIG_marshal',
+ '#define DSA_SIG_parse GRPC_SHADOW_DSA_SIG_parse',
+ '#define DSA_marshal_parameters GRPC_SHADOW_DSA_marshal_parameters',
+ '#define DSA_marshal_private_key GRPC_SHADOW_DSA_marshal_private_key',
+ '#define DSA_marshal_public_key GRPC_SHADOW_DSA_marshal_public_key',
+ '#define DSA_parse_parameters GRPC_SHADOW_DSA_parse_parameters',
+ '#define DSA_parse_private_key GRPC_SHADOW_DSA_parse_private_key',
+ '#define DSA_parse_public_key GRPC_SHADOW_DSA_parse_public_key',
+ '#define d2i_DSAPrivateKey GRPC_SHADOW_d2i_DSAPrivateKey',
+ '#define d2i_DSAPublicKey GRPC_SHADOW_d2i_DSAPublicKey',
+ '#define d2i_DSA_SIG GRPC_SHADOW_d2i_DSA_SIG',
+ '#define d2i_DSAparams GRPC_SHADOW_d2i_DSAparams',
+ '#define i2d_DSAPrivateKey GRPC_SHADOW_i2d_DSAPrivateKey',
+ '#define i2d_DSAPublicKey GRPC_SHADOW_i2d_DSAPublicKey',
+ '#define i2d_DSA_SIG GRPC_SHADOW_i2d_DSA_SIG',
+ '#define i2d_DSAparams GRPC_SHADOW_i2d_DSAparams',
+ '#define RSAPrivateKey_dup GRPC_SHADOW_RSAPrivateKey_dup',
+ '#define RSAPublicKey_dup GRPC_SHADOW_RSAPublicKey_dup',
+ '#define RSA_marshal_private_key GRPC_SHADOW_RSA_marshal_private_key',
+ '#define RSA_marshal_public_key GRPC_SHADOW_RSA_marshal_public_key',
+ '#define RSA_parse_private_key GRPC_SHADOW_RSA_parse_private_key',
+ '#define RSA_parse_public_key GRPC_SHADOW_RSA_parse_public_key',
+ '#define RSA_private_key_from_bytes GRPC_SHADOW_RSA_private_key_from_bytes',
+ '#define RSA_private_key_to_bytes GRPC_SHADOW_RSA_private_key_to_bytes',
+ '#define RSA_public_key_from_bytes GRPC_SHADOW_RSA_public_key_from_bytes',
+ '#define RSA_public_key_to_bytes GRPC_SHADOW_RSA_public_key_to_bytes',
+ '#define d2i_RSAPrivateKey GRPC_SHADOW_d2i_RSAPrivateKey',
+ '#define d2i_RSAPublicKey GRPC_SHADOW_d2i_RSAPublicKey',
+ '#define i2d_RSAPrivateKey GRPC_SHADOW_i2d_RSAPrivateKey',
+ '#define i2d_RSAPublicKey GRPC_SHADOW_i2d_RSAPublicKey',
+ '#define EC_KEY_marshal_curve_name GRPC_SHADOW_EC_KEY_marshal_curve_name',
+ '#define EC_KEY_marshal_private_key GRPC_SHADOW_EC_KEY_marshal_private_key',
+ '#define EC_KEY_parse_curve_name GRPC_SHADOW_EC_KEY_parse_curve_name',
+ '#define EC_KEY_parse_parameters GRPC_SHADOW_EC_KEY_parse_parameters',
+ '#define EC_KEY_parse_private_key GRPC_SHADOW_EC_KEY_parse_private_key',
+ '#define EC_POINT_point2cbb GRPC_SHADOW_EC_POINT_point2cbb',
+ '#define d2i_ECParameters GRPC_SHADOW_d2i_ECParameters',
+ '#define d2i_ECPrivateKey GRPC_SHADOW_d2i_ECPrivateKey',
+ '#define i2d_ECParameters GRPC_SHADOW_i2d_ECParameters',
+ '#define i2d_ECPrivateKey GRPC_SHADOW_i2d_ECPrivateKey',
+ '#define i2o_ECPublicKey GRPC_SHADOW_i2o_ECPublicKey',
+ '#define o2i_ECPublicKey GRPC_SHADOW_o2i_ECPublicKey',
+ '#define ECDH_compute_key GRPC_SHADOW_ECDH_compute_key',
+ '#define ECDSA_SIG_from_bytes GRPC_SHADOW_ECDSA_SIG_from_bytes',
+ '#define ECDSA_SIG_marshal GRPC_SHADOW_ECDSA_SIG_marshal',
+ '#define ECDSA_SIG_max_len GRPC_SHADOW_ECDSA_SIG_max_len',
+ '#define ECDSA_SIG_parse GRPC_SHADOW_ECDSA_SIG_parse',
+ '#define ECDSA_SIG_to_bytes GRPC_SHADOW_ECDSA_SIG_to_bytes',
+ '#define ECDSA_sign GRPC_SHADOW_ECDSA_sign',
+ '#define ECDSA_size GRPC_SHADOW_ECDSA_size',
+ '#define ECDSA_verify GRPC_SHADOW_ECDSA_verify',
+ '#define d2i_ECDSA_SIG GRPC_SHADOW_d2i_ECDSA_SIG',
+ '#define i2d_ECDSA_SIG GRPC_SHADOW_i2d_ECDSA_SIG',
+ '#define AES_CMAC GRPC_SHADOW_AES_CMAC',
+ '#define CMAC_CTX_free GRPC_SHADOW_CMAC_CTX_free',
+ '#define CMAC_CTX_new GRPC_SHADOW_CMAC_CTX_new',
+ '#define CMAC_Final GRPC_SHADOW_CMAC_Final',
+ '#define CMAC_Init GRPC_SHADOW_CMAC_Init',
+ '#define CMAC_Reset GRPC_SHADOW_CMAC_Reset',
+ '#define CMAC_Update GRPC_SHADOW_CMAC_Update',
+ '#define EVP_DigestSign GRPC_SHADOW_EVP_DigestSign',
+ '#define EVP_DigestSignFinal GRPC_SHADOW_EVP_DigestSignFinal',
+ '#define EVP_DigestSignInit GRPC_SHADOW_EVP_DigestSignInit',
+ '#define EVP_DigestSignUpdate GRPC_SHADOW_EVP_DigestSignUpdate',
+ '#define EVP_DigestVerify GRPC_SHADOW_EVP_DigestVerify',
+ '#define EVP_DigestVerifyFinal GRPC_SHADOW_EVP_DigestVerifyFinal',
+ '#define EVP_DigestVerifyInit GRPC_SHADOW_EVP_DigestVerifyInit',
+ '#define EVP_DigestVerifyUpdate GRPC_SHADOW_EVP_DigestVerifyUpdate',
+ '#define EVP_PKEY_CTX_get_signature_md GRPC_SHADOW_EVP_PKEY_CTX_get_signature_md',
+ '#define EVP_PKEY_CTX_set_signature_md GRPC_SHADOW_EVP_PKEY_CTX_set_signature_md',
+ '#define EVP_PKEY_assign GRPC_SHADOW_EVP_PKEY_assign',
+ '#define EVP_PKEY_assign_DSA GRPC_SHADOW_EVP_PKEY_assign_DSA',
+ '#define EVP_PKEY_assign_EC_KEY GRPC_SHADOW_EVP_PKEY_assign_EC_KEY',
+ '#define EVP_PKEY_assign_RSA GRPC_SHADOW_EVP_PKEY_assign_RSA',
+ '#define EVP_PKEY_bits GRPC_SHADOW_EVP_PKEY_bits',
+ '#define EVP_PKEY_cmp GRPC_SHADOW_EVP_PKEY_cmp',
+ '#define EVP_PKEY_cmp_parameters GRPC_SHADOW_EVP_PKEY_cmp_parameters',
+ '#define EVP_PKEY_copy_parameters GRPC_SHADOW_EVP_PKEY_copy_parameters',
+ '#define EVP_PKEY_free GRPC_SHADOW_EVP_PKEY_free',
+ '#define EVP_PKEY_get0_DH GRPC_SHADOW_EVP_PKEY_get0_DH',
+ '#define EVP_PKEY_get0_DSA GRPC_SHADOW_EVP_PKEY_get0_DSA',
+ '#define EVP_PKEY_get0_EC_KEY GRPC_SHADOW_EVP_PKEY_get0_EC_KEY',
+ '#define EVP_PKEY_get0_RSA GRPC_SHADOW_EVP_PKEY_get0_RSA',
+ '#define EVP_PKEY_get1_DSA GRPC_SHADOW_EVP_PKEY_get1_DSA',
+ '#define EVP_PKEY_get1_EC_KEY GRPC_SHADOW_EVP_PKEY_get1_EC_KEY',
+ '#define EVP_PKEY_get1_RSA GRPC_SHADOW_EVP_PKEY_get1_RSA',
+ '#define EVP_PKEY_id GRPC_SHADOW_EVP_PKEY_id',
+ '#define EVP_PKEY_is_opaque GRPC_SHADOW_EVP_PKEY_is_opaque',
+ '#define EVP_PKEY_missing_parameters GRPC_SHADOW_EVP_PKEY_missing_parameters',
+ '#define EVP_PKEY_new GRPC_SHADOW_EVP_PKEY_new',
+ '#define EVP_PKEY_set1_DSA GRPC_SHADOW_EVP_PKEY_set1_DSA',
+ '#define EVP_PKEY_set1_EC_KEY GRPC_SHADOW_EVP_PKEY_set1_EC_KEY',
+ '#define EVP_PKEY_set1_RSA GRPC_SHADOW_EVP_PKEY_set1_RSA',
+ '#define EVP_PKEY_set_type GRPC_SHADOW_EVP_PKEY_set_type',
+ '#define EVP_PKEY_size GRPC_SHADOW_EVP_PKEY_size',
+ '#define EVP_PKEY_type GRPC_SHADOW_EVP_PKEY_type',
+ '#define EVP_PKEY_up_ref GRPC_SHADOW_EVP_PKEY_up_ref',
+ '#define EVP_cleanup GRPC_SHADOW_EVP_cleanup',
+ '#define OPENSSL_add_all_algorithms_conf GRPC_SHADOW_OPENSSL_add_all_algorithms_conf',
+ '#define OpenSSL_add_all_algorithms GRPC_SHADOW_OpenSSL_add_all_algorithms',
+ '#define OpenSSL_add_all_ciphers GRPC_SHADOW_OpenSSL_add_all_ciphers',
+ '#define OpenSSL_add_all_digests GRPC_SHADOW_OpenSSL_add_all_digests',
+ '#define EVP_marshal_private_key GRPC_SHADOW_EVP_marshal_private_key',
+ '#define EVP_marshal_public_key GRPC_SHADOW_EVP_marshal_public_key',
+ '#define EVP_parse_private_key GRPC_SHADOW_EVP_parse_private_key',
+ '#define EVP_parse_public_key GRPC_SHADOW_EVP_parse_public_key',
+ '#define d2i_AutoPrivateKey GRPC_SHADOW_d2i_AutoPrivateKey',
+ '#define d2i_PrivateKey GRPC_SHADOW_d2i_PrivateKey',
+ '#define i2d_PublicKey GRPC_SHADOW_i2d_PublicKey',
+ '#define EVP_PKEY_CTX_ctrl GRPC_SHADOW_EVP_PKEY_CTX_ctrl',
+ '#define EVP_PKEY_CTX_dup GRPC_SHADOW_EVP_PKEY_CTX_dup',
+ '#define EVP_PKEY_CTX_free GRPC_SHADOW_EVP_PKEY_CTX_free',
+ '#define EVP_PKEY_CTX_get0_pkey GRPC_SHADOW_EVP_PKEY_CTX_get0_pkey',
+ '#define EVP_PKEY_CTX_new GRPC_SHADOW_EVP_PKEY_CTX_new',
+ '#define EVP_PKEY_CTX_new_id GRPC_SHADOW_EVP_PKEY_CTX_new_id',
+ '#define EVP_PKEY_decrypt GRPC_SHADOW_EVP_PKEY_decrypt',
+ '#define EVP_PKEY_decrypt_init GRPC_SHADOW_EVP_PKEY_decrypt_init',
+ '#define EVP_PKEY_derive GRPC_SHADOW_EVP_PKEY_derive',
+ '#define EVP_PKEY_derive_init GRPC_SHADOW_EVP_PKEY_derive_init',
+ '#define EVP_PKEY_derive_set_peer GRPC_SHADOW_EVP_PKEY_derive_set_peer',
+ '#define EVP_PKEY_encrypt GRPC_SHADOW_EVP_PKEY_encrypt',
+ '#define EVP_PKEY_encrypt_init GRPC_SHADOW_EVP_PKEY_encrypt_init',
+ '#define EVP_PKEY_keygen GRPC_SHADOW_EVP_PKEY_keygen',
+ '#define EVP_PKEY_keygen_init GRPC_SHADOW_EVP_PKEY_keygen_init',
+ '#define EVP_PKEY_sign GRPC_SHADOW_EVP_PKEY_sign',
+ '#define EVP_PKEY_sign_init GRPC_SHADOW_EVP_PKEY_sign_init',
+ '#define EVP_PKEY_verify GRPC_SHADOW_EVP_PKEY_verify',
+ '#define EVP_PKEY_verify_init GRPC_SHADOW_EVP_PKEY_verify_init',
+ '#define EVP_PKEY_verify_recover GRPC_SHADOW_EVP_PKEY_verify_recover',
+ '#define EVP_PKEY_verify_recover_init GRPC_SHADOW_EVP_PKEY_verify_recover_init',
+ '#define dsa_asn1_meth GRPC_SHADOW_dsa_asn1_meth',
+ '#define ec_pkey_meth GRPC_SHADOW_ec_pkey_meth',
+ '#define ec_asn1_meth GRPC_SHADOW_ec_asn1_meth',
+ '#define ed25519_pkey_meth GRPC_SHADOW_ed25519_pkey_meth',
+ '#define EVP_PKEY_new_ed25519_private GRPC_SHADOW_EVP_PKEY_new_ed25519_private',
+ '#define EVP_PKEY_new_ed25519_public GRPC_SHADOW_EVP_PKEY_new_ed25519_public',
+ '#define ed25519_asn1_meth GRPC_SHADOW_ed25519_asn1_meth',
+ '#define EVP_PKEY_CTX_get0_rsa_oaep_label GRPC_SHADOW_EVP_PKEY_CTX_get0_rsa_oaep_label',
+ '#define EVP_PKEY_CTX_get_rsa_mgf1_md GRPC_SHADOW_EVP_PKEY_CTX_get_rsa_mgf1_md',
+ '#define EVP_PKEY_CTX_get_rsa_oaep_md GRPC_SHADOW_EVP_PKEY_CTX_get_rsa_oaep_md',
+ '#define EVP_PKEY_CTX_get_rsa_padding GRPC_SHADOW_EVP_PKEY_CTX_get_rsa_padding',
+ '#define EVP_PKEY_CTX_get_rsa_pss_saltlen GRPC_SHADOW_EVP_PKEY_CTX_get_rsa_pss_saltlen',
+ '#define EVP_PKEY_CTX_set0_rsa_oaep_label GRPC_SHADOW_EVP_PKEY_CTX_set0_rsa_oaep_label',
+ '#define EVP_PKEY_CTX_set_rsa_keygen_bits GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_keygen_bits',
+ '#define EVP_PKEY_CTX_set_rsa_keygen_pubexp GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_keygen_pubexp',
+ '#define EVP_PKEY_CTX_set_rsa_mgf1_md GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_mgf1_md',
+ '#define EVP_PKEY_CTX_set_rsa_oaep_md GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_oaep_md',
+ '#define EVP_PKEY_CTX_set_rsa_padding GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_padding',
+ '#define EVP_PKEY_CTX_set_rsa_pss_saltlen GRPC_SHADOW_EVP_PKEY_CTX_set_rsa_pss_saltlen',
+ '#define rsa_pkey_meth GRPC_SHADOW_rsa_pkey_meth',
+ '#define rsa_asn1_meth GRPC_SHADOW_rsa_asn1_meth',
+ '#define PKCS5_PBKDF2_HMAC GRPC_SHADOW_PKCS5_PBKDF2_HMAC',
+ '#define PKCS5_PBKDF2_HMAC_SHA1 GRPC_SHADOW_PKCS5_PBKDF2_HMAC_SHA1',
+ '#define EVP_PKEY_print_params GRPC_SHADOW_EVP_PKEY_print_params',
+ '#define EVP_PKEY_print_private GRPC_SHADOW_EVP_PKEY_print_private',
+ '#define EVP_PKEY_print_public GRPC_SHADOW_EVP_PKEY_print_public',
+ '#define EVP_PBE_scrypt GRPC_SHADOW_EVP_PBE_scrypt',
+ '#define EVP_SignFinal GRPC_SHADOW_EVP_SignFinal',
+ '#define EVP_SignInit GRPC_SHADOW_EVP_SignInit',
+ '#define EVP_SignInit_ex GRPC_SHADOW_EVP_SignInit_ex',
+ '#define EVP_SignUpdate GRPC_SHADOW_EVP_SignUpdate',
+ '#define EVP_VerifyFinal GRPC_SHADOW_EVP_VerifyFinal',
+ '#define EVP_VerifyInit GRPC_SHADOW_EVP_VerifyInit',
+ '#define EVP_VerifyInit_ex GRPC_SHADOW_EVP_VerifyInit_ex',
+ '#define EVP_VerifyUpdate GRPC_SHADOW_EVP_VerifyUpdate',
+ '#define HKDF GRPC_SHADOW_HKDF',
+ '#define HKDF_expand GRPC_SHADOW_HKDF_expand',
+ '#define HKDF_extract GRPC_SHADOW_HKDF_extract',
+ '#define PEM_read_DSAPrivateKey GRPC_SHADOW_PEM_read_DSAPrivateKey',
+ '#define PEM_read_DSA_PUBKEY GRPC_SHADOW_PEM_read_DSA_PUBKEY',
+ '#define PEM_read_DSAparams GRPC_SHADOW_PEM_read_DSAparams',
+ '#define PEM_read_ECPrivateKey GRPC_SHADOW_PEM_read_ECPrivateKey',
+ '#define PEM_read_EC_PUBKEY GRPC_SHADOW_PEM_read_EC_PUBKEY',
+ '#define PEM_read_PUBKEY GRPC_SHADOW_PEM_read_PUBKEY',
+ '#define PEM_read_RSAPrivateKey GRPC_SHADOW_PEM_read_RSAPrivateKey',
+ '#define PEM_read_RSAPublicKey GRPC_SHADOW_PEM_read_RSAPublicKey',
+ '#define PEM_read_RSA_PUBKEY GRPC_SHADOW_PEM_read_RSA_PUBKEY',
+ '#define PEM_read_X509_CRL GRPC_SHADOW_PEM_read_X509_CRL',
+ '#define PEM_read_X509_REQ GRPC_SHADOW_PEM_read_X509_REQ',
+ '#define PEM_read_bio_DSAPrivateKey GRPC_SHADOW_PEM_read_bio_DSAPrivateKey',
+ '#define PEM_read_bio_DSA_PUBKEY GRPC_SHADOW_PEM_read_bio_DSA_PUBKEY',
+ '#define PEM_read_bio_DSAparams GRPC_SHADOW_PEM_read_bio_DSAparams',
+ '#define PEM_read_bio_ECPrivateKey GRPC_SHADOW_PEM_read_bio_ECPrivateKey',
+ '#define PEM_read_bio_EC_PUBKEY GRPC_SHADOW_PEM_read_bio_EC_PUBKEY',
+ '#define PEM_read_bio_PUBKEY GRPC_SHADOW_PEM_read_bio_PUBKEY',
+ '#define PEM_read_bio_RSAPrivateKey GRPC_SHADOW_PEM_read_bio_RSAPrivateKey',
+ '#define PEM_read_bio_RSAPublicKey GRPC_SHADOW_PEM_read_bio_RSAPublicKey',
+ '#define PEM_read_bio_RSA_PUBKEY GRPC_SHADOW_PEM_read_bio_RSA_PUBKEY',
+ '#define PEM_read_bio_X509_CRL GRPC_SHADOW_PEM_read_bio_X509_CRL',
+ '#define PEM_read_bio_X509_REQ GRPC_SHADOW_PEM_read_bio_X509_REQ',
+ '#define PEM_write_DHparams GRPC_SHADOW_PEM_write_DHparams',
+ '#define PEM_write_DSAPrivateKey GRPC_SHADOW_PEM_write_DSAPrivateKey',
+ '#define PEM_write_DSA_PUBKEY GRPC_SHADOW_PEM_write_DSA_PUBKEY',
+ '#define PEM_write_DSAparams GRPC_SHADOW_PEM_write_DSAparams',
+ '#define PEM_write_ECPrivateKey GRPC_SHADOW_PEM_write_ECPrivateKey',
+ '#define PEM_write_EC_PUBKEY GRPC_SHADOW_PEM_write_EC_PUBKEY',
+ '#define PEM_write_PUBKEY GRPC_SHADOW_PEM_write_PUBKEY',
+ '#define PEM_write_RSAPrivateKey GRPC_SHADOW_PEM_write_RSAPrivateKey',
+ '#define PEM_write_RSAPublicKey GRPC_SHADOW_PEM_write_RSAPublicKey',
+ '#define PEM_write_RSA_PUBKEY GRPC_SHADOW_PEM_write_RSA_PUBKEY',
+ '#define PEM_write_X509_CRL GRPC_SHADOW_PEM_write_X509_CRL',
+ '#define PEM_write_X509_REQ GRPC_SHADOW_PEM_write_X509_REQ',
+ '#define PEM_write_X509_REQ_NEW GRPC_SHADOW_PEM_write_X509_REQ_NEW',
+ '#define PEM_write_bio_DHparams GRPC_SHADOW_PEM_write_bio_DHparams',
+ '#define PEM_write_bio_DSAPrivateKey GRPC_SHADOW_PEM_write_bio_DSAPrivateKey',
+ '#define PEM_write_bio_DSA_PUBKEY GRPC_SHADOW_PEM_write_bio_DSA_PUBKEY',
+ '#define PEM_write_bio_DSAparams GRPC_SHADOW_PEM_write_bio_DSAparams',
+ '#define PEM_write_bio_ECPrivateKey GRPC_SHADOW_PEM_write_bio_ECPrivateKey',
+ '#define PEM_write_bio_EC_PUBKEY GRPC_SHADOW_PEM_write_bio_EC_PUBKEY',
+ '#define PEM_write_bio_PUBKEY GRPC_SHADOW_PEM_write_bio_PUBKEY',
+ '#define PEM_write_bio_RSAPrivateKey GRPC_SHADOW_PEM_write_bio_RSAPrivateKey',
+ '#define PEM_write_bio_RSAPublicKey GRPC_SHADOW_PEM_write_bio_RSAPublicKey',
+ '#define PEM_write_bio_RSA_PUBKEY GRPC_SHADOW_PEM_write_bio_RSA_PUBKEY',
+ '#define PEM_write_bio_X509_CRL GRPC_SHADOW_PEM_write_bio_X509_CRL',
+ '#define PEM_write_bio_X509_REQ GRPC_SHADOW_PEM_write_bio_X509_REQ',
+ '#define PEM_write_bio_X509_REQ_NEW GRPC_SHADOW_PEM_write_bio_X509_REQ_NEW',
+ '#define PEM_X509_INFO_read GRPC_SHADOW_PEM_X509_INFO_read',
+ '#define PEM_X509_INFO_read_bio GRPC_SHADOW_PEM_X509_INFO_read_bio',
+ '#define PEM_X509_INFO_write_bio GRPC_SHADOW_PEM_X509_INFO_write_bio',
+ '#define PEM_ASN1_read GRPC_SHADOW_PEM_ASN1_read',
+ '#define PEM_ASN1_write GRPC_SHADOW_PEM_ASN1_write',
+ '#define PEM_ASN1_write_bio GRPC_SHADOW_PEM_ASN1_write_bio',
+ '#define PEM_bytes_read_bio GRPC_SHADOW_PEM_bytes_read_bio',
+ '#define PEM_def_callback GRPC_SHADOW_PEM_def_callback',
+ '#define PEM_dek_info GRPC_SHADOW_PEM_dek_info',
+ '#define PEM_do_header GRPC_SHADOW_PEM_do_header',
+ '#define PEM_get_EVP_CIPHER_INFO GRPC_SHADOW_PEM_get_EVP_CIPHER_INFO',
+ '#define PEM_proc_type GRPC_SHADOW_PEM_proc_type',
+ '#define PEM_read GRPC_SHADOW_PEM_read',
+ '#define PEM_read_bio GRPC_SHADOW_PEM_read_bio',
+ '#define PEM_write GRPC_SHADOW_PEM_write',
+ '#define PEM_write_bio GRPC_SHADOW_PEM_write_bio',
+ '#define PEM_ASN1_read_bio GRPC_SHADOW_PEM_ASN1_read_bio',
+ '#define PEM_read_PKCS8 GRPC_SHADOW_PEM_read_PKCS8',
+ '#define PEM_read_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_PEM_read_PKCS8_PRIV_KEY_INFO',
+ '#define PEM_read_bio_PKCS8 GRPC_SHADOW_PEM_read_bio_PKCS8',
+ '#define PEM_read_bio_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_PEM_read_bio_PKCS8_PRIV_KEY_INFO',
+ '#define PEM_write_PKCS8 GRPC_SHADOW_PEM_write_PKCS8',
+ '#define PEM_write_PKCS8PrivateKey GRPC_SHADOW_PEM_write_PKCS8PrivateKey',
+ '#define PEM_write_PKCS8PrivateKey_nid GRPC_SHADOW_PEM_write_PKCS8PrivateKey_nid',
+ '#define PEM_write_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_PEM_write_PKCS8_PRIV_KEY_INFO',
+ '#define PEM_write_bio_PKCS8 GRPC_SHADOW_PEM_write_bio_PKCS8',
+ '#define PEM_write_bio_PKCS8PrivateKey GRPC_SHADOW_PEM_write_bio_PKCS8PrivateKey',
+ '#define PEM_write_bio_PKCS8PrivateKey_nid GRPC_SHADOW_PEM_write_bio_PKCS8PrivateKey_nid',
+ '#define PEM_write_bio_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_PEM_write_bio_PKCS8_PRIV_KEY_INFO',
+ '#define d2i_PKCS8PrivateKey_bio GRPC_SHADOW_d2i_PKCS8PrivateKey_bio',
+ '#define d2i_PKCS8PrivateKey_fp GRPC_SHADOW_d2i_PKCS8PrivateKey_fp',
+ '#define i2d_PKCS8PrivateKey_bio GRPC_SHADOW_i2d_PKCS8PrivateKey_bio',
+ '#define i2d_PKCS8PrivateKey_fp GRPC_SHADOW_i2d_PKCS8PrivateKey_fp',
+ '#define i2d_PKCS8PrivateKey_nid_bio GRPC_SHADOW_i2d_PKCS8PrivateKey_nid_bio',
+ '#define i2d_PKCS8PrivateKey_nid_fp GRPC_SHADOW_i2d_PKCS8PrivateKey_nid_fp',
+ '#define PEM_read_DHparams GRPC_SHADOW_PEM_read_DHparams',
+ '#define PEM_read_PrivateKey GRPC_SHADOW_PEM_read_PrivateKey',
+ '#define PEM_read_bio_DHparams GRPC_SHADOW_PEM_read_bio_DHparams',
+ '#define PEM_read_bio_PrivateKey GRPC_SHADOW_PEM_read_bio_PrivateKey',
+ '#define PEM_write_PrivateKey GRPC_SHADOW_PEM_write_PrivateKey',
+ '#define PEM_write_bio_PrivateKey GRPC_SHADOW_PEM_write_bio_PrivateKey',
+ '#define PEM_read_X509 GRPC_SHADOW_PEM_read_X509',
+ '#define PEM_read_bio_X509 GRPC_SHADOW_PEM_read_bio_X509',
+ '#define PEM_write_X509 GRPC_SHADOW_PEM_write_X509',
+ '#define PEM_write_bio_X509 GRPC_SHADOW_PEM_write_bio_X509',
+ '#define PEM_read_X509_AUX GRPC_SHADOW_PEM_read_X509_AUX',
+ '#define PEM_read_bio_X509_AUX GRPC_SHADOW_PEM_read_bio_X509_AUX',
+ '#define PEM_write_X509_AUX GRPC_SHADOW_PEM_write_X509_AUX',
+ '#define PEM_write_bio_X509_AUX GRPC_SHADOW_PEM_write_bio_X509_AUX',
+ '#define ASN1_digest GRPC_SHADOW_ASN1_digest',
+ '#define ASN1_item_digest GRPC_SHADOW_ASN1_item_digest',
+ '#define ASN1_item_sign GRPC_SHADOW_ASN1_item_sign',
+ '#define ASN1_item_sign_ctx GRPC_SHADOW_ASN1_item_sign_ctx',
+ '#define ASN1_STRING_print_ex GRPC_SHADOW_ASN1_STRING_print_ex',
+ '#define ASN1_STRING_print_ex_fp GRPC_SHADOW_ASN1_STRING_print_ex_fp',
+ '#define ASN1_STRING_to_UTF8 GRPC_SHADOW_ASN1_STRING_to_UTF8',
+ '#define X509_NAME_print_ex GRPC_SHADOW_X509_NAME_print_ex',
+ '#define X509_NAME_print_ex_fp GRPC_SHADOW_X509_NAME_print_ex_fp',
+ '#define ASN1_item_verify GRPC_SHADOW_ASN1_item_verify',
+ '#define x509_digest_sign_algorithm GRPC_SHADOW_x509_digest_sign_algorithm',
+ '#define x509_digest_verify_init GRPC_SHADOW_x509_digest_verify_init',
+ '#define ASN1_generate_nconf GRPC_SHADOW_ASN1_generate_nconf',
+ '#define ASN1_generate_v3 GRPC_SHADOW_ASN1_generate_v3',
+ '#define X509_LOOKUP_hash_dir GRPC_SHADOW_X509_LOOKUP_hash_dir',
+ '#define X509_LOOKUP_file GRPC_SHADOW_X509_LOOKUP_file',
+ '#define X509_load_cert_crl_file GRPC_SHADOW_X509_load_cert_crl_file',
+ '#define X509_load_cert_file GRPC_SHADOW_X509_load_cert_file',
+ '#define X509_load_crl_file GRPC_SHADOW_X509_load_crl_file',
+ '#define i2d_PrivateKey GRPC_SHADOW_i2d_PrivateKey',
+ '#define RSA_PSS_PARAMS_free GRPC_SHADOW_RSA_PSS_PARAMS_free',
+ '#define RSA_PSS_PARAMS_it GRPC_SHADOW_RSA_PSS_PARAMS_it',
+ '#define RSA_PSS_PARAMS_new GRPC_SHADOW_RSA_PSS_PARAMS_new',
+ '#define d2i_RSA_PSS_PARAMS GRPC_SHADOW_d2i_RSA_PSS_PARAMS',
+ '#define i2d_RSA_PSS_PARAMS GRPC_SHADOW_i2d_RSA_PSS_PARAMS',
+ '#define x509_print_rsa_pss_params GRPC_SHADOW_x509_print_rsa_pss_params',
+ '#define x509_rsa_ctx_to_pss GRPC_SHADOW_x509_rsa_ctx_to_pss',
+ '#define x509_rsa_pss_to_ctx GRPC_SHADOW_x509_rsa_pss_to_ctx',
+ '#define X509_CRL_print GRPC_SHADOW_X509_CRL_print',
+ '#define X509_CRL_print_fp GRPC_SHADOW_X509_CRL_print_fp',
+ '#define X509_REQ_print GRPC_SHADOW_X509_REQ_print',
+ '#define X509_REQ_print_ex GRPC_SHADOW_X509_REQ_print_ex',
+ '#define X509_REQ_print_fp GRPC_SHADOW_X509_REQ_print_fp',
+ '#define ASN1_GENERALIZEDTIME_print GRPC_SHADOW_ASN1_GENERALIZEDTIME_print',
+ '#define ASN1_STRING_print GRPC_SHADOW_ASN1_STRING_print',
+ '#define ASN1_TIME_print GRPC_SHADOW_ASN1_TIME_print',
+ '#define ASN1_UTCTIME_print GRPC_SHADOW_ASN1_UTCTIME_print',
+ '#define X509_NAME_print GRPC_SHADOW_X509_NAME_print',
+ '#define X509_ocspid_print GRPC_SHADOW_X509_ocspid_print',
+ '#define X509_print GRPC_SHADOW_X509_print',
+ '#define X509_print_ex GRPC_SHADOW_X509_print_ex',
+ '#define X509_print_ex_fp GRPC_SHADOW_X509_print_ex_fp',
+ '#define X509_print_fp GRPC_SHADOW_X509_print_fp',
+ '#define X509_signature_print GRPC_SHADOW_X509_signature_print',
+ '#define X509_CERT_AUX_print GRPC_SHADOW_X509_CERT_AUX_print',
+ '#define PKCS8_pkey_get0 GRPC_SHADOW_PKCS8_pkey_get0',
+ '#define PKCS8_pkey_set0 GRPC_SHADOW_PKCS8_pkey_set0',
+ '#define X509_signature_dump GRPC_SHADOW_X509_signature_dump',
+ '#define X509_ATTRIBUTE_count GRPC_SHADOW_X509_ATTRIBUTE_count',
+ '#define X509_ATTRIBUTE_create_by_NID GRPC_SHADOW_X509_ATTRIBUTE_create_by_NID',
+ '#define X509_ATTRIBUTE_create_by_OBJ GRPC_SHADOW_X509_ATTRIBUTE_create_by_OBJ',
+ '#define X509_ATTRIBUTE_create_by_txt GRPC_SHADOW_X509_ATTRIBUTE_create_by_txt',
+ '#define X509_ATTRIBUTE_get0_data GRPC_SHADOW_X509_ATTRIBUTE_get0_data',
+ '#define X509_ATTRIBUTE_get0_object GRPC_SHADOW_X509_ATTRIBUTE_get0_object',
+ '#define X509_ATTRIBUTE_get0_type GRPC_SHADOW_X509_ATTRIBUTE_get0_type',
+ '#define X509_ATTRIBUTE_set1_data GRPC_SHADOW_X509_ATTRIBUTE_set1_data',
+ '#define X509_ATTRIBUTE_set1_object GRPC_SHADOW_X509_ATTRIBUTE_set1_object',
+ '#define X509at_add1_attr GRPC_SHADOW_X509at_add1_attr',
+ '#define X509at_add1_attr_by_NID GRPC_SHADOW_X509at_add1_attr_by_NID',
+ '#define X509at_add1_attr_by_OBJ GRPC_SHADOW_X509at_add1_attr_by_OBJ',
+ '#define X509at_add1_attr_by_txt GRPC_SHADOW_X509at_add1_attr_by_txt',
+ '#define X509at_delete_attr GRPC_SHADOW_X509at_delete_attr',
+ '#define X509at_get0_data_by_OBJ GRPC_SHADOW_X509at_get0_data_by_OBJ',
+ '#define X509at_get_attr GRPC_SHADOW_X509at_get_attr',
+ '#define X509at_get_attr_by_NID GRPC_SHADOW_X509at_get_attr_by_NID',
+ '#define X509at_get_attr_by_OBJ GRPC_SHADOW_X509at_get_attr_by_OBJ',
+ '#define X509at_get_attr_count GRPC_SHADOW_X509at_get_attr_count',
+ '#define X509_CRL_check_suiteb GRPC_SHADOW_X509_CRL_check_suiteb',
+ '#define X509_CRL_cmp GRPC_SHADOW_X509_CRL_cmp',
+ '#define X509_CRL_match GRPC_SHADOW_X509_CRL_match',
+ '#define X509_NAME_cmp GRPC_SHADOW_X509_NAME_cmp',
+ '#define X509_NAME_hash GRPC_SHADOW_X509_NAME_hash',
+ '#define X509_NAME_hash_old GRPC_SHADOW_X509_NAME_hash_old',
+ '#define X509_chain_check_suiteb GRPC_SHADOW_X509_chain_check_suiteb',
+ '#define X509_chain_up_ref GRPC_SHADOW_X509_chain_up_ref',
+ '#define X509_check_private_key GRPC_SHADOW_X509_check_private_key',
+ '#define X509_cmp GRPC_SHADOW_X509_cmp',
+ '#define X509_find_by_issuer_and_serial GRPC_SHADOW_X509_find_by_issuer_and_serial',
+ '#define X509_find_by_subject GRPC_SHADOW_X509_find_by_subject',
+ '#define X509_get0_pubkey_bitstr GRPC_SHADOW_X509_get0_pubkey_bitstr',
+ '#define X509_get_issuer_name GRPC_SHADOW_X509_get_issuer_name',
+ '#define X509_get_pubkey GRPC_SHADOW_X509_get_pubkey',
+ '#define X509_get_serialNumber GRPC_SHADOW_X509_get_serialNumber',
+ '#define X509_get_subject_name GRPC_SHADOW_X509_get_subject_name',
+ '#define X509_issuer_and_serial_cmp GRPC_SHADOW_X509_issuer_and_serial_cmp',
+ '#define X509_issuer_and_serial_hash GRPC_SHADOW_X509_issuer_and_serial_hash',
+ '#define X509_issuer_name_cmp GRPC_SHADOW_X509_issuer_name_cmp',
+ '#define X509_issuer_name_hash GRPC_SHADOW_X509_issuer_name_hash',
+ '#define X509_issuer_name_hash_old GRPC_SHADOW_X509_issuer_name_hash_old',
+ '#define X509_subject_name_cmp GRPC_SHADOW_X509_subject_name_cmp',
+ '#define X509_subject_name_hash GRPC_SHADOW_X509_subject_name_hash',
+ '#define X509_subject_name_hash_old GRPC_SHADOW_X509_subject_name_hash_old',
+ '#define X509_STORE_load_locations GRPC_SHADOW_X509_STORE_load_locations',
+ '#define X509_STORE_set_default_paths GRPC_SHADOW_X509_STORE_set_default_paths',
+ '#define X509_get_default_cert_area GRPC_SHADOW_X509_get_default_cert_area',
+ '#define X509_get_default_cert_dir GRPC_SHADOW_X509_get_default_cert_dir',
+ '#define X509_get_default_cert_dir_env GRPC_SHADOW_X509_get_default_cert_dir_env',
+ '#define X509_get_default_cert_file GRPC_SHADOW_X509_get_default_cert_file',
+ '#define X509_get_default_cert_file_env GRPC_SHADOW_X509_get_default_cert_file_env',
+ '#define X509_get_default_private_dir GRPC_SHADOW_X509_get_default_private_dir',
+ '#define X509_CRL_add1_ext_i2d GRPC_SHADOW_X509_CRL_add1_ext_i2d',
+ '#define X509_CRL_add_ext GRPC_SHADOW_X509_CRL_add_ext',
+ '#define X509_CRL_delete_ext GRPC_SHADOW_X509_CRL_delete_ext',
+ '#define X509_CRL_get_ext GRPC_SHADOW_X509_CRL_get_ext',
+ '#define X509_CRL_get_ext_by_NID GRPC_SHADOW_X509_CRL_get_ext_by_NID',
+ '#define X509_CRL_get_ext_by_OBJ GRPC_SHADOW_X509_CRL_get_ext_by_OBJ',
+ '#define X509_CRL_get_ext_by_critical GRPC_SHADOW_X509_CRL_get_ext_by_critical',
+ '#define X509_CRL_get_ext_count GRPC_SHADOW_X509_CRL_get_ext_count',
+ '#define X509_CRL_get_ext_d2i GRPC_SHADOW_X509_CRL_get_ext_d2i',
+ '#define X509_REVOKED_add1_ext_i2d GRPC_SHADOW_X509_REVOKED_add1_ext_i2d',
+ '#define X509_REVOKED_add_ext GRPC_SHADOW_X509_REVOKED_add_ext',
+ '#define X509_REVOKED_delete_ext GRPC_SHADOW_X509_REVOKED_delete_ext',
+ '#define X509_REVOKED_get_ext GRPC_SHADOW_X509_REVOKED_get_ext',
+ '#define X509_REVOKED_get_ext_by_NID GRPC_SHADOW_X509_REVOKED_get_ext_by_NID',
+ '#define X509_REVOKED_get_ext_by_OBJ GRPC_SHADOW_X509_REVOKED_get_ext_by_OBJ',
+ '#define X509_REVOKED_get_ext_by_critical GRPC_SHADOW_X509_REVOKED_get_ext_by_critical',
+ '#define X509_REVOKED_get_ext_count GRPC_SHADOW_X509_REVOKED_get_ext_count',
+ '#define X509_REVOKED_get_ext_d2i GRPC_SHADOW_X509_REVOKED_get_ext_d2i',
+ '#define X509_add1_ext_i2d GRPC_SHADOW_X509_add1_ext_i2d',
+ '#define X509_add_ext GRPC_SHADOW_X509_add_ext',
+ '#define X509_delete_ext GRPC_SHADOW_X509_delete_ext',
+ '#define X509_get_ext GRPC_SHADOW_X509_get_ext',
+ '#define X509_get_ext_by_NID GRPC_SHADOW_X509_get_ext_by_NID',
+ '#define X509_get_ext_by_OBJ GRPC_SHADOW_X509_get_ext_by_OBJ',
+ '#define X509_get_ext_by_critical GRPC_SHADOW_X509_get_ext_by_critical',
+ '#define X509_get_ext_count GRPC_SHADOW_X509_get_ext_count',
+ '#define X509_get_ext_d2i GRPC_SHADOW_X509_get_ext_d2i',
+ '#define X509_LOOKUP_by_alias GRPC_SHADOW_X509_LOOKUP_by_alias',
+ '#define X509_LOOKUP_by_fingerprint GRPC_SHADOW_X509_LOOKUP_by_fingerprint',
+ '#define X509_LOOKUP_by_issuer_serial GRPC_SHADOW_X509_LOOKUP_by_issuer_serial',
+ '#define X509_LOOKUP_by_subject GRPC_SHADOW_X509_LOOKUP_by_subject',
+ '#define X509_LOOKUP_ctrl GRPC_SHADOW_X509_LOOKUP_ctrl',
+ '#define X509_LOOKUP_free GRPC_SHADOW_X509_LOOKUP_free',
+ '#define X509_LOOKUP_init GRPC_SHADOW_X509_LOOKUP_init',
+ '#define X509_LOOKUP_new GRPC_SHADOW_X509_LOOKUP_new',
+ '#define X509_LOOKUP_shutdown GRPC_SHADOW_X509_LOOKUP_shutdown',
+ '#define X509_OBJECT_free_contents GRPC_SHADOW_X509_OBJECT_free_contents',
+ '#define X509_OBJECT_get0_X509 GRPC_SHADOW_X509_OBJECT_get0_X509',
+ '#define X509_OBJECT_get_type GRPC_SHADOW_X509_OBJECT_get_type',
+ '#define X509_OBJECT_idx_by_subject GRPC_SHADOW_X509_OBJECT_idx_by_subject',
+ '#define X509_OBJECT_retrieve_by_subject GRPC_SHADOW_X509_OBJECT_retrieve_by_subject',
+ '#define X509_OBJECT_retrieve_match GRPC_SHADOW_X509_OBJECT_retrieve_match',
+ '#define X509_OBJECT_up_ref_count GRPC_SHADOW_X509_OBJECT_up_ref_count',
+ '#define X509_STORE_CTX_get0_store GRPC_SHADOW_X509_STORE_CTX_get0_store',
+ '#define X509_STORE_CTX_get1_issuer GRPC_SHADOW_X509_STORE_CTX_get1_issuer',
+ '#define X509_STORE_add_cert GRPC_SHADOW_X509_STORE_add_cert',
+ '#define X509_STORE_add_crl GRPC_SHADOW_X509_STORE_add_crl',
+ '#define X509_STORE_add_lookup GRPC_SHADOW_X509_STORE_add_lookup',
+ '#define X509_STORE_free GRPC_SHADOW_X509_STORE_free',
+ '#define X509_STORE_get0_objects GRPC_SHADOW_X509_STORE_get0_objects',
+ '#define X509_STORE_get0_param GRPC_SHADOW_X509_STORE_get0_param',
+ '#define X509_STORE_get1_certs GRPC_SHADOW_X509_STORE_get1_certs',
+ '#define X509_STORE_get1_crls GRPC_SHADOW_X509_STORE_get1_crls',
+ '#define X509_STORE_get_by_subject GRPC_SHADOW_X509_STORE_get_by_subject',
+ '#define X509_STORE_new GRPC_SHADOW_X509_STORE_new',
+ '#define X509_STORE_set0_additional_untrusted GRPC_SHADOW_X509_STORE_set0_additional_untrusted',
+ '#define X509_STORE_set1_param GRPC_SHADOW_X509_STORE_set1_param',
+ '#define X509_STORE_set_depth GRPC_SHADOW_X509_STORE_set_depth',
+ '#define X509_STORE_set_flags GRPC_SHADOW_X509_STORE_set_flags',
+ '#define X509_STORE_set_lookup_crls_cb GRPC_SHADOW_X509_STORE_set_lookup_crls_cb',
+ '#define X509_STORE_set_purpose GRPC_SHADOW_X509_STORE_set_purpose',
+ '#define X509_STORE_set_trust GRPC_SHADOW_X509_STORE_set_trust',
+ '#define X509_STORE_set_verify_cb GRPC_SHADOW_X509_STORE_set_verify_cb',
+ '#define X509_STORE_up_ref GRPC_SHADOW_X509_STORE_up_ref',
+ '#define X509_NAME_oneline GRPC_SHADOW_X509_NAME_oneline',
+ '#define X509_REQ_to_X509 GRPC_SHADOW_X509_REQ_to_X509',
+ '#define X509_REQ_add1_attr GRPC_SHADOW_X509_REQ_add1_attr',
+ '#define X509_REQ_add1_attr_by_NID GRPC_SHADOW_X509_REQ_add1_attr_by_NID',
+ '#define X509_REQ_add1_attr_by_OBJ GRPC_SHADOW_X509_REQ_add1_attr_by_OBJ',
+ '#define X509_REQ_add1_attr_by_txt GRPC_SHADOW_X509_REQ_add1_attr_by_txt',
+ '#define X509_REQ_add_extensions GRPC_SHADOW_X509_REQ_add_extensions',
+ '#define X509_REQ_add_extensions_nid GRPC_SHADOW_X509_REQ_add_extensions_nid',
+ '#define X509_REQ_check_private_key GRPC_SHADOW_X509_REQ_check_private_key',
+ '#define X509_REQ_delete_attr GRPC_SHADOW_X509_REQ_delete_attr',
+ '#define X509_REQ_extension_nid GRPC_SHADOW_X509_REQ_extension_nid',
+ '#define X509_REQ_get_attr GRPC_SHADOW_X509_REQ_get_attr',
+ '#define X509_REQ_get_attr_by_NID GRPC_SHADOW_X509_REQ_get_attr_by_NID',
+ '#define X509_REQ_get_attr_by_OBJ GRPC_SHADOW_X509_REQ_get_attr_by_OBJ',
+ '#define X509_REQ_get_attr_count GRPC_SHADOW_X509_REQ_get_attr_count',
+ '#define X509_REQ_get_extension_nids GRPC_SHADOW_X509_REQ_get_extension_nids',
+ '#define X509_REQ_get_extensions GRPC_SHADOW_X509_REQ_get_extensions',
+ '#define X509_REQ_get_pubkey GRPC_SHADOW_X509_REQ_get_pubkey',
+ '#define X509_REQ_set_extension_nids GRPC_SHADOW_X509_REQ_set_extension_nids',
+ '#define X509_to_X509_REQ GRPC_SHADOW_X509_to_X509_REQ',
+ '#define X509_get0_extensions GRPC_SHADOW_X509_get0_extensions',
+ '#define X509_get0_notAfter GRPC_SHADOW_X509_get0_notAfter',
+ '#define X509_get0_notBefore GRPC_SHADOW_X509_get0_notBefore',
+ '#define X509_set_issuer_name GRPC_SHADOW_X509_set_issuer_name',
+ '#define X509_set_notAfter GRPC_SHADOW_X509_set_notAfter',
+ '#define X509_set_notBefore GRPC_SHADOW_X509_set_notBefore',
+ '#define X509_set_pubkey GRPC_SHADOW_X509_set_pubkey',
+ '#define X509_set_serialNumber GRPC_SHADOW_X509_set_serialNumber',
+ '#define X509_set_subject_name GRPC_SHADOW_X509_set_subject_name',
+ '#define X509_set_version GRPC_SHADOW_X509_set_version',
+ '#define X509_TRUST_add GRPC_SHADOW_X509_TRUST_add',
+ '#define X509_TRUST_cleanup GRPC_SHADOW_X509_TRUST_cleanup',
+ '#define X509_TRUST_get0 GRPC_SHADOW_X509_TRUST_get0',
+ '#define X509_TRUST_get0_name GRPC_SHADOW_X509_TRUST_get0_name',
+ '#define X509_TRUST_get_by_id GRPC_SHADOW_X509_TRUST_get_by_id',
+ '#define X509_TRUST_get_count GRPC_SHADOW_X509_TRUST_get_count',
+ '#define X509_TRUST_get_flags GRPC_SHADOW_X509_TRUST_get_flags',
+ '#define X509_TRUST_get_trust GRPC_SHADOW_X509_TRUST_get_trust',
+ '#define X509_TRUST_set GRPC_SHADOW_X509_TRUST_set',
+ '#define X509_TRUST_set_default GRPC_SHADOW_X509_TRUST_set_default',
+ '#define X509_check_trust GRPC_SHADOW_X509_check_trust',
+ '#define X509_verify_cert_error_string GRPC_SHADOW_X509_verify_cert_error_string',
+ '#define X509_EXTENSION_create_by_NID GRPC_SHADOW_X509_EXTENSION_create_by_NID',
+ '#define X509_EXTENSION_create_by_OBJ GRPC_SHADOW_X509_EXTENSION_create_by_OBJ',
+ '#define X509_EXTENSION_get_critical GRPC_SHADOW_X509_EXTENSION_get_critical',
+ '#define X509_EXTENSION_get_data GRPC_SHADOW_X509_EXTENSION_get_data',
+ '#define X509_EXTENSION_get_object GRPC_SHADOW_X509_EXTENSION_get_object',
+ '#define X509_EXTENSION_set_critical GRPC_SHADOW_X509_EXTENSION_set_critical',
+ '#define X509_EXTENSION_set_data GRPC_SHADOW_X509_EXTENSION_set_data',
+ '#define X509_EXTENSION_set_object GRPC_SHADOW_X509_EXTENSION_set_object',
+ '#define X509v3_add_ext GRPC_SHADOW_X509v3_add_ext',
+ '#define X509v3_delete_ext GRPC_SHADOW_X509v3_delete_ext',
+ '#define X509v3_get_ext GRPC_SHADOW_X509v3_get_ext',
+ '#define X509v3_get_ext_by_NID GRPC_SHADOW_X509v3_get_ext_by_NID',
+ '#define X509v3_get_ext_by_OBJ GRPC_SHADOW_X509v3_get_ext_by_OBJ',
+ '#define X509v3_get_ext_by_critical GRPC_SHADOW_X509v3_get_ext_by_critical',
+ '#define X509v3_get_ext_count GRPC_SHADOW_X509v3_get_ext_count',
+ '#define X509_CRL_diff GRPC_SHADOW_X509_CRL_diff',
+ '#define X509_STORE_CTX_cleanup GRPC_SHADOW_X509_STORE_CTX_cleanup',
+ '#define X509_STORE_CTX_free GRPC_SHADOW_X509_STORE_CTX_free',
+ '#define X509_STORE_CTX_get0_current_crl GRPC_SHADOW_X509_STORE_CTX_get0_current_crl',
+ '#define X509_STORE_CTX_get0_current_issuer GRPC_SHADOW_X509_STORE_CTX_get0_current_issuer',
+ '#define X509_STORE_CTX_get0_param GRPC_SHADOW_X509_STORE_CTX_get0_param',
+ '#define X509_STORE_CTX_get0_parent_ctx GRPC_SHADOW_X509_STORE_CTX_get0_parent_ctx',
+ '#define X509_STORE_CTX_get0_policy_tree GRPC_SHADOW_X509_STORE_CTX_get0_policy_tree',
+ '#define X509_STORE_CTX_get0_untrusted GRPC_SHADOW_X509_STORE_CTX_get0_untrusted',
+ '#define X509_STORE_CTX_get1_chain GRPC_SHADOW_X509_STORE_CTX_get1_chain',
+ '#define X509_STORE_CTX_get_chain GRPC_SHADOW_X509_STORE_CTX_get_chain',
+ '#define X509_STORE_CTX_get_current_cert GRPC_SHADOW_X509_STORE_CTX_get_current_cert',
+ '#define X509_STORE_CTX_get_error GRPC_SHADOW_X509_STORE_CTX_get_error',
+ '#define X509_STORE_CTX_get_error_depth GRPC_SHADOW_X509_STORE_CTX_get_error_depth',
+ '#define X509_STORE_CTX_get_ex_data GRPC_SHADOW_X509_STORE_CTX_get_ex_data',
+ '#define X509_STORE_CTX_get_ex_new_index GRPC_SHADOW_X509_STORE_CTX_get_ex_new_index',
+ '#define X509_STORE_CTX_get_explicit_policy GRPC_SHADOW_X509_STORE_CTX_get_explicit_policy',
+ '#define X509_STORE_CTX_init GRPC_SHADOW_X509_STORE_CTX_init',
+ '#define X509_STORE_CTX_new GRPC_SHADOW_X509_STORE_CTX_new',
+ '#define X509_STORE_CTX_purpose_inherit GRPC_SHADOW_X509_STORE_CTX_purpose_inherit',
+ '#define X509_STORE_CTX_set0_crls GRPC_SHADOW_X509_STORE_CTX_set0_crls',
+ '#define X509_STORE_CTX_set0_param GRPC_SHADOW_X509_STORE_CTX_set0_param',
+ '#define X509_STORE_CTX_set_cert GRPC_SHADOW_X509_STORE_CTX_set_cert',
+ '#define X509_STORE_CTX_set_chain GRPC_SHADOW_X509_STORE_CTX_set_chain',
+ '#define X509_STORE_CTX_set_default GRPC_SHADOW_X509_STORE_CTX_set_default',
+ '#define X509_STORE_CTX_set_depth GRPC_SHADOW_X509_STORE_CTX_set_depth',
+ '#define X509_STORE_CTX_set_error GRPC_SHADOW_X509_STORE_CTX_set_error',
+ '#define X509_STORE_CTX_set_ex_data GRPC_SHADOW_X509_STORE_CTX_set_ex_data',
+ '#define X509_STORE_CTX_set_flags GRPC_SHADOW_X509_STORE_CTX_set_flags',
+ '#define X509_STORE_CTX_set_purpose GRPC_SHADOW_X509_STORE_CTX_set_purpose',
+ '#define X509_STORE_CTX_set_time GRPC_SHADOW_X509_STORE_CTX_set_time',
+ '#define X509_STORE_CTX_set_trust GRPC_SHADOW_X509_STORE_CTX_set_trust',
+ '#define X509_STORE_CTX_set_verify_cb GRPC_SHADOW_X509_STORE_CTX_set_verify_cb',
+ '#define X509_STORE_CTX_trusted_stack GRPC_SHADOW_X509_STORE_CTX_trusted_stack',
+ '#define X509_STORE_CTX_zero GRPC_SHADOW_X509_STORE_CTX_zero',
+ '#define X509_cmp_current_time GRPC_SHADOW_X509_cmp_current_time',
+ '#define X509_cmp_time GRPC_SHADOW_X509_cmp_time',
+ '#define X509_gmtime_adj GRPC_SHADOW_X509_gmtime_adj',
+ '#define X509_time_adj GRPC_SHADOW_X509_time_adj',
+ '#define X509_time_adj_ex GRPC_SHADOW_X509_time_adj_ex',
+ '#define X509_verify_cert GRPC_SHADOW_X509_verify_cert',
+ '#define X509_VERIFY_PARAM_add0_policy GRPC_SHADOW_X509_VERIFY_PARAM_add0_policy',
+ '#define X509_VERIFY_PARAM_add0_table GRPC_SHADOW_X509_VERIFY_PARAM_add0_table',
+ '#define X509_VERIFY_PARAM_add1_host GRPC_SHADOW_X509_VERIFY_PARAM_add1_host',
+ '#define X509_VERIFY_PARAM_clear_flags GRPC_SHADOW_X509_VERIFY_PARAM_clear_flags',
+ '#define X509_VERIFY_PARAM_free GRPC_SHADOW_X509_VERIFY_PARAM_free',
+ '#define X509_VERIFY_PARAM_get0 GRPC_SHADOW_X509_VERIFY_PARAM_get0',
+ '#define X509_VERIFY_PARAM_get0_name GRPC_SHADOW_X509_VERIFY_PARAM_get0_name',
+ '#define X509_VERIFY_PARAM_get0_peername GRPC_SHADOW_X509_VERIFY_PARAM_get0_peername',
+ '#define X509_VERIFY_PARAM_get_count GRPC_SHADOW_X509_VERIFY_PARAM_get_count',
+ '#define X509_VERIFY_PARAM_get_depth GRPC_SHADOW_X509_VERIFY_PARAM_get_depth',
+ '#define X509_VERIFY_PARAM_get_flags GRPC_SHADOW_X509_VERIFY_PARAM_get_flags',
+ '#define X509_VERIFY_PARAM_inherit GRPC_SHADOW_X509_VERIFY_PARAM_inherit',
+ '#define X509_VERIFY_PARAM_lookup GRPC_SHADOW_X509_VERIFY_PARAM_lookup',
+ '#define X509_VERIFY_PARAM_new GRPC_SHADOW_X509_VERIFY_PARAM_new',
+ '#define X509_VERIFY_PARAM_set1 GRPC_SHADOW_X509_VERIFY_PARAM_set1',
+ '#define X509_VERIFY_PARAM_set1_email GRPC_SHADOW_X509_VERIFY_PARAM_set1_email',
+ '#define X509_VERIFY_PARAM_set1_host GRPC_SHADOW_X509_VERIFY_PARAM_set1_host',
+ '#define X509_VERIFY_PARAM_set1_ip GRPC_SHADOW_X509_VERIFY_PARAM_set1_ip',
+ '#define X509_VERIFY_PARAM_set1_ip_asc GRPC_SHADOW_X509_VERIFY_PARAM_set1_ip_asc',
+ '#define X509_VERIFY_PARAM_set1_name GRPC_SHADOW_X509_VERIFY_PARAM_set1_name',
+ '#define X509_VERIFY_PARAM_set1_policies GRPC_SHADOW_X509_VERIFY_PARAM_set1_policies',
+ '#define X509_VERIFY_PARAM_set_depth GRPC_SHADOW_X509_VERIFY_PARAM_set_depth',
+ '#define X509_VERIFY_PARAM_set_flags GRPC_SHADOW_X509_VERIFY_PARAM_set_flags',
+ '#define X509_VERIFY_PARAM_set_hostflags GRPC_SHADOW_X509_VERIFY_PARAM_set_hostflags',
+ '#define X509_VERIFY_PARAM_set_purpose GRPC_SHADOW_X509_VERIFY_PARAM_set_purpose',
+ '#define X509_VERIFY_PARAM_set_time GRPC_SHADOW_X509_VERIFY_PARAM_set_time',
+ '#define X509_VERIFY_PARAM_set_trust GRPC_SHADOW_X509_VERIFY_PARAM_set_trust',
+ '#define X509_VERIFY_PARAM_table_cleanup GRPC_SHADOW_X509_VERIFY_PARAM_table_cleanup',
+ '#define X509_CRL_set_issuer_name GRPC_SHADOW_X509_CRL_set_issuer_name',
+ '#define X509_CRL_set_lastUpdate GRPC_SHADOW_X509_CRL_set_lastUpdate',
+ '#define X509_CRL_set_nextUpdate GRPC_SHADOW_X509_CRL_set_nextUpdate',
+ '#define X509_CRL_set_version GRPC_SHADOW_X509_CRL_set_version',
+ '#define X509_CRL_sort GRPC_SHADOW_X509_CRL_sort',
+ '#define X509_CRL_up_ref GRPC_SHADOW_X509_CRL_up_ref',
+ '#define X509_REVOKED_set_revocationDate GRPC_SHADOW_X509_REVOKED_set_revocationDate',
+ '#define X509_REVOKED_set_serialNumber GRPC_SHADOW_X509_REVOKED_set_serialNumber',
+ '#define X509_NAME_ENTRY_create_by_NID GRPC_SHADOW_X509_NAME_ENTRY_create_by_NID',
+ '#define X509_NAME_ENTRY_create_by_OBJ GRPC_SHADOW_X509_NAME_ENTRY_create_by_OBJ',
+ '#define X509_NAME_ENTRY_create_by_txt GRPC_SHADOW_X509_NAME_ENTRY_create_by_txt',
+ '#define X509_NAME_ENTRY_get_data GRPC_SHADOW_X509_NAME_ENTRY_get_data',
+ '#define X509_NAME_ENTRY_get_object GRPC_SHADOW_X509_NAME_ENTRY_get_object',
+ '#define X509_NAME_ENTRY_set_data GRPC_SHADOW_X509_NAME_ENTRY_set_data',
+ '#define X509_NAME_ENTRY_set_object GRPC_SHADOW_X509_NAME_ENTRY_set_object',
+ '#define X509_NAME_add_entry GRPC_SHADOW_X509_NAME_add_entry',
+ '#define X509_NAME_add_entry_by_NID GRPC_SHADOW_X509_NAME_add_entry_by_NID',
+ '#define X509_NAME_add_entry_by_OBJ GRPC_SHADOW_X509_NAME_add_entry_by_OBJ',
+ '#define X509_NAME_add_entry_by_txt GRPC_SHADOW_X509_NAME_add_entry_by_txt',
+ '#define X509_NAME_delete_entry GRPC_SHADOW_X509_NAME_delete_entry',
+ '#define X509_NAME_entry_count GRPC_SHADOW_X509_NAME_entry_count',
+ '#define X509_NAME_get_entry GRPC_SHADOW_X509_NAME_get_entry',
+ '#define X509_NAME_get_index_by_NID GRPC_SHADOW_X509_NAME_get_index_by_NID',
+ '#define X509_NAME_get_index_by_OBJ GRPC_SHADOW_X509_NAME_get_index_by_OBJ',
+ '#define X509_NAME_get_text_by_NID GRPC_SHADOW_X509_NAME_get_text_by_NID',
+ '#define X509_NAME_get_text_by_OBJ GRPC_SHADOW_X509_NAME_get_text_by_OBJ',
+ '#define X509_REQ_set_pubkey GRPC_SHADOW_X509_REQ_set_pubkey',
+ '#define X509_REQ_set_subject_name GRPC_SHADOW_X509_REQ_set_subject_name',
+ '#define X509_REQ_set_version GRPC_SHADOW_X509_REQ_set_version',
+ '#define NETSCAPE_SPKI_b64_decode GRPC_SHADOW_NETSCAPE_SPKI_b64_decode',
+ '#define NETSCAPE_SPKI_b64_encode GRPC_SHADOW_NETSCAPE_SPKI_b64_encode',
+ '#define NETSCAPE_SPKI_get_pubkey GRPC_SHADOW_NETSCAPE_SPKI_get_pubkey',
+ '#define NETSCAPE_SPKI_set_pubkey GRPC_SHADOW_NETSCAPE_SPKI_set_pubkey',
+ '#define X509_ALGORS_it GRPC_SHADOW_X509_ALGORS_it',
+ '#define X509_ALGOR_cmp GRPC_SHADOW_X509_ALGOR_cmp',
+ '#define X509_ALGOR_dup GRPC_SHADOW_X509_ALGOR_dup',
+ '#define X509_ALGOR_free GRPC_SHADOW_X509_ALGOR_free',
+ '#define X509_ALGOR_get0 GRPC_SHADOW_X509_ALGOR_get0',
+ '#define X509_ALGOR_it GRPC_SHADOW_X509_ALGOR_it',
+ '#define X509_ALGOR_new GRPC_SHADOW_X509_ALGOR_new',
+ '#define X509_ALGOR_set0 GRPC_SHADOW_X509_ALGOR_set0',
+ '#define X509_ALGOR_set_md GRPC_SHADOW_X509_ALGOR_set_md',
+ '#define d2i_X509_ALGOR GRPC_SHADOW_d2i_X509_ALGOR',
+ '#define d2i_X509_ALGORS GRPC_SHADOW_d2i_X509_ALGORS',
+ '#define i2d_X509_ALGOR GRPC_SHADOW_i2d_X509_ALGOR',
+ '#define i2d_X509_ALGORS GRPC_SHADOW_i2d_X509_ALGORS',
+ '#define NETSCAPE_SPKI_sign GRPC_SHADOW_NETSCAPE_SPKI_sign',
+ '#define NETSCAPE_SPKI_verify GRPC_SHADOW_NETSCAPE_SPKI_verify',
+ '#define X509_CRL_digest GRPC_SHADOW_X509_CRL_digest',
+ '#define X509_CRL_sign GRPC_SHADOW_X509_CRL_sign',
+ '#define X509_CRL_sign_ctx GRPC_SHADOW_X509_CRL_sign_ctx',
+ '#define X509_NAME_digest GRPC_SHADOW_X509_NAME_digest',
+ '#define X509_REQ_digest GRPC_SHADOW_X509_REQ_digest',
+ '#define X509_REQ_sign GRPC_SHADOW_X509_REQ_sign',
+ '#define X509_REQ_sign_ctx GRPC_SHADOW_X509_REQ_sign_ctx',
+ '#define X509_REQ_verify GRPC_SHADOW_X509_REQ_verify',
+ '#define X509_digest GRPC_SHADOW_X509_digest',
+ '#define X509_pubkey_digest GRPC_SHADOW_X509_pubkey_digest',
+ '#define X509_sign GRPC_SHADOW_X509_sign',
+ '#define X509_sign_ctx GRPC_SHADOW_X509_sign_ctx',
+ '#define X509_verify GRPC_SHADOW_X509_verify',
+ '#define d2i_DSAPrivateKey_bio GRPC_SHADOW_d2i_DSAPrivateKey_bio',
+ '#define d2i_DSAPrivateKey_fp GRPC_SHADOW_d2i_DSAPrivateKey_fp',
+ '#define d2i_DSA_PUBKEY_bio GRPC_SHADOW_d2i_DSA_PUBKEY_bio',
+ '#define d2i_DSA_PUBKEY_fp GRPC_SHADOW_d2i_DSA_PUBKEY_fp',
+ '#define d2i_ECPrivateKey_bio GRPC_SHADOW_d2i_ECPrivateKey_bio',
+ '#define d2i_ECPrivateKey_fp GRPC_SHADOW_d2i_ECPrivateKey_fp',
+ '#define d2i_EC_PUBKEY_bio GRPC_SHADOW_d2i_EC_PUBKEY_bio',
+ '#define d2i_EC_PUBKEY_fp GRPC_SHADOW_d2i_EC_PUBKEY_fp',
+ '#define d2i_PKCS8_PRIV_KEY_INFO_bio GRPC_SHADOW_d2i_PKCS8_PRIV_KEY_INFO_bio',
+ '#define d2i_PKCS8_PRIV_KEY_INFO_fp GRPC_SHADOW_d2i_PKCS8_PRIV_KEY_INFO_fp',
+ '#define d2i_PKCS8_bio GRPC_SHADOW_d2i_PKCS8_bio',
+ '#define d2i_PKCS8_fp GRPC_SHADOW_d2i_PKCS8_fp',
+ '#define d2i_PUBKEY_bio GRPC_SHADOW_d2i_PUBKEY_bio',
+ '#define d2i_PUBKEY_fp GRPC_SHADOW_d2i_PUBKEY_fp',
+ '#define d2i_PrivateKey_bio GRPC_SHADOW_d2i_PrivateKey_bio',
+ '#define d2i_PrivateKey_fp GRPC_SHADOW_d2i_PrivateKey_fp',
+ '#define d2i_RSAPrivateKey_bio GRPC_SHADOW_d2i_RSAPrivateKey_bio',
+ '#define d2i_RSAPrivateKey_fp GRPC_SHADOW_d2i_RSAPrivateKey_fp',
+ '#define d2i_RSAPublicKey_bio GRPC_SHADOW_d2i_RSAPublicKey_bio',
+ '#define d2i_RSAPublicKey_fp GRPC_SHADOW_d2i_RSAPublicKey_fp',
+ '#define d2i_RSA_PUBKEY_bio GRPC_SHADOW_d2i_RSA_PUBKEY_bio',
+ '#define d2i_RSA_PUBKEY_fp GRPC_SHADOW_d2i_RSA_PUBKEY_fp',
+ '#define d2i_X509_CRL_bio GRPC_SHADOW_d2i_X509_CRL_bio',
+ '#define d2i_X509_CRL_fp GRPC_SHADOW_d2i_X509_CRL_fp',
+ '#define d2i_X509_REQ_bio GRPC_SHADOW_d2i_X509_REQ_bio',
+ '#define d2i_X509_REQ_fp GRPC_SHADOW_d2i_X509_REQ_fp',
+ '#define d2i_X509_bio GRPC_SHADOW_d2i_X509_bio',
+ '#define d2i_X509_fp GRPC_SHADOW_d2i_X509_fp',
+ '#define i2d_DSAPrivateKey_bio GRPC_SHADOW_i2d_DSAPrivateKey_bio',
+ '#define i2d_DSAPrivateKey_fp GRPC_SHADOW_i2d_DSAPrivateKey_fp',
+ '#define i2d_DSA_PUBKEY_bio GRPC_SHADOW_i2d_DSA_PUBKEY_bio',
+ '#define i2d_DSA_PUBKEY_fp GRPC_SHADOW_i2d_DSA_PUBKEY_fp',
+ '#define i2d_ECPrivateKey_bio GRPC_SHADOW_i2d_ECPrivateKey_bio',
+ '#define i2d_ECPrivateKey_fp GRPC_SHADOW_i2d_ECPrivateKey_fp',
+ '#define i2d_EC_PUBKEY_bio GRPC_SHADOW_i2d_EC_PUBKEY_bio',
+ '#define i2d_EC_PUBKEY_fp GRPC_SHADOW_i2d_EC_PUBKEY_fp',
+ '#define i2d_PKCS8PrivateKeyInfo_bio GRPC_SHADOW_i2d_PKCS8PrivateKeyInfo_bio',
+ '#define i2d_PKCS8PrivateKeyInfo_fp GRPC_SHADOW_i2d_PKCS8PrivateKeyInfo_fp',
+ '#define i2d_PKCS8_PRIV_KEY_INFO_bio GRPC_SHADOW_i2d_PKCS8_PRIV_KEY_INFO_bio',
+ '#define i2d_PKCS8_PRIV_KEY_INFO_fp GRPC_SHADOW_i2d_PKCS8_PRIV_KEY_INFO_fp',
+ '#define i2d_PKCS8_bio GRPC_SHADOW_i2d_PKCS8_bio',
+ '#define i2d_PKCS8_fp GRPC_SHADOW_i2d_PKCS8_fp',
+ '#define i2d_PUBKEY_bio GRPC_SHADOW_i2d_PUBKEY_bio',
+ '#define i2d_PUBKEY_fp GRPC_SHADOW_i2d_PUBKEY_fp',
+ '#define i2d_PrivateKey_bio GRPC_SHADOW_i2d_PrivateKey_bio',
+ '#define i2d_PrivateKey_fp GRPC_SHADOW_i2d_PrivateKey_fp',
+ '#define i2d_RSAPrivateKey_bio GRPC_SHADOW_i2d_RSAPrivateKey_bio',
+ '#define i2d_RSAPrivateKey_fp GRPC_SHADOW_i2d_RSAPrivateKey_fp',
+ '#define i2d_RSAPublicKey_bio GRPC_SHADOW_i2d_RSAPublicKey_bio',
+ '#define i2d_RSAPublicKey_fp GRPC_SHADOW_i2d_RSAPublicKey_fp',
+ '#define i2d_RSA_PUBKEY_bio GRPC_SHADOW_i2d_RSA_PUBKEY_bio',
+ '#define i2d_RSA_PUBKEY_fp GRPC_SHADOW_i2d_RSA_PUBKEY_fp',
+ '#define i2d_X509_CRL_bio GRPC_SHADOW_i2d_X509_CRL_bio',
+ '#define i2d_X509_CRL_fp GRPC_SHADOW_i2d_X509_CRL_fp',
+ '#define i2d_X509_REQ_bio GRPC_SHADOW_i2d_X509_REQ_bio',
+ '#define i2d_X509_REQ_fp GRPC_SHADOW_i2d_X509_REQ_fp',
+ '#define i2d_X509_bio GRPC_SHADOW_i2d_X509_bio',
+ '#define i2d_X509_fp GRPC_SHADOW_i2d_X509_fp',
+ '#define X509_ATTRIBUTE_SET_it GRPC_SHADOW_X509_ATTRIBUTE_SET_it',
+ '#define X509_ATTRIBUTE_create GRPC_SHADOW_X509_ATTRIBUTE_create',
+ '#define X509_ATTRIBUTE_dup GRPC_SHADOW_X509_ATTRIBUTE_dup',
+ '#define X509_ATTRIBUTE_free GRPC_SHADOW_X509_ATTRIBUTE_free',
+ '#define X509_ATTRIBUTE_it GRPC_SHADOW_X509_ATTRIBUTE_it',
+ '#define X509_ATTRIBUTE_new GRPC_SHADOW_X509_ATTRIBUTE_new',
+ '#define d2i_X509_ATTRIBUTE GRPC_SHADOW_d2i_X509_ATTRIBUTE',
+ '#define i2d_X509_ATTRIBUTE GRPC_SHADOW_i2d_X509_ATTRIBUTE',
+ '#define X509_CRL_INFO_free GRPC_SHADOW_X509_CRL_INFO_free',
+ '#define X509_CRL_INFO_it GRPC_SHADOW_X509_CRL_INFO_it',
+ '#define X509_CRL_INFO_new GRPC_SHADOW_X509_CRL_INFO_new',
+ '#define X509_CRL_METHOD_free GRPC_SHADOW_X509_CRL_METHOD_free',
+ '#define X509_CRL_METHOD_new GRPC_SHADOW_X509_CRL_METHOD_new',
+ '#define X509_CRL_add0_revoked GRPC_SHADOW_X509_CRL_add0_revoked',
+ '#define X509_CRL_dup GRPC_SHADOW_X509_CRL_dup',
+ '#define X509_CRL_free GRPC_SHADOW_X509_CRL_free',
+ '#define X509_CRL_get0_by_cert GRPC_SHADOW_X509_CRL_get0_by_cert',
+ '#define X509_CRL_get0_by_serial GRPC_SHADOW_X509_CRL_get0_by_serial',
+ '#define X509_CRL_get_meth_data GRPC_SHADOW_X509_CRL_get_meth_data',
+ '#define X509_CRL_it GRPC_SHADOW_X509_CRL_it',
+ '#define X509_CRL_new GRPC_SHADOW_X509_CRL_new',
+ '#define X509_CRL_set_default_method GRPC_SHADOW_X509_CRL_set_default_method',
+ '#define X509_CRL_set_meth_data GRPC_SHADOW_X509_CRL_set_meth_data',
+ '#define X509_CRL_verify GRPC_SHADOW_X509_CRL_verify',
+ '#define X509_REVOKED_dup GRPC_SHADOW_X509_REVOKED_dup',
+ '#define X509_REVOKED_free GRPC_SHADOW_X509_REVOKED_free',
+ '#define X509_REVOKED_it GRPC_SHADOW_X509_REVOKED_it',
+ '#define X509_REVOKED_new GRPC_SHADOW_X509_REVOKED_new',
+ '#define d2i_X509_CRL GRPC_SHADOW_d2i_X509_CRL',
+ '#define d2i_X509_CRL_INFO GRPC_SHADOW_d2i_X509_CRL_INFO',
+ '#define d2i_X509_REVOKED GRPC_SHADOW_d2i_X509_REVOKED',
+ '#define i2d_X509_CRL GRPC_SHADOW_i2d_X509_CRL',
+ '#define i2d_X509_CRL_INFO GRPC_SHADOW_i2d_X509_CRL_INFO',
+ '#define i2d_X509_REVOKED GRPC_SHADOW_i2d_X509_REVOKED',
+ '#define X509_EXTENSIONS_it GRPC_SHADOW_X509_EXTENSIONS_it',
+ '#define X509_EXTENSION_dup GRPC_SHADOW_X509_EXTENSION_dup',
+ '#define X509_EXTENSION_free GRPC_SHADOW_X509_EXTENSION_free',
+ '#define X509_EXTENSION_it GRPC_SHADOW_X509_EXTENSION_it',
+ '#define X509_EXTENSION_new GRPC_SHADOW_X509_EXTENSION_new',
+ '#define d2i_X509_EXTENSION GRPC_SHADOW_d2i_X509_EXTENSION',
+ '#define d2i_X509_EXTENSIONS GRPC_SHADOW_d2i_X509_EXTENSIONS',
+ '#define i2d_X509_EXTENSION GRPC_SHADOW_i2d_X509_EXTENSION',
+ '#define i2d_X509_EXTENSIONS GRPC_SHADOW_i2d_X509_EXTENSIONS',
+ '#define X509_INFO_free GRPC_SHADOW_X509_INFO_free',
+ '#define X509_INFO_new GRPC_SHADOW_X509_INFO_new',
+ '#define X509_NAME_ENTRIES_it GRPC_SHADOW_X509_NAME_ENTRIES_it',
+ '#define X509_NAME_ENTRY_dup GRPC_SHADOW_X509_NAME_ENTRY_dup',
+ '#define X509_NAME_ENTRY_free GRPC_SHADOW_X509_NAME_ENTRY_free',
+ '#define X509_NAME_ENTRY_it GRPC_SHADOW_X509_NAME_ENTRY_it',
+ '#define X509_NAME_ENTRY_new GRPC_SHADOW_X509_NAME_ENTRY_new',
+ '#define X509_NAME_ENTRY_set GRPC_SHADOW_X509_NAME_ENTRY_set',
+ '#define X509_NAME_INTERNAL_it GRPC_SHADOW_X509_NAME_INTERNAL_it',
+ '#define X509_NAME_dup GRPC_SHADOW_X509_NAME_dup',
+ '#define X509_NAME_free GRPC_SHADOW_X509_NAME_free',
+ '#define X509_NAME_get0_der GRPC_SHADOW_X509_NAME_get0_der',
+ '#define X509_NAME_it GRPC_SHADOW_X509_NAME_it',
+ '#define X509_NAME_new GRPC_SHADOW_X509_NAME_new',
+ '#define X509_NAME_set GRPC_SHADOW_X509_NAME_set',
+ '#define d2i_X509_NAME GRPC_SHADOW_d2i_X509_NAME',
+ '#define d2i_X509_NAME_ENTRY GRPC_SHADOW_d2i_X509_NAME_ENTRY',
+ '#define i2d_X509_NAME GRPC_SHADOW_i2d_X509_NAME',
+ '#define i2d_X509_NAME_ENTRY GRPC_SHADOW_i2d_X509_NAME_ENTRY',
+ '#define X509_PKEY_free GRPC_SHADOW_X509_PKEY_free',
+ '#define X509_PKEY_new GRPC_SHADOW_X509_PKEY_new',
+ '#define X509_PUBKEY_free GRPC_SHADOW_X509_PUBKEY_free',
+ '#define X509_PUBKEY_get GRPC_SHADOW_X509_PUBKEY_get',
+ '#define X509_PUBKEY_get0_param GRPC_SHADOW_X509_PUBKEY_get0_param',
+ '#define X509_PUBKEY_it GRPC_SHADOW_X509_PUBKEY_it',
+ '#define X509_PUBKEY_new GRPC_SHADOW_X509_PUBKEY_new',
+ '#define X509_PUBKEY_set GRPC_SHADOW_X509_PUBKEY_set',
+ '#define X509_PUBKEY_set0_param GRPC_SHADOW_X509_PUBKEY_set0_param',
+ '#define d2i_DSA_PUBKEY GRPC_SHADOW_d2i_DSA_PUBKEY',
+ '#define d2i_EC_PUBKEY GRPC_SHADOW_d2i_EC_PUBKEY',
+ '#define d2i_PUBKEY GRPC_SHADOW_d2i_PUBKEY',
+ '#define d2i_RSA_PUBKEY GRPC_SHADOW_d2i_RSA_PUBKEY',
+ '#define d2i_X509_PUBKEY GRPC_SHADOW_d2i_X509_PUBKEY',
+ '#define i2d_DSA_PUBKEY GRPC_SHADOW_i2d_DSA_PUBKEY',
+ '#define i2d_EC_PUBKEY GRPC_SHADOW_i2d_EC_PUBKEY',
+ '#define i2d_PUBKEY GRPC_SHADOW_i2d_PUBKEY',
+ '#define i2d_RSA_PUBKEY GRPC_SHADOW_i2d_RSA_PUBKEY',
+ '#define i2d_X509_PUBKEY GRPC_SHADOW_i2d_X509_PUBKEY',
+ '#define X509_REQ_INFO_free GRPC_SHADOW_X509_REQ_INFO_free',
+ '#define X509_REQ_INFO_it GRPC_SHADOW_X509_REQ_INFO_it',
+ '#define X509_REQ_INFO_new GRPC_SHADOW_X509_REQ_INFO_new',
+ '#define X509_REQ_dup GRPC_SHADOW_X509_REQ_dup',
+ '#define X509_REQ_free GRPC_SHADOW_X509_REQ_free',
+ '#define X509_REQ_it GRPC_SHADOW_X509_REQ_it',
+ '#define X509_REQ_new GRPC_SHADOW_X509_REQ_new',
+ '#define d2i_X509_REQ GRPC_SHADOW_d2i_X509_REQ',
+ '#define d2i_X509_REQ_INFO GRPC_SHADOW_d2i_X509_REQ_INFO',
+ '#define i2d_X509_REQ GRPC_SHADOW_i2d_X509_REQ',
+ '#define i2d_X509_REQ_INFO GRPC_SHADOW_i2d_X509_REQ_INFO',
+ '#define X509_SIG_free GRPC_SHADOW_X509_SIG_free',
+ '#define X509_SIG_it GRPC_SHADOW_X509_SIG_it',
+ '#define X509_SIG_new GRPC_SHADOW_X509_SIG_new',
+ '#define d2i_X509_SIG GRPC_SHADOW_d2i_X509_SIG',
+ '#define i2d_X509_SIG GRPC_SHADOW_i2d_X509_SIG',
+ '#define NETSCAPE_SPKAC_free GRPC_SHADOW_NETSCAPE_SPKAC_free',
+ '#define NETSCAPE_SPKAC_it GRPC_SHADOW_NETSCAPE_SPKAC_it',
+ '#define NETSCAPE_SPKAC_new GRPC_SHADOW_NETSCAPE_SPKAC_new',
+ '#define NETSCAPE_SPKI_free GRPC_SHADOW_NETSCAPE_SPKI_free',
+ '#define NETSCAPE_SPKI_it GRPC_SHADOW_NETSCAPE_SPKI_it',
+ '#define NETSCAPE_SPKI_new GRPC_SHADOW_NETSCAPE_SPKI_new',
+ '#define d2i_NETSCAPE_SPKAC GRPC_SHADOW_d2i_NETSCAPE_SPKAC',
+ '#define d2i_NETSCAPE_SPKI GRPC_SHADOW_d2i_NETSCAPE_SPKI',
+ '#define i2d_NETSCAPE_SPKAC GRPC_SHADOW_i2d_NETSCAPE_SPKAC',
+ '#define i2d_NETSCAPE_SPKI GRPC_SHADOW_i2d_NETSCAPE_SPKI',
+ '#define X509_VAL_free GRPC_SHADOW_X509_VAL_free',
+ '#define X509_VAL_it GRPC_SHADOW_X509_VAL_it',
+ '#define X509_VAL_new GRPC_SHADOW_X509_VAL_new',
+ '#define d2i_X509_VAL GRPC_SHADOW_d2i_X509_VAL',
+ '#define i2d_X509_VAL GRPC_SHADOW_i2d_X509_VAL',
+ '#define X509_CINF_free GRPC_SHADOW_X509_CINF_free',
+ '#define X509_CINF_it GRPC_SHADOW_X509_CINF_it',
+ '#define X509_CINF_new GRPC_SHADOW_X509_CINF_new',
+ '#define X509_dup GRPC_SHADOW_X509_dup',
+ '#define X509_free GRPC_SHADOW_X509_free',
+ '#define X509_get0_signature GRPC_SHADOW_X509_get0_signature',
+ '#define X509_get_ex_data GRPC_SHADOW_X509_get_ex_data',
+ '#define X509_get_ex_new_index GRPC_SHADOW_X509_get_ex_new_index',
+ '#define X509_get_signature_nid GRPC_SHADOW_X509_get_signature_nid',
+ '#define X509_it GRPC_SHADOW_X509_it',
+ '#define X509_new GRPC_SHADOW_X509_new',
+ '#define X509_parse_from_buffer GRPC_SHADOW_X509_parse_from_buffer',
+ '#define X509_set_ex_data GRPC_SHADOW_X509_set_ex_data',
+ '#define X509_up_ref GRPC_SHADOW_X509_up_ref',
+ '#define d2i_X509 GRPC_SHADOW_d2i_X509',
+ '#define d2i_X509_AUX GRPC_SHADOW_d2i_X509_AUX',
+ '#define d2i_X509_CINF GRPC_SHADOW_d2i_X509_CINF',
+ '#define i2d_X509 GRPC_SHADOW_i2d_X509',
+ '#define i2d_X509_AUX GRPC_SHADOW_i2d_X509_AUX',
+ '#define i2d_X509_CINF GRPC_SHADOW_i2d_X509_CINF',
+ '#define X509_CERT_AUX_free GRPC_SHADOW_X509_CERT_AUX_free',
+ '#define X509_CERT_AUX_it GRPC_SHADOW_X509_CERT_AUX_it',
+ '#define X509_CERT_AUX_new GRPC_SHADOW_X509_CERT_AUX_new',
+ '#define X509_add1_reject_object GRPC_SHADOW_X509_add1_reject_object',
+ '#define X509_add1_trust_object GRPC_SHADOW_X509_add1_trust_object',
+ '#define X509_alias_get0 GRPC_SHADOW_X509_alias_get0',
+ '#define X509_alias_set1 GRPC_SHADOW_X509_alias_set1',
+ '#define X509_keyid_get0 GRPC_SHADOW_X509_keyid_get0',
+ '#define X509_keyid_set1 GRPC_SHADOW_X509_keyid_set1',
+ '#define X509_reject_clear GRPC_SHADOW_X509_reject_clear',
+ '#define X509_trust_clear GRPC_SHADOW_X509_trust_clear',
+ '#define d2i_X509_CERT_AUX GRPC_SHADOW_d2i_X509_CERT_AUX',
+ '#define i2d_X509_CERT_AUX GRPC_SHADOW_i2d_X509_CERT_AUX',
+ '#define policy_cache_find_data GRPC_SHADOW_policy_cache_find_data',
+ '#define policy_cache_free GRPC_SHADOW_policy_cache_free',
+ '#define policy_cache_set GRPC_SHADOW_policy_cache_set',
+ '#define policy_data_free GRPC_SHADOW_policy_data_free',
+ '#define policy_data_new GRPC_SHADOW_policy_data_new',
+ '#define X509_policy_level_get0_node GRPC_SHADOW_X509_policy_level_get0_node',
+ '#define X509_policy_level_node_count GRPC_SHADOW_X509_policy_level_node_count',
+ '#define X509_policy_node_get0_parent GRPC_SHADOW_X509_policy_node_get0_parent',
+ '#define X509_policy_node_get0_policy GRPC_SHADOW_X509_policy_node_get0_policy',
+ '#define X509_policy_node_get0_qualifiers GRPC_SHADOW_X509_policy_node_get0_qualifiers',
+ '#define X509_policy_tree_get0_level GRPC_SHADOW_X509_policy_tree_get0_level',
+ '#define X509_policy_tree_get0_policies GRPC_SHADOW_X509_policy_tree_get0_policies',
+ '#define X509_policy_tree_get0_user_policies GRPC_SHADOW_X509_policy_tree_get0_user_policies',
+ '#define X509_policy_tree_level_count GRPC_SHADOW_X509_policy_tree_level_count',
+ '#define policy_cache_set_mapping GRPC_SHADOW_policy_cache_set_mapping',
+ '#define level_add_node GRPC_SHADOW_level_add_node',
+ '#define level_find_node GRPC_SHADOW_level_find_node',
+ '#define policy_node_cmp_new GRPC_SHADOW_policy_node_cmp_new',
+ '#define policy_node_free GRPC_SHADOW_policy_node_free',
+ '#define policy_node_match GRPC_SHADOW_policy_node_match',
+ '#define tree_find_sk GRPC_SHADOW_tree_find_sk',
+ '#define X509_policy_check GRPC_SHADOW_X509_policy_check',
+ '#define X509_policy_tree_free GRPC_SHADOW_X509_policy_tree_free',
+ '#define v3_akey_id GRPC_SHADOW_v3_akey_id',
+ '#define AUTHORITY_KEYID_free GRPC_SHADOW_AUTHORITY_KEYID_free',
+ '#define AUTHORITY_KEYID_it GRPC_SHADOW_AUTHORITY_KEYID_it',
+ '#define AUTHORITY_KEYID_new GRPC_SHADOW_AUTHORITY_KEYID_new',
+ '#define d2i_AUTHORITY_KEYID GRPC_SHADOW_d2i_AUTHORITY_KEYID',
+ '#define i2d_AUTHORITY_KEYID GRPC_SHADOW_i2d_AUTHORITY_KEYID',
+ '#define GENERAL_NAME_print GRPC_SHADOW_GENERAL_NAME_print',
+ '#define a2i_GENERAL_NAME GRPC_SHADOW_a2i_GENERAL_NAME',
+ '#define i2v_GENERAL_NAME GRPC_SHADOW_i2v_GENERAL_NAME',
+ '#define i2v_GENERAL_NAMES GRPC_SHADOW_i2v_GENERAL_NAMES',
+ '#define v2i_GENERAL_NAME GRPC_SHADOW_v2i_GENERAL_NAME',
+ '#define v2i_GENERAL_NAMES GRPC_SHADOW_v2i_GENERAL_NAMES',
+ '#define v2i_GENERAL_NAME_ex GRPC_SHADOW_v2i_GENERAL_NAME_ex',
+ '#define v3_alt GRPC_SHADOW_v3_alt',
+ '#define BASIC_CONSTRAINTS_free GRPC_SHADOW_BASIC_CONSTRAINTS_free',
+ '#define BASIC_CONSTRAINTS_it GRPC_SHADOW_BASIC_CONSTRAINTS_it',
+ '#define BASIC_CONSTRAINTS_new GRPC_SHADOW_BASIC_CONSTRAINTS_new',
+ '#define d2i_BASIC_CONSTRAINTS GRPC_SHADOW_d2i_BASIC_CONSTRAINTS',
+ '#define i2d_BASIC_CONSTRAINTS GRPC_SHADOW_i2d_BASIC_CONSTRAINTS',
+ '#define v3_bcons GRPC_SHADOW_v3_bcons',
+ '#define i2v_ASN1_BIT_STRING GRPC_SHADOW_i2v_ASN1_BIT_STRING',
+ '#define v2i_ASN1_BIT_STRING GRPC_SHADOW_v2i_ASN1_BIT_STRING',
+ '#define v3_key_usage GRPC_SHADOW_v3_key_usage',
+ '#define v3_nscert GRPC_SHADOW_v3_nscert',
+ '#define X509V3_EXT_CRL_add_nconf GRPC_SHADOW_X509V3_EXT_CRL_add_nconf',
+ '#define X509V3_EXT_REQ_add_nconf GRPC_SHADOW_X509V3_EXT_REQ_add_nconf',
+ '#define X509V3_EXT_add_nconf GRPC_SHADOW_X509V3_EXT_add_nconf',
+ '#define X509V3_EXT_add_nconf_sk GRPC_SHADOW_X509V3_EXT_add_nconf_sk',
+ '#define X509V3_EXT_i2d GRPC_SHADOW_X509V3_EXT_i2d',
+ '#define X509V3_EXT_nconf GRPC_SHADOW_X509V3_EXT_nconf',
+ '#define X509V3_EXT_nconf_nid GRPC_SHADOW_X509V3_EXT_nconf_nid',
+ '#define X509V3_get_section GRPC_SHADOW_X509V3_get_section',
+ '#define X509V3_get_string GRPC_SHADOW_X509V3_get_string',
+ '#define X509V3_section_free GRPC_SHADOW_X509V3_section_free',
+ '#define X509V3_set_ctx GRPC_SHADOW_X509V3_set_ctx',
+ '#define X509V3_set_nconf GRPC_SHADOW_X509V3_set_nconf',
+ '#define X509V3_string_free GRPC_SHADOW_X509V3_string_free',
+ '#define CERTIFICATEPOLICIES_free GRPC_SHADOW_CERTIFICATEPOLICIES_free',
+ '#define CERTIFICATEPOLICIES_it GRPC_SHADOW_CERTIFICATEPOLICIES_it',
+ '#define CERTIFICATEPOLICIES_new GRPC_SHADOW_CERTIFICATEPOLICIES_new',
+ '#define NOTICEREF_free GRPC_SHADOW_NOTICEREF_free',
+ '#define NOTICEREF_it GRPC_SHADOW_NOTICEREF_it',
+ '#define NOTICEREF_new GRPC_SHADOW_NOTICEREF_new',
+ '#define POLICYINFO_free GRPC_SHADOW_POLICYINFO_free',
+ '#define POLICYINFO_it GRPC_SHADOW_POLICYINFO_it',
+ '#define POLICYINFO_new GRPC_SHADOW_POLICYINFO_new',
+ '#define POLICYQUALINFO_free GRPC_SHADOW_POLICYQUALINFO_free',
+ '#define POLICYQUALINFO_it GRPC_SHADOW_POLICYQUALINFO_it',
+ '#define POLICYQUALINFO_new GRPC_SHADOW_POLICYQUALINFO_new',
+ '#define USERNOTICE_free GRPC_SHADOW_USERNOTICE_free',
+ '#define USERNOTICE_it GRPC_SHADOW_USERNOTICE_it',
+ '#define USERNOTICE_new GRPC_SHADOW_USERNOTICE_new',
+ '#define X509_POLICY_NODE_print GRPC_SHADOW_X509_POLICY_NODE_print',
+ '#define d2i_CERTIFICATEPOLICIES GRPC_SHADOW_d2i_CERTIFICATEPOLICIES',
+ '#define d2i_NOTICEREF GRPC_SHADOW_d2i_NOTICEREF',
+ '#define d2i_POLICYINFO GRPC_SHADOW_d2i_POLICYINFO',
+ '#define d2i_POLICYQUALINFO GRPC_SHADOW_d2i_POLICYQUALINFO',
+ '#define d2i_USERNOTICE GRPC_SHADOW_d2i_USERNOTICE',
+ '#define i2d_CERTIFICATEPOLICIES GRPC_SHADOW_i2d_CERTIFICATEPOLICIES',
+ '#define i2d_NOTICEREF GRPC_SHADOW_i2d_NOTICEREF',
+ '#define i2d_POLICYINFO GRPC_SHADOW_i2d_POLICYINFO',
+ '#define i2d_POLICYQUALINFO GRPC_SHADOW_i2d_POLICYQUALINFO',
+ '#define i2d_USERNOTICE GRPC_SHADOW_i2d_USERNOTICE',
+ '#define v3_cpols GRPC_SHADOW_v3_cpols',
+ '#define CRL_DIST_POINTS_free GRPC_SHADOW_CRL_DIST_POINTS_free',
+ '#define CRL_DIST_POINTS_it GRPC_SHADOW_CRL_DIST_POINTS_it',
+ '#define CRL_DIST_POINTS_new GRPC_SHADOW_CRL_DIST_POINTS_new',
+ '#define DIST_POINT_NAME_free GRPC_SHADOW_DIST_POINT_NAME_free',
+ '#define DIST_POINT_NAME_it GRPC_SHADOW_DIST_POINT_NAME_it',
+ '#define DIST_POINT_NAME_new GRPC_SHADOW_DIST_POINT_NAME_new',
+ '#define DIST_POINT_free GRPC_SHADOW_DIST_POINT_free',
+ '#define DIST_POINT_it GRPC_SHADOW_DIST_POINT_it',
+ '#define DIST_POINT_new GRPC_SHADOW_DIST_POINT_new',
+ '#define DIST_POINT_set_dpname GRPC_SHADOW_DIST_POINT_set_dpname',
+ '#define ISSUING_DIST_POINT_free GRPC_SHADOW_ISSUING_DIST_POINT_free',
+ '#define ISSUING_DIST_POINT_it GRPC_SHADOW_ISSUING_DIST_POINT_it',
+ '#define ISSUING_DIST_POINT_new GRPC_SHADOW_ISSUING_DIST_POINT_new',
+ '#define d2i_CRL_DIST_POINTS GRPC_SHADOW_d2i_CRL_DIST_POINTS',
+ '#define d2i_DIST_POINT GRPC_SHADOW_d2i_DIST_POINT',
+ '#define d2i_DIST_POINT_NAME GRPC_SHADOW_d2i_DIST_POINT_NAME',
+ '#define d2i_ISSUING_DIST_POINT GRPC_SHADOW_d2i_ISSUING_DIST_POINT',
+ '#define i2d_CRL_DIST_POINTS GRPC_SHADOW_i2d_CRL_DIST_POINTS',
+ '#define i2d_DIST_POINT GRPC_SHADOW_i2d_DIST_POINT',
+ '#define i2d_DIST_POINT_NAME GRPC_SHADOW_i2d_DIST_POINT_NAME',
+ '#define i2d_ISSUING_DIST_POINT GRPC_SHADOW_i2d_ISSUING_DIST_POINT',
+ '#define v3_crld GRPC_SHADOW_v3_crld',
+ '#define v3_freshest_crl GRPC_SHADOW_v3_freshest_crl',
+ '#define v3_idp GRPC_SHADOW_v3_idp',
+ '#define i2s_ASN1_ENUMERATED_TABLE GRPC_SHADOW_i2s_ASN1_ENUMERATED_TABLE',
+ '#define v3_crl_reason GRPC_SHADOW_v3_crl_reason',
+ '#define EXTENDED_KEY_USAGE_free GRPC_SHADOW_EXTENDED_KEY_USAGE_free',
+ '#define EXTENDED_KEY_USAGE_it GRPC_SHADOW_EXTENDED_KEY_USAGE_it',
+ '#define EXTENDED_KEY_USAGE_new GRPC_SHADOW_EXTENDED_KEY_USAGE_new',
+ '#define d2i_EXTENDED_KEY_USAGE GRPC_SHADOW_d2i_EXTENDED_KEY_USAGE',
+ '#define i2d_EXTENDED_KEY_USAGE GRPC_SHADOW_i2d_EXTENDED_KEY_USAGE',
+ '#define v3_ext_ku GRPC_SHADOW_v3_ext_ku',
+ '#define v3_ocsp_accresp GRPC_SHADOW_v3_ocsp_accresp',
+ '#define EDIPARTYNAME_free GRPC_SHADOW_EDIPARTYNAME_free',
+ '#define EDIPARTYNAME_it GRPC_SHADOW_EDIPARTYNAME_it',
+ '#define EDIPARTYNAME_new GRPC_SHADOW_EDIPARTYNAME_new',
+ '#define GENERAL_NAMES_free GRPC_SHADOW_GENERAL_NAMES_free',
+ '#define GENERAL_NAMES_it GRPC_SHADOW_GENERAL_NAMES_it',
+ '#define GENERAL_NAMES_new GRPC_SHADOW_GENERAL_NAMES_new',
+ '#define GENERAL_NAME_cmp GRPC_SHADOW_GENERAL_NAME_cmp',
+ '#define GENERAL_NAME_dup GRPC_SHADOW_GENERAL_NAME_dup',
+ '#define GENERAL_NAME_free GRPC_SHADOW_GENERAL_NAME_free',
+ '#define GENERAL_NAME_get0_otherName GRPC_SHADOW_GENERAL_NAME_get0_otherName',
+ '#define GENERAL_NAME_get0_value GRPC_SHADOW_GENERAL_NAME_get0_value',
+ '#define GENERAL_NAME_it GRPC_SHADOW_GENERAL_NAME_it',
+ '#define GENERAL_NAME_new GRPC_SHADOW_GENERAL_NAME_new',
+ '#define GENERAL_NAME_set0_othername GRPC_SHADOW_GENERAL_NAME_set0_othername',
+ '#define GENERAL_NAME_set0_value GRPC_SHADOW_GENERAL_NAME_set0_value',
+ '#define OTHERNAME_cmp GRPC_SHADOW_OTHERNAME_cmp',
+ '#define OTHERNAME_free GRPC_SHADOW_OTHERNAME_free',
+ '#define OTHERNAME_it GRPC_SHADOW_OTHERNAME_it',
+ '#define OTHERNAME_new GRPC_SHADOW_OTHERNAME_new',
+ '#define d2i_EDIPARTYNAME GRPC_SHADOW_d2i_EDIPARTYNAME',
+ '#define d2i_GENERAL_NAME GRPC_SHADOW_d2i_GENERAL_NAME',
+ '#define d2i_GENERAL_NAMES GRPC_SHADOW_d2i_GENERAL_NAMES',
+ '#define d2i_OTHERNAME GRPC_SHADOW_d2i_OTHERNAME',
+ '#define i2d_EDIPARTYNAME GRPC_SHADOW_i2d_EDIPARTYNAME',
+ '#define i2d_GENERAL_NAME GRPC_SHADOW_i2d_GENERAL_NAME',
+ '#define i2d_GENERAL_NAMES GRPC_SHADOW_i2d_GENERAL_NAMES',
+ '#define i2d_OTHERNAME GRPC_SHADOW_i2d_OTHERNAME',
+ '#define v3_ns_ia5_list GRPC_SHADOW_v3_ns_ia5_list',
+ '#define ACCESS_DESCRIPTION_free GRPC_SHADOW_ACCESS_DESCRIPTION_free',
+ '#define ACCESS_DESCRIPTION_it GRPC_SHADOW_ACCESS_DESCRIPTION_it',
+ '#define ACCESS_DESCRIPTION_new GRPC_SHADOW_ACCESS_DESCRIPTION_new',
+ '#define AUTHORITY_INFO_ACCESS_free GRPC_SHADOW_AUTHORITY_INFO_ACCESS_free',
+ '#define AUTHORITY_INFO_ACCESS_it GRPC_SHADOW_AUTHORITY_INFO_ACCESS_it',
+ '#define AUTHORITY_INFO_ACCESS_new GRPC_SHADOW_AUTHORITY_INFO_ACCESS_new',
+ '#define d2i_ACCESS_DESCRIPTION GRPC_SHADOW_d2i_ACCESS_DESCRIPTION',
+ '#define d2i_AUTHORITY_INFO_ACCESS GRPC_SHADOW_d2i_AUTHORITY_INFO_ACCESS',
+ '#define i2a_ACCESS_DESCRIPTION GRPC_SHADOW_i2a_ACCESS_DESCRIPTION',
+ '#define i2d_ACCESS_DESCRIPTION GRPC_SHADOW_i2d_ACCESS_DESCRIPTION',
+ '#define i2d_AUTHORITY_INFO_ACCESS GRPC_SHADOW_i2d_AUTHORITY_INFO_ACCESS',
+ '#define v3_info GRPC_SHADOW_v3_info',
+ '#define v3_sinfo GRPC_SHADOW_v3_sinfo',
+ '#define v3_crl_num GRPC_SHADOW_v3_crl_num',
+ '#define v3_delta_crl GRPC_SHADOW_v3_delta_crl',
+ '#define v3_inhibit_anyp GRPC_SHADOW_v3_inhibit_anyp',
+ '#define X509V3_EXT_add GRPC_SHADOW_X509V3_EXT_add',
+ '#define X509V3_EXT_add_alias GRPC_SHADOW_X509V3_EXT_add_alias',
+ '#define X509V3_EXT_add_list GRPC_SHADOW_X509V3_EXT_add_list',
+ '#define X509V3_EXT_cleanup GRPC_SHADOW_X509V3_EXT_cleanup',
+ '#define X509V3_EXT_d2i GRPC_SHADOW_X509V3_EXT_d2i',
+ '#define X509V3_EXT_free GRPC_SHADOW_X509V3_EXT_free',
+ '#define X509V3_EXT_get GRPC_SHADOW_X509V3_EXT_get',
+ '#define X509V3_EXT_get_nid GRPC_SHADOW_X509V3_EXT_get_nid',
+ '#define X509V3_add1_i2d GRPC_SHADOW_X509V3_add1_i2d',
+ '#define X509V3_add_standard_extensions GRPC_SHADOW_X509V3_add_standard_extensions',
+ '#define X509V3_get_d2i GRPC_SHADOW_X509V3_get_d2i',
+ '#define GENERAL_SUBTREE_free GRPC_SHADOW_GENERAL_SUBTREE_free',
+ '#define GENERAL_SUBTREE_it GRPC_SHADOW_GENERAL_SUBTREE_it',
+ '#define GENERAL_SUBTREE_new GRPC_SHADOW_GENERAL_SUBTREE_new',
+ '#define NAME_CONSTRAINTS_check GRPC_SHADOW_NAME_CONSTRAINTS_check',
+ '#define NAME_CONSTRAINTS_free GRPC_SHADOW_NAME_CONSTRAINTS_free',
+ '#define NAME_CONSTRAINTS_it GRPC_SHADOW_NAME_CONSTRAINTS_it',
+ '#define NAME_CONSTRAINTS_new GRPC_SHADOW_NAME_CONSTRAINTS_new',
+ '#define v3_name_constraints GRPC_SHADOW_v3_name_constraints',
+ '#define v3_pci GRPC_SHADOW_v3_pci',
+ '#define PROXY_CERT_INFO_EXTENSION_free GRPC_SHADOW_PROXY_CERT_INFO_EXTENSION_free',
+ '#define PROXY_CERT_INFO_EXTENSION_it GRPC_SHADOW_PROXY_CERT_INFO_EXTENSION_it',
+ '#define PROXY_CERT_INFO_EXTENSION_new GRPC_SHADOW_PROXY_CERT_INFO_EXTENSION_new',
+ '#define PROXY_POLICY_free GRPC_SHADOW_PROXY_POLICY_free',
+ '#define PROXY_POLICY_it GRPC_SHADOW_PROXY_POLICY_it',
+ '#define PROXY_POLICY_new GRPC_SHADOW_PROXY_POLICY_new',
+ '#define d2i_PROXY_CERT_INFO_EXTENSION GRPC_SHADOW_d2i_PROXY_CERT_INFO_EXTENSION',
+ '#define d2i_PROXY_POLICY GRPC_SHADOW_d2i_PROXY_POLICY',
+ '#define i2d_PROXY_CERT_INFO_EXTENSION GRPC_SHADOW_i2d_PROXY_CERT_INFO_EXTENSION',
+ '#define i2d_PROXY_POLICY GRPC_SHADOW_i2d_PROXY_POLICY',
+ '#define POLICY_CONSTRAINTS_free GRPC_SHADOW_POLICY_CONSTRAINTS_free',
+ '#define POLICY_CONSTRAINTS_it GRPC_SHADOW_POLICY_CONSTRAINTS_it',
+ '#define POLICY_CONSTRAINTS_new GRPC_SHADOW_POLICY_CONSTRAINTS_new',
+ '#define v3_policy_constraints GRPC_SHADOW_v3_policy_constraints',
+ '#define PKEY_USAGE_PERIOD_free GRPC_SHADOW_PKEY_USAGE_PERIOD_free',
+ '#define PKEY_USAGE_PERIOD_it GRPC_SHADOW_PKEY_USAGE_PERIOD_it',
+ '#define PKEY_USAGE_PERIOD_new GRPC_SHADOW_PKEY_USAGE_PERIOD_new',
+ '#define d2i_PKEY_USAGE_PERIOD GRPC_SHADOW_d2i_PKEY_USAGE_PERIOD',
+ '#define i2d_PKEY_USAGE_PERIOD GRPC_SHADOW_i2d_PKEY_USAGE_PERIOD',
+ '#define v3_pkey_usage_period GRPC_SHADOW_v3_pkey_usage_period',
+ '#define POLICY_MAPPINGS_it GRPC_SHADOW_POLICY_MAPPINGS_it',
+ '#define POLICY_MAPPING_free GRPC_SHADOW_POLICY_MAPPING_free',
+ '#define POLICY_MAPPING_it GRPC_SHADOW_POLICY_MAPPING_it',
+ '#define POLICY_MAPPING_new GRPC_SHADOW_POLICY_MAPPING_new',
+ '#define v3_policy_mappings GRPC_SHADOW_v3_policy_mappings',
+ '#define X509V3_EXT_print GRPC_SHADOW_X509V3_EXT_print',
+ '#define X509V3_EXT_print_fp GRPC_SHADOW_X509V3_EXT_print_fp',
+ '#define X509V3_EXT_val_prn GRPC_SHADOW_X509V3_EXT_val_prn',
+ '#define X509V3_extensions_print GRPC_SHADOW_X509V3_extensions_print',
+ '#define X509_PURPOSE_add GRPC_SHADOW_X509_PURPOSE_add',
+ '#define X509_PURPOSE_cleanup GRPC_SHADOW_X509_PURPOSE_cleanup',
+ '#define X509_PURPOSE_get0 GRPC_SHADOW_X509_PURPOSE_get0',
+ '#define X509_PURPOSE_get0_name GRPC_SHADOW_X509_PURPOSE_get0_name',
+ '#define X509_PURPOSE_get0_sname GRPC_SHADOW_X509_PURPOSE_get0_sname',
+ '#define X509_PURPOSE_get_by_id GRPC_SHADOW_X509_PURPOSE_get_by_id',
+ '#define X509_PURPOSE_get_by_sname GRPC_SHADOW_X509_PURPOSE_get_by_sname',
+ '#define X509_PURPOSE_get_count GRPC_SHADOW_X509_PURPOSE_get_count',
+ '#define X509_PURPOSE_get_id GRPC_SHADOW_X509_PURPOSE_get_id',
+ '#define X509_PURPOSE_get_trust GRPC_SHADOW_X509_PURPOSE_get_trust',
+ '#define X509_PURPOSE_set GRPC_SHADOW_X509_PURPOSE_set',
+ '#define X509_check_akid GRPC_SHADOW_X509_check_akid',
+ '#define X509_check_ca GRPC_SHADOW_X509_check_ca',
+ '#define X509_check_issued GRPC_SHADOW_X509_check_issued',
+ '#define X509_check_purpose GRPC_SHADOW_X509_check_purpose',
+ '#define X509_supported_extension GRPC_SHADOW_X509_supported_extension',
+ '#define i2s_ASN1_OCTET_STRING GRPC_SHADOW_i2s_ASN1_OCTET_STRING',
+ '#define s2i_ASN1_OCTET_STRING GRPC_SHADOW_s2i_ASN1_OCTET_STRING',
+ '#define v3_skey_id GRPC_SHADOW_v3_skey_id',
+ '#define SXNETID_free GRPC_SHADOW_SXNETID_free',
+ '#define SXNETID_it GRPC_SHADOW_SXNETID_it',
+ '#define SXNETID_new GRPC_SHADOW_SXNETID_new',
+ '#define SXNET_add_id_INTEGER GRPC_SHADOW_SXNET_add_id_INTEGER',
+ '#define SXNET_add_id_asc GRPC_SHADOW_SXNET_add_id_asc',
+ '#define SXNET_add_id_ulong GRPC_SHADOW_SXNET_add_id_ulong',
+ '#define SXNET_free GRPC_SHADOW_SXNET_free',
+ '#define SXNET_get_id_INTEGER GRPC_SHADOW_SXNET_get_id_INTEGER',
+ '#define SXNET_get_id_asc GRPC_SHADOW_SXNET_get_id_asc',
+ '#define SXNET_get_id_ulong GRPC_SHADOW_SXNET_get_id_ulong',
+ '#define SXNET_it GRPC_SHADOW_SXNET_it',
+ '#define SXNET_new GRPC_SHADOW_SXNET_new',
+ '#define d2i_SXNET GRPC_SHADOW_d2i_SXNET',
+ '#define d2i_SXNETID GRPC_SHADOW_d2i_SXNETID',
+ '#define i2d_SXNET GRPC_SHADOW_i2d_SXNET',
+ '#define i2d_SXNETID GRPC_SHADOW_i2d_SXNETID',
+ '#define v3_sxnet GRPC_SHADOW_v3_sxnet',
+ '#define X509V3_NAME_from_section GRPC_SHADOW_X509V3_NAME_from_section',
+ '#define X509V3_add_value GRPC_SHADOW_X509V3_add_value',
+ '#define X509V3_add_value_bool GRPC_SHADOW_X509V3_add_value_bool',
+ '#define X509V3_add_value_bool_nf GRPC_SHADOW_X509V3_add_value_bool_nf',
+ '#define X509V3_add_value_int GRPC_SHADOW_X509V3_add_value_int',
+ '#define X509V3_add_value_uchar GRPC_SHADOW_X509V3_add_value_uchar',
+ '#define X509V3_conf_free GRPC_SHADOW_X509V3_conf_free',
+ '#define X509V3_get_value_bool GRPC_SHADOW_X509V3_get_value_bool',
+ '#define X509V3_get_value_int GRPC_SHADOW_X509V3_get_value_int',
+ '#define X509V3_parse_list GRPC_SHADOW_X509V3_parse_list',
+ '#define X509_REQ_get1_email GRPC_SHADOW_X509_REQ_get1_email',
+ '#define X509_check_email GRPC_SHADOW_X509_check_email',
+ '#define X509_check_host GRPC_SHADOW_X509_check_host',
+ '#define X509_check_ip GRPC_SHADOW_X509_check_ip',
+ '#define X509_check_ip_asc GRPC_SHADOW_X509_check_ip_asc',
+ '#define X509_email_free GRPC_SHADOW_X509_email_free',
+ '#define X509_get1_email GRPC_SHADOW_X509_get1_email',
+ '#define X509_get1_ocsp GRPC_SHADOW_X509_get1_ocsp',
+ '#define a2i_IPADDRESS GRPC_SHADOW_a2i_IPADDRESS',
+ '#define a2i_IPADDRESS_NC GRPC_SHADOW_a2i_IPADDRESS_NC',
+ '#define a2i_ipadd GRPC_SHADOW_a2i_ipadd',
+ '#define hex_to_string GRPC_SHADOW_hex_to_string',
+ '#define i2s_ASN1_ENUMERATED GRPC_SHADOW_i2s_ASN1_ENUMERATED',
+ '#define i2s_ASN1_INTEGER GRPC_SHADOW_i2s_ASN1_INTEGER',
+ '#define name_cmp GRPC_SHADOW_name_cmp',
+ '#define s2i_ASN1_INTEGER GRPC_SHADOW_s2i_ASN1_INTEGER',
+ '#define string_to_hex GRPC_SHADOW_string_to_hex',
+ '#define PKCS7_get_raw_certificates GRPC_SHADOW_PKCS7_get_raw_certificates',
+ '#define pkcs7_bundle GRPC_SHADOW_pkcs7_bundle',
+ '#define pkcs7_parse_header GRPC_SHADOW_pkcs7_parse_header',
+ '#define PKCS7_bundle_CRLs GRPC_SHADOW_PKCS7_bundle_CRLs',
+ '#define PKCS7_bundle_certificates GRPC_SHADOW_PKCS7_bundle_certificates',
+ '#define PKCS7_get_CRLs GRPC_SHADOW_PKCS7_get_CRLs',
+ '#define PKCS7_get_PEM_CRLs GRPC_SHADOW_PKCS7_get_PEM_CRLs',
+ '#define PKCS7_get_PEM_certificates GRPC_SHADOW_PKCS7_get_PEM_certificates',
+ '#define PKCS7_get_certificates GRPC_SHADOW_PKCS7_get_certificates',
+ '#define PKCS8_marshal_encrypted_private_key GRPC_SHADOW_PKCS8_marshal_encrypted_private_key',
+ '#define PKCS8_parse_encrypted_private_key GRPC_SHADOW_PKCS8_parse_encrypted_private_key',
+ '#define pkcs12_key_gen GRPC_SHADOW_pkcs12_key_gen',
+ '#define pkcs8_pbe_decrypt GRPC_SHADOW_pkcs8_pbe_decrypt',
+ '#define EVP_PKCS82PKEY GRPC_SHADOW_EVP_PKCS82PKEY',
+ '#define EVP_PKEY2PKCS8 GRPC_SHADOW_EVP_PKEY2PKCS8',
+ '#define PKCS12_PBE_add GRPC_SHADOW_PKCS12_PBE_add',
+ '#define PKCS12_free GRPC_SHADOW_PKCS12_free',
+ '#define PKCS12_get_key_and_certs GRPC_SHADOW_PKCS12_get_key_and_certs',
+ '#define PKCS12_parse GRPC_SHADOW_PKCS12_parse',
+ '#define PKCS12_verify_mac GRPC_SHADOW_PKCS12_verify_mac',
+ '#define PKCS8_PRIV_KEY_INFO_free GRPC_SHADOW_PKCS8_PRIV_KEY_INFO_free',
+ '#define PKCS8_PRIV_KEY_INFO_it GRPC_SHADOW_PKCS8_PRIV_KEY_INFO_it',
+ '#define PKCS8_PRIV_KEY_INFO_new GRPC_SHADOW_PKCS8_PRIV_KEY_INFO_new',
+ '#define PKCS8_decrypt GRPC_SHADOW_PKCS8_decrypt',
+ '#define PKCS8_encrypt GRPC_SHADOW_PKCS8_encrypt',
+ '#define d2i_PKCS12 GRPC_SHADOW_d2i_PKCS12',
+ '#define d2i_PKCS12_bio GRPC_SHADOW_d2i_PKCS12_bio',
+ '#define d2i_PKCS12_fp GRPC_SHADOW_d2i_PKCS12_fp',
+ '#define d2i_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_d2i_PKCS8_PRIV_KEY_INFO',
+ '#define i2d_PKCS8_PRIV_KEY_INFO GRPC_SHADOW_i2d_PKCS8_PRIV_KEY_INFO',
+ '#define PKCS5_pbe2_decrypt_init GRPC_SHADOW_PKCS5_pbe2_decrypt_init',
+ '#define PKCS5_pbe2_encrypt_init GRPC_SHADOW_PKCS5_pbe2_encrypt_init'
+end
diff --git a/src/objective-c/BoringSSL.podspec b/src/objective-c/BoringSSL.podspec
deleted file mode 100644
index dc56680393..0000000000
--- a/src/objective-c/BoringSSL.podspec
+++ /dev/null
@@ -1,1539 +0,0 @@
-# BoringSSL CocoaPods podspec
-
-# Copyright 2015, Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Pod::Spec.new do |s|
- s.name = 'BoringSSL'
- version = '10.0.6'
- s.version = version
- s.summary = 'BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.'
- # Adapted from the homepage:
- s.description = <<-DESC
- BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.
-
- Although BoringSSL is an open source project, it is not intended for general use, as OpenSSL is.
- We don’t recommend that third parties depend upon it. Doing so is likely to be frustrating
- because there are no guarantees of API stability. Only the latest version of this pod is
- supported, and every new version is a new major version.
-
- We update Google libraries and programs that use BoringSSL as needed when deciding to make API
- changes. This allows us to mostly avoid compromises in the name of compatibility. It works for
- us, but it may not work for you.
-
- As a Cocoapods pod, it has the advantage over OpenSSL's pods that the library doesn't need to
- be precompiled. This eliminates the 10 - 20 minutes of wait the first time a user does "pod
- install", lets it be used as a dynamic framework (pending solution of Cocoapods' issue #4605),
- and works with bitcode automatically. It's also thought to be smaller than OpenSSL (which takes
- 1MB - 2MB per ARM architecture), but we don't have specific numbers yet.
-
- BoringSSL arose because Google used OpenSSL for many years in various ways and, over time, built
- up a large number of patches that were maintained while tracking upstream OpenSSL. As Google’s
- product portfolio became more complex, more copies of OpenSSL sprung up and the effort involved
- in maintaining all these patches in multiple places was growing steadily.
-
- Currently BoringSSL is the SSL library in Chrome/Chromium, Android (but it’s not part of the
- NDK) and a number of other apps/programs.
- DESC
- s.homepage = 'https://github.com/google/boringssl'
- s.license = { :type => 'Mixed', :file => 'LICENSE' }
- # "The name and email addresses of the library maintainers, not the Podspec maintainer."
- s.authors = 'Adam Langley', 'David Benjamin', 'Matt Braithwaite'
-
- s.source = {
- :git => 'https://github.com/google/boringssl.git',
- :commit => "b29b21a81b32ec273f118f589f46d56ad3332420",
- }
-
- s.ios.deployment_target = '5.0'
- s.osx.deployment_target = '10.7'
-
- name = 'openssl'
-
- # When creating a dynamic framework, name it openssl.framework instead of BoringSSL.framework.
- # This lets users write their includes like `#include <openssl/ssl.h>` as opposed to `#include
- # <BoringSSL/ssl.h>`.
- s.module_name = name
-
- # When creating a dynamic framework, copy the headers under `include/openssl/` into the root of
- # the `Headers/` directory of the framework (i.e., not under `Headers/include/openssl`).
- #
- # TODO(jcanizales): Debug why this doesn't work on macOS.
- s.header_mappings_dir = 'include/openssl'
-
- # The above has an undesired effect when creating a static library: It forces users to write
- # includes like `#include <BoringSSL/ssl.h>`. `s.header_dir` adds a path prefix to that, and
- # because Cocoapods lets omit the pod name when including headers of static libraries, the
- # following lets users write `#include <openssl/ssl.h>`.
- s.header_dir = name
-
- # The module map and umbrella header created automatically by Cocoapods don't work for C libraries
- # like this one. The following file, and a correct umbrella header, are created on the fly by the
- # `prepare_command` of this pod.
- s.module_map = 'include/openssl/BoringSSL.modulemap'
-
- # We don't need to inhibit all warnings; only -Wno-shorten-64-to-32. But Cocoapods' linter doesn't
- # want that for some reason.
- s.compiler_flags = '-DOPENSSL_NO_ASM', '-GCC_WARN_INHIBIT_ALL_WARNINGS', '-w'
- s.requires_arc = false
-
- # Like many other C libraries, BoringSSL has its public headers under `include/<libname>/` and its
- # sources and private headers in other directories outside `include/`. Cocoapods' linter doesn't
- # allow any header to be listed outside the `header_mappings_dir` (even though doing so works in
- # practice). Because we need our `header_mappings_dir` to be `include/openssl/` for the reason
- # mentioned above, we work around the linter limitation by dividing the pod into two subspecs, one
- # for public headers and the other for implementation. Each gets its own `header_mappings_dir`,
- # making the linter happy.
- s.subspec 'Interface' do |ss|
- ss.header_mappings_dir = 'include/openssl'
- ss.source_files = 'include/openssl/*.h'
- end
- s.subspec 'Implementation' do |ss|
- ss.header_mappings_dir = '.'
- ss.source_files = 'ssl/*.{h,cc}',
- 'ssl/**/*.{h,cc}',
- '*.{h,c}',
- 'crypto/*.{h,c}',
- 'crypto/**/*.{h,c}',
- 'third_party/fiat/*.{h,c}'
- ss.private_header_files = 'ssl/*.h',
- 'ssl/**/*.h',
- '*.h',
- 'crypto/*.h',
- 'crypto/**/*.h'
- # bcm.c includes other source files, creating duplicated symbols. Since it is not used, we
- # explicitly exclude it from the pod.
- # TODO (mxyan): Work with BoringSSL team to remove this hack.
- ss.exclude_files = 'crypto/fipsmodule/bcm.c',
- '**/*_test.*',
- '**/test_*.*',
- '**/test/*.*'
-
- ss.dependency "#{s.name}/Interface", version
- end
-
- s.prepare_command = <<-END_OF_COMMAND
- # Add a module map and an umbrella header
- cat > include/openssl/umbrella.h <<EOF
- #include "ssl.h"
- #include "crypto.h"
- #include "aes.h"
- /* The following macros are defined by base.h. The latter is the first file included by the
- other headers. */
- #if defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
- # include "arm_arch.h"
- #endif
- #include "asn1.h"
- #include "asn1_mac.h"
- #include "asn1t.h"
- #include "blowfish.h"
- #include "cast.h"
- #include "chacha.h"
- #include "cmac.h"
- #include "conf.h"
- #include "cpu.h"
- #include "curve25519.h"
- #include "des.h"
- #include "dtls1.h"
- #include "hkdf.h"
- #include "md4.h"
- #include "md5.h"
- #include "obj_mac.h"
- #include "objects.h"
- #include "opensslv.h"
- #include "ossl_typ.h"
- #include "pkcs12.h"
- #include "pkcs7.h"
- #include "pkcs8.h"
- #include "poly1305.h"
- #include "rand.h"
- #include "rc4.h"
- #include "ripemd.h"
- #include "safestack.h"
- #include "srtp.h"
- #include "x509.h"
- #include "x509v3.h"
- EOF
- cat > include/openssl/BoringSSL.modulemap <<EOF
- framework module openssl {
- umbrella header "umbrella.h"
- textual header "arm_arch.h"
- export *
- module * { export * }
- }
- EOF
-
- # This is a bit ridiculous, but requiring people to install Go in order to build is slightly
- # more ridiculous IMO. To save you from scrolling, this is the last part of the podspec.
- # TODO(jcanizales): Translate err_data_generate.go into a Bash or Ruby script.
- cat > err_data.c <<EOF
- /* Copyright (c) 2015, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
- /* This file was generated by err_data_generate.go. */
-
- #include <openssl/base.h>
- #include <openssl/err.h>
- #include <openssl/type_check.h>
-
-
- OPENSSL_COMPILE_ASSERT(ERR_LIB_NONE == 1, library_values_changed_1);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_SYS == 2, library_values_changed_2);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_BN == 3, library_values_changed_3);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_RSA == 4, library_values_changed_4);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_DH == 5, library_values_changed_5);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_EVP == 6, library_values_changed_6);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_BUF == 7, library_values_changed_7);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_OBJ == 8, library_values_changed_8);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_PEM == 9, library_values_changed_9);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_DSA == 10, library_values_changed_10);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_X509 == 11, library_values_changed_11);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_ASN1 == 12, library_values_changed_12);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_CONF == 13, library_values_changed_13);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_CRYPTO == 14, library_values_changed_14);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_EC == 15, library_values_changed_15);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_SSL == 16, library_values_changed_16);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_BIO == 17, library_values_changed_17);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_PKCS7 == 18, library_values_changed_18);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_PKCS8 == 19, library_values_changed_19);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_X509V3 == 20, library_values_changed_20);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_RAND == 21, library_values_changed_21);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_ENGINE == 22, library_values_changed_22);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_OCSP == 23, library_values_changed_23);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_UI == 24, library_values_changed_24);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_COMP == 25, library_values_changed_25);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_ECDSA == 26, library_values_changed_26);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_ECDH == 27, library_values_changed_27);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_HMAC == 28, library_values_changed_28);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_DIGEST == 29, library_values_changed_29);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_CIPHER == 30, library_values_changed_30);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_HKDF == 31, library_values_changed_31);
- OPENSSL_COMPILE_ASSERT(ERR_LIB_USER == 32, library_values_changed_32);
- OPENSSL_COMPILE_ASSERT(ERR_NUM_LIBS == 33, library_values_changed_num);
-
- const uint32_t kOpenSSLReasonValues[] = {
- 0xc320838,
- 0xc328852,
- 0xc330861,
- 0xc338871,
- 0xc340880,
- 0xc348899,
- 0xc3508a5,
- 0xc3588c2,
- 0xc3608e2,
- 0xc3688f0,
- 0xc370900,
- 0xc37890d,
- 0xc38091d,
- 0xc388928,
- 0xc39093e,
- 0xc39894d,
- 0xc3a0961,
- 0xc3a8845,
- 0xc3b00ea,
- 0xc3b88d4,
- 0x10320845,
- 0x10329513,
- 0x1033151f,
- 0x10339538,
- 0x1034154b,
- 0x10348eed,
- 0x10350c5e,
- 0x1035955e,
- 0x10361573,
- 0x10369586,
- 0x103715a5,
- 0x103795be,
- 0x103815d3,
- 0x103895f1,
- 0x10391600,
- 0x1039961c,
- 0x103a1637,
- 0x103a9646,
- 0x103b1662,
- 0x103b967d,
- 0x103c1694,
- 0x103c80ea,
- 0x103d16a5,
- 0x103d96b9,
- 0x103e16d8,
- 0x103e96e7,
- 0x103f16fe,
- 0x103f9711,
- 0x10400c22,
- 0x10409724,
- 0x10411742,
- 0x10419755,
- 0x1042176f,
- 0x1042977f,
- 0x10431793,
- 0x104397a9,
- 0x104417c1,
- 0x104497d6,
- 0x104517ea,
- 0x104597fc,
- 0x104605fb,
- 0x1046894d,
- 0x10471811,
- 0x10479828,
- 0x1048183d,
- 0x1048984b,
- 0x10490e4f,
- 0x14320c05,
- 0x14328c13,
- 0x14330c22,
- 0x14338c34,
- 0x143400ac,
- 0x143480ea,
- 0x18320083,
- 0x18328f43,
- 0x183300ac,
- 0x18338f59,
- 0x18340f6d,
- 0x183480ea,
- 0x18350f82,
- 0x18358f9a,
- 0x18360faf,
- 0x18368fc3,
- 0x18370fe7,
- 0x18378ffd,
- 0x18381011,
- 0x18389021,
- 0x18390a73,
- 0x18399031,
- 0x183a1059,
- 0x183a907f,
- 0x183b0c6a,
- 0x183b90b4,
- 0x183c10c6,
- 0x183c90d1,
- 0x183d10e1,
- 0x183d90f2,
- 0x183e1103,
- 0x183e9115,
- 0x183f113e,
- 0x183f9157,
- 0x1840116f,
- 0x184086d3,
- 0x184110a2,
- 0x1841906d,
- 0x1842108c,
- 0x18429046,
- 0x20321196,
- 0x243211a2,
- 0x24328993,
- 0x243311b4,
- 0x243391c1,
- 0x243411ce,
- 0x243491e0,
- 0x243511ef,
- 0x2435920c,
- 0x24361219,
- 0x24369227,
- 0x24371235,
- 0x24379243,
- 0x2438124c,
- 0x24389259,
- 0x2439126c,
- 0x28320c52,
- 0x28328c6a,
- 0x28330c22,
- 0x28338c7d,
- 0x28340c5e,
- 0x283480ac,
- 0x283500ea,
- 0x2c322c30,
- 0x2c329283,
- 0x2c332c3e,
- 0x2c33ac50,
- 0x2c342c64,
- 0x2c34ac76,
- 0x2c352c91,
- 0x2c35aca3,
- 0x2c362cb6,
- 0x2c36832d,
- 0x2c372cc3,
- 0x2c37acd5,
- 0x2c382cfa,
- 0x2c38ad11,
- 0x2c392d1f,
- 0x2c39ad2f,
- 0x2c3a2d41,
- 0x2c3aad55,
- 0x2c3b2d66,
- 0x2c3bad85,
- 0x2c3c1295,
- 0x2c3c92ab,
- 0x2c3d2d99,
- 0x2c3d92c4,
- 0x2c3e2db6,
- 0x2c3eadc4,
- 0x2c3f2ddc,
- 0x2c3fadf4,
- 0x2c402e01,
- 0x2c409196,
- 0x2c412e12,
- 0x2c41ae25,
- 0x2c42116f,
- 0x2c42ae36,
- 0x2c430720,
- 0x2c43ad77,
- 0x2c442ce8,
- 0x30320000,
- 0x30328015,
- 0x3033001f,
- 0x30338038,
- 0x3034004a,
- 0x30348064,
- 0x3035006b,
- 0x30358083,
- 0x30360094,
- 0x303680ac,
- 0x303700b9,
- 0x303780c8,
- 0x303800ea,
- 0x303880f7,
- 0x3039010a,
- 0x30398125,
- 0x303a013a,
- 0x303a814e,
- 0x303b0162,
- 0x303b8173,
- 0x303c018c,
- 0x303c81a9,
- 0x303d01b7,
- 0x303d81cb,
- 0x303e01db,
- 0x303e81f4,
- 0x303f0204,
- 0x303f8217,
- 0x30400226,
- 0x30408232,
- 0x30410247,
- 0x30418257,
- 0x3042026e,
- 0x3042827b,
- 0x3043028e,
- 0x3043829d,
- 0x304402b2,
- 0x304482d3,
- 0x304502e6,
- 0x304582f9,
- 0x30460312,
- 0x3046832d,
- 0x3047034a,
- 0x30478363,
- 0x30480371,
- 0x30488382,
- 0x30490391,
- 0x304983a9,
- 0x304a03bb,
- 0x304a83cf,
- 0x304b03ee,
- 0x304b8401,
- 0x304c040c,
- 0x304c841d,
- 0x304d0429,
- 0x304d843f,
- 0x304e044d,
- 0x304e8463,
- 0x304f0475,
- 0x304f8487,
- 0x3050049a,
- 0x305084ad,
- 0x305104be,
- 0x305184ce,
- 0x305204e6,
- 0x305284fb,
- 0x30530513,
- 0x30538527,
- 0x3054053f,
- 0x30548558,
- 0x30550571,
- 0x3055858e,
- 0x30560599,
- 0x305685b1,
- 0x305705c1,
- 0x305785d2,
- 0x305805e5,
- 0x305885fb,
- 0x30590604,
- 0x30598619,
- 0x305a062c,
- 0x305a863b,
- 0x305b065b,
- 0x305b866a,
- 0x305c068b,
- 0x305c86a7,
- 0x305d06b3,
- 0x305d86d3,
- 0x305e06ef,
- 0x305e8700,
- 0x305f0716,
- 0x305f8720,
- 0x34320b63,
- 0x34328b77,
- 0x34330b94,
- 0x34338ba7,
- 0x34340bb6,
- 0x34348bef,
- 0x34350bd3,
- 0x3c320083,
- 0x3c328ca7,
- 0x3c330cc0,
- 0x3c338cdb,
- 0x3c340cf8,
- 0x3c348d22,
- 0x3c350d3d,
- 0x3c358d63,
- 0x3c360d7c,
- 0x3c368d94,
- 0x3c370da5,
- 0x3c378db3,
- 0x3c380dc0,
- 0x3c388dd4,
- 0x3c390c6a,
- 0x3c398de8,
- 0x3c3a0dfc,
- 0x3c3a890d,
- 0x3c3b0e0c,
- 0x3c3b8e27,
- 0x3c3c0e39,
- 0x3c3c8e6c,
- 0x3c3d0e76,
- 0x3c3d8e8a,
- 0x3c3e0e98,
- 0x3c3e8ebd,
- 0x3c3f0c93,
- 0x3c3f8ea6,
- 0x3c4000ac,
- 0x3c4080ea,
- 0x3c410d13,
- 0x3c418d52,
- 0x3c420e4f,
- 0x403218a4,
- 0x403298ba,
- 0x403318e8,
- 0x403398f2,
- 0x40341909,
- 0x40349927,
- 0x40351937,
- 0x40359949,
- 0x40361956,
- 0x40369962,
- 0x40371977,
- 0x40379989,
- 0x40381994,
- 0x403899a6,
- 0x40390eed,
- 0x403999b6,
- 0x403a19c9,
- 0x403a99ea,
- 0x403b19fb,
- 0x403b9a0b,
- 0x403c0064,
- 0x403c8083,
- 0x403d1a8f,
- 0x403d9aa5,
- 0x403e1ab4,
- 0x403e9aec,
- 0x403f1b06,
- 0x403f9b14,
- 0x40401b29,
- 0x40409b3d,
- 0x40411b5a,
- 0x40419b75,
- 0x40421b8e,
- 0x40429ba1,
- 0x40431bb5,
- 0x40439bcd,
- 0x40441be4,
- 0x404480ac,
- 0x40451bf9,
- 0x40459c0b,
- 0x40461c2f,
- 0x40469c4f,
- 0x40471c5d,
- 0x40479c84,
- 0x40481cc1,
- 0x40489cda,
- 0x40491cf1,
- 0x40499d0b,
- 0x404a1d22,
- 0x404a9d40,
- 0x404b1d58,
- 0x404b9d6f,
- 0x404c1d85,
- 0x404c9d97,
- 0x404d1db8,
- 0x404d9dda,
- 0x404e1dee,
- 0x404e9dfb,
- 0x404f1e28,
- 0x404f9e51,
- 0x40501e8c,
- 0x40509ea0,
- 0x40511ebb,
- 0x40521ecb,
- 0x40529eef,
- 0x40531f07,
- 0x40539f1a,
- 0x40541f2f,
- 0x40549f52,
- 0x40551f60,
- 0x40559f7d,
- 0x40561f8a,
- 0x40569fa3,
- 0x40571fbb,
- 0x40579fce,
- 0x40581fe3,
- 0x4058a00a,
- 0x40592039,
- 0x4059a066,
- 0x405a207a,
- 0x405aa08a,
- 0x405b20a2,
- 0x405ba0b3,
- 0x405c20c6,
- 0x405ca105,
- 0x405d2112,
- 0x405da129,
- 0x405e2167,
- 0x405e8ab1,
- 0x405f2188,
- 0x405fa195,
- 0x406021a3,
- 0x4060a1c5,
- 0x40612209,
- 0x4061a241,
- 0x40622258,
- 0x4062a269,
- 0x4063227a,
- 0x4063a28f,
- 0x406422a6,
- 0x4064a2d2,
- 0x406522ed,
- 0x4065a304,
- 0x4066231c,
- 0x4066a346,
- 0x40672371,
- 0x4067a392,
- 0x406823b9,
- 0x4068a3da,
- 0x4069240c,
- 0x4069a43a,
- 0x406a245b,
- 0x406aa47b,
- 0x406b2603,
- 0x406ba626,
- 0x406c263c,
- 0x406ca8b7,
- 0x406d28e6,
- 0x406da90e,
- 0x406e293c,
- 0x406ea989,
- 0x406f29a8,
- 0x406fa9e0,
- 0x407029f3,
- 0x4070aa10,
- 0x40710800,
- 0x4071aa22,
- 0x40722a35,
- 0x4072aa4e,
- 0x40732a66,
- 0x40739482,
- 0x40742a7a,
- 0x4074aa94,
- 0x40752aa5,
- 0x4075aab9,
- 0x40762ac7,
- 0x40769259,
- 0x40772aec,
- 0x4077ab0e,
- 0x40782b29,
- 0x4078ab62,
- 0x40792b79,
- 0x4079ab8f,
- 0x407a2b9b,
- 0x407aabae,
- 0x407b2bc3,
- 0x407babd5,
- 0x407c2c06,
- 0x407cac0f,
- 0x407d23f5,
- 0x407d9e61,
- 0x407e2b3e,
- 0x407ea01a,
- 0x407f1c71,
- 0x407f9a31,
- 0x40801e38,
- 0x40809c99,
- 0x40811edd,
- 0x40819e12,
- 0x40822927,
- 0x40829a17,
- 0x40831ff5,
- 0x4083a2b7,
- 0x40841cad,
- 0x4084a052,
- 0x408520d7,
- 0x4085a1ed,
- 0x40862149,
- 0x40869e7b,
- 0x4087296d,
- 0x4087a21e,
- 0x40881a78,
- 0x4088a3a5,
- 0x40891ac7,
- 0x40899a54,
- 0x408a265c,
- 0x408a9862,
- 0x408b2bea,
- 0x408ba9bd,
- 0x408c20e7,
- 0x408c987e,
- 0x41f4252e,
- 0x41f925c0,
- 0x41fe24b3,
- 0x41fea6a8,
- 0x41ff2799,
- 0x42032547,
- 0x42082569,
- 0x4208a5a5,
- 0x42092497,
- 0x4209a5df,
- 0x420a24ee,
- 0x420aa4ce,
- 0x420b250e,
- 0x420ba587,
- 0x420c27b5,
- 0x420ca675,
- 0x420d268f,
- 0x420da6c6,
- 0x421226e0,
- 0x4217277c,
- 0x4217a722,
- 0x421c2744,
- 0x421f26ff,
- 0x422127cc,
- 0x4226275f,
- 0x422b289b,
- 0x422ba849,
- 0x422c2883,
- 0x422ca808,
- 0x422d27e7,
- 0x422da868,
- 0x422e282e,
- 0x422ea954,
- 0x4432072b,
- 0x4432873a,
- 0x44330746,
- 0x44338754,
- 0x44340767,
- 0x44348778,
- 0x4435077f,
- 0x44358789,
- 0x4436079c,
- 0x443687b2,
- 0x443707c4,
- 0x443787d1,
- 0x443807e0,
- 0x443887e8,
- 0x44390800,
- 0x4439880e,
- 0x443a0821,
- 0x48321283,
- 0x48329295,
- 0x483312ab,
- 0x483392c4,
- 0x4c3212e9,
- 0x4c3292f9,
- 0x4c33130c,
- 0x4c33932c,
- 0x4c3400ac,
- 0x4c3480ea,
- 0x4c351338,
- 0x4c359346,
- 0x4c361362,
- 0x4c369375,
- 0x4c371384,
- 0x4c379392,
- 0x4c3813a7,
- 0x4c3893b3,
- 0x4c3913d3,
- 0x4c3993fd,
- 0x4c3a1416,
- 0x4c3a942f,
- 0x4c3b05fb,
- 0x4c3b9448,
- 0x4c3c145a,
- 0x4c3c9469,
- 0x4c3d1482,
- 0x4c3d8c45,
- 0x4c3e14db,
- 0x4c3e9491,
- 0x4c3f14fd,
- 0x4c3f9259,
- 0x4c4014a7,
- 0x4c4092d5,
- 0x4c4114cb,
- 0x50322e48,
- 0x5032ae57,
- 0x50332e62,
- 0x5033ae72,
- 0x50342e8b,
- 0x5034aea5,
- 0x50352eb3,
- 0x5035aec9,
- 0x50362edb,
- 0x5036aef1,
- 0x50372f0a,
- 0x5037af1d,
- 0x50382f35,
- 0x5038af46,
- 0x50392f5b,
- 0x5039af6f,
- 0x503a2f8f,
- 0x503aafa5,
- 0x503b2fbd,
- 0x503bafcf,
- 0x503c2feb,
- 0x503cb002,
- 0x503d301b,
- 0x503db031,
- 0x503e303e,
- 0x503eb054,
- 0x503f3066,
- 0x503f8382,
- 0x50403079,
- 0x5040b089,
- 0x504130a3,
- 0x5041b0b2,
- 0x504230cc,
- 0x5042b0e9,
- 0x504330f9,
- 0x5043b109,
- 0x50443118,
- 0x5044843f,
- 0x5045312c,
- 0x5045b14a,
- 0x5046315d,
- 0x5046b173,
- 0x50473185,
- 0x5047b19a,
- 0x504831c0,
- 0x5048b1ce,
- 0x504931e1,
- 0x5049b1f6,
- 0x504a320c,
- 0x504ab21c,
- 0x504b323c,
- 0x504bb24f,
- 0x504c3272,
- 0x504cb2a0,
- 0x504d32b2,
- 0x504db2cf,
- 0x504e32ea,
- 0x504eb306,
- 0x504f3318,
- 0x504fb32f,
- 0x5050333e,
- 0x505086ef,
- 0x50513351,
- 0x58320f2b,
- 0x68320eed,
- 0x68328c6a,
- 0x68330c7d,
- 0x68338efb,
- 0x68340f0b,
- 0x683480ea,
- 0x6c320ec9,
- 0x6c328c34,
- 0x6c330ed4,
- 0x74320a19,
- 0x743280ac,
- 0x74330c45,
- 0x7832097e,
- 0x78328993,
- 0x7833099f,
- 0x78338083,
- 0x783409ae,
- 0x783489c3,
- 0x783509e2,
- 0x78358a04,
- 0x78360a19,
- 0x78368a2f,
- 0x78370a3f,
- 0x78378a60,
- 0x78380a73,
- 0x78388a85,
- 0x78390a92,
- 0x78398ab1,
- 0x783a0ac6,
- 0x783a8ad4,
- 0x783b0ade,
- 0x783b8af2,
- 0x783c0b09,
- 0x783c8b1e,
- 0x783d0b35,
- 0x783d8b4a,
- 0x783e0aa0,
- 0x783e8a52,
- 0x7c321185,
- };
-
- const size_t kOpenSSLReasonValuesLen = sizeof(kOpenSSLReasonValues) / sizeof(kOpenSSLReasonValues[0]);
-
- const char kOpenSSLReasonStringData[] =
- "ASN1_LENGTH_MISMATCH\\0"
- "AUX_ERROR\\0"
- "BAD_GET_ASN1_OBJECT_CALL\\0"
- "BAD_OBJECT_HEADER\\0"
- "BMPSTRING_IS_WRONG_LENGTH\\0"
- "BN_LIB\\0"
- "BOOLEAN_IS_WRONG_LENGTH\\0"
- "BUFFER_TOO_SMALL\\0"
- "CONTEXT_NOT_INITIALISED\\0"
- "DECODE_ERROR\\0"
- "DEPTH_EXCEEDED\\0"
- "DIGEST_AND_KEY_TYPE_NOT_SUPPORTED\\0"
- "ENCODE_ERROR\\0"
- "ERROR_GETTING_TIME\\0"
- "EXPECTING_AN_ASN1_SEQUENCE\\0"
- "EXPECTING_AN_INTEGER\\0"
- "EXPECTING_AN_OBJECT\\0"
- "EXPECTING_A_BOOLEAN\\0"
- "EXPECTING_A_TIME\\0"
- "EXPLICIT_LENGTH_MISMATCH\\0"
- "EXPLICIT_TAG_NOT_CONSTRUCTED\\0"
- "FIELD_MISSING\\0"
- "FIRST_NUM_TOO_LARGE\\0"
- "HEADER_TOO_LONG\\0"
- "ILLEGAL_BITSTRING_FORMAT\\0"
- "ILLEGAL_BOOLEAN\\0"
- "ILLEGAL_CHARACTERS\\0"
- "ILLEGAL_FORMAT\\0"
- "ILLEGAL_HEX\\0"
- "ILLEGAL_IMPLICIT_TAG\\0"
- "ILLEGAL_INTEGER\\0"
- "ILLEGAL_NESTED_TAGGING\\0"
- "ILLEGAL_NULL\\0"
- "ILLEGAL_NULL_VALUE\\0"
- "ILLEGAL_OBJECT\\0"
- "ILLEGAL_OPTIONAL_ANY\\0"
- "ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE\\0"
- "ILLEGAL_TAGGED_ANY\\0"
- "ILLEGAL_TIME_VALUE\\0"
- "INTEGER_NOT_ASCII_FORMAT\\0"
- "INTEGER_TOO_LARGE_FOR_LONG\\0"
- "INVALID_BIT_STRING_BITS_LEFT\\0"
- "INVALID_BMPSTRING_LENGTH\\0"
- "INVALID_DIGIT\\0"
- "INVALID_MODIFIER\\0"
- "INVALID_NUMBER\\0"
- "INVALID_OBJECT_ENCODING\\0"
- "INVALID_SEPARATOR\\0"
- "INVALID_TIME_FORMAT\\0"
- "INVALID_UNIVERSALSTRING_LENGTH\\0"
- "INVALID_UTF8STRING\\0"
- "LIST_ERROR\\0"
- "MISSING_ASN1_EOS\\0"
- "MISSING_EOC\\0"
- "MISSING_SECOND_NUMBER\\0"
- "MISSING_VALUE\\0"
- "MSTRING_NOT_UNIVERSAL\\0"
- "MSTRING_WRONG_TAG\\0"
- "NESTED_ASN1_ERROR\\0"
- "NESTED_ASN1_STRING\\0"
- "NON_HEX_CHARACTERS\\0"
- "NOT_ASCII_FORMAT\\0"
- "NOT_ENOUGH_DATA\\0"
- "NO_MATCHING_CHOICE_TYPE\\0"
- "NULL_IS_WRONG_LENGTH\\0"
- "OBJECT_NOT_ASCII_FORMAT\\0"
- "ODD_NUMBER_OF_CHARS\\0"
- "SECOND_NUMBER_TOO_LARGE\\0"
- "SEQUENCE_LENGTH_MISMATCH\\0"
- "SEQUENCE_NOT_CONSTRUCTED\\0"
- "SEQUENCE_OR_SET_NEEDS_CONFIG\\0"
- "SHORT_LINE\\0"
- "STREAMING_NOT_SUPPORTED\\0"
- "STRING_TOO_LONG\\0"
- "STRING_TOO_SHORT\\0"
- "TAG_VALUE_TOO_HIGH\\0"
- "TIME_NOT_ASCII_FORMAT\\0"
- "TOO_LONG\\0"
- "TYPE_NOT_CONSTRUCTED\\0"
- "TYPE_NOT_PRIMITIVE\\0"
- "UNEXPECTED_EOC\\0"
- "UNIVERSALSTRING_IS_WRONG_LENGTH\\0"
- "UNKNOWN_FORMAT\\0"
- "UNKNOWN_MESSAGE_DIGEST_ALGORITHM\\0"
- "UNKNOWN_SIGNATURE_ALGORITHM\\0"
- "UNKNOWN_TAG\\0"
- "UNSUPPORTED_ANY_DEFINED_BY_TYPE\\0"
- "UNSUPPORTED_PUBLIC_KEY_TYPE\\0"
- "UNSUPPORTED_TYPE\\0"
- "WRONG_PUBLIC_KEY_TYPE\\0"
- "WRONG_TAG\\0"
- "WRONG_TYPE\\0"
- "BAD_FOPEN_MODE\\0"
- "BROKEN_PIPE\\0"
- "CONNECT_ERROR\\0"
- "ERROR_SETTING_NBIO\\0"
- "INVALID_ARGUMENT\\0"
- "IN_USE\\0"
- "KEEPALIVE\\0"
- "NBIO_CONNECT_ERROR\\0"
- "NO_HOSTNAME_SPECIFIED\\0"
- "NO_PORT_SPECIFIED\\0"
- "NO_SUCH_FILE\\0"
- "NULL_PARAMETER\\0"
- "SYS_LIB\\0"
- "UNABLE_TO_CREATE_SOCKET\\0"
- "UNINITIALIZED\\0"
- "UNSUPPORTED_METHOD\\0"
- "WRITE_TO_READ_ONLY_BIO\\0"
- "ARG2_LT_ARG3\\0"
- "BAD_ENCODING\\0"
- "BAD_RECIPROCAL\\0"
- "BIGNUM_TOO_LONG\\0"
- "BITS_TOO_SMALL\\0"
- "CALLED_WITH_EVEN_MODULUS\\0"
- "DIV_BY_ZERO\\0"
- "EXPAND_ON_STATIC_BIGNUM_DATA\\0"
- "INPUT_NOT_REDUCED\\0"
- "INVALID_INPUT\\0"
- "INVALID_RANGE\\0"
- "NEGATIVE_NUMBER\\0"
- "NOT_A_SQUARE\\0"
- "NOT_INITIALIZED\\0"
- "NO_INVERSE\\0"
- "PRIVATE_KEY_TOO_LARGE\\0"
- "P_IS_NOT_PRIME\\0"
- "TOO_MANY_ITERATIONS\\0"
- "TOO_MANY_TEMPORARY_VARIABLES\\0"
- "AES_KEY_SETUP_FAILED\\0"
- "BAD_DECRYPT\\0"
- "BAD_KEY_LENGTH\\0"
- "CTRL_NOT_IMPLEMENTED\\0"
- "CTRL_OPERATION_NOT_IMPLEMENTED\\0"
- "DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH\\0"
- "INITIALIZATION_ERROR\\0"
- "INPUT_NOT_INITIALIZED\\0"
- "INVALID_AD_SIZE\\0"
- "INVALID_KEY_LENGTH\\0"
- "INVALID_NONCE\\0"
- "INVALID_NONCE_SIZE\\0"
- "INVALID_OPERATION\\0"
- "IV_TOO_LARGE\\0"
- "NO_CIPHER_SET\\0"
- "NO_DIRECTION_SET\\0"
- "OUTPUT_ALIASES_INPUT\\0"
- "TAG_TOO_LARGE\\0"
- "TOO_LARGE\\0"
- "UNSUPPORTED_AD_SIZE\\0"
- "UNSUPPORTED_INPUT_SIZE\\0"
- "UNSUPPORTED_KEY_SIZE\\0"
- "UNSUPPORTED_NONCE_SIZE\\0"
- "UNSUPPORTED_TAG_SIZE\\0"
- "WRONG_FINAL_BLOCK_LENGTH\\0"
- "LIST_CANNOT_BE_NULL\\0"
- "MISSING_CLOSE_SQUARE_BRACKET\\0"
- "MISSING_EQUAL_SIGN\\0"
- "NO_CLOSE_BRACE\\0"
- "UNABLE_TO_CREATE_NEW_SECTION\\0"
- "VARIABLE_EXPANSION_TOO_LONG\\0"
- "VARIABLE_HAS_NO_VALUE\\0"
- "BAD_GENERATOR\\0"
- "INVALID_PUBKEY\\0"
- "MODULUS_TOO_LARGE\\0"
- "NO_PRIVATE_VALUE\\0"
- "UNKNOWN_HASH\\0"
- "BAD_Q_VALUE\\0"
- "BAD_VERSION\\0"
- "MISSING_PARAMETERS\\0"
- "NEED_NEW_SETUP_VALUES\\0"
- "BIGNUM_OUT_OF_RANGE\\0"
- "COORDINATES_OUT_OF_RANGE\\0"
- "D2I_ECPKPARAMETERS_FAILURE\\0"
- "EC_GROUP_NEW_BY_NAME_FAILURE\\0"
- "GROUP2PKPARAMETERS_FAILURE\\0"
- "GROUP_MISMATCH\\0"
- "I2D_ECPKPARAMETERS_FAILURE\\0"
- "INCOMPATIBLE_OBJECTS\\0"
- "INVALID_COFACTOR\\0"
- "INVALID_COMPRESSED_POINT\\0"
- "INVALID_COMPRESSION_BIT\\0"
- "INVALID_ENCODING\\0"
- "INVALID_FIELD\\0"
- "INVALID_FORM\\0"
- "INVALID_GROUP_ORDER\\0"
- "INVALID_PRIVATE_KEY\\0"
- "MISSING_PRIVATE_KEY\\0"
- "NON_NAMED_CURVE\\0"
- "PKPARAMETERS2GROUP_FAILURE\\0"
- "POINT_AT_INFINITY\\0"
- "POINT_IS_NOT_ON_CURVE\\0"
- "PUBLIC_KEY_VALIDATION_FAILED\\0"
- "SLOT_FULL\\0"
- "UNDEFINED_GENERATOR\\0"
- "UNKNOWN_GROUP\\0"
- "UNKNOWN_ORDER\\0"
- "WRONG_CURVE_PARAMETERS\\0"
- "WRONG_ORDER\\0"
- "KDF_FAILED\\0"
- "POINT_ARITHMETIC_FAILURE\\0"
- "BAD_SIGNATURE\\0"
- "NOT_IMPLEMENTED\\0"
- "RANDOM_NUMBER_GENERATION_FAILED\\0"
- "OPERATION_NOT_SUPPORTED\\0"
- "COMMAND_NOT_SUPPORTED\\0"
- "DIFFERENT_KEY_TYPES\\0"
- "DIFFERENT_PARAMETERS\\0"
- "EXPECTING_AN_EC_KEY_KEY\\0"
- "EXPECTING_AN_RSA_KEY\\0"
- "EXPECTING_A_DSA_KEY\\0"
- "ILLEGAL_OR_UNSUPPORTED_PADDING_MODE\\0"
- "INVALID_DIGEST_LENGTH\\0"
- "INVALID_DIGEST_TYPE\\0"
- "INVALID_KEYBITS\\0"
- "INVALID_MGF1_MD\\0"
- "INVALID_PADDING_MODE\\0"
- "INVALID_PARAMETERS\\0"
- "INVALID_PSS_SALTLEN\\0"
- "INVALID_SIGNATURE\\0"
- "KEYS_NOT_SET\\0"
- "MEMORY_LIMIT_EXCEEDED\\0"
- "NOT_A_PRIVATE_KEY\\0"
- "NO_DEFAULT_DIGEST\\0"
- "NO_KEY_SET\\0"
- "NO_MDC2_SUPPORT\\0"
- "NO_NID_FOR_CURVE\\0"
- "NO_OPERATION_SET\\0"
- "NO_PARAMETERS_SET\\0"
- "OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\\0"
- "OPERATON_NOT_INITIALIZED\\0"
- "UNKNOWN_PUBLIC_KEY_TYPE\\0"
- "UNSUPPORTED_ALGORITHM\\0"
- "OUTPUT_TOO_LARGE\\0"
- "UNKNOWN_NID\\0"
- "BAD_BASE64_DECODE\\0"
- "BAD_END_LINE\\0"
- "BAD_IV_CHARS\\0"
- "BAD_PASSWORD_READ\\0"
- "CIPHER_IS_NULL\\0"
- "ERROR_CONVERTING_PRIVATE_KEY\\0"
- "NOT_DEK_INFO\\0"
- "NOT_ENCRYPTED\\0"
- "NOT_PROC_TYPE\\0"
- "NO_START_LINE\\0"
- "READ_KEY\\0"
- "SHORT_HEADER\\0"
- "UNSUPPORTED_CIPHER\\0"
- "UNSUPPORTED_ENCRYPTION\\0"
- "BAD_PKCS7_VERSION\\0"
- "NOT_PKCS7_SIGNED_DATA\\0"
- "NO_CERTIFICATES_INCLUDED\\0"
- "NO_CRLS_INCLUDED\\0"
- "BAD_ITERATION_COUNT\\0"
- "BAD_PKCS12_DATA\\0"
- "BAD_PKCS12_VERSION\\0"
- "CIPHER_HAS_NO_OBJECT_IDENTIFIER\\0"
- "CRYPT_ERROR\\0"
- "ENCRYPT_ERROR\\0"
- "ERROR_SETTING_CIPHER_PARAMS\\0"
- "INCORRECT_PASSWORD\\0"
- "KEYGEN_FAILURE\\0"
- "KEY_GEN_ERROR\\0"
- "METHOD_NOT_SUPPORTED\\0"
- "MISSING_MAC\\0"
- "MULTIPLE_PRIVATE_KEYS_IN_PKCS12\\0"
- "PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED\\0"
- "PKCS12_TOO_DEEPLY_NESTED\\0"
- "PRIVATE_KEY_DECODE_ERROR\\0"
- "PRIVATE_KEY_ENCODE_ERROR\\0"
- "UNKNOWN_ALGORITHM\\0"
- "UNKNOWN_CIPHER\\0"
- "UNKNOWN_CIPHER_ALGORITHM\\0"
- "UNKNOWN_DIGEST\\0"
- "UNSUPPORTED_KEYLENGTH\\0"
- "UNSUPPORTED_KEY_DERIVATION_FUNCTION\\0"
- "UNSUPPORTED_PRF\\0"
- "UNSUPPORTED_PRIVATE_KEY_ALGORITHM\\0"
- "UNSUPPORTED_SALT_TYPE\\0"
- "BAD_E_VALUE\\0"
- "BAD_FIXED_HEADER_DECRYPT\\0"
- "BAD_PAD_BYTE_COUNT\\0"
- "BAD_RSA_PARAMETERS\\0"
- "BLOCK_TYPE_IS_NOT_01\\0"
- "BN_NOT_INITIALIZED\\0"
- "CANNOT_RECOVER_MULTI_PRIME_KEY\\0"
- "CRT_PARAMS_ALREADY_GIVEN\\0"
- "CRT_VALUES_INCORRECT\\0"
- "DATA_LEN_NOT_EQUAL_TO_MOD_LEN\\0"
- "DATA_TOO_LARGE\\0"
- "DATA_TOO_LARGE_FOR_KEY_SIZE\\0"
- "DATA_TOO_LARGE_FOR_MODULUS\\0"
- "DATA_TOO_SMALL\\0"
- "DATA_TOO_SMALL_FOR_KEY_SIZE\\0"
- "DIGEST_TOO_BIG_FOR_RSA_KEY\\0"
- "D_E_NOT_CONGRUENT_TO_1\\0"
- "EMPTY_PUBLIC_KEY\\0"
- "FIRST_OCTET_INVALID\\0"
- "INCONSISTENT_SET_OF_CRT_VALUES\\0"
- "INTERNAL_ERROR\\0"
- "INVALID_MESSAGE_LENGTH\\0"
- "KEY_SIZE_TOO_SMALL\\0"
- "LAST_OCTET_INVALID\\0"
- "MUST_HAVE_AT_LEAST_TWO_PRIMES\\0"
- "NO_PUBLIC_EXPONENT\\0"
- "NULL_BEFORE_BLOCK_MISSING\\0"
- "N_NOT_EQUAL_P_Q\\0"
- "OAEP_DECODING_ERROR\\0"
- "ONLY_ONE_OF_P_Q_GIVEN\\0"
- "OUTPUT_BUFFER_TOO_SMALL\\0"
- "PADDING_CHECK_FAILED\\0"
- "PKCS_DECODING_ERROR\\0"
- "SLEN_CHECK_FAILED\\0"
- "SLEN_RECOVERY_FAILED\\0"
- "UNKNOWN_ALGORITHM_TYPE\\0"
- "UNKNOWN_PADDING_TYPE\\0"
- "VALUE_MISSING\\0"
- "WRONG_SIGNATURE_LENGTH\\0"
- "ALPN_MISMATCH_ON_EARLY_DATA\\0"
- "APPLICATION_DATA_INSTEAD_OF_HANDSHAKE\\0"
- "APP_DATA_IN_HANDSHAKE\\0"
- "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\\0"
- "BAD_ALERT\\0"
- "BAD_CHANGE_CIPHER_SPEC\\0"
- "BAD_DATA_RETURNED_BY_CALLBACK\\0"
- "BAD_DH_P_LENGTH\\0"
- "BAD_DIGEST_LENGTH\\0"
- "BAD_ECC_CERT\\0"
- "BAD_ECPOINT\\0"
- "BAD_HANDSHAKE_RECORD\\0"
- "BAD_HELLO_REQUEST\\0"
- "BAD_LENGTH\\0"
- "BAD_PACKET_LENGTH\\0"
- "BAD_RSA_ENCRYPT\\0"
- "BAD_SRTP_MKI_VALUE\\0"
- "BAD_SRTP_PROTECTION_PROFILE_LIST\\0"
- "BAD_SSL_FILETYPE\\0"
- "BAD_WRITE_RETRY\\0"
- "BIO_NOT_SET\\0"
- "BLOCK_CIPHER_PAD_IS_WRONG\\0"
- "BUFFERED_MESSAGES_ON_CIPHER_CHANGE\\0"
- "CANNOT_HAVE_BOTH_PRIVKEY_AND_METHOD\\0"
- "CANNOT_PARSE_LEAF_CERT\\0"
- "CA_DN_LENGTH_MISMATCH\\0"
- "CA_DN_TOO_LONG\\0"
- "CCS_RECEIVED_EARLY\\0"
- "CERTIFICATE_AND_PRIVATE_KEY_MISMATCH\\0"
- "CERTIFICATE_VERIFY_FAILED\\0"
- "CERT_CB_ERROR\\0"
- "CERT_LENGTH_MISMATCH\\0"
- "CHANNEL_ID_NOT_P256\\0"
- "CHANNEL_ID_SIGNATURE_INVALID\\0"
- "CIPHER_OR_HASH_UNAVAILABLE\\0"
- "CLIENTHELLO_PARSE_FAILED\\0"
- "CLIENTHELLO_TLSEXT\\0"
- "CONNECTION_REJECTED\\0"
- "CONNECTION_TYPE_NOT_SET\\0"
- "CUSTOM_EXTENSION_ERROR\\0"
- "DATA_LENGTH_TOO_LONG\\0"
- "DECRYPTION_FAILED\\0"
- "DECRYPTION_FAILED_OR_BAD_RECORD_MAC\\0"
- "DH_PUBLIC_VALUE_LENGTH_IS_WRONG\\0"
- "DH_P_TOO_LONG\\0"
- "DIGEST_CHECK_FAILED\\0"
- "DOWNGRADE_DETECTED\\0"
- "DTLS_MESSAGE_TOO_BIG\\0"
- "DUPLICATE_EXTENSION\\0"
- "DUPLICATE_KEY_SHARE\\0"
- "ECC_CERT_NOT_FOR_SIGNING\\0"
- "EMS_STATE_INCONSISTENT\\0"
- "ENCRYPTED_LENGTH_TOO_LONG\\0"
- "ERROR_ADDING_EXTENSION\\0"
- "ERROR_IN_RECEIVED_CIPHER_LIST\\0"
- "ERROR_PARSING_EXTENSION\\0"
- "EXCESSIVE_MESSAGE_SIZE\\0"
- "EXTRA_DATA_IN_MESSAGE\\0"
- "FRAGMENT_MISMATCH\\0"
- "GOT_NEXT_PROTO_WITHOUT_EXTENSION\\0"
- "HANDSHAKE_FAILURE_ON_CLIENT_HELLO\\0"
- "HTTPS_PROXY_REQUEST\\0"
- "HTTP_REQUEST\\0"
- "INAPPROPRIATE_FALLBACK\\0"
- "INVALID_ALPN_PROTOCOL\\0"
- "INVALID_COMMAND\\0"
- "INVALID_COMPRESSION_LIST\\0"
- "INVALID_MESSAGE\\0"
- "INVALID_OUTER_RECORD_TYPE\\0"
- "INVALID_SCT_LIST\\0"
- "INVALID_SSL_SESSION\\0"
- "INVALID_TICKET_KEYS_LENGTH\\0"
- "LENGTH_MISMATCH\\0"
- "MISSING_EXTENSION\\0"
- "MISSING_KEY_SHARE\\0"
- "MISSING_RSA_CERTIFICATE\\0"
- "MISSING_TMP_DH_KEY\\0"
- "MISSING_TMP_ECDH_KEY\\0"
- "MIXED_SPECIAL_OPERATOR_WITH_GROUPS\\0"
- "MTU_TOO_SMALL\\0"
- "NEGOTIATED_BOTH_NPN_AND_ALPN\\0"
- "NESTED_GROUP\\0"
- "NO_CERTIFICATES_RETURNED\\0"
- "NO_CERTIFICATE_ASSIGNED\\0"
- "NO_CERTIFICATE_SET\\0"
- "NO_CIPHERS_AVAILABLE\\0"
- "NO_CIPHERS_PASSED\\0"
- "NO_CIPHERS_SPECIFIED\\0"
- "NO_CIPHER_MATCH\\0"
- "NO_COMMON_SIGNATURE_ALGORITHMS\\0"
- "NO_COMPRESSION_SPECIFIED\\0"
- "NO_GROUPS_SPECIFIED\\0"
- "NO_METHOD_SPECIFIED\\0"
- "NO_P256_SUPPORT\\0"
- "NO_PRIVATE_KEY_ASSIGNED\\0"
- "NO_RENEGOTIATION\\0"
- "NO_REQUIRED_DIGEST\\0"
- "NO_SHARED_CIPHER\\0"
- "NO_SHARED_GROUP\\0"
- "NO_SUPPORTED_VERSIONS_ENABLED\\0"
- "NULL_SSL_CTX\\0"
- "NULL_SSL_METHOD_PASSED\\0"
- "OLD_SESSION_CIPHER_NOT_RETURNED\\0"
- "OLD_SESSION_PRF_HASH_MISMATCH\\0"
- "OLD_SESSION_VERSION_NOT_RETURNED\\0"
- "PARSE_TLSEXT\\0"
- "PATH_TOO_LONG\\0"
- "PEER_DID_NOT_RETURN_A_CERTIFICATE\\0"
- "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\\0"
- "PRE_SHARED_KEY_MUST_BE_LAST\\0"
- "PROTOCOL_IS_SHUTDOWN\\0"
- "PSK_IDENTITY_BINDER_COUNT_MISMATCH\\0"
- "PSK_IDENTITY_NOT_FOUND\\0"
- "PSK_NO_CLIENT_CB\\0"
- "PSK_NO_SERVER_CB\\0"
- "READ_TIMEOUT_EXPIRED\\0"
- "RECORD_LENGTH_MISMATCH\\0"
- "RECORD_TOO_LARGE\\0"
- "RENEGOTIATION_EMS_MISMATCH\\0"
- "RENEGOTIATION_ENCODING_ERR\\0"
- "RENEGOTIATION_MISMATCH\\0"
- "REQUIRED_CIPHER_MISSING\\0"
- "RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION\\0"
- "RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION\\0"
- "SCSV_RECEIVED_WHEN_RENEGOTIATING\\0"
- "SERVERHELLO_TLSEXT\\0"
- "SERVER_CERT_CHANGED\\0"
- "SESSION_ID_CONTEXT_UNINITIALIZED\\0"
- "SESSION_MAY_NOT_BE_CREATED\\0"
- "SHUTDOWN_WHILE_IN_INIT\\0"
- "SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER\\0"
- "SRTP_COULD_NOT_ALLOCATE_PROFILES\\0"
- "SRTP_UNKNOWN_PROTECTION_PROFILE\\0"
- "SSL3_EXT_INVALID_SERVERNAME\\0"
- "SSLV3_ALERT_BAD_CERTIFICATE\\0"
- "SSLV3_ALERT_BAD_RECORD_MAC\\0"
- "SSLV3_ALERT_CERTIFICATE_EXPIRED\\0"
- "SSLV3_ALERT_CERTIFICATE_REVOKED\\0"
- "SSLV3_ALERT_CERTIFICATE_UNKNOWN\\0"
- "SSLV3_ALERT_CLOSE_NOTIFY\\0"
- "SSLV3_ALERT_DECOMPRESSION_FAILURE\\0"
- "SSLV3_ALERT_HANDSHAKE_FAILURE\\0"
- "SSLV3_ALERT_ILLEGAL_PARAMETER\\0"
- "SSLV3_ALERT_NO_CERTIFICATE\\0"
- "SSLV3_ALERT_UNEXPECTED_MESSAGE\\0"
- "SSLV3_ALERT_UNSUPPORTED_CERTIFICATE\\0"
- "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\\0"
- "SSL_HANDSHAKE_FAILURE\\0"
- "SSL_SESSION_ID_CONTEXT_TOO_LONG\\0"
- "TICKET_ENCRYPTION_FAILED\\0"
- "TLSV1_ALERT_ACCESS_DENIED\\0"
- "TLSV1_ALERT_DECODE_ERROR\\0"
- "TLSV1_ALERT_DECRYPTION_FAILED\\0"
- "TLSV1_ALERT_DECRYPT_ERROR\\0"
- "TLSV1_ALERT_EXPORT_RESTRICTION\\0"
- "TLSV1_ALERT_INAPPROPRIATE_FALLBACK\\0"
- "TLSV1_ALERT_INSUFFICIENT_SECURITY\\0"
- "TLSV1_ALERT_INTERNAL_ERROR\\0"
- "TLSV1_ALERT_NO_RENEGOTIATION\\0"
- "TLSV1_ALERT_PROTOCOL_VERSION\\0"
- "TLSV1_ALERT_RECORD_OVERFLOW\\0"
- "TLSV1_ALERT_UNKNOWN_CA\\0"
- "TLSV1_ALERT_USER_CANCELLED\\0"
- "TLSV1_BAD_CERTIFICATE_HASH_VALUE\\0"
- "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\\0"
- "TLSV1_CERTIFICATE_REQUIRED\\0"
- "TLSV1_CERTIFICATE_UNOBTAINABLE\\0"
- "TLSV1_UNKNOWN_PSK_IDENTITY\\0"
- "TLSV1_UNRECOGNIZED_NAME\\0"
- "TLSV1_UNSUPPORTED_EXTENSION\\0"
- "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\\0"
- "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\\0"
- "TOO_MANY_EMPTY_FRAGMENTS\\0"
- "TOO_MANY_KEY_UPDATES\\0"
- "TOO_MANY_WARNING_ALERTS\\0"
- "TOO_MUCH_READ_EARLY_DATA\\0"
- "TOO_MUCH_SKIPPED_EARLY_DATA\\0"
- "UNABLE_TO_FIND_ECDH_PARAMETERS\\0"
- "UNEXPECTED_EXTENSION\\0"
- "UNEXPECTED_EXTENSION_ON_EARLY_DATA\\0"
- "UNEXPECTED_MESSAGE\\0"
- "UNEXPECTED_OPERATOR_IN_GROUP\\0"
- "UNEXPECTED_RECORD\\0"
- "UNKNOWN_ALERT_TYPE\\0"
- "UNKNOWN_CERTIFICATE_TYPE\\0"
- "UNKNOWN_CIPHER_RETURNED\\0"
- "UNKNOWN_CIPHER_TYPE\\0"
- "UNKNOWN_KEY_EXCHANGE_TYPE\\0"
- "UNKNOWN_PROTOCOL\\0"
- "UNKNOWN_SSL_VERSION\\0"
- "UNKNOWN_STATE\\0"
- "UNSAFE_LEGACY_RENEGOTIATION_DISABLED\\0"
- "UNSUPPORTED_COMPRESSION_ALGORITHM\\0"
- "UNSUPPORTED_ELLIPTIC_CURVE\\0"
- "UNSUPPORTED_PROTOCOL\\0"
- "UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY\\0"
- "WRONG_CERTIFICATE_TYPE\\0"
- "WRONG_CIPHER_RETURNED\\0"
- "WRONG_CURVE\\0"
- "WRONG_MESSAGE_TYPE\\0"
- "WRONG_SIGNATURE_TYPE\\0"
- "WRONG_SSL_VERSION\\0"
- "WRONG_VERSION_NUMBER\\0"
- "WRONG_VERSION_ON_EARLY_DATA\\0"
- "X509_LIB\\0"
- "X509_VERIFICATION_SETUP_PROBLEMS\\0"
- "AKID_MISMATCH\\0"
- "BAD_X509_FILETYPE\\0"
- "BASE64_DECODE_ERROR\\0"
- "CANT_CHECK_DH_KEY\\0"
- "CERT_ALREADY_IN_HASH_TABLE\\0"
- "CRL_ALREADY_DELTA\\0"
- "CRL_VERIFY_FAILURE\\0"
- "IDP_MISMATCH\\0"
- "INVALID_DIRECTORY\\0"
- "INVALID_FIELD_NAME\\0"
- "INVALID_PARAMETER\\0"
- "INVALID_PSS_PARAMETERS\\0"
- "INVALID_TRUST\\0"
- "ISSUER_MISMATCH\\0"
- "KEY_TYPE_MISMATCH\\0"
- "KEY_VALUES_MISMATCH\\0"
- "LOADING_CERT_DIR\\0"
- "LOADING_DEFAULTS\\0"
- "NAME_TOO_LONG\\0"
- "NEWER_CRL_NOT_NEWER\\0"
- "NO_CERT_SET_FOR_US_TO_VERIFY\\0"
- "NO_CRL_NUMBER\\0"
- "PUBLIC_KEY_DECODE_ERROR\\0"
- "PUBLIC_KEY_ENCODE_ERROR\\0"
- "SHOULD_RETRY\\0"
- "UNKNOWN_KEY_TYPE\\0"
- "UNKNOWN_PURPOSE_ID\\0"
- "UNKNOWN_TRUST_ID\\0"
- "WRONG_LOOKUP_TYPE\\0"
- "BAD_IP_ADDRESS\\0"
- "BAD_OBJECT\\0"
- "BN_DEC2BN_ERROR\\0"
- "BN_TO_ASN1_INTEGER_ERROR\\0"
- "CANNOT_FIND_FREE_FUNCTION\\0"
- "DIRNAME_ERROR\\0"
- "DISTPOINT_ALREADY_SET\\0"
- "DUPLICATE_ZONE_ID\\0"
- "ERROR_CONVERTING_ZONE\\0"
- "ERROR_CREATING_EXTENSION\\0"
- "ERROR_IN_EXTENSION\\0"
- "EXPECTED_A_SECTION_NAME\\0"
- "EXTENSION_EXISTS\\0"
- "EXTENSION_NAME_ERROR\\0"
- "EXTENSION_NOT_FOUND\\0"
- "EXTENSION_SETTING_NOT_SUPPORTED\\0"
- "EXTENSION_VALUE_ERROR\\0"
- "ILLEGAL_EMPTY_EXTENSION\\0"
- "ILLEGAL_HEX_DIGIT\\0"
- "INCORRECT_POLICY_SYNTAX_TAG\\0"
- "INVALID_BOOLEAN_STRING\\0"
- "INVALID_EXTENSION_STRING\\0"
- "INVALID_MULTIPLE_RDNS\\0"
- "INVALID_NAME\\0"
- "INVALID_NULL_ARGUMENT\\0"
- "INVALID_NULL_NAME\\0"
- "INVALID_NULL_VALUE\\0"
- "INVALID_NUMBERS\\0"
- "INVALID_OBJECT_IDENTIFIER\\0"
- "INVALID_OPTION\\0"
- "INVALID_POLICY_IDENTIFIER\\0"
- "INVALID_PROXY_POLICY_SETTING\\0"
- "INVALID_PURPOSE\\0"
- "INVALID_SECTION\\0"
- "INVALID_SYNTAX\\0"
- "ISSUER_DECODE_ERROR\\0"
- "NEED_ORGANIZATION_AND_NUMBERS\\0"
- "NO_CONFIG_DATABASE\\0"
- "NO_ISSUER_CERTIFICATE\\0"
- "NO_ISSUER_DETAILS\\0"
- "NO_POLICY_IDENTIFIER\\0"
- "NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED\\0"
- "NO_PUBLIC_KEY\\0"
- "NO_SUBJECT_DETAILS\\0"
- "ODD_NUMBER_OF_DIGITS\\0"
- "OPERATION_NOT_DEFINED\\0"
- "OTHERNAME_ERROR\\0"
- "POLICY_LANGUAGE_ALREADY_DEFINED\\0"
- "POLICY_PATH_LENGTH\\0"
- "POLICY_PATH_LENGTH_ALREADY_DEFINED\\0"
- "POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY\\0"
- "SECTION_NOT_FOUND\\0"
- "UNABLE_TO_GET_ISSUER_DETAILS\\0"
- "UNABLE_TO_GET_ISSUER_KEYID\\0"
- "UNKNOWN_BIT_STRING_ARGUMENT\\0"
- "UNKNOWN_EXTENSION\\0"
- "UNKNOWN_EXTENSION_NAME\\0"
- "UNKNOWN_OPTION\\0"
- "UNSUPPORTED_OPTION\\0"
- "USER_TOO_LONG\\0"
- "";
- EOF
- END_OF_COMMAND
-end
diff --git a/src/objective-c/GRPCClient/private/version.h b/src/objective-c/GRPCClient/private/version.h
index 52fe0dd050..38862e102a 100644
--- a/src/objective-c/GRPCClient/private/version.h
+++ b/src/objective-c/GRPCClient/private/version.h
@@ -22,4 +22,4 @@
// instead. This file can be regenerated from the template by running
// `tools/buildgen/generate_projects.sh`.
-#define GRPC_OBJC_VERSION_STRING @"1.15.0-dev"
+#define GRPC_OBJC_VERSION_STRING @"1.16.0-dev"
diff --git a/src/objective-c/README.md b/src/objective-c/README.md
index 40aba0317b..32e3956a1e 100644
--- a/src/objective-c/README.md
+++ b/src/objective-c/README.md
@@ -220,3 +220,25 @@ Objective-C Protobuf runtime library.
[gRPC install script]:https://raw.githubusercontent.com/grpc/homebrew-grpc/master/scripts/install
[example Podfile]:https://github.com/grpc/grpc/blob/master/examples/objective-c/helloworld/Podfile
[example apps]: https://github.com/grpc/grpc/tree/master/examples/objective-c
+
+## Use gRPC with OpenSSL
+gRPC uses BoringSSL as its dependency, which is a fork of OpenSSL and export a number of symbols
+that are the same as OpenSSL. gRPC avoids conflicts of these symbols by renaming BoringSSL symbols.
+
+If you need gRPC to use OpenSSL instead of BoringSSL (e.g. for the benefit of reducing the binary
+size of your product), you need to make a local `gRPC-Core` podspec and tweak it accordingly:
+- Copy the version of `/gRPC-Core.podspec` you wish to use from Github into the repository of your
+ app;
+- In your `Podfile`, add the following line:
+```
+pod `gRPC-Core`, :podspec => "." # assuming gRPC-Core.podspec is in the same directory as your Podfile
+```
+- Remove [the
+ macro](https://github.com/grpc/grpc/blob/b24b212ee585d376c618235905757b2445ac6461/gRPC-Core.podspec#L186)
+ `GRPC_SHADOW_BORINGSSL_SYMBOLS` to disable symbol renaming;
+- Substitude the `BoringSSL-GRPC`
+ [dependency](https://github.com/grpc/grpc/blob/b24b212ee585d376c618235905757b2445ac6461/gRPC-Core.podspec#L184)
+ to whatever pod of OpenSSL your other libraries use.
+
+These steps should allow gRPC to use OpenSSL and drop BoringSSL dependency. If you see any issue,
+file an issue to us.
diff --git a/src/objective-c/examples/Sample/Podfile b/src/objective-c/examples/Sample/Podfile
index 9ea2f61927..bebd55bd62 100644
--- a/src/objective-c/examples/Sample/Podfile
+++ b/src/objective-c/examples/Sample/Podfile
@@ -19,7 +19,7 @@ target 'Sample' do
pod 'Protobuf', :path => "#{GRPC_LOCAL_SRC}/third_party/protobuf"
- pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c"
+ pod 'BoringSSL-GRPC', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c"
pod 'gRPC', :path => GRPC_LOCAL_SRC
pod 'gRPC-Core', :path => GRPC_LOCAL_SRC
diff --git a/src/objective-c/examples/SwiftSample/Podfile b/src/objective-c/examples/SwiftSample/Podfile
index a2c2b82cc9..8214371bc5 100644
--- a/src/objective-c/examples/SwiftSample/Podfile
+++ b/src/objective-c/examples/SwiftSample/Podfile
@@ -19,7 +19,7 @@ target 'SwiftSample' do
pod 'Protobuf', :path => "#{GRPC_LOCAL_SRC}/third_party/protobuf"
- pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c"
+ pod 'BoringSSL-GRPC', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c"
pod 'gRPC', :path => GRPC_LOCAL_SRC
pod 'gRPC-Core', :path => GRPC_LOCAL_SRC
diff --git a/src/objective-c/grpc_shadow_boringssl_symbol_list b/src/objective-c/grpc_shadow_boringssl_symbol_list
new file mode 100644
index 0000000000..33a6ed0e25
--- /dev/null
+++ b/src/objective-c/grpc_shadow_boringssl_symbol_list
@@ -0,0 +1,2974 @@
+# Automatically generated by tools/distrib/generate_grpc_shadow_boringssl_symbol_list.sh
+b29b21a81b32ec273f118f589f46d56ad3332420
+BIO_f_ssl
+BIO_set_ssl
+SSL_CTX_add_client_custom_ext
+SSL_CTX_add_server_custom_ext
+DTLSv1_get_timeout
+DTLSv1_handle_timeout
+DTLSv1_set_initial_timeout_duration
+SSL_CTX_set_srtp_profiles
+SSL_CTX_set_tlsext_use_srtp
+SSL_get_selected_srtp_profile
+SSL_get_srtp_profiles
+SSL_set_srtp_profiles
+SSL_set_tlsext_use_srtp
+DTLS_client_method
+DTLS_method
+DTLS_server_method
+DTLS_with_buffers_method
+DTLSv1_2_client_method
+DTLSv1_2_method
+DTLSv1_2_server_method
+DTLSv1_client_method
+DTLSv1_method
+DTLSv1_server_method
+SSL_SESSION_from_bytes
+SSL_SESSION_to_bytes
+SSL_SESSION_to_bytes_for_ticket
+i2d_SSL_SESSION
+SSL_CTX_set0_client_CAs
+SSL_CTX_set_cert_cb
+SSL_CTX_set_chain_and_key
+SSL_CTX_set_ocsp_response
+SSL_CTX_set_signed_cert_timestamp_list
+SSL_CTX_use_certificate_ASN1
+SSL_get0_peer_certificates
+SSL_get0_server_requested_CAs
+SSL_set0_client_CAs
+SSL_set_cert_cb
+SSL_set_chain_and_key
+SSL_set_ocsp_response
+SSL_set_signed_cert_timestamp_list
+SSL_use_certificate_ASN1
+SSL_CIPHER_description
+SSL_CIPHER_get_auth_nid
+SSL_CIPHER_get_bits
+SSL_CIPHER_get_cipher_nid
+SSL_CIPHER_get_digest_nid
+SSL_CIPHER_get_id
+SSL_CIPHER_get_kx_name
+SSL_CIPHER_get_kx_nid
+SSL_CIPHER_get_max_version
+SSL_CIPHER_get_min_version
+SSL_CIPHER_get_name
+SSL_CIPHER_get_prf_nid
+SSL_CIPHER_get_rfc_name
+SSL_CIPHER_get_version
+SSL_CIPHER_is_aead
+SSL_CIPHER_is_block_cipher
+SSL_CIPHER_standard_name
+SSL_COMP_add_compression_method
+SSL_COMP_free_compression_methods
+SSL_COMP_get0_name
+SSL_COMP_get_compression_methods
+SSL_COMP_get_id
+SSL_COMP_get_name
+SSL_get_cipher_by_value
+SSL_CTX_get_default_passwd_cb
+SSL_CTX_get_default_passwd_cb_userdata
+SSL_CTX_set_default_passwd_cb
+SSL_CTX_set_default_passwd_cb_userdata
+SSL_CTX_use_PrivateKey_file
+SSL_CTX_use_RSAPrivateKey_file
+SSL_CTX_use_certificate_chain_file
+SSL_CTX_use_certificate_file
+SSL_add_file_cert_subjects_to_stack
+SSL_load_client_CA_file
+SSL_use_PrivateKey_file
+SSL_use_RSAPrivateKey_file
+SSL_use_certificate_file
+SSL_get_curve_name
+ERR_load_SSL_strings
+OPENSSL_init_ssl
+SSL_CTX_check_private_key
+SSL_CTX_cipher_in_group
+SSL_CTX_clear_mode
+SSL_CTX_clear_options
+SSL_CTX_enable_ocsp_stapling
+SSL_CTX_enable_signed_cert_timestamps
+SSL_CTX_enable_tls_channel_id
+SSL_CTX_free
+SSL_CTX_get0_privatekey
+SSL_CTX_get_ciphers
+SSL_CTX_get_ex_data
+SSL_CTX_get_ex_new_index
+SSL_CTX_get_keylog_callback
+SSL_CTX_get_max_cert_list
+SSL_CTX_get_mode
+SSL_CTX_get_options
+SSL_CTX_get_quiet_shutdown
+SSL_CTX_get_read_ahead
+SSL_CTX_get_session_cache_mode
+SSL_CTX_get_tlsext_ticket_keys
+SSL_CTX_need_tmp_RSA
+SSL_CTX_new
+SSL_CTX_sess_accept
+SSL_CTX_sess_accept_good
+SSL_CTX_sess_accept_renegotiate
+SSL_CTX_sess_cache_full
+SSL_CTX_sess_cb_hits
+SSL_CTX_sess_connect
+SSL_CTX_sess_connect_good
+SSL_CTX_sess_connect_renegotiate
+SSL_CTX_sess_get_cache_size
+SSL_CTX_sess_hits
+SSL_CTX_sess_misses
+SSL_CTX_sess_number
+SSL_CTX_sess_set_cache_size
+SSL_CTX_sess_timeouts
+SSL_CTX_set0_buffer_pool
+SSL_CTX_set1_curves
+SSL_CTX_set1_curves_list
+SSL_CTX_set1_tls_channel_id
+SSL_CTX_set_allow_unknown_alpn_protos
+SSL_CTX_set_alpn_protos
+SSL_CTX_set_alpn_select_cb
+SSL_CTX_set_cipher_list
+SSL_CTX_set_current_time_cb
+SSL_CTX_set_custom_verify
+SSL_CTX_set_dos_protection_cb
+SSL_CTX_set_early_data_enabled
+SSL_CTX_set_ex_data
+SSL_CTX_set_false_start_allowed_without_alpn
+SSL_CTX_set_grease_enabled
+SSL_CTX_set_keylog_callback
+SSL_CTX_set_max_cert_list
+SSL_CTX_set_max_send_fragment
+SSL_CTX_set_mode
+SSL_CTX_set_msg_callback
+SSL_CTX_set_msg_callback_arg
+SSL_CTX_set_next_proto_select_cb
+SSL_CTX_set_next_protos_advertised_cb
+SSL_CTX_set_options
+SSL_CTX_set_psk_client_callback
+SSL_CTX_set_psk_server_callback
+SSL_CTX_set_quiet_shutdown
+SSL_CTX_set_read_ahead
+SSL_CTX_set_retain_only_sha256_of_client_certs
+SSL_CTX_set_select_certificate_cb
+SSL_CTX_set_session_cache_mode
+SSL_CTX_set_session_id_context
+SSL_CTX_set_strict_cipher_list
+SSL_CTX_set_ticket_aead_method
+SSL_CTX_set_tls13_variant
+SSL_CTX_set_tls_channel_id_enabled
+SSL_CTX_set_tlsext_servername_arg
+SSL_CTX_set_tlsext_servername_callback
+SSL_CTX_set_tlsext_ticket_key_cb
+SSL_CTX_set_tlsext_ticket_keys
+SSL_CTX_set_tmp_dh
+SSL_CTX_set_tmp_dh_callback
+SSL_CTX_set_tmp_ecdh
+SSL_CTX_set_tmp_rsa
+SSL_CTX_set_tmp_rsa_callback
+SSL_CTX_up_ref
+SSL_CTX_use_psk_identity_hint
+SSL_accept
+SSL_cache_hit
+SSL_certs_clear
+SSL_check_private_key
+SSL_clear
+SSL_clear_mode
+SSL_clear_options
+SSL_connect
+SSL_cutthrough_complete
+SSL_do_handshake
+SSL_dummy_pq_padding_used
+SSL_early_data_accepted
+SSL_enable_ocsp_stapling
+SSL_enable_signed_cert_timestamps
+SSL_enable_tls_channel_id
+SSL_free
+SSL_get0_alpn_selected
+SSL_get0_certificate_types
+SSL_get0_next_proto_negotiated
+SSL_get0_ocsp_response
+SSL_get0_session_id_context
+SSL_get0_signed_cert_timestamp_list
+SSL_get_SSL_CTX
+SSL_get_cipher_list
+SSL_get_ciphers
+SSL_get_client_random
+SSL_get_current_cipher
+SSL_get_current_compression
+SSL_get_current_expansion
+SSL_get_curve_id
+SSL_get_default_timeout
+SSL_get_error
+SSL_get_ex_data
+SSL_get_ex_new_index
+SSL_get_extms_support
+SSL_get_fd
+SSL_get_finished
+SSL_get_info_callback
+SSL_get_ivs
+SSL_get_max_cert_list
+SSL_get_mode
+SSL_get_negotiated_token_binding_param
+SSL_get_options
+SSL_get_peer_finished
+SSL_get_peer_quic_transport_params
+SSL_get_peer_signature_algorithm
+SSL_get_pending_cipher
+SSL_get_privatekey
+SSL_get_psk_identity
+SSL_get_psk_identity_hint
+SSL_get_quiet_shutdown
+SSL_get_rbio
+SSL_get_read_ahead
+SSL_get_read_sequence
+SSL_get_rfd
+SSL_get_secure_renegotiation_support
+SSL_get_server_random
+SSL_get_server_tmp_key
+SSL_get_servername
+SSL_get_servername_type
+SSL_get_shared_ciphers
+SSL_get_shutdown
+SSL_get_structure_sizes
+SSL_get_ticket_age_skew
+SSL_get_tls_channel_id
+SSL_get_tls_unique
+SSL_get_verify_mode
+SSL_get_wbio
+SSL_get_wfd
+SSL_get_write_sequence
+SSL_in_early_data
+SSL_in_false_start
+SSL_in_init
+SSL_is_draft_downgrade
+SSL_is_dtls
+SSL_is_init_finished
+SSL_is_server
+SSL_is_token_binding_negotiated
+SSL_library_init
+SSL_load_error_strings
+SSL_need_tmp_RSA
+SSL_new
+SSL_num_renegotiations
+SSL_peek
+SSL_pending
+SSL_read
+SSL_renegotiate
+SSL_renegotiate_pending
+SSL_reset_early_data_reject
+SSL_select_next_proto
+SSL_send_fatal_alert
+SSL_session_reused
+SSL_set0_rbio
+SSL_set0_wbio
+SSL_set1_curves
+SSL_set1_curves_list
+SSL_set1_tls_channel_id
+SSL_set_SSL_CTX
+SSL_set_accept_state
+SSL_set_alpn_protos
+SSL_set_bio
+SSL_set_cipher_list
+SSL_set_connect_state
+SSL_set_custom_verify
+SSL_set_dummy_pq_padding_size
+SSL_set_early_data_enabled
+SSL_set_ex_data
+SSL_set_fd
+SSL_set_info_callback
+SSL_set_max_cert_list
+SSL_set_max_send_fragment
+SSL_set_mode
+SSL_set_msg_callback
+SSL_set_msg_callback_arg
+SSL_set_mtu
+SSL_set_options
+SSL_set_psk_client_callback
+SSL_set_psk_server_callback
+SSL_set_quic_transport_params
+SSL_set_quiet_shutdown
+SSL_set_read_ahead
+SSL_set_renegotiate_mode
+SSL_set_retain_only_sha256_of_client_certs
+SSL_set_rfd
+SSL_set_session_id_context
+SSL_set_shutdown
+SSL_set_state
+SSL_set_strict_cipher_list
+SSL_set_tls13_variant
+SSL_set_tls_channel_id_enabled
+SSL_set_tlsext_host_name
+SSL_set_tmp_dh
+SSL_set_tmp_dh_callback
+SSL_set_tmp_ecdh
+SSL_set_tmp_rsa
+SSL_set_tmp_rsa_callback
+SSL_set_token_binding_params
+SSL_set_wfd
+SSL_shutdown
+SSL_state
+SSL_total_renegotiations
+SSL_use_psk_identity_hint
+SSL_want
+SSL_write
+SSL_CTX_set_private_key_method
+SSL_CTX_set_signing_algorithm_prefs
+SSL_CTX_set_verify_algorithm_prefs
+SSL_CTX_use_PrivateKey
+SSL_CTX_use_PrivateKey_ASN1
+SSL_CTX_use_RSAPrivateKey
+SSL_CTX_use_RSAPrivateKey_ASN1
+SSL_get_signature_algorithm_digest
+SSL_get_signature_algorithm_key_type
+SSL_get_signature_algorithm_name
+SSL_is_signature_algorithm_rsa_pss
+SSL_set_private_key_method
+SSL_set_signing_algorithm_prefs
+SSL_use_PrivateKey
+SSL_use_PrivateKey_ASN1
+SSL_use_RSAPrivateKey
+SSL_use_RSAPrivateKey_ASN1
+SSL_CTX_add_session
+SSL_CTX_flush_sessions
+SSL_CTX_get_channel_id_cb
+SSL_CTX_get_info_callback
+SSL_CTX_get_timeout
+SSL_CTX_remove_session
+SSL_CTX_sess_get_get_cb
+SSL_CTX_sess_get_new_cb
+SSL_CTX_sess_get_remove_cb
+SSL_CTX_sess_set_get_cb
+SSL_CTX_sess_set_new_cb
+SSL_CTX_sess_set_remove_cb
+SSL_CTX_set_channel_id_cb
+SSL_CTX_set_info_callback
+SSL_CTX_set_session_psk_dhe_timeout
+SSL_CTX_set_timeout
+SSL_SESSION_free
+SSL_SESSION_get0_peer
+SSL_SESSION_get0_ticket
+SSL_SESSION_get_ex_data
+SSL_SESSION_get_ex_new_index
+SSL_SESSION_get_id
+SSL_SESSION_get_master_key
+SSL_SESSION_get_ticket_lifetime_hint
+SSL_SESSION_get_time
+SSL_SESSION_get_timeout
+SSL_SESSION_has_ticket
+SSL_SESSION_is_resumable
+SSL_SESSION_new
+SSL_SESSION_set1_id_context
+SSL_SESSION_set_ex_data
+SSL_SESSION_set_time
+SSL_SESSION_set_timeout
+SSL_SESSION_should_be_single_use
+SSL_SESSION_up_ref
+SSL_get1_session
+SSL_get_session
+SSL_magic_pending_session_ptr
+SSL_set_session
+SSL_alert_desc_string
+SSL_alert_desc_string_long
+SSL_alert_type_string
+SSL_alert_type_string_long
+SSL_state_string
+SSL_state_string_long
+SSL_CTX_set_max_proto_version
+SSL_CTX_set_min_proto_version
+SSL_SESSION_get_protocol_version
+SSL_SESSION_get_version
+SSL_SESSION_set_protocol_version
+SSL_get_version
+SSL_set_max_proto_version
+SSL_set_min_proto_version
+SSL_version
+PEM_read_SSL_SESSION
+PEM_read_bio_SSL_SESSION
+PEM_write_SSL_SESSION
+PEM_write_bio_SSL_SESSION
+SSL_CTX_add0_chain_cert
+SSL_CTX_add1_chain_cert
+SSL_CTX_add_client_CA
+SSL_CTX_add_extra_chain_cert
+SSL_CTX_clear_chain_certs
+SSL_CTX_clear_extra_chain_certs
+SSL_CTX_get0_certificate
+SSL_CTX_get0_chain_certs
+SSL_CTX_get0_param
+SSL_CTX_get_cert_store
+SSL_CTX_get_client_CA_list
+SSL_CTX_get_extra_chain_certs
+SSL_CTX_get_verify_callback
+SSL_CTX_get_verify_depth
+SSL_CTX_get_verify_mode
+SSL_CTX_load_verify_locations
+SSL_CTX_set0_chain
+SSL_CTX_set0_verify_cert_store
+SSL_CTX_set1_chain
+SSL_CTX_set1_param
+SSL_CTX_set1_verify_cert_store
+SSL_CTX_set_cert_store
+SSL_CTX_set_cert_verify_callback
+SSL_CTX_set_client_CA_list
+SSL_CTX_set_client_cert_cb
+SSL_CTX_set_default_verify_paths
+SSL_CTX_set_purpose
+SSL_CTX_set_trust
+SSL_CTX_set_verify
+SSL_CTX_set_verify_depth
+SSL_CTX_use_certificate
+SSL_add0_chain_cert
+SSL_add1_chain_cert
+SSL_add_client_CA
+SSL_alert_from_verify_result
+SSL_clear_chain_certs
+SSL_dup_CA_list
+SSL_get0_chain_certs
+SSL_get0_param
+SSL_get_certificate
+SSL_get_client_CA_list
+SSL_get_ex_data_X509_STORE_CTX_idx
+SSL_get_peer_cert_chain
+SSL_get_peer_certificate
+SSL_get_peer_full_cert_chain
+SSL_get_verify_callback
+SSL_get_verify_depth
+SSL_get_verify_result
+SSL_set0_chain
+SSL_set0_verify_cert_store
+SSL_set1_chain
+SSL_set1_param
+SSL_set1_verify_cert_store
+SSL_set_client_CA_list
+SSL_set_purpose
+SSL_set_trust
+SSL_set_verify
+SSL_set_verify_depth
+SSL_set_verify_result
+SSL_use_certificate
+d2i_SSL_SESSION
+d2i_SSL_SESSION_bio
+i2d_SSL_SESSION_bio
+SSL_export_early_keying_material
+SSL_export_keying_material
+SSL_generate_key_block
+SSL_get_key_block_len
+SSL_CTX_set_ed25519_enabled
+SSL_early_callback_ctx_extension_get
+SSL_extension_supported
+SSLv23_client_method
+SSLv23_method
+SSLv23_server_method
+TLS_client_method
+TLS_method
+TLS_server_method
+TLS_with_buffers_method
+TLSv1_1_client_method
+TLSv1_1_method
+TLSv1_1_server_method
+TLSv1_2_client_method
+TLSv1_2_method
+TLSv1_2_server_method
+TLSv1_client_method
+TLSv1_method
+TLSv1_server_method
+SSL_max_seal_overhead
+OPENSSL_cpuid_setup
+CRYPTO_has_asm
+CRYPTO_is_confidential_build
+CRYPTO_library_init
+CRYPTO_malloc_init
+ENGINE_load_builtin_engines
+ENGINE_register_all_complete
+OPENSSL_ia32cap_P
+OPENSSL_init_crypto
+OPENSSL_load_builtin_modules
+OpenSSL_version
+OpenSSL_version_num
+SSLeay
+SSLeay_version
+CRYPTO_cleanup_all_ex_data
+CRYPTO_free_ex_data
+CRYPTO_get_ex_data
+CRYPTO_get_ex_new_index
+CRYPTO_new_ex_data
+CRYPTO_set_ex_data
+BIO_snprintf
+BIO_vsnprintf
+CRYPTO_memcmp
+OPENSSL_cleanse
+OPENSSL_free
+OPENSSL_hash32
+OPENSSL_malloc
+OPENSSL_realloc
+OPENSSL_strcasecmp
+OPENSSL_strdup
+OPENSSL_strncasecmp
+OPENSSL_strnlen
+OPENSSL_tolower
+CRYPTO_refcount_dec_and_test_zero
+CRYPTO_refcount_inc
+CRYPTO_THREADID_current
+CRYPTO_THREADID_set_callback
+CRYPTO_THREADID_set_numeric
+CRYPTO_THREADID_set_pointer
+CRYPTO_get_dynlock_create_callback
+CRYPTO_get_dynlock_destroy_callback
+CRYPTO_get_dynlock_lock_callback
+CRYPTO_get_lock_name
+CRYPTO_get_locking_callback
+CRYPTO_num_locks
+CRYPTO_set_add_lock_callback
+CRYPTO_set_dynlock_create_callback
+CRYPTO_set_dynlock_destroy_callback
+CRYPTO_set_dynlock_lock_callback
+CRYPTO_set_id_callback
+CRYPTO_set_locking_callback
+CRYPTO_MUTEX_cleanup
+CRYPTO_MUTEX_init
+CRYPTO_MUTEX_lock_read
+CRYPTO_MUTEX_lock_write
+CRYPTO_MUTEX_unlock_read
+CRYPTO_MUTEX_unlock_write
+CRYPTO_STATIC_MUTEX_lock_read
+CRYPTO_STATIC_MUTEX_lock_write
+CRYPTO_STATIC_MUTEX_unlock_read
+CRYPTO_STATIC_MUTEX_unlock_write
+CRYPTO_get_thread_local
+CRYPTO_once
+CRYPTO_set_thread_local
+sk_deep_copy
+sk_delete
+sk_delete_ptr
+sk_dup
+sk_find
+sk_free
+sk_insert
+sk_is_sorted
+sk_new
+sk_new_null
+sk_num
+sk_pop
+sk_pop_free
+sk_push
+sk_set
+sk_set_cmp_func
+sk_shift
+sk_sort
+sk_value
+sk_zero
+lh_delete
+lh_doall
+lh_doall_arg
+lh_free
+lh_insert
+lh_new
+lh_num_items
+lh_retrieve
+lh_strhash
+ERR_SAVE_STATE_free
+ERR_add_error_data
+ERR_add_error_dataf
+ERR_clear_error
+ERR_clear_system_error
+ERR_error_string
+ERR_error_string_n
+ERR_free_strings
+ERR_func_error_string
+ERR_get_error
+ERR_get_error_line
+ERR_get_error_line_data
+ERR_get_next_error_library
+ERR_lib_error_string
+ERR_load_BIO_strings
+ERR_load_ERR_strings
+ERR_load_crypto_strings
+ERR_peek_error
+ERR_peek_error_line
+ERR_peek_error_line_data
+ERR_peek_last_error
+ERR_peek_last_error_line
+ERR_peek_last_error_line_data
+ERR_pop_to_mark
+ERR_print_errors_cb
+ERR_print_errors_fp
+ERR_put_error
+ERR_reason_error_string
+ERR_remove_state
+ERR_remove_thread_state
+ERR_restore_state
+ERR_save_state
+ERR_set_mark
+kOpenSSLReasonStringData
+kOpenSSLReasonValues
+kOpenSSLReasonValuesLen
+EVP_DecodeBase64
+EVP_DecodeBlock
+EVP_DecodeFinal
+EVP_DecodeInit
+EVP_DecodeUpdate
+EVP_DecodedLength
+EVP_EncodeBlock
+EVP_EncodeFinal
+EVP_EncodeInit
+EVP_EncodeUpdate
+EVP_EncodedLength
+CBB_finish_i2d
+CBS_asn1_ber_to_der
+CBS_get_asn1_implicit_string
+CBS_asn1_bitstring_has_bit
+CBS_asn1_oid_to_text
+CBS_contains_zero_byte
+CBS_copy_bytes
+CBS_data
+CBS_get_any_asn1
+CBS_get_any_asn1_element
+CBS_get_any_ber_asn1_element
+CBS_get_asn1
+CBS_get_asn1_bool
+CBS_get_asn1_element
+CBS_get_asn1_uint64
+CBS_get_bytes
+CBS_get_last_u8
+CBS_get_optional_asn1
+CBS_get_optional_asn1_bool
+CBS_get_optional_asn1_octet_string
+CBS_get_optional_asn1_uint64
+CBS_get_u16
+CBS_get_u16_length_prefixed
+CBS_get_u24
+CBS_get_u24_length_prefixed
+CBS_get_u32
+CBS_get_u8
+CBS_get_u8_length_prefixed
+CBS_init
+CBS_is_valid_asn1_bitstring
+CBS_len
+CBS_mem_equal
+CBS_peek_asn1_tag
+CBS_skip
+CBS_stow
+CBS_strdup
+CBB_add_asn1
+CBB_add_asn1_bool
+CBB_add_asn1_octet_string
+CBB_add_asn1_oid_from_text
+CBB_add_asn1_uint64
+CBB_add_bytes
+CBB_add_space
+CBB_add_u16
+CBB_add_u16_length_prefixed
+CBB_add_u24
+CBB_add_u24_length_prefixed
+CBB_add_u32
+CBB_add_u8
+CBB_add_u8_length_prefixed
+CBB_cleanup
+CBB_data
+CBB_did_write
+CBB_discard_child
+CBB_finish
+CBB_flush
+CBB_flush_asn1_set_of
+CBB_init
+CBB_init_fixed
+CBB_len
+CBB_reserve
+CBB_zero
+CRYPTO_BUFFER_POOL_free
+CRYPTO_BUFFER_POOL_new
+CRYPTO_BUFFER_data
+CRYPTO_BUFFER_free
+CRYPTO_BUFFER_init_CBS
+CRYPTO_BUFFER_len
+CRYPTO_BUFFER_new
+CRYPTO_BUFFER_new_from_CBS
+CRYPTO_BUFFER_up_ref
+AES_cbc_encrypt
+AES_cfb128_encrypt
+AES_ctr128_encrypt
+AES_decrypt
+AES_ecb_encrypt
+AES_encrypt
+AES_ofb128_encrypt
+AES_set_decrypt_key
+AES_set_encrypt_key
+AES_unwrap_key
+AES_wrap_key
+BN_BLINDING_convert
+BN_BLINDING_free
+BN_BLINDING_invert
+BN_BLINDING_new
+BN_CTX_end
+BN_CTX_free
+BN_CTX_get
+BN_CTX_new
+BN_CTX_start
+BN_GENCB_call
+BN_GENCB_set
+BN_MONT_CTX_copy
+BN_MONT_CTX_free
+BN_MONT_CTX_new
+BN_MONT_CTX_new_for_modulus
+BN_MONT_CTX_set
+BN_MONT_CTX_set_locked
+BN_abs_is_word
+BN_add
+BN_add_word
+BN_bin2bn
+BN_bn2bin
+BN_bn2bin_padded
+BN_bn2le_padded
+BN_clear
+BN_clear_bit
+BN_clear_free
+BN_cmp
+BN_cmp_word
+BN_copy
+BN_count_low_zero_bits
+BN_div
+BN_div_word
+BN_dup
+BN_enhanced_miller_rabin_primality_test
+BN_equal_consttime
+BN_exp
+BN_free
+BN_from_montgomery
+BN_gcd
+BN_generate_prime_ex
+BN_get_u64
+BN_get_word
+BN_init
+BN_is_bit_set
+BN_is_negative
+BN_is_odd
+BN_is_one
+BN_is_pow2
+BN_is_prime_ex
+BN_is_prime_fasttest_ex
+BN_is_word
+BN_is_zero
+BN_le2bn
+BN_lshift
+BN_lshift1
+BN_mask_bits
+BN_mod_add
+BN_mod_add_quick
+BN_mod_exp
+BN_mod_exp2_mont
+BN_mod_exp_mont
+BN_mod_exp_mont_consttime
+BN_mod_exp_mont_word
+BN_mod_inverse
+BN_mod_inverse_blinded
+BN_mod_inverse_odd
+BN_mod_lshift
+BN_mod_lshift1
+BN_mod_lshift1_quick
+BN_mod_lshift_quick
+BN_mod_mul
+BN_mod_mul_montgomery
+BN_mod_pow2
+BN_mod_sqr
+BN_mod_sqrt
+BN_mod_sub
+BN_mod_sub_quick
+BN_mod_word
+BN_mul
+BN_mul_word
+BN_new
+BN_nnmod
+BN_nnmod_pow2
+BN_num_bits
+BN_num_bits_word
+BN_num_bytes
+BN_one
+BN_primality_test
+BN_pseudo_rand
+BN_pseudo_rand_range
+BN_rand
+BN_rand_range
+BN_rand_range_ex
+BN_rshift
+BN_rshift1
+BN_set_bit
+BN_set_negative
+BN_set_u64
+BN_set_word
+BN_sqr
+BN_sqrt
+BN_sub
+BN_sub_word
+BN_to_montgomery
+BN_uadd
+BN_ucmp
+BN_usub
+BN_value_one
+BN_zero
+BORINGSSL_self_test
+CRYPTO_POLYVAL_finish
+CRYPTO_POLYVAL_init
+CRYPTO_POLYVAL_update_blocks
+CRYPTO_cbc128_decrypt
+CRYPTO_cbc128_encrypt
+CRYPTO_ccm128_decrypt
+CRYPTO_ccm128_encrypt
+CRYPTO_ccm128_init
+CRYPTO_ccm128_max_input
+CRYPTO_cfb128_1_encrypt
+CRYPTO_cfb128_8_encrypt
+CRYPTO_cfb128_encrypt
+CRYPTO_ctr128_encrypt
+CRYPTO_ctr128_encrypt_ctr32
+CRYPTO_gcm128_aad
+CRYPTO_gcm128_decrypt
+CRYPTO_gcm128_decrypt_ctr32
+CRYPTO_gcm128_encrypt
+CRYPTO_gcm128_encrypt_ctr32
+CRYPTO_gcm128_finish
+CRYPTO_gcm128_init
+CRYPTO_gcm128_setiv
+CRYPTO_gcm128_tag
+CRYPTO_ghash_init
+CRYPTO_ofb128_encrypt
+CRYPTO_sysrand
+CRYPTO_tls1_prf
+CTR_DRBG_clear
+CTR_DRBG_generate
+CTR_DRBG_init
+CTR_DRBG_reseed
+DES_decrypt3
+DES_ecb3_encrypt
+DES_ecb_encrypt
+DES_ede2_cbc_encrypt
+DES_ede3_cbc_encrypt
+DES_encrypt3
+DES_ncbc_encrypt
+DES_set_key
+DES_set_key_unchecked
+DES_set_odd_parity
+ECDSA_SIG_free
+ECDSA_SIG_get0
+ECDSA_SIG_new
+ECDSA_SIG_set0
+ECDSA_do_sign
+ECDSA_do_verify
+EC_GFp_mont_method
+EC_GFp_nistp224_method
+EC_GFp_nistp256_method
+EC_GFp_nistz256_method
+EC_GROUP_cmp
+EC_GROUP_dup
+EC_GROUP_free
+EC_GROUP_get0_generator
+EC_GROUP_get0_order
+EC_GROUP_get_cofactor
+EC_GROUP_get_curve_GFp
+EC_GROUP_get_curve_name
+EC_GROUP_get_degree
+EC_GROUP_get_order
+EC_GROUP_method_of
+EC_GROUP_new_by_curve_name
+EC_GROUP_new_curve_GFp
+EC_GROUP_set_asn1_flag
+EC_GROUP_set_generator
+EC_GROUP_set_point_conversion_form
+EC_KEY_check_fips
+EC_KEY_check_key
+EC_KEY_dup
+EC_KEY_free
+EC_KEY_generate_key
+EC_KEY_generate_key_fips
+EC_KEY_get0_group
+EC_KEY_get0_private_key
+EC_KEY_get0_public_key
+EC_KEY_get_conv_form
+EC_KEY_get_enc_flags
+EC_KEY_get_ex_data
+EC_KEY_get_ex_new_index
+EC_KEY_is_opaque
+EC_KEY_new
+EC_KEY_new_by_curve_name
+EC_KEY_new_method
+EC_KEY_set_asn1_flag
+EC_KEY_set_conv_form
+EC_KEY_set_enc_flags
+EC_KEY_set_ex_data
+EC_KEY_set_group
+EC_KEY_set_private_key
+EC_KEY_set_public_key
+EC_KEY_set_public_key_affine_coordinates
+EC_KEY_up_ref
+EC_METHOD_get_field_type
+EC_POINT_add
+EC_POINT_clear_free
+EC_POINT_cmp
+EC_POINT_copy
+EC_POINT_dbl
+EC_POINT_dup
+EC_POINT_free
+EC_POINT_get_affine_coordinates_GFp
+EC_POINT_invert
+EC_POINT_is_at_infinity
+EC_POINT_is_on_curve
+EC_POINT_make_affine
+EC_POINT_mul
+EC_POINT_new
+EC_POINT_oct2point
+EC_POINT_point2oct
+EC_POINT_set_affine_coordinates_GFp
+EC_POINT_set_compressed_coordinates_GFp
+EC_POINT_set_to_infinity
+EC_POINTs_make_affine
+EC_get_builtin_curves
+EVP_AEAD_CTX_aead
+EVP_AEAD_CTX_cleanup
+EVP_AEAD_CTX_free
+EVP_AEAD_CTX_get_iv
+EVP_AEAD_CTX_init
+EVP_AEAD_CTX_init_with_direction
+EVP_AEAD_CTX_new
+EVP_AEAD_CTX_open
+EVP_AEAD_CTX_open_gather
+EVP_AEAD_CTX_seal
+EVP_AEAD_CTX_seal_scatter
+EVP_AEAD_CTX_tag_len
+EVP_AEAD_CTX_zero
+EVP_AEAD_key_length
+EVP_AEAD_max_overhead
+EVP_AEAD_max_tag_len
+EVP_AEAD_nonce_length
+EVP_CIPHER_CTX_block_size
+EVP_CIPHER_CTX_cipher
+EVP_CIPHER_CTX_cleanup
+EVP_CIPHER_CTX_copy
+EVP_CIPHER_CTX_ctrl
+EVP_CIPHER_CTX_flags
+EVP_CIPHER_CTX_free
+EVP_CIPHER_CTX_get_app_data
+EVP_CIPHER_CTX_init
+EVP_CIPHER_CTX_iv_length
+EVP_CIPHER_CTX_key_length
+EVP_CIPHER_CTX_mode
+EVP_CIPHER_CTX_new
+EVP_CIPHER_CTX_nid
+EVP_CIPHER_CTX_reset
+EVP_CIPHER_CTX_set_app_data
+EVP_CIPHER_CTX_set_flags
+EVP_CIPHER_CTX_set_key_length
+EVP_CIPHER_CTX_set_padding
+EVP_CIPHER_block_size
+EVP_CIPHER_flags
+EVP_CIPHER_iv_length
+EVP_CIPHER_key_length
+EVP_CIPHER_mode
+EVP_CIPHER_nid
+EVP_Cipher
+EVP_CipherFinal_ex
+EVP_CipherInit
+EVP_CipherInit_ex
+EVP_CipherUpdate
+EVP_DecryptFinal_ex
+EVP_DecryptInit
+EVP_DecryptInit_ex
+EVP_DecryptUpdate
+EVP_Digest
+EVP_DigestFinal
+EVP_DigestFinal_ex
+EVP_DigestInit
+EVP_DigestInit_ex
+EVP_DigestUpdate
+EVP_EncryptFinal_ex
+EVP_EncryptInit
+EVP_EncryptInit_ex
+EVP_EncryptUpdate
+EVP_MD_CTX_block_size
+EVP_MD_CTX_cleanup
+EVP_MD_CTX_copy
+EVP_MD_CTX_copy_ex
+EVP_MD_CTX_create
+EVP_MD_CTX_destroy
+EVP_MD_CTX_free
+EVP_MD_CTX_init
+EVP_MD_CTX_md
+EVP_MD_CTX_new
+EVP_MD_CTX_reset
+EVP_MD_CTX_size
+EVP_MD_CTX_type
+EVP_MD_block_size
+EVP_MD_flags
+EVP_MD_size
+EVP_MD_type
+EVP_add_cipher_alias
+EVP_add_digest
+EVP_aead_aes_128_gcm
+EVP_aead_aes_128_gcm_tls12
+EVP_aead_aes_256_gcm
+EVP_aead_aes_256_gcm_tls12
+EVP_aes_128_cbc
+EVP_aes_128_ctr
+EVP_aes_128_ecb
+EVP_aes_128_gcm
+EVP_aes_128_ofb
+EVP_aes_192_cbc
+EVP_aes_192_ctr
+EVP_aes_192_ecb
+EVP_aes_192_gcm
+EVP_aes_256_cbc
+EVP_aes_256_ctr
+EVP_aes_256_ecb
+EVP_aes_256_gcm
+EVP_aes_256_ofb
+EVP_des_cbc
+EVP_des_ecb
+EVP_des_ede
+EVP_des_ede3
+EVP_des_ede3_cbc
+EVP_des_ede_cbc
+EVP_has_aes_hardware
+EVP_md4
+EVP_md5
+EVP_md5_sha1
+EVP_sha1
+EVP_sha224
+EVP_sha256
+EVP_sha384
+EVP_sha512
+HMAC
+HMAC_CTX_cleanup
+HMAC_CTX_copy
+HMAC_CTX_copy_ex
+HMAC_CTX_free
+HMAC_CTX_init
+HMAC_CTX_new
+HMAC_CTX_reset
+HMAC_Final
+HMAC_Init
+HMAC_Init_ex
+HMAC_Update
+HMAC_size
+MD4
+MD4_Final
+MD4_Init
+MD4_Transform
+MD4_Update
+MD5
+MD5_Final
+MD5_Init
+MD5_Transform
+MD5_Update
+OPENSSL_built_in_curves
+RAND_bytes
+RAND_bytes_with_additional_data
+RAND_pseudo_bytes
+RAND_set_urandom_fd
+RSAZ_1024_mod_exp_avx2
+RSA_add_pkcs1_prefix
+RSA_bits
+RSA_blinding_on
+RSA_check_fips
+RSA_check_key
+RSA_decrypt
+RSA_default_method
+RSA_encrypt
+RSA_flags
+RSA_free
+RSA_generate_key_ex
+RSA_generate_key_fips
+RSA_get0_crt_params
+RSA_get0_factors
+RSA_get0_key
+RSA_get_ex_data
+RSA_get_ex_new_index
+RSA_is_opaque
+RSA_new
+RSA_new_method
+RSA_padding_add_PKCS1_OAEP_mgf1
+RSA_padding_add_PKCS1_PSS_mgf1
+RSA_padding_add_PKCS1_type_1
+RSA_padding_add_PKCS1_type_2
+RSA_padding_add_none
+RSA_padding_check_PKCS1_OAEP_mgf1
+RSA_padding_check_PKCS1_type_1
+RSA_padding_check_PKCS1_type_2
+RSA_private_decrypt
+RSA_private_encrypt
+RSA_private_transform
+RSA_public_decrypt
+RSA_public_encrypt
+RSA_set0_crt_params
+RSA_set0_factors
+RSA_set0_key
+RSA_set_ex_data
+RSA_sign
+RSA_sign_pss_mgf1
+RSA_sign_raw
+RSA_size
+RSA_up_ref
+RSA_verify
+RSA_verify_PKCS1_PSS_mgf1
+RSA_verify_pss_mgf1
+RSA_verify_raw
+SHA1
+SHA1_Final
+SHA1_Init
+SHA1_Transform
+SHA1_Update
+SHA224
+SHA224_Final
+SHA224_Init
+SHA224_Update
+SHA256
+SHA256_Final
+SHA256_Init
+SHA256_Transform
+SHA256_Update
+SHA384
+SHA384_Final
+SHA384_Init
+SHA384_Update
+SHA512
+SHA512_Final
+SHA512_Init
+SHA512_Transform
+SHA512_Update
+aes_ctr_set_key
+bn_abs_sub_consttime
+bn_add_words
+bn_copy_words
+bn_div_consttime
+bn_expand
+bn_fits_in_words
+bn_from_montgomery_small
+bn_in_range_words
+bn_is_bit_set_words
+bn_is_relatively_prime
+bn_jacobi
+bn_lcm_consttime
+bn_less_than_montgomery_R
+bn_less_than_words
+bn_minimal_width
+bn_mod_add_consttime
+bn_mod_exp_base_2_consttime
+bn_mod_exp_mont_small
+bn_mod_inverse_consttime
+bn_mod_inverse_prime
+bn_mod_inverse_prime_mont_small
+bn_mod_inverse_secret_prime
+bn_mod_lshift1_consttime
+bn_mod_lshift_consttime
+bn_mod_mul_montgomery_small
+bn_mod_sub_consttime
+bn_mod_u16_consttime
+bn_mont_n0
+bn_mul_add_words
+bn_mul_comba4
+bn_mul_comba8
+bn_mul_consttime
+bn_mul_small
+bn_mul_words
+bn_odd_number_is_obviously_composite
+bn_one_to_montgomery
+bn_one_to_montgomery_small
+bn_rand_range_words
+bn_rand_secret_range
+bn_resize_words
+bn_rshift1_words
+bn_rshift_secret_shift
+bn_select_words
+bn_set_minimal_width
+bn_set_words
+bn_sqr_comba4
+bn_sqr_comba8
+bn_sqr_consttime
+bn_sqr_small
+bn_sqr_words
+bn_sub_words
+bn_to_montgomery_small
+bn_uadd_consttime
+bn_usub_consttime
+bn_wexpand
+crypto_gcm_clmul_enabled
+ec_GFp_mont_field_decode
+ec_GFp_mont_field_encode
+ec_GFp_mont_field_mul
+ec_GFp_mont_field_sqr
+ec_GFp_mont_group_finish
+ec_GFp_mont_group_init
+ec_GFp_mont_group_set_curve
+ec_GFp_nistp_recode_scalar_bits
+ec_GFp_simple_add
+ec_GFp_simple_cmp
+ec_GFp_simple_dbl
+ec_GFp_simple_field_mul
+ec_GFp_simple_field_sqr
+ec_GFp_simple_group_finish
+ec_GFp_simple_group_get_curve
+ec_GFp_simple_group_get_degree
+ec_GFp_simple_group_init
+ec_GFp_simple_group_set_curve
+ec_GFp_simple_invert
+ec_GFp_simple_is_at_infinity
+ec_GFp_simple_is_on_curve
+ec_GFp_simple_make_affine
+ec_GFp_simple_point_copy
+ec_GFp_simple_point_finish
+ec_GFp_simple_point_init
+ec_GFp_simple_point_set_affine_coordinates
+ec_GFp_simple_point_set_to_infinity
+ec_GFp_simple_points_make_affine
+ec_bignum_to_scalar
+ec_bignum_to_scalar_unchecked
+ec_compute_wNAF
+ec_group_new
+ec_point_mul_scalar
+ec_point_mul_scalar_public
+ec_random_nonzero_scalar
+ec_wNAF_mul
+kBoringSSLRSASqrtTwo
+kBoringSSLRSASqrtTwoLen
+md4_block_data_order
+rsa_default_decrypt
+rsa_default_private_transform
+rsa_default_sign_raw
+rsa_default_size
+FIPS_mode
+aesni_gcm_decrypt
+aesni_gcm_encrypt
+aesni_cbc_encrypt
+aesni_ccm64_decrypt_blocks
+aesni_ccm64_encrypt_blocks
+aesni_ctr32_encrypt_blocks
+aesni_decrypt
+aesni_ecb_encrypt
+aesni_encrypt
+aesni_ocb_decrypt
+aesni_ocb_encrypt
+aesni_set_decrypt_key
+aesni_set_encrypt_key
+aesni_xts_decrypt
+aesni_xts_encrypt
+asm_AES_cbc_encrypt
+asm_AES_decrypt
+asm_AES_encrypt
+asm_AES_set_decrypt_key
+asm_AES_set_encrypt_key
+bsaes_cbc_encrypt
+bsaes_ctr32_encrypt_blocks
+bsaes_xts_decrypt
+bsaes_xts_encrypt
+gcm_ghash_4bit
+gcm_ghash_avx
+gcm_ghash_clmul
+gcm_gmult_4bit
+gcm_gmult_avx
+gcm_gmult_clmul
+gcm_init_avx
+gcm_init_clmul
+md5_block_asm_data_order
+ecp_nistz256_avx2_select_w7
+ecp_nistz256_mul_mont
+ecp_nistz256_neg
+ecp_nistz256_point_add
+ecp_nistz256_point_add_affine
+ecp_nistz256_point_double
+ecp_nistz256_select_w5
+ecp_nistz256_select_w7
+ecp_nistz256_sqr_mont
+CRYPTO_rdrand
+CRYPTO_rdrand_multiple8_buf
+rsaz_1024_gather5_avx2
+rsaz_1024_mul_avx2
+rsaz_1024_norm2red_avx2
+rsaz_1024_red2norm_avx2
+rsaz_1024_scatter5_avx2
+rsaz_1024_sqr_avx2
+rsaz_avx2_eligible
+sha1_block_data_order
+sha256_block_data_order
+sha512_block_data_order
+vpaes_cbc_encrypt
+vpaes_decrypt
+vpaes_encrypt
+vpaes_set_decrypt_key
+vpaes_set_encrypt_key
+bn_from_montgomery
+bn_gather5
+bn_mul_mont_gather5
+bn_power5
+bn_scatter5
+bn_sqr8x_internal
+bn_mul_mont
+EVP_get_digestbyname
+EVP_get_digestbynid
+EVP_get_digestbyobj
+EVP_marshal_digest_algorithm
+EVP_parse_digest_algorithm
+EVP_get_cipherbyname
+EVP_get_cipherbynid
+EVP_BytesToKey
+EVP_enc_null
+EVP_rc2_40_cbc
+EVP_rc2_cbc
+EVP_rc4
+EVP_aead_aes_128_gcm_siv
+EVP_aead_aes_256_gcm_siv
+EVP_aead_aes_128_ctr_hmac_sha256
+EVP_aead_aes_256_ctr_hmac_sha256
+EVP_aead_aes_128_ccm_bluetooth
+EVP_aead_aes_128_ccm_bluetooth_8
+EVP_aead_chacha20_poly1305
+EVP_tls_cbc_copy_mac
+EVP_tls_cbc_digest_record
+EVP_tls_cbc_record_digest_supported
+EVP_tls_cbc_remove_padding
+EVP_aead_aes_128_cbc_sha1_tls
+EVP_aead_aes_128_cbc_sha1_tls_implicit_iv
+EVP_aead_aes_128_cbc_sha256_tls
+EVP_aead_aes_256_cbc_sha1_tls
+EVP_aead_aes_256_cbc_sha1_tls_implicit_iv
+EVP_aead_aes_256_cbc_sha256_tls
+EVP_aead_aes_256_cbc_sha384_tls
+EVP_aead_des_ede3_cbc_sha1_tls
+EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv
+EVP_aead_null_sha1_tls
+EVP_aead_aes_128_cbc_sha1_ssl3
+EVP_aead_aes_256_cbc_sha1_ssl3
+EVP_aead_des_ede3_cbc_sha1_ssl3
+EVP_aead_null_sha1_ssl3
+aes128gcmsiv_aes_ks
+aes128gcmsiv_aes_ks_enc_x1
+aes128gcmsiv_dec
+aes128gcmsiv_ecb_enc_block
+aes128gcmsiv_enc_msg_x4
+aes128gcmsiv_enc_msg_x8
+aes128gcmsiv_kdf
+aes256gcmsiv_aes_ks
+aes256gcmsiv_aes_ks_enc_x1
+aes256gcmsiv_dec
+aes256gcmsiv_ecb_enc_block
+aes256gcmsiv_enc_msg_x4
+aes256gcmsiv_enc_msg_x8
+aes256gcmsiv_kdf
+aesgcmsiv_htable6_init
+aesgcmsiv_htable_init
+aesgcmsiv_htable_polyval
+aesgcmsiv_polyval_horner
+chacha20_poly1305_open
+chacha20_poly1305_seal
+RC4
+RC4_set_key
+CONF_VALUE_new
+CONF_modules_free
+CONF_modules_load_file
+CONF_parse_list
+NCONF_free
+NCONF_get_section
+NCONF_get_string
+NCONF_load
+NCONF_load_bio
+NCONF_new
+OPENSSL_config
+OPENSSL_no_config
+CRYPTO_chacha_20
+ChaCha20_ctr32
+CRYPTO_poly1305_finish
+CRYPTO_poly1305_init
+CRYPTO_poly1305_update
+SPAKE2_CTX_free
+SPAKE2_CTX_new
+SPAKE2_generate_msg
+SPAKE2_process_msg
+ED25519_keypair
+ED25519_keypair_from_seed
+ED25519_sign
+ED25519_verify
+X25519
+X25519_keypair
+X25519_public_from_private
+x25519_ge_add
+x25519_ge_frombytes_vartime
+x25519_ge_p1p1_to_p2
+x25519_ge_p1p1_to_p3
+x25519_ge_p3_to_cached
+x25519_ge_scalarmult
+x25519_ge_scalarmult_base
+x25519_ge_scalarmult_small_precomp
+x25519_ge_sub
+x25519_ge_tobytes
+x25519_sc_reduce
+BUF_MEM_append
+BUF_MEM_free
+BUF_MEM_grow
+BUF_MEM_grow_clean
+BUF_MEM_new
+BUF_MEM_reserve
+BUF_memdup
+BUF_strdup
+BUF_strlcat
+BUF_strlcpy
+BUF_strndup
+BUF_strnlen
+BN_marshal_asn1
+BN_parse_asn1_unsigned
+BN_asc2bn
+BN_bn2cbb_padded
+BN_bn2dec
+BN_bn2hex
+BN_bn2mpi
+BN_dec2bn
+BN_hex2bn
+BN_mpi2bn
+BN_print
+BN_print_fp
+BIO_callback_ctrl
+BIO_clear_flags
+BIO_clear_retry_flags
+BIO_copy_next_retry
+BIO_ctrl
+BIO_ctrl_pending
+BIO_eof
+BIO_find_type
+BIO_flush
+BIO_free
+BIO_free_all
+BIO_get_data
+BIO_get_init
+BIO_get_new_index
+BIO_get_retry_flags
+BIO_get_retry_reason
+BIO_get_shutdown
+BIO_gets
+BIO_indent
+BIO_int_ctrl
+BIO_meth_free
+BIO_meth_new
+BIO_meth_set_create
+BIO_meth_set_ctrl
+BIO_meth_set_destroy
+BIO_meth_set_gets
+BIO_meth_set_puts
+BIO_meth_set_read
+BIO_meth_set_write
+BIO_method_type
+BIO_new
+BIO_next
+BIO_number_read
+BIO_number_written
+BIO_pending
+BIO_pop
+BIO_ptr_ctrl
+BIO_push
+BIO_puts
+BIO_read
+BIO_read_asn1
+BIO_reset
+BIO_set_close
+BIO_set_data
+BIO_set_flags
+BIO_set_init
+BIO_set_retry_read
+BIO_set_retry_special
+BIO_set_retry_write
+BIO_set_shutdown
+BIO_set_write_buffer_size
+BIO_should_io_special
+BIO_should_read
+BIO_should_retry
+BIO_should_write
+BIO_test_flags
+BIO_up_ref
+BIO_vfree
+BIO_wpending
+BIO_write
+ERR_print_errors
+BIO_get_mem_data
+BIO_get_mem_ptr
+BIO_mem_contents
+BIO_new_mem_buf
+BIO_s_mem
+BIO_set_mem_buf
+BIO_set_mem_eof_return
+BIO_do_connect
+BIO_new_connect
+BIO_s_connect
+BIO_set_conn_hostname
+BIO_set_conn_int_port
+BIO_set_conn_port
+BIO_set_nbio
+BIO_get_fd
+BIO_new_fd
+BIO_s_fd
+BIO_set_fd
+bio_fd_should_retry
+BIO_append_filename
+BIO_get_fp
+BIO_new_file
+BIO_new_fp
+BIO_read_filename
+BIO_rw_filename
+BIO_s_file
+BIO_set_fp
+BIO_write_filename
+BIO_hexdump
+BIO_ctrl_get_read_request
+BIO_ctrl_get_write_guarantee
+BIO_new_bio_pair
+BIO_shutdown_wr
+BIO_printf
+BIO_new_socket
+BIO_s_socket
+bio_clear_socket_error
+bio_ip_and_port_to_socket_and_addr
+bio_sock_error
+bio_socket_nbio
+RAND_enable_fork_unsafe_buffering
+rand_fork_unsafe_buffering_enabled
+RAND_SSLeay
+RAND_add
+RAND_cleanup
+RAND_egd
+RAND_file_name
+RAND_get_rand_method
+RAND_load_file
+RAND_poll
+RAND_seed
+RAND_set_rand_method
+RAND_status
+OBJ_cbs2nid
+OBJ_cmp
+OBJ_create
+OBJ_dup
+OBJ_get0_data
+OBJ_length
+OBJ_ln2nid
+OBJ_nid2cbb
+OBJ_nid2ln
+OBJ_nid2obj
+OBJ_nid2sn
+OBJ_obj2nid
+OBJ_obj2txt
+OBJ_sn2nid
+OBJ_txt2nid
+OBJ_txt2obj
+OBJ_find_sigid_algs
+OBJ_find_sigid_by_algs
+ASN1_BIT_STRING_check
+ASN1_BIT_STRING_get_bit
+ASN1_BIT_STRING_set
+ASN1_BIT_STRING_set_bit
+c2i_ASN1_BIT_STRING
+i2c_ASN1_BIT_STRING
+d2i_ASN1_BOOLEAN
+i2d_ASN1_BOOLEAN
+ASN1_d2i_bio
+ASN1_d2i_fp
+ASN1_item_d2i_bio
+ASN1_item_d2i_fp
+ASN1_dup
+ASN1_item_dup
+ASN1_ENUMERATED_get
+ASN1_ENUMERATED_set
+ASN1_ENUMERATED_to_BN
+BN_to_ASN1_ENUMERATED
+ASN1_GENERALIZEDTIME_adj
+ASN1_GENERALIZEDTIME_check
+ASN1_GENERALIZEDTIME_set
+ASN1_GENERALIZEDTIME_set_string
+asn1_generalizedtime_to_tm
+ASN1_i2d_bio
+ASN1_i2d_fp
+ASN1_item_i2d_bio
+ASN1_item_i2d_fp
+ASN1_INTEGER_cmp
+ASN1_INTEGER_dup
+ASN1_INTEGER_get
+ASN1_INTEGER_set
+ASN1_INTEGER_set_uint64
+ASN1_INTEGER_to_BN
+BN_to_ASN1_INTEGER
+c2i_ASN1_INTEGER
+d2i_ASN1_UINTEGER
+i2c_ASN1_INTEGER
+ASN1_mbstring_copy
+ASN1_mbstring_ncopy
+ASN1_OBJECT_create
+ASN1_OBJECT_free
+ASN1_OBJECT_new
+c2i_ASN1_OBJECT
+d2i_ASN1_OBJECT
+i2a_ASN1_OBJECT
+i2d_ASN1_OBJECT
+i2t_ASN1_OBJECT
+ASN1_OCTET_STRING_cmp
+ASN1_OCTET_STRING_dup
+ASN1_OCTET_STRING_set
+ASN1_PRINTABLE_type
+ASN1_STRING_TABLE_add
+ASN1_STRING_TABLE_cleanup
+ASN1_STRING_TABLE_get
+ASN1_STRING_get_default_mask
+ASN1_STRING_set_by_NID
+ASN1_STRING_set_default_mask
+ASN1_STRING_set_default_mask_asc
+ASN1_TIME_adj
+ASN1_TIME_check
+ASN1_TIME_diff
+ASN1_TIME_free
+ASN1_TIME_it
+ASN1_TIME_new
+ASN1_TIME_set
+ASN1_TIME_set_string
+ASN1_TIME_to_generalizedtime
+d2i_ASN1_TIME
+i2d_ASN1_TIME
+ASN1_TYPE_cmp
+ASN1_TYPE_get
+ASN1_TYPE_set
+ASN1_TYPE_set1
+ASN1_UTCTIME_adj
+ASN1_UTCTIME_check
+ASN1_UTCTIME_cmp_time_t
+ASN1_UTCTIME_set
+ASN1_UTCTIME_set_string
+asn1_utctime_to_tm
+UTF8_getc
+UTF8_putc
+ASN1_STRING_cmp
+ASN1_STRING_copy
+ASN1_STRING_data
+ASN1_STRING_dup
+ASN1_STRING_free
+ASN1_STRING_get0_data
+ASN1_STRING_length
+ASN1_STRING_length_set
+ASN1_STRING_new
+ASN1_STRING_set
+ASN1_STRING_set0
+ASN1_STRING_type
+ASN1_STRING_type_new
+ASN1_get_object
+ASN1_object_size
+ASN1_put_eoc
+ASN1_put_object
+ASN1_tag2str
+ASN1_item_pack
+ASN1_item_unpack
+i2a_ASN1_ENUMERATED
+i2a_ASN1_INTEGER
+i2a_ASN1_STRING
+ASN1_item_d2i
+ASN1_item_ex_d2i
+ASN1_tag2bit
+asn1_ex_c2i
+ASN1_item_ex_i2d
+ASN1_item_i2d
+ASN1_item_ndef_i2d
+asn1_ex_i2c
+ASN1_item_ex_free
+ASN1_item_free
+ASN1_primitive_free
+ASN1_template_free
+asn1_item_combine_free
+ASN1_item_ex_new
+ASN1_item_new
+ASN1_primitive_new
+ASN1_template_new
+ASN1_ANY_it
+ASN1_BIT_STRING_free
+ASN1_BIT_STRING_it
+ASN1_BIT_STRING_new
+ASN1_BMPSTRING_free
+ASN1_BMPSTRING_it
+ASN1_BMPSTRING_new
+ASN1_BOOLEAN_it
+ASN1_ENUMERATED_free
+ASN1_ENUMERATED_it
+ASN1_ENUMERATED_new
+ASN1_FBOOLEAN_it
+ASN1_GENERALIZEDTIME_free
+ASN1_GENERALIZEDTIME_it
+ASN1_GENERALIZEDTIME_new
+ASN1_GENERALSTRING_free
+ASN1_GENERALSTRING_it
+ASN1_GENERALSTRING_new
+ASN1_IA5STRING_free
+ASN1_IA5STRING_it
+ASN1_IA5STRING_new
+ASN1_INTEGER_free
+ASN1_INTEGER_it
+ASN1_INTEGER_new
+ASN1_NULL_free
+ASN1_NULL_it
+ASN1_NULL_new
+ASN1_OBJECT_it
+ASN1_OCTET_STRING_NDEF_it
+ASN1_OCTET_STRING_free
+ASN1_OCTET_STRING_it
+ASN1_OCTET_STRING_new
+ASN1_PRINTABLESTRING_free
+ASN1_PRINTABLESTRING_it
+ASN1_PRINTABLESTRING_new
+ASN1_PRINTABLE_free
+ASN1_PRINTABLE_it
+ASN1_PRINTABLE_new
+ASN1_SEQUENCE_ANY_it
+ASN1_SEQUENCE_it
+ASN1_SET_ANY_it
+ASN1_T61STRING_free
+ASN1_T61STRING_it
+ASN1_T61STRING_new
+ASN1_TBOOLEAN_it
+ASN1_TYPE_free
+ASN1_TYPE_new
+ASN1_UNIVERSALSTRING_free
+ASN1_UNIVERSALSTRING_it
+ASN1_UNIVERSALSTRING_new
+ASN1_UTCTIME_free
+ASN1_UTCTIME_it
+ASN1_UTCTIME_new
+ASN1_UTF8STRING_free
+ASN1_UTF8STRING_it
+ASN1_UTF8STRING_new
+ASN1_VISIBLESTRING_free
+ASN1_VISIBLESTRING_it
+ASN1_VISIBLESTRING_new
+DIRECTORYSTRING_free
+DIRECTORYSTRING_it
+DIRECTORYSTRING_new
+DISPLAYTEXT_free
+DISPLAYTEXT_it
+DISPLAYTEXT_new
+d2i_ASN1_BIT_STRING
+d2i_ASN1_BMPSTRING
+d2i_ASN1_ENUMERATED
+d2i_ASN1_GENERALIZEDTIME
+d2i_ASN1_GENERALSTRING
+d2i_ASN1_IA5STRING
+d2i_ASN1_INTEGER
+d2i_ASN1_NULL
+d2i_ASN1_OCTET_STRING
+d2i_ASN1_PRINTABLE
+d2i_ASN1_PRINTABLESTRING
+d2i_ASN1_SEQUENCE_ANY
+d2i_ASN1_SET_ANY
+d2i_ASN1_T61STRING
+d2i_ASN1_TYPE
+d2i_ASN1_UNIVERSALSTRING
+d2i_ASN1_UTCTIME
+d2i_ASN1_UTF8STRING
+d2i_ASN1_VISIBLESTRING
+d2i_DIRECTORYSTRING
+d2i_DISPLAYTEXT
+i2d_ASN1_BIT_STRING
+i2d_ASN1_BMPSTRING
+i2d_ASN1_ENUMERATED
+i2d_ASN1_GENERALIZEDTIME
+i2d_ASN1_GENERALSTRING
+i2d_ASN1_IA5STRING
+i2d_ASN1_INTEGER
+i2d_ASN1_NULL
+i2d_ASN1_OCTET_STRING
+i2d_ASN1_PRINTABLE
+i2d_ASN1_PRINTABLESTRING
+i2d_ASN1_SEQUENCE_ANY
+i2d_ASN1_SET_ANY
+i2d_ASN1_T61STRING
+i2d_ASN1_TYPE
+i2d_ASN1_UNIVERSALSTRING
+i2d_ASN1_UTCTIME
+i2d_ASN1_UTF8STRING
+i2d_ASN1_VISIBLESTRING
+i2d_DIRECTORYSTRING
+i2d_DISPLAYTEXT
+asn1_do_adb
+asn1_enc_free
+asn1_enc_init
+asn1_enc_restore
+asn1_enc_save
+asn1_get_choice_selector
+asn1_get_field_ptr
+asn1_refcount_dec_and_test_zero
+asn1_refcount_set_one
+asn1_set_choice_selector
+OPENSSL_gmtime
+OPENSSL_gmtime_adj
+OPENSSL_gmtime_diff
+ENGINE_free
+ENGINE_get_ECDSA_method
+ENGINE_get_RSA_method
+ENGINE_new
+ENGINE_set_ECDSA_method
+ENGINE_set_RSA_method
+METHOD_ref
+METHOD_unref
+DH_compute_key
+DH_free
+DH_generate_key
+DH_generate_parameters_ex
+DH_get0_key
+DH_get0_pqg
+DH_get_ex_data
+DH_get_ex_new_index
+DH_new
+DH_num_bits
+DH_set0_key
+DH_set0_pqg
+DH_set_ex_data
+DH_size
+DH_up_ref
+DHparams_dup
+BN_get_rfc3526_prime_1536
+DH_check
+DH_check_pub_key
+DH_marshal_parameters
+DH_parse_parameters
+d2i_DHparams
+i2d_DHparams
+DSA_SIG_free
+DSA_SIG_new
+DSA_check_signature
+DSA_do_check_signature
+DSA_do_sign
+DSA_do_verify
+DSA_dup_DH
+DSA_free
+DSA_generate_key
+DSA_generate_parameters_ex
+DSA_get0_key
+DSA_get0_pqg
+DSA_get_ex_data
+DSA_get_ex_new_index
+DSA_new
+DSA_set0_key
+DSA_set0_pqg
+DSA_set_ex_data
+DSA_sign
+DSA_size
+DSA_up_ref
+DSA_verify
+DSAparams_dup
+DSA_SIG_marshal
+DSA_SIG_parse
+DSA_marshal_parameters
+DSA_marshal_private_key
+DSA_marshal_public_key
+DSA_parse_parameters
+DSA_parse_private_key
+DSA_parse_public_key
+d2i_DSAPrivateKey
+d2i_DSAPublicKey
+d2i_DSA_SIG
+d2i_DSAparams
+i2d_DSAPrivateKey
+i2d_DSAPublicKey
+i2d_DSA_SIG
+i2d_DSAparams
+RSAPrivateKey_dup
+RSAPublicKey_dup
+RSA_marshal_private_key
+RSA_marshal_public_key
+RSA_parse_private_key
+RSA_parse_public_key
+RSA_private_key_from_bytes
+RSA_private_key_to_bytes
+RSA_public_key_from_bytes
+RSA_public_key_to_bytes
+d2i_RSAPrivateKey
+d2i_RSAPublicKey
+i2d_RSAPrivateKey
+i2d_RSAPublicKey
+EC_KEY_marshal_curve_name
+EC_KEY_marshal_private_key
+EC_KEY_parse_curve_name
+EC_KEY_parse_parameters
+EC_KEY_parse_private_key
+EC_POINT_point2cbb
+d2i_ECParameters
+d2i_ECPrivateKey
+i2d_ECParameters
+i2d_ECPrivateKey
+i2o_ECPublicKey
+o2i_ECPublicKey
+ECDH_compute_key
+ECDSA_SIG_from_bytes
+ECDSA_SIG_marshal
+ECDSA_SIG_max_len
+ECDSA_SIG_parse
+ECDSA_SIG_to_bytes
+ECDSA_sign
+ECDSA_size
+ECDSA_verify
+d2i_ECDSA_SIG
+i2d_ECDSA_SIG
+AES_CMAC
+CMAC_CTX_free
+CMAC_CTX_new
+CMAC_Final
+CMAC_Init
+CMAC_Reset
+CMAC_Update
+EVP_DigestSign
+EVP_DigestSignFinal
+EVP_DigestSignInit
+EVP_DigestSignUpdate
+EVP_DigestVerify
+EVP_DigestVerifyFinal
+EVP_DigestVerifyInit
+EVP_DigestVerifyUpdate
+EVP_PKEY_CTX_get_signature_md
+EVP_PKEY_CTX_set_signature_md
+EVP_PKEY_assign
+EVP_PKEY_assign_DSA
+EVP_PKEY_assign_EC_KEY
+EVP_PKEY_assign_RSA
+EVP_PKEY_bits
+EVP_PKEY_cmp
+EVP_PKEY_cmp_parameters
+EVP_PKEY_copy_parameters
+EVP_PKEY_free
+EVP_PKEY_get0_DH
+EVP_PKEY_get0_DSA
+EVP_PKEY_get0_EC_KEY
+EVP_PKEY_get0_RSA
+EVP_PKEY_get1_DSA
+EVP_PKEY_get1_EC_KEY
+EVP_PKEY_get1_RSA
+EVP_PKEY_id
+EVP_PKEY_is_opaque
+EVP_PKEY_missing_parameters
+EVP_PKEY_new
+EVP_PKEY_set1_DSA
+EVP_PKEY_set1_EC_KEY
+EVP_PKEY_set1_RSA
+EVP_PKEY_set_type
+EVP_PKEY_size
+EVP_PKEY_type
+EVP_PKEY_up_ref
+EVP_cleanup
+OPENSSL_add_all_algorithms_conf
+OpenSSL_add_all_algorithms
+OpenSSL_add_all_ciphers
+OpenSSL_add_all_digests
+EVP_marshal_private_key
+EVP_marshal_public_key
+EVP_parse_private_key
+EVP_parse_public_key
+d2i_AutoPrivateKey
+d2i_PrivateKey
+i2d_PublicKey
+EVP_PKEY_CTX_ctrl
+EVP_PKEY_CTX_dup
+EVP_PKEY_CTX_free
+EVP_PKEY_CTX_get0_pkey
+EVP_PKEY_CTX_new
+EVP_PKEY_CTX_new_id
+EVP_PKEY_decrypt
+EVP_PKEY_decrypt_init
+EVP_PKEY_derive
+EVP_PKEY_derive_init
+EVP_PKEY_derive_set_peer
+EVP_PKEY_encrypt
+EVP_PKEY_encrypt_init
+EVP_PKEY_keygen
+EVP_PKEY_keygen_init
+EVP_PKEY_sign
+EVP_PKEY_sign_init
+EVP_PKEY_verify
+EVP_PKEY_verify_init
+EVP_PKEY_verify_recover
+EVP_PKEY_verify_recover_init
+dsa_asn1_meth
+ec_pkey_meth
+ec_asn1_meth
+ed25519_pkey_meth
+EVP_PKEY_new_ed25519_private
+EVP_PKEY_new_ed25519_public
+ed25519_asn1_meth
+EVP_PKEY_CTX_get0_rsa_oaep_label
+EVP_PKEY_CTX_get_rsa_mgf1_md
+EVP_PKEY_CTX_get_rsa_oaep_md
+EVP_PKEY_CTX_get_rsa_padding
+EVP_PKEY_CTX_get_rsa_pss_saltlen
+EVP_PKEY_CTX_set0_rsa_oaep_label
+EVP_PKEY_CTX_set_rsa_keygen_bits
+EVP_PKEY_CTX_set_rsa_keygen_pubexp
+EVP_PKEY_CTX_set_rsa_mgf1_md
+EVP_PKEY_CTX_set_rsa_oaep_md
+EVP_PKEY_CTX_set_rsa_padding
+EVP_PKEY_CTX_set_rsa_pss_saltlen
+rsa_pkey_meth
+rsa_asn1_meth
+PKCS5_PBKDF2_HMAC
+PKCS5_PBKDF2_HMAC_SHA1
+EVP_PKEY_print_params
+EVP_PKEY_print_private
+EVP_PKEY_print_public
+EVP_PBE_scrypt
+EVP_SignFinal
+EVP_SignInit
+EVP_SignInit_ex
+EVP_SignUpdate
+EVP_VerifyFinal
+EVP_VerifyInit
+EVP_VerifyInit_ex
+EVP_VerifyUpdate
+HKDF
+HKDF_expand
+HKDF_extract
+PEM_read_DSAPrivateKey
+PEM_read_DSA_PUBKEY
+PEM_read_DSAparams
+PEM_read_ECPrivateKey
+PEM_read_EC_PUBKEY
+PEM_read_PUBKEY
+PEM_read_RSAPrivateKey
+PEM_read_RSAPublicKey
+PEM_read_RSA_PUBKEY
+PEM_read_X509_CRL
+PEM_read_X509_REQ
+PEM_read_bio_DSAPrivateKey
+PEM_read_bio_DSA_PUBKEY
+PEM_read_bio_DSAparams
+PEM_read_bio_ECPrivateKey
+PEM_read_bio_EC_PUBKEY
+PEM_read_bio_PUBKEY
+PEM_read_bio_RSAPrivateKey
+PEM_read_bio_RSAPublicKey
+PEM_read_bio_RSA_PUBKEY
+PEM_read_bio_X509_CRL
+PEM_read_bio_X509_REQ
+PEM_write_DHparams
+PEM_write_DSAPrivateKey
+PEM_write_DSA_PUBKEY
+PEM_write_DSAparams
+PEM_write_ECPrivateKey
+PEM_write_EC_PUBKEY
+PEM_write_PUBKEY
+PEM_write_RSAPrivateKey
+PEM_write_RSAPublicKey
+PEM_write_RSA_PUBKEY
+PEM_write_X509_CRL
+PEM_write_X509_REQ
+PEM_write_X509_REQ_NEW
+PEM_write_bio_DHparams
+PEM_write_bio_DSAPrivateKey
+PEM_write_bio_DSA_PUBKEY
+PEM_write_bio_DSAparams
+PEM_write_bio_ECPrivateKey
+PEM_write_bio_EC_PUBKEY
+PEM_write_bio_PUBKEY
+PEM_write_bio_RSAPrivateKey
+PEM_write_bio_RSAPublicKey
+PEM_write_bio_RSA_PUBKEY
+PEM_write_bio_X509_CRL
+PEM_write_bio_X509_REQ
+PEM_write_bio_X509_REQ_NEW
+PEM_X509_INFO_read
+PEM_X509_INFO_read_bio
+PEM_X509_INFO_write_bio
+PEM_ASN1_read
+PEM_ASN1_write
+PEM_ASN1_write_bio
+PEM_bytes_read_bio
+PEM_def_callback
+PEM_dek_info
+PEM_do_header
+PEM_get_EVP_CIPHER_INFO
+PEM_proc_type
+PEM_read
+PEM_read_bio
+PEM_write
+PEM_write_bio
+PEM_ASN1_read_bio
+PEM_read_PKCS8
+PEM_read_PKCS8_PRIV_KEY_INFO
+PEM_read_bio_PKCS8
+PEM_read_bio_PKCS8_PRIV_KEY_INFO
+PEM_write_PKCS8
+PEM_write_PKCS8PrivateKey
+PEM_write_PKCS8PrivateKey_nid
+PEM_write_PKCS8_PRIV_KEY_INFO
+PEM_write_bio_PKCS8
+PEM_write_bio_PKCS8PrivateKey
+PEM_write_bio_PKCS8PrivateKey_nid
+PEM_write_bio_PKCS8_PRIV_KEY_INFO
+d2i_PKCS8PrivateKey_bio
+d2i_PKCS8PrivateKey_fp
+i2d_PKCS8PrivateKey_bio
+i2d_PKCS8PrivateKey_fp
+i2d_PKCS8PrivateKey_nid_bio
+i2d_PKCS8PrivateKey_nid_fp
+PEM_read_DHparams
+PEM_read_PrivateKey
+PEM_read_bio_DHparams
+PEM_read_bio_PrivateKey
+PEM_write_PrivateKey
+PEM_write_bio_PrivateKey
+PEM_read_X509
+PEM_read_bio_X509
+PEM_write_X509
+PEM_write_bio_X509
+PEM_read_X509_AUX
+PEM_read_bio_X509_AUX
+PEM_write_X509_AUX
+PEM_write_bio_X509_AUX
+ASN1_digest
+ASN1_item_digest
+ASN1_item_sign
+ASN1_item_sign_ctx
+ASN1_STRING_print_ex
+ASN1_STRING_print_ex_fp
+ASN1_STRING_to_UTF8
+X509_NAME_print_ex
+X509_NAME_print_ex_fp
+ASN1_item_verify
+x509_digest_sign_algorithm
+x509_digest_verify_init
+ASN1_generate_nconf
+ASN1_generate_v3
+X509_LOOKUP_hash_dir
+X509_LOOKUP_file
+X509_load_cert_crl_file
+X509_load_cert_file
+X509_load_crl_file
+i2d_PrivateKey
+RSA_PSS_PARAMS_free
+RSA_PSS_PARAMS_it
+RSA_PSS_PARAMS_new
+d2i_RSA_PSS_PARAMS
+i2d_RSA_PSS_PARAMS
+x509_print_rsa_pss_params
+x509_rsa_ctx_to_pss
+x509_rsa_pss_to_ctx
+X509_CRL_print
+X509_CRL_print_fp
+X509_REQ_print
+X509_REQ_print_ex
+X509_REQ_print_fp
+ASN1_GENERALIZEDTIME_print
+ASN1_STRING_print
+ASN1_TIME_print
+ASN1_UTCTIME_print
+X509_NAME_print
+X509_ocspid_print
+X509_print
+X509_print_ex
+X509_print_ex_fp
+X509_print_fp
+X509_signature_print
+X509_CERT_AUX_print
+PKCS8_pkey_get0
+PKCS8_pkey_set0
+X509_signature_dump
+X509_ATTRIBUTE_count
+X509_ATTRIBUTE_create_by_NID
+X509_ATTRIBUTE_create_by_OBJ
+X509_ATTRIBUTE_create_by_txt
+X509_ATTRIBUTE_get0_data
+X509_ATTRIBUTE_get0_object
+X509_ATTRIBUTE_get0_type
+X509_ATTRIBUTE_set1_data
+X509_ATTRIBUTE_set1_object
+X509at_add1_attr
+X509at_add1_attr_by_NID
+X509at_add1_attr_by_OBJ
+X509at_add1_attr_by_txt
+X509at_delete_attr
+X509at_get0_data_by_OBJ
+X509at_get_attr
+X509at_get_attr_by_NID
+X509at_get_attr_by_OBJ
+X509at_get_attr_count
+X509_CRL_check_suiteb
+X509_CRL_cmp
+X509_CRL_match
+X509_NAME_cmp
+X509_NAME_hash
+X509_NAME_hash_old
+X509_chain_check_suiteb
+X509_chain_up_ref
+X509_check_private_key
+X509_cmp
+X509_find_by_issuer_and_serial
+X509_find_by_subject
+X509_get0_pubkey_bitstr
+X509_get_issuer_name
+X509_get_pubkey
+X509_get_serialNumber
+X509_get_subject_name
+X509_issuer_and_serial_cmp
+X509_issuer_and_serial_hash
+X509_issuer_name_cmp
+X509_issuer_name_hash
+X509_issuer_name_hash_old
+X509_subject_name_cmp
+X509_subject_name_hash
+X509_subject_name_hash_old
+X509_STORE_load_locations
+X509_STORE_set_default_paths
+X509_get_default_cert_area
+X509_get_default_cert_dir
+X509_get_default_cert_dir_env
+X509_get_default_cert_file
+X509_get_default_cert_file_env
+X509_get_default_private_dir
+X509_CRL_add1_ext_i2d
+X509_CRL_add_ext
+X509_CRL_delete_ext
+X509_CRL_get_ext
+X509_CRL_get_ext_by_NID
+X509_CRL_get_ext_by_OBJ
+X509_CRL_get_ext_by_critical
+X509_CRL_get_ext_count
+X509_CRL_get_ext_d2i
+X509_REVOKED_add1_ext_i2d
+X509_REVOKED_add_ext
+X509_REVOKED_delete_ext
+X509_REVOKED_get_ext
+X509_REVOKED_get_ext_by_NID
+X509_REVOKED_get_ext_by_OBJ
+X509_REVOKED_get_ext_by_critical
+X509_REVOKED_get_ext_count
+X509_REVOKED_get_ext_d2i
+X509_add1_ext_i2d
+X509_add_ext
+X509_delete_ext
+X509_get_ext
+X509_get_ext_by_NID
+X509_get_ext_by_OBJ
+X509_get_ext_by_critical
+X509_get_ext_count
+X509_get_ext_d2i
+X509_LOOKUP_by_alias
+X509_LOOKUP_by_fingerprint
+X509_LOOKUP_by_issuer_serial
+X509_LOOKUP_by_subject
+X509_LOOKUP_ctrl
+X509_LOOKUP_free
+X509_LOOKUP_init
+X509_LOOKUP_new
+X509_LOOKUP_shutdown
+X509_OBJECT_free_contents
+X509_OBJECT_get0_X509
+X509_OBJECT_get_type
+X509_OBJECT_idx_by_subject
+X509_OBJECT_retrieve_by_subject
+X509_OBJECT_retrieve_match
+X509_OBJECT_up_ref_count
+X509_STORE_CTX_get0_store
+X509_STORE_CTX_get1_issuer
+X509_STORE_add_cert
+X509_STORE_add_crl
+X509_STORE_add_lookup
+X509_STORE_free
+X509_STORE_get0_objects
+X509_STORE_get0_param
+X509_STORE_get1_certs
+X509_STORE_get1_crls
+X509_STORE_get_by_subject
+X509_STORE_new
+X509_STORE_set0_additional_untrusted
+X509_STORE_set1_param
+X509_STORE_set_depth
+X509_STORE_set_flags
+X509_STORE_set_lookup_crls_cb
+X509_STORE_set_purpose
+X509_STORE_set_trust
+X509_STORE_set_verify_cb
+X509_STORE_up_ref
+X509_NAME_oneline
+X509_REQ_to_X509
+X509_REQ_add1_attr
+X509_REQ_add1_attr_by_NID
+X509_REQ_add1_attr_by_OBJ
+X509_REQ_add1_attr_by_txt
+X509_REQ_add_extensions
+X509_REQ_add_extensions_nid
+X509_REQ_check_private_key
+X509_REQ_delete_attr
+X509_REQ_extension_nid
+X509_REQ_get_attr
+X509_REQ_get_attr_by_NID
+X509_REQ_get_attr_by_OBJ
+X509_REQ_get_attr_count
+X509_REQ_get_extension_nids
+X509_REQ_get_extensions
+X509_REQ_get_pubkey
+X509_REQ_set_extension_nids
+X509_to_X509_REQ
+X509_get0_extensions
+X509_get0_notAfter
+X509_get0_notBefore
+X509_set_issuer_name
+X509_set_notAfter
+X509_set_notBefore
+X509_set_pubkey
+X509_set_serialNumber
+X509_set_subject_name
+X509_set_version
+X509_TRUST_add
+X509_TRUST_cleanup
+X509_TRUST_get0
+X509_TRUST_get0_name
+X509_TRUST_get_by_id
+X509_TRUST_get_count
+X509_TRUST_get_flags
+X509_TRUST_get_trust
+X509_TRUST_set
+X509_TRUST_set_default
+X509_check_trust
+X509_verify_cert_error_string
+X509_EXTENSION_create_by_NID
+X509_EXTENSION_create_by_OBJ
+X509_EXTENSION_get_critical
+X509_EXTENSION_get_data
+X509_EXTENSION_get_object
+X509_EXTENSION_set_critical
+X509_EXTENSION_set_data
+X509_EXTENSION_set_object
+X509v3_add_ext
+X509v3_delete_ext
+X509v3_get_ext
+X509v3_get_ext_by_NID
+X509v3_get_ext_by_OBJ
+X509v3_get_ext_by_critical
+X509v3_get_ext_count
+X509_CRL_diff
+X509_STORE_CTX_cleanup
+X509_STORE_CTX_free
+X509_STORE_CTX_get0_current_crl
+X509_STORE_CTX_get0_current_issuer
+X509_STORE_CTX_get0_param
+X509_STORE_CTX_get0_parent_ctx
+X509_STORE_CTX_get0_policy_tree
+X509_STORE_CTX_get0_untrusted
+X509_STORE_CTX_get1_chain
+X509_STORE_CTX_get_chain
+X509_STORE_CTX_get_current_cert
+X509_STORE_CTX_get_error
+X509_STORE_CTX_get_error_depth
+X509_STORE_CTX_get_ex_data
+X509_STORE_CTX_get_ex_new_index
+X509_STORE_CTX_get_explicit_policy
+X509_STORE_CTX_init
+X509_STORE_CTX_new
+X509_STORE_CTX_purpose_inherit
+X509_STORE_CTX_set0_crls
+X509_STORE_CTX_set0_param
+X509_STORE_CTX_set_cert
+X509_STORE_CTX_set_chain
+X509_STORE_CTX_set_default
+X509_STORE_CTX_set_depth
+X509_STORE_CTX_set_error
+X509_STORE_CTX_set_ex_data
+X509_STORE_CTX_set_flags
+X509_STORE_CTX_set_purpose
+X509_STORE_CTX_set_time
+X509_STORE_CTX_set_trust
+X509_STORE_CTX_set_verify_cb
+X509_STORE_CTX_trusted_stack
+X509_STORE_CTX_zero
+X509_cmp_current_time
+X509_cmp_time
+X509_gmtime_adj
+X509_time_adj
+X509_time_adj_ex
+X509_verify_cert
+X509_VERIFY_PARAM_add0_policy
+X509_VERIFY_PARAM_add0_table
+X509_VERIFY_PARAM_add1_host
+X509_VERIFY_PARAM_clear_flags
+X509_VERIFY_PARAM_free
+X509_VERIFY_PARAM_get0
+X509_VERIFY_PARAM_get0_name
+X509_VERIFY_PARAM_get0_peername
+X509_VERIFY_PARAM_get_count
+X509_VERIFY_PARAM_get_depth
+X509_VERIFY_PARAM_get_flags
+X509_VERIFY_PARAM_inherit
+X509_VERIFY_PARAM_lookup
+X509_VERIFY_PARAM_new
+X509_VERIFY_PARAM_set1
+X509_VERIFY_PARAM_set1_email
+X509_VERIFY_PARAM_set1_host
+X509_VERIFY_PARAM_set1_ip
+X509_VERIFY_PARAM_set1_ip_asc
+X509_VERIFY_PARAM_set1_name
+X509_VERIFY_PARAM_set1_policies
+X509_VERIFY_PARAM_set_depth
+X509_VERIFY_PARAM_set_flags
+X509_VERIFY_PARAM_set_hostflags
+X509_VERIFY_PARAM_set_purpose
+X509_VERIFY_PARAM_set_time
+X509_VERIFY_PARAM_set_trust
+X509_VERIFY_PARAM_table_cleanup
+X509_CRL_set_issuer_name
+X509_CRL_set_lastUpdate
+X509_CRL_set_nextUpdate
+X509_CRL_set_version
+X509_CRL_sort
+X509_CRL_up_ref
+X509_REVOKED_set_revocationDate
+X509_REVOKED_set_serialNumber
+X509_NAME_ENTRY_create_by_NID
+X509_NAME_ENTRY_create_by_OBJ
+X509_NAME_ENTRY_create_by_txt
+X509_NAME_ENTRY_get_data
+X509_NAME_ENTRY_get_object
+X509_NAME_ENTRY_set_data
+X509_NAME_ENTRY_set_object
+X509_NAME_add_entry
+X509_NAME_add_entry_by_NID
+X509_NAME_add_entry_by_OBJ
+X509_NAME_add_entry_by_txt
+X509_NAME_delete_entry
+X509_NAME_entry_count
+X509_NAME_get_entry
+X509_NAME_get_index_by_NID
+X509_NAME_get_index_by_OBJ
+X509_NAME_get_text_by_NID
+X509_NAME_get_text_by_OBJ
+X509_REQ_set_pubkey
+X509_REQ_set_subject_name
+X509_REQ_set_version
+NETSCAPE_SPKI_b64_decode
+NETSCAPE_SPKI_b64_encode
+NETSCAPE_SPKI_get_pubkey
+NETSCAPE_SPKI_set_pubkey
+X509_ALGORS_it
+X509_ALGOR_cmp
+X509_ALGOR_dup
+X509_ALGOR_free
+X509_ALGOR_get0
+X509_ALGOR_it
+X509_ALGOR_new
+X509_ALGOR_set0
+X509_ALGOR_set_md
+d2i_X509_ALGOR
+d2i_X509_ALGORS
+i2d_X509_ALGOR
+i2d_X509_ALGORS
+NETSCAPE_SPKI_sign
+NETSCAPE_SPKI_verify
+X509_CRL_digest
+X509_CRL_sign
+X509_CRL_sign_ctx
+X509_NAME_digest
+X509_REQ_digest
+X509_REQ_sign
+X509_REQ_sign_ctx
+X509_REQ_verify
+X509_digest
+X509_pubkey_digest
+X509_sign
+X509_sign_ctx
+X509_verify
+d2i_DSAPrivateKey_bio
+d2i_DSAPrivateKey_fp
+d2i_DSA_PUBKEY_bio
+d2i_DSA_PUBKEY_fp
+d2i_ECPrivateKey_bio
+d2i_ECPrivateKey_fp
+d2i_EC_PUBKEY_bio
+d2i_EC_PUBKEY_fp
+d2i_PKCS8_PRIV_KEY_INFO_bio
+d2i_PKCS8_PRIV_KEY_INFO_fp
+d2i_PKCS8_bio
+d2i_PKCS8_fp
+d2i_PUBKEY_bio
+d2i_PUBKEY_fp
+d2i_PrivateKey_bio
+d2i_PrivateKey_fp
+d2i_RSAPrivateKey_bio
+d2i_RSAPrivateKey_fp
+d2i_RSAPublicKey_bio
+d2i_RSAPublicKey_fp
+d2i_RSA_PUBKEY_bio
+d2i_RSA_PUBKEY_fp
+d2i_X509_CRL_bio
+d2i_X509_CRL_fp
+d2i_X509_REQ_bio
+d2i_X509_REQ_fp
+d2i_X509_bio
+d2i_X509_fp
+i2d_DSAPrivateKey_bio
+i2d_DSAPrivateKey_fp
+i2d_DSA_PUBKEY_bio
+i2d_DSA_PUBKEY_fp
+i2d_ECPrivateKey_bio
+i2d_ECPrivateKey_fp
+i2d_EC_PUBKEY_bio
+i2d_EC_PUBKEY_fp
+i2d_PKCS8PrivateKeyInfo_bio
+i2d_PKCS8PrivateKeyInfo_fp
+i2d_PKCS8_PRIV_KEY_INFO_bio
+i2d_PKCS8_PRIV_KEY_INFO_fp
+i2d_PKCS8_bio
+i2d_PKCS8_fp
+i2d_PUBKEY_bio
+i2d_PUBKEY_fp
+i2d_PrivateKey_bio
+i2d_PrivateKey_fp
+i2d_RSAPrivateKey_bio
+i2d_RSAPrivateKey_fp
+i2d_RSAPublicKey_bio
+i2d_RSAPublicKey_fp
+i2d_RSA_PUBKEY_bio
+i2d_RSA_PUBKEY_fp
+i2d_X509_CRL_bio
+i2d_X509_CRL_fp
+i2d_X509_REQ_bio
+i2d_X509_REQ_fp
+i2d_X509_bio
+i2d_X509_fp
+X509_ATTRIBUTE_SET_it
+X509_ATTRIBUTE_create
+X509_ATTRIBUTE_dup
+X509_ATTRIBUTE_free
+X509_ATTRIBUTE_it
+X509_ATTRIBUTE_new
+d2i_X509_ATTRIBUTE
+i2d_X509_ATTRIBUTE
+X509_CRL_INFO_free
+X509_CRL_INFO_it
+X509_CRL_INFO_new
+X509_CRL_METHOD_free
+X509_CRL_METHOD_new
+X509_CRL_add0_revoked
+X509_CRL_dup
+X509_CRL_free
+X509_CRL_get0_by_cert
+X509_CRL_get0_by_serial
+X509_CRL_get_meth_data
+X509_CRL_it
+X509_CRL_new
+X509_CRL_set_default_method
+X509_CRL_set_meth_data
+X509_CRL_verify
+X509_REVOKED_dup
+X509_REVOKED_free
+X509_REVOKED_it
+X509_REVOKED_new
+d2i_X509_CRL
+d2i_X509_CRL_INFO
+d2i_X509_REVOKED
+i2d_X509_CRL
+i2d_X509_CRL_INFO
+i2d_X509_REVOKED
+X509_EXTENSIONS_it
+X509_EXTENSION_dup
+X509_EXTENSION_free
+X509_EXTENSION_it
+X509_EXTENSION_new
+d2i_X509_EXTENSION
+d2i_X509_EXTENSIONS
+i2d_X509_EXTENSION
+i2d_X509_EXTENSIONS
+X509_INFO_free
+X509_INFO_new
+X509_NAME_ENTRIES_it
+X509_NAME_ENTRY_dup
+X509_NAME_ENTRY_free
+X509_NAME_ENTRY_it
+X509_NAME_ENTRY_new
+X509_NAME_ENTRY_set
+X509_NAME_INTERNAL_it
+X509_NAME_dup
+X509_NAME_free
+X509_NAME_get0_der
+X509_NAME_it
+X509_NAME_new
+X509_NAME_set
+d2i_X509_NAME
+d2i_X509_NAME_ENTRY
+i2d_X509_NAME
+i2d_X509_NAME_ENTRY
+X509_PKEY_free
+X509_PKEY_new
+X509_PUBKEY_free
+X509_PUBKEY_get
+X509_PUBKEY_get0_param
+X509_PUBKEY_it
+X509_PUBKEY_new
+X509_PUBKEY_set
+X509_PUBKEY_set0_param
+d2i_DSA_PUBKEY
+d2i_EC_PUBKEY
+d2i_PUBKEY
+d2i_RSA_PUBKEY
+d2i_X509_PUBKEY
+i2d_DSA_PUBKEY
+i2d_EC_PUBKEY
+i2d_PUBKEY
+i2d_RSA_PUBKEY
+i2d_X509_PUBKEY
+X509_REQ_INFO_free
+X509_REQ_INFO_it
+X509_REQ_INFO_new
+X509_REQ_dup
+X509_REQ_free
+X509_REQ_it
+X509_REQ_new
+d2i_X509_REQ
+d2i_X509_REQ_INFO
+i2d_X509_REQ
+i2d_X509_REQ_INFO
+X509_SIG_free
+X509_SIG_it
+X509_SIG_new
+d2i_X509_SIG
+i2d_X509_SIG
+NETSCAPE_SPKAC_free
+NETSCAPE_SPKAC_it
+NETSCAPE_SPKAC_new
+NETSCAPE_SPKI_free
+NETSCAPE_SPKI_it
+NETSCAPE_SPKI_new
+d2i_NETSCAPE_SPKAC
+d2i_NETSCAPE_SPKI
+i2d_NETSCAPE_SPKAC
+i2d_NETSCAPE_SPKI
+X509_VAL_free
+X509_VAL_it
+X509_VAL_new
+d2i_X509_VAL
+i2d_X509_VAL
+X509_CINF_free
+X509_CINF_it
+X509_CINF_new
+X509_dup
+X509_free
+X509_get0_signature
+X509_get_ex_data
+X509_get_ex_new_index
+X509_get_signature_nid
+X509_it
+X509_new
+X509_parse_from_buffer
+X509_set_ex_data
+X509_up_ref
+d2i_X509
+d2i_X509_AUX
+d2i_X509_CINF
+i2d_X509
+i2d_X509_AUX
+i2d_X509_CINF
+X509_CERT_AUX_free
+X509_CERT_AUX_it
+X509_CERT_AUX_new
+X509_add1_reject_object
+X509_add1_trust_object
+X509_alias_get0
+X509_alias_set1
+X509_keyid_get0
+X509_keyid_set1
+X509_reject_clear
+X509_trust_clear
+d2i_X509_CERT_AUX
+i2d_X509_CERT_AUX
+policy_cache_find_data
+policy_cache_free
+policy_cache_set
+policy_data_free
+policy_data_new
+X509_policy_level_get0_node
+X509_policy_level_node_count
+X509_policy_node_get0_parent
+X509_policy_node_get0_policy
+X509_policy_node_get0_qualifiers
+X509_policy_tree_get0_level
+X509_policy_tree_get0_policies
+X509_policy_tree_get0_user_policies
+X509_policy_tree_level_count
+policy_cache_set_mapping
+level_add_node
+level_find_node
+policy_node_cmp_new
+policy_node_free
+policy_node_match
+tree_find_sk
+X509_policy_check
+X509_policy_tree_free
+v3_akey_id
+AUTHORITY_KEYID_free
+AUTHORITY_KEYID_it
+AUTHORITY_KEYID_new
+d2i_AUTHORITY_KEYID
+i2d_AUTHORITY_KEYID
+GENERAL_NAME_print
+a2i_GENERAL_NAME
+i2v_GENERAL_NAME
+i2v_GENERAL_NAMES
+v2i_GENERAL_NAME
+v2i_GENERAL_NAMES
+v2i_GENERAL_NAME_ex
+v3_alt
+BASIC_CONSTRAINTS_free
+BASIC_CONSTRAINTS_it
+BASIC_CONSTRAINTS_new
+d2i_BASIC_CONSTRAINTS
+i2d_BASIC_CONSTRAINTS
+v3_bcons
+i2v_ASN1_BIT_STRING
+v2i_ASN1_BIT_STRING
+v3_key_usage
+v3_nscert
+X509V3_EXT_CRL_add_nconf
+X509V3_EXT_REQ_add_nconf
+X509V3_EXT_add_nconf
+X509V3_EXT_add_nconf_sk
+X509V3_EXT_i2d
+X509V3_EXT_nconf
+X509V3_EXT_nconf_nid
+X509V3_get_section
+X509V3_get_string
+X509V3_section_free
+X509V3_set_ctx
+X509V3_set_nconf
+X509V3_string_free
+CERTIFICATEPOLICIES_free
+CERTIFICATEPOLICIES_it
+CERTIFICATEPOLICIES_new
+NOTICEREF_free
+NOTICEREF_it
+NOTICEREF_new
+POLICYINFO_free
+POLICYINFO_it
+POLICYINFO_new
+POLICYQUALINFO_free
+POLICYQUALINFO_it
+POLICYQUALINFO_new
+USERNOTICE_free
+USERNOTICE_it
+USERNOTICE_new
+X509_POLICY_NODE_print
+d2i_CERTIFICATEPOLICIES
+d2i_NOTICEREF
+d2i_POLICYINFO
+d2i_POLICYQUALINFO
+d2i_USERNOTICE
+i2d_CERTIFICATEPOLICIES
+i2d_NOTICEREF
+i2d_POLICYINFO
+i2d_POLICYQUALINFO
+i2d_USERNOTICE
+v3_cpols
+CRL_DIST_POINTS_free
+CRL_DIST_POINTS_it
+CRL_DIST_POINTS_new
+DIST_POINT_NAME_free
+DIST_POINT_NAME_it
+DIST_POINT_NAME_new
+DIST_POINT_free
+DIST_POINT_it
+DIST_POINT_new
+DIST_POINT_set_dpname
+ISSUING_DIST_POINT_free
+ISSUING_DIST_POINT_it
+ISSUING_DIST_POINT_new
+d2i_CRL_DIST_POINTS
+d2i_DIST_POINT
+d2i_DIST_POINT_NAME
+d2i_ISSUING_DIST_POINT
+i2d_CRL_DIST_POINTS
+i2d_DIST_POINT
+i2d_DIST_POINT_NAME
+i2d_ISSUING_DIST_POINT
+v3_crld
+v3_freshest_crl
+v3_idp
+i2s_ASN1_ENUMERATED_TABLE
+v3_crl_reason
+EXTENDED_KEY_USAGE_free
+EXTENDED_KEY_USAGE_it
+EXTENDED_KEY_USAGE_new
+d2i_EXTENDED_KEY_USAGE
+i2d_EXTENDED_KEY_USAGE
+v3_ext_ku
+v3_ocsp_accresp
+EDIPARTYNAME_free
+EDIPARTYNAME_it
+EDIPARTYNAME_new
+GENERAL_NAMES_free
+GENERAL_NAMES_it
+GENERAL_NAMES_new
+GENERAL_NAME_cmp
+GENERAL_NAME_dup
+GENERAL_NAME_free
+GENERAL_NAME_get0_otherName
+GENERAL_NAME_get0_value
+GENERAL_NAME_it
+GENERAL_NAME_new
+GENERAL_NAME_set0_othername
+GENERAL_NAME_set0_value
+OTHERNAME_cmp
+OTHERNAME_free
+OTHERNAME_it
+OTHERNAME_new
+d2i_EDIPARTYNAME
+d2i_GENERAL_NAME
+d2i_GENERAL_NAMES
+d2i_OTHERNAME
+i2d_EDIPARTYNAME
+i2d_GENERAL_NAME
+i2d_GENERAL_NAMES
+i2d_OTHERNAME
+v3_ns_ia5_list
+ACCESS_DESCRIPTION_free
+ACCESS_DESCRIPTION_it
+ACCESS_DESCRIPTION_new
+AUTHORITY_INFO_ACCESS_free
+AUTHORITY_INFO_ACCESS_it
+AUTHORITY_INFO_ACCESS_new
+d2i_ACCESS_DESCRIPTION
+d2i_AUTHORITY_INFO_ACCESS
+i2a_ACCESS_DESCRIPTION
+i2d_ACCESS_DESCRIPTION
+i2d_AUTHORITY_INFO_ACCESS
+v3_info
+v3_sinfo
+v3_crl_num
+v3_delta_crl
+v3_inhibit_anyp
+X509V3_EXT_add
+X509V3_EXT_add_alias
+X509V3_EXT_add_list
+X509V3_EXT_cleanup
+X509V3_EXT_d2i
+X509V3_EXT_free
+X509V3_EXT_get
+X509V3_EXT_get_nid
+X509V3_add1_i2d
+X509V3_add_standard_extensions
+X509V3_get_d2i
+GENERAL_SUBTREE_free
+GENERAL_SUBTREE_it
+GENERAL_SUBTREE_new
+NAME_CONSTRAINTS_check
+NAME_CONSTRAINTS_free
+NAME_CONSTRAINTS_it
+NAME_CONSTRAINTS_new
+v3_name_constraints
+v3_pci
+PROXY_CERT_INFO_EXTENSION_free
+PROXY_CERT_INFO_EXTENSION_it
+PROXY_CERT_INFO_EXTENSION_new
+PROXY_POLICY_free
+PROXY_POLICY_it
+PROXY_POLICY_new
+d2i_PROXY_CERT_INFO_EXTENSION
+d2i_PROXY_POLICY
+i2d_PROXY_CERT_INFO_EXTENSION
+i2d_PROXY_POLICY
+POLICY_CONSTRAINTS_free
+POLICY_CONSTRAINTS_it
+POLICY_CONSTRAINTS_new
+v3_policy_constraints
+PKEY_USAGE_PERIOD_free
+PKEY_USAGE_PERIOD_it
+PKEY_USAGE_PERIOD_new
+d2i_PKEY_USAGE_PERIOD
+i2d_PKEY_USAGE_PERIOD
+v3_pkey_usage_period
+POLICY_MAPPINGS_it
+POLICY_MAPPING_free
+POLICY_MAPPING_it
+POLICY_MAPPING_new
+v3_policy_mappings
+X509V3_EXT_print
+X509V3_EXT_print_fp
+X509V3_EXT_val_prn
+X509V3_extensions_print
+X509_PURPOSE_add
+X509_PURPOSE_cleanup
+X509_PURPOSE_get0
+X509_PURPOSE_get0_name
+X509_PURPOSE_get0_sname
+X509_PURPOSE_get_by_id
+X509_PURPOSE_get_by_sname
+X509_PURPOSE_get_count
+X509_PURPOSE_get_id
+X509_PURPOSE_get_trust
+X509_PURPOSE_set
+X509_check_akid
+X509_check_ca
+X509_check_issued
+X509_check_purpose
+X509_supported_extension
+i2s_ASN1_OCTET_STRING
+s2i_ASN1_OCTET_STRING
+v3_skey_id
+SXNETID_free
+SXNETID_it
+SXNETID_new
+SXNET_add_id_INTEGER
+SXNET_add_id_asc
+SXNET_add_id_ulong
+SXNET_free
+SXNET_get_id_INTEGER
+SXNET_get_id_asc
+SXNET_get_id_ulong
+SXNET_it
+SXNET_new
+d2i_SXNET
+d2i_SXNETID
+i2d_SXNET
+i2d_SXNETID
+v3_sxnet
+X509V3_NAME_from_section
+X509V3_add_value
+X509V3_add_value_bool
+X509V3_add_value_bool_nf
+X509V3_add_value_int
+X509V3_add_value_uchar
+X509V3_conf_free
+X509V3_get_value_bool
+X509V3_get_value_int
+X509V3_parse_list
+X509_REQ_get1_email
+X509_check_email
+X509_check_host
+X509_check_ip
+X509_check_ip_asc
+X509_email_free
+X509_get1_email
+X509_get1_ocsp
+a2i_IPADDRESS
+a2i_IPADDRESS_NC
+a2i_ipadd
+hex_to_string
+i2s_ASN1_ENUMERATED
+i2s_ASN1_INTEGER
+name_cmp
+s2i_ASN1_INTEGER
+string_to_hex
+PKCS7_get_raw_certificates
+pkcs7_bundle
+pkcs7_parse_header
+PKCS7_bundle_CRLs
+PKCS7_bundle_certificates
+PKCS7_get_CRLs
+PKCS7_get_PEM_CRLs
+PKCS7_get_PEM_certificates
+PKCS7_get_certificates
+PKCS8_marshal_encrypted_private_key
+PKCS8_parse_encrypted_private_key
+pkcs12_key_gen
+pkcs8_pbe_decrypt
+EVP_PKCS82PKEY
+EVP_PKEY2PKCS8
+PKCS12_PBE_add
+PKCS12_free
+PKCS12_get_key_and_certs
+PKCS12_parse
+PKCS12_verify_mac
+PKCS8_PRIV_KEY_INFO_free
+PKCS8_PRIV_KEY_INFO_it
+PKCS8_PRIV_KEY_INFO_new
+PKCS8_decrypt
+PKCS8_encrypt
+d2i_PKCS12
+d2i_PKCS12_bio
+d2i_PKCS12_fp
+d2i_PKCS8_PRIV_KEY_INFO
+i2d_PKCS8_PRIV_KEY_INFO
+PKCS5_pbe2_decrypt_init
+PKCS5_pbe2_encrypt_init
diff --git a/src/objective-c/tests/Connectivity/Podfile b/src/objective-c/tests/Connectivity/Podfile
index c7127b3e78..2c2344334c 100644
--- a/src/objective-c/tests/Connectivity/Podfile
+++ b/src/objective-c/tests/Connectivity/Podfile
@@ -10,7 +10,7 @@ target 'ConnectivityTestingApp' do
pod 'gRPC-ProtoRPC/CFStream', :path => GRPC_LOCAL_SRC
pod 'gRPC-RxLibrary', :path => GRPC_LOCAL_SRC
pod 'Protobuf', :path => "#{GRPC_LOCAL_SRC}/third_party/protobuf"
- pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c"
+ pod 'BoringSSL-GRPC', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c"
end
pre_install do |installer|
diff --git a/src/objective-c/tests/CronetUnitTests/CronetUnitTests.m b/src/objective-c/tests/CronetUnitTests/CronetUnitTests.m
index a6dfb154a4..75a669da4d 100644
--- a/src/objective-c/tests/CronetUnitTests/CronetUnitTests.m
+++ b/src/objective-c/tests/CronetUnitTests/CronetUnitTests.m
@@ -37,7 +37,9 @@
#import "test/core/end2end/data/ssl_test_data.h"
#import "test/core/util/test_config.h"
-#import <BoringSSL/openssl/ssl.h>
+#import "src/core/tsi/grpc_shadow_boringssl.h"
+
+#import <openssl/ssl.h>
static void drain_cq(grpc_completion_queue *cq) {
grpc_event ev;
diff --git a/src/objective-c/tests/Podfile b/src/objective-c/tests/Podfile
index 3c2a34fb49..507d251b48 100644
--- a/src/objective-c/tests/Podfile
+++ b/src/objective-c/tests/Podfile
@@ -21,7 +21,7 @@ GRPC_LOCAL_SRC = '../../..'
pod '!ProtoCompiler', :path => "#{GRPC_LOCAL_SRC}/src/objective-c"
pod '!ProtoCompiler-gRPCPlugin', :path => "#{GRPC_LOCAL_SRC}/src/objective-c"
- pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true
+ pod 'BoringSSL-GRPC', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true
pod 'gRPC', :path => GRPC_LOCAL_SRC
pod 'gRPC-Core', :path => GRPC_LOCAL_SRC
@@ -47,7 +47,7 @@ end
pod '!ProtoCompiler', :path => "#{GRPC_LOCAL_SRC}/src/objective-c"
pod '!ProtoCompiler-gRPCPlugin', :path => "#{GRPC_LOCAL_SRC}/src/objective-c"
- pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true
+ pod 'BoringSSL-GRPC', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true
pod 'gRPC/CFStream', :path => GRPC_LOCAL_SRC
pod 'gRPC-Core/CFStream-Implementation', :path => GRPC_LOCAL_SRC
@@ -62,7 +62,7 @@ end
CronetUnitTests
).each do |target_name|
target target_name do
- pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true
+ pod 'BoringSSL-GRPC', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true
pod 'CronetFramework', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c"
pod 'gRPC-Core', :path => GRPC_LOCAL_SRC
pod 'gRPC-Core/Cronet-Interface', :path => GRPC_LOCAL_SRC
diff --git a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj
index ea1066219d..0e0e8babc0 100644
--- a/src/objective-c/tests/Tests.xcodeproj/project.pbxproj
+++ b/src/objective-c/tests/Tests.xcodeproj/project.pbxproj
@@ -1716,6 +1716,14 @@
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "COCOAPODS=1",
+ "$(inherited)",
+ "PB_FIELD_32BIT=1",
+ "PB_NO_PACKED_STRUCTS=1",
+ "GRPC_SHADOW_BORINGSSL_SYMBOLS=1",
+ );
INFOPLIST_FILE = CronetUnitTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
diff --git a/src/objective-c/tests/version.h b/src/objective-c/tests/version.h
index d532eed245..82833102ad 100644
--- a/src/objective-c/tests/version.h
+++ b/src/objective-c/tests/version.h
@@ -22,5 +22,5 @@
// instead. This file can be regenerated from the template by running
// `tools/buildgen/generate_projects.sh`.
-#define GRPC_OBJC_VERSION_STRING @"1.15.0-dev"
+#define GRPC_OBJC_VERSION_STRING @"1.16.0-dev"
#define GRPC_C_VERSION_STRING @"6.0.0-dev"
diff --git a/src/php/composer.json b/src/php/composer.json
index 91913d73d2..f31423f8c0 100644
--- a/src/php/composer.json
+++ b/src/php/composer.json
@@ -2,7 +2,7 @@
"name": "grpc/grpc-dev",
"description": "gRPC library for PHP - for Developement use only",
"license": "Apache-2.0",
- "version": "1.15.0",
+ "version": "1.16.0",
"require": {
"php": ">=5.5.0",
"google/protobuf": "^v3.3.0"
diff --git a/src/php/ext/grpc/version.h b/src/php/ext/grpc/version.h
index 99dd9d68f0..469a48e782 100644
--- a/src/php/ext/grpc/version.h
+++ b/src/php/ext/grpc/version.h
@@ -20,6 +20,6 @@
#ifndef VERSION_H
#define VERSION_H
-#define PHP_GRPC_VERSION "1.15.0dev"
+#define PHP_GRPC_VERSION "1.16.0dev"
#endif /* VERSION_H */
diff --git a/src/proto/grpc/testing/control.proto b/src/proto/grpc/testing/control.proto
index 57592662c4..a4a9c8fe57 100644
--- a/src/proto/grpc/testing/control.proto
+++ b/src/proto/grpc/testing/control.proto
@@ -111,6 +111,10 @@ message ClientConfig {
// Use coalescing API when possible.
bool use_coalesce_api = 19;
+
+ // If 0, disabled. Else, specifies the period between gathering latency
+ // medians in milliseconds.
+ int32 median_latency_collection_interval_millis = 20;
}
message ClientStatus { ClientStats stats = 1; }
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
index e3c1c8215c..38fd9e78b2 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
@@ -282,3 +282,41 @@ def server_credentials_ssl_dynamic_cert_config(initial_cert_config,
# C-core assumes ownership of c_options
credentials.c_credentials = grpc_ssl_server_credentials_create_with_options(c_options)
return credentials
+
+cdef grpc_ssl_certificate_config_reload_status _server_cert_config_fetcher_wrapper(
+ void* user_data, grpc_ssl_server_certificate_config **config) with gil:
+ # This is a credentials.ServerCertificateConfig
+ cdef ServerCertificateConfig cert_config = None
+ if not user_data:
+ raise ValueError('internal error: user_data must be specified')
+ credentials = <ServerCredentials>user_data
+ if not credentials.initial_cert_config_fetched:
+ # C-core is asking for the initial cert config
+ credentials.initial_cert_config_fetched = True
+ cert_config = credentials.initial_cert_config._certificate_configuration
+ else:
+ user_cb = credentials.cert_config_fetcher
+ try:
+ cert_config_wrapper = user_cb()
+ except Exception:
+ _LOGGER.exception('Error fetching certificate config')
+ return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
+ if cert_config_wrapper is None:
+ return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED
+ elif not isinstance(
+ cert_config_wrapper, grpc.ServerCertificateConfiguration):
+ _LOGGER.error(
+ 'Error fetching certificate configuration: certificate '
+ 'configuration must be of type grpc.ServerCertificateConfiguration, '
+ 'not %s' % type(cert_config_wrapper).__name__)
+ return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
+ else:
+ cert_config = cert_config_wrapper._certificate_configuration
+ config[0] = <grpc_ssl_server_certificate_config*>cert_config.c_cert_config
+ # our caller will assume ownership of memory, so we have to recreate
+ # a copy of c_cert_config here
+ cert_config.c_cert_config = grpc_ssl_server_certificate_config_create(
+ cert_config.c_pem_root_certs, cert_config.c_ssl_pem_key_cert_pairs,
+ cert_config.c_ssl_pem_key_cert_pairs_count)
+ return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW
+
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi
index 0d2516977b..433ae1f374 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi
@@ -37,8 +37,6 @@ _GRPC_ENABLE_FORK_SUPPORT = (
os.environ.get('GRPC_ENABLE_FORK_SUPPORT', '0')
.lower() in _TRUE_VALUES)
-_GRPC_POLL_STRATEGY = os.environ.get('GRPC_POLL_STRATEGY')
-
cdef void __prefork() nogil:
with gil:
with _fork_state.fork_in_progress_condition:
@@ -82,13 +80,6 @@ cdef void __postfork_child() nogil:
def fork_handlers_and_grpc_init():
grpc_init()
if _GRPC_ENABLE_FORK_SUPPORT:
- # TODO(ericgribkoff) epoll1 is default for grpcio distribution. Decide whether to expose
- # grpc_get_poll_strategy_name() from ev_posix.cc to get actual polling choice.
- if _GRPC_POLL_STRATEGY is not None and _GRPC_POLL_STRATEGY != "epoll1":
- _LOGGER.error(
- 'gRPC Python fork support is only compatible with the epoll1 '
- 'polling engine')
- return
with _fork_state.fork_handler_registered_lock:
if not _fork_state.fork_handler_registered:
pthread_atfork(&__prefork, &__postfork_parent, &__postfork_child)
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/server.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/server.pyx.pxi
index db59d468dc..ce701724fd 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/server.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/server.pyx.pxi
@@ -20,43 +20,6 @@ import grpc
_LOGGER = logging.getLogger(__name__)
-cdef grpc_ssl_certificate_config_reload_status _server_cert_config_fetcher_wrapper(
- void* user_data, grpc_ssl_server_certificate_config **config) with gil:
- # This is a credentials.ServerCertificateConfig
- cdef ServerCertificateConfig cert_config = None
- if not user_data:
- raise ValueError('internal error: user_data must be specified')
- credentials = <ServerCredentials>user_data
- if not credentials.initial_cert_config_fetched:
- # C-core is asking for the initial cert config
- credentials.initial_cert_config_fetched = True
- cert_config = credentials.initial_cert_config._certificate_configuration
- else:
- user_cb = credentials.cert_config_fetcher
- try:
- cert_config_wrapper = user_cb()
- except Exception:
- _LOGGER.exception('Error fetching certificate config')
- return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
- if cert_config_wrapper is None:
- return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED
- elif not isinstance(
- cert_config_wrapper, grpc.ServerCertificateConfiguration):
- _LOGGER.error(
- 'Error fetching certificate configuration: certificate '
- 'configuration must be of type grpc.ServerCertificateConfiguration, '
- 'not %s' % type(cert_config_wrapper).__name__)
- return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
- else:
- cert_config = cert_config_wrapper._certificate_configuration
- config[0] = <grpc_ssl_server_certificate_config*>cert_config.c_cert_config
- # our caller will assume ownership of memory, so we have to recreate
- # a copy of c_cert_config here
- cert_config.c_cert_config = grpc_ssl_server_certificate_config_create(
- cert_config.c_pem_root_certs, cert_config.c_ssl_pem_key_cert_pairs,
- cert_config.c_ssl_pem_key_cert_pairs_count)
- return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW
-
cdef class Server:
def __cinit__(self, object arguments):
diff --git a/src/python/grpcio/grpc/_grpcio_metadata.py b/src/python/grpcio/grpc/_grpcio_metadata.py
index c33911ebc1..24e1557578 100644
--- a/src/python/grpcio/grpc/_grpcio_metadata.py
+++ b/src/python/grpcio/grpc/_grpcio_metadata.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc/_grpcio_metadata.py.template`!!!
-__version__ = """1.15.0.dev0"""
+__version__ = """1.16.0.dev0"""
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index 6e6d756eec..0f68e823d7 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -82,6 +82,7 @@ CORE_SOURCE_FILES = [
'src/core/lib/http/format_request.cc',
'src/core/lib/http/httpcli.cc',
'src/core/lib/http/parser.cc',
+ 'src/core/lib/iomgr/buffer_list.cc',
'src/core/lib/iomgr/call_combiner.cc',
'src/core/lib/iomgr/combiner.cc',
'src/core/lib/iomgr/endpoint.cc',
@@ -102,6 +103,7 @@ CORE_SOURCE_FILES = [
'src/core/lib/iomgr/gethostname_fallback.cc',
'src/core/lib/iomgr/gethostname_host_name_max.cc',
'src/core/lib/iomgr/gethostname_sysconf.cc',
+ 'src/core/lib/iomgr/internal_errqueue.cc',
'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.cc',
'src/core/lib/iomgr/iomgr_custom.cc',
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index 9337800a33..6ffe1eb827 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
-VERSION = '1.15.0.dev0'
+VERSION = '1.16.0.dev0'
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index 3b84f7a4c5..e080bf2cbc 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
-VERSION = '1.15.0.dev0'
+VERSION = '1.16.0.dev0'
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index 7b0e48ea23..4b3b95fee9 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
-VERSION = '1.15.0.dev0'
+VERSION = '1.16.0.dev0'
diff --git a/src/python/grpcio_testing/grpc_version.py b/src/python/grpcio_testing/grpc_version.py
index df9953fa25..c12aa153a4 100644
--- a/src/python/grpcio_testing/grpc_version.py
+++ b/src/python/grpcio_testing/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_testing/grpc_version.py.template`!!!
-VERSION = '1.15.0.dev0'
+VERSION = '1.16.0.dev0'
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index b2cf129e4f..f4b8a34a46 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
-VERSION = '1.15.0.dev0'
+VERSION = '1.16.0.dev0'
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index 5c21a5b168..0c3e1ef734 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -14,5 +14,5 @@
# GRPC contains the General RPC module.
module GRPC
- VERSION = '1.15.0.dev'
+ VERSION = '1.16.0.dev'
end
diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb
index 1b5e2c362b..03d977c064 100644
--- a/src/ruby/tools/version.rb
+++ b/src/ruby/tools/version.rb
@@ -14,6 +14,6 @@
module GRPC
module Tools
- VERSION = '1.15.0.dev'
+ VERSION = '1.16.0.dev'
end
end
diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template
index 5098f351db..f912154301 100644
--- a/templates/gRPC-Core.podspec.template
+++ b/templates/gRPC-Core.podspec.template
@@ -174,8 +174,9 @@
ss.header_mappings_dir = '.'
ss.libraries = 'z'
ss.dependency "#{s.name}/Interface", version
- ss.dependency 'BoringSSL', '~> 10.0'
+ ss.dependency 'BoringSSL-GRPC', '0.0.1'
ss.dependency 'nanopb', '~> 0.3'
+ ss.compiler_flags = '-DGRPC_SHADOW_BORINGSSL_SYMBOLS'
# To save you from scrolling, this is the last part of the podspec.
ss.source_files = ${ruby_multiline_list(grpc_private_files(libs), 22)}
diff --git a/templates/src/core/tsi/grpc_shadow_boringssl.h.template b/templates/src/core/tsi/grpc_shadow_boringssl.h.template
new file mode 100644
index 0000000000..0b5e612881
--- /dev/null
+++ b/templates/src/core/tsi/grpc_shadow_boringssl.h.template
@@ -0,0 +1,40 @@
+%YAML 1.2
+--- |
+ <%!
+ def expand_symbol_list(symbol_list):
+ return '\n'.join('#define %s GRPC_SHADOW_%s' % (symbol, symbol) for symbol in symbol_list)
+ %>
+ /*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+ // This file is autogenerated from a template file. Please make
+ // modifications to
+ // `templates/src/objective-c/tsi/grpc_shadow_boringssl.h.template`
+ // instead. This file can be regenerated from the template by running
+ // `tools/buildgen/generate_projects.sh`.
+
+ #ifndef GRPC_CORE_TSI_GRPC_SHADOW_BORINGSSL_H
+ #define GRPC_CORE_TSI_GRPC_SHADOW_BORINGSSL_H
+
+ #ifdef GRPC_SHADOW_BORINGSSL_SYMBOLS
+
+ ${expand_symbol_list(settings.grpc_shadow_boringssl_symbols)}
+
+ #endif /* GRPC_SHADOW_BORINGSSL_SYMBOLS */
+
+ #endif /* GRPC_CORE_TSI_GRPC_SHADOW_BORINGSSL_H */
diff --git a/templates/src/objective-c/BoringSSL-GRPC.podspec.template b/templates/src/objective-c/BoringSSL-GRPC.podspec.template
new file mode 100644
index 0000000000..986216fdbf
--- /dev/null
+++ b/templates/src/objective-c/BoringSSL-GRPC.podspec.template
@@ -0,0 +1,1561 @@
+%YAML 1.2
+--- |
+ <%!
+ def expand_symbol_list(symbol_list):
+ return ',\n '.join("'#define %s GRPC_SHADOW_%s'" % (symbol, symbol) for symbol in symbol_list)
+ %>
+ # This file has been automatically generated from a template file.
+ # Please make modifications to
+ # `templates/src/objective-c/BoringSSL-GRPC.podspec.template` instead. This
+ # file can be regenerated from the template by running
+ # `tools/buildgen/generate_projects.sh`.
+
+ # BoringSSL CocoaPods podspec
+
+ # Copyright 2015, Google Inc.
+ # All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are
+ # met:
+ #
+ # * Redistributions of source code must retain the above copyright
+ # notice, this list of conditions and the following disclaimer.
+ # * Redistributions in binary form must reproduce the above
+ # copyright notice, this list of conditions and the following disclaimer
+ # in the documentation and/or other materials provided with the
+ # distribution.
+ # * Neither the name of Google Inc. nor the names of its
+ # contributors may be used to endorse or promote products derived from
+ # this software without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Pod::Spec.new do |s|
+ s.name = 'BoringSSL-GRPC'
+ version = '0.0.1'
+ s.version = version
+ s.summary = 'BoringSSL is a fork of OpenSSL that is designed to meet Google\'s needs.'
+ # Adapted from the homepage:
+ s.description = <<-DESC
+ BoringSSL is a fork of OpenSSL that is designed to meet Google's needs.
+
+ Although BoringSSL is an open source project, it is not intended for general use, as OpenSSL is.
+ We don't recommend that third parties depend upon it. Doing so is likely to be frustrating
+ because there are no guarantees of API stability. Only the latest version of this pod is
+ supported, and every new version is a new major version.
+
+ We update Google libraries and programs that use BoringSSL as needed when deciding to make API
+ changes. This allows us to mostly avoid compromises in the name of compatibility. It works for
+ us, but it may not work for you.
+
+ As a Cocoapods pod, it has the advantage over OpenSSL's pods that the library doesn't need to
+ be precompiled. This eliminates the 10 - 20 minutes of wait the first time a user does "pod
+ install", lets it be used as a dynamic framework (pending solution of Cocoapods' issue #4605),
+ and works with bitcode automatically. It's also thought to be smaller than OpenSSL (which takes
+ 1MB - 2MB per ARM architecture), but we don't have specific numbers yet.
+
+ BoringSSL arose because Google used OpenSSL for many years in various ways and, over time, built
+ up a large number of patches that were maintained while tracking upstream OpenSSL. As Google's
+ product portfolio became more complex, more copies of OpenSSL sprung up and the effort involved
+ in maintaining all these patches in multiple places was growing steadily.
+
+ Currently BoringSSL is the SSL library in Chrome/Chromium, Android (but it's not part of the
+ NDK) and a number of other apps/programs.
+ DESC
+ s.homepage = 'https://github.com/google/boringssl'
+ s.license = { :type => 'Mixed', :file => 'LICENSE' }
+ # "The name and email addresses of the library maintainers, not the Podspec maintainer."
+ s.authors = 'Adam Langley', 'David Benjamin', 'Matt Braithwaite'
+
+ s.source = {
+ :git => 'https://github.com/google/boringssl.git',
+ :commit => "b29b21a81b32ec273f118f589f46d56ad3332420",
+ }
+
+ s.ios.deployment_target = '5.0'
+ s.osx.deployment_target = '10.7'
+
+ name = 'openssl'
+
+ # When creating a dynamic framework, name it openssl.framework instead of BoringSSL.framework.
+ # This lets users write their includes like `#include <openssl/ssl.h>` as opposed to `#include
+ # <BoringSSL/ssl.h>`.
+ s.module_name = name
+
+ # When creating a dynamic framework, copy the headers under `include/openssl/` into the root of
+ # the `Headers/` directory of the framework (i.e., not under `Headers/include/openssl`).
+ #
+ # TODO(jcanizales): Debug why this doesn't work on macOS.
+ s.header_mappings_dir = 'include/openssl'
+
+ # The above has an undesired effect when creating a static library: It forces users to write
+ # includes like `#include <BoringSSL/ssl.h>`. `s.header_dir` adds a path prefix to that, and
+ # because Cocoapods lets omit the pod name when including headers of static libraries, the
+ # following lets users write `#include <openssl/ssl.h>`.
+ s.header_dir = name
+
+ # The module map and umbrella header created automatically by Cocoapods don't work for C libraries
+ # like this one. The following file, and a correct umbrella header, are created on the fly by the
+ # `prepare_command` of this pod.
+ s.module_map = 'include/openssl/BoringSSL.modulemap'
+
+ # We don't need to inhibit all warnings; only -Wno-shorten-64-to-32. But Cocoapods' linter doesn't
+ # want that for some reason.
+ s.compiler_flags = '-DOPENSSL_NO_ASM', '-GCC_WARN_INHIBIT_ALL_WARNINGS', '-w'
+ s.requires_arc = false
+
+ # Like many other C libraries, BoringSSL has its public headers under `include/<libname>/` and its
+ # sources and private headers in other directories outside `include/`. Cocoapods' linter doesn't
+ # allow any header to be listed outside the `header_mappings_dir` (even though doing so works in
+ # practice). Because we need our `header_mappings_dir` to be `include/openssl/` for the reason
+ # mentioned above, we work around the linter limitation by dividing the pod into two subspecs, one
+ # for public headers and the other for implementation. Each gets its own `header_mappings_dir`,
+ # making the linter happy.
+ s.subspec 'Interface' do |ss|
+ ss.header_mappings_dir = 'include/openssl'
+ ss.source_files = 'include/openssl/*.h'
+ end
+ s.subspec 'Implementation' do |ss|
+ ss.header_mappings_dir = '.'
+ ss.source_files = 'ssl/*.{h,cc}',
+ 'ssl/**/*.{h,cc}',
+ '*.{h,c}',
+ 'crypto/*.{h,c}',
+ 'crypto/**/*.{h,c}',
+ 'third_party/fiat/*.{h,c}'
+ ss.private_header_files = 'ssl/*.h',
+ 'ssl/**/*.h',
+ '*.h',
+ 'crypto/*.h',
+ 'crypto/**/*.h'
+ # bcm.c includes other source files, creating duplicated symbols. Since it is not used, we
+ # explicitly exclude it from the pod.
+ # TODO (mxyan): Work with BoringSSL team to remove this hack.
+ ss.exclude_files = 'crypto/fipsmodule/bcm.c',
+ '**/*_test.*',
+ '**/test_*.*',
+ '**/test/*.*'
+
+ ss.dependency "#{s.name}/Interface", version
+ end
+
+ s.prepare_command = <<-END_OF_COMMAND
+ # Add a module map and an umbrella header
+ cat > include/openssl/umbrella.h <<EOF
+ #include "ssl.h"
+ #include "crypto.h"
+ #include "aes.h"
+ /* The following macros are defined by base.h. The latter is the first file included by the
+ other headers. */
+ #if defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
+ # include "arm_arch.h"
+ #endif
+ #include "asn1.h"
+ #include "asn1_mac.h"
+ #include "asn1t.h"
+ #include "blowfish.h"
+ #include "cast.h"
+ #include "chacha.h"
+ #include "cmac.h"
+ #include "conf.h"
+ #include "cpu.h"
+ #include "curve25519.h"
+ #include "des.h"
+ #include "dtls1.h"
+ #include "hkdf.h"
+ #include "md4.h"
+ #include "md5.h"
+ #include "obj_mac.h"
+ #include "objects.h"
+ #include "opensslv.h"
+ #include "ossl_typ.h"
+ #include "pkcs12.h"
+ #include "pkcs7.h"
+ #include "pkcs8.h"
+ #include "poly1305.h"
+ #include "rand.h"
+ #include "rc4.h"
+ #include "ripemd.h"
+ #include "safestack.h"
+ #include "srtp.h"
+ #include "x509.h"
+ #include "x509v3.h"
+ EOF
+ cat > include/openssl/BoringSSL.modulemap <<EOF
+ framework module openssl {
+ umbrella header "umbrella.h"
+ textual header "arm_arch.h"
+ export *
+ module * { export * }
+ }
+ EOF
+
+ # This is a bit ridiculous, but requiring people to install Go in order to build is slightly
+ # more ridiculous IMO.
+ # TODO(jcanizales): Translate err_data_generate.go into a Bash or Ruby script.
+ cat > err_data.c <<EOF
+ /* Copyright (c) 2015, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+ /* This file was generated by err_data_generate.go. */
+
+ #include <openssl/base.h>
+ #include <openssl/err.h>
+ #include <openssl/type_check.h>
+
+
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_NONE == 1, library_values_changed_1);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_SYS == 2, library_values_changed_2);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_BN == 3, library_values_changed_3);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_RSA == 4, library_values_changed_4);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_DH == 5, library_values_changed_5);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_EVP == 6, library_values_changed_6);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_BUF == 7, library_values_changed_7);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_OBJ == 8, library_values_changed_8);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_PEM == 9, library_values_changed_9);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_DSA == 10, library_values_changed_10);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_X509 == 11, library_values_changed_11);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_ASN1 == 12, library_values_changed_12);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_CONF == 13, library_values_changed_13);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_CRYPTO == 14, library_values_changed_14);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_EC == 15, library_values_changed_15);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_SSL == 16, library_values_changed_16);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_BIO == 17, library_values_changed_17);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_PKCS7 == 18, library_values_changed_18);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_PKCS8 == 19, library_values_changed_19);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_X509V3 == 20, library_values_changed_20);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_RAND == 21, library_values_changed_21);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_ENGINE == 22, library_values_changed_22);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_OCSP == 23, library_values_changed_23);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_UI == 24, library_values_changed_24);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_COMP == 25, library_values_changed_25);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_ECDSA == 26, library_values_changed_26);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_ECDH == 27, library_values_changed_27);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_HMAC == 28, library_values_changed_28);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_DIGEST == 29, library_values_changed_29);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_CIPHER == 30, library_values_changed_30);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_HKDF == 31, library_values_changed_31);
+ OPENSSL_COMPILE_ASSERT(ERR_LIB_USER == 32, library_values_changed_32);
+ OPENSSL_COMPILE_ASSERT(ERR_NUM_LIBS == 33, library_values_changed_num);
+
+ const uint32_t kOpenSSLReasonValues[] = {
+ 0xc320838,
+ 0xc328852,
+ 0xc330861,
+ 0xc338871,
+ 0xc340880,
+ 0xc348899,
+ 0xc3508a5,
+ 0xc3588c2,
+ 0xc3608e2,
+ 0xc3688f0,
+ 0xc370900,
+ 0xc37890d,
+ 0xc38091d,
+ 0xc388928,
+ 0xc39093e,
+ 0xc39894d,
+ 0xc3a0961,
+ 0xc3a8845,
+ 0xc3b00ea,
+ 0xc3b88d4,
+ 0x10320845,
+ 0x10329513,
+ 0x1033151f,
+ 0x10339538,
+ 0x1034154b,
+ 0x10348eed,
+ 0x10350c5e,
+ 0x1035955e,
+ 0x10361573,
+ 0x10369586,
+ 0x103715a5,
+ 0x103795be,
+ 0x103815d3,
+ 0x103895f1,
+ 0x10391600,
+ 0x1039961c,
+ 0x103a1637,
+ 0x103a9646,
+ 0x103b1662,
+ 0x103b967d,
+ 0x103c1694,
+ 0x103c80ea,
+ 0x103d16a5,
+ 0x103d96b9,
+ 0x103e16d8,
+ 0x103e96e7,
+ 0x103f16fe,
+ 0x103f9711,
+ 0x10400c22,
+ 0x10409724,
+ 0x10411742,
+ 0x10419755,
+ 0x1042176f,
+ 0x1042977f,
+ 0x10431793,
+ 0x104397a9,
+ 0x104417c1,
+ 0x104497d6,
+ 0x104517ea,
+ 0x104597fc,
+ 0x104605fb,
+ 0x1046894d,
+ 0x10471811,
+ 0x10479828,
+ 0x1048183d,
+ 0x1048984b,
+ 0x10490e4f,
+ 0x14320c05,
+ 0x14328c13,
+ 0x14330c22,
+ 0x14338c34,
+ 0x143400ac,
+ 0x143480ea,
+ 0x18320083,
+ 0x18328f43,
+ 0x183300ac,
+ 0x18338f59,
+ 0x18340f6d,
+ 0x183480ea,
+ 0x18350f82,
+ 0x18358f9a,
+ 0x18360faf,
+ 0x18368fc3,
+ 0x18370fe7,
+ 0x18378ffd,
+ 0x18381011,
+ 0x18389021,
+ 0x18390a73,
+ 0x18399031,
+ 0x183a1059,
+ 0x183a907f,
+ 0x183b0c6a,
+ 0x183b90b4,
+ 0x183c10c6,
+ 0x183c90d1,
+ 0x183d10e1,
+ 0x183d90f2,
+ 0x183e1103,
+ 0x183e9115,
+ 0x183f113e,
+ 0x183f9157,
+ 0x1840116f,
+ 0x184086d3,
+ 0x184110a2,
+ 0x1841906d,
+ 0x1842108c,
+ 0x18429046,
+ 0x20321196,
+ 0x243211a2,
+ 0x24328993,
+ 0x243311b4,
+ 0x243391c1,
+ 0x243411ce,
+ 0x243491e0,
+ 0x243511ef,
+ 0x2435920c,
+ 0x24361219,
+ 0x24369227,
+ 0x24371235,
+ 0x24379243,
+ 0x2438124c,
+ 0x24389259,
+ 0x2439126c,
+ 0x28320c52,
+ 0x28328c6a,
+ 0x28330c22,
+ 0x28338c7d,
+ 0x28340c5e,
+ 0x283480ac,
+ 0x283500ea,
+ 0x2c322c30,
+ 0x2c329283,
+ 0x2c332c3e,
+ 0x2c33ac50,
+ 0x2c342c64,
+ 0x2c34ac76,
+ 0x2c352c91,
+ 0x2c35aca3,
+ 0x2c362cb6,
+ 0x2c36832d,
+ 0x2c372cc3,
+ 0x2c37acd5,
+ 0x2c382cfa,
+ 0x2c38ad11,
+ 0x2c392d1f,
+ 0x2c39ad2f,
+ 0x2c3a2d41,
+ 0x2c3aad55,
+ 0x2c3b2d66,
+ 0x2c3bad85,
+ 0x2c3c1295,
+ 0x2c3c92ab,
+ 0x2c3d2d99,
+ 0x2c3d92c4,
+ 0x2c3e2db6,
+ 0x2c3eadc4,
+ 0x2c3f2ddc,
+ 0x2c3fadf4,
+ 0x2c402e01,
+ 0x2c409196,
+ 0x2c412e12,
+ 0x2c41ae25,
+ 0x2c42116f,
+ 0x2c42ae36,
+ 0x2c430720,
+ 0x2c43ad77,
+ 0x2c442ce8,
+ 0x30320000,
+ 0x30328015,
+ 0x3033001f,
+ 0x30338038,
+ 0x3034004a,
+ 0x30348064,
+ 0x3035006b,
+ 0x30358083,
+ 0x30360094,
+ 0x303680ac,
+ 0x303700b9,
+ 0x303780c8,
+ 0x303800ea,
+ 0x303880f7,
+ 0x3039010a,
+ 0x30398125,
+ 0x303a013a,
+ 0x303a814e,
+ 0x303b0162,
+ 0x303b8173,
+ 0x303c018c,
+ 0x303c81a9,
+ 0x303d01b7,
+ 0x303d81cb,
+ 0x303e01db,
+ 0x303e81f4,
+ 0x303f0204,
+ 0x303f8217,
+ 0x30400226,
+ 0x30408232,
+ 0x30410247,
+ 0x30418257,
+ 0x3042026e,
+ 0x3042827b,
+ 0x3043028e,
+ 0x3043829d,
+ 0x304402b2,
+ 0x304482d3,
+ 0x304502e6,
+ 0x304582f9,
+ 0x30460312,
+ 0x3046832d,
+ 0x3047034a,
+ 0x30478363,
+ 0x30480371,
+ 0x30488382,
+ 0x30490391,
+ 0x304983a9,
+ 0x304a03bb,
+ 0x304a83cf,
+ 0x304b03ee,
+ 0x304b8401,
+ 0x304c040c,
+ 0x304c841d,
+ 0x304d0429,
+ 0x304d843f,
+ 0x304e044d,
+ 0x304e8463,
+ 0x304f0475,
+ 0x304f8487,
+ 0x3050049a,
+ 0x305084ad,
+ 0x305104be,
+ 0x305184ce,
+ 0x305204e6,
+ 0x305284fb,
+ 0x30530513,
+ 0x30538527,
+ 0x3054053f,
+ 0x30548558,
+ 0x30550571,
+ 0x3055858e,
+ 0x30560599,
+ 0x305685b1,
+ 0x305705c1,
+ 0x305785d2,
+ 0x305805e5,
+ 0x305885fb,
+ 0x30590604,
+ 0x30598619,
+ 0x305a062c,
+ 0x305a863b,
+ 0x305b065b,
+ 0x305b866a,
+ 0x305c068b,
+ 0x305c86a7,
+ 0x305d06b3,
+ 0x305d86d3,
+ 0x305e06ef,
+ 0x305e8700,
+ 0x305f0716,
+ 0x305f8720,
+ 0x34320b63,
+ 0x34328b77,
+ 0x34330b94,
+ 0x34338ba7,
+ 0x34340bb6,
+ 0x34348bef,
+ 0x34350bd3,
+ 0x3c320083,
+ 0x3c328ca7,
+ 0x3c330cc0,
+ 0x3c338cdb,
+ 0x3c340cf8,
+ 0x3c348d22,
+ 0x3c350d3d,
+ 0x3c358d63,
+ 0x3c360d7c,
+ 0x3c368d94,
+ 0x3c370da5,
+ 0x3c378db3,
+ 0x3c380dc0,
+ 0x3c388dd4,
+ 0x3c390c6a,
+ 0x3c398de8,
+ 0x3c3a0dfc,
+ 0x3c3a890d,
+ 0x3c3b0e0c,
+ 0x3c3b8e27,
+ 0x3c3c0e39,
+ 0x3c3c8e6c,
+ 0x3c3d0e76,
+ 0x3c3d8e8a,
+ 0x3c3e0e98,
+ 0x3c3e8ebd,
+ 0x3c3f0c93,
+ 0x3c3f8ea6,
+ 0x3c4000ac,
+ 0x3c4080ea,
+ 0x3c410d13,
+ 0x3c418d52,
+ 0x3c420e4f,
+ 0x403218a4,
+ 0x403298ba,
+ 0x403318e8,
+ 0x403398f2,
+ 0x40341909,
+ 0x40349927,
+ 0x40351937,
+ 0x40359949,
+ 0x40361956,
+ 0x40369962,
+ 0x40371977,
+ 0x40379989,
+ 0x40381994,
+ 0x403899a6,
+ 0x40390eed,
+ 0x403999b6,
+ 0x403a19c9,
+ 0x403a99ea,
+ 0x403b19fb,
+ 0x403b9a0b,
+ 0x403c0064,
+ 0x403c8083,
+ 0x403d1a8f,
+ 0x403d9aa5,
+ 0x403e1ab4,
+ 0x403e9aec,
+ 0x403f1b06,
+ 0x403f9b14,
+ 0x40401b29,
+ 0x40409b3d,
+ 0x40411b5a,
+ 0x40419b75,
+ 0x40421b8e,
+ 0x40429ba1,
+ 0x40431bb5,
+ 0x40439bcd,
+ 0x40441be4,
+ 0x404480ac,
+ 0x40451bf9,
+ 0x40459c0b,
+ 0x40461c2f,
+ 0x40469c4f,
+ 0x40471c5d,
+ 0x40479c84,
+ 0x40481cc1,
+ 0x40489cda,
+ 0x40491cf1,
+ 0x40499d0b,
+ 0x404a1d22,
+ 0x404a9d40,
+ 0x404b1d58,
+ 0x404b9d6f,
+ 0x404c1d85,
+ 0x404c9d97,
+ 0x404d1db8,
+ 0x404d9dda,
+ 0x404e1dee,
+ 0x404e9dfb,
+ 0x404f1e28,
+ 0x404f9e51,
+ 0x40501e8c,
+ 0x40509ea0,
+ 0x40511ebb,
+ 0x40521ecb,
+ 0x40529eef,
+ 0x40531f07,
+ 0x40539f1a,
+ 0x40541f2f,
+ 0x40549f52,
+ 0x40551f60,
+ 0x40559f7d,
+ 0x40561f8a,
+ 0x40569fa3,
+ 0x40571fbb,
+ 0x40579fce,
+ 0x40581fe3,
+ 0x4058a00a,
+ 0x40592039,
+ 0x4059a066,
+ 0x405a207a,
+ 0x405aa08a,
+ 0x405b20a2,
+ 0x405ba0b3,
+ 0x405c20c6,
+ 0x405ca105,
+ 0x405d2112,
+ 0x405da129,
+ 0x405e2167,
+ 0x405e8ab1,
+ 0x405f2188,
+ 0x405fa195,
+ 0x406021a3,
+ 0x4060a1c5,
+ 0x40612209,
+ 0x4061a241,
+ 0x40622258,
+ 0x4062a269,
+ 0x4063227a,
+ 0x4063a28f,
+ 0x406422a6,
+ 0x4064a2d2,
+ 0x406522ed,
+ 0x4065a304,
+ 0x4066231c,
+ 0x4066a346,
+ 0x40672371,
+ 0x4067a392,
+ 0x406823b9,
+ 0x4068a3da,
+ 0x4069240c,
+ 0x4069a43a,
+ 0x406a245b,
+ 0x406aa47b,
+ 0x406b2603,
+ 0x406ba626,
+ 0x406c263c,
+ 0x406ca8b7,
+ 0x406d28e6,
+ 0x406da90e,
+ 0x406e293c,
+ 0x406ea989,
+ 0x406f29a8,
+ 0x406fa9e0,
+ 0x407029f3,
+ 0x4070aa10,
+ 0x40710800,
+ 0x4071aa22,
+ 0x40722a35,
+ 0x4072aa4e,
+ 0x40732a66,
+ 0x40739482,
+ 0x40742a7a,
+ 0x4074aa94,
+ 0x40752aa5,
+ 0x4075aab9,
+ 0x40762ac7,
+ 0x40769259,
+ 0x40772aec,
+ 0x4077ab0e,
+ 0x40782b29,
+ 0x4078ab62,
+ 0x40792b79,
+ 0x4079ab8f,
+ 0x407a2b9b,
+ 0x407aabae,
+ 0x407b2bc3,
+ 0x407babd5,
+ 0x407c2c06,
+ 0x407cac0f,
+ 0x407d23f5,
+ 0x407d9e61,
+ 0x407e2b3e,
+ 0x407ea01a,
+ 0x407f1c71,
+ 0x407f9a31,
+ 0x40801e38,
+ 0x40809c99,
+ 0x40811edd,
+ 0x40819e12,
+ 0x40822927,
+ 0x40829a17,
+ 0x40831ff5,
+ 0x4083a2b7,
+ 0x40841cad,
+ 0x4084a052,
+ 0x408520d7,
+ 0x4085a1ed,
+ 0x40862149,
+ 0x40869e7b,
+ 0x4087296d,
+ 0x4087a21e,
+ 0x40881a78,
+ 0x4088a3a5,
+ 0x40891ac7,
+ 0x40899a54,
+ 0x408a265c,
+ 0x408a9862,
+ 0x408b2bea,
+ 0x408ba9bd,
+ 0x408c20e7,
+ 0x408c987e,
+ 0x41f4252e,
+ 0x41f925c0,
+ 0x41fe24b3,
+ 0x41fea6a8,
+ 0x41ff2799,
+ 0x42032547,
+ 0x42082569,
+ 0x4208a5a5,
+ 0x42092497,
+ 0x4209a5df,
+ 0x420a24ee,
+ 0x420aa4ce,
+ 0x420b250e,
+ 0x420ba587,
+ 0x420c27b5,
+ 0x420ca675,
+ 0x420d268f,
+ 0x420da6c6,
+ 0x421226e0,
+ 0x4217277c,
+ 0x4217a722,
+ 0x421c2744,
+ 0x421f26ff,
+ 0x422127cc,
+ 0x4226275f,
+ 0x422b289b,
+ 0x422ba849,
+ 0x422c2883,
+ 0x422ca808,
+ 0x422d27e7,
+ 0x422da868,
+ 0x422e282e,
+ 0x422ea954,
+ 0x4432072b,
+ 0x4432873a,
+ 0x44330746,
+ 0x44338754,
+ 0x44340767,
+ 0x44348778,
+ 0x4435077f,
+ 0x44358789,
+ 0x4436079c,
+ 0x443687b2,
+ 0x443707c4,
+ 0x443787d1,
+ 0x443807e0,
+ 0x443887e8,
+ 0x44390800,
+ 0x4439880e,
+ 0x443a0821,
+ 0x48321283,
+ 0x48329295,
+ 0x483312ab,
+ 0x483392c4,
+ 0x4c3212e9,
+ 0x4c3292f9,
+ 0x4c33130c,
+ 0x4c33932c,
+ 0x4c3400ac,
+ 0x4c3480ea,
+ 0x4c351338,
+ 0x4c359346,
+ 0x4c361362,
+ 0x4c369375,
+ 0x4c371384,
+ 0x4c379392,
+ 0x4c3813a7,
+ 0x4c3893b3,
+ 0x4c3913d3,
+ 0x4c3993fd,
+ 0x4c3a1416,
+ 0x4c3a942f,
+ 0x4c3b05fb,
+ 0x4c3b9448,
+ 0x4c3c145a,
+ 0x4c3c9469,
+ 0x4c3d1482,
+ 0x4c3d8c45,
+ 0x4c3e14db,
+ 0x4c3e9491,
+ 0x4c3f14fd,
+ 0x4c3f9259,
+ 0x4c4014a7,
+ 0x4c4092d5,
+ 0x4c4114cb,
+ 0x50322e48,
+ 0x5032ae57,
+ 0x50332e62,
+ 0x5033ae72,
+ 0x50342e8b,
+ 0x5034aea5,
+ 0x50352eb3,
+ 0x5035aec9,
+ 0x50362edb,
+ 0x5036aef1,
+ 0x50372f0a,
+ 0x5037af1d,
+ 0x50382f35,
+ 0x5038af46,
+ 0x50392f5b,
+ 0x5039af6f,
+ 0x503a2f8f,
+ 0x503aafa5,
+ 0x503b2fbd,
+ 0x503bafcf,
+ 0x503c2feb,
+ 0x503cb002,
+ 0x503d301b,
+ 0x503db031,
+ 0x503e303e,
+ 0x503eb054,
+ 0x503f3066,
+ 0x503f8382,
+ 0x50403079,
+ 0x5040b089,
+ 0x504130a3,
+ 0x5041b0b2,
+ 0x504230cc,
+ 0x5042b0e9,
+ 0x504330f9,
+ 0x5043b109,
+ 0x50443118,
+ 0x5044843f,
+ 0x5045312c,
+ 0x5045b14a,
+ 0x5046315d,
+ 0x5046b173,
+ 0x50473185,
+ 0x5047b19a,
+ 0x504831c0,
+ 0x5048b1ce,
+ 0x504931e1,
+ 0x5049b1f6,
+ 0x504a320c,
+ 0x504ab21c,
+ 0x504b323c,
+ 0x504bb24f,
+ 0x504c3272,
+ 0x504cb2a0,
+ 0x504d32b2,
+ 0x504db2cf,
+ 0x504e32ea,
+ 0x504eb306,
+ 0x504f3318,
+ 0x504fb32f,
+ 0x5050333e,
+ 0x505086ef,
+ 0x50513351,
+ 0x58320f2b,
+ 0x68320eed,
+ 0x68328c6a,
+ 0x68330c7d,
+ 0x68338efb,
+ 0x68340f0b,
+ 0x683480ea,
+ 0x6c320ec9,
+ 0x6c328c34,
+ 0x6c330ed4,
+ 0x74320a19,
+ 0x743280ac,
+ 0x74330c45,
+ 0x7832097e,
+ 0x78328993,
+ 0x7833099f,
+ 0x78338083,
+ 0x783409ae,
+ 0x783489c3,
+ 0x783509e2,
+ 0x78358a04,
+ 0x78360a19,
+ 0x78368a2f,
+ 0x78370a3f,
+ 0x78378a60,
+ 0x78380a73,
+ 0x78388a85,
+ 0x78390a92,
+ 0x78398ab1,
+ 0x783a0ac6,
+ 0x783a8ad4,
+ 0x783b0ade,
+ 0x783b8af2,
+ 0x783c0b09,
+ 0x783c8b1e,
+ 0x783d0b35,
+ 0x783d8b4a,
+ 0x783e0aa0,
+ 0x783e8a52,
+ 0x7c321185,
+ };
+
+ const size_t kOpenSSLReasonValuesLen = sizeof(kOpenSSLReasonValues) / sizeof(kOpenSSLReasonValues[0]);
+
+ const char kOpenSSLReasonStringData[] =
+ "ASN1_LENGTH_MISMATCH\\0"
+ "AUX_ERROR\\0"
+ "BAD_GET_ASN1_OBJECT_CALL\\0"
+ "BAD_OBJECT_HEADER\\0"
+ "BMPSTRING_IS_WRONG_LENGTH\\0"
+ "BN_LIB\\0"
+ "BOOLEAN_IS_WRONG_LENGTH\\0"
+ "BUFFER_TOO_SMALL\\0"
+ "CONTEXT_NOT_INITIALISED\\0"
+ "DECODE_ERROR\\0"
+ "DEPTH_EXCEEDED\\0"
+ "DIGEST_AND_KEY_TYPE_NOT_SUPPORTED\\0"
+ "ENCODE_ERROR\\0"
+ "ERROR_GETTING_TIME\\0"
+ "EXPECTING_AN_ASN1_SEQUENCE\\0"
+ "EXPECTING_AN_INTEGER\\0"
+ "EXPECTING_AN_OBJECT\\0"
+ "EXPECTING_A_BOOLEAN\\0"
+ "EXPECTING_A_TIME\\0"
+ "EXPLICIT_LENGTH_MISMATCH\\0"
+ "EXPLICIT_TAG_NOT_CONSTRUCTED\\0"
+ "FIELD_MISSING\\0"
+ "FIRST_NUM_TOO_LARGE\\0"
+ "HEADER_TOO_LONG\\0"
+ "ILLEGAL_BITSTRING_FORMAT\\0"
+ "ILLEGAL_BOOLEAN\\0"
+ "ILLEGAL_CHARACTERS\\0"
+ "ILLEGAL_FORMAT\\0"
+ "ILLEGAL_HEX\\0"
+ "ILLEGAL_IMPLICIT_TAG\\0"
+ "ILLEGAL_INTEGER\\0"
+ "ILLEGAL_NESTED_TAGGING\\0"
+ "ILLEGAL_NULL\\0"
+ "ILLEGAL_NULL_VALUE\\0"
+ "ILLEGAL_OBJECT\\0"
+ "ILLEGAL_OPTIONAL_ANY\\0"
+ "ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE\\0"
+ "ILLEGAL_TAGGED_ANY\\0"
+ "ILLEGAL_TIME_VALUE\\0"
+ "INTEGER_NOT_ASCII_FORMAT\\0"
+ "INTEGER_TOO_LARGE_FOR_LONG\\0"
+ "INVALID_BIT_STRING_BITS_LEFT\\0"
+ "INVALID_BMPSTRING_LENGTH\\0"
+ "INVALID_DIGIT\\0"
+ "INVALID_MODIFIER\\0"
+ "INVALID_NUMBER\\0"
+ "INVALID_OBJECT_ENCODING\\0"
+ "INVALID_SEPARATOR\\0"
+ "INVALID_TIME_FORMAT\\0"
+ "INVALID_UNIVERSALSTRING_LENGTH\\0"
+ "INVALID_UTF8STRING\\0"
+ "LIST_ERROR\\0"
+ "MISSING_ASN1_EOS\\0"
+ "MISSING_EOC\\0"
+ "MISSING_SECOND_NUMBER\\0"
+ "MISSING_VALUE\\0"
+ "MSTRING_NOT_UNIVERSAL\\0"
+ "MSTRING_WRONG_TAG\\0"
+ "NESTED_ASN1_ERROR\\0"
+ "NESTED_ASN1_STRING\\0"
+ "NON_HEX_CHARACTERS\\0"
+ "NOT_ASCII_FORMAT\\0"
+ "NOT_ENOUGH_DATA\\0"
+ "NO_MATCHING_CHOICE_TYPE\\0"
+ "NULL_IS_WRONG_LENGTH\\0"
+ "OBJECT_NOT_ASCII_FORMAT\\0"
+ "ODD_NUMBER_OF_CHARS\\0"
+ "SECOND_NUMBER_TOO_LARGE\\0"
+ "SEQUENCE_LENGTH_MISMATCH\\0"
+ "SEQUENCE_NOT_CONSTRUCTED\\0"
+ "SEQUENCE_OR_SET_NEEDS_CONFIG\\0"
+ "SHORT_LINE\\0"
+ "STREAMING_NOT_SUPPORTED\\0"
+ "STRING_TOO_LONG\\0"
+ "STRING_TOO_SHORT\\0"
+ "TAG_VALUE_TOO_HIGH\\0"
+ "TIME_NOT_ASCII_FORMAT\\0"
+ "TOO_LONG\\0"
+ "TYPE_NOT_CONSTRUCTED\\0"
+ "TYPE_NOT_PRIMITIVE\\0"
+ "UNEXPECTED_EOC\\0"
+ "UNIVERSALSTRING_IS_WRONG_LENGTH\\0"
+ "UNKNOWN_FORMAT\\0"
+ "UNKNOWN_MESSAGE_DIGEST_ALGORITHM\\0"
+ "UNKNOWN_SIGNATURE_ALGORITHM\\0"
+ "UNKNOWN_TAG\\0"
+ "UNSUPPORTED_ANY_DEFINED_BY_TYPE\\0"
+ "UNSUPPORTED_PUBLIC_KEY_TYPE\\0"
+ "UNSUPPORTED_TYPE\\0"
+ "WRONG_PUBLIC_KEY_TYPE\\0"
+ "WRONG_TAG\\0"
+ "WRONG_TYPE\\0"
+ "BAD_FOPEN_MODE\\0"
+ "BROKEN_PIPE\\0"
+ "CONNECT_ERROR\\0"
+ "ERROR_SETTING_NBIO\\0"
+ "INVALID_ARGUMENT\\0"
+ "IN_USE\\0"
+ "KEEPALIVE\\0"
+ "NBIO_CONNECT_ERROR\\0"
+ "NO_HOSTNAME_SPECIFIED\\0"
+ "NO_PORT_SPECIFIED\\0"
+ "NO_SUCH_FILE\\0"
+ "NULL_PARAMETER\\0"
+ "SYS_LIB\\0"
+ "UNABLE_TO_CREATE_SOCKET\\0"
+ "UNINITIALIZED\\0"
+ "UNSUPPORTED_METHOD\\0"
+ "WRITE_TO_READ_ONLY_BIO\\0"
+ "ARG2_LT_ARG3\\0"
+ "BAD_ENCODING\\0"
+ "BAD_RECIPROCAL\\0"
+ "BIGNUM_TOO_LONG\\0"
+ "BITS_TOO_SMALL\\0"
+ "CALLED_WITH_EVEN_MODULUS\\0"
+ "DIV_BY_ZERO\\0"
+ "EXPAND_ON_STATIC_BIGNUM_DATA\\0"
+ "INPUT_NOT_REDUCED\\0"
+ "INVALID_INPUT\\0"
+ "INVALID_RANGE\\0"
+ "NEGATIVE_NUMBER\\0"
+ "NOT_A_SQUARE\\0"
+ "NOT_INITIALIZED\\0"
+ "NO_INVERSE\\0"
+ "PRIVATE_KEY_TOO_LARGE\\0"
+ "P_IS_NOT_PRIME\\0"
+ "TOO_MANY_ITERATIONS\\0"
+ "TOO_MANY_TEMPORARY_VARIABLES\\0"
+ "AES_KEY_SETUP_FAILED\\0"
+ "BAD_DECRYPT\\0"
+ "BAD_KEY_LENGTH\\0"
+ "CTRL_NOT_IMPLEMENTED\\0"
+ "CTRL_OPERATION_NOT_IMPLEMENTED\\0"
+ "DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH\\0"
+ "INITIALIZATION_ERROR\\0"
+ "INPUT_NOT_INITIALIZED\\0"
+ "INVALID_AD_SIZE\\0"
+ "INVALID_KEY_LENGTH\\0"
+ "INVALID_NONCE\\0"
+ "INVALID_NONCE_SIZE\\0"
+ "INVALID_OPERATION\\0"
+ "IV_TOO_LARGE\\0"
+ "NO_CIPHER_SET\\0"
+ "NO_DIRECTION_SET\\0"
+ "OUTPUT_ALIASES_INPUT\\0"
+ "TAG_TOO_LARGE\\0"
+ "TOO_LARGE\\0"
+ "UNSUPPORTED_AD_SIZE\\0"
+ "UNSUPPORTED_INPUT_SIZE\\0"
+ "UNSUPPORTED_KEY_SIZE\\0"
+ "UNSUPPORTED_NONCE_SIZE\\0"
+ "UNSUPPORTED_TAG_SIZE\\0"
+ "WRONG_FINAL_BLOCK_LENGTH\\0"
+ "LIST_CANNOT_BE_NULL\\0"
+ "MISSING_CLOSE_SQUARE_BRACKET\\0"
+ "MISSING_EQUAL_SIGN\\0"
+ "NO_CLOSE_BRACE\\0"
+ "UNABLE_TO_CREATE_NEW_SECTION\\0"
+ "VARIABLE_EXPANSION_TOO_LONG\\0"
+ "VARIABLE_HAS_NO_VALUE\\0"
+ "BAD_GENERATOR\\0"
+ "INVALID_PUBKEY\\0"
+ "MODULUS_TOO_LARGE\\0"
+ "NO_PRIVATE_VALUE\\0"
+ "UNKNOWN_HASH\\0"
+ "BAD_Q_VALUE\\0"
+ "BAD_VERSION\\0"
+ "MISSING_PARAMETERS\\0"
+ "NEED_NEW_SETUP_VALUES\\0"
+ "BIGNUM_OUT_OF_RANGE\\0"
+ "COORDINATES_OUT_OF_RANGE\\0"
+ "D2I_ECPKPARAMETERS_FAILURE\\0"
+ "EC_GROUP_NEW_BY_NAME_FAILURE\\0"
+ "GROUP2PKPARAMETERS_FAILURE\\0"
+ "GROUP_MISMATCH\\0"
+ "I2D_ECPKPARAMETERS_FAILURE\\0"
+ "INCOMPATIBLE_OBJECTS\\0"
+ "INVALID_COFACTOR\\0"
+ "INVALID_COMPRESSED_POINT\\0"
+ "INVALID_COMPRESSION_BIT\\0"
+ "INVALID_ENCODING\\0"
+ "INVALID_FIELD\\0"
+ "INVALID_FORM\\0"
+ "INVALID_GROUP_ORDER\\0"
+ "INVALID_PRIVATE_KEY\\0"
+ "MISSING_PRIVATE_KEY\\0"
+ "NON_NAMED_CURVE\\0"
+ "PKPARAMETERS2GROUP_FAILURE\\0"
+ "POINT_AT_INFINITY\\0"
+ "POINT_IS_NOT_ON_CURVE\\0"
+ "PUBLIC_KEY_VALIDATION_FAILED\\0"
+ "SLOT_FULL\\0"
+ "UNDEFINED_GENERATOR\\0"
+ "UNKNOWN_GROUP\\0"
+ "UNKNOWN_ORDER\\0"
+ "WRONG_CURVE_PARAMETERS\\0"
+ "WRONG_ORDER\\0"
+ "KDF_FAILED\\0"
+ "POINT_ARITHMETIC_FAILURE\\0"
+ "BAD_SIGNATURE\\0"
+ "NOT_IMPLEMENTED\\0"
+ "RANDOM_NUMBER_GENERATION_FAILED\\0"
+ "OPERATION_NOT_SUPPORTED\\0"
+ "COMMAND_NOT_SUPPORTED\\0"
+ "DIFFERENT_KEY_TYPES\\0"
+ "DIFFERENT_PARAMETERS\\0"
+ "EXPECTING_AN_EC_KEY_KEY\\0"
+ "EXPECTING_AN_RSA_KEY\\0"
+ "EXPECTING_A_DSA_KEY\\0"
+ "ILLEGAL_OR_UNSUPPORTED_PADDING_MODE\\0"
+ "INVALID_DIGEST_LENGTH\\0"
+ "INVALID_DIGEST_TYPE\\0"
+ "INVALID_KEYBITS\\0"
+ "INVALID_MGF1_MD\\0"
+ "INVALID_PADDING_MODE\\0"
+ "INVALID_PARAMETERS\\0"
+ "INVALID_PSS_SALTLEN\\0"
+ "INVALID_SIGNATURE\\0"
+ "KEYS_NOT_SET\\0"
+ "MEMORY_LIMIT_EXCEEDED\\0"
+ "NOT_A_PRIVATE_KEY\\0"
+ "NO_DEFAULT_DIGEST\\0"
+ "NO_KEY_SET\\0"
+ "NO_MDC2_SUPPORT\\0"
+ "NO_NID_FOR_CURVE\\0"
+ "NO_OPERATION_SET\\0"
+ "NO_PARAMETERS_SET\\0"
+ "OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\\0"
+ "OPERATON_NOT_INITIALIZED\\0"
+ "UNKNOWN_PUBLIC_KEY_TYPE\\0"
+ "UNSUPPORTED_ALGORITHM\\0"
+ "OUTPUT_TOO_LARGE\\0"
+ "UNKNOWN_NID\\0"
+ "BAD_BASE64_DECODE\\0"
+ "BAD_END_LINE\\0"
+ "BAD_IV_CHARS\\0"
+ "BAD_PASSWORD_READ\\0"
+ "CIPHER_IS_NULL\\0"
+ "ERROR_CONVERTING_PRIVATE_KEY\\0"
+ "NOT_DEK_INFO\\0"
+ "NOT_ENCRYPTED\\0"
+ "NOT_PROC_TYPE\\0"
+ "NO_START_LINE\\0"
+ "READ_KEY\\0"
+ "SHORT_HEADER\\0"
+ "UNSUPPORTED_CIPHER\\0"
+ "UNSUPPORTED_ENCRYPTION\\0"
+ "BAD_PKCS7_VERSION\\0"
+ "NOT_PKCS7_SIGNED_DATA\\0"
+ "NO_CERTIFICATES_INCLUDED\\0"
+ "NO_CRLS_INCLUDED\\0"
+ "BAD_ITERATION_COUNT\\0"
+ "BAD_PKCS12_DATA\\0"
+ "BAD_PKCS12_VERSION\\0"
+ "CIPHER_HAS_NO_OBJECT_IDENTIFIER\\0"
+ "CRYPT_ERROR\\0"
+ "ENCRYPT_ERROR\\0"
+ "ERROR_SETTING_CIPHER_PARAMS\\0"
+ "INCORRECT_PASSWORD\\0"
+ "KEYGEN_FAILURE\\0"
+ "KEY_GEN_ERROR\\0"
+ "METHOD_NOT_SUPPORTED\\0"
+ "MISSING_MAC\\0"
+ "MULTIPLE_PRIVATE_KEYS_IN_PKCS12\\0"
+ "PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED\\0"
+ "PKCS12_TOO_DEEPLY_NESTED\\0"
+ "PRIVATE_KEY_DECODE_ERROR\\0"
+ "PRIVATE_KEY_ENCODE_ERROR\\0"
+ "UNKNOWN_ALGORITHM\\0"
+ "UNKNOWN_CIPHER\\0"
+ "UNKNOWN_CIPHER_ALGORITHM\\0"
+ "UNKNOWN_DIGEST\\0"
+ "UNSUPPORTED_KEYLENGTH\\0"
+ "UNSUPPORTED_KEY_DERIVATION_FUNCTION\\0"
+ "UNSUPPORTED_PRF\\0"
+ "UNSUPPORTED_PRIVATE_KEY_ALGORITHM\\0"
+ "UNSUPPORTED_SALT_TYPE\\0"
+ "BAD_E_VALUE\\0"
+ "BAD_FIXED_HEADER_DECRYPT\\0"
+ "BAD_PAD_BYTE_COUNT\\0"
+ "BAD_RSA_PARAMETERS\\0"
+ "BLOCK_TYPE_IS_NOT_01\\0"
+ "BN_NOT_INITIALIZED\\0"
+ "CANNOT_RECOVER_MULTI_PRIME_KEY\\0"
+ "CRT_PARAMS_ALREADY_GIVEN\\0"
+ "CRT_VALUES_INCORRECT\\0"
+ "DATA_LEN_NOT_EQUAL_TO_MOD_LEN\\0"
+ "DATA_TOO_LARGE\\0"
+ "DATA_TOO_LARGE_FOR_KEY_SIZE\\0"
+ "DATA_TOO_LARGE_FOR_MODULUS\\0"
+ "DATA_TOO_SMALL\\0"
+ "DATA_TOO_SMALL_FOR_KEY_SIZE\\0"
+ "DIGEST_TOO_BIG_FOR_RSA_KEY\\0"
+ "D_E_NOT_CONGRUENT_TO_1\\0"
+ "EMPTY_PUBLIC_KEY\\0"
+ "FIRST_OCTET_INVALID\\0"
+ "INCONSISTENT_SET_OF_CRT_VALUES\\0"
+ "INTERNAL_ERROR\\0"
+ "INVALID_MESSAGE_LENGTH\\0"
+ "KEY_SIZE_TOO_SMALL\\0"
+ "LAST_OCTET_INVALID\\0"
+ "MUST_HAVE_AT_LEAST_TWO_PRIMES\\0"
+ "NO_PUBLIC_EXPONENT\\0"
+ "NULL_BEFORE_BLOCK_MISSING\\0"
+ "N_NOT_EQUAL_P_Q\\0"
+ "OAEP_DECODING_ERROR\\0"
+ "ONLY_ONE_OF_P_Q_GIVEN\\0"
+ "OUTPUT_BUFFER_TOO_SMALL\\0"
+ "PADDING_CHECK_FAILED\\0"
+ "PKCS_DECODING_ERROR\\0"
+ "SLEN_CHECK_FAILED\\0"
+ "SLEN_RECOVERY_FAILED\\0"
+ "UNKNOWN_ALGORITHM_TYPE\\0"
+ "UNKNOWN_PADDING_TYPE\\0"
+ "VALUE_MISSING\\0"
+ "WRONG_SIGNATURE_LENGTH\\0"
+ "ALPN_MISMATCH_ON_EARLY_DATA\\0"
+ "APPLICATION_DATA_INSTEAD_OF_HANDSHAKE\\0"
+ "APP_DATA_IN_HANDSHAKE\\0"
+ "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\\0"
+ "BAD_ALERT\\0"
+ "BAD_CHANGE_CIPHER_SPEC\\0"
+ "BAD_DATA_RETURNED_BY_CALLBACK\\0"
+ "BAD_DH_P_LENGTH\\0"
+ "BAD_DIGEST_LENGTH\\0"
+ "BAD_ECC_CERT\\0"
+ "BAD_ECPOINT\\0"
+ "BAD_HANDSHAKE_RECORD\\0"
+ "BAD_HELLO_REQUEST\\0"
+ "BAD_LENGTH\\0"
+ "BAD_PACKET_LENGTH\\0"
+ "BAD_RSA_ENCRYPT\\0"
+ "BAD_SRTP_MKI_VALUE\\0"
+ "BAD_SRTP_PROTECTION_PROFILE_LIST\\0"
+ "BAD_SSL_FILETYPE\\0"
+ "BAD_WRITE_RETRY\\0"
+ "BIO_NOT_SET\\0"
+ "BLOCK_CIPHER_PAD_IS_WRONG\\0"
+ "BUFFERED_MESSAGES_ON_CIPHER_CHANGE\\0"
+ "CANNOT_HAVE_BOTH_PRIVKEY_AND_METHOD\\0"
+ "CANNOT_PARSE_LEAF_CERT\\0"
+ "CA_DN_LENGTH_MISMATCH\\0"
+ "CA_DN_TOO_LONG\\0"
+ "CCS_RECEIVED_EARLY\\0"
+ "CERTIFICATE_AND_PRIVATE_KEY_MISMATCH\\0"
+ "CERTIFICATE_VERIFY_FAILED\\0"
+ "CERT_CB_ERROR\\0"
+ "CERT_LENGTH_MISMATCH\\0"
+ "CHANNEL_ID_NOT_P256\\0"
+ "CHANNEL_ID_SIGNATURE_INVALID\\0"
+ "CIPHER_OR_HASH_UNAVAILABLE\\0"
+ "CLIENTHELLO_PARSE_FAILED\\0"
+ "CLIENTHELLO_TLSEXT\\0"
+ "CONNECTION_REJECTED\\0"
+ "CONNECTION_TYPE_NOT_SET\\0"
+ "CUSTOM_EXTENSION_ERROR\\0"
+ "DATA_LENGTH_TOO_LONG\\0"
+ "DECRYPTION_FAILED\\0"
+ "DECRYPTION_FAILED_OR_BAD_RECORD_MAC\\0"
+ "DH_PUBLIC_VALUE_LENGTH_IS_WRONG\\0"
+ "DH_P_TOO_LONG\\0"
+ "DIGEST_CHECK_FAILED\\0"
+ "DOWNGRADE_DETECTED\\0"
+ "DTLS_MESSAGE_TOO_BIG\\0"
+ "DUPLICATE_EXTENSION\\0"
+ "DUPLICATE_KEY_SHARE\\0"
+ "ECC_CERT_NOT_FOR_SIGNING\\0"
+ "EMS_STATE_INCONSISTENT\\0"
+ "ENCRYPTED_LENGTH_TOO_LONG\\0"
+ "ERROR_ADDING_EXTENSION\\0"
+ "ERROR_IN_RECEIVED_CIPHER_LIST\\0"
+ "ERROR_PARSING_EXTENSION\\0"
+ "EXCESSIVE_MESSAGE_SIZE\\0"
+ "EXTRA_DATA_IN_MESSAGE\\0"
+ "FRAGMENT_MISMATCH\\0"
+ "GOT_NEXT_PROTO_WITHOUT_EXTENSION\\0"
+ "HANDSHAKE_FAILURE_ON_CLIENT_HELLO\\0"
+ "HTTPS_PROXY_REQUEST\\0"
+ "HTTP_REQUEST\\0"
+ "INAPPROPRIATE_FALLBACK\\0"
+ "INVALID_ALPN_PROTOCOL\\0"
+ "INVALID_COMMAND\\0"
+ "INVALID_COMPRESSION_LIST\\0"
+ "INVALID_MESSAGE\\0"
+ "INVALID_OUTER_RECORD_TYPE\\0"
+ "INVALID_SCT_LIST\\0"
+ "INVALID_SSL_SESSION\\0"
+ "INVALID_TICKET_KEYS_LENGTH\\0"
+ "LENGTH_MISMATCH\\0"
+ "MISSING_EXTENSION\\0"
+ "MISSING_KEY_SHARE\\0"
+ "MISSING_RSA_CERTIFICATE\\0"
+ "MISSING_TMP_DH_KEY\\0"
+ "MISSING_TMP_ECDH_KEY\\0"
+ "MIXED_SPECIAL_OPERATOR_WITH_GROUPS\\0"
+ "MTU_TOO_SMALL\\0"
+ "NEGOTIATED_BOTH_NPN_AND_ALPN\\0"
+ "NESTED_GROUP\\0"
+ "NO_CERTIFICATES_RETURNED\\0"
+ "NO_CERTIFICATE_ASSIGNED\\0"
+ "NO_CERTIFICATE_SET\\0"
+ "NO_CIPHERS_AVAILABLE\\0"
+ "NO_CIPHERS_PASSED\\0"
+ "NO_CIPHERS_SPECIFIED\\0"
+ "NO_CIPHER_MATCH\\0"
+ "NO_COMMON_SIGNATURE_ALGORITHMS\\0"
+ "NO_COMPRESSION_SPECIFIED\\0"
+ "NO_GROUPS_SPECIFIED\\0"
+ "NO_METHOD_SPECIFIED\\0"
+ "NO_P256_SUPPORT\\0"
+ "NO_PRIVATE_KEY_ASSIGNED\\0"
+ "NO_RENEGOTIATION\\0"
+ "NO_REQUIRED_DIGEST\\0"
+ "NO_SHARED_CIPHER\\0"
+ "NO_SHARED_GROUP\\0"
+ "NO_SUPPORTED_VERSIONS_ENABLED\\0"
+ "NULL_SSL_CTX\\0"
+ "NULL_SSL_METHOD_PASSED\\0"
+ "OLD_SESSION_CIPHER_NOT_RETURNED\\0"
+ "OLD_SESSION_PRF_HASH_MISMATCH\\0"
+ "OLD_SESSION_VERSION_NOT_RETURNED\\0"
+ "PARSE_TLSEXT\\0"
+ "PATH_TOO_LONG\\0"
+ "PEER_DID_NOT_RETURN_A_CERTIFICATE\\0"
+ "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\\0"
+ "PRE_SHARED_KEY_MUST_BE_LAST\\0"
+ "PROTOCOL_IS_SHUTDOWN\\0"
+ "PSK_IDENTITY_BINDER_COUNT_MISMATCH\\0"
+ "PSK_IDENTITY_NOT_FOUND\\0"
+ "PSK_NO_CLIENT_CB\\0"
+ "PSK_NO_SERVER_CB\\0"
+ "READ_TIMEOUT_EXPIRED\\0"
+ "RECORD_LENGTH_MISMATCH\\0"
+ "RECORD_TOO_LARGE\\0"
+ "RENEGOTIATION_EMS_MISMATCH\\0"
+ "RENEGOTIATION_ENCODING_ERR\\0"
+ "RENEGOTIATION_MISMATCH\\0"
+ "REQUIRED_CIPHER_MISSING\\0"
+ "RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION\\0"
+ "RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION\\0"
+ "SCSV_RECEIVED_WHEN_RENEGOTIATING\\0"
+ "SERVERHELLO_TLSEXT\\0"
+ "SERVER_CERT_CHANGED\\0"
+ "SESSION_ID_CONTEXT_UNINITIALIZED\\0"
+ "SESSION_MAY_NOT_BE_CREATED\\0"
+ "SHUTDOWN_WHILE_IN_INIT\\0"
+ "SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER\\0"
+ "SRTP_COULD_NOT_ALLOCATE_PROFILES\\0"
+ "SRTP_UNKNOWN_PROTECTION_PROFILE\\0"
+ "SSL3_EXT_INVALID_SERVERNAME\\0"
+ "SSLV3_ALERT_BAD_CERTIFICATE\\0"
+ "SSLV3_ALERT_BAD_RECORD_MAC\\0"
+ "SSLV3_ALERT_CERTIFICATE_EXPIRED\\0"
+ "SSLV3_ALERT_CERTIFICATE_REVOKED\\0"
+ "SSLV3_ALERT_CERTIFICATE_UNKNOWN\\0"
+ "SSLV3_ALERT_CLOSE_NOTIFY\\0"
+ "SSLV3_ALERT_DECOMPRESSION_FAILURE\\0"
+ "SSLV3_ALERT_HANDSHAKE_FAILURE\\0"
+ "SSLV3_ALERT_ILLEGAL_PARAMETER\\0"
+ "SSLV3_ALERT_NO_CERTIFICATE\\0"
+ "SSLV3_ALERT_UNEXPECTED_MESSAGE\\0"
+ "SSLV3_ALERT_UNSUPPORTED_CERTIFICATE\\0"
+ "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\\0"
+ "SSL_HANDSHAKE_FAILURE\\0"
+ "SSL_SESSION_ID_CONTEXT_TOO_LONG\\0"
+ "TICKET_ENCRYPTION_FAILED\\0"
+ "TLSV1_ALERT_ACCESS_DENIED\\0"
+ "TLSV1_ALERT_DECODE_ERROR\\0"
+ "TLSV1_ALERT_DECRYPTION_FAILED\\0"
+ "TLSV1_ALERT_DECRYPT_ERROR\\0"
+ "TLSV1_ALERT_EXPORT_RESTRICTION\\0"
+ "TLSV1_ALERT_INAPPROPRIATE_FALLBACK\\0"
+ "TLSV1_ALERT_INSUFFICIENT_SECURITY\\0"
+ "TLSV1_ALERT_INTERNAL_ERROR\\0"
+ "TLSV1_ALERT_NO_RENEGOTIATION\\0"
+ "TLSV1_ALERT_PROTOCOL_VERSION\\0"
+ "TLSV1_ALERT_RECORD_OVERFLOW\\0"
+ "TLSV1_ALERT_UNKNOWN_CA\\0"
+ "TLSV1_ALERT_USER_CANCELLED\\0"
+ "TLSV1_BAD_CERTIFICATE_HASH_VALUE\\0"
+ "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\\0"
+ "TLSV1_CERTIFICATE_REQUIRED\\0"
+ "TLSV1_CERTIFICATE_UNOBTAINABLE\\0"
+ "TLSV1_UNKNOWN_PSK_IDENTITY\\0"
+ "TLSV1_UNRECOGNIZED_NAME\\0"
+ "TLSV1_UNSUPPORTED_EXTENSION\\0"
+ "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\\0"
+ "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\\0"
+ "TOO_MANY_EMPTY_FRAGMENTS\\0"
+ "TOO_MANY_KEY_UPDATES\\0"
+ "TOO_MANY_WARNING_ALERTS\\0"
+ "TOO_MUCH_READ_EARLY_DATA\\0"
+ "TOO_MUCH_SKIPPED_EARLY_DATA\\0"
+ "UNABLE_TO_FIND_ECDH_PARAMETERS\\0"
+ "UNEXPECTED_EXTENSION\\0"
+ "UNEXPECTED_EXTENSION_ON_EARLY_DATA\\0"
+ "UNEXPECTED_MESSAGE\\0"
+ "UNEXPECTED_OPERATOR_IN_GROUP\\0"
+ "UNEXPECTED_RECORD\\0"
+ "UNKNOWN_ALERT_TYPE\\0"
+ "UNKNOWN_CERTIFICATE_TYPE\\0"
+ "UNKNOWN_CIPHER_RETURNED\\0"
+ "UNKNOWN_CIPHER_TYPE\\0"
+ "UNKNOWN_KEY_EXCHANGE_TYPE\\0"
+ "UNKNOWN_PROTOCOL\\0"
+ "UNKNOWN_SSL_VERSION\\0"
+ "UNKNOWN_STATE\\0"
+ "UNSAFE_LEGACY_RENEGOTIATION_DISABLED\\0"
+ "UNSUPPORTED_COMPRESSION_ALGORITHM\\0"
+ "UNSUPPORTED_ELLIPTIC_CURVE\\0"
+ "UNSUPPORTED_PROTOCOL\\0"
+ "UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY\\0"
+ "WRONG_CERTIFICATE_TYPE\\0"
+ "WRONG_CIPHER_RETURNED\\0"
+ "WRONG_CURVE\\0"
+ "WRONG_MESSAGE_TYPE\\0"
+ "WRONG_SIGNATURE_TYPE\\0"
+ "WRONG_SSL_VERSION\\0"
+ "WRONG_VERSION_NUMBER\\0"
+ "WRONG_VERSION_ON_EARLY_DATA\\0"
+ "X509_LIB\\0"
+ "X509_VERIFICATION_SETUP_PROBLEMS\\0"
+ "AKID_MISMATCH\\0"
+ "BAD_X509_FILETYPE\\0"
+ "BASE64_DECODE_ERROR\\0"
+ "CANT_CHECK_DH_KEY\\0"
+ "CERT_ALREADY_IN_HASH_TABLE\\0"
+ "CRL_ALREADY_DELTA\\0"
+ "CRL_VERIFY_FAILURE\\0"
+ "IDP_MISMATCH\\0"
+ "INVALID_DIRECTORY\\0"
+ "INVALID_FIELD_NAME\\0"
+ "INVALID_PARAMETER\\0"
+ "INVALID_PSS_PARAMETERS\\0"
+ "INVALID_TRUST\\0"
+ "ISSUER_MISMATCH\\0"
+ "KEY_TYPE_MISMATCH\\0"
+ "KEY_VALUES_MISMATCH\\0"
+ "LOADING_CERT_DIR\\0"
+ "LOADING_DEFAULTS\\0"
+ "NAME_TOO_LONG\\0"
+ "NEWER_CRL_NOT_NEWER\\0"
+ "NO_CERT_SET_FOR_US_TO_VERIFY\\0"
+ "NO_CRL_NUMBER\\0"
+ "PUBLIC_KEY_DECODE_ERROR\\0"
+ "PUBLIC_KEY_ENCODE_ERROR\\0"
+ "SHOULD_RETRY\\0"
+ "UNKNOWN_KEY_TYPE\\0"
+ "UNKNOWN_PURPOSE_ID\\0"
+ "UNKNOWN_TRUST_ID\\0"
+ "WRONG_LOOKUP_TYPE\\0"
+ "BAD_IP_ADDRESS\\0"
+ "BAD_OBJECT\\0"
+ "BN_DEC2BN_ERROR\\0"
+ "BN_TO_ASN1_INTEGER_ERROR\\0"
+ "CANNOT_FIND_FREE_FUNCTION\\0"
+ "DIRNAME_ERROR\\0"
+ "DISTPOINT_ALREADY_SET\\0"
+ "DUPLICATE_ZONE_ID\\0"
+ "ERROR_CONVERTING_ZONE\\0"
+ "ERROR_CREATING_EXTENSION\\0"
+ "ERROR_IN_EXTENSION\\0"
+ "EXPECTED_A_SECTION_NAME\\0"
+ "EXTENSION_EXISTS\\0"
+ "EXTENSION_NAME_ERROR\\0"
+ "EXTENSION_NOT_FOUND\\0"
+ "EXTENSION_SETTING_NOT_SUPPORTED\\0"
+ "EXTENSION_VALUE_ERROR\\0"
+ "ILLEGAL_EMPTY_EXTENSION\\0"
+ "ILLEGAL_HEX_DIGIT\\0"
+ "INCORRECT_POLICY_SYNTAX_TAG\\0"
+ "INVALID_BOOLEAN_STRING\\0"
+ "INVALID_EXTENSION_STRING\\0"
+ "INVALID_MULTIPLE_RDNS\\0"
+ "INVALID_NAME\\0"
+ "INVALID_NULL_ARGUMENT\\0"
+ "INVALID_NULL_NAME\\0"
+ "INVALID_NULL_VALUE\\0"
+ "INVALID_NUMBERS\\0"
+ "INVALID_OBJECT_IDENTIFIER\\0"
+ "INVALID_OPTION\\0"
+ "INVALID_POLICY_IDENTIFIER\\0"
+ "INVALID_PROXY_POLICY_SETTING\\0"
+ "INVALID_PURPOSE\\0"
+ "INVALID_SECTION\\0"
+ "INVALID_SYNTAX\\0"
+ "ISSUER_DECODE_ERROR\\0"
+ "NEED_ORGANIZATION_AND_NUMBERS\\0"
+ "NO_CONFIG_DATABASE\\0"
+ "NO_ISSUER_CERTIFICATE\\0"
+ "NO_ISSUER_DETAILS\\0"
+ "NO_POLICY_IDENTIFIER\\0"
+ "NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED\\0"
+ "NO_PUBLIC_KEY\\0"
+ "NO_SUBJECT_DETAILS\\0"
+ "ODD_NUMBER_OF_DIGITS\\0"
+ "OPERATION_NOT_DEFINED\\0"
+ "OTHERNAME_ERROR\\0"
+ "POLICY_LANGUAGE_ALREADY_DEFINED\\0"
+ "POLICY_PATH_LENGTH\\0"
+ "POLICY_PATH_LENGTH_ALREADY_DEFINED\\0"
+ "POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY\\0"
+ "SECTION_NOT_FOUND\\0"
+ "UNABLE_TO_GET_ISSUER_DETAILS\\0"
+ "UNABLE_TO_GET_ISSUER_KEYID\\0"
+ "UNKNOWN_BIT_STRING_ARGUMENT\\0"
+ "UNKNOWN_EXTENSION\\0"
+ "UNKNOWN_EXTENSION_NAME\\0"
+ "UNKNOWN_OPTION\\0"
+ "UNSUPPORTED_OPTION\\0"
+ "USER_TOO_LONG\\0"
+ "";
+ EOF
+
+ sed -i'.back' '/^#define \\([A-Za-z0-9_]*\\) \\1/d' include/openssl/ssl.h
+ sed -i'.back' 'N;/^#define \\([A-Za-z0-9_]*\\) *\\\\\\n *\\1/d' include/openssl/ssl.h
+ sed -i'.back' 's/#ifndef md5_block_data_order/#ifndef GRPC_SHADOW_md5_block_data_order/g' crypto/fipsmodule/md5/md5.c
+ END_OF_COMMAND
+
+ # Redefine symbols to avoid conflict when the same app also depends on OpenSSL. The list of
+ # symbols are src/objective-c/grpc_shadow_boringssl_symbol_list.
+ # This is the last part of this file.
+ s.prefix_header_contents =
+ ${expand_symbol_list(settings.grpc_shadow_boringssl_symbols)}
+ end
diff --git a/test/core/bad_client/bad_client.cc b/test/core/bad_client/bad_client.cc
index c03ebcf409..ade23133c5 100644
--- a/test/core/bad_client/bad_client.cc
+++ b/test/core/bad_client/bad_client.cc
@@ -115,7 +115,7 @@ void grpc_run_client_side_validator(grpc_bad_client_arg* arg, uint32_t flags,
grpc_schedule_on_exec_ctx);
/* Write data */
- grpc_endpoint_write(sfd->client, &outgoing, &done_write_closure);
+ grpc_endpoint_write(sfd->client, &outgoing, &done_write_closure, nullptr);
grpc_core::ExecCtx::Get()->Flush();
/* Await completion, unless the request is large and write may not finish
diff --git a/test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc b/test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc
index b1f3a1c08a..1a7db40f59 100644
--- a/test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc
+++ b/test/core/client_channel/resolvers/dns_resolver_cooldown_test.cc
@@ -28,12 +28,16 @@
#include "src/core/lib/iomgr/sockaddr_utils.h"
#include "test/core/util/test_config.h"
+constexpr int kMinResolutionPeriodMs = 1000;
+// Provide some slack when checking intervals, to allow for test timing issues.
+constexpr int kMinResolutionPeriodForCheckMs = 900;
+
extern grpc_address_resolver_vtable* grpc_resolve_address_impl;
static grpc_address_resolver_vtable* default_resolve_address;
static grpc_combiner* g_combiner;
-grpc_ares_request* (*g_default_dns_lookup_ares_locked)(
+static grpc_ares_request* (*g_default_dns_lookup_ares_locked)(
const char* dns_server, const char* name, const char* default_port,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
@@ -43,7 +47,7 @@ grpc_ares_request* (*g_default_dns_lookup_ares_locked)(
// times a system-level resolution has happened.
static int g_resolution_count;
-struct iomgr_args {
+static struct iomgr_args {
gpr_event ev;
gpr_atm done_atm;
gpr_mu* mu;
@@ -61,6 +65,16 @@ static void test_resolve_address_impl(const char* name,
default_resolve_address->resolve_address(
name, default_port, g_iomgr_args.pollset_set, on_done, addrs);
++g_resolution_count;
+ static grpc_millis last_resolution_time = 0;
+ if (last_resolution_time == 0) {
+ last_resolution_time =
+ grpc_timespec_to_millis_round_up(gpr_now(GPR_CLOCK_MONOTONIC));
+ } else {
+ grpc_millis now =
+ grpc_timespec_to_millis_round_up(gpr_now(GPR_CLOCK_MONOTONIC));
+ GPR_ASSERT(now - last_resolution_time >= kMinResolutionPeriodForCheckMs);
+ last_resolution_time = now;
+ }
}
static grpc_error* test_blocking_resolve_address_impl(
@@ -73,7 +87,7 @@ static grpc_error* test_blocking_resolve_address_impl(
static grpc_address_resolver_vtable test_resolver = {
test_resolve_address_impl, test_blocking_resolve_address_impl};
-grpc_ares_request* test_dns_lookup_ares_locked(
+static grpc_ares_request* test_dns_lookup_ares_locked(
const char* dns_server, const char* name, const char* default_port,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
grpc_lb_addresses** addrs, bool check_grpclb, char** service_config_json,
@@ -82,6 +96,16 @@ grpc_ares_request* test_dns_lookup_ares_locked(
dns_server, name, default_port, g_iomgr_args.pollset_set, on_done, addrs,
check_grpclb, service_config_json, combiner);
++g_resolution_count;
+ static grpc_millis last_resolution_time = 0;
+ if (last_resolution_time == 0) {
+ last_resolution_time =
+ grpc_timespec_to_millis_round_up(gpr_now(GPR_CLOCK_MONOTONIC));
+ } else {
+ grpc_millis now =
+ grpc_timespec_to_millis_round_up(gpr_now(GPR_CLOCK_MONOTONIC));
+ GPR_ASSERT(now - last_resolution_time >= kMinResolutionPeriodForCheckMs);
+ last_resolution_time = now;
+ }
return result;
}
@@ -91,7 +115,7 @@ static gpr_timespec test_deadline(void) {
static void do_nothing(void* arg, grpc_error* error) {}
-void iomgr_args_init(iomgr_args* args) {
+static void iomgr_args_init(iomgr_args* args) {
gpr_event_init(&args->ev);
args->pollset = static_cast<grpc_pollset*>(gpr_zalloc(grpc_pollset_size()));
grpc_pollset_init(args->pollset, &args->mu);
@@ -100,7 +124,7 @@ void iomgr_args_init(iomgr_args* args) {
gpr_atm_rel_store(&args->done_atm, 0);
}
-void iomgr_args_finish(iomgr_args* args) {
+static void iomgr_args_finish(iomgr_args* args) {
GPR_ASSERT(gpr_event_wait(&args->ev, test_deadline()));
grpc_pollset_set_del_pollset(args->pollset_set, args->pollset);
grpc_pollset_set_destroy(args->pollset_set);
@@ -146,29 +170,19 @@ struct OnResolutionCallbackArg {
const char* uri_str = nullptr;
grpc_core::OrphanablePtr<grpc_core::Resolver> resolver;
grpc_channel_args* result = nullptr;
- grpc_millis delay_before_second_resolution = 0;
};
-// Counter for the number of times a resolution notification callback has been
-// invoked.
-static int g_on_resolution_invocations_count;
-
// Set to true by the last callback in the resolution chain.
-bool g_all_callbacks_invoked;
+static bool g_all_callbacks_invoked;
-void on_fourth_resolution(void* arg, grpc_error* error) {
+static void on_second_resolution(void* arg, grpc_error* error) {
OnResolutionCallbackArg* cb_arg = static_cast<OnResolutionCallbackArg*>(arg);
grpc_channel_args_destroy(cb_arg->result);
GPR_ASSERT(error == GRPC_ERROR_NONE);
- ++g_on_resolution_invocations_count;
- gpr_log(GPR_INFO,
- "4th: g_on_resolution_invocations_count: %d, g_resolution_count: %d",
- g_on_resolution_invocations_count, g_resolution_count);
- // In this case we expect to have incurred in another system-level resolution
- // because on_third_resolution slept for longer than the min resolution
- // period.
- GPR_ASSERT(g_on_resolution_invocations_count == 4);
- GPR_ASSERT(g_resolution_count == 3);
+ gpr_log(GPR_INFO, "2nd: g_resolution_count: %d", g_resolution_count);
+ // The resolution callback was not invoked until new data was
+ // available, which was delayed until after the cooldown period.
+ GPR_ASSERT(g_resolution_count == 2);
cb_arg->resolver.reset();
gpr_atm_rel_store(&g_iomgr_args.done_atm, 1);
gpr_mu_lock(g_iomgr_args.mu);
@@ -179,67 +193,13 @@ void on_fourth_resolution(void* arg, grpc_error* error) {
g_all_callbacks_invoked = true;
}
-void on_third_resolution(void* arg, grpc_error* error) {
- OnResolutionCallbackArg* cb_arg = static_cast<OnResolutionCallbackArg*>(arg);
- grpc_channel_args_destroy(cb_arg->result);
- GPR_ASSERT(error == GRPC_ERROR_NONE);
- ++g_on_resolution_invocations_count;
- gpr_log(GPR_INFO,
- "3rd: g_on_resolution_invocations_count: %d, g_resolution_count: %d",
- g_on_resolution_invocations_count, g_resolution_count);
- // The timer set because of the previous re-resolution request fires, so a new
- // system-level resolution happened.
- GPR_ASSERT(g_on_resolution_invocations_count == 3);
- GPR_ASSERT(g_resolution_count == 2);
- grpc_core::ExecCtx::Get()->TestOnlySetNow(
- cb_arg->delay_before_second_resolution * 2);
- cb_arg->resolver->NextLocked(
- &cb_arg->result,
- GRPC_CLOSURE_CREATE(on_fourth_resolution, arg,
- grpc_combiner_scheduler(g_combiner)));
- cb_arg->resolver->RequestReresolutionLocked();
- gpr_mu_lock(g_iomgr_args.mu);
- GRPC_LOG_IF_ERROR("pollset_kick",
- grpc_pollset_kick(g_iomgr_args.pollset, nullptr));
- gpr_mu_unlock(g_iomgr_args.mu);
-}
-
-void on_second_resolution(void* arg, grpc_error* error) {
- OnResolutionCallbackArg* cb_arg = static_cast<OnResolutionCallbackArg*>(arg);
- grpc_channel_args_destroy(cb_arg->result);
- GPR_ASSERT(error == GRPC_ERROR_NONE);
- ++g_on_resolution_invocations_count;
- gpr_log(GPR_INFO,
- "2nd: g_on_resolution_invocations_count: %d, g_resolution_count: %d",
- g_on_resolution_invocations_count, g_resolution_count);
- // The resolution request for which this function is the callback happened
- // before the min resolution period. Therefore, no new system-level
- // resolutions happened, as indicated by g_resolution_count. But a resolution
- // timer was set to fire when the cooldown finishes.
- GPR_ASSERT(g_on_resolution_invocations_count == 2);
- GPR_ASSERT(g_resolution_count == 1);
- // Register a new callback to capture the timer firing.
- cb_arg->resolver->NextLocked(
- &cb_arg->result,
- GRPC_CLOSURE_CREATE(on_third_resolution, arg,
- grpc_combiner_scheduler(g_combiner)));
- gpr_mu_lock(g_iomgr_args.mu);
- GRPC_LOG_IF_ERROR("pollset_kick",
- grpc_pollset_kick(g_iomgr_args.pollset, nullptr));
- gpr_mu_unlock(g_iomgr_args.mu);
-}
-
-void on_first_resolution(void* arg, grpc_error* error) {
+static void on_first_resolution(void* arg, grpc_error* error) {
OnResolutionCallbackArg* cb_arg = static_cast<OnResolutionCallbackArg*>(arg);
grpc_channel_args_destroy(cb_arg->result);
GPR_ASSERT(error == GRPC_ERROR_NONE);
- ++g_on_resolution_invocations_count;
- gpr_log(GPR_INFO,
- "1st: g_on_resolution_invocations_count: %d, g_resolution_count: %d",
- g_on_resolution_invocations_count, g_resolution_count);
+ gpr_log(GPR_INFO, "1st: g_resolution_count: %d", g_resolution_count);
// There's one initial system-level resolution and one invocation of a
// notification callback (the current function).
- GPR_ASSERT(g_on_resolution_invocations_count == 1);
GPR_ASSERT(g_resolution_count == 1);
cb_arg->resolver->NextLocked(
&cb_arg->result,
@@ -265,9 +225,7 @@ static void start_test_under_combiner(void* arg, grpc_error* error) {
grpc_core::ResolverArgs args;
args.uri = uri;
args.combiner = g_combiner;
- g_on_resolution_invocations_count = 0;
g_resolution_count = 0;
- constexpr int kMinResolutionPeriodMs = 1000;
grpc_arg cooldown_arg;
cooldown_arg.key =
@@ -280,7 +238,6 @@ static void start_test_under_combiner(void* arg, grpc_error* error) {
res_cb_arg->resolver = factory->CreateResolver(args);
grpc_channel_args_destroy(cooldown_channel_args);
GPR_ASSERT(res_cb_arg->resolver != nullptr);
- res_cb_arg->delay_before_second_resolution = kMinResolutionPeriodMs;
// First resolution, would incur in system-level resolution.
res_cb_arg->resolver->NextLocked(
&res_cb_arg->result,
diff --git a/test/core/client_channel/resolvers/fake_resolver_test.cc b/test/core/client_channel/resolvers/fake_resolver_test.cc
index 14caa3ea5d..f6696bf127 100644
--- a/test/core/client_channel/resolvers/fake_resolver_test.cc
+++ b/test/core/client_channel/resolvers/fake_resolver_test.cc
@@ -124,8 +124,8 @@ static void test_fake_resolver() {
build_fake_resolver(combiner, response_generator.get());
GPR_ASSERT(resolver.get() != nullptr);
// Test 1: normal resolution.
- // next_results != NULL, reresolution_results == NULL, last_used_results ==
- // NULL. Expected response is next_results.
+ // next_results != NULL, reresolution_results == NULL.
+ // Expected response is next_results.
grpc_channel_args* results = create_new_resolver_result();
on_resolution_arg on_res_arg = create_on_resolution_arg(results);
grpc_closure* on_resolution = GRPC_CLOSURE_CREATE(
@@ -137,10 +137,9 @@ static void test_fake_resolver() {
GPR_ASSERT(gpr_event_wait(&on_res_arg.ev,
grpc_timeout_seconds_to_deadline(5)) != nullptr);
// Test 2: update resolution.
- // next_results != NULL, reresolution_results == NULL, last_used_results !=
- // NULL. Expected response is next_results.
+ // next_results != NULL, reresolution_results == NULL.
+ // Expected response is next_results.
results = create_new_resolver_result();
- grpc_channel_args* last_used_results = grpc_channel_args_copy(results);
on_res_arg = create_on_resolution_arg(results);
on_resolution = GRPC_CLOSURE_CREATE(on_resolution_cb, &on_res_arg,
grpc_combiner_scheduler(combiner));
@@ -150,21 +149,9 @@ static void test_fake_resolver() {
grpc_core::ExecCtx::Get()->Flush();
GPR_ASSERT(gpr_event_wait(&on_res_arg.ev,
grpc_timeout_seconds_to_deadline(5)) != nullptr);
- // Test 3: fallback re-resolution.
- // next_results == NULL, reresolution_results == NULL, last_used_results !=
- // NULL. Expected response is last_used_results.
- on_res_arg = create_on_resolution_arg(last_used_results);
- on_resolution = GRPC_CLOSURE_CREATE(on_resolution_cb, &on_res_arg,
- grpc_combiner_scheduler(combiner));
- resolver->NextLocked(&on_res_arg.resolver_result, on_resolution);
- // Trigger a re-resolution.
- resolver->RequestReresolutionLocked();
- grpc_core::ExecCtx::Get()->Flush();
- GPR_ASSERT(gpr_event_wait(&on_res_arg.ev,
- grpc_timeout_seconds_to_deadline(5)) != nullptr);
- // Test 4: normal re-resolution.
- // next_results == NULL, reresolution_results != NULL, last_used_results !=
- // NULL. Expected response is reresolution_results.
+ // Test 3: normal re-resolution.
+ // next_results == NULL, reresolution_results != NULL.
+ // Expected response is reresolution_results.
grpc_channel_args* reresolution_results = create_new_resolver_result();
on_res_arg =
create_on_resolution_arg(grpc_channel_args_copy(reresolution_results));
@@ -180,9 +167,9 @@ static void test_fake_resolver() {
grpc_core::ExecCtx::Get()->Flush();
GPR_ASSERT(gpr_event_wait(&on_res_arg.ev,
grpc_timeout_seconds_to_deadline(5)) != nullptr);
- // Test 5: repeat re-resolution.
- // next_results == NULL, reresolution_results != NULL, last_used_results !=
- // NULL. Expected response is reresolution_results.
+ // Test 4: repeat re-resolution.
+ // next_results == NULL, reresolution_results != NULL.
+ // Expected response is reresolution_results.
on_res_arg = create_on_resolution_arg(reresolution_results);
on_resolution = GRPC_CLOSURE_CREATE(on_resolution_cb, &on_res_arg,
grpc_combiner_scheduler(combiner));
@@ -192,11 +179,10 @@ static void test_fake_resolver() {
grpc_core::ExecCtx::Get()->Flush();
GPR_ASSERT(gpr_event_wait(&on_res_arg.ev,
grpc_timeout_seconds_to_deadline(5)) != nullptr);
- // Test 6: normal resolution.
- // next_results != NULL, reresolution_results != NULL, last_used_results !=
- // NULL. Expected response is next_results.
+ // Test 5: normal resolution.
+ // next_results != NULL, reresolution_results != NULL.
+ // Expected response is next_results.
results = create_new_resolver_result();
- last_used_results = grpc_channel_args_copy(results);
on_res_arg = create_on_resolution_arg(results);
on_resolution = GRPC_CLOSURE_CREATE(on_resolution_cb, &on_res_arg,
grpc_combiner_scheduler(combiner));
@@ -206,23 +192,7 @@ static void test_fake_resolver() {
grpc_core::ExecCtx::Get()->Flush();
GPR_ASSERT(gpr_event_wait(&on_res_arg.ev,
grpc_timeout_seconds_to_deadline(5)) != nullptr);
- // Test 7: fallback re-resolution.
- // next_results == NULL, reresolution_results == NULL, last_used_results !=
- // NULL. Expected response is last_used_results.
- on_res_arg = create_on_resolution_arg(last_used_results);
- on_resolution = GRPC_CLOSURE_CREATE(on_resolution_cb, &on_res_arg,
- grpc_combiner_scheduler(combiner));
- resolver->NextLocked(&on_res_arg.resolver_result, on_resolution);
- // Reset reresolution_results.
- response_generator->SetReresolutionResponse(nullptr);
- // Flush here to guarantee that reresolution_results has been reset.
- grpc_core::ExecCtx::Get()->Flush();
- // Trigger a re-resolution.
- resolver->RequestReresolutionLocked();
- grpc_core::ExecCtx::Get()->Flush();
- GPR_ASSERT(gpr_event_wait(&on_res_arg.ev,
- grpc_timeout_seconds_to_deadline(5)) != nullptr);
- // Test 8: no-op.
+ // Test 6: no-op.
// Requesting a new resolution without setting the response shouldn't trigger
// the resolution callback.
memset(&on_res_arg, 0, sizeof(on_res_arg));
diff --git a/test/core/end2end/BUILD b/test/core/end2end/BUILD
index dd16694204..37999a98d1 100644
--- a/test/core/end2end/BUILD
+++ b/test/core/end2end/BUILD
@@ -124,6 +124,19 @@ grpc_cc_test(
)
grpc_cc_test(
+ name = "inproc_callback_test",
+ srcs = ["inproc_callback_test.cc"],
+ language = "C++",
+ deps = [
+ ':end2end_tests',
+ "//:gpr",
+ "//:grpc",
+ "//test/core/util:gpr_test_util",
+ "//test/core/util:grpc_test_util",
+ ],
+)
+
+grpc_cc_test(
name = "invalid_call_argument_test",
srcs = ["invalid_call_argument_test.cc"],
language = "C++",
diff --git a/test/core/end2end/bad_server_response_test.cc b/test/core/end2end/bad_server_response_test.cc
index 3d133cfc18..f7396a1684 100644
--- a/test/core/end2end/bad_server_response_test.cc
+++ b/test/core/end2end/bad_server_response_test.cc
@@ -104,7 +104,7 @@ static void handle_write() {
grpc_slice_buffer_reset_and_unref(&state.outgoing_buffer);
grpc_slice_buffer_add(&state.outgoing_buffer, slice);
- grpc_endpoint_write(state.tcp, &state.outgoing_buffer, &on_write);
+ grpc_endpoint_write(state.tcp, &state.outgoing_buffer, &on_write, nullptr);
}
static void handle_read(void* arg, grpc_error* error) {
diff --git a/test/core/end2end/end2end_test.sh b/test/core/end2end/end2end_test.sh
index 5bfb253090..6b23d848be 100755
--- a/test/core/end2end/end2end_test.sh
+++ b/test/core/end2end/end2end_test.sh
@@ -15,7 +15,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-if [ -z "$3" ]
+if [ -n "$3" ]
then
export GRPC_POLL_STRATEGY=$3
fi
diff --git a/test/core/end2end/fixtures/http_proxy_fixture.cc b/test/core/end2end/fixtures/http_proxy_fixture.cc
index f02fa9d998..ea9c000efb 100644
--- a/test/core/end2end/fixtures/http_proxy_fixture.cc
+++ b/test/core/end2end/fixtures/http_proxy_fixture.cc
@@ -201,7 +201,7 @@ static void on_client_write_done(void* arg, grpc_error* error) {
&conn->client_write_buffer);
conn->client_is_writing = true;
grpc_endpoint_write(conn->client_endpoint, &conn->client_write_buffer,
- &conn->on_client_write_done);
+ &conn->on_client_write_done, nullptr);
} else {
// No more writes. Unref the connection.
proxy_connection_unref(conn, "write_done");
@@ -226,7 +226,7 @@ static void on_server_write_done(void* arg, grpc_error* error) {
&conn->server_write_buffer);
conn->server_is_writing = true;
grpc_endpoint_write(conn->server_endpoint, &conn->server_write_buffer,
- &conn->on_server_write_done);
+ &conn->on_server_write_done, nullptr);
} else {
// No more writes. Unref the connection.
proxy_connection_unref(conn, "server_write");
@@ -257,7 +257,7 @@ static void on_client_read_done(void* arg, grpc_error* error) {
proxy_connection_ref(conn, "client_read");
conn->server_is_writing = true;
grpc_endpoint_write(conn->server_endpoint, &conn->server_write_buffer,
- &conn->on_server_write_done);
+ &conn->on_server_write_done, nullptr);
}
// Read more data.
grpc_endpoint_read(conn->client_endpoint, &conn->client_read_buffer,
@@ -288,7 +288,7 @@ static void on_server_read_done(void* arg, grpc_error* error) {
proxy_connection_ref(conn, "server_read");
conn->client_is_writing = true;
grpc_endpoint_write(conn->client_endpoint, &conn->client_write_buffer,
- &conn->on_client_write_done);
+ &conn->on_client_write_done, nullptr);
}
// Read more data.
grpc_endpoint_read(conn->server_endpoint, &conn->server_read_buffer,
@@ -340,7 +340,7 @@ static void on_server_connect_done(void* arg, grpc_error* error) {
grpc_slice_buffer_add(&conn->client_write_buffer, slice);
conn->client_is_writing = true;
grpc_endpoint_write(conn->client_endpoint, &conn->client_write_buffer,
- &conn->on_write_response_done);
+ &conn->on_write_response_done, nullptr);
}
/**
diff --git a/test/core/end2end/inproc_callback_test.cc b/test/core/end2end/inproc_callback_test.cc
new file mode 100644
index 0000000000..0d6c7c75a8
--- /dev/null
+++ b/test/core/end2end/inproc_callback_test.cc
@@ -0,0 +1,498 @@
+/*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "test/core/end2end/end2end_tests.h"
+
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/sync.h>
+
+#include "src/core/ext/transport/inproc/inproc_transport.h"
+#include "src/core/lib/surface/channel.h"
+#include "src/core/lib/surface/completion_queue.h"
+#include "src/core/lib/surface/server.h"
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+
+typedef struct inproc_fixture_data {
+ bool dummy; // reserved for future expansion. Struct can't be empty
+} inproc_fixture_data;
+
+namespace {
+template <typename F>
+class CQDeletingCallback : public grpc_core::CQCallbackInterface {
+ public:
+ explicit CQDeletingCallback(F f) : func_(f) {}
+ ~CQDeletingCallback() override {}
+ void Run(bool ok) override {
+ func_(ok);
+ grpc_core::Delete(this);
+ }
+
+ private:
+ F func_;
+};
+
+template <typename F>
+grpc_core::CQCallbackInterface* NewDeletingCallback(F f) {
+ return grpc_core::New<CQDeletingCallback<F>>(f);
+}
+
+class ShutdownCallback : public grpc_core::CQCallbackInterface {
+ public:
+ ShutdownCallback() : done_(false) {
+ gpr_mu_init(&mu_);
+ gpr_cv_init(&cv_);
+ }
+ ~ShutdownCallback() override {}
+ void Run(bool ok) override {
+ gpr_log(GPR_DEBUG, "CQ shutdown notification invoked");
+ gpr_mu_lock(&mu_);
+ done_ = true;
+ gpr_cv_broadcast(&cv_);
+ gpr_mu_unlock(&mu_);
+ }
+ // The Wait function waits for a specified amount of
+ // time for the completion of the shutdown and returns
+ // whether it was successfully shut down
+ bool Wait(gpr_timespec deadline) {
+ gpr_mu_lock(&mu_);
+ while (!done_ && !gpr_cv_wait(&cv_, &mu_, deadline)) {
+ }
+ bool ret = done_;
+ gpr_mu_unlock(&mu_);
+ return ret;
+ }
+
+ private:
+ bool done_;
+ gpr_mu mu_;
+ gpr_cv cv_;
+};
+
+ShutdownCallback* g_shutdown_callback;
+} // namespace
+
+// The following global structure is the tag collection. It holds
+// all information related to tags expected and tags received
+// during the execution, with each callback setting a tag.
+// The tag sets are implemented and checked using arrays and
+// linear lookups (rather than maps) so that this test doesn't
+// need the C++ standard library.
+static gpr_mu tags_mu;
+static gpr_cv tags_cv;
+const size_t kAvailableTags = 4;
+bool tags[kAvailableTags];
+bool tags_valid[kAvailableTags];
+bool tags_expected[kAvailableTags];
+bool tags_needed[kAvailableTags];
+
+// Mark that a tag is expected; this function must be executed in the
+// main thread only while there are no other threads altering the
+// expectation set (e.g., by calling expect_tag or verify_tags)
+static void expect_tag(intptr_t tag, bool ok) {
+ size_t idx = static_cast<size_t>(tag);
+ GPR_ASSERT(idx < kAvailableTags);
+ tags_needed[idx] = true;
+ tags_expected[idx] = ok;
+}
+
+// Check that the expected tags have reached, within a certain
+// deadline. This must also be executed only on the main thread while
+// there are no other threads altering the expectation set (e.g., by
+// calling expect_tag or verify_tags). The tag verifier doesn't have
+// to drive the CQ at all (unlike the next-based end2end tests)
+// because the tags will get set when the callbacks are executed,
+// which happens when a particular batch related to a callback is
+// complete.
+static void verify_tags(gpr_timespec deadline) {
+ bool done = false;
+
+ gpr_mu_lock(&tags_mu);
+ while (!done) {
+ done = gpr_time_cmp(gpr_now(GPR_CLOCK_MONOTONIC), deadline) > 0;
+ for (size_t i = 0; i < kAvailableTags; i++) {
+ if (tags_needed[i]) {
+ if (tags_valid[i]) {
+ gpr_log(GPR_DEBUG, "Verifying tag %d", static_cast<int>(i));
+ if (tags[i] != tags_expected[i]) {
+ gpr_log(GPR_ERROR, "Got wrong result (%d instead of %d) for tag %d",
+ tags[i], tags_expected[i], static_cast<int>(i));
+ GPR_ASSERT(false);
+ }
+ tags_valid[i] = false;
+ tags_needed[i] = false;
+ } else if (done) {
+ gpr_log(GPR_ERROR, "Didn't get tag %d", static_cast<int>(i));
+ GPR_ASSERT(false);
+ }
+ }
+ }
+ bool empty = true;
+ for (size_t i = 0; i < kAvailableTags; i++) {
+ if (tags_needed[i]) {
+ empty = false;
+ }
+ }
+ done = done || empty;
+ if (done) {
+ for (size_t i = 0; i < kAvailableTags; i++) {
+ if (tags_valid[i]) {
+ gpr_log(GPR_ERROR, "Got unexpected tag %d and result %d",
+ static_cast<int>(i), tags[i]);
+ GPR_ASSERT(false);
+ }
+ tags_valid[i] = false;
+ }
+ } else {
+ gpr_cv_wait(&tags_cv, &tags_mu, deadline);
+ }
+ }
+ gpr_mu_unlock(&tags_mu);
+}
+
+// This function creates a callback functor that emits the
+// desired tag into the global tag set
+static grpc_core::CQCallbackInterface* tag(intptr_t t) {
+ auto func = [t](bool ok) {
+ gpr_mu_lock(&tags_mu);
+ gpr_log(GPR_DEBUG, "Completing operation %" PRIdPTR, t);
+ bool was_empty = true;
+ for (size_t i = 0; i < kAvailableTags; i++) {
+ if (tags_valid[i]) {
+ was_empty = false;
+ }
+ }
+ size_t idx = static_cast<size_t>(t);
+ tags[idx] = ok;
+ tags_valid[idx] = true;
+ if (was_empty) {
+ gpr_cv_signal(&tags_cv);
+ }
+ gpr_mu_unlock(&tags_mu);
+ };
+ auto cb = NewDeletingCallback(func);
+ return cb;
+}
+
+static grpc_end2end_test_fixture inproc_create_fixture(
+ grpc_channel_args* client_args, grpc_channel_args* server_args) {
+ grpc_end2end_test_fixture f;
+ inproc_fixture_data* ffd = static_cast<inproc_fixture_data*>(
+ gpr_malloc(sizeof(inproc_fixture_data)));
+ memset(&f, 0, sizeof(f));
+
+ f.fixture_data = ffd;
+ g_shutdown_callback = grpc_core::New<ShutdownCallback>();
+ f.cq =
+ grpc_completion_queue_create_for_callback(g_shutdown_callback, nullptr);
+ f.shutdown_cq = grpc_completion_queue_create_for_pluck(nullptr);
+
+ return f;
+}
+
+void inproc_init_client(grpc_end2end_test_fixture* f,
+ grpc_channel_args* client_args) {
+ f->client = grpc_inproc_channel_create(f->server, client_args, nullptr);
+ GPR_ASSERT(f->client);
+}
+
+void inproc_init_server(grpc_end2end_test_fixture* f,
+ grpc_channel_args* server_args) {
+ if (f->server) {
+ grpc_server_destroy(f->server);
+ }
+ f->server = grpc_server_create(server_args, nullptr);
+ grpc_server_register_completion_queue(f->server, f->cq, nullptr);
+ grpc_server_start(f->server);
+}
+
+void inproc_tear_down(grpc_end2end_test_fixture* f) {
+ inproc_fixture_data* ffd = static_cast<inproc_fixture_data*>(f->fixture_data);
+ gpr_free(ffd);
+}
+
+static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config,
+ const char* test_name,
+ grpc_channel_args* client_args,
+ grpc_channel_args* server_args) {
+ grpc_end2end_test_fixture f;
+ gpr_log(GPR_INFO, "Running test: %s/%s", test_name, config.name);
+ f = config.create_fixture(client_args, server_args);
+ config.init_server(&f, server_args);
+ config.init_client(&f, client_args);
+ return f;
+}
+
+static gpr_timespec n_seconds_from_now(int n) {
+ return grpc_timeout_seconds_to_deadline(n);
+}
+
+static gpr_timespec five_seconds_from_now() { return n_seconds_from_now(5); }
+
+static void drain_cq(grpc_completion_queue* cq) {
+ // Wait for the shutdown callback to arrive, or fail the test
+ GPR_ASSERT(g_shutdown_callback->Wait(five_seconds_from_now()));
+ gpr_log(GPR_DEBUG, "CQ shutdown wait complete");
+ grpc_core::Delete(g_shutdown_callback);
+}
+
+static void shutdown_server(grpc_end2end_test_fixture* f) {
+ if (!f->server) return;
+ grpc_server_shutdown_and_notify(
+ f->server, f->shutdown_cq,
+ reinterpret_cast<void*>(static_cast<intptr_t>(1000)));
+ GPR_ASSERT(
+ grpc_completion_queue_pluck(f->shutdown_cq, (void*)((intptr_t)1000),
+ grpc_timeout_seconds_to_deadline(5), nullptr)
+ .type == GRPC_OP_COMPLETE);
+ grpc_server_destroy(f->server);
+ f->server = nullptr;
+}
+
+static void shutdown_client(grpc_end2end_test_fixture* f) {
+ if (!f->client) return;
+ grpc_channel_destroy(f->client);
+ f->client = nullptr;
+}
+
+static void end_test(grpc_end2end_test_fixture* f) {
+ shutdown_server(f);
+ shutdown_client(f);
+
+ grpc_completion_queue_shutdown(f->cq);
+ drain_cq(f->cq);
+ grpc_completion_queue_destroy(f->cq);
+ grpc_completion_queue_destroy(f->shutdown_cq);
+}
+
+static void simple_request_body(grpc_end2end_test_config config,
+ grpc_end2end_test_fixture f) {
+ grpc_call* c;
+ grpc_call* s;
+ grpc_op ops[6];
+ grpc_op* op;
+ grpc_metadata_array initial_metadata_recv;
+ grpc_metadata_array trailing_metadata_recv;
+ grpc_metadata_array request_metadata_recv;
+ grpc_call_details call_details;
+ grpc_status_code status;
+ const char* error_string;
+ grpc_call_error error;
+ grpc_slice details;
+ int was_cancelled = 2;
+ char* peer;
+ gpr_timespec deadline = five_seconds_from_now();
+
+ c = grpc_channel_create_call(f.client, nullptr, GRPC_PROPAGATE_DEFAULTS, f.cq,
+ grpc_slice_from_static_string("/foo"), nullptr,
+ deadline, nullptr);
+ GPR_ASSERT(c);
+
+ peer = grpc_call_get_peer(c);
+ GPR_ASSERT(peer != nullptr);
+ gpr_log(GPR_DEBUG, "client_peer_before_call=%s", peer);
+ gpr_free(peer);
+
+ grpc_metadata_array_init(&initial_metadata_recv);
+ grpc_metadata_array_init(&trailing_metadata_recv);
+ grpc_metadata_array_init(&request_metadata_recv);
+ grpc_call_details_init(&call_details);
+
+ // Create a basic client unary request batch (no payload)
+ memset(ops, 0, sizeof(ops));
+ op = ops;
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
+ op->data.send_initial_metadata.count = 0;
+ op->flags = 0;
+ op->reserved = nullptr;
+ op++;
+ op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
+ op->flags = 0;
+ op->reserved = nullptr;
+ op++;
+ op->op = GRPC_OP_RECV_INITIAL_METADATA;
+ op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
+ op->flags = 0;
+ op->reserved = nullptr;
+ op++;
+ op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
+ op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv;
+ op->data.recv_status_on_client.status = &status;
+ op->data.recv_status_on_client.status_details = &details;
+ op->data.recv_status_on_client.error_string = &error_string;
+ op->flags = 0;
+ op->reserved = nullptr;
+ op++;
+ error = grpc_call_start_batch(c, ops, static_cast<size_t>(op - ops), tag(1),
+ nullptr);
+ GPR_ASSERT(GRPC_CALL_OK == error);
+
+ // Register a call at the server-side to match the incoming client call
+ error = grpc_server_request_call(f.server, &s, &call_details,
+ &request_metadata_recv, f.cq, f.cq, tag(2));
+ GPR_ASSERT(GRPC_CALL_OK == error);
+
+ // We expect that the server call creation callback (and no others) will
+ // execute now since no other batch should be complete.
+ expect_tag(2, true);
+ verify_tags(deadline);
+
+ peer = grpc_call_get_peer(s);
+ GPR_ASSERT(peer != nullptr);
+ gpr_log(GPR_DEBUG, "server_peer=%s", peer);
+ gpr_free(peer);
+ peer = grpc_call_get_peer(c);
+ GPR_ASSERT(peer != nullptr);
+ gpr_log(GPR_DEBUG, "client_peer=%s", peer);
+ gpr_free(peer);
+
+ // Create the server response batch (no payload)
+ memset(ops, 0, sizeof(ops));
+ op = ops;
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
+ op->data.send_initial_metadata.count = 0;
+ op->flags = 0;
+ op->reserved = nullptr;
+ op++;
+ op->op = GRPC_OP_SEND_STATUS_FROM_SERVER;
+ op->data.send_status_from_server.trailing_metadata_count = 0;
+ op->data.send_status_from_server.status = GRPC_STATUS_UNIMPLEMENTED;
+ grpc_slice status_details = grpc_slice_from_static_string("xyz");
+ op->data.send_status_from_server.status_details = &status_details;
+ op->flags = 0;
+ op->reserved = nullptr;
+ op++;
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled = &was_cancelled;
+ op->flags = 0;
+ op->reserved = nullptr;
+ op++;
+ error = grpc_call_start_batch(s, ops, static_cast<size_t>(op - ops), tag(3),
+ nullptr);
+ GPR_ASSERT(GRPC_CALL_OK == error);
+
+ // Both the client request and server response batches should get complete
+ // now and we should see that their callbacks have been executed
+ expect_tag(3, true);
+ expect_tag(1, true);
+ verify_tags(deadline);
+
+ GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);
+ GPR_ASSERT(0 == grpc_slice_str_cmp(details, "xyz"));
+ // the following sanity check makes sure that the requested error string is
+ // correctly populated by the core. It looks for certain substrings that are
+ // not likely to change much. Some parts of the error, like time created,
+ // obviously are not checked.
+ GPR_ASSERT(nullptr != strstr(error_string, "xyz"));
+ GPR_ASSERT(nullptr != strstr(error_string, "description"));
+ GPR_ASSERT(nullptr != strstr(error_string, "Error received from peer"));
+ GPR_ASSERT(nullptr != strstr(error_string, "grpc_message"));
+ GPR_ASSERT(nullptr != strstr(error_string, "grpc_status"));
+ GPR_ASSERT(0 == grpc_slice_str_cmp(call_details.method, "/foo"));
+ GPR_ASSERT(0 == call_details.flags);
+ GPR_ASSERT(was_cancelled == 1);
+
+ grpc_slice_unref(details);
+ gpr_free(static_cast<void*>(const_cast<char*>(error_string)));
+ grpc_metadata_array_destroy(&initial_metadata_recv);
+ grpc_metadata_array_destroy(&trailing_metadata_recv);
+ grpc_metadata_array_destroy(&request_metadata_recv);
+ grpc_call_details_destroy(&call_details);
+
+ grpc_call_unref(c);
+ grpc_call_unref(s);
+
+ int expected_calls = 1;
+ if (config.feature_mask & FEATURE_MASK_SUPPORTS_REQUEST_PROXYING) {
+ expected_calls *= 2;
+ }
+}
+
+static void test_invoke_simple_request(grpc_end2end_test_config config) {
+ grpc_end2end_test_fixture f;
+
+ f = begin_test(config, "test_invoke_simple_request", nullptr, nullptr);
+ simple_request_body(config, f);
+ end_test(&f);
+ config.tear_down_data(&f);
+}
+
+static void test_invoke_10_simple_requests(grpc_end2end_test_config config) {
+ int i;
+ grpc_end2end_test_fixture f =
+ begin_test(config, "test_invoke_10_simple_requests", nullptr, nullptr);
+ for (i = 0; i < 10; i++) {
+ simple_request_body(config, f);
+ gpr_log(GPR_INFO, "Running test: Passed simple request %d", i);
+ }
+ end_test(&f);
+ config.tear_down_data(&f);
+}
+
+static void test_invoke_many_simple_requests(grpc_end2end_test_config config) {
+ int i;
+ const int many = 1000;
+ grpc_end2end_test_fixture f =
+ begin_test(config, "test_invoke_many_simple_requests", nullptr, nullptr);
+ gpr_timespec t1 = gpr_now(GPR_CLOCK_MONOTONIC);
+ for (i = 0; i < many; i++) {
+ simple_request_body(config, f);
+ }
+ double us =
+ gpr_timespec_to_micros(gpr_time_sub(gpr_now(GPR_CLOCK_MONOTONIC), t1)) /
+ many;
+ gpr_log(GPR_INFO, "Time per ping %f us", us);
+ end_test(&f);
+ config.tear_down_data(&f);
+}
+
+static void simple_request(grpc_end2end_test_config config) {
+ int i;
+ for (i = 0; i < 10; i++) {
+ test_invoke_simple_request(config);
+ }
+ test_invoke_10_simple_requests(config);
+ test_invoke_many_simple_requests(config);
+}
+
+static void simple_request_pre_init() {
+ gpr_mu_init(&tags_mu);
+ gpr_cv_init(&tags_cv);
+}
+
+/* All test configurations */
+static grpc_end2end_test_config configs[] = {
+ {"inproc-callback", FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER, nullptr,
+ inproc_create_fixture, inproc_init_client, inproc_init_server,
+ inproc_tear_down},
+};
+
+int main(int argc, char** argv) {
+ grpc_test_init(argc, argv);
+ grpc_init();
+
+ simple_request_pre_init();
+ simple_request(configs[0]);
+
+ grpc_shutdown();
+
+ return 0;
+}
diff --git a/test/core/iomgr/BUILD b/test/core/iomgr/BUILD
index 002671a5fa..675d9e6278 100644
--- a/test/core/iomgr/BUILD
+++ b/test/core/iomgr/BUILD
@@ -247,6 +247,19 @@ grpc_cc_test(
)
grpc_cc_test(
+ name = "buffer_list_test",
+ srcs = ["buffer_list_test.cc"],
+ language = "C++",
+ deps = [
+ "//:gpr",
+ "//:grpc",
+ "//test/core/util:gpr_test_util",
+ "//test/core/util:grpc_test_util",
+ ],
+)
+
+
+grpc_cc_test(
name = "tcp_server_posix_test",
srcs = ["tcp_server_posix_test.cc"],
language = "C++",
diff --git a/test/core/iomgr/buffer_list_test.cc b/test/core/iomgr/buffer_list_test.cc
new file mode 100644
index 0000000000..c7f30fa092
--- /dev/null
+++ b/test/core/iomgr/buffer_list_test.cc
@@ -0,0 +1,111 @@
+/*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#include "src/core/lib/iomgr/buffer_list.h"
+
+#include <grpc/grpc.h>
+
+#include "test/core/util/test_config.h"
+
+#ifdef GRPC_LINUX_ERRQUEUE
+
+static void TestShutdownFlushesListVerifier(void* arg,
+ grpc_core::Timestamps* ts,
+ grpc_error* error) {
+ GPR_ASSERT(error == GRPC_ERROR_NONE);
+ GPR_ASSERT(arg != nullptr);
+ gpr_atm* done = reinterpret_cast<gpr_atm*>(arg);
+ gpr_atm_rel_store(done, static_cast<gpr_atm>(1));
+}
+
+/** Tests that all TracedBuffer elements in the list are flushed out on
+ * shutdown.
+ * Also tests that arg is passed correctly.
+ */
+static void TestShutdownFlushesList() {
+ grpc_core::grpc_tcp_set_write_timestamps_callback(
+ TestShutdownFlushesListVerifier);
+ grpc_core::TracedBuffer* list = nullptr;
+#define NUM_ELEM 5
+ gpr_atm verifier_called[NUM_ELEM];
+ for (auto i = 0; i < NUM_ELEM; i++) {
+ gpr_atm_rel_store(&verifier_called[i], static_cast<gpr_atm>(0));
+ grpc_core::TracedBuffer::AddNewEntry(
+ &list, i, static_cast<void*>(&verifier_called[i]));
+ }
+ grpc_core::TracedBuffer::Shutdown(&list, GRPC_ERROR_NONE);
+ GPR_ASSERT(list == nullptr);
+ for (auto i = 0; i < NUM_ELEM; i++) {
+ GPR_ASSERT(gpr_atm_acq_load(&verifier_called[i]) ==
+ static_cast<gpr_atm>(1));
+ }
+}
+
+static void TestVerifierCalledOnAckVerifier(void* arg,
+ grpc_core::Timestamps* ts,
+ grpc_error* error) {
+ GPR_ASSERT(error == GRPC_ERROR_NONE);
+ GPR_ASSERT(arg != nullptr);
+ GPR_ASSERT(ts->acked_time.clock_type == GPR_CLOCK_REALTIME);
+ GPR_ASSERT(ts->acked_time.tv_sec == 123);
+ GPR_ASSERT(ts->acked_time.tv_nsec == 456);
+ gpr_atm* done = reinterpret_cast<gpr_atm*>(arg);
+ gpr_atm_rel_store(done, static_cast<gpr_atm>(1));
+}
+
+/** Tests that the timestamp verifier is called on an ACK timestamp.
+ */
+static void TestVerifierCalledOnAck() {
+ struct sock_extended_err serr;
+ serr.ee_data = 213;
+ serr.ee_info = grpc_core::SCM_TSTAMP_ACK;
+ struct grpc_core::scm_timestamping tss;
+ tss.ts[0].tv_sec = 123;
+ tss.ts[0].tv_nsec = 456;
+ grpc_core::grpc_tcp_set_write_timestamps_callback(
+ TestVerifierCalledOnAckVerifier);
+ grpc_core::TracedBuffer* list = nullptr;
+ gpr_atm verifier_called;
+ gpr_atm_rel_store(&verifier_called, static_cast<gpr_atm>(0));
+ grpc_core::TracedBuffer::AddNewEntry(&list, 213, &verifier_called);
+ grpc_core::TracedBuffer::ProcessTimestamp(&list, &serr, &tss);
+ GPR_ASSERT(gpr_atm_acq_load(&verifier_called) == static_cast<gpr_atm>(1));
+ GPR_ASSERT(list == nullptr);
+ grpc_core::TracedBuffer::Shutdown(&list, GRPC_ERROR_NONE);
+}
+
+static void TestTcpBufferList() {
+ TestVerifierCalledOnAck();
+ TestShutdownFlushesList();
+}
+
+int main(int argc, char** argv) {
+ grpc_test_init(argc, argv);
+ grpc_init();
+ TestTcpBufferList();
+ grpc_shutdown();
+ return 0;
+}
+
+#else /* GRPC_LINUX_ERRQUEUE */
+
+int main(int argc, char** argv) { return 0; }
+
+#endif /* GRPC_LINUX_ERRQUEUE */
diff --git a/test/core/iomgr/endpoint_tests.cc b/test/core/iomgr/endpoint_tests.cc
index 8db8ac5ed6..a9e8ba86c5 100644
--- a/test/core/iomgr/endpoint_tests.cc
+++ b/test/core/iomgr/endpoint_tests.cc
@@ -150,8 +150,8 @@ static void read_and_write_test_write_handler(void* data, grpc_error* error) {
&state->current_write_data);
grpc_slice_buffer_reset_and_unref(&state->outgoing);
grpc_slice_buffer_addn(&state->outgoing, slices, nslices);
- grpc_endpoint_write(state->write_ep, &state->outgoing,
- &state->done_write);
+ grpc_endpoint_write(state->write_ep, &state->outgoing, &state->done_write,
+ nullptr);
gpr_free(slices);
return;
}
@@ -294,7 +294,8 @@ static void multiple_shutdown_test(grpc_endpoint_test_config config) {
grpc_slice_buffer_add(&slice_buffer, grpc_slice_from_copied_string("a"));
grpc_endpoint_write(f.client_ep, &slice_buffer,
GRPC_CLOSURE_CREATE(inc_on_failure, &fail_count,
- grpc_schedule_on_exec_ctx));
+ grpc_schedule_on_exec_ctx),
+ nullptr);
wait_for_fail_count(&fail_count, 3);
grpc_endpoint_shutdown(f.client_ep,
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test Shutdown"));
diff --git a/test/core/iomgr/ios/CFStreamTests/Podfile b/test/core/iomgr/ios/CFStreamTests/Podfile
index 630168a363..e6ec66d549 100644
--- a/test/core/iomgr/ios/CFStreamTests/Podfile
+++ b/test/core/iomgr/ios/CFStreamTests/Podfile
@@ -9,6 +9,7 @@ GRPC_LOCAL_SRC = '../../../../..'
# Install the dependencies in the main target plus all test targets.
target 'CFStreamTests' do
pod 'gRPC-Core/CFStream-Implementation', :path => GRPC_LOCAL_SRC
+ pod 'BoringSSL-GRPC', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true
end
pre_install do |installer|
diff --git a/test/core/iomgr/tcp_posix_test.cc b/test/core/iomgr/tcp_posix_test.cc
index 3e87831e44..6447cc234d 100644
--- a/test/core/iomgr/tcp_posix_test.cc
+++ b/test/core/iomgr/tcp_posix_test.cc
@@ -36,6 +36,9 @@
#include <grpc/support/time.h>
#include "src/core/lib/gpr/useful.h"
+#include "src/core/lib/iomgr/buffer_list.h"
+#include "src/core/lib/iomgr/ev_posix.h"
+#include "src/core/lib/iomgr/sockaddr_posix.h"
#include "src/core/lib/slice/slice_internal.h"
#include "test/core/iomgr/endpoint_tests.h"
#include "test/core/util/test_config.h"
@@ -68,6 +71,43 @@ static void create_sockets(int sv[2]) {
GPR_ASSERT(fcntl(sv[1], F_SETFL, flags | O_NONBLOCK) == 0);
}
+static void create_inet_sockets(int sv[2]) {
+ /* Prepare listening socket */
+ struct sockaddr_in addr;
+ memset(&addr, 0, sizeof(struct sockaddr_in));
+ addr.sin_family = AF_INET;
+ int sock = socket(AF_INET, SOCK_STREAM, 0);
+ GPR_ASSERT(sock);
+ GPR_ASSERT(bind(sock, (sockaddr*)&addr, sizeof(sockaddr_in)) == 0);
+ listen(sock, 1);
+
+ /* Prepare client socket and connect to server */
+ socklen_t len = sizeof(sockaddr_in);
+ GPR_ASSERT(getsockname(sock, (sockaddr*)&addr, &len) == 0);
+
+ int client = socket(AF_INET, SOCK_STREAM, 0);
+ GPR_ASSERT(client);
+ int ret;
+ do {
+ ret = connect(client, (sockaddr*)&addr, sizeof(sockaddr_in));
+ } while (ret == -1 && errno == EINTR);
+
+ /* Accept client connection */
+ len = sizeof(socklen_t);
+ int server;
+ do {
+ server = accept(sock, (sockaddr*)&addr, (socklen_t*)&len);
+ } while (server == -1 && errno == EINTR);
+ GPR_ASSERT(server != -1);
+
+ sv[0] = server;
+ sv[1] = client;
+ int flags = fcntl(sv[0], F_GETFL, 0);
+ GPR_ASSERT(fcntl(sv[0], F_SETFL, flags | O_NONBLOCK) == 0);
+ flags = fcntl(sv[1], F_GETFL, 0);
+ GPR_ASSERT(fcntl(sv[1], F_SETFL, flags | O_NONBLOCK) == 0);
+}
+
static ssize_t fill_socket(int fd) {
ssize_t write_bytes;
ssize_t total_bytes = 0;
@@ -289,11 +329,10 @@ static grpc_slice* allocate_blocks(size_t num_bytes, size_t slice_size,
static void write_done(void* user_data /* write_socket_state */,
grpc_error* error) {
+ GPR_ASSERT(error == GRPC_ERROR_NONE);
struct write_socket_state* state =
static_cast<struct write_socket_state*>(user_data);
- gpr_log(GPR_INFO, "Write done callback called");
gpr_mu_lock(g_mu);
- gpr_log(GPR_INFO, "Signalling write done");
state->write_done = 1;
GPR_ASSERT(
GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, nullptr)));
@@ -340,10 +379,24 @@ void drain_socket_blocking(int fd, size_t num_bytes, size_t read_size) {
gpr_free(buf);
}
+/* Verifier for timestamps callback for write_test */
+void timestamps_verifier(void* arg, grpc_core::Timestamps* ts,
+ grpc_error* error) {
+ GPR_ASSERT(error == GRPC_ERROR_NONE);
+ GPR_ASSERT(arg != nullptr);
+ GPR_ASSERT(ts->sendmsg_time.clock_type == GPR_CLOCK_REALTIME);
+ GPR_ASSERT(ts->scheduled_time.clock_type == GPR_CLOCK_REALTIME);
+ GPR_ASSERT(ts->acked_time.clock_type == GPR_CLOCK_REALTIME);
+ gpr_atm* done_timestamps = (gpr_atm*)arg;
+ gpr_atm_rel_store(done_timestamps, static_cast<gpr_atm>(1));
+}
+
/* Write to a socket using the grpc_tcp API, then drain it directly.
Note that if the write does not complete immediately we need to drain the
- socket in parallel with the read. */
-static void write_test(size_t num_bytes, size_t slice_size) {
+ socket in parallel with the read. If collect_timestamps is true, it will
+ try to get timestamps for the write. */
+static void write_test(size_t num_bytes, size_t slice_size,
+ bool collect_timestamps) {
int sv[2];
grpc_endpoint* ep;
struct write_socket_state state;
@@ -356,19 +409,27 @@ static void write_test(size_t num_bytes, size_t slice_size) {
grpc_timespec_to_millis_round_up(grpc_timeout_seconds_to_deadline(20));
grpc_core::ExecCtx exec_ctx;
+ if (collect_timestamps && !grpc_event_engine_can_track_errors()) {
+ return;
+ }
+
gpr_log(GPR_INFO,
"Start write test with %" PRIuPTR " bytes, slice size %" PRIuPTR,
num_bytes, slice_size);
- create_sockets(sv);
+ if (collect_timestamps) {
+ create_inet_sockets(sv);
+ } else {
+ create_sockets(sv);
+ }
grpc_arg a[1];
a[0].key = const_cast<char*>(GRPC_ARG_TCP_READ_CHUNK_SIZE);
a[0].type = GRPC_ARG_INTEGER,
a[0].value.integer = static_cast<int>(slice_size);
grpc_channel_args args = {GPR_ARRAY_SIZE(a), a};
- ep = grpc_tcp_create(grpc_fd_create(sv[1], "write_test", false), &args,
- "test");
+ ep = grpc_tcp_create(grpc_fd_create(sv[1], "write_test", collect_timestamps),
+ &args, "test");
grpc_endpoint_add_to_pollset(ep, g_pollset);
state.ep = ep;
@@ -381,18 +442,26 @@ static void write_test(size_t num_bytes, size_t slice_size) {
GRPC_CLOSURE_INIT(&write_done_closure, write_done, &state,
grpc_schedule_on_exec_ctx);
- grpc_endpoint_write(ep, &outgoing, &write_done_closure);
+ gpr_atm done_timestamps;
+ gpr_atm_rel_store(&done_timestamps, static_cast<gpr_atm>(0));
+ grpc_endpoint_write(ep, &outgoing, &write_done_closure,
+ grpc_event_engine_can_track_errors() && collect_timestamps
+ ? (void*)&done_timestamps
+ : nullptr);
drain_socket_blocking(sv[0], num_bytes, num_bytes);
+ exec_ctx.Flush();
gpr_mu_lock(g_mu);
for (;;) {
grpc_pollset_worker* worker = nullptr;
- if (state.write_done) {
+ if (state.write_done &&
+ (!(grpc_event_engine_can_track_errors() && collect_timestamps) ||
+ gpr_atm_acq_load(&done_timestamps) == static_cast<gpr_atm>(1))) {
break;
}
GPR_ASSERT(GRPC_LOG_IF_ERROR(
"pollset_work", grpc_pollset_work(g_pollset, &worker, deadline)));
gpr_mu_unlock(g_mu);
-
+ exec_ctx.Flush();
gpr_mu_lock(g_mu);
}
gpr_mu_unlock(g_mu);
@@ -497,14 +566,21 @@ void run_tests(void) {
large_read_test(8192);
large_read_test(1);
- write_test(100, 8192);
- write_test(100, 1);
- write_test(100000, 8192);
- write_test(100000, 1);
- write_test(100000, 137);
+ write_test(100, 8192, false);
+ write_test(100, 1, false);
+ write_test(100000, 8192, false);
+ write_test(100000, 1, false);
+ write_test(100000, 137, false);
+
+ write_test(100, 8192, true);
+ write_test(100, 1, true);
+ write_test(100000, 8192, true);
+ write_test(100000, 1, true);
+ write_test(100, 137, true);
for (i = 1; i < 1000; i = GPR_MAX(i + 1, i * 5 / 4)) {
- write_test(40320, i);
+ write_test(40320, i, false);
+ write_test(40320, i, true);
}
release_fd_test(100, 8192);
@@ -549,6 +625,7 @@ int main(int argc, char** argv) {
grpc_closure destroyed;
grpc_test_init(argc, argv);
grpc_init();
+ grpc_core::grpc_tcp_set_write_timestamps_callback(timestamps_verifier);
{
grpc_core::ExecCtx exec_ctx;
g_pollset = static_cast<grpc_pollset*>(gpr_zalloc(grpc_pollset_size()));
diff --git a/test/core/iomgr/timer_list_test.cc b/test/core/iomgr/timer_list_test.cc
index feedf3f149..fd65d1abf1 100644
--- a/test/core/iomgr/timer_list_test.cc
+++ b/test/core/iomgr/timer_list_test.cc
@@ -248,11 +248,7 @@ int main(int argc, char** argv) {
grpc_determine_iomgr_platform();
grpc_iomgr_platform_init();
gpr_set_log_verbosity(GPR_LOG_SEVERITY_DEBUG);
-#ifndef GPR_WINDOWS
- /* Skip this test on Windows until we figure out why it fails */
- /* https://github.com/grpc/grpc/issues/16417 */
long_running_service_cleanup_test();
-#endif // GPR_WINDOWS
add_test();
destruction_test();
grpc_iomgr_platform_shutdown();
diff --git a/test/core/tsi/ssl_transport_security_test.cc b/test/core/tsi/ssl_transport_security_test.cc
index b477904d60..baffad6ea3 100644
--- a/test/core/tsi/ssl_transport_security_test.cc
+++ b/test/core/tsi/ssl_transport_security_test.cc
@@ -208,9 +208,11 @@ static void check_session_reusage(ssl_tsi_test_fixture* ssl_fixture,
tsi_peer_get_property_by_name(peer, TSI_SSL_SESSION_REUSED_PEER_PROPERTY);
GPR_ASSERT(session_reused != nullptr);
if (ssl_fixture->session_reused) {
- GPR_ASSERT(strcmp(session_reused->value.data, "true") == 0);
+ GPR_ASSERT(strncmp(session_reused->value.data, "true",
+ session_reused->value.length) == 0);
} else {
- GPR_ASSERT(strcmp(session_reused->value.data, "false") == 0);
+ GPR_ASSERT(strncmp(session_reused->value.data, "false",
+ session_reused->value.length) == 0);
}
}
diff --git a/test/core/util/mock_endpoint.cc b/test/core/util/mock_endpoint.cc
index 1156cd5fc5..ef6fd62b51 100644
--- a/test/core/util/mock_endpoint.cc
+++ b/test/core/util/mock_endpoint.cc
@@ -55,7 +55,7 @@ static void me_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
}
static void me_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
mock_endpoint* m = reinterpret_cast<mock_endpoint*>(ep);
for (size_t i = 0; i < slices->count; i++) {
m->on_write(slices->slices[i]);
diff --git a/test/core/util/passthru_endpoint.cc b/test/core/util/passthru_endpoint.cc
index 5958216747..3cc8ad6fe1 100644
--- a/test/core/util/passthru_endpoint.cc
+++ b/test/core/util/passthru_endpoint.cc
@@ -76,7 +76,7 @@ static half* other_half(half* h) {
}
static void me_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
half* m = other_half(reinterpret_cast<half*>(ep));
gpr_mu_lock(&m->parent->mu);
grpc_error* error = GRPC_ERROR_NONE;
diff --git a/test/core/util/trickle_endpoint.cc b/test/core/util/trickle_endpoint.cc
index f2efb049b4..62ed72a629 100644
--- a/test/core/util/trickle_endpoint.cc
+++ b/test/core/util/trickle_endpoint.cc
@@ -62,7 +62,7 @@ static void maybe_call_write_cb_locked(trickle_endpoint* te) {
}
static void te_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
trickle_endpoint* te = reinterpret_cast<trickle_endpoint*>(ep);
gpr_mu_lock(&te->mu);
GPR_ASSERT(te->write_cb == nullptr);
@@ -186,7 +186,8 @@ size_t grpc_trickle_endpoint_trickle(grpc_endpoint* ep) {
te->last_write = now;
grpc_endpoint_write(
te->wrapped, &te->writing_buffer,
- GRPC_CLOSURE_CREATE(te_finish_write, te, grpc_schedule_on_exec_ctx));
+ GRPC_CLOSURE_CREATE(te_finish_write, te, grpc_schedule_on_exec_ctx),
+ nullptr);
maybe_call_write_cb_locked(te);
}
}
diff --git a/test/cpp/end2end/client_lb_end2end_test.cc b/test/cpp/end2end/client_lb_end2end_test.cc
index 68219c16dc..e5d6132012 100644
--- a/test/cpp/end2end/client_lb_end2end_test.cc
+++ b/test/cpp/end2end/client_lb_end2end_test.cc
@@ -129,12 +129,23 @@ class ClientLbEnd2endTest : public ::testing::Test {
}
}
- void StartServers(size_t num_servers,
- std::vector<int> ports = std::vector<int>()) {
+ void CreateServers(size_t num_servers,
+ std::vector<int> ports = std::vector<int>()) {
+ servers_.clear();
for (size_t i = 0; i < num_servers; ++i) {
int port = 0;
if (ports.size() == num_servers) port = ports[i];
- servers_.emplace_back(new ServerData(server_host_, port));
+ servers_.emplace_back(new ServerData(port));
+ }
+ }
+
+ void StartServer(size_t index) { servers_[index]->Start(server_host_); }
+
+ void StartServers(size_t num_servers,
+ std::vector<int> ports = std::vector<int>()) {
+ CreateServers(num_servers, ports);
+ for (size_t i = 0; i < num_servers; ++i) {
+ StartServer(i);
}
}
@@ -240,20 +251,23 @@ class ClientLbEnd2endTest : public ::testing::Test {
std::unique_ptr<std::thread> thread_;
bool server_ready_ = false;
- explicit ServerData(const grpc::string& server_host, int port = 0) {
+ explicit ServerData(int port = 0) {
port_ = port > 0 ? port : grpc_pick_unused_port_or_die();
+ }
+
+ void Start(const grpc::string& server_host) {
gpr_log(GPR_INFO, "starting server on port %d", port_);
std::mutex mu;
std::unique_lock<std::mutex> lock(mu);
std::condition_variable cond;
thread_.reset(new std::thread(
- std::bind(&ServerData::Start, this, server_host, &mu, &cond)));
+ std::bind(&ServerData::Serve, this, server_host, &mu, &cond)));
cond.wait(lock, [this] { return server_ready_; });
server_ready_ = false;
gpr_log(GPR_INFO, "server startup complete");
}
- void Start(const grpc::string& server_host, std::mutex* mu,
+ void Serve(const grpc::string& server_host, std::mutex* mu,
std::condition_variable* cond) {
std::ostringstream server_address;
server_address << server_host << ":" << port_;
@@ -601,6 +615,41 @@ TEST_F(ClientLbEnd2endTest, PickFirstReresolutionNoSelected) {
EXPECT_EQ("pick_first", channel->GetLoadBalancingPolicyName());
}
+TEST_F(ClientLbEnd2endTest, PickFirstReconnectWithoutNewResolverResult) {
+ std::vector<int> ports = {grpc_pick_unused_port_or_die()};
+ StartServers(1, ports);
+ auto channel = BuildChannel("pick_first");
+ auto stub = BuildStub(channel);
+ SetNextResolution(ports);
+ gpr_log(GPR_INFO, "****** INITIAL CONNECTION *******");
+ WaitForServer(stub, 0, DEBUG_LOCATION);
+ gpr_log(GPR_INFO, "****** STOPPING SERVER ******");
+ servers_[0]->Shutdown();
+ EXPECT_TRUE(WaitForChannelNotReady(channel.get()));
+ gpr_log(GPR_INFO, "****** RESTARTING SERVER ******");
+ StartServers(1, ports);
+ WaitForServer(stub, 0, DEBUG_LOCATION);
+}
+
+TEST_F(ClientLbEnd2endTest,
+ PickFirstReconnectWithoutNewResolverResultStartsFromTopOfList) {
+ std::vector<int> ports = {grpc_pick_unused_port_or_die(),
+ grpc_pick_unused_port_or_die()};
+ CreateServers(2, ports);
+ StartServer(1);
+ auto channel = BuildChannel("pick_first");
+ auto stub = BuildStub(channel);
+ SetNextResolution(ports);
+ gpr_log(GPR_INFO, "****** INITIAL CONNECTION *******");
+ WaitForServer(stub, 1, DEBUG_LOCATION);
+ gpr_log(GPR_INFO, "****** STOPPING SERVER ******");
+ servers_[1]->Shutdown();
+ EXPECT_TRUE(WaitForChannelNotReady(channel.get()));
+ gpr_log(GPR_INFO, "****** STARTING BOTH SERVERS ******");
+ StartServers(2, ports);
+ WaitForServer(stub, 0, DEBUG_LOCATION);
+}
+
TEST_F(ClientLbEnd2endTest, PickFirstCheckStateBeforeStartWatch) {
std::vector<int> ports = {grpc_pick_unused_port_or_die()};
StartServers(1, ports);
@@ -613,7 +662,6 @@ TEST_F(ClientLbEnd2endTest, PickFirstCheckStateBeforeStartWatch) {
servers_[0]->Shutdown();
// Channel 1 will receive a re-resolution containing the same server. It will
// create a new subchannel and hold a ref to it.
- servers_.clear();
StartServers(1, ports);
gpr_log(GPR_INFO, "****** SERVER RESTARTED *******");
auto channel_2 = BuildChannel("pick_first");
@@ -632,7 +680,6 @@ TEST_F(ClientLbEnd2endTest, PickFirstCheckStateBeforeStartWatch) {
EXPECT_TRUE(WaitForChannelNotReady(channel_2.get()));
// Channel 2 will also receive a re-resolution containing the same server.
// Both channels will ref the same subchannel that failed.
- servers_.clear();
StartServers(1, ports);
gpr_log(GPR_INFO, "****** SERVER RESTARTED AGAIN *******");
gpr_log(GPR_INFO, "****** CHANNEL 2 STARTING A CALL *******");
@@ -860,7 +907,7 @@ TEST_F(ClientLbEnd2endTest, RoundRobinReresolve) {
// Kill all servers
gpr_log(GPR_INFO, "****** ABOUT TO KILL SERVERS *******");
for (size_t i = 0; i < servers_.size(); ++i) {
- servers_[i]->Shutdown(false);
+ servers_[i]->Shutdown(true);
}
gpr_log(GPR_INFO, "****** SERVERS KILLED *******");
gpr_log(GPR_INFO, "****** SENDING DOOMED REQUESTS *******");
@@ -921,7 +968,8 @@ TEST_F(ClientLbEnd2endTest, RoundRobinSingleReconnect) {
// No requests have gone to the deceased server.
EXPECT_EQ(pre_death, post_death);
// Bring the first server back up.
- servers_[0].reset(new ServerData(server_host_, ports[0]));
+ servers_[0].reset(new ServerData(ports[0]));
+ StartServer(0);
// Requests should start arriving at the first server either right away (if
// the server managed to start before the RR policy retried the subchannel) or
// after the subchannel retry delay otherwise (RR's subchannel retried before
diff --git a/test/cpp/microbenchmarks/bm_chttp2_transport.cc b/test/cpp/microbenchmarks/bm_chttp2_transport.cc
index 1e9bd273aa..189923a841 100644
--- a/test/cpp/microbenchmarks/bm_chttp2_transport.cc
+++ b/test/cpp/microbenchmarks/bm_chttp2_transport.cc
@@ -96,7 +96,7 @@ class DummyEndpoint : public grpc_endpoint {
}
static void write(grpc_endpoint* ep, grpc_slice_buffer* slices,
- grpc_closure* cb) {
+ grpc_closure* cb, void* arg) {
GRPC_CLOSURE_SCHED(cb, GRPC_ERROR_NONE);
}
diff --git a/test/cpp/qps/BUILD b/test/cpp/qps/BUILD
index b958c75fc7..483b29b1b3 100644
--- a/test/cpp/qps/BUILD
+++ b/test/cpp/qps/BUILD
@@ -15,6 +15,7 @@
licenses(["notice"]) # Apache v2
load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_cc_library", "grpc_cc_binary", "grpc_package")
+load("//test/cpp/qps:qps_benchmark_script.bzl", "qps_json_driver_batch", "json_run_localhost_batch")
grpc_package(name = "test/cpp/qps")
@@ -22,8 +23,8 @@ grpc_cc_library(
name = "parse_json",
srcs = ["parse_json.cc"],
hdrs = ["parse_json.h"],
- deps = ["//:grpc++"],
external_deps = ["protobuf"],
+ deps = ["//:grpc++"],
)
grpc_cc_library(
@@ -31,16 +32,19 @@ grpc_cc_library(
srcs = [
"client_async.cc",
"client_sync.cc",
+ "qps_server_builder.cc",
"qps_worker.cc",
"server_async.cc",
"server_sync.cc",
- "qps_server_builder.cc",
],
hdrs = [
"client.h",
+ "qps_server_builder.h",
"qps_worker.h",
"server.h",
- "qps_server_builder.h",
+ ],
+ external_deps = [
+ "gflags",
],
deps = [
":histogram",
@@ -56,11 +60,8 @@ grpc_cc_library(
"//test/core/end2end:ssl_test_data",
"//test/core/util:gpr_test_util",
"//test/core/util:grpc_test_util",
- "//test/cpp/util:test_util",
"//test/cpp/util:test_config",
- ],
- external_deps = [
- "gflags",
+ "//test/cpp/util:test_util",
],
)
@@ -97,15 +98,15 @@ grpc_cc_library(
hdrs = [
"benchmark_config.h",
],
+ external_deps = [
+ "gflags",
+ ],
deps = [
":driver_impl",
":histogram",
"//:grpc++",
"//src/proto/grpc/testing:control_proto",
],
- external_deps = [
- "gflags",
- ],
)
grpc_cc_library(
@@ -117,6 +118,21 @@ grpc_cc_library(
deps = ["//test/core/util:grpc_test_util"],
)
+grpc_cc_binary(
+ name = "qps_json_driver",
+ srcs = ["qps_json_driver.cc"],
+ external_deps = [
+ "gflags",
+ ],
+ deps = [
+ ":benchmark_config",
+ ":driver_impl",
+ "//:grpc++",
+ "//test/cpp/util:test_config",
+ "//test/cpp/util:test_util",
+ ],
+)
+
grpc_cc_test(
name = "inproc_sync_unary_ping_pong_test",
srcs = ["inproc_sync_unary_ping_pong_test.cc"],
@@ -135,17 +151,9 @@ grpc_cc_library(
deps = ["//:grpc++"],
)
-grpc_cc_binary(
- name = "json_run_localhost",
- srcs = ["json_run_localhost.cc"],
- deps = [
- "//:gpr",
- "//test/core/util:gpr_test_util",
- "//test/core/util:grpc_test_util",
- "//test/cpp/util:test_config",
- "//test/cpp/util:test_util",
- ],
-)
+qps_json_driver_batch()
+
+json_run_localhost_batch()
grpc_cc_test(
name = "qps_interarrival_test",
@@ -157,24 +165,10 @@ grpc_cc_test(
],
)
-grpc_cc_binary(
- name = "qps_json_driver",
- srcs = ["qps_json_driver.cc"],
- deps = [
- ":benchmark_config",
- ":driver_impl",
- "//:grpc++",
- "//test/cpp/util:test_config",
- "//test/cpp/util:test_util",
- ],
- external_deps = [
- "gflags",
- ],
-)
-
grpc_cc_test(
name = "qps_openloop_test",
srcs = ["qps_openloop_test.cc"],
+ data = ["//third_party/toolchains:RBE_USE_MACHINE_TYPE_LARGE"],
deps = [
":benchmark_config",
":driver_impl",
@@ -182,7 +176,6 @@ grpc_cc_test(
"//test/cpp/util:test_config",
"//test/cpp/util:test_util",
],
- data = ["//third_party/toolchains:RBE_USE_MACHINE_TYPE_LARGE"],
)
grpc_cc_test(
diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h
index 9d7469c9b5..0b4b2ff0a9 100644
--- a/test/cpp/qps/client.h
+++ b/test/cpp/qps/client.h
@@ -180,6 +180,19 @@ class Client {
timer_result = timer_->Mark();
}
+ // Print the median latency per interval for one thread.
+ // If the number of warmup seconds is x, then the first x + 1 numbers in the
+ // vector are from the warmup period and should be discarded.
+ if (median_latency_collection_interval_seconds_ > 0) {
+ std::vector<double> medians_per_interval =
+ threads_[0]->GetMedianPerIntervalList();
+ gpr_log(GPR_INFO, "Num threads: %ld", threads_.size());
+ gpr_log(GPR_INFO, "Number of medians: %ld", medians_per_interval.size());
+ for (size_t j = 0; j < medians_per_interval.size(); j++) {
+ gpr_log(GPR_INFO, "%f", medians_per_interval[j]);
+ }
+ }
+
grpc_stats_data core_stats;
grpc_stats_collect(&core_stats);
@@ -210,6 +223,12 @@ class Client {
}
}
+ // Returns the interval (in seconds) between collecting latency medians. If 0,
+ // no periodic median latencies will be collected.
+ double GetLatencyCollectionIntervalInSeconds() {
+ return median_latency_collection_interval_seconds_;
+ }
+
virtual int GetPollCount() {
// For sync client.
return 0;
@@ -218,6 +237,7 @@ class Client {
protected:
bool closed_loop_;
gpr_atm thread_pool_done_;
+ double median_latency_collection_interval_seconds_; // In seconds
void StartThreads(size_t num_threads) {
gpr_atm_rel_store(&thread_pool_done_, static_cast<gpr_atm>(false));
@@ -299,10 +319,27 @@ class Client {
MergeStatusHistogram(statuses_, s);
}
+ std::vector<double> GetMedianPerIntervalList() {
+ return medians_each_interval_list_;
+ }
+
void UpdateHistogram(HistogramEntry* entry) {
std::lock_guard<std::mutex> g(mu_);
if (entry->value_used()) {
histogram_.Add(entry->value());
+ if (client_->GetLatencyCollectionIntervalInSeconds() > 0) {
+ histogram_per_interval_.Add(entry->value());
+ double now = UsageTimer::Now();
+ if ((now - interval_start_time_) >=
+ client_->GetLatencyCollectionIntervalInSeconds()) {
+ // Record the median latency of requests from the last interval.
+ // Divide by 1e3 to get microseconds.
+ medians_each_interval_list_.push_back(
+ histogram_per_interval_.Percentile(50) / 1e3);
+ histogram_per_interval_.Reset();
+ interval_start_time_ = now;
+ }
+ }
}
if (entry->status_used()) {
statuses_[entry->status()]++;
@@ -334,6 +371,11 @@ class Client {
Client* client_;
const size_t idx_;
std::thread impl_;
+ // The following are used only if
+ // median_latency_collection_interval_seconds_ is greater than 0
+ Histogram histogram_per_interval_;
+ std::vector<double> medians_each_interval_list_;
+ double interval_start_time_;
};
bool ThreadCompleted() {
@@ -392,7 +434,8 @@ class ClientImpl : public Client {
for (auto& t : connecting_threads) {
t->join();
}
-
+ median_latency_collection_interval_seconds_ =
+ config.median_latency_collection_interval_millis() / 1e3;
ClientRequestCreator<RequestType> create_req(&request_,
config.payload_config());
}
diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc
index cabbd51843..11cfb4aa05 100644
--- a/test/cpp/qps/driver.cc
+++ b/test/cpp/qps/driver.cc
@@ -198,7 +198,8 @@ std::unique_ptr<ScenarioResult> RunScenario(
const ServerConfig& initial_server_config, size_t num_servers,
int warmup_seconds, int benchmark_seconds, int spawn_local_worker_count,
const grpc::string& qps_server_target_override,
- const grpc::string& credential_type, bool run_inproc) {
+ const grpc::string& credential_type, bool run_inproc,
+ int32_t median_latency_collection_interval_millis) {
if (run_inproc) {
g_inproc_servers = new std::vector<grpc::testing::Server*>;
}
@@ -317,6 +318,9 @@ std::unique_ptr<ScenarioResult> RunScenario(
}
}
+ client_config.set_median_latency_collection_interval_millis(
+ median_latency_collection_interval_millis);
+
// Targets are all set by now
result_client_config = client_config;
// Start clients
diff --git a/test/cpp/qps/driver.h b/test/cpp/qps/driver.h
index fede4d8045..cda89f7ddf 100644
--- a/test/cpp/qps/driver.h
+++ b/test/cpp/qps/driver.h
@@ -32,7 +32,8 @@ std::unique_ptr<ScenarioResult> RunScenario(
const grpc::testing::ServerConfig& server_config, size_t num_servers,
int warmup_seconds, int benchmark_seconds, int spawn_local_worker_count,
const grpc::string& qps_server_target_override,
- const grpc::string& credential_type, bool run_inproc);
+ const grpc::string& credential_type, bool run_inproc,
+ int32_t median_latency_collection_interval_millis);
bool RunQuit(const grpc::string& credential_type);
} // namespace testing
diff --git a/test/cpp/qps/gen_build_yaml.py b/test/cpp/qps/gen_build_yaml.py
index 776283c25a..fb2caf5486 100755
--- a/test/cpp/qps/gen_build_yaml.py
+++ b/test/cpp/qps/gen_build_yaml.py
@@ -14,6 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+from __future__ import print_function
import json
import pipes
import shutil
@@ -68,62 +69,66 @@ def maybe_exclude_gcov(scenario_json):
return ['gcov']
return []
-print yaml.dump({
- 'tests': [
- {
- 'name': 'json_run_localhost',
- 'shortname': 'json_run_localhost:%s' % scenario_json['name'],
- 'args': ['--scenarios_json', _scenario_json_string(scenario_json, False)],
- 'ci_platforms': ['linux'],
- 'platforms': ['linux'],
- 'flaky': False,
- 'language': 'c++',
- 'boringssl': True,
- 'defaults': 'boringssl',
- 'cpu_cost': guess_cpu(scenario_json, False),
- 'exclude_configs': ['tsan', 'asan'] + maybe_exclude_gcov(scenario_json),
- 'timeout_seconds': 2*60,
- 'excluded_poll_engines': scenario_json.get('EXCLUDED_POLL_ENGINES', []),
- 'auto_timeout_scaling': False
- }
- for scenario_json in scenario_config.CXXLanguage().scenarios()
- if 'scalable' in scenario_json.get('CATEGORIES', [])
- ] + [
- {
- 'name': 'qps_json_driver',
- 'shortname': 'qps_json_driver:inproc_%s' % scenario_json['name'],
- 'args': ['--run_inproc', '--scenarios_json', _scenario_json_string(scenario_json, False)],
- 'ci_platforms': ['linux'],
- 'platforms': ['linux'],
- 'flaky': False,
- 'language': 'c++',
- 'boringssl': True,
- 'defaults': 'boringssl',
- 'cpu_cost': guess_cpu(scenario_json, False),
- 'exclude_configs': ['tsan', 'asan'],
- 'timeout_seconds': 6*60,
- 'excluded_poll_engines': scenario_json.get('EXCLUDED_POLL_ENGINES', [])
- }
- for scenario_json in scenario_config.CXXLanguage().scenarios()
- if 'inproc' in scenario_json.get('CATEGORIES', [])
- ] + [
- {
- 'name': 'json_run_localhost',
- 'shortname': 'json_run_localhost:%s_low_thread_count' % scenario_json['name'],
- 'args': ['--scenarios_json', _scenario_json_string(scenario_json, True)],
- 'ci_platforms': ['linux'],
- 'platforms': ['linux'],
- 'flaky': False,
- 'language': 'c++',
- 'boringssl': True,
- 'defaults': 'boringssl',
- 'cpu_cost': guess_cpu(scenario_json, True),
- 'exclude_configs': sorted(c for c in configs_from_yaml if c not in ('tsan', 'asan')),
- 'timeout_seconds': 10*60,
- 'excluded_poll_engines': scenario_json.get('EXCLUDED_POLL_ENGINES', []),
- 'auto_timeout_scaling': False
- }
- for scenario_json in scenario_config.CXXLanguage().scenarios()
- if 'scalable' in scenario_json.get('CATEGORIES', [])
- ]
-})
+def generate_yaml():
+ return {
+ 'tests': [
+ {
+ 'name': 'json_run_localhost',
+ 'shortname': 'json_run_localhost:%s' % scenario_json['name'],
+ 'args': ['--scenarios_json', _scenario_json_string(scenario_json, False)],
+ 'ci_platforms': ['linux'],
+ 'platforms': ['linux'],
+ 'flaky': False,
+ 'language': 'c++',
+ 'boringssl': True,
+ 'defaults': 'boringssl',
+ 'cpu_cost': guess_cpu(scenario_json, False),
+ 'exclude_configs': ['tsan', 'asan'] + maybe_exclude_gcov(scenario_json),
+ 'timeout_seconds': 2*60,
+ 'excluded_poll_engines': scenario_json.get('EXCLUDED_POLL_ENGINES', []),
+ 'auto_timeout_scaling': False
+ }
+ for scenario_json in scenario_config.CXXLanguage().scenarios()
+ if 'scalable' in scenario_json.get('CATEGORIES', [])
+ ] + [
+ {
+ 'name': 'qps_json_driver',
+ 'shortname': 'qps_json_driver:inproc_%s' % scenario_json['name'],
+ 'args': ['--run_inproc', '--scenarios_json', _scenario_json_string(scenario_json, False)],
+ 'ci_platforms': ['linux'],
+ 'platforms': ['linux'],
+ 'flaky': False,
+ 'language': 'c++',
+ 'boringssl': True,
+ 'defaults': 'boringssl',
+ 'cpu_cost': guess_cpu(scenario_json, False),
+ 'exclude_configs': ['tsan', 'asan'],
+ 'timeout_seconds': 6*60,
+ 'excluded_poll_engines': scenario_json.get('EXCLUDED_POLL_ENGINES', [])
+ }
+ for scenario_json in scenario_config.CXXLanguage().scenarios()
+ if 'inproc' in scenario_json.get('CATEGORIES', [])
+ ] + [
+ {
+ 'name': 'json_run_localhost',
+ 'shortname': 'json_run_localhost:%s_low_thread_count' % scenario_json['name'],
+ 'args': ['--scenarios_json', _scenario_json_string(scenario_json, True)],
+ 'ci_platforms': ['linux'],
+ 'platforms': ['linux'],
+ 'flaky': False,
+ 'language': 'c++',
+ 'boringssl': True,
+ 'defaults': 'boringssl',
+ 'cpu_cost': guess_cpu(scenario_json, True),
+ 'exclude_configs': sorted(c for c in configs_from_yaml if c not in ('tsan', 'asan')),
+ 'timeout_seconds': 10*60,
+ 'excluded_poll_engines': scenario_json.get('EXCLUDED_POLL_ENGINES', []),
+ 'auto_timeout_scaling': False
+ }
+ for scenario_json in scenario_config.CXXLanguage().scenarios()
+ if 'scalable' in scenario_json.get('CATEGORIES', [])
+ ]
+ }
+
+
+print(yaml.dump(generate_yaml())) \ No newline at end of file
diff --git a/test/cpp/qps/histogram.h b/test/cpp/qps/histogram.h
index ba72b5b332..6275128f34 100644
--- a/test/cpp/qps/histogram.h
+++ b/test/cpp/qps/histogram.h
@@ -34,6 +34,11 @@ class Histogram {
~Histogram() {
if (impl_) grpc_histogram_destroy(impl_);
}
+ void Reset() {
+ if (impl_) grpc_histogram_destroy(impl_);
+ impl_ = grpc_histogram_create(default_resolution(), default_max_possible());
+ }
+
Histogram(Histogram&& other) : impl_(other.impl_) { other.impl_ = nullptr; }
void Merge(const Histogram& h) { grpc_histogram_merge(impl_, h.impl_); }
diff --git a/test/cpp/qps/inproc_sync_unary_ping_pong_test.cc b/test/cpp/qps/inproc_sync_unary_ping_pong_test.cc
index f2e977d48b..56d1730252 100644
--- a/test/cpp/qps/inproc_sync_unary_ping_pong_test.cc
+++ b/test/cpp/qps/inproc_sync_unary_ping_pong_test.cc
@@ -48,7 +48,7 @@ static void RunSynchronousUnaryPingPong() {
const auto result =
RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2, "",
- kInsecureCredentialsType, true);
+ kInsecureCredentialsType, true, 0);
GetReporter()->ReportQPS(*result);
GetReporter()->ReportLatency(*result);
diff --git a/test/cpp/qps/json_run_localhost_scenario_gen.py b/test/cpp/qps/json_run_localhost_scenario_gen.py
new file mode 100755
index 0000000000..01f6a699d5
--- /dev/null
+++ b/test/cpp/qps/json_run_localhost_scenario_gen.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python2.7
+
+# Copyright 2018 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import gen_build_yaml as gen
+import json
+
+def generate_args():
+ all_scenario_set = gen.generate_yaml()
+ all_scenario_set = all_scenario_set['tests']
+ json_run_localhost_scenarios = \
+ [item for item in all_scenario_set if item['name'] == 'qps_json_driver']
+ json_run_localhost_arg_set = \
+ [item['args'][2] for item in json_run_localhost_scenarios \
+ if 'args' in item and len(item['args']) > 2]
+ deserialized_scenarios = [json.loads(item)['scenarios'][0] \
+ for item in json_run_localhost_arg_set]
+ all_scenarios = {scenario['name'].encode('ascii', 'ignore'): \
+ '\'{\'scenarios\' : [' + json.dumps(scenario) + ']}\'' \
+ for scenario in deserialized_scenarios}
+
+ serialized_scenarios_str = str(all_scenarios).encode('ascii', 'ignore')
+ with open('json_run_localhost_scenarios.bzl', 'wb') as f:
+ f.write('JSON_RUN_LOCALHOST_SCENARIOS = ' + serialized_scenarios_str + '\n')
+
+generate_args()
diff --git a/test/cpp/qps/json_run_localhost_scenarios.bzl b/test/cpp/qps/json_run_localhost_scenarios.bzl
new file mode 100644
index 0000000000..589dcac2b5
--- /dev/null
+++ b/test/cpp/qps/json_run_localhost_scenarios.bzl
@@ -0,0 +1 @@
+JSON_RUN_LOCALHOST_SCENARIOS = {'cpp_protobuf_sync_streaming_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_sync_streaming_qps_unconstrained_1mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_qps_unconstrained_1mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "messages_per_stream": 1, "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_unary_ping_pong_insecure_1MB': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_ping_pong_insecure_1MB", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 1, "outstanding_rpcs_per_channel": 1, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 1048576, "req_size": 1048576}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_protobuf_sync_streaming_qps_unconstrained_10mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_qps_unconstrained_10mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "messages_per_stream": 10, "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_unary_qps_unconstrained_2waysharedcq_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_qps_unconstrained_2waysharedcq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 2, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 2}, "num_clients": 0}]}\'', 'cpp_protobuf_async_unary_qps_unconstrained_1cq_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_qps_unconstrained_1cq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 1000000, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 13, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 1000000}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_2waysharedcq_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_2waysharedcq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 2, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 2}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_1cq_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_1cq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 1000000}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 13, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 1000000}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_10mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_10mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "messages_per_stream": 10, "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_64KBmsg_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_64KBmsg_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 65536, "req_size": 65536}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 65536, "req_size": 65536}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_1cq_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_1cq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 1000000, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 13, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 1000000}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_from_server_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_from_server_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING_FROM_SERVER", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_from_client_1channel_1MB': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_from_client_1channel_1MB", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 1, "rpc_type": "STREAMING_FROM_CLIENT", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 1048576, "req_size": 1048576}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_protobuf_async_unary_1channel_100rpcs_1MB': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_1channel_100rpcs_1MB", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 1048576, "req_size": 1048576}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_generic_async_streaming_qps_1channel_1MBmsg_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_1channel_1MBmsg_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 1048576, "req_size": 1048576}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 1048576, "req_size": 1048576}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_1mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_1mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "messages_per_stream": 1, "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_client_unary_1channel_64wide_128Breq_8MBresp_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_client_unary_1channel_64wide_128Breq_8MBresp_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 1, "outstanding_rpcs_per_channel": 1, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 8388608, "req_size": 128}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_protobuf_sync_streaming_from_client_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_from_client_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING_FROM_CLIENT", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_from_client_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_from_client_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING_FROM_CLIENT", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_2waysharedcq_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_2waysharedcq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 2}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 2}, "num_clients": 0}]}\'', 'cpp_protobuf_sync_unary_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_unary_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_sync_streaming_from_server_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_from_server_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING_FROM_SERVER", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_async_unary_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_10mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_10mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "messages_per_stream": 10, "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_ping_pong_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_ping_pong_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 1, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}], "async_client_threads": 1, "outstanding_rpcs_per_channel": 1, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_1mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_1mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "messages_per_stream": 1, "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\''}
diff --git a/test/cpp/qps/qps_benchmark_script.bzl b/test/cpp/qps/qps_benchmark_script.bzl
new file mode 100644
index 0000000000..90902c0d41
--- /dev/null
+++ b/test/cpp/qps/qps_benchmark_script.bzl
@@ -0,0 +1,72 @@
+# Copyright 2018 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# This is for the gRPC build system. This isn't intended to be used outsite of
+# the BUILD file for gRPC. It contains the mapping for the template system we
+# use to generate other platform's build system files.
+#
+# Please consider that there should be a high bar for additions and changes to
+# this file.
+# Each rule listed must be re-written for Google's internal build system, and
+# each change must be ported from one to the other.
+#
+
+load("//bazel:grpc_build_system.bzl", "grpc_cc_binary", "grpc_cc_test")
+load("//test/cpp/qps:qps_json_driver_scenarios.bzl", "QPS_JSON_DRIVER_SCENARIOS")
+load("//test/cpp/qps:json_run_localhost_scenarios.bzl", "JSON_RUN_LOCALHOST_SCENARIOS")
+
+def qps_json_driver_batch():
+ for scenario in QPS_JSON_DRIVER_SCENARIOS:
+ grpc_cc_test(
+ name = "qps_json_driver_test_%s" % scenario,
+ srcs = ["qps_json_driver.cc"],
+ args = [
+ "--run_inproc",
+ "--scenarios_json",
+ QPS_JSON_DRIVER_SCENARIOS[scenario],
+ ],
+ external_deps = [
+ "gflags",
+ ],
+ deps = [
+ ":benchmark_config",
+ ":driver_impl",
+ "//:grpc++",
+ "//test/cpp/util:test_config",
+ "//test/cpp/util:test_util",
+ ],
+ )
+
+def json_run_localhost_batch():
+ for scenario in JSON_RUN_LOCALHOST_SCENARIOS:
+ grpc_cc_test(
+ name = "json_run_localhost_%s" % scenario,
+ srcs = ["json_run_localhost.cc"],
+ args = [
+ "--scenarios_json",
+ JSON_RUN_LOCALHOST_SCENARIOS[scenario],
+ ],
+ data = [
+ "//test/cpp/qps:qps_json_driver",
+ "//test/cpp/qps:qps_worker",
+ ],
+ deps = [
+ "//:gpr",
+ "//test/core/util:gpr_test_util",
+ "//test/core/util:grpc_test_util",
+ "//test/cpp/util:test_config",
+ "//test/cpp/util:test_util",
+ ],
+ )
diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc
index 0ff692255c..eaa0dd992c 100644
--- a/test/cpp/qps/qps_json_driver.cc
+++ b/test/cpp/qps/qps_json_driver.cc
@@ -66,6 +66,11 @@ DEFINE_string(json_file_out, "", "File to write the JSON output to.");
DEFINE_string(credential_type, grpc::testing::kInsecureCredentialsType,
"Credential type for communication with workers");
DEFINE_bool(run_inproc, false, "Perform an in-process transport test");
+DEFINE_int32(
+ median_latency_collection_interval_millis, 0,
+ "Specifies the period between gathering latency medians in "
+ "milliseconds. The medians will be logged out on the client at the "
+ "end of the benchmark run. If 0, this periodic collection is disabled.");
namespace grpc {
namespace testing {
@@ -73,13 +78,13 @@ namespace testing {
static std::unique_ptr<ScenarioResult> RunAndReport(const Scenario& scenario,
bool* success) {
std::cerr << "RUNNING SCENARIO: " << scenario.name() << "\n";
- auto result =
- RunScenario(scenario.client_config(), scenario.num_clients(),
- scenario.server_config(), scenario.num_servers(),
- scenario.warmup_seconds(), scenario.benchmark_seconds(),
- !FLAGS_run_inproc ? scenario.spawn_local_worker_count() : -2,
- FLAGS_qps_server_target_override, FLAGS_credential_type,
- FLAGS_run_inproc);
+ auto result = RunScenario(
+ scenario.client_config(), scenario.num_clients(),
+ scenario.server_config(), scenario.num_servers(),
+ scenario.warmup_seconds(), scenario.benchmark_seconds(),
+ !FLAGS_run_inproc ? scenario.spawn_local_worker_count() : -2,
+ FLAGS_qps_server_target_override, FLAGS_credential_type, FLAGS_run_inproc,
+ FLAGS_median_latency_collection_interval_millis);
// Amend the result with scenario config. Eventually we should adjust
// RunScenario contract so we don't need to touch the result here.
diff --git a/test/cpp/qps/qps_json_driver_scenario_gen.py b/test/cpp/qps/qps_json_driver_scenario_gen.py
new file mode 100755
index 0000000000..393f968a64
--- /dev/null
+++ b/test/cpp/qps/qps_json_driver_scenario_gen.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python2.7
+
+# Copyright 2018 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import gen_build_yaml as gen
+import json
+
+def generate_args():
+ all_scenario_set = gen.generate_yaml()
+ all_scenario_set = all_scenario_set['tests']
+ qps_json_driver_scenario_set = \
+ [item for item in all_scenario_set if item['name'] == 'qps_json_driver']
+ qps_json_driver_arg_set = \
+ [item['args'][2] for item in qps_json_driver_scenario_set \
+ if 'args' in item and len(item['args']) > 2]
+ deserialized_scenarios = [json.loads(item)['scenarios'][0] \
+ for item in qps_json_driver_arg_set]
+ all_scenarios = {scenario['name'].encode('ascii', 'ignore'): \
+ '\'{\'scenarios\' : [' + json.dumps(scenario) + ']}\'' \
+ for scenario in deserialized_scenarios}
+
+ serialized_scenarios_str = str(all_scenarios).encode('ascii', 'ignore')
+ with open('qps_json_driver_scenarios.bzl', 'w') as f:
+ f.write('QPS_JSON_DRIVER_SCENARIOS = ' + serialized_scenarios_str + '\n')
+
+generate_args()
diff --git a/test/cpp/qps/qps_json_driver_scenarios.bzl b/test/cpp/qps/qps_json_driver_scenarios.bzl
new file mode 100644
index 0000000000..6e2c28a8e7
--- /dev/null
+++ b/test/cpp/qps/qps_json_driver_scenarios.bzl
@@ -0,0 +1 @@
+QPS_JSON_DRIVER_SCENARIOS = {'cpp_protobuf_sync_streaming_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_sync_streaming_qps_unconstrained_1mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_qps_unconstrained_1mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "messages_per_stream": 1, "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_unary_ping_pong_insecure_1MB': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_ping_pong_insecure_1MB", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 1, "outstanding_rpcs_per_channel": 1, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 1048576, "req_size": 1048576}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_protobuf_sync_streaming_qps_unconstrained_10mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_qps_unconstrained_10mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "messages_per_stream": 10, "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_unary_qps_unconstrained_2waysharedcq_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_qps_unconstrained_2waysharedcq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 2, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 2}, "num_clients": 0}]}\'', 'cpp_protobuf_async_unary_qps_unconstrained_1cq_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_qps_unconstrained_1cq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 1000000, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 13, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 1000000}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_2waysharedcq_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_2waysharedcq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 2, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 2}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_1cq_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_1cq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 1000000}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 13, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 1000000}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_10mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_10mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "messages_per_stream": 10, "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_64KBmsg_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_64KBmsg_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 65536, "req_size": 65536}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 65536, "req_size": 65536}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_1cq_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_1cq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 1000000, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 13, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 1000000}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_from_server_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_from_server_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING_FROM_SERVER", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_from_client_1channel_1MB': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_from_client_1channel_1MB", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 1, "rpc_type": "STREAMING_FROM_CLIENT", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 1048576, "req_size": 1048576}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_protobuf_async_unary_1channel_100rpcs_1MB': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_1channel_100rpcs_1MB", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 1048576, "req_size": 1048576}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_generic_async_streaming_qps_1channel_1MBmsg_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_1channel_1MBmsg_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 1048576, "req_size": 1048576}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 1048576, "req_size": 1048576}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_1mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_1mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "messages_per_stream": 1, "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_client_unary_1channel_64wide_128Breq_8MBresp_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_client_unary_1channel_64wide_128Breq_8MBresp_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 1, "outstanding_rpcs_per_channel": 1, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 8388608, "req_size": 128}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_protobuf_sync_streaming_from_client_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_from_client_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING_FROM_CLIENT", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_protobuf_async_streaming_from_client_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_from_client_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING_FROM_CLIENT", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_2waysharedcq_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_2waysharedcq_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 2}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 2}, "num_clients": 0}]}\'', 'cpp_protobuf_sync_unary_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_unary_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_sync_streaming_from_server_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_sync_streaming_from_server_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "SYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 16, "rpc_type": "STREAMING_FROM_SERVER", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "SYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_protobuf_async_unary_qps_unconstrained_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_unary_qps_unconstrained_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 3, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "UNARY", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 3}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_qps_unconstrained_10mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_qps_unconstrained_10mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 0, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "messages_per_stream": 10, "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\'', 'cpp_generic_async_streaming_ping_pong_insecure': '\'{\'scenarios\' : [{"name": "cpp_generic_async_streaming_ping_pong_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"async_server_threads": 1, "security_params": null, "server_type": "ASYNC_GENERIC_SERVER", "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}], "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "threads_per_cq": 0}, "client_config": {"security_params": null, "channel_args": [{"str_value": "latency", "name": "grpc.optimization_target"}], "async_client_threads": 1, "outstanding_rpcs_per_channel": 1, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "payload_config": {"bytebuf_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 1, "threads_per_cq": 0}, "num_clients": 1}]}\'', 'cpp_protobuf_async_streaming_qps_unconstrained_1mps_insecure': '\'{\'scenarios\' : [{"name": "cpp_protobuf_async_streaming_qps_unconstrained_1mps_insecure", "warmup_seconds": 0, "benchmark_seconds": 1, "num_servers": 1, "server_config": {"security_params": null, "server_type": "ASYNC_SERVER", "async_server_threads": 0, "threads_per_cq": 0, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}]}, "client_config": {"security_params": null, "channel_args": [{"str_value": "throughput", "name": "grpc.optimization_target"}, {"int_value": 1, "name": "grpc.minimal_stack"}], "async_client_threads": 0, "outstanding_rpcs_per_channel": 100, "rpc_type": "STREAMING", "load_params": {"closed_loop": {}}, "histogram_params": {"resolution": 0.01, "max_possible": 60000000000.0}, "client_type": "ASYNC_CLIENT", "messages_per_stream": 1, "payload_config": {"simple_params": {"resp_size": 0, "req_size": 0}}, "client_channels": 64, "threads_per_cq": 0}, "num_clients": 0}]}\''}
diff --git a/test/cpp/qps/qps_openloop_test.cc b/test/cpp/qps/qps_openloop_test.cc
index df929b9811..6044f4265a 100644
--- a/test/cpp/qps/qps_openloop_test.cc
+++ b/test/cpp/qps/qps_openloop_test.cc
@@ -52,7 +52,7 @@ static void RunQPS() {
const auto result =
RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2, "",
- kInsecureCredentialsType, false);
+ kInsecureCredentialsType, false, 0);
GetReporter()->ReportQPSPerCore(*result);
GetReporter()->ReportLatency(*result);
diff --git a/test/cpp/qps/secure_sync_unary_ping_pong_test.cc b/test/cpp/qps/secure_sync_unary_ping_pong_test.cc
index bb415e9d63..a559c82cc8 100644
--- a/test/cpp/qps/secure_sync_unary_ping_pong_test.cc
+++ b/test/cpp/qps/secure_sync_unary_ping_pong_test.cc
@@ -55,7 +55,7 @@ static void RunSynchronousUnaryPingPong() {
const auto result =
RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2, "",
- kInsecureCredentialsType, false);
+ kInsecureCredentialsType, false, 0);
GetReporter()->ReportQPS(*result);
GetReporter()->ReportLatency(*result);
diff --git a/tools/buildgen/generate_build_additions.sh b/tools/buildgen/generate_build_additions.sh
index 693c02fdb2..693c02fdb2 100644..100755
--- a/tools/buildgen/generate_build_additions.sh
+++ b/tools/buildgen/generate_build_additions.sh
diff --git a/tools/buildgen/plugins/grpc_shadow_boringssl.py b/tools/buildgen/plugins/grpc_shadow_boringssl.py
new file mode 100644
index 0000000000..da4d8c12af
--- /dev/null
+++ b/tools/buildgen/plugins/grpc_shadow_boringssl.py
@@ -0,0 +1,32 @@
+# Copyright 2018 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Buldigen generate grpc_shadow_boringssl headers
+This script takes the list of symbols from
+src/objective-c/grpc_shadow_boringssl_symbols and populate them in
+settings.grpc_shadow_boringssl_symbols
+"""
+
+
+def mako_plugin(dictionary):
+ with open('src/objective-c/grpc_shadow_boringssl_symbol_list') as f:
+ symbols = f.readlines()
+ # Remove trailing '\n'
+ symbols = [s.strip() for s in symbols]
+ # Remove comments
+ symbols = [s for s in symbols if s[0] != '#']
+ # Remove the commit number
+ del symbols[0]
+
+ settings = dictionary['settings']
+ settings['grpc_shadow_boringssl_symbols'] = symbols
diff --git a/tools/distrib/check_shadow_boringssl_symbol_list.sh b/tools/distrib/check_shadow_boringssl_symbol_list.sh
new file mode 100755
index 0000000000..34ba09e07d
--- /dev/null
+++ b/tools/distrib/check_shadow_boringssl_symbol_list.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+# Copyright 2018 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Check if the commit version of BoringSSL podspec, BoringSSL submodule, and
+# the shadowed symbol list are all based on the same BoringSSL commit.
+set -e
+
+cd $(dirname $0)
+
+boringssl_podspec_original="../../src/objective-c/BoringSSL-GRPC.podspec"
+symbol_list="../../src/objective-c/grpc_shadow_boringssl_symbol_list"
+
+# Check BoringSSL version matches
+ver1=$(git submodule |grep "boringssl " | awk '{print $1}' | head -n 1)
+ver2=$(cat $boringssl_podspec_original | grep ':commit =>' | sed -E 's/.*"(.*)".*/\1/g')
+ver3=$(cat $symbol_list | sed -n '2 p')
+[ $ver1 == $ver2 ] && [ $ver1 == $ver3 ] || { echo "BoringSSL podspec (src/objective-c/BoringSSL.podspec), BoringSSL submodule (third_party/boringssl), and BoringSSL symbol list (src/objective-c/grpc_shadow_boringssl_symbol_list) commit do not match." ; echo "BoringSSL podspec: $ver1" ; echo "BoringSSL submodule: $ver2" ; echo "BoringSSL symbol list: $ver3" ; exit 1 ; }
+
+exit 0
diff --git a/tools/distrib/generate_grpc_shadow_boringssl_symbol_list.sh b/tools/distrib/generate_grpc_shadow_boringssl_symbol_list.sh
new file mode 100755
index 0000000000..2e5bb44548
--- /dev/null
+++ b/tools/distrib/generate_grpc_shadow_boringssl_symbol_list.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# Copyright 2018 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Generate the list of boringssl symbols that need to be shadowed based on the
+# current boringssl submodule. Requires local toolchain to build boringssl.
+set -e
+
+cd $(dirname $0)
+
+symbol_list="../../src/objective-c/grpc_shadow_boringssl_symbol_list"
+
+ssl_lib='../../third_party/boringssl/build/ssl/libssl.a'
+crypto_lib='../../third_party/boringssl/build/crypto/libcrypto.a'
+
+# Generate boringssl archives
+( cd ../../third_party/boringssl ; mkdir -p build ; cd build ; cmake .. ; make )
+
+# Generate shadow_boringssl.h
+outputs="$(nm -C $ssl_lib)"$'\n'"$(nm -C $crypto_lib)"
+symbols=$(echo "$outputs" |
+ grep '^[0-9a-f]* [A-Z] ' | # Only public symbols
+ grep -v ' bssl::' | # Filter BoringSSL symbols since they are already namespaced
+ sed 's/(.*//g' | # Remove parenthesis from C++ symbols
+ grep '^[0-9a-f]* [A-Z] _' | # Filter symbols that is not prefixed with '_'
+ sed 's/[0-9a-f]* [A-Z] _\(.*\)/\1/g') # Extract the symbol names
+
+commit=$(git submodule | grep "boringssl " | awk '{print $1}' | head -n 1)
+
+echo "# Automatically generated by tools/distrib/generate_grpc_shadow_boringssl_symbol_list.sh" > $symbol_list
+echo $commit >> $symbol_list
+echo "$symbols" >> $symbol_list
+
+exit 0
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index ccb69a8ebc..581dab3b4e 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
-VERSION = '1.15.0.dev0'
+VERSION = '1.16.0.dev0'
diff --git a/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh b/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
index 3b901ae4bf..0c8ecc21a0 100755
--- a/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
+++ b/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
@@ -29,7 +29,7 @@ for dir in $DIRS
do
for glob in $GLOB
do
- files="$files `find ${CLANG_FORMAT_ROOT}/$dir -name $glob -and -not -name '*.generated.*' -and -not -name '*.pb.h' -and -not -name '*.pb.c' -and -not -name '*.pb.cc' -and -not -name '*.pbobjc.h' -and -not -name '*.pbobjc.m' -and -not -name '*.pbrpc.h' -and -not -name '*.pbrpc.m' -and -not -name end2end_tests.cc -and -not -name end2end_nosec_tests.cc -and -not -name public_headers_must_be_c89.c`"
+ files="$files `find ${CLANG_FORMAT_ROOT}/$dir -name $glob -and -not -name '*.generated.*' -and -not -name '*.pb.h' -and -not -name '*.pb.c' -and -not -name '*.pb.cc' -and -not -name '*.pbobjc.h' -and -not -name '*.pbobjc.m' -and -not -name '*.pbrpc.h' -and -not -name '*.pbrpc.m' -and -not -name end2end_tests.cc -and -not -name end2end_nosec_tests.cc -and -not -name public_headers_must_be_c89.c -and -not -name grpc_shadow_boringssl.h`"
done
done
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index 688c271fea..9a97ee84f2 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.15.0-dev
+PROJECT_NUMBER = 1.16.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 43ebf8cad9..0cd4cfd647 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.15.0-dev
+PROJECT_NUMBER = 1.16.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@@ -1067,6 +1067,7 @@ src/core/lib/http/format_request.h \
src/core/lib/http/httpcli.h \
src/core/lib/http/parser.h \
src/core/lib/iomgr/block_annotate.h \
+src/core/lib/iomgr/buffer_list.h \
src/core/lib/iomgr/call_combiner.h \
src/core/lib/iomgr/closure.h \
src/core/lib/iomgr/combiner.h \
@@ -1082,6 +1083,7 @@ src/core/lib/iomgr/ev_posix.h \
src/core/lib/iomgr/exec_ctx.h \
src/core/lib/iomgr/executor.h \
src/core/lib/iomgr/gethostname.h \
+src/core/lib/iomgr/internal_errqueue.h \
src/core/lib/iomgr/iocp_windows.h \
src/core/lib/iomgr/iomgr.h \
src/core/lib/iomgr/iomgr_custom.h \
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index a08ce0b9ff..7cd1dc7bf3 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -1159,6 +1159,8 @@ src/core/lib/http/parser.cc \
src/core/lib/http/parser.h \
src/core/lib/iomgr/README.md \
src/core/lib/iomgr/block_annotate.h \
+src/core/lib/iomgr/buffer_list.cc \
+src/core/lib/iomgr/buffer_list.h \
src/core/lib/iomgr/call_combiner.cc \
src/core/lib/iomgr/call_combiner.h \
src/core/lib/iomgr/closure.h \
@@ -1194,6 +1196,8 @@ src/core/lib/iomgr/gethostname.h \
src/core/lib/iomgr/gethostname_fallback.cc \
src/core/lib/iomgr/gethostname_host_name_max.cc \
src/core/lib/iomgr/gethostname_sysconf.cc \
+src/core/lib/iomgr/internal_errqueue.cc \
+src/core/lib/iomgr/internal_errqueue.h \
src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iocp_windows.h \
src/core/lib/iomgr/iomgr.cc \
@@ -1508,6 +1512,7 @@ src/core/tsi/alts_transport_security.cc \
src/core/tsi/alts_transport_security.h \
src/core/tsi/fake_transport_security.cc \
src/core/tsi/fake_transport_security.h \
+src/core/tsi/grpc_shadow_boringssl.h \
src/core/tsi/local_transport_security.cc \
src/core/tsi/local_transport_security.h \
src/core/tsi/ssl/session_cache/ssl_session.h \
diff --git a/tools/internal_ci/linux/grpc_bazel_on_foundry_base.sh b/tools/internal_ci/linux/grpc_bazel_on_foundry_base.sh
index 8f9658f78a..3d4d90317c 100755
--- a/tools/internal_ci/linux/grpc_bazel_on_foundry_base.sh
+++ b/tools/internal_ci/linux/grpc_bazel_on_foundry_base.sh
@@ -22,8 +22,8 @@ mkdir -p ${KOKORO_KEYSTORE_DIR}
cp ${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json ${KOKORO_KEYSTORE_DIR}/4321_grpc-testing-service
temp_dir=$(mktemp -d)
-ln -f "${KOKORO_GFILE_DIR}/bazel-rc-0.14.0rc5" ${temp_dir}/bazel
-chmod 755 "${KOKORO_GFILE_DIR}/bazel-rc-0.14.0rc5"
+ln -f "${KOKORO_GFILE_DIR}/bazel-latest-release" ${temp_dir}/bazel
+chmod 755 "${KOKORO_GFILE_DIR}/bazel-latest-release"
export PATH="${temp_dir}:${PATH}"
# This should show ${temp_dir}/bazel
which bazel
@@ -49,13 +49,15 @@ source tools/internal_ci/helper_scripts/prepare_build_linux_rc
--strategy=Closure=remote \
--genrule_strategy=remote \
--experimental_strict_action_env=true \
- --crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.13.0/default:toolchain \
+ --crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.16.1/default:toolchain \
--define GRPC_PORT_ISOLATED_RUNTIME=1 \
--action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 \
- --extra_toolchains=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.13.0/cpp:cc-toolchain-clang-x86_64-default \
+ --extra_toolchains=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.16.1/cpp:cc-toolchain-clang-x86_64-default \
--extra_execution_platforms=//third_party/toolchains:rbe_ubuntu1604 \
--host_platform=//third_party/toolchains:rbe_ubuntu1604 \
--platforms=//third_party/toolchains:rbe_ubuntu1604 \
+ --remote_instance_name=grpc-testing/instances/default_instance \
+ --test_env=GRPC_VERBOSITY=debug \
$1 \
-- //test/... || FAILED="true"
diff --git a/tools/internal_ci/linux/grpc_msan_on_foundry.sh b/tools/internal_ci/linux/grpc_msan_on_foundry.sh
index aa1e613d78..19cfc1739a 100644
--- a/tools/internal_ci/linux/grpc_msan_on_foundry.sh
+++ b/tools/internal_ci/linux/grpc_msan_on_foundry.sh
@@ -23,8 +23,8 @@ mkdir -p ${KOKORO_KEYSTORE_DIR}
cp ${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json ${KOKORO_KEYSTORE_DIR}/4321_grpc-testing-service
temp_dir=$(mktemp -d)
-ln -f "${KOKORO_GFILE_DIR}/bazel-rc-0.14.0rc5" ${temp_dir}/bazel
-chmod 755 "${KOKORO_GFILE_DIR}/bazel-rc-0.14.0rc5"
+ln -f "${KOKORO_GFILE_DIR}/bazel-latest-release" ${temp_dir}/bazel
+chmod 755 "${KOKORO_GFILE_DIR}/bazel-latest-release"
export PATH="${temp_dir}:${PATH}"
# This should show ${temp_dir}/bazel
which bazel
@@ -58,13 +58,15 @@ source tools/internal_ci/helper_scripts/prepare_build_linux_rc
--linkopt=-fsanitize=memory \
--copt=-fsanitize-memory-track-origins \
--action_env=LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH \
- --host_crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.13.0/default:toolchain \
- --crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.13.0/msan:toolchain \
+ --host_crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.16.1/default:toolchain \
+ --crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.16.1/msan:toolchain \
--action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 \
- --extra_toolchains=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.13.0/cpp:cc-toolchain-clang-x86_64-default \
+ --extra_toolchains=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.16.1/cpp:cc-toolchain-clang-x86_64-default \
--extra_execution_platforms=//third_party/toolchains:rbe_ubuntu1604 \
--host_platform=//third_party/toolchains:rbe_ubuntu1604 \
--platforms=//third_party/toolchains:rbe_ubuntu1604 \
+ --remote_instance_name=grpc-testing/instances/default_instance \
+ --test_env=GRPC_VERBOSITY=debug \
-- //test/... || FAILED="true"
# Sleep to let ResultStore finish writing results before querying
diff --git a/tools/internal_ci/linux/grpc_ubsan_on_foundry.sh b/tools/internal_ci/linux/grpc_ubsan_on_foundry.sh
index 338b1b6a0d..edb2069fb2 100644
--- a/tools/internal_ci/linux/grpc_ubsan_on_foundry.sh
+++ b/tools/internal_ci/linux/grpc_ubsan_on_foundry.sh
@@ -23,8 +23,8 @@ mkdir -p ${KOKORO_KEYSTORE_DIR}
cp ${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json ${KOKORO_KEYSTORE_DIR}/4321_grpc-testing-service
temp_dir=$(mktemp -d)
-ln -f "${KOKORO_GFILE_DIR}/bazel-rc-0.14.0rc5" ${temp_dir}/bazel
-chmod 755 "${KOKORO_GFILE_DIR}/bazel-rc-0.14.0rc5"
+ln -f "${KOKORO_GFILE_DIR}/bazel-latest-release" ${temp_dir}/bazel
+chmod 755 "${KOKORO_GFILE_DIR}/bazel-latest-release"
export PATH="${temp_dir}:${PATH}"
# This should show ${temp_dir}/bazel
which bazel
@@ -55,13 +55,15 @@ source tools/internal_ci/helper_scripts/prepare_build_linux_rc
--strip=never \
--copt=-fsanitize=undefined \
--linkopt=-fsanitize=undefined \
- --crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/experimental/ubuntu16_04_clang/1.0/bazel_0.13.0/ubsan:toolchain \
+ --crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/experimental/ubuntu16_04_clang/1.0/bazel_0.15.0/ubsan:toolchain \
--action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 \
- --extra_toolchains=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.13.0/cpp:cc-toolchain-clang-x86_64-default \
+ --extra_toolchains=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.16.1/cpp:cc-toolchain-clang-x86_64-default \
--extra_execution_platforms=//third_party/toolchains:rbe_ubuntu1604 \
--host_platform=//third_party/toolchains:rbe_ubuntu1604 \
--platforms=//third_party/toolchains:rbe_ubuntu1604 \
--cache_test_results=no \
+ --remote_instance_name=grpc-testing/instances/default_instance \
+ --test_env=GRPC_VERBOSITY=debug \
-- //test/... || FAILED="true"
# Sleep to let ResultStore finish writing results before querying
diff --git a/tools/internal_ci/linux/pull_request/grpc_ubsan_on_foundry.sh b/tools/internal_ci/linux/pull_request/grpc_ubsan_on_foundry.sh
index c7ab5b104a..f8c9314236 100644
--- a/tools/internal_ci/linux/pull_request/grpc_ubsan_on_foundry.sh
+++ b/tools/internal_ci/linux/pull_request/grpc_ubsan_on_foundry.sh
@@ -23,8 +23,8 @@ mkdir -p ${KOKORO_KEYSTORE_DIR}
cp ${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json ${KOKORO_KEYSTORE_DIR}/4321_grpc-testing-service
temp_dir=$(mktemp -d)
-ln -f "${KOKORO_GFILE_DIR}/bazel-rc-0.14.0rc5" ${temp_dir}/bazel
-chmod 755 "${KOKORO_GFILE_DIR}/bazel-rc-0.14.0rc5"
+ln -f "${KOKORO_GFILE_DIR}/bazel-latest-release" ${temp_dir}/bazel
+chmod 755 "${KOKORO_GFILE_DIR}/bazel-latest-release"
export PATH="${temp_dir}:${PATH}"
# This should show ${temp_dir}/bazel
which bazel
@@ -55,12 +55,14 @@ source tools/internal_ci/helper_scripts/prepare_build_linux_rc
--strip=never \
--copt=-fsanitize=undefined \
--linkopt=-fsanitize=undefined \
- --crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/experimental/ubuntu16_04_clang/1.0/bazel_0.13.0/ubsan:toolchain \
+ --crosstool_top=@com_github_bazelbuild_bazeltoolchains//configs/experimental/ubuntu16_04_clang/1.0/bazel_0.15.0/ubsan:toolchain \
--action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 \
- --extra_toolchains=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.13.0/cpp:cc-toolchain-clang-x86_64-default \
+ --extra_toolchains=@com_github_bazelbuild_bazeltoolchains//configs/ubuntu16_04_clang/1.0/bazel_0.16.1/cpp:cc-toolchain-clang-x86_64-default \
--extra_execution_platforms=//third_party/toolchains:rbe_ubuntu1604 \
--host_platform=//third_party/toolchains:rbe_ubuntu1604 \
--platforms=//third_party/toolchains:rbe_ubuntu1604 \
+ --remote_instance_name=grpc-testing/instances/default_instance \
+ --test_env=GRPC_VERBOSITY=debug \
-- //test/... || FAILED="true"
if [ "$FAILED" != "" ]
diff --git a/tools/run_tests/generated/sources_and_headers.json b/tools/run_tests/generated/sources_and_headers.json
index bff045f786..8ea5126fde 100644
--- a/tools/run_tests/generated/sources_and_headers.json
+++ b/tools/run_tests/generated/sources_and_headers.json
@@ -173,6 +173,23 @@
"headers": [],
"is_filegroup": false,
"language": "c",
+ "name": "buffer_list_test",
+ "src": [
+ "test/core/iomgr/buffer_list_test.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c",
"name": "channel_create_test",
"src": [
"test/core/surface/channel_create_test.cc"
@@ -1417,6 +1434,26 @@
"grpc",
"grpc_test_util"
],
+ "headers": [
+ "test/core/end2end/end2end_tests.h"
+ ],
+ "is_filegroup": false,
+ "language": "c",
+ "name": "inproc_callback_test",
+ "src": [
+ "test/core/end2end/end2end_tests.h",
+ "test/core/end2end/inproc_callback_test.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
"headers": [],
"is_filegroup": false,
"language": "c",
@@ -9068,6 +9105,7 @@
"alts_util",
"gpr",
"grpc_base",
+ "grpc_shadow_boringssl",
"grpc_transport_chttp2_client_insecure",
"tsi",
"tsi_interface"
@@ -9467,6 +9505,7 @@
"src/core/lib/http/format_request.cc",
"src/core/lib/http/httpcli.cc",
"src/core/lib/http/parser.cc",
+ "src/core/lib/iomgr/buffer_list.cc",
"src/core/lib/iomgr/call_combiner.cc",
"src/core/lib/iomgr/combiner.cc",
"src/core/lib/iomgr/endpoint.cc",
@@ -9487,6 +9526,7 @@
"src/core/lib/iomgr/gethostname_fallback.cc",
"src/core/lib/iomgr/gethostname_host_name_max.cc",
"src/core/lib/iomgr/gethostname_sysconf.cc",
+ "src/core/lib/iomgr/internal_errqueue.cc",
"src/core/lib/iomgr/iocp_windows.cc",
"src/core/lib/iomgr/iomgr.cc",
"src/core/lib/iomgr/iomgr_custom.cc",
@@ -9646,6 +9686,7 @@
"src/core/lib/http/httpcli.h",
"src/core/lib/http/parser.h",
"src/core/lib/iomgr/block_annotate.h",
+ "src/core/lib/iomgr/buffer_list.h",
"src/core/lib/iomgr/call_combiner.h",
"src/core/lib/iomgr/closure.h",
"src/core/lib/iomgr/combiner.h",
@@ -9661,6 +9702,7 @@
"src/core/lib/iomgr/exec_ctx.h",
"src/core/lib/iomgr/executor.h",
"src/core/lib/iomgr/gethostname.h",
+ "src/core/lib/iomgr/internal_errqueue.h",
"src/core/lib/iomgr/iocp_windows.h",
"src/core/lib/iomgr/iomgr.h",
"src/core/lib/iomgr/iomgr_custom.h",
@@ -9796,6 +9838,7 @@
"src/core/lib/http/httpcli.h",
"src/core/lib/http/parser.h",
"src/core/lib/iomgr/block_annotate.h",
+ "src/core/lib/iomgr/buffer_list.h",
"src/core/lib/iomgr/call_combiner.h",
"src/core/lib/iomgr/closure.h",
"src/core/lib/iomgr/combiner.h",
@@ -9811,6 +9854,7 @@
"src/core/lib/iomgr/exec_ctx.h",
"src/core/lib/iomgr/executor.h",
"src/core/lib/iomgr/gethostname.h",
+ "src/core/lib/iomgr/internal_errqueue.h",
"src/core/lib/iomgr/iocp_windows.h",
"src/core/lib/iomgr/iomgr.h",
"src/core/lib/iomgr/iomgr_custom.h",
@@ -10357,6 +10401,7 @@
"alts_tsi",
"gpr",
"grpc_base",
+ "grpc_shadow_boringssl",
"grpc_transport_chttp2_alpn",
"tsi"
],
@@ -10473,6 +10518,20 @@
"type": "filegroup"
},
{
+ "deps": [],
+ "headers": [
+ "src/core/tsi/grpc_shadow_boringssl.h"
+ ],
+ "is_filegroup": true,
+ "language": "c",
+ "name": "grpc_shadow_boringssl",
+ "src": [
+ "src/core/tsi/grpc_shadow_boringssl.h"
+ ],
+ "third_party": false,
+ "type": "filegroup"
+ },
+ {
"deps": [
"cmdline",
"gpr",
@@ -10923,6 +10982,7 @@
"deps": [
"gpr",
"grpc_base",
+ "grpc_shadow_boringssl",
"grpc_trace",
"tsi_interface"
],
diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json
index a51be28ad5..fba76d69d1 100644
--- a/tools/run_tests/generated/tests.json
+++ b/tools/run_tests/generated/tests.json
@@ -199,6 +199,26 @@
"args": [],
"benchmark": false,
"ci_platforms": [
+ "linux"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [
+ "uv"
+ ],
+ "flaky": false,
+ "gtest": false,
+ "language": "c",
+ "name": "buffer_list_test",
+ "platforms": [
+ "linux"
+ ],
+ "uses_polling": true
+ },
+ {
+ "args": [],
+ "benchmark": false,
+ "ci_platforms": [
"linux",
"mac",
"posix",
@@ -1706,6 +1726,30 @@
"posix",
"windows"
],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": false,
+ "language": "c",
+ "name": "inproc_callback_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "uses_polling": false
+ },
+ {
+ "args": [],
+ "benchmark": false,
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
"cpu_cost": 0.1,
"exclude_configs": [],
"exclude_iomgrs": [],
diff --git a/tools/run_tests/sanity/check_qps_scenario_changes.py b/tools/run_tests/sanity/check_qps_scenario_changes.py
new file mode 100755
index 0000000000..635fee6a60
--- /dev/null
+++ b/tools/run_tests/sanity/check_qps_scenario_changes.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+
+# Copyright 2018 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+import sys
+import subprocess
+
+os.chdir(os.path.join(os.path.dirname(sys.argv[0]), '../../../test/cpp/qps'))
+subprocess.call(['./json_run_localhost_scenario_gen.py'])
+subprocess.call(['./qps_json_driver_scenario_gen.py'])
+
+output = subprocess.check_output(['git', 'status', '--porcelain'])
+qps_json_driver_bzl = 'test/cpp/qps/qps_json_driver_scenarios.bzl'
+json_run_localhost_bzl = 'test/cpp/qps/json_run_localhost_scenarios.bzl'
+
+if qps_json_driver_bzl in output or json_run_localhost_bzl in output:
+ print('qps benchmark scenarios have been updated, please commit '
+ 'test/cpp/qps/qps_json_driver_scenarios.bzl and/or '
+ 'test/cpp/qps/json_run_localhost_scenarios.bzl')
+ sys.exit(1)
diff --git a/tools/run_tests/sanity/sanity_tests.yaml b/tools/run_tests/sanity/sanity_tests.yaml
index 91b53eb38d..1913edd425 100644
--- a/tools/run_tests/sanity/sanity_tests.yaml
+++ b/tools/run_tests/sanity/sanity_tests.yaml
@@ -3,6 +3,7 @@
- script: tools/run_tests/sanity/check_bazel_workspace.py
- script: tools/run_tests/sanity/check_cache_mk.sh
- script: tools/run_tests/sanity/check_owners.sh
+- script: tools/run_tests/sanity/check_qps_scenario_changes.py
- script: tools/run_tests/sanity/check_shellcheck.sh
- script: tools/run_tests/sanity/check_submodules.sh
- script: tools/run_tests/sanity/check_test_filtering.py
@@ -22,4 +23,5 @@
- script: tools/distrib/pylint_code.sh
- script: tools/distrib/yapf_code.sh
- script: tools/distrib/python/check_grpcio_tools.py
+- script: tools/distrib/check_shadow_boringssl_symbol_list.sh
cpu_cost: 1000