Merge branch 'master' of https://github.com/grpc/grpc into tls-credentials-1

pull/21852/head
Matthew Stevenson 5 years ago
commit 840b0f9cb9
  1. 2
      .clang_complete
  2. 3
      .gitmodules
  3. 1
      .pylintrc
  4. 7
      BUILD
  5. 2
      BUILD.gn
  6. 18
      BUILDING.md
  7. 49
      CMakeLists.txt
  8. 882
      Makefile
  9. 2
      PYTHON-MANIFEST.in
  10. 8
      bazel/grpc_deps.bzl
  11. 15
      build.yaml
  12. 8
      cmake/ssl.cmake
  13. 614
      config.m4
  14. 616
      config.w32
  15. 4
      gRPC-Core.podspec
  16. 912
      grpc.gemspec
  17. 546
      grpc.gyp
  18. 5
      include/grpc/impl/codegen/grpc_types.h
  19. 36
      include/grpcpp/impl/codegen/completion_queue_impl.h
  20. 2
      include/grpcpp/impl/codegen/proto_utils.h
  21. 22
      include/grpcpp/impl/codegen/server_context_impl.h
  22. 53
      include/grpcpp/security/tls_credentials_options.h
  23. 6
      include/grpcpp/server_impl.h
  24. 7
      include/grpcpp/test/default_reactor_test_peer.h
  25. 912
      package.xml
  26. 2
      setup.py
  27. 6
      src/abseil-cpp/preprocessed_builds.yaml
  28. 2114
      src/boringssl/crypto_test_data.cc
  29. 11
      src/boringssl/gen_build_yaml.py
  30. 2
      src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc
  31. 6
      src/core/ext/filters/client_channel/xds/xds_api.cc
  32. 15
      src/core/ext/filters/client_channel/xds/xds_api.h
  33. 446
      src/core/ext/filters/client_channel/xds/xds_client.cc
  34. 18
      src/core/ext/filters/client_channel/xds/xds_client.h
  35. 5
      src/core/lib/gprpp/string_view.h
  36. 213
      src/core/lib/json/json.h
  37. 808
      src/core/lib/json/json_reader_new.cc
  38. 336
      src/core/lib/json/json_writer_new.cc
  39. 3182
      src/core/tsi/grpc_shadow_boringssl.h
  40. 6
      src/cpp/common/completion_queue_cc.cc
  41. 62
      src/cpp/common/tls_credentials_options.cc
  42. 15
      src/cpp/server/server_builder.cc
  43. 12
      src/cpp/server/server_cc.cc
  44. 3
      src/cpp/server/server_context.cc
  45. 136
      src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs
  46. 3240
      src/objective-c/BoringSSL-GRPC.podspec
  47. 30
      src/objective-c/GRPCClient/private/GRPCCore/GRPCCompletionQueue.m
  48. 3184
      src/objective-c/grpc_shadow_boringssl_symbol_list
  49. 3
      src/proto/grpc/testing/BUILD
  50. 2
      src/python/grpcio/commands.py
  51. 4
      src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
  52. 403
      src/python/grpcio/grpc/experimental/aio/_call.py
  53. 530
      src/python/grpcio/grpc_core_dependencies.py
  54. 8
      templates/Makefile.template
  55. 2
      templates/config.m4.template
  56. 2
      templates/gRPC-Core.podspec.template
  57. 54
      templates/src/objective-c/BoringSSL-GRPC.podspec.template
  58. 15
      test/core/json/BUILD
  59. 295
      test/core/json/json_test_new.cc
  60. 49
      test/cpp/client/credentials_test.cc
  61. 4
      test/cpp/end2end/async_end2end_test.cc
  62. 90
      test/cpp/end2end/xds_end2end_test.cc
  63. 1
      test/distrib/cpp/run_distrib_test_cmake_as_externalproject.sh
  64. 47
      test/distrib/cpp/run_distrib_test_cmake_module_install_pkgconfig.sh
  65. 2
      third_party/abseil-cpp
  66. 1
      third_party/boringssl
  67. 2
      third_party/boringssl-with-bazel
  68. 4
      tools/distrib/check_shadow_boringssl_symbol_list.sh
  69. 8
      tools/distrib/generate_grpc_shadow_boringssl_symbol_list.sh
  70. 2
      tools/doxygen/Doxyfile.core.internal
  71. 14
      tools/internal_ci/helper_scripts/prepare_build_macos_rc
  72. 4
      tools/internal_ci/helper_scripts/prepare_build_windows.bat
  73. 8
      tools/internal_ci/linux/grpc_build_boringssl_at_head.cfg
  74. 8
      tools/internal_ci/linux/grpc_build_submodule_at_head.sh
  75. 2
      tools/run_tests/artifacts/distribtest_targets.py
  76. 24
      tools/run_tests/generated/tests.json
  77. 5
      tools/run_tests/sanity/check_submodules.sh

@ -6,7 +6,7 @@
-Isrc/core/ext/upb-generated
-Ithird_party/abseil-cpp
-Ithird_party/benchmark/include
-Ithird_party/boringssl-with-bazel/src/include
-Ithird_party/boringssl/include
-Ithird_party/cares
-Ithird_party/cares/cares
-Ithird_party/googletest

3
.gitmodules vendored

@ -15,6 +15,9 @@
[submodule "third_party/googletest"]
path = third_party/googletest
url = https://github.com/google/googletest.git
[submodule "third_party/boringssl"]
path = third_party/boringssl
url = https://github.com/google/boringssl.git
[submodule "third_party/benchmark"]
path = third_party/benchmark
url = https://github.com/google/benchmark

@ -20,6 +20,7 @@ dummy-variables-rgx=^ignored_|^unused_
# be what works for us at the moment (excepting the dead-code-walking Beta
# API).
max-args=7
max-parents=8
[MISCELLANEOUS]

@ -16,7 +16,10 @@
licenses(["notice"])
exports_files(["LICENSE"])
exports_files([
"LICENSE",
"etc/roots.pem",
])
package(
default_visibility = ["//visibility:public"],
@ -803,7 +806,9 @@ grpc_cc_library(
"src/core/lib/iomgr/wakeup_fd_posix.cc",
"src/core/lib/json/json.cc",
"src/core/lib/json/json_reader.cc",
"src/core/lib/json/json_reader_new.cc",
"src/core/lib/json/json_writer.cc",
"src/core/lib/json/json_writer_new.cc",
"src/core/lib/slice/b64.cc",
"src/core/lib/slice/percent_encoding.cc",
"src/core/lib/slice/slice.cc",

@ -718,7 +718,9 @@ config("grpc_config") {
"src/core/lib/json/json.cc",
"src/core/lib/json/json.h",
"src/core/lib/json/json_reader.cc",
"src/core/lib/json/json_reader_new.cc",
"src/core/lib/json/json_writer.cc",
"src/core/lib/json/json_writer_new.cc",
"src/core/lib/security/context/security_context.cc",
"src/core/lib/security/context/security_context.h",
"src/core/lib/security/credentials/alts/alts_credentials.cc",

@ -12,9 +12,16 @@ Other should follow the user instructions. See the [How to use](https://github.c
$ [sudo] apt-get install build-essential autoconf libtool pkg-config
```
If you plan to build from source and run tests, install the following as well:
If you plan to build using CMake
```sh
$ [sudo] apt-get install libgflags-dev libgtest-dev
$ [sudo] apt-get install cmake
```
If you are a contributor and plan to build and run tests, install the following as well:
```sh
$ # libgflags-dev is only required if building with make (deprecated)
$ [sudo] apt-get install libgflags-dev
$ # clang and LLVM C++ lib is only required for sanitizer builds
$ [sudo] apt-get install clang-5.0 libc++-dev
```
@ -36,8 +43,11 @@ packages from [Homebrew](https://brew.sh):
$ brew install autoconf automake libtool shtool
```
If you plan to build from source and run tests, install the following as well:
If you plan to build using CMake, follow the instructions from https://cmake.org/download/
If you are a contributor and plan to build and run tests, install the following as well:
```sh
$ # gflags is only required if building with make (deprecated)
$ brew install gflags
```
@ -56,6 +66,8 @@ To prepare for cmake + Microsoft Visual C++ compiler build
- Install Visual Studio 2015 or 2017 (Visual C++ compiler will be used).
- Install [Git](https://git-scm.com/).
- Install [CMake](https://cmake.org/download/).
- Install [Active State Perl](https://www.activestate.com/activeperl/) (`choco install activeperl`) - *required by boringssl*
- Install [Go](https://golang.org/dl/) (`choco install golang`) - *required by boringssl*
- Install [nasm](https://www.nasm.us/) and add it to `PATH` (`choco install nasm`) - *required by boringssl*
- (Optional) Install [Ninja](https://ninja-build.org/) (`choco install ninja`)

@ -826,6 +826,7 @@ if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx json_run_localhost)
endif()
add_dependencies(buildtests_cxx json_test_new)
add_dependencies(buildtests_cxx logical_thread_test)
add_dependencies(buildtests_cxx message_allocator_end2end_test)
add_dependencies(buildtests_cxx metrics_client)
@ -1125,7 +1126,9 @@ add_library(alts_test_util
src/core/lib/iomgr/wakeup_fd_posix.cc
src/core/lib/json/json.cc
src/core/lib/json/json_reader.cc
src/core/lib/json/json_reader_new.cc
src/core/lib/json/json_writer.cc
src/core/lib/json/json_writer_new.cc
src/core/lib/slice/b64.cc
src/core/lib/slice/percent_encoding.cc
src/core/lib/slice/slice.cc
@ -1613,7 +1616,9 @@ add_library(grpc
src/core/lib/iomgr/wakeup_fd_posix.cc
src/core/lib/json/json.cc
src/core/lib/json/json_reader.cc
src/core/lib/json/json_reader_new.cc
src/core/lib/json/json_writer.cc
src/core/lib/json/json_writer_new.cc
src/core/lib/slice/b64.cc
src/core/lib/slice/percent_encoding.cc
src/core/lib/slice/slice.cc
@ -2097,7 +2102,9 @@ add_library(grpc_cronet
src/core/lib/iomgr/wakeup_fd_posix.cc
src/core/lib/json/json.cc
src/core/lib/json/json_reader.cc
src/core/lib/json/json_reader_new.cc
src/core/lib/json/json_writer.cc
src/core/lib/json/json_writer_new.cc
src/core/lib/slice/b64.cc
src/core/lib/slice/percent_encoding.cc
src/core/lib/slice/slice.cc
@ -2526,7 +2533,9 @@ add_library(grpc_test_util
src/core/lib/iomgr/wakeup_fd_posix.cc
src/core/lib/json/json.cc
src/core/lib/json/json_reader.cc
src/core/lib/json/json_reader_new.cc
src/core/lib/json/json_writer.cc
src/core/lib/json/json_writer_new.cc
src/core/lib/slice/b64.cc
src/core/lib/slice/percent_encoding.cc
src/core/lib/slice/slice.cc
@ -2869,7 +2878,9 @@ add_library(grpc_test_util_unsecure
src/core/lib/iomgr/wakeup_fd_posix.cc
src/core/lib/json/json.cc
src/core/lib/json/json_reader.cc
src/core/lib/json/json_reader_new.cc
src/core/lib/json/json_writer.cc
src/core/lib/json/json_writer_new.cc
src/core/lib/slice/b64.cc
src/core/lib/slice/percent_encoding.cc
src/core/lib/slice/slice.cc
@ -3188,7 +3199,9 @@ add_library(grpc_unsecure
src/core/lib/iomgr/wakeup_fd_posix.cc
src/core/lib/json/json.cc
src/core/lib/json/json_reader.cc
src/core/lib/json/json_reader_new.cc
src/core/lib/json/json_writer.cc
src/core/lib/json/json_writer_new.cc
src/core/lib/slice/b64.cc
src/core/lib/slice/percent_encoding.cc
src/core/lib/slice/slice.cc
@ -14004,6 +14017,42 @@ endif()
endif()
if(gRPC_BUILD_TESTS)
add_executable(json_test_new
test/core/json/json_test_new.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(json_test_new
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
${_gRPC_SSL_INCLUDE_DIR}
${_gRPC_UPB_GENERATED_DIR}
${_gRPC_UPB_GRPC_GENERATED_DIR}
${_gRPC_UPB_INCLUDE_DIR}
${_gRPC_ZLIB_INCLUDE_DIR}
third_party/googletest/googletest/include
third_party/googletest/googletest
third_party/googletest/googlemock/include
third_party/googletest/googlemock
${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(json_test_new
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc
gpr
${_gRPC_GFLAGS_LIBRARIES}
)
endif()
if(gRPC_BUILD_TESTS)
add_executable(logical_thread_test
test/core/iomgr/logical_thread_test.cc
third_party/googletest/googletest/src/gtest-all.cc

File diff suppressed because it is too large Load Diff

@ -6,7 +6,7 @@ graft src/boringssl
graft include/grpc
graft third_party/abseil-cpp/absl
graft third_party/address_sorting
graft third_party/boringssl-with-bazel
graft third_party/boringssl
graft third_party/cares
graft third_party/upb
graft third_party/zlib

@ -131,7 +131,7 @@ def grpc_deps():
name = "boringssl",
# NOTE: This URL generates a tarball containing dynamic date
# information, so the sha256 is not consistent.
url = "https://boringssl.googlesource.com/boringssl/+archive/1c2769383f027befac5b75b6cedd25daf3bf4dcf.tar.gz",
url = "https://boringssl.googlesource.com/boringssl/+archive/83da28a68f32023fd3b95a8ae94991a07b1f6c62.tar.gz",
)
if "zlib" not in native.existing_rules():
@ -195,9 +195,9 @@ def grpc_deps():
if "com_google_absl" not in native.existing_rules():
http_archive(
name = "com_google_absl",
sha256 = "939e50c2fbcbd6f1124023350ef9bd5310d413227faf0e11de2a366dcc4e1e48",
strip_prefix = "abseil-cpp-a2e6adecc294dc4cd98cc285a9134ce58e0f2ad0",
url = "https://github.com/abseil/abseil-cpp/archive/a2e6adecc294dc4cd98cc285a9134ce58e0f2ad0.tar.gz",
sha256 = "19391fb4882601a65cb648d638c11aa301ce5f525ef02da1a9eafd22f72d7c59",
strip_prefix = "abseil-cpp-37dd2562ec830d547a1524bb306be313ac3f2556",
url = "https://github.com/abseil/abseil-cpp/archive/37dd2562ec830d547a1524bb306be313ac3f2556.tar.gz",
)
if "bazel_toolchains" not in native.existing_rules():

@ -772,7 +772,9 @@ filegroups:
- src/core/lib/iomgr/wakeup_fd_posix.cc
- src/core/lib/json/json.cc
- src/core/lib/json/json_reader.cc
- src/core/lib/json/json_reader_new.cc
- src/core/lib/json/json_writer.cc
- src/core/lib/json/json_writer_new.cc
- src/core/lib/slice/b64.cc
- src/core/lib/slice/percent_encoding.cc
- src/core/lib/slice/slice.cc
@ -5393,6 +5395,17 @@ targets:
- mac
- linux
- posix
- name: json_test_new
gtest: true
build: test
language: c++
src:
- test/core/json/json_test_new.cc
deps:
- grpc_test_util
- grpc
- gpr
uses_polling: false
- name: logical_thread_test
cpu_cost: 10
build: test
@ -6286,7 +6299,7 @@ defaults:
CPPFLAGS: -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX
boringssl:
CFLAGS: -g
CPPFLAGS: -Ithird_party/boringssl-with-bazel/src/include -fvisibility=hidden -DOPENSSL_NO_ASM
CPPFLAGS: -Ithird_party/boringssl/include -fvisibility=hidden -DOPENSSL_NO_ASM
-D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX
CXXFLAGS: -fno-exceptions
global:

@ -18,7 +18,7 @@
if(gRPC_SSL_PROVIDER STREQUAL "module")
if(NOT BORINGSSL_ROOT_DIR)
set(BORINGSSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/boringssl-with-bazel)
set(BORINGSSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/boringssl)
endif()
if(EXISTS "${BORINGSSL_ROOT_DIR}/CMakeLists.txt")
@ -40,10 +40,10 @@ if(gRPC_SSL_PROVIDER STREQUAL "module")
endif()
endif()
add_subdirectory(${BORINGSSL_ROOT_DIR} third_party/boringssl-with-bazel)
add_subdirectory(${BORINGSSL_ROOT_DIR} third_party/boringssl)
if(TARGET ssl)
set(_gRPC_SSL_LIBRARIES ssl crypto)
set(_gRPC_SSL_INCLUDE_DIR ${BORINGSSL_ROOT_DIR}/src/include)
set(_gRPC_SSL_LIBRARIES ssl)
set(_gRPC_SSL_INCLUDE_DIR ${BORINGSSL_ROOT_DIR}/include)
if(gRPC_INSTALL AND _gRPC_INSTALL_SUPPORTED_FROM_MODULE)
install(TARGETS ssl crypto EXPORT gRPCTargets
RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}

@ -10,7 +10,7 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/php/ext/grpc)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/abseil-cpp)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/address_sorting/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl-with-bazel/src/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/upb)
LIBS="-lpthread $LIBS"
@ -37,6 +37,7 @@ if test "$PHP_GRPC" != "no"; then
PHP_SUBST(GRPC_SHARED_LIBADD)
PHP_NEW_EXTENSION(grpc,
src/boringssl/err_data.c \
src/core/ext/filters/census/grpc_context.cc \
src/core/ext/filters/client_channel/backend_metric.cc \
src/core/ext/filters/client_channel/backup_poller.cc \
@ -347,7 +348,9 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/wakeup_fd_posix.cc \
src/core/lib/json/json.cc \
src/core/lib/json/json_reader.cc \
src/core/lib/json/json_reader_new.cc \
src/core/lib/json/json_writer.cc \
src/core/lib/json/json_writer_new.cc \
src/core/lib/profiling/basic_timers.cc \
src/core/lib/profiling/stap_timers.cc \
src/core/lib/security/context/security_context.cc \
@ -501,270 +504,269 @@ if test "$PHP_GRPC" != "no"; then
third_party/address_sorting/address_sorting.c \
third_party/address_sorting/address_sorting_posix.c \
third_party/address_sorting/address_sorting_windows.c \
third_party/boringssl-with-bazel/err_data.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c \
third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c \
third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c \
third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c \
third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c \
third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c \
third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c \
third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c \
third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c \
third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c \
third_party/boringssl-with-bazel/src/crypto/base64/base64.c \
third_party/boringssl-with-bazel/src/crypto/bio/bio.c \
third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c \
third_party/boringssl-with-bazel/src/crypto/bio/connect.c \
third_party/boringssl-with-bazel/src/crypto/bio/fd.c \
third_party/boringssl-with-bazel/src/crypto/bio/file.c \
third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c \
third_party/boringssl-with-bazel/src/crypto/bio/pair.c \
third_party/boringssl-with-bazel/src/crypto/bio/printf.c \
third_party/boringssl-with-bazel/src/crypto/bio/socket.c \
third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c \
third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c \
third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c \
third_party/boringssl-with-bazel/src/crypto/buf/buf.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c \
third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c \
third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c \
third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c \
third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c \
third_party/boringssl-with-bazel/src/crypto/conf/conf.c \
third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c \
third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c \
third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c \
third_party/boringssl-with-bazel/src/crypto/cpu-arm.c \
third_party/boringssl-with-bazel/src/crypto/cpu-intel.c \
third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c \
third_party/boringssl-with-bazel/src/crypto/crypto.c \
third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c \
third_party/boringssl-with-bazel/src/crypto/dh/check.c \
third_party/boringssl-with-bazel/src/crypto/dh/dh.c \
third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c \
third_party/boringssl-with-bazel/src/crypto/dh/params.c \
third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c \
third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c \
third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c \
third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c \
third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c \
third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/engine/engine.c \
third_party/boringssl-with-bazel/src/crypto/err/err.c \
third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c \
third_party/boringssl-with-bazel/src/crypto/evp/evp.c \
third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c \
third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c \
third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c \
third_party/boringssl-with-bazel/src/crypto/evp/print.c \
third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c \
third_party/boringssl-with-bazel/src/crypto/evp/sign.c \
third_party/boringssl-with-bazel/src/crypto/ex_data.c \
third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c \
third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c \
third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c \
third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c \
third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c \
third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c \
third_party/boringssl-with-bazel/src/crypto/mem.c \
third_party/boringssl-with-bazel/src/crypto/obj/obj.c \
third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c \
third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c \
third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c \
third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c \
third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c \
third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c \
third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c \
third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c \
third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c \
third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c \
third_party/boringssl-with-bazel/src/crypto/pool/pool.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c \
third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c \
third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c \
third_party/boringssl-with-bazel/src/crypto/refcount_c11.c \
third_party/boringssl-with-bazel/src/crypto/refcount_lock.c \
third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c \
third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c \
third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c \
third_party/boringssl-with-bazel/src/crypto/stack/stack.c \
third_party/boringssl-with-bazel/src/crypto/thread.c \
third_party/boringssl-with-bazel/src/crypto/thread_none.c \
third_party/boringssl-with-bazel/src/crypto/thread_pthread.c \
third_party/boringssl-with-bazel/src/crypto/thread_win.c \
third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c \
third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c \
third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c \
third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c \
third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c \
third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c \
third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c \
third_party/boringssl-with-bazel/src/crypto/x509/by_file.c \
third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c \
third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c \
third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c \
third_party/boringssl-with-bazel/src/crypto/x509/t_req.c \
third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c \
third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509name.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c \
third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_all.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_info.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_name.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_req.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_val.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c \
third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c \
third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c \
third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc \
third_party/boringssl-with-bazel/src/ssl/d1_both.cc \
third_party/boringssl-with-bazel/src/ssl/d1_lib.cc \
third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc \
third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc \
third_party/boringssl-with-bazel/src/ssl/dtls_method.cc \
third_party/boringssl-with-bazel/src/ssl/dtls_record.cc \
third_party/boringssl-with-bazel/src/ssl/handoff.cc \
third_party/boringssl-with-bazel/src/ssl/handshake.cc \
third_party/boringssl-with-bazel/src/ssl/handshake_client.cc \
third_party/boringssl-with-bazel/src/ssl/handshake_server.cc \
third_party/boringssl-with-bazel/src/ssl/s3_both.cc \
third_party/boringssl-with-bazel/src/ssl/s3_lib.cc \
third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_file.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_session.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc \
third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc \
third_party/boringssl-with-bazel/src/ssl/t1_enc.cc \
third_party/boringssl-with-bazel/src/ssl/t1_lib.cc \
third_party/boringssl-with-bazel/src/ssl/tls13_both.cc \
third_party/boringssl-with-bazel/src/ssl/tls13_client.cc \
third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc \
third_party/boringssl-with-bazel/src/ssl/tls13_server.cc \
third_party/boringssl-with-bazel/src/ssl/tls_method.cc \
third_party/boringssl-with-bazel/src/ssl/tls_record.cc \
third_party/boringssl-with-bazel/src/third_party/fiat/curve25519.c \
third_party/boringssl/crypto/asn1/a_bitstr.c \
third_party/boringssl/crypto/asn1/a_bool.c \
third_party/boringssl/crypto/asn1/a_d2i_fp.c \
third_party/boringssl/crypto/asn1/a_dup.c \
third_party/boringssl/crypto/asn1/a_enum.c \
third_party/boringssl/crypto/asn1/a_gentm.c \
third_party/boringssl/crypto/asn1/a_i2d_fp.c \
third_party/boringssl/crypto/asn1/a_int.c \
third_party/boringssl/crypto/asn1/a_mbstr.c \
third_party/boringssl/crypto/asn1/a_object.c \
third_party/boringssl/crypto/asn1/a_octet.c \
third_party/boringssl/crypto/asn1/a_print.c \
third_party/boringssl/crypto/asn1/a_strnid.c \
third_party/boringssl/crypto/asn1/a_time.c \
third_party/boringssl/crypto/asn1/a_type.c \
third_party/boringssl/crypto/asn1/a_utctm.c \
third_party/boringssl/crypto/asn1/a_utf8.c \
third_party/boringssl/crypto/asn1/asn1_lib.c \
third_party/boringssl/crypto/asn1/asn1_par.c \
third_party/boringssl/crypto/asn1/asn_pack.c \
third_party/boringssl/crypto/asn1/f_enum.c \
third_party/boringssl/crypto/asn1/f_int.c \
third_party/boringssl/crypto/asn1/f_string.c \
third_party/boringssl/crypto/asn1/tasn_dec.c \
third_party/boringssl/crypto/asn1/tasn_enc.c \
third_party/boringssl/crypto/asn1/tasn_fre.c \
third_party/boringssl/crypto/asn1/tasn_new.c \
third_party/boringssl/crypto/asn1/tasn_typ.c \
third_party/boringssl/crypto/asn1/tasn_utl.c \
third_party/boringssl/crypto/asn1/time_support.c \
third_party/boringssl/crypto/base64/base64.c \
third_party/boringssl/crypto/bio/bio.c \
third_party/boringssl/crypto/bio/bio_mem.c \
third_party/boringssl/crypto/bio/connect.c \
third_party/boringssl/crypto/bio/fd.c \
third_party/boringssl/crypto/bio/file.c \
third_party/boringssl/crypto/bio/hexdump.c \
third_party/boringssl/crypto/bio/pair.c \
third_party/boringssl/crypto/bio/printf.c \
third_party/boringssl/crypto/bio/socket.c \
third_party/boringssl/crypto/bio/socket_helper.c \
third_party/boringssl/crypto/bn_extra/bn_asn1.c \
third_party/boringssl/crypto/bn_extra/convert.c \
third_party/boringssl/crypto/buf/buf.c \
third_party/boringssl/crypto/bytestring/asn1_compat.c \
third_party/boringssl/crypto/bytestring/ber.c \
third_party/boringssl/crypto/bytestring/cbb.c \
third_party/boringssl/crypto/bytestring/cbs.c \
third_party/boringssl/crypto/bytestring/unicode.c \
third_party/boringssl/crypto/chacha/chacha.c \
third_party/boringssl/crypto/cipher_extra/cipher_extra.c \
third_party/boringssl/crypto/cipher_extra/derive_key.c \
third_party/boringssl/crypto/cipher_extra/e_aesccm.c \
third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c \
third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c \
third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c \
third_party/boringssl/crypto/cipher_extra/e_null.c \
third_party/boringssl/crypto/cipher_extra/e_rc2.c \
third_party/boringssl/crypto/cipher_extra/e_rc4.c \
third_party/boringssl/crypto/cipher_extra/e_tls.c \
third_party/boringssl/crypto/cipher_extra/tls_cbc.c \
third_party/boringssl/crypto/cmac/cmac.c \
third_party/boringssl/crypto/conf/conf.c \
third_party/boringssl/crypto/cpu-aarch64-fuchsia.c \
third_party/boringssl/crypto/cpu-aarch64-linux.c \
third_party/boringssl/crypto/cpu-arm-linux.c \
third_party/boringssl/crypto/cpu-arm.c \
third_party/boringssl/crypto/cpu-intel.c \
third_party/boringssl/crypto/cpu-ppc64le.c \
third_party/boringssl/crypto/crypto.c \
third_party/boringssl/crypto/curve25519/spake25519.c \
third_party/boringssl/crypto/dh/check.c \
third_party/boringssl/crypto/dh/dh.c \
third_party/boringssl/crypto/dh/dh_asn1.c \
third_party/boringssl/crypto/dh/params.c \
third_party/boringssl/crypto/digest_extra/digest_extra.c \
third_party/boringssl/crypto/dsa/dsa.c \
third_party/boringssl/crypto/dsa/dsa_asn1.c \
third_party/boringssl/crypto/ec_extra/ec_asn1.c \
third_party/boringssl/crypto/ec_extra/ec_derive.c \
third_party/boringssl/crypto/ecdh_extra/ecdh_extra.c \
third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c \
third_party/boringssl/crypto/engine/engine.c \
third_party/boringssl/crypto/err/err.c \
third_party/boringssl/crypto/evp/digestsign.c \
third_party/boringssl/crypto/evp/evp.c \
third_party/boringssl/crypto/evp/evp_asn1.c \
third_party/boringssl/crypto/evp/evp_ctx.c \
third_party/boringssl/crypto/evp/p_dsa_asn1.c \
third_party/boringssl/crypto/evp/p_ec.c \
third_party/boringssl/crypto/evp/p_ec_asn1.c \
third_party/boringssl/crypto/evp/p_ed25519.c \
third_party/boringssl/crypto/evp/p_ed25519_asn1.c \
third_party/boringssl/crypto/evp/p_rsa.c \
third_party/boringssl/crypto/evp/p_rsa_asn1.c \
third_party/boringssl/crypto/evp/p_x25519.c \
third_party/boringssl/crypto/evp/p_x25519_asn1.c \
third_party/boringssl/crypto/evp/pbkdf.c \
third_party/boringssl/crypto/evp/print.c \
third_party/boringssl/crypto/evp/scrypt.c \
third_party/boringssl/crypto/evp/sign.c \
third_party/boringssl/crypto/ex_data.c \
third_party/boringssl/crypto/fipsmodule/bcm.c \
third_party/boringssl/crypto/fipsmodule/fips_shared_support.c \
third_party/boringssl/crypto/fipsmodule/is_fips.c \
third_party/boringssl/crypto/hkdf/hkdf.c \
third_party/boringssl/crypto/hrss/hrss.c \
third_party/boringssl/crypto/lhash/lhash.c \
third_party/boringssl/crypto/mem.c \
third_party/boringssl/crypto/obj/obj.c \
third_party/boringssl/crypto/obj/obj_xref.c \
third_party/boringssl/crypto/pem/pem_all.c \
third_party/boringssl/crypto/pem/pem_info.c \
third_party/boringssl/crypto/pem/pem_lib.c \
third_party/boringssl/crypto/pem/pem_oth.c \
third_party/boringssl/crypto/pem/pem_pk8.c \
third_party/boringssl/crypto/pem/pem_pkey.c \
third_party/boringssl/crypto/pem/pem_x509.c \
third_party/boringssl/crypto/pem/pem_xaux.c \
third_party/boringssl/crypto/pkcs7/pkcs7.c \
third_party/boringssl/crypto/pkcs7/pkcs7_x509.c \
third_party/boringssl/crypto/pkcs8/p5_pbev2.c \
third_party/boringssl/crypto/pkcs8/pkcs8.c \
third_party/boringssl/crypto/pkcs8/pkcs8_x509.c \
third_party/boringssl/crypto/poly1305/poly1305.c \
third_party/boringssl/crypto/poly1305/poly1305_arm.c \
third_party/boringssl/crypto/poly1305/poly1305_vec.c \
third_party/boringssl/crypto/pool/pool.c \
third_party/boringssl/crypto/rand_extra/deterministic.c \
third_party/boringssl/crypto/rand_extra/forkunsafe.c \
third_party/boringssl/crypto/rand_extra/fuchsia.c \
third_party/boringssl/crypto/rand_extra/rand_extra.c \
third_party/boringssl/crypto/rand_extra/windows.c \
third_party/boringssl/crypto/rc4/rc4.c \
third_party/boringssl/crypto/refcount_c11.c \
third_party/boringssl/crypto/refcount_lock.c \
third_party/boringssl/crypto/rsa_extra/rsa_asn1.c \
third_party/boringssl/crypto/rsa_extra/rsa_print.c \
third_party/boringssl/crypto/siphash/siphash.c \
third_party/boringssl/crypto/stack/stack.c \
third_party/boringssl/crypto/thread.c \
third_party/boringssl/crypto/thread_none.c \
third_party/boringssl/crypto/thread_pthread.c \
third_party/boringssl/crypto/thread_win.c \
third_party/boringssl/crypto/x509/a_digest.c \
third_party/boringssl/crypto/x509/a_sign.c \
third_party/boringssl/crypto/x509/a_strex.c \
third_party/boringssl/crypto/x509/a_verify.c \
third_party/boringssl/crypto/x509/algorithm.c \
third_party/boringssl/crypto/x509/asn1_gen.c \
third_party/boringssl/crypto/x509/by_dir.c \
third_party/boringssl/crypto/x509/by_file.c \
third_party/boringssl/crypto/x509/i2d_pr.c \
third_party/boringssl/crypto/x509/rsa_pss.c \
third_party/boringssl/crypto/x509/t_crl.c \
third_party/boringssl/crypto/x509/t_req.c \
third_party/boringssl/crypto/x509/t_x509.c \
third_party/boringssl/crypto/x509/t_x509a.c \
third_party/boringssl/crypto/x509/x509.c \
third_party/boringssl/crypto/x509/x509_att.c \
third_party/boringssl/crypto/x509/x509_cmp.c \
third_party/boringssl/crypto/x509/x509_d2.c \
third_party/boringssl/crypto/x509/x509_def.c \
third_party/boringssl/crypto/x509/x509_ext.c \
third_party/boringssl/crypto/x509/x509_lu.c \
third_party/boringssl/crypto/x509/x509_obj.c \
third_party/boringssl/crypto/x509/x509_r2x.c \
third_party/boringssl/crypto/x509/x509_req.c \
third_party/boringssl/crypto/x509/x509_set.c \
third_party/boringssl/crypto/x509/x509_trs.c \
third_party/boringssl/crypto/x509/x509_txt.c \
third_party/boringssl/crypto/x509/x509_v3.c \
third_party/boringssl/crypto/x509/x509_vfy.c \
third_party/boringssl/crypto/x509/x509_vpm.c \
third_party/boringssl/crypto/x509/x509cset.c \
third_party/boringssl/crypto/x509/x509name.c \
third_party/boringssl/crypto/x509/x509rset.c \
third_party/boringssl/crypto/x509/x509spki.c \
third_party/boringssl/crypto/x509/x_algor.c \
third_party/boringssl/crypto/x509/x_all.c \
third_party/boringssl/crypto/x509/x_attrib.c \
third_party/boringssl/crypto/x509/x_crl.c \
third_party/boringssl/crypto/x509/x_exten.c \
third_party/boringssl/crypto/x509/x_info.c \
third_party/boringssl/crypto/x509/x_name.c \
third_party/boringssl/crypto/x509/x_pkey.c \
third_party/boringssl/crypto/x509/x_pubkey.c \
third_party/boringssl/crypto/x509/x_req.c \
third_party/boringssl/crypto/x509/x_sig.c \
third_party/boringssl/crypto/x509/x_spki.c \
third_party/boringssl/crypto/x509/x_val.c \
third_party/boringssl/crypto/x509/x_x509.c \
third_party/boringssl/crypto/x509/x_x509a.c \
third_party/boringssl/crypto/x509v3/pcy_cache.c \
third_party/boringssl/crypto/x509v3/pcy_data.c \
third_party/boringssl/crypto/x509v3/pcy_lib.c \
third_party/boringssl/crypto/x509v3/pcy_map.c \
third_party/boringssl/crypto/x509v3/pcy_node.c \
third_party/boringssl/crypto/x509v3/pcy_tree.c \
third_party/boringssl/crypto/x509v3/v3_akey.c \
third_party/boringssl/crypto/x509v3/v3_akeya.c \
third_party/boringssl/crypto/x509v3/v3_alt.c \
third_party/boringssl/crypto/x509v3/v3_bcons.c \
third_party/boringssl/crypto/x509v3/v3_bitst.c \
third_party/boringssl/crypto/x509v3/v3_conf.c \
third_party/boringssl/crypto/x509v3/v3_cpols.c \
third_party/boringssl/crypto/x509v3/v3_crld.c \
third_party/boringssl/crypto/x509v3/v3_enum.c \
third_party/boringssl/crypto/x509v3/v3_extku.c \
third_party/boringssl/crypto/x509v3/v3_genn.c \
third_party/boringssl/crypto/x509v3/v3_ia5.c \
third_party/boringssl/crypto/x509v3/v3_info.c \
third_party/boringssl/crypto/x509v3/v3_int.c \
third_party/boringssl/crypto/x509v3/v3_lib.c \
third_party/boringssl/crypto/x509v3/v3_ncons.c \
third_party/boringssl/crypto/x509v3/v3_ocsp.c \
third_party/boringssl/crypto/x509v3/v3_pci.c \
third_party/boringssl/crypto/x509v3/v3_pcia.c \
third_party/boringssl/crypto/x509v3/v3_pcons.c \
third_party/boringssl/crypto/x509v3/v3_pku.c \
third_party/boringssl/crypto/x509v3/v3_pmaps.c \
third_party/boringssl/crypto/x509v3/v3_prn.c \
third_party/boringssl/crypto/x509v3/v3_purp.c \
third_party/boringssl/crypto/x509v3/v3_skey.c \
third_party/boringssl/crypto/x509v3/v3_sxnet.c \
third_party/boringssl/crypto/x509v3/v3_utl.c \
third_party/boringssl/ssl/bio_ssl.cc \
third_party/boringssl/ssl/d1_both.cc \
third_party/boringssl/ssl/d1_lib.cc \
third_party/boringssl/ssl/d1_pkt.cc \
third_party/boringssl/ssl/d1_srtp.cc \
third_party/boringssl/ssl/dtls_method.cc \
third_party/boringssl/ssl/dtls_record.cc \
third_party/boringssl/ssl/handoff.cc \
third_party/boringssl/ssl/handshake.cc \
third_party/boringssl/ssl/handshake_client.cc \
third_party/boringssl/ssl/handshake_server.cc \
third_party/boringssl/ssl/s3_both.cc \
third_party/boringssl/ssl/s3_lib.cc \
third_party/boringssl/ssl/s3_pkt.cc \
third_party/boringssl/ssl/ssl_aead_ctx.cc \
third_party/boringssl/ssl/ssl_asn1.cc \
third_party/boringssl/ssl/ssl_buffer.cc \
third_party/boringssl/ssl/ssl_cert.cc \
third_party/boringssl/ssl/ssl_cipher.cc \
third_party/boringssl/ssl/ssl_file.cc \
third_party/boringssl/ssl/ssl_key_share.cc \
third_party/boringssl/ssl/ssl_lib.cc \
third_party/boringssl/ssl/ssl_privkey.cc \
third_party/boringssl/ssl/ssl_session.cc \
third_party/boringssl/ssl/ssl_stat.cc \
third_party/boringssl/ssl/ssl_transcript.cc \
third_party/boringssl/ssl/ssl_versions.cc \
third_party/boringssl/ssl/ssl_x509.cc \
third_party/boringssl/ssl/t1_enc.cc \
third_party/boringssl/ssl/t1_lib.cc \
third_party/boringssl/ssl/tls13_both.cc \
third_party/boringssl/ssl/tls13_client.cc \
third_party/boringssl/ssl/tls13_enc.cc \
third_party/boringssl/ssl/tls13_server.cc \
third_party/boringssl/ssl/tls_method.cc \
third_party/boringssl/ssl/tls_record.cc \
third_party/boringssl/third_party/fiat/curve25519.c \
third_party/upb/upb/decode.c \
third_party/upb/upb/encode.c \
third_party/upb/upb/msg.c \
@ -776,6 +778,7 @@ if test "$PHP_GRPC" != "no"; then
-D_HAS_EXCEPTIONS=0 -DNOMINMAX -DGRPC_ARES=0 \
-DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1)
PHP_ADD_BUILD_DIR($ext_builddir/src/boringssl)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/census)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/filters/client_channel/health)
@ -884,46 +887,45 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/strings/internal)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/abseil-cpp/absl/types)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/address_sorting)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/asn1)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/base64)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bio)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bn_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/buf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/bytestring)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/chacha)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/cipher_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/cmac)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/conf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/curve25519)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/dh)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/digest_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/dsa)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ec_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ecdh_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/engine)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/err)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/evp)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/fipsmodule)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/hkdf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/hrss)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/lhash)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/obj)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pem)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pkcs7)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pkcs8)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/poly1305)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/pool)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rand_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rc4)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/rsa_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/siphash)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/stack)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/x509)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/crypto/x509v3)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/ssl)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl-with-bazel/src/third_party/fiat)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/asn1)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/base64)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/bio)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/bn_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/buf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/bytestring)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/chacha)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/cipher_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/cmac)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/conf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/curve25519)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/dh)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/digest_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/dsa)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/ec_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/ecdh_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/ecdsa_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/engine)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/err)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/evp)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/fipsmodule)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/hkdf)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/hrss)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/lhash)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/obj)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/pem)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/pkcs7)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/pkcs8)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/poly1305)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/pool)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/rand_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/rc4)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/rsa_extra)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/siphash)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/stack)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/x509)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/x509v3)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/ssl)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/third_party/fiat)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/upb/upb)
fi

@ -6,6 +6,7 @@ ARG_WITH("grpc", "grpc support", "no");
if (PHP_GRPC != "no") {
EXTENSION("grpc",
"src\\boringssl\\err_data.c " +
"src\\core\\ext\\filters\\census\\grpc_context.cc " +
"src\\core\\ext\\filters\\client_channel\\backend_metric.cc " +
"src\\core\\ext\\filters\\client_channel\\backup_poller.cc " +
@ -316,7 +317,9 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\iomgr\\wakeup_fd_posix.cc " +
"src\\core\\lib\\json\\json.cc " +
"src\\core\\lib\\json\\json_reader.cc " +
"src\\core\\lib\\json\\json_reader_new.cc " +
"src\\core\\lib\\json\\json_writer.cc " +
"src\\core\\lib\\json\\json_writer_new.cc " +
"src\\core\\lib\\profiling\\basic_timers.cc " +
"src\\core\\lib\\profiling\\stap_timers.cc " +
"src\\core\\lib\\security\\context\\security_context.cc " +
@ -470,270 +473,269 @@ if (PHP_GRPC != "no") {
"third_party\\address_sorting\\address_sorting.c " +
"third_party\\address_sorting\\address_sorting_posix.c " +
"third_party\\address_sorting\\address_sorting_windows.c " +
"third_party\\boringssl-with-bazel\\err_data.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_bitstr.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_bool.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_d2i_fp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_dup.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_enum.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_gentm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_i2d_fp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_int.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_mbstr.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_object.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_octet.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_print.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_strnid.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_time.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_type.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_utctm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\a_utf8.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn1_lib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn1_par.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\asn_pack.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_enum.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_int.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\f_string.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_dec.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_enc.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_fre.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_new.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_typ.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\tasn_utl.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\asn1\\time_support.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\base64\\base64.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\bio.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\bio_mem.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\connect.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\fd.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\file.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\hexdump.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\pair.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\printf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\socket.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bio\\socket_helper.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra\\bn_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra\\convert.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\buf\\buf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\asn1_compat.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\ber.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\cbb.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\cbs.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\bytestring\\unicode.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\chacha\\chacha.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\cipher_extra.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\derive_key.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesccm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesctrhmac.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_aesgcmsiv.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_chacha20poly1305.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_null.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_rc2.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_rc4.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\e_tls.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra\\tls_cbc.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cmac\\cmac.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\conf\\conf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-aarch64-fuchsia.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-aarch64-linux.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-arm-linux.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-arm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-intel.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\cpu-ppc64le.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\crypto.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\curve25519\\spake25519.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dh\\check.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dh\\dh.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dh\\dh_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dh\\params.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\digest_extra\\digest_extra.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dsa\\dsa.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\dsa\\dsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra\\ec_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra\\ec_derive.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ecdh_extra\\ecdh_extra.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ecdsa_extra\\ecdsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\engine\\engine.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\err\\err.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\digestsign.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\evp_ctx.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_dsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ec.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ec_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ed25519.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_ed25519_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_rsa.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_rsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_x25519.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\p_x25519_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\pbkdf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\print.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\scrypt.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\evp\\sign.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\ex_data.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\bcm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\fips_shared_support.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule\\is_fips.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\hkdf\\hkdf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\hrss\\hrss.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\lhash\\lhash.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\mem.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\obj\\obj.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\obj\\obj_xref.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_all.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_info.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_lib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_oth.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_pk8.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_pkey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pem\\pem_xaux.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7\\pkcs7.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7\\pkcs7_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\p5_pbev2.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\pkcs8.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8\\pkcs8_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305_arm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\poly1305\\poly1305_vec.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\pool\\pool.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\deterministic.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\forkunsafe.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\fuchsia.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\rand_extra.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra\\windows.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rc4\\rc4.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\refcount_c11.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\refcount_lock.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra\\rsa_asn1.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra\\rsa_print.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\siphash\\siphash.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\stack\\stack.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\thread.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\thread_none.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\thread_pthread.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\thread_win.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_digest.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_sign.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_strex.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\a_verify.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\algorithm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\asn1_gen.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\by_dir.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\by_file.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\i2d_pr.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\rsa_pss.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_crl.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_req.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\t_x509a.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_att.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_cmp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_d2.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_def.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_ext.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_lu.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_obj.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_r2x.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_req.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_set.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_trs.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_txt.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_v3.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_vfy.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509_vpm.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509cset.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509name.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509rset.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x509spki.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_algor.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_all.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_attrib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_crl.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_exten.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_info.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_name.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_pkey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_pubkey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_req.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_sig.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_spki.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_val.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_x509.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509\\x_x509a.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_cache.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_data.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_lib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_map.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_node.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\pcy_tree.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_akey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_akeya.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_alt.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_bcons.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_bitst.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_conf.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_cpols.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_crld.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_enum.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_extku.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_genn.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ia5.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_info.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_int.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_lib.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ncons.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_ocsp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pci.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pcia.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pcons.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pku.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_pmaps.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_prn.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_purp.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_skey.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_sxnet.c " +
"third_party\\boringssl-with-bazel\\src\\crypto\\x509v3\\v3_utl.c " +
"third_party\\boringssl-with-bazel\\src\\ssl\\bio_ssl.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\d1_both.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\d1_lib.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\d1_pkt.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\d1_srtp.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\dtls_method.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\dtls_record.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\handoff.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\handshake.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\handshake_client.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\handshake_server.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\s3_both.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\s3_lib.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\s3_pkt.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_aead_ctx.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_asn1.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_buffer.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_cert.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_cipher.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_file.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_key_share.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_lib.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_privkey.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_session.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_stat.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_transcript.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_versions.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\ssl_x509.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\t1_enc.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\t1_lib.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls13_both.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls13_client.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls13_enc.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls13_server.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls_method.cc " +
"third_party\\boringssl-with-bazel\\src\\ssl\\tls_record.cc " +
"third_party\\boringssl-with-bazel\\src\\third_party\\fiat\\curve25519.c " +
"third_party\\boringssl\\crypto\\asn1\\a_bitstr.c " +
"third_party\\boringssl\\crypto\\asn1\\a_bool.c " +
"third_party\\boringssl\\crypto\\asn1\\a_d2i_fp.c " +
"third_party\\boringssl\\crypto\\asn1\\a_dup.c " +
"third_party\\boringssl\\crypto\\asn1\\a_enum.c " +
"third_party\\boringssl\\crypto\\asn1\\a_gentm.c " +
"third_party\\boringssl\\crypto\\asn1\\a_i2d_fp.c " +
"third_party\\boringssl\\crypto\\asn1\\a_int.c " +
"third_party\\boringssl\\crypto\\asn1\\a_mbstr.c " +
"third_party\\boringssl\\crypto\\asn1\\a_object.c " +
"third_party\\boringssl\\crypto\\asn1\\a_octet.c " +
"third_party\\boringssl\\crypto\\asn1\\a_print.c " +
"third_party\\boringssl\\crypto\\asn1\\a_strnid.c " +
"third_party\\boringssl\\crypto\\asn1\\a_time.c " +
"third_party\\boringssl\\crypto\\asn1\\a_type.c " +
"third_party\\boringssl\\crypto\\asn1\\a_utctm.c " +
"third_party\\boringssl\\crypto\\asn1\\a_utf8.c " +
"third_party\\boringssl\\crypto\\asn1\\asn1_lib.c " +
"third_party\\boringssl\\crypto\\asn1\\asn1_par.c " +
"third_party\\boringssl\\crypto\\asn1\\asn_pack.c " +
"third_party\\boringssl\\crypto\\asn1\\f_enum.c " +
"third_party\\boringssl\\crypto\\asn1\\f_int.c " +
"third_party\\boringssl\\crypto\\asn1\\f_string.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_dec.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_enc.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_fre.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_new.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_typ.c " +
"third_party\\boringssl\\crypto\\asn1\\tasn_utl.c " +
"third_party\\boringssl\\crypto\\asn1\\time_support.c " +
"third_party\\boringssl\\crypto\\base64\\base64.c " +
"third_party\\boringssl\\crypto\\bio\\bio.c " +
"third_party\\boringssl\\crypto\\bio\\bio_mem.c " +
"third_party\\boringssl\\crypto\\bio\\connect.c " +
"third_party\\boringssl\\crypto\\bio\\fd.c " +
"third_party\\boringssl\\crypto\\bio\\file.c " +
"third_party\\boringssl\\crypto\\bio\\hexdump.c " +
"third_party\\boringssl\\crypto\\bio\\pair.c " +
"third_party\\boringssl\\crypto\\bio\\printf.c " +
"third_party\\boringssl\\crypto\\bio\\socket.c " +
"third_party\\boringssl\\crypto\\bio\\socket_helper.c " +
"third_party\\boringssl\\crypto\\bn_extra\\bn_asn1.c " +
"third_party\\boringssl\\crypto\\bn_extra\\convert.c " +
"third_party\\boringssl\\crypto\\buf\\buf.c " +
"third_party\\boringssl\\crypto\\bytestring\\asn1_compat.c " +
"third_party\\boringssl\\crypto\\bytestring\\ber.c " +
"third_party\\boringssl\\crypto\\bytestring\\cbb.c " +
"third_party\\boringssl\\crypto\\bytestring\\cbs.c " +
"third_party\\boringssl\\crypto\\bytestring\\unicode.c " +
"third_party\\boringssl\\crypto\\chacha\\chacha.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\cipher_extra.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\derive_key.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_aesccm.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_aesctrhmac.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_aesgcmsiv.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_chacha20poly1305.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_null.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_rc2.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_rc4.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\e_tls.c " +
"third_party\\boringssl\\crypto\\cipher_extra\\tls_cbc.c " +
"third_party\\boringssl\\crypto\\cmac\\cmac.c " +
"third_party\\boringssl\\crypto\\conf\\conf.c " +
"third_party\\boringssl\\crypto\\cpu-aarch64-fuchsia.c " +
"third_party\\boringssl\\crypto\\cpu-aarch64-linux.c " +
"third_party\\boringssl\\crypto\\cpu-arm-linux.c " +
"third_party\\boringssl\\crypto\\cpu-arm.c " +
"third_party\\boringssl\\crypto\\cpu-intel.c " +
"third_party\\boringssl\\crypto\\cpu-ppc64le.c " +
"third_party\\boringssl\\crypto\\crypto.c " +
"third_party\\boringssl\\crypto\\curve25519\\spake25519.c " +
"third_party\\boringssl\\crypto\\dh\\check.c " +
"third_party\\boringssl\\crypto\\dh\\dh.c " +
"third_party\\boringssl\\crypto\\dh\\dh_asn1.c " +
"third_party\\boringssl\\crypto\\dh\\params.c " +
"third_party\\boringssl\\crypto\\digest_extra\\digest_extra.c " +
"third_party\\boringssl\\crypto\\dsa\\dsa.c " +
"third_party\\boringssl\\crypto\\dsa\\dsa_asn1.c " +
"third_party\\boringssl\\crypto\\ec_extra\\ec_asn1.c " +
"third_party\\boringssl\\crypto\\ec_extra\\ec_derive.c " +
"third_party\\boringssl\\crypto\\ecdh_extra\\ecdh_extra.c " +
"third_party\\boringssl\\crypto\\ecdsa_extra\\ecdsa_asn1.c " +
"third_party\\boringssl\\crypto\\engine\\engine.c " +
"third_party\\boringssl\\crypto\\err\\err.c " +
"third_party\\boringssl\\crypto\\evp\\digestsign.c " +
"third_party\\boringssl\\crypto\\evp\\evp.c " +
"third_party\\boringssl\\crypto\\evp\\evp_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\evp_ctx.c " +
"third_party\\boringssl\\crypto\\evp\\p_dsa_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\p_ec.c " +
"third_party\\boringssl\\crypto\\evp\\p_ec_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\p_ed25519.c " +
"third_party\\boringssl\\crypto\\evp\\p_ed25519_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\p_rsa.c " +
"third_party\\boringssl\\crypto\\evp\\p_rsa_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\p_x25519.c " +
"third_party\\boringssl\\crypto\\evp\\p_x25519_asn1.c " +
"third_party\\boringssl\\crypto\\evp\\pbkdf.c " +
"third_party\\boringssl\\crypto\\evp\\print.c " +
"third_party\\boringssl\\crypto\\evp\\scrypt.c " +
"third_party\\boringssl\\crypto\\evp\\sign.c " +
"third_party\\boringssl\\crypto\\ex_data.c " +
"third_party\\boringssl\\crypto\\fipsmodule\\bcm.c " +
"third_party\\boringssl\\crypto\\fipsmodule\\fips_shared_support.c " +
"third_party\\boringssl\\crypto\\fipsmodule\\is_fips.c " +
"third_party\\boringssl\\crypto\\hkdf\\hkdf.c " +
"third_party\\boringssl\\crypto\\hrss\\hrss.c " +
"third_party\\boringssl\\crypto\\lhash\\lhash.c " +
"third_party\\boringssl\\crypto\\mem.c " +
"third_party\\boringssl\\crypto\\obj\\obj.c " +
"third_party\\boringssl\\crypto\\obj\\obj_xref.c " +
"third_party\\boringssl\\crypto\\pem\\pem_all.c " +
"third_party\\boringssl\\crypto\\pem\\pem_info.c " +
"third_party\\boringssl\\crypto\\pem\\pem_lib.c " +
"third_party\\boringssl\\crypto\\pem\\pem_oth.c " +
"third_party\\boringssl\\crypto\\pem\\pem_pk8.c " +
"third_party\\boringssl\\crypto\\pem\\pem_pkey.c " +
"third_party\\boringssl\\crypto\\pem\\pem_x509.c " +
"third_party\\boringssl\\crypto\\pem\\pem_xaux.c " +
"third_party\\boringssl\\crypto\\pkcs7\\pkcs7.c " +
"third_party\\boringssl\\crypto\\pkcs7\\pkcs7_x509.c " +
"third_party\\boringssl\\crypto\\pkcs8\\p5_pbev2.c " +
"third_party\\boringssl\\crypto\\pkcs8\\pkcs8.c " +
"third_party\\boringssl\\crypto\\pkcs8\\pkcs8_x509.c " +
"third_party\\boringssl\\crypto\\poly1305\\poly1305.c " +
"third_party\\boringssl\\crypto\\poly1305\\poly1305_arm.c " +
"third_party\\boringssl\\crypto\\poly1305\\poly1305_vec.c " +
"third_party\\boringssl\\crypto\\pool\\pool.c " +
"third_party\\boringssl\\crypto\\rand_extra\\deterministic.c " +
"third_party\\boringssl\\crypto\\rand_extra\\forkunsafe.c " +
"third_party\\boringssl\\crypto\\rand_extra\\fuchsia.c " +
"third_party\\boringssl\\crypto\\rand_extra\\rand_extra.c " +
"third_party\\boringssl\\crypto\\rand_extra\\windows.c " +
"third_party\\boringssl\\crypto\\rc4\\rc4.c " +
"third_party\\boringssl\\crypto\\refcount_c11.c " +
"third_party\\boringssl\\crypto\\refcount_lock.c " +
"third_party\\boringssl\\crypto\\rsa_extra\\rsa_asn1.c " +
"third_party\\boringssl\\crypto\\rsa_extra\\rsa_print.c " +
"third_party\\boringssl\\crypto\\siphash\\siphash.c " +
"third_party\\boringssl\\crypto\\stack\\stack.c " +
"third_party\\boringssl\\crypto\\thread.c " +
"third_party\\boringssl\\crypto\\thread_none.c " +
"third_party\\boringssl\\crypto\\thread_pthread.c " +
"third_party\\boringssl\\crypto\\thread_win.c " +
"third_party\\boringssl\\crypto\\x509\\a_digest.c " +
"third_party\\boringssl\\crypto\\x509\\a_sign.c " +
"third_party\\boringssl\\crypto\\x509\\a_strex.c " +
"third_party\\boringssl\\crypto\\x509\\a_verify.c " +
"third_party\\boringssl\\crypto\\x509\\algorithm.c " +
"third_party\\boringssl\\crypto\\x509\\asn1_gen.c " +
"third_party\\boringssl\\crypto\\x509\\by_dir.c " +
"third_party\\boringssl\\crypto\\x509\\by_file.c " +
"third_party\\boringssl\\crypto\\x509\\i2d_pr.c " +
"third_party\\boringssl\\crypto\\x509\\rsa_pss.c " +
"third_party\\boringssl\\crypto\\x509\\t_crl.c " +
"third_party\\boringssl\\crypto\\x509\\t_req.c " +
"third_party\\boringssl\\crypto\\x509\\t_x509.c " +
"third_party\\boringssl\\crypto\\x509\\t_x509a.c " +
"third_party\\boringssl\\crypto\\x509\\x509.c " +
"third_party\\boringssl\\crypto\\x509\\x509_att.c " +
"third_party\\boringssl\\crypto\\x509\\x509_cmp.c " +
"third_party\\boringssl\\crypto\\x509\\x509_d2.c " +
"third_party\\boringssl\\crypto\\x509\\x509_def.c " +
"third_party\\boringssl\\crypto\\x509\\x509_ext.c " +
"third_party\\boringssl\\crypto\\x509\\x509_lu.c " +
"third_party\\boringssl\\crypto\\x509\\x509_obj.c " +
"third_party\\boringssl\\crypto\\x509\\x509_r2x.c " +
"third_party\\boringssl\\crypto\\x509\\x509_req.c " +
"third_party\\boringssl\\crypto\\x509\\x509_set.c " +
"third_party\\boringssl\\crypto\\x509\\x509_trs.c " +
"third_party\\boringssl\\crypto\\x509\\x509_txt.c " +
"third_party\\boringssl\\crypto\\x509\\x509_v3.c " +
"third_party\\boringssl\\crypto\\x509\\x509_vfy.c " +
"third_party\\boringssl\\crypto\\x509\\x509_vpm.c " +
"third_party\\boringssl\\crypto\\x509\\x509cset.c " +
"third_party\\boringssl\\crypto\\x509\\x509name.c " +
"third_party\\boringssl\\crypto\\x509\\x509rset.c " +
"third_party\\boringssl\\crypto\\x509\\x509spki.c " +
"third_party\\boringssl\\crypto\\x509\\x_algor.c " +
"third_party\\boringssl\\crypto\\x509\\x_all.c " +
"third_party\\boringssl\\crypto\\x509\\x_attrib.c " +
"third_party\\boringssl\\crypto\\x509\\x_crl.c " +
"third_party\\boringssl\\crypto\\x509\\x_exten.c " +
"third_party\\boringssl\\crypto\\x509\\x_info.c " +
"third_party\\boringssl\\crypto\\x509\\x_name.c " +
"third_party\\boringssl\\crypto\\x509\\x_pkey.c " +
"third_party\\boringssl\\crypto\\x509\\x_pubkey.c " +
"third_party\\boringssl\\crypto\\x509\\x_req.c " +
"third_party\\boringssl\\crypto\\x509\\x_sig.c " +
"third_party\\boringssl\\crypto\\x509\\x_spki.c " +
"third_party\\boringssl\\crypto\\x509\\x_val.c " +
"third_party\\boringssl\\crypto\\x509\\x_x509.c " +
"third_party\\boringssl\\crypto\\x509\\x_x509a.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_cache.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_data.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_lib.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_map.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_node.c " +
"third_party\\boringssl\\crypto\\x509v3\\pcy_tree.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_akey.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_akeya.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_alt.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_bcons.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_bitst.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_conf.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_cpols.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_crld.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_enum.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_extku.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_genn.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_ia5.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_info.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_int.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_lib.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_ncons.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_ocsp.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pci.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pcia.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pcons.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pku.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_pmaps.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_prn.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_purp.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_skey.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_sxnet.c " +
"third_party\\boringssl\\crypto\\x509v3\\v3_utl.c " +
"third_party\\boringssl\\ssl\\bio_ssl.cc " +
"third_party\\boringssl\\ssl\\d1_both.cc " +
"third_party\\boringssl\\ssl\\d1_lib.cc " +
"third_party\\boringssl\\ssl\\d1_pkt.cc " +
"third_party\\boringssl\\ssl\\d1_srtp.cc " +
"third_party\\boringssl\\ssl\\dtls_method.cc " +
"third_party\\boringssl\\ssl\\dtls_record.cc " +
"third_party\\boringssl\\ssl\\handoff.cc " +
"third_party\\boringssl\\ssl\\handshake.cc " +
"third_party\\boringssl\\ssl\\handshake_client.cc " +
"third_party\\boringssl\\ssl\\handshake_server.cc " +
"third_party\\boringssl\\ssl\\s3_both.cc " +
"third_party\\boringssl\\ssl\\s3_lib.cc " +
"third_party\\boringssl\\ssl\\s3_pkt.cc " +
"third_party\\boringssl\\ssl\\ssl_aead_ctx.cc " +
"third_party\\boringssl\\ssl\\ssl_asn1.cc " +
"third_party\\boringssl\\ssl\\ssl_buffer.cc " +
"third_party\\boringssl\\ssl\\ssl_cert.cc " +
"third_party\\boringssl\\ssl\\ssl_cipher.cc " +
"third_party\\boringssl\\ssl\\ssl_file.cc " +
"third_party\\boringssl\\ssl\\ssl_key_share.cc " +
"third_party\\boringssl\\ssl\\ssl_lib.cc " +
"third_party\\boringssl\\ssl\\ssl_privkey.cc " +
"third_party\\boringssl\\ssl\\ssl_session.cc " +
"third_party\\boringssl\\ssl\\ssl_stat.cc " +
"third_party\\boringssl\\ssl\\ssl_transcript.cc " +
"third_party\\boringssl\\ssl\\ssl_versions.cc " +
"third_party\\boringssl\\ssl\\ssl_x509.cc " +
"third_party\\boringssl\\ssl\\t1_enc.cc " +
"third_party\\boringssl\\ssl\\t1_lib.cc " +
"third_party\\boringssl\\ssl\\tls13_both.cc " +
"third_party\\boringssl\\ssl\\tls13_client.cc " +
"third_party\\boringssl\\ssl\\tls13_enc.cc " +
"third_party\\boringssl\\ssl\\tls13_server.cc " +
"third_party\\boringssl\\ssl\\tls_method.cc " +
"third_party\\boringssl\\ssl\\tls_record.cc " +
"third_party\\boringssl\\third_party\\fiat\\curve25519.c " +
"third_party\\upb\\upb\\decode.c " +
"third_party\\upb\\upb\\encode.c " +
"third_party\\upb\\upb\\msg.c " +
@ -773,6 +775,7 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext");
FSO.CreateFolder(base_dir+"\\ext\\grpc");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\boringssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\filters");
@ -918,49 +921,48 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\strings\\internal");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\abseil-cpp\\absl\\types");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\address_sorting");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\asn1");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\base64");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bio");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bn_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\buf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\bytestring");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\chacha");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\cipher_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\cmac");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\conf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\curve25519");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\dh");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\digest_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\dsa");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ec_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ecdh_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\ecdsa_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\engine");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\err");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\evp");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\fipsmodule");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\hkdf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\hrss");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\lhash");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\obj");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pem");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pkcs7");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pkcs8");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\poly1305");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\pool");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rand_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rc4");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\rsa_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\siphash");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\stack");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\x509");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\crypto\\x509v3");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\ssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\third_party");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl-with-bazel\\src\\third_party\\fiat");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\asn1");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\base64");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\bio");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\bn_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\buf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\bytestring");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\chacha");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\cipher_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\cmac");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\conf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\curve25519");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\dh");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\digest_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\dsa");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\ec_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\ecdh_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\ecdsa_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\engine");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\err");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\evp");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\fipsmodule");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\hkdf");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\hrss");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\lhash");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\obj");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\pem");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\pkcs7");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\pkcs8");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\poly1305");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\pool");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\rand_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\rc4");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\rsa_extra");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\siphash");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\stack");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\x509");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\crypto\\x509v3");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\ssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\third_party");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\boringssl\\third_party\\fiat");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\upb\\upb");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\third_party\\zlib");

@ -170,7 +170,7 @@ Pod::Spec.new do |s|
ss.header_mappings_dir = '.'
ss.libraries = 'z'
ss.dependency "#{s.name}/Interface", version
ss.dependency 'BoringSSL-GRPC', '0.0.6'
ss.dependency 'BoringSSL-GRPC', '0.0.5'
abseil_version = '0.20190808.1'
ss.dependency 'abseil/container/inlined_vector', abseil_version
ss.dependency 'abseil/strings/strings', abseil_version
@ -753,7 +753,9 @@ Pod::Spec.new do |s|
'src/core/lib/json/json.cc',
'src/core/lib/json/json.h',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_reader_new.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/json/json_writer_new.cc',
'src/core/lib/profiling/basic_timers.cc',
'src/core/lib/profiling/stap_timers.cc',
'src/core/lib/profiling/timers.h',

@ -99,6 +99,7 @@ Gem::Specification.new do |s|
s.files += %w( include/grpc/support/thd_id.h )
s.files += %w( include/grpc/support/time.h )
s.files += %w( include/grpc/support/workaround_list.h )
s.files += %w( src/boringssl/err_data.c )
s.files += %w( src/core/ext/filters/census/grpc_context.cc )
s.files += %w( src/core/ext/filters/client_channel/backend_metric.cc )
s.files += %w( src/core/ext/filters/client_channel/backend_metric.h )
@ -675,7 +676,9 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/json/json.cc )
s.files += %w( src/core/lib/json/json.h )
s.files += %w( src/core/lib/json/json_reader.cc )
s.files += %w( src/core/lib/json/json_reader_new.cc )
s.files += %w( src/core/lib/json/json_writer.cc )
s.files += %w( src/core/lib/json/json_writer_new.cc )
s.files += %w( src/core/lib/profiling/basic_timers.cc )
s.files += %w( src/core/lib/profiling/stap_timers.cc )
s.files += %w( src/core/lib/profiling/timers.h )
@ -995,462 +998,459 @@ Gem::Specification.new do |s|
s.files += %w( third_party/address_sorting/address_sorting_posix.c )
s.files += %w( third_party/address_sorting/address_sorting_windows.c )
s.files += %w( third_party/address_sorting/include/address_sorting/address_sorting.h )
s.files += %w( third_party/boringssl-with-bazel/err_data.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/base64/base64.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/bio.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/connect.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/fd.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/file.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/pair.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/printf.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/socket.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/buf/buf.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/chacha/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/conf/conf.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/conf/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-arm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-intel.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/crypto.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/dh/check.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/dh/dh.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/dh/params.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/engine/engine.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/err/err.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/err/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/evp.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/print.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/evp/sign.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/ex_data.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/x86_64-gcc.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/hrss/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/mem.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/obj/obj.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pool/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/pool/pool.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/refcount_c11.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/refcount_lock.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/stack/stack.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/thread.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/thread_none.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/thread_pthread.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/thread_win.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/by_file.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/charmap.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/t_req.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509name.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_all.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_info.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_name.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_req.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_val.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c )
s.files += %w( third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/aead.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/aes.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/asn1.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/asn1t.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/base.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/base64.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/bio.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/blowfish.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/bn.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/buf.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/buffer.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/bytestring.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/cast.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/chacha.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/cipher.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/cmac.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/conf.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/cpu.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/crypto.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/curve25519.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/des.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/dh.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/digest.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/dsa.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/dtls1.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/e_os2.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ec.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ec_key.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ecdh.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/engine.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/err.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/evp.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ex_data.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/hkdf.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/hmac.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/hrss.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/lhash.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/md4.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/md5.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/mem.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/nid.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/obj.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/objects.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/opensslv.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pem.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/poly1305.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/pool.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/rand.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/rc4.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ripemd.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/rsa.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/safestack.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/sha.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/siphash.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/span.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/srtp.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ssl.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/ssl3.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/stack.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/thread.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/tls1.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/type_check.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/x509.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h )
s.files += %w( third_party/boringssl-with-bazel/src/include/openssl/x509v3.h )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/d1_both.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/d1_lib.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/dtls_method.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/dtls_record.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/handoff.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/handshake.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/handshake_client.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/handshake_server.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/s3_both.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/s3_lib.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_file.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_session.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/t1_enc.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/t1_lib.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls13_both.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls13_client.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls13_server.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls_method.cc )
s.files += %w( third_party/boringssl-with-bazel/src/ssl/tls_record.cc )
s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/curve25519.c )
s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h )
s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h )
s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_tables.h )
s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/internal.h )
s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/p256.c )
s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h )
s.files += %w( third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h )
s.files += %w( third_party/boringssl/crypto/asn1/a_bitstr.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_bool.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_d2i_fp.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_dup.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_enum.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_gentm.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_i2d_fp.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_int.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_mbstr.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_object.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_octet.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_print.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_strnid.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_time.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_type.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_utctm.c )
s.files += %w( third_party/boringssl/crypto/asn1/a_utf8.c )
s.files += %w( third_party/boringssl/crypto/asn1/asn1_lib.c )
s.files += %w( third_party/boringssl/crypto/asn1/asn1_locl.h )
s.files += %w( third_party/boringssl/crypto/asn1/asn1_par.c )
s.files += %w( third_party/boringssl/crypto/asn1/asn_pack.c )
s.files += %w( third_party/boringssl/crypto/asn1/f_enum.c )
s.files += %w( third_party/boringssl/crypto/asn1/f_int.c )
s.files += %w( third_party/boringssl/crypto/asn1/f_string.c )
s.files += %w( third_party/boringssl/crypto/asn1/tasn_dec.c )
s.files += %w( third_party/boringssl/crypto/asn1/tasn_enc.c )
s.files += %w( third_party/boringssl/crypto/asn1/tasn_fre.c )
s.files += %w( third_party/boringssl/crypto/asn1/tasn_new.c )
s.files += %w( third_party/boringssl/crypto/asn1/tasn_typ.c )
s.files += %w( third_party/boringssl/crypto/asn1/tasn_utl.c )
s.files += %w( third_party/boringssl/crypto/asn1/time_support.c )
s.files += %w( third_party/boringssl/crypto/base64/base64.c )
s.files += %w( third_party/boringssl/crypto/bio/bio.c )
s.files += %w( third_party/boringssl/crypto/bio/bio_mem.c )
s.files += %w( third_party/boringssl/crypto/bio/connect.c )
s.files += %w( third_party/boringssl/crypto/bio/fd.c )
s.files += %w( third_party/boringssl/crypto/bio/file.c )
s.files += %w( third_party/boringssl/crypto/bio/hexdump.c )
s.files += %w( third_party/boringssl/crypto/bio/internal.h )
s.files += %w( third_party/boringssl/crypto/bio/pair.c )
s.files += %w( third_party/boringssl/crypto/bio/printf.c )
s.files += %w( third_party/boringssl/crypto/bio/socket.c )
s.files += %w( third_party/boringssl/crypto/bio/socket_helper.c )
s.files += %w( third_party/boringssl/crypto/bn_extra/bn_asn1.c )
s.files += %w( third_party/boringssl/crypto/bn_extra/convert.c )
s.files += %w( third_party/boringssl/crypto/buf/buf.c )
s.files += %w( third_party/boringssl/crypto/bytestring/asn1_compat.c )
s.files += %w( third_party/boringssl/crypto/bytestring/ber.c )
s.files += %w( third_party/boringssl/crypto/bytestring/cbb.c )
s.files += %w( third_party/boringssl/crypto/bytestring/cbs.c )
s.files += %w( third_party/boringssl/crypto/bytestring/internal.h )
s.files += %w( third_party/boringssl/crypto/bytestring/unicode.c )
s.files += %w( third_party/boringssl/crypto/chacha/chacha.c )
s.files += %w( third_party/boringssl/crypto/chacha/internal.h )
s.files += %w( third_party/boringssl/crypto/cipher_extra/cipher_extra.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/derive_key.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/e_aesccm.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/e_null.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/e_rc2.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/e_rc4.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/e_tls.c )
s.files += %w( third_party/boringssl/crypto/cipher_extra/internal.h )
s.files += %w( third_party/boringssl/crypto/cipher_extra/tls_cbc.c )
s.files += %w( third_party/boringssl/crypto/cmac/cmac.c )
s.files += %w( third_party/boringssl/crypto/conf/conf.c )
s.files += %w( third_party/boringssl/crypto/conf/conf_def.h )
s.files += %w( third_party/boringssl/crypto/conf/internal.h )
s.files += %w( third_party/boringssl/crypto/cpu-aarch64-fuchsia.c )
s.files += %w( third_party/boringssl/crypto/cpu-aarch64-linux.c )
s.files += %w( third_party/boringssl/crypto/cpu-arm-linux.c )
s.files += %w( third_party/boringssl/crypto/cpu-arm-linux.h )
s.files += %w( third_party/boringssl/crypto/cpu-arm.c )
s.files += %w( third_party/boringssl/crypto/cpu-intel.c )
s.files += %w( third_party/boringssl/crypto/cpu-ppc64le.c )
s.files += %w( third_party/boringssl/crypto/crypto.c )
s.files += %w( third_party/boringssl/crypto/curve25519/spake25519.c )
s.files += %w( third_party/boringssl/crypto/dh/check.c )
s.files += %w( third_party/boringssl/crypto/dh/dh.c )
s.files += %w( third_party/boringssl/crypto/dh/dh_asn1.c )
s.files += %w( third_party/boringssl/crypto/dh/params.c )
s.files += %w( third_party/boringssl/crypto/digest_extra/digest_extra.c )
s.files += %w( third_party/boringssl/crypto/dsa/dsa.c )
s.files += %w( third_party/boringssl/crypto/dsa/dsa_asn1.c )
s.files += %w( third_party/boringssl/crypto/ec_extra/ec_asn1.c )
s.files += %w( third_party/boringssl/crypto/ec_extra/ec_derive.c )
s.files += %w( third_party/boringssl/crypto/ecdh_extra/ecdh_extra.c )
s.files += %w( third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c )
s.files += %w( third_party/boringssl/crypto/engine/engine.c )
s.files += %w( third_party/boringssl/crypto/err/err.c )
s.files += %w( third_party/boringssl/crypto/err/internal.h )
s.files += %w( third_party/boringssl/crypto/evp/digestsign.c )
s.files += %w( third_party/boringssl/crypto/evp/evp.c )
s.files += %w( third_party/boringssl/crypto/evp/evp_asn1.c )
s.files += %w( third_party/boringssl/crypto/evp/evp_ctx.c )
s.files += %w( third_party/boringssl/crypto/evp/internal.h )
s.files += %w( third_party/boringssl/crypto/evp/p_dsa_asn1.c )
s.files += %w( third_party/boringssl/crypto/evp/p_ec.c )
s.files += %w( third_party/boringssl/crypto/evp/p_ec_asn1.c )
s.files += %w( third_party/boringssl/crypto/evp/p_ed25519.c )
s.files += %w( third_party/boringssl/crypto/evp/p_ed25519_asn1.c )
s.files += %w( third_party/boringssl/crypto/evp/p_rsa.c )
s.files += %w( third_party/boringssl/crypto/evp/p_rsa_asn1.c )
s.files += %w( third_party/boringssl/crypto/evp/p_x25519.c )
s.files += %w( third_party/boringssl/crypto/evp/p_x25519_asn1.c )
s.files += %w( third_party/boringssl/crypto/evp/pbkdf.c )
s.files += %w( third_party/boringssl/crypto/evp/print.c )
s.files += %w( third_party/boringssl/crypto/evp/scrypt.c )
s.files += %w( third_party/boringssl/crypto/evp/sign.c )
s.files += %w( third_party/boringssl/crypto/ex_data.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/aes/aes.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/aes/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bcm.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/add.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/bn.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/bytes.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/cmp.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/ctx.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/div.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/div_extra.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/gcd.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/generic.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/jacobi.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/montgomery.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/mul.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/prime.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/random.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/shift.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/bn/sqrt.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/cipher/aead.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/cipher/cipher.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/cipher/e_des.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/cipher/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/delocate.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/des/des.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/des/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/digest/digest.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/digest/digests.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/digest/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/digest/md32_common.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/ec.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/ec_key.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/felem.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/oct.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/p224-64.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/scalar.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/simple.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/util.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ec/wnaf.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/fips_shared_support.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/hmac/hmac.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/is_fips.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/md4/md4.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/md5/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/md5/md5.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/modes/cbc.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/modes/cfb.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/modes/ctr.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/modes/gcm.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/modes/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/modes/ofb.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/modes/polyval.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rand/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rand/rand.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rand/urandom.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rsa/blinding.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rsa/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rsa/padding.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rsa/rsa.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/self_check/self_check.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/sha/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/sha/sha1-altivec.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/sha/sha1.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/sha/sha256.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/sha/sha512.c )
s.files += %w( third_party/boringssl/crypto/fipsmodule/tls/internal.h )
s.files += %w( third_party/boringssl/crypto/fipsmodule/tls/kdf.c )
s.files += %w( third_party/boringssl/crypto/hkdf/hkdf.c )
s.files += %w( third_party/boringssl/crypto/hrss/hrss.c )
s.files += %w( third_party/boringssl/crypto/hrss/internal.h )
s.files += %w( third_party/boringssl/crypto/internal.h )
s.files += %w( third_party/boringssl/crypto/lhash/lhash.c )
s.files += %w( third_party/boringssl/crypto/mem.c )
s.files += %w( third_party/boringssl/crypto/obj/obj.c )
s.files += %w( third_party/boringssl/crypto/obj/obj_dat.h )
s.files += %w( third_party/boringssl/crypto/obj/obj_xref.c )
s.files += %w( third_party/boringssl/crypto/pem/pem_all.c )
s.files += %w( third_party/boringssl/crypto/pem/pem_info.c )
s.files += %w( third_party/boringssl/crypto/pem/pem_lib.c )
s.files += %w( third_party/boringssl/crypto/pem/pem_oth.c )
s.files += %w( third_party/boringssl/crypto/pem/pem_pk8.c )
s.files += %w( third_party/boringssl/crypto/pem/pem_pkey.c )
s.files += %w( third_party/boringssl/crypto/pem/pem_x509.c )
s.files += %w( third_party/boringssl/crypto/pem/pem_xaux.c )
s.files += %w( third_party/boringssl/crypto/pkcs7/internal.h )
s.files += %w( third_party/boringssl/crypto/pkcs7/pkcs7.c )
s.files += %w( third_party/boringssl/crypto/pkcs7/pkcs7_x509.c )
s.files += %w( third_party/boringssl/crypto/pkcs8/internal.h )
s.files += %w( third_party/boringssl/crypto/pkcs8/p5_pbev2.c )
s.files += %w( third_party/boringssl/crypto/pkcs8/pkcs8.c )
s.files += %w( third_party/boringssl/crypto/pkcs8/pkcs8_x509.c )
s.files += %w( third_party/boringssl/crypto/poly1305/internal.h )
s.files += %w( third_party/boringssl/crypto/poly1305/poly1305.c )
s.files += %w( third_party/boringssl/crypto/poly1305/poly1305_arm.c )
s.files += %w( third_party/boringssl/crypto/poly1305/poly1305_vec.c )
s.files += %w( third_party/boringssl/crypto/pool/internal.h )
s.files += %w( third_party/boringssl/crypto/pool/pool.c )
s.files += %w( third_party/boringssl/crypto/rand_extra/deterministic.c )
s.files += %w( third_party/boringssl/crypto/rand_extra/forkunsafe.c )
s.files += %w( third_party/boringssl/crypto/rand_extra/fuchsia.c )
s.files += %w( third_party/boringssl/crypto/rand_extra/rand_extra.c )
s.files += %w( third_party/boringssl/crypto/rand_extra/windows.c )
s.files += %w( third_party/boringssl/crypto/rc4/rc4.c )
s.files += %w( third_party/boringssl/crypto/refcount_c11.c )
s.files += %w( third_party/boringssl/crypto/refcount_lock.c )
s.files += %w( third_party/boringssl/crypto/rsa_extra/rsa_asn1.c )
s.files += %w( third_party/boringssl/crypto/rsa_extra/rsa_print.c )
s.files += %w( third_party/boringssl/crypto/siphash/siphash.c )
s.files += %w( third_party/boringssl/crypto/stack/stack.c )
s.files += %w( third_party/boringssl/crypto/thread.c )
s.files += %w( third_party/boringssl/crypto/thread_none.c )
s.files += %w( third_party/boringssl/crypto/thread_pthread.c )
s.files += %w( third_party/boringssl/crypto/thread_win.c )
s.files += %w( third_party/boringssl/crypto/x509/a_digest.c )
s.files += %w( third_party/boringssl/crypto/x509/a_sign.c )
s.files += %w( third_party/boringssl/crypto/x509/a_strex.c )
s.files += %w( third_party/boringssl/crypto/x509/a_verify.c )
s.files += %w( third_party/boringssl/crypto/x509/algorithm.c )
s.files += %w( third_party/boringssl/crypto/x509/asn1_gen.c )
s.files += %w( third_party/boringssl/crypto/x509/by_dir.c )
s.files += %w( third_party/boringssl/crypto/x509/by_file.c )
s.files += %w( third_party/boringssl/crypto/x509/charmap.h )
s.files += %w( third_party/boringssl/crypto/x509/i2d_pr.c )
s.files += %w( third_party/boringssl/crypto/x509/internal.h )
s.files += %w( third_party/boringssl/crypto/x509/rsa_pss.c )
s.files += %w( third_party/boringssl/crypto/x509/t_crl.c )
s.files += %w( third_party/boringssl/crypto/x509/t_req.c )
s.files += %w( third_party/boringssl/crypto/x509/t_x509.c )
s.files += %w( third_party/boringssl/crypto/x509/t_x509a.c )
s.files += %w( third_party/boringssl/crypto/x509/vpm_int.h )
s.files += %w( third_party/boringssl/crypto/x509/x509.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_att.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_cmp.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_d2.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_def.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_ext.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_lu.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_obj.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_r2x.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_req.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_set.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_trs.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_txt.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_v3.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_vfy.c )
s.files += %w( third_party/boringssl/crypto/x509/x509_vpm.c )
s.files += %w( third_party/boringssl/crypto/x509/x509cset.c )
s.files += %w( third_party/boringssl/crypto/x509/x509name.c )
s.files += %w( third_party/boringssl/crypto/x509/x509rset.c )
s.files += %w( third_party/boringssl/crypto/x509/x509spki.c )
s.files += %w( third_party/boringssl/crypto/x509/x_algor.c )
s.files += %w( third_party/boringssl/crypto/x509/x_all.c )
s.files += %w( third_party/boringssl/crypto/x509/x_attrib.c )
s.files += %w( third_party/boringssl/crypto/x509/x_crl.c )
s.files += %w( third_party/boringssl/crypto/x509/x_exten.c )
s.files += %w( third_party/boringssl/crypto/x509/x_info.c )
s.files += %w( third_party/boringssl/crypto/x509/x_name.c )
s.files += %w( third_party/boringssl/crypto/x509/x_pkey.c )
s.files += %w( third_party/boringssl/crypto/x509/x_pubkey.c )
s.files += %w( third_party/boringssl/crypto/x509/x_req.c )
s.files += %w( third_party/boringssl/crypto/x509/x_sig.c )
s.files += %w( third_party/boringssl/crypto/x509/x_spki.c )
s.files += %w( third_party/boringssl/crypto/x509/x_val.c )
s.files += %w( third_party/boringssl/crypto/x509/x_x509.c )
s.files += %w( third_party/boringssl/crypto/x509/x_x509a.c )
s.files += %w( third_party/boringssl/crypto/x509v3/ext_dat.h )
s.files += %w( third_party/boringssl/crypto/x509v3/internal.h )
s.files += %w( third_party/boringssl/crypto/x509v3/pcy_cache.c )
s.files += %w( third_party/boringssl/crypto/x509v3/pcy_data.c )
s.files += %w( third_party/boringssl/crypto/x509v3/pcy_int.h )
s.files += %w( third_party/boringssl/crypto/x509v3/pcy_lib.c )
s.files += %w( third_party/boringssl/crypto/x509v3/pcy_map.c )
s.files += %w( third_party/boringssl/crypto/x509v3/pcy_node.c )
s.files += %w( third_party/boringssl/crypto/x509v3/pcy_tree.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_akey.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_akeya.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_alt.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_bcons.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_bitst.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_conf.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_cpols.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_crld.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_enum.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_extku.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_genn.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_ia5.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_info.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_int.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_lib.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_ncons.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_ocsp.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_pci.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_pcia.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_pcons.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_pku.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_pmaps.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_prn.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_purp.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_skey.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_sxnet.c )
s.files += %w( third_party/boringssl/crypto/x509v3/v3_utl.c )
s.files += %w( third_party/boringssl/include/openssl/aead.h )
s.files += %w( third_party/boringssl/include/openssl/aes.h )
s.files += %w( third_party/boringssl/include/openssl/arm_arch.h )
s.files += %w( third_party/boringssl/include/openssl/asn1.h )
s.files += %w( third_party/boringssl/include/openssl/asn1_mac.h )
s.files += %w( third_party/boringssl/include/openssl/asn1t.h )
s.files += %w( third_party/boringssl/include/openssl/base.h )
s.files += %w( third_party/boringssl/include/openssl/base64.h )
s.files += %w( third_party/boringssl/include/openssl/bio.h )
s.files += %w( third_party/boringssl/include/openssl/blowfish.h )
s.files += %w( third_party/boringssl/include/openssl/bn.h )
s.files += %w( third_party/boringssl/include/openssl/buf.h )
s.files += %w( third_party/boringssl/include/openssl/buffer.h )
s.files += %w( third_party/boringssl/include/openssl/bytestring.h )
s.files += %w( third_party/boringssl/include/openssl/cast.h )
s.files += %w( third_party/boringssl/include/openssl/chacha.h )
s.files += %w( third_party/boringssl/include/openssl/cipher.h )
s.files += %w( third_party/boringssl/include/openssl/cmac.h )
s.files += %w( third_party/boringssl/include/openssl/conf.h )
s.files += %w( third_party/boringssl/include/openssl/cpu.h )
s.files += %w( third_party/boringssl/include/openssl/crypto.h )
s.files += %w( third_party/boringssl/include/openssl/curve25519.h )
s.files += %w( third_party/boringssl/include/openssl/des.h )
s.files += %w( third_party/boringssl/include/openssl/dh.h )
s.files += %w( third_party/boringssl/include/openssl/digest.h )
s.files += %w( third_party/boringssl/include/openssl/dsa.h )
s.files += %w( third_party/boringssl/include/openssl/dtls1.h )
s.files += %w( third_party/boringssl/include/openssl/e_os2.h )
s.files += %w( third_party/boringssl/include/openssl/ec.h )
s.files += %w( third_party/boringssl/include/openssl/ec_key.h )
s.files += %w( third_party/boringssl/include/openssl/ecdh.h )
s.files += %w( third_party/boringssl/include/openssl/ecdsa.h )
s.files += %w( third_party/boringssl/include/openssl/engine.h )
s.files += %w( third_party/boringssl/include/openssl/err.h )
s.files += %w( third_party/boringssl/include/openssl/evp.h )
s.files += %w( third_party/boringssl/include/openssl/ex_data.h )
s.files += %w( third_party/boringssl/include/openssl/hkdf.h )
s.files += %w( third_party/boringssl/include/openssl/hmac.h )
s.files += %w( third_party/boringssl/include/openssl/hrss.h )
s.files += %w( third_party/boringssl/include/openssl/is_boringssl.h )
s.files += %w( third_party/boringssl/include/openssl/lhash.h )
s.files += %w( third_party/boringssl/include/openssl/md4.h )
s.files += %w( third_party/boringssl/include/openssl/md5.h )
s.files += %w( third_party/boringssl/include/openssl/mem.h )
s.files += %w( third_party/boringssl/include/openssl/nid.h )
s.files += %w( third_party/boringssl/include/openssl/obj.h )
s.files += %w( third_party/boringssl/include/openssl/obj_mac.h )
s.files += %w( third_party/boringssl/include/openssl/objects.h )
s.files += %w( third_party/boringssl/include/openssl/opensslconf.h )
s.files += %w( third_party/boringssl/include/openssl/opensslv.h )
s.files += %w( third_party/boringssl/include/openssl/ossl_typ.h )
s.files += %w( third_party/boringssl/include/openssl/pem.h )
s.files += %w( third_party/boringssl/include/openssl/pkcs12.h )
s.files += %w( third_party/boringssl/include/openssl/pkcs7.h )
s.files += %w( third_party/boringssl/include/openssl/pkcs8.h )
s.files += %w( third_party/boringssl/include/openssl/poly1305.h )
s.files += %w( third_party/boringssl/include/openssl/pool.h )
s.files += %w( third_party/boringssl/include/openssl/rand.h )
s.files += %w( third_party/boringssl/include/openssl/rc4.h )
s.files += %w( third_party/boringssl/include/openssl/ripemd.h )
s.files += %w( third_party/boringssl/include/openssl/rsa.h )
s.files += %w( third_party/boringssl/include/openssl/safestack.h )
s.files += %w( third_party/boringssl/include/openssl/sha.h )
s.files += %w( third_party/boringssl/include/openssl/siphash.h )
s.files += %w( third_party/boringssl/include/openssl/span.h )
s.files += %w( third_party/boringssl/include/openssl/srtp.h )
s.files += %w( third_party/boringssl/include/openssl/ssl.h )
s.files += %w( third_party/boringssl/include/openssl/ssl3.h )
s.files += %w( third_party/boringssl/include/openssl/stack.h )
s.files += %w( third_party/boringssl/include/openssl/thread.h )
s.files += %w( third_party/boringssl/include/openssl/tls1.h )
s.files += %w( third_party/boringssl/include/openssl/type_check.h )
s.files += %w( third_party/boringssl/include/openssl/x509.h )
s.files += %w( third_party/boringssl/include/openssl/x509_vfy.h )
s.files += %w( third_party/boringssl/include/openssl/x509v3.h )
s.files += %w( third_party/boringssl/ssl/bio_ssl.cc )
s.files += %w( third_party/boringssl/ssl/d1_both.cc )
s.files += %w( third_party/boringssl/ssl/d1_lib.cc )
s.files += %w( third_party/boringssl/ssl/d1_pkt.cc )
s.files += %w( third_party/boringssl/ssl/d1_srtp.cc )
s.files += %w( third_party/boringssl/ssl/dtls_method.cc )
s.files += %w( third_party/boringssl/ssl/dtls_record.cc )
s.files += %w( third_party/boringssl/ssl/handoff.cc )
s.files += %w( third_party/boringssl/ssl/handshake.cc )
s.files += %w( third_party/boringssl/ssl/handshake_client.cc )
s.files += %w( third_party/boringssl/ssl/handshake_server.cc )
s.files += %w( third_party/boringssl/ssl/internal.h )
s.files += %w( third_party/boringssl/ssl/s3_both.cc )
s.files += %w( third_party/boringssl/ssl/s3_lib.cc )
s.files += %w( third_party/boringssl/ssl/s3_pkt.cc )
s.files += %w( third_party/boringssl/ssl/ssl_aead_ctx.cc )
s.files += %w( third_party/boringssl/ssl/ssl_asn1.cc )
s.files += %w( third_party/boringssl/ssl/ssl_buffer.cc )
s.files += %w( third_party/boringssl/ssl/ssl_cert.cc )
s.files += %w( third_party/boringssl/ssl/ssl_cipher.cc )
s.files += %w( third_party/boringssl/ssl/ssl_file.cc )
s.files += %w( third_party/boringssl/ssl/ssl_key_share.cc )
s.files += %w( third_party/boringssl/ssl/ssl_lib.cc )
s.files += %w( third_party/boringssl/ssl/ssl_privkey.cc )
s.files += %w( third_party/boringssl/ssl/ssl_session.cc )
s.files += %w( third_party/boringssl/ssl/ssl_stat.cc )
s.files += %w( third_party/boringssl/ssl/ssl_transcript.cc )
s.files += %w( third_party/boringssl/ssl/ssl_versions.cc )
s.files += %w( third_party/boringssl/ssl/ssl_x509.cc )
s.files += %w( third_party/boringssl/ssl/t1_enc.cc )
s.files += %w( third_party/boringssl/ssl/t1_lib.cc )
s.files += %w( third_party/boringssl/ssl/tls13_both.cc )
s.files += %w( third_party/boringssl/ssl/tls13_client.cc )
s.files += %w( third_party/boringssl/ssl/tls13_enc.cc )
s.files += %w( third_party/boringssl/ssl/tls13_server.cc )
s.files += %w( third_party/boringssl/ssl/tls_method.cc )
s.files += %w( third_party/boringssl/ssl/tls_record.cc )
s.files += %w( third_party/boringssl/third_party/fiat/curve25519.c )
s.files += %w( third_party/boringssl/third_party/fiat/curve25519_32.h )
s.files += %w( third_party/boringssl/third_party/fiat/curve25519_64.h )
s.files += %w( third_party/boringssl/third_party/fiat/curve25519_tables.h )
s.files += %w( third_party/boringssl/third_party/fiat/internal.h )
s.files += %w( third_party/boringssl/third_party/fiat/p256.c )
s.files += %w( third_party/boringssl/third_party/fiat/p256_32.h )
s.files += %w( third_party/boringssl/third_party/fiat/p256_64.h )
s.files += %w( third_party/cares/ares_build.h )
s.files += %w( third_party/cares/cares/ares.h )
s.files += %w( third_party/cares/cares/ares__close_sockets.c )

@ -319,7 +319,9 @@
'src/core/lib/iomgr/wakeup_fd_posix.cc',
'src/core/lib/json/json.cc',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_reader_new.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/json/json_writer_new.cc',
'src/core/lib/slice/b64.cc',
'src/core/lib/slice/percent_encoding.cc',
'src/core/lib/slice/slice.cc',
@ -617,7 +619,9 @@
'src/core/lib/iomgr/wakeup_fd_posix.cc',
'src/core/lib/json/json.cc',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_reader_new.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/json/json_writer_new.cc',
'src/core/lib/slice/b64.cc',
'src/core/lib/slice/percent_encoding.cc',
'src/core/lib/slice/slice.cc',
@ -1040,7 +1044,9 @@
'src/core/lib/iomgr/wakeup_fd_posix.cc',
'src/core/lib/json/json.cc',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_reader_new.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/json/json_writer_new.cc',
'src/core/lib/slice/b64.cc',
'src/core/lib/slice/percent_encoding.cc',
'src/core/lib/slice/slice.cc',
@ -1303,7 +1309,9 @@
'src/core/lib/iomgr/wakeup_fd_posix.cc',
'src/core/lib/json/json.cc',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_reader_new.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/json/json_writer_new.cc',
'src/core/lib/slice/b64.cc',
'src/core/lib/slice/percent_encoding.cc',
'src/core/lib/slice/slice.cc',
@ -1542,7 +1550,9 @@
'src/core/lib/iomgr/wakeup_fd_posix.cc',
'src/core/lib/json/json.cc',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_reader_new.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/json/json_writer_new.cc',
'src/core/lib/slice/b64.cc',
'src/core/lib/slice/percent_encoding.cc',
'src/core/lib/slice/slice.cc',
@ -2218,270 +2228,270 @@
'dependencies': [
],
'sources': [
'third_party/boringssl-with-bazel/err_data.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c',
'third_party/boringssl-with-bazel/src/crypto/base64/base64.c',
'third_party/boringssl-with-bazel/src/crypto/bio/bio.c',
'third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c',
'third_party/boringssl-with-bazel/src/crypto/bio/connect.c',
'third_party/boringssl-with-bazel/src/crypto/bio/fd.c',
'third_party/boringssl-with-bazel/src/crypto/bio/file.c',
'third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c',
'third_party/boringssl-with-bazel/src/crypto/bio/pair.c',
'third_party/boringssl-with-bazel/src/crypto/bio/printf.c',
'third_party/boringssl-with-bazel/src/crypto/bio/socket.c',
'third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c',
'third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c',
'third_party/boringssl-with-bazel/src/crypto/buf/buf.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c',
'third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c',
'third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c',
'third_party/boringssl-with-bazel/src/crypto/conf/conf.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-arm.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-intel.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c',
'third_party/boringssl-with-bazel/src/crypto/crypto.c',
'third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c',
'third_party/boringssl-with-bazel/src/crypto/dh/check.c',
'third_party/boringssl-with-bazel/src/crypto/dh/dh.c',
'third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/dh/params.c',
'third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c',
'third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c',
'third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c',
'third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c',
'third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/engine/engine.c',
'third_party/boringssl-with-bazel/src/crypto/err/err.c',
'third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c',
'third_party/boringssl-with-bazel/src/crypto/evp/evp.c',
'third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c',
'third_party/boringssl-with-bazel/src/crypto/evp/print.c',
'third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c',
'third_party/boringssl-with-bazel/src/crypto/evp/sign.c',
'third_party/boringssl-with-bazel/src/crypto/ex_data.c',
'third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c',
'third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c',
'third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c',
'third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c',
'third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c',
'third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c',
'third_party/boringssl-with-bazel/src/crypto/mem.c',
'third_party/boringssl-with-bazel/src/crypto/obj/obj.c',
'third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c',
'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c',
'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c',
'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c',
'third_party/boringssl-with-bazel/src/crypto/pool/pool.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c',
'third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c',
'third_party/boringssl-with-bazel/src/crypto/refcount_c11.c',
'third_party/boringssl-with-bazel/src/crypto/refcount_lock.c',
'third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c',
'third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c',
'third_party/boringssl-with-bazel/src/crypto/stack/stack.c',
'third_party/boringssl-with-bazel/src/crypto/thread.c',
'third_party/boringssl-with-bazel/src/crypto/thread_none.c',
'third_party/boringssl-with-bazel/src/crypto/thread_pthread.c',
'third_party/boringssl-with-bazel/src/crypto/thread_win.c',
'third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c',
'third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c',
'third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c',
'third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c',
'third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c',
'third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c',
'third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c',
'third_party/boringssl-with-bazel/src/crypto/x509/by_file.c',
'third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c',
'third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c',
'third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c',
'third_party/boringssl-with-bazel/src/crypto/x509/t_req.c',
'third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c',
'third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509name.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_all.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_info.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_name.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_req.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_val.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c',
'third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc',
'third_party/boringssl-with-bazel/src/ssl/d1_both.cc',
'third_party/boringssl-with-bazel/src/ssl/d1_lib.cc',
'third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc',
'third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc',
'third_party/boringssl-with-bazel/src/ssl/dtls_method.cc',
'third_party/boringssl-with-bazel/src/ssl/dtls_record.cc',
'third_party/boringssl-with-bazel/src/ssl/handoff.cc',
'third_party/boringssl-with-bazel/src/ssl/handshake.cc',
'third_party/boringssl-with-bazel/src/ssl/handshake_client.cc',
'third_party/boringssl-with-bazel/src/ssl/handshake_server.cc',
'third_party/boringssl-with-bazel/src/ssl/s3_both.cc',
'third_party/boringssl-with-bazel/src/ssl/s3_lib.cc',
'third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_file.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_session.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc',
'third_party/boringssl-with-bazel/src/ssl/t1_enc.cc',
'third_party/boringssl-with-bazel/src/ssl/t1_lib.cc',
'third_party/boringssl-with-bazel/src/ssl/tls13_both.cc',
'third_party/boringssl-with-bazel/src/ssl/tls13_client.cc',
'third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc',
'third_party/boringssl-with-bazel/src/ssl/tls13_server.cc',
'third_party/boringssl-with-bazel/src/ssl/tls_method.cc',
'third_party/boringssl-with-bazel/src/ssl/tls_record.cc',
'third_party/boringssl-with-bazel/src/third_party/fiat/curve25519.c',
'src/boringssl/err_data.c',
'third_party/boringssl/crypto/asn1/a_bitstr.c',
'third_party/boringssl/crypto/asn1/a_bool.c',
'third_party/boringssl/crypto/asn1/a_d2i_fp.c',
'third_party/boringssl/crypto/asn1/a_dup.c',
'third_party/boringssl/crypto/asn1/a_enum.c',
'third_party/boringssl/crypto/asn1/a_gentm.c',
'third_party/boringssl/crypto/asn1/a_i2d_fp.c',
'third_party/boringssl/crypto/asn1/a_int.c',
'third_party/boringssl/crypto/asn1/a_mbstr.c',
'third_party/boringssl/crypto/asn1/a_object.c',
'third_party/boringssl/crypto/asn1/a_octet.c',
'third_party/boringssl/crypto/asn1/a_print.c',
'third_party/boringssl/crypto/asn1/a_strnid.c',
'third_party/boringssl/crypto/asn1/a_time.c',
'third_party/boringssl/crypto/asn1/a_type.c',
'third_party/boringssl/crypto/asn1/a_utctm.c',
'third_party/boringssl/crypto/asn1/a_utf8.c',
'third_party/boringssl/crypto/asn1/asn1_lib.c',
'third_party/boringssl/crypto/asn1/asn1_par.c',
'third_party/boringssl/crypto/asn1/asn_pack.c',
'third_party/boringssl/crypto/asn1/f_enum.c',
'third_party/boringssl/crypto/asn1/f_int.c',
'third_party/boringssl/crypto/asn1/f_string.c',
'third_party/boringssl/crypto/asn1/tasn_dec.c',
'third_party/boringssl/crypto/asn1/tasn_enc.c',
'third_party/boringssl/crypto/asn1/tasn_fre.c',
'third_party/boringssl/crypto/asn1/tasn_new.c',
'third_party/boringssl/crypto/asn1/tasn_typ.c',
'third_party/boringssl/crypto/asn1/tasn_utl.c',
'third_party/boringssl/crypto/asn1/time_support.c',
'third_party/boringssl/crypto/base64/base64.c',
'third_party/boringssl/crypto/bio/bio.c',
'third_party/boringssl/crypto/bio/bio_mem.c',
'third_party/boringssl/crypto/bio/connect.c',
'third_party/boringssl/crypto/bio/fd.c',
'third_party/boringssl/crypto/bio/file.c',
'third_party/boringssl/crypto/bio/hexdump.c',
'third_party/boringssl/crypto/bio/pair.c',
'third_party/boringssl/crypto/bio/printf.c',
'third_party/boringssl/crypto/bio/socket.c',
'third_party/boringssl/crypto/bio/socket_helper.c',
'third_party/boringssl/crypto/bn_extra/bn_asn1.c',
'third_party/boringssl/crypto/bn_extra/convert.c',
'third_party/boringssl/crypto/buf/buf.c',
'third_party/boringssl/crypto/bytestring/asn1_compat.c',
'third_party/boringssl/crypto/bytestring/ber.c',
'third_party/boringssl/crypto/bytestring/cbb.c',
'third_party/boringssl/crypto/bytestring/cbs.c',
'third_party/boringssl/crypto/bytestring/unicode.c',
'third_party/boringssl/crypto/chacha/chacha.c',
'third_party/boringssl/crypto/cipher_extra/cipher_extra.c',
'third_party/boringssl/crypto/cipher_extra/derive_key.c',
'third_party/boringssl/crypto/cipher_extra/e_aesccm.c',
'third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c',
'third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c',
'third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c',
'third_party/boringssl/crypto/cipher_extra/e_null.c',
'third_party/boringssl/crypto/cipher_extra/e_rc2.c',
'third_party/boringssl/crypto/cipher_extra/e_rc4.c',
'third_party/boringssl/crypto/cipher_extra/e_tls.c',
'third_party/boringssl/crypto/cipher_extra/tls_cbc.c',
'third_party/boringssl/crypto/cmac/cmac.c',
'third_party/boringssl/crypto/conf/conf.c',
'third_party/boringssl/crypto/cpu-aarch64-fuchsia.c',
'third_party/boringssl/crypto/cpu-aarch64-linux.c',
'third_party/boringssl/crypto/cpu-arm-linux.c',
'third_party/boringssl/crypto/cpu-arm.c',
'third_party/boringssl/crypto/cpu-intel.c',
'third_party/boringssl/crypto/cpu-ppc64le.c',
'third_party/boringssl/crypto/crypto.c',
'third_party/boringssl/crypto/curve25519/spake25519.c',
'third_party/boringssl/crypto/dh/check.c',
'third_party/boringssl/crypto/dh/dh.c',
'third_party/boringssl/crypto/dh/dh_asn1.c',
'third_party/boringssl/crypto/dh/params.c',
'third_party/boringssl/crypto/digest_extra/digest_extra.c',
'third_party/boringssl/crypto/dsa/dsa.c',
'third_party/boringssl/crypto/dsa/dsa_asn1.c',
'third_party/boringssl/crypto/ec_extra/ec_asn1.c',
'third_party/boringssl/crypto/ec_extra/ec_derive.c',
'third_party/boringssl/crypto/ecdh_extra/ecdh_extra.c',
'third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c',
'third_party/boringssl/crypto/engine/engine.c',
'third_party/boringssl/crypto/err/err.c',
'third_party/boringssl/crypto/evp/digestsign.c',
'third_party/boringssl/crypto/evp/evp.c',
'third_party/boringssl/crypto/evp/evp_asn1.c',
'third_party/boringssl/crypto/evp/evp_ctx.c',
'third_party/boringssl/crypto/evp/p_dsa_asn1.c',
'third_party/boringssl/crypto/evp/p_ec.c',
'third_party/boringssl/crypto/evp/p_ec_asn1.c',
'third_party/boringssl/crypto/evp/p_ed25519.c',
'third_party/boringssl/crypto/evp/p_ed25519_asn1.c',
'third_party/boringssl/crypto/evp/p_rsa.c',
'third_party/boringssl/crypto/evp/p_rsa_asn1.c',
'third_party/boringssl/crypto/evp/p_x25519.c',
'third_party/boringssl/crypto/evp/p_x25519_asn1.c',
'third_party/boringssl/crypto/evp/pbkdf.c',
'third_party/boringssl/crypto/evp/print.c',
'third_party/boringssl/crypto/evp/scrypt.c',
'third_party/boringssl/crypto/evp/sign.c',
'third_party/boringssl/crypto/ex_data.c',
'third_party/boringssl/crypto/fipsmodule/bcm.c',
'third_party/boringssl/crypto/fipsmodule/fips_shared_support.c',
'third_party/boringssl/crypto/fipsmodule/is_fips.c',
'third_party/boringssl/crypto/hkdf/hkdf.c',
'third_party/boringssl/crypto/hrss/hrss.c',
'third_party/boringssl/crypto/lhash/lhash.c',
'third_party/boringssl/crypto/mem.c',
'third_party/boringssl/crypto/obj/obj.c',
'third_party/boringssl/crypto/obj/obj_xref.c',
'third_party/boringssl/crypto/pem/pem_all.c',
'third_party/boringssl/crypto/pem/pem_info.c',
'third_party/boringssl/crypto/pem/pem_lib.c',
'third_party/boringssl/crypto/pem/pem_oth.c',
'third_party/boringssl/crypto/pem/pem_pk8.c',
'third_party/boringssl/crypto/pem/pem_pkey.c',
'third_party/boringssl/crypto/pem/pem_x509.c',
'third_party/boringssl/crypto/pem/pem_xaux.c',
'third_party/boringssl/crypto/pkcs7/pkcs7.c',
'third_party/boringssl/crypto/pkcs7/pkcs7_x509.c',
'third_party/boringssl/crypto/pkcs8/p5_pbev2.c',
'third_party/boringssl/crypto/pkcs8/pkcs8.c',
'third_party/boringssl/crypto/pkcs8/pkcs8_x509.c',
'third_party/boringssl/crypto/poly1305/poly1305.c',
'third_party/boringssl/crypto/poly1305/poly1305_arm.c',
'third_party/boringssl/crypto/poly1305/poly1305_vec.c',
'third_party/boringssl/crypto/pool/pool.c',
'third_party/boringssl/crypto/rand_extra/deterministic.c',
'third_party/boringssl/crypto/rand_extra/forkunsafe.c',
'third_party/boringssl/crypto/rand_extra/fuchsia.c',
'third_party/boringssl/crypto/rand_extra/rand_extra.c',
'third_party/boringssl/crypto/rand_extra/windows.c',
'third_party/boringssl/crypto/rc4/rc4.c',
'third_party/boringssl/crypto/refcount_c11.c',
'third_party/boringssl/crypto/refcount_lock.c',
'third_party/boringssl/crypto/rsa_extra/rsa_asn1.c',
'third_party/boringssl/crypto/rsa_extra/rsa_print.c',
'third_party/boringssl/crypto/siphash/siphash.c',
'third_party/boringssl/crypto/stack/stack.c',
'third_party/boringssl/crypto/thread.c',
'third_party/boringssl/crypto/thread_none.c',
'third_party/boringssl/crypto/thread_pthread.c',
'third_party/boringssl/crypto/thread_win.c',
'third_party/boringssl/crypto/x509/a_digest.c',
'third_party/boringssl/crypto/x509/a_sign.c',
'third_party/boringssl/crypto/x509/a_strex.c',
'third_party/boringssl/crypto/x509/a_verify.c',
'third_party/boringssl/crypto/x509/algorithm.c',
'third_party/boringssl/crypto/x509/asn1_gen.c',
'third_party/boringssl/crypto/x509/by_dir.c',
'third_party/boringssl/crypto/x509/by_file.c',
'third_party/boringssl/crypto/x509/i2d_pr.c',
'third_party/boringssl/crypto/x509/rsa_pss.c',
'third_party/boringssl/crypto/x509/t_crl.c',
'third_party/boringssl/crypto/x509/t_req.c',
'third_party/boringssl/crypto/x509/t_x509.c',
'third_party/boringssl/crypto/x509/t_x509a.c',
'third_party/boringssl/crypto/x509/x509.c',
'third_party/boringssl/crypto/x509/x509_att.c',
'third_party/boringssl/crypto/x509/x509_cmp.c',
'third_party/boringssl/crypto/x509/x509_d2.c',
'third_party/boringssl/crypto/x509/x509_def.c',
'third_party/boringssl/crypto/x509/x509_ext.c',
'third_party/boringssl/crypto/x509/x509_lu.c',
'third_party/boringssl/crypto/x509/x509_obj.c',
'third_party/boringssl/crypto/x509/x509_r2x.c',
'third_party/boringssl/crypto/x509/x509_req.c',
'third_party/boringssl/crypto/x509/x509_set.c',
'third_party/boringssl/crypto/x509/x509_trs.c',
'third_party/boringssl/crypto/x509/x509_txt.c',
'third_party/boringssl/crypto/x509/x509_v3.c',
'third_party/boringssl/crypto/x509/x509_vfy.c',
'third_party/boringssl/crypto/x509/x509_vpm.c',
'third_party/boringssl/crypto/x509/x509cset.c',
'third_party/boringssl/crypto/x509/x509name.c',
'third_party/boringssl/crypto/x509/x509rset.c',
'third_party/boringssl/crypto/x509/x509spki.c',
'third_party/boringssl/crypto/x509/x_algor.c',
'third_party/boringssl/crypto/x509/x_all.c',
'third_party/boringssl/crypto/x509/x_attrib.c',
'third_party/boringssl/crypto/x509/x_crl.c',
'third_party/boringssl/crypto/x509/x_exten.c',
'third_party/boringssl/crypto/x509/x_info.c',
'third_party/boringssl/crypto/x509/x_name.c',
'third_party/boringssl/crypto/x509/x_pkey.c',
'third_party/boringssl/crypto/x509/x_pubkey.c',
'third_party/boringssl/crypto/x509/x_req.c',
'third_party/boringssl/crypto/x509/x_sig.c',
'third_party/boringssl/crypto/x509/x_spki.c',
'third_party/boringssl/crypto/x509/x_val.c',
'third_party/boringssl/crypto/x509/x_x509.c',
'third_party/boringssl/crypto/x509/x_x509a.c',
'third_party/boringssl/crypto/x509v3/pcy_cache.c',
'third_party/boringssl/crypto/x509v3/pcy_data.c',
'third_party/boringssl/crypto/x509v3/pcy_lib.c',
'third_party/boringssl/crypto/x509v3/pcy_map.c',
'third_party/boringssl/crypto/x509v3/pcy_node.c',
'third_party/boringssl/crypto/x509v3/pcy_tree.c',
'third_party/boringssl/crypto/x509v3/v3_akey.c',
'third_party/boringssl/crypto/x509v3/v3_akeya.c',
'third_party/boringssl/crypto/x509v3/v3_alt.c',
'third_party/boringssl/crypto/x509v3/v3_bcons.c',
'third_party/boringssl/crypto/x509v3/v3_bitst.c',
'third_party/boringssl/crypto/x509v3/v3_conf.c',
'third_party/boringssl/crypto/x509v3/v3_cpols.c',
'third_party/boringssl/crypto/x509v3/v3_crld.c',
'third_party/boringssl/crypto/x509v3/v3_enum.c',
'third_party/boringssl/crypto/x509v3/v3_extku.c',
'third_party/boringssl/crypto/x509v3/v3_genn.c',
'third_party/boringssl/crypto/x509v3/v3_ia5.c',
'third_party/boringssl/crypto/x509v3/v3_info.c',
'third_party/boringssl/crypto/x509v3/v3_int.c',
'third_party/boringssl/crypto/x509v3/v3_lib.c',
'third_party/boringssl/crypto/x509v3/v3_ncons.c',
'third_party/boringssl/crypto/x509v3/v3_ocsp.c',
'third_party/boringssl/crypto/x509v3/v3_pci.c',
'third_party/boringssl/crypto/x509v3/v3_pcia.c',
'third_party/boringssl/crypto/x509v3/v3_pcons.c',
'third_party/boringssl/crypto/x509v3/v3_pku.c',
'third_party/boringssl/crypto/x509v3/v3_pmaps.c',
'third_party/boringssl/crypto/x509v3/v3_prn.c',
'third_party/boringssl/crypto/x509v3/v3_purp.c',
'third_party/boringssl/crypto/x509v3/v3_skey.c',
'third_party/boringssl/crypto/x509v3/v3_sxnet.c',
'third_party/boringssl/crypto/x509v3/v3_utl.c',
'third_party/boringssl/ssl/bio_ssl.cc',
'third_party/boringssl/ssl/d1_both.cc',
'third_party/boringssl/ssl/d1_lib.cc',
'third_party/boringssl/ssl/d1_pkt.cc',
'third_party/boringssl/ssl/d1_srtp.cc',
'third_party/boringssl/ssl/dtls_method.cc',
'third_party/boringssl/ssl/dtls_record.cc',
'third_party/boringssl/ssl/handoff.cc',
'third_party/boringssl/ssl/handshake.cc',
'third_party/boringssl/ssl/handshake_client.cc',
'third_party/boringssl/ssl/handshake_server.cc',
'third_party/boringssl/ssl/s3_both.cc',
'third_party/boringssl/ssl/s3_lib.cc',
'third_party/boringssl/ssl/s3_pkt.cc',
'third_party/boringssl/ssl/ssl_aead_ctx.cc',
'third_party/boringssl/ssl/ssl_asn1.cc',
'third_party/boringssl/ssl/ssl_buffer.cc',
'third_party/boringssl/ssl/ssl_cert.cc',
'third_party/boringssl/ssl/ssl_cipher.cc',
'third_party/boringssl/ssl/ssl_file.cc',
'third_party/boringssl/ssl/ssl_key_share.cc',
'third_party/boringssl/ssl/ssl_lib.cc',
'third_party/boringssl/ssl/ssl_privkey.cc',
'third_party/boringssl/ssl/ssl_session.cc',
'third_party/boringssl/ssl/ssl_stat.cc',
'third_party/boringssl/ssl/ssl_transcript.cc',
'third_party/boringssl/ssl/ssl_versions.cc',
'third_party/boringssl/ssl/ssl_x509.cc',
'third_party/boringssl/ssl/t1_enc.cc',
'third_party/boringssl/ssl/t1_lib.cc',
'third_party/boringssl/ssl/tls13_both.cc',
'third_party/boringssl/ssl/tls13_client.cc',
'third_party/boringssl/ssl/tls13_enc.cc',
'third_party/boringssl/ssl/tls13_server.cc',
'third_party/boringssl/ssl/tls_method.cc',
'third_party/boringssl/ssl/tls_record.cc',
'third_party/boringssl/third_party/fiat/curve25519.c',
],
},
{
@ -2490,10 +2500,10 @@
'dependencies': [
],
'sources': [
'third_party/boringssl-with-bazel/src/crypto/test/file_test.cc',
'third_party/boringssl-with-bazel/src/crypto/test/malloc.cc',
'third_party/boringssl-with-bazel/src/crypto/test/test_util.cc',
'third_party/boringssl-with-bazel/src/crypto/test/wycheproof_util.cc',
'third_party/boringssl/crypto/test/file_test.cc',
'third_party/boringssl/crypto/test/malloc.cc',
'third_party/boringssl/crypto/test/test_util.cc',
'third_party/boringssl/crypto/test/wycheproof_util.cc',
],
},
{

@ -360,6 +360,11 @@ typedef struct {
of that priority fail to connect. If 0, failover happens immediately. Default
value is 10 seconds. */
#define GRPC_ARG_XDS_FAILOVER_TIMEOUT_MS "grpc.xds_failover_timeout_ms"
/* Timeout in milliseconds to wait for a resource to be returned from
* the xds server before assuming that it does not exist.
* The default is 15 seconds. */
#define GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS \
"grpc.xds_resource_does_not_exist_timeout_ms"
/** If non-zero, grpc server's cronet compression workaround will be enabled */
#define GRPC_ARG_WORKAROUND_CRONET_COMPRESSION \
"grpc.workaround.cronet_compression"

@ -32,14 +32,11 @@
#ifndef GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_IMPL_H
#define GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_IMPL_H
#include <list>
#include <grpc/impl/codegen/atm.h>
#include <grpcpp/impl/codegen/completion_queue_tag.h>
#include <grpcpp/impl/codegen/core_codegen_interface.h>
#include <grpcpp/impl/codegen/grpc_library.h>
#include <grpcpp/impl/codegen/status.h>
#include <grpcpp/impl/codegen/sync.h>
#include <grpcpp/impl/codegen/time.h>
struct grpc_completion_queue;
@ -253,11 +250,6 @@ class CompletionQueue : private ::grpc::GrpcLibraryCodegen {
}
private:
// Friends for access to server registration lists that enable checking and
// logging on shutdown
friend class ::grpc_impl::ServerBuilder;
friend class ::grpc_impl::Server;
// Friend synchronous wrappers so that they can access Pluck(), which is
// a semi-private API geared towards the synchronous implementation.
template <class R>
@ -282,6 +274,7 @@ class CompletionQueue : private ::grpc::GrpcLibraryCodegen {
friend class ::grpc_impl::internal::TemplatedBidiStreamingHandler;
template <::grpc::StatusCode code>
friend class ::grpc_impl::internal::ErrorMethodHandler;
friend class ::grpc_impl::Server;
friend class ::grpc_impl::ServerContextBase;
friend class ::grpc::ServerInterface;
template <class InputMessage, class OutputMessage>
@ -386,38 +379,13 @@ class CompletionQueue : private ::grpc::GrpcLibraryCodegen {
}
}
void RegisterServer(const Server* server) {
#ifndef NDEBUG
grpc::internal::MutexLock l(&server_list_mutex_);
server_list_.push_back(server);
#endif
}
void UnregisterServer(const Server* server) {
#ifndef NDEBUG
grpc::internal::MutexLock l(&server_list_mutex_);
server_list_.remove(server);
#endif
}
bool ServerListEmpty() const {
#ifndef NDEBUG
grpc::internal::MutexLock l(&server_list_mutex_);
return server_list_.empty();
#endif
return true;
}
#ifndef NDEBUG
mutable grpc::internal::Mutex server_list_mutex_;
std::list<const Server*> server_list_ /* GUARDED_BY(server_list_mutex_) */;
#endif
grpc_completion_queue* cq_; // owned
gpr_atm avalanches_in_flight_;
};
/// A specific type of completion queue used by the processing of notifications
/// by servers. Instantiated by \a ServerBuilder or Server (for health checker).
/// by servers. Instantiated by \a ServerBuilder.
class ServerCompletionQueue : public CompletionQueue {
public:
bool IsFrequentlyPolled() { return polling_type_ != GRPC_CQ_NON_LISTENING; }

@ -49,7 +49,7 @@ Status GenericSerialize(const grpc::protobuf::MessageLite& msg, ByteBuffer* bb,
"ProtoBufferWriter must be a subclass of "
"::protobuf::io::ZeroCopyOutputStream");
*own_buffer = true;
int byte_size = msg.ByteSize();
int byte_size = msg.ByteSizeLong();
if ((size_t)byte_size <= GRPC_SLICE_INLINED_SIZE) {
Slice slice(byte_size);
// We serialize directly into the allocated slices memory

@ -20,8 +20,10 @@
#define GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_IMPL_H
#include <atomic>
#include <cassert>
#include <map>
#include <memory>
#include <type_traits>
#include <vector>
#include <grpc/impl/codegen/port_platform.h>
@ -301,9 +303,20 @@ class ServerContextBase {
///
/// WARNING: This is experimental API and could be changed or removed.
::grpc_impl::ServerUnaryReactor* DefaultReactor() {
auto reactor = &default_reactor_;
// Short-circuit the case where a default reactor was already set up by
// the TestPeer.
if (test_unary_ != nullptr) {
return reinterpret_cast<Reactor*>(&default_reactor_);
}
new (&default_reactor_) Reactor;
#ifndef NDEBUG
bool old = false;
assert(default_reactor_used_.compare_exchange_strong(
old, true, std::memory_order_relaxed));
#else
default_reactor_used_.store(true, std::memory_order_relaxed);
return reactor;
#endif
return reinterpret_cast<Reactor*>(&default_reactor_);
}
/// Constructors for use by derived classes
@ -445,7 +458,7 @@ class ServerContextBase {
public:
TestServerCallbackUnary(ServerContextBase* ctx,
std::function<void(::grpc::Status)> func)
: reactor_(&ctx->default_reactor_), func_(std::move(func)) {
: reactor_(ctx->DefaultReactor()), func_(std::move(func)) {
this->BindReactor(reactor_);
}
void Finish(::grpc::Status s) override {
@ -472,7 +485,8 @@ class ServerContextBase {
const std::function<void(::grpc::Status s)> func_;
};
Reactor default_reactor_;
typename std::aligned_storage<sizeof(Reactor), alignof(Reactor)>::type
default_reactor_;
std::atomic_bool default_reactor_used_{false};
std::unique_ptr<TestServerCallbackUnary> test_unary_;
};

@ -55,13 +55,12 @@ class TlsKeyMaterialsConfig {
}
int version() const { return version_; }
/** Setter for key materials that will be called by the user. Ownership of the
* arguments will not be transferred. **/
void set_pem_root_certs(const grpc::string& pem_root_certs);
/** Setter for key materials that will be called by the user. The setter
* transfers ownership of the arguments to the config. **/
void set_pem_root_certs(grpc::string pem_root_certs);
void add_pem_key_cert_pair(const PemKeyCertPair& pem_key_cert_pair);
void set_key_materials(
const grpc::string& pem_root_certs,
const std::vector<PemKeyCertPair>& pem_key_cert_pair_list);
void set_key_materials(grpc::string pem_root_certs,
std::vector<PemKeyCertPair> pem_key_cert_pair_list);
void set_version(int version) { version_ = version; };
private:
@ -71,36 +70,40 @@ class TlsKeyMaterialsConfig {
};
/** TLS credential reload arguments, wraps grpc_tls_credential_reload_arg. It is
* used for experimental purposes for now and it is subject to change.
* used for experimental purposes for now and it is subject to change.
*
* The credential reload arg contains all the info necessary to schedule/cancel
* a credential reload request. The callback function must be called after
* finishing the schedule operation. See the description of the
* grpc_tls_credential_reload_arg struct in grpc_security.h for more details.
* The credential reload arg contains all the info necessary to schedule/cancel
* a credential reload request. The callback function must be called after
* finishing the schedule operation. See the description of the
* grpc_tls_credential_reload_arg struct in grpc_security.h for more details.
* **/
class TlsCredentialReloadArg {
public:
/** TlsCredentialReloadArg does not take ownership of the C arg that is passed
* to the constructor. One must remember to free any memory allocated to the
* C arg after using the setter functions below. **/
* to the constructor. One must remember to free any memory allocated to the C
* arg after using the setter functions below. **/
TlsCredentialReloadArg(grpc_tls_credential_reload_arg* arg);
~TlsCredentialReloadArg();
/** Getters for member fields. **/
/** Getters for member fields. The callback function is not exposed.
* They return the corresponding fields of the underlying C arg. In the case
* of the key materials config, it creates a new instance of the C++ key
* materials config from the underlying C grpc_tls_key_materials_config. **/
void* cb_user_data() const;
bool is_pem_key_cert_pair_list_empty() const;
grpc_ssl_certificate_config_reload_status status() const;
grpc::string error_details() const;
/** Setters for member fields. Ownership of the arguments will not be
* transferred. **/
/** Setters for member fields. They modify the fields of the underlying C arg.
* The setters for the key_materials_config and the error_details allocate
* memory when modifying c_arg_, so one must remember to free c_arg_'s
* original key_materials_config or error_details after using the appropriate
* setter function.
* **/
void set_cb_user_data(void* cb_user_data);
void set_pem_root_certs(const grpc::string& pem_root_certs);
void add_pem_key_cert_pair(
const TlsKeyMaterialsConfig::PemKeyCertPair& pem_key_cert_pair);
void set_key_materials(const grpc::string& pem_root_certs,
std::vector<TlsKeyMaterialsConfig::PemKeyCertPair>
pem_key_cert_pair_list);
TlsKeyMaterialsConfig::PemKeyCertPair pem_key_cert_pair);
void set_key_materials_config(
const std::shared_ptr<TlsKeyMaterialsConfig>& key_materials_config);
void set_status(grpc_ssl_certificate_config_reload_status status);
@ -184,7 +187,8 @@ class TlsServerAuthorizationCheckArg {
TlsServerAuthorizationCheckArg(grpc_tls_server_authorization_check_arg* arg);
~TlsServerAuthorizationCheckArg();
/** Getters for member fields. **/
/** Getters for member fields. They return the corresponding fields of the
* underlying C arg.**/
void* cb_user_data() const;
int success() const;
grpc::string target_name() const;
@ -193,7 +197,12 @@ class TlsServerAuthorizationCheckArg {
grpc_status_code status() const;
grpc::string error_details() const;
/** Setters for member fields. **/
/** Setters for member fields. They modify the fields of the underlying C arg.
* The setters for target_name, peer_cert, and error_details allocate memory
* when modifying c_arg_, so one must remember to free c_arg_'s original
* target_name, peer_cert, or error_details after using the appropriate setter
* function.
* **/
void set_cb_user_data(void* cb_user_data);
void set_success(int success);
void set_target_name(const grpc::string& target_name);

@ -385,12 +385,6 @@ class Server : public grpc::ServerInterface, private grpc::GrpcLibraryCodegen {
// shutdown callback tag (invoked when the CQ is fully shutdown).
// It is protected by mu_
CompletionQueue* callback_cq_ = nullptr;
#ifndef NDEBUG
// List of CQs passed in by user that must be Shutdown only after Server is
// Shutdown.
std::vector<CompletionQueue*> cq_list_;
#endif
};
} // namespace grpc_impl

@ -29,7 +29,9 @@ namespace testing {
/// DefaultReactor. It is intended for allow unit-testing of a callback API
/// service via direct invocation of the service methods rather than through
/// RPCs. It is only applicable for unary RPC methods that use the
/// DefaultReactor rather than any user-defined reactor.
/// DefaultReactor rather than any user-defined reactor. If it is used, it must
/// be created before the RPC is invoked so that it can bind the reactor into a
/// test mode rather than letting it follow the normal paths.
class DefaultReactorTestPeer {
public:
explicit DefaultReactorTestPeer(experimental::CallbackServerContext* ctx)
@ -40,7 +42,8 @@ class DefaultReactorTestPeer {
ctx->SetupTestDefaultReactor(std::move(finish_func));
}
::grpc::experimental::ServerUnaryReactor* reactor() const {
return &ctx_->default_reactor_;
return reinterpret_cast<experimental::ServerUnaryReactor*>(
&ctx_->default_reactor_);
}
bool test_status_set() const { return ctx_->test_status_set(); }
Status test_status() const { return ctx_->test_status(); }

@ -82,6 +82,7 @@
<file baseinstalldir="/" name="include/grpc/support/thd_id.h" role="src" />
<file baseinstalldir="/" name="include/grpc/support/time.h" role="src" />
<file baseinstalldir="/" name="include/grpc/support/workaround_list.h" role="src" />
<file baseinstalldir="/" name="src/boringssl/err_data.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/census/grpc_context.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/backend_metric.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/backend_metric.h" role="src" />
@ -658,7 +659,9 @@
<file baseinstalldir="/" name="src/core/lib/json/json.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/json/json.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/json/json_reader.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/json/json_reader_new.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/json/json_writer.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/json/json_writer_new.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/profiling/basic_timers.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/profiling/stap_timers.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/profiling/timers.h" role="src" />
@ -1000,462 +1003,459 @@
<file baseinstalldir="/" name="third_party/address_sorting/address_sorting_posix.c" role="src" />
<file baseinstalldir="/" name="third_party/address_sorting/address_sorting_windows.c" role="src" />
<file baseinstalldir="/" name="third_party/address_sorting/include/address_sorting/address_sorting.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/err_data.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/base64/base64.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/bio.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/connect.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/fd.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/file.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/pair.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/printf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/socket.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/buf/buf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/chacha/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/conf/conf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/conf/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cpu-arm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cpu-intel.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/crypto.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/dh/check.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/dh/dh.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/dh/params.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/engine/engine.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/err/err.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/err/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/evp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/print.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/evp/sign.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/ex_data.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/x86_64-gcc.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/hrss/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/mem.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/obj/obj.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pool/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/pool/pool.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/refcount_c11.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/refcount_lock.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/stack/stack.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/thread.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/thread_none.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/thread_pthread.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/thread_win.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/by_file.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/charmap.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/t_req.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509name.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_all.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_info.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_name.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_req.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_val.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/aead.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/aes.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/asn1.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/asn1t.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/base.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/base64.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/bio.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/blowfish.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/bn.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/buf.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/buffer.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/bytestring.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/cast.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/chacha.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/cipher.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/cmac.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/conf.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/cpu.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/crypto.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/curve25519.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/des.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/dh.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/digest.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/dsa.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/dtls1.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/e_os2.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ec.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ec_key.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ecdh.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/engine.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/err.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/evp.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ex_data.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/hkdf.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/hmac.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/hrss.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/lhash.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/md4.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/md5.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/mem.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/nid.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/obj.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/objects.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/opensslv.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/pem.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/poly1305.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/pool.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/rand.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/rc4.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ripemd.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/rsa.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/safestack.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/sha.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/siphash.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/span.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/srtp.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ssl.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/ssl3.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/stack.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/thread.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/tls1.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/type_check.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/x509.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/include/openssl/x509v3.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/d1_both.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/d1_lib.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/dtls_method.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/dtls_record.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/handoff.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/handshake.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/handshake_client.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/handshake_server.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/s3_both.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/s3_lib.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_file.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_session.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/t1_enc.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/t1_lib.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/tls13_both.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/tls13_client.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/tls13_server.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/tls_method.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/ssl/tls_record.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/curve25519.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_tables.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/p256.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_bitstr.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_bool.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_d2i_fp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_dup.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_enum.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_gentm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_i2d_fp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_int.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_mbstr.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_object.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_octet.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_print.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_strnid.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_time.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_type.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_utctm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_utf8.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/asn1_lib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/asn1_locl.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/asn1_par.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/asn_pack.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/f_enum.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/f_int.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/f_string.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_dec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_enc.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_fre.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_new.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_typ.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_utl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/time_support.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/base64/base64.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/bio.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/bio_mem.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/connect.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/fd.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/file.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/hexdump.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/pair.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/printf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/socket.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bio/socket_helper.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bn_extra/bn_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bn_extra/convert.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/buf/buf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/asn1_compat.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/ber.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/cbb.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/cbs.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/unicode.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/chacha/chacha.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/chacha/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/cipher_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/derive_key.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/e_aesccm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/e_null.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/e_rc2.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/e_rc4.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/e_tls.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cipher_extra/tls_cbc.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cmac/cmac.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/conf/conf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/conf/conf_def.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/conf/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-aarch64-fuchsia.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-aarch64-linux.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-arm-linux.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-arm-linux.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-arm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-intel.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-ppc64le.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/crypto.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/curve25519/spake25519.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/dh/check.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/dh/dh.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/dh/dh_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/dh/params.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/digest_extra/digest_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/dsa/dsa.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/dsa/dsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/ec_extra/ec_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/ec_extra/ec_derive.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/ecdh_extra/ecdh_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/engine/engine.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/err/err.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/err/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/digestsign.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/evp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/evp_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/evp_ctx.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_dsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_ec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_ec_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_ed25519.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_ed25519_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_rsa.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_rsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_x25519.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_x25519_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/pbkdf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/print.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/scrypt.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/evp/sign.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/ex_data.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/aes/aes.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/aes/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bcm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/add.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/bn.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/bytes.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/cmp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/ctx.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/div.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/div_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/gcd.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/generic.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/jacobi.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/montgomery.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/mul.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/prime.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/random.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/shift.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/bn/sqrt.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/cipher/aead.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/cipher/cipher.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/cipher/e_des.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/cipher/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/delocate.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/des/des.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/des/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/digest/digest.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/digest/digests.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/digest/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/digest/md32_common.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/ec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/ec_key.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/felem.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/oct.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/p224-64.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/scalar.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/simple.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/util.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ec/wnaf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/fips_shared_support.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/hmac/hmac.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/is_fips.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/md4/md4.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/md5/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/md5/md5.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/modes/cbc.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/modes/cfb.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/modes/ctr.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/modes/gcm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/modes/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/modes/ofb.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/modes/polyval.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rand/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rand/rand.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rand/urandom.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rsa/blinding.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rsa/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rsa/padding.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rsa/rsa.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/self_check/self_check.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/sha/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/sha/sha1-altivec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/sha/sha1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/sha/sha256.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/sha/sha512.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/tls/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/fipsmodule/tls/kdf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/hkdf/hkdf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/hrss/hrss.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/hrss/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/lhash/lhash.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/mem.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/obj/obj.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/obj/obj_dat.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/obj/obj_xref.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_all.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_info.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_lib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_oth.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_pk8.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_pkey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_xaux.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs7/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs7/pkcs7.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs7/pkcs7_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/p5_pbev2.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/pkcs8.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/pkcs8_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/poly1305/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/poly1305/poly1305.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/poly1305/poly1305_arm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/poly1305/poly1305_vec.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pool/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/pool/pool.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/rand_extra/deterministic.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/rand_extra/forkunsafe.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/rand_extra/fuchsia.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/rand_extra/rand_extra.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/rand_extra/windows.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/rc4/rc4.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/refcount_c11.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/refcount_lock.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/rsa_extra/rsa_asn1.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/rsa_extra/rsa_print.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/siphash/siphash.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/stack/stack.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/thread.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/thread_none.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/thread_pthread.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/thread_win.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/a_digest.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/a_sign.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/a_strex.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/a_verify.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/algorithm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/asn1_gen.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/by_dir.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/by_file.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/charmap.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/i2d_pr.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/rsa_pss.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/t_crl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/t_req.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/t_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/t_x509a.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/vpm_int.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_att.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_cmp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_d2.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_def.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_ext.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_lu.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_obj.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_r2x.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_req.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_set.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_trs.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_txt.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_v3.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_vfy.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_vpm.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509cset.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509name.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509rset.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509spki.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_algor.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_all.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_attrib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_crl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_exten.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_info.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_name.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_pkey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_pubkey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_req.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_sig.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_spki.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_val.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_x509.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_x509a.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/ext_dat.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_cache.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_data.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_int.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_lib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_map.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_node.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_tree.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_akey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_akeya.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_alt.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_bcons.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_bitst.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_conf.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_cpols.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_crld.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_enum.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_extku.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_genn.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_ia5.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_info.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_int.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_lib.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_ncons.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_ocsp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pci.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pcia.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pcons.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pku.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pmaps.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_prn.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_purp.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_skey.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_sxnet.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_utl.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/aead.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/aes.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/arm_arch.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/asn1.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/asn1_mac.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/asn1t.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/base.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/base64.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/bio.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/blowfish.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/bn.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/buf.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/buffer.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/bytestring.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/cast.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/chacha.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/cipher.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/cmac.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/conf.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/cpu.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/crypto.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/curve25519.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/des.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/dh.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/digest.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/dsa.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/dtls1.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/e_os2.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ec.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ec_key.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ecdh.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ecdsa.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/engine.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/err.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/evp.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ex_data.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/hkdf.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/hmac.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/hrss.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/is_boringssl.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/lhash.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/md4.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/md5.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/mem.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/nid.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/obj.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/obj_mac.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/objects.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/opensslconf.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/opensslv.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ossl_typ.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/pem.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/pkcs12.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/pkcs7.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/pkcs8.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/poly1305.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/pool.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/rand.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/rc4.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ripemd.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/rsa.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/safestack.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/sha.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/siphash.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/span.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/srtp.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ssl.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/ssl3.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/stack.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/thread.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/tls1.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/type_check.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/x509.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/x509_vfy.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/include/openssl/x509v3.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/bio_ssl.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/d1_both.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/d1_lib.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/d1_pkt.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/d1_srtp.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/dtls_method.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/dtls_record.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/handoff.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/handshake.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/handshake_client.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/handshake_server.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/s3_both.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/s3_lib.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/s3_pkt.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_aead_ctx.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_asn1.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_buffer.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_cert.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_cipher.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_file.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_key_share.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_lib.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_privkey.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_session.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_stat.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_transcript.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_versions.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_x509.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/t1_enc.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/t1_lib.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/tls13_both.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/tls13_client.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/tls13_enc.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/tls13_server.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/tls_method.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/ssl/tls_record.cc" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/third_party/fiat/curve25519.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/third_party/fiat/curve25519_32.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/third_party/fiat/curve25519_64.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/third_party/fiat/curve25519_tables.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/third_party/fiat/internal.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/third_party/fiat/p256.c" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/third_party/fiat/p256_32.h" role="src" />
<file baseinstalldir="/" name="third_party/boringssl/third_party/fiat/p256_64.h" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/decode.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/decode.h" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/encode.c" role="src" />

@ -51,7 +51,7 @@ if 'linux' in sys.platform:
CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_linux'),)
if 'openbsd' in sys.platform:
CARES_INCLUDE += (os.path.join('third_party', 'cares', 'config_openbsd'),)
SSL_INCLUDE = (os.path.join('third_party', 'boringssl-with-bazel', 'src', 'include'),)
SSL_INCLUDE = (os.path.join('third_party', 'boringssl', 'include'),)
UPB_INCLUDE = (os.path.join('third_party', 'upb'),)
UPB_GRPC_GENERATED_INCLUDE = (os.path.join('src', 'core', 'ext', 'upb-generated'),)
ZLIB_INCLUDE = (os.path.join('third_party', 'zlib'),)

@ -976,6 +976,7 @@
- cmake_target: absl::random_distributions
deps:
- absl/base:base_internal
- absl/base:config
- absl/base:core_headers
- absl/meta:type_traits
- absl/random/internal:distributions
@ -1044,14 +1045,17 @@
- absl/base:config
- absl/base:core_headers
- absl/base:endian
- absl/base:raw_logging_internal
- absl/meta:type_traits
headers:
- third_party/abseil-cpp/absl/strings/internal/char_map.h
- third_party/abseil-cpp/absl/strings/internal/escaping.h
- third_party/abseil-cpp/absl/strings/internal/ostringstream.h
- third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h
- third_party/abseil-cpp/absl/strings/internal/utf8.h
name: absl/strings:internal
src:
- third_party/abseil-cpp/absl/strings/internal/escaping.cc
- third_party/abseil-cpp/absl/strings/internal/ostringstream.cc
- third_party/abseil-cpp/absl/strings/internal/utf8.cc
- cmake_target: absl::str_format
@ -1104,7 +1108,6 @@
- third_party/abseil-cpp/absl/strings/escaping.h
- third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h
- third_party/abseil-cpp/absl/strings/internal/charconv_parse.h
- third_party/abseil-cpp/absl/strings/internal/escaping.h
- third_party/abseil-cpp/absl/strings/internal/memutil.h
- third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h
- third_party/abseil-cpp/absl/strings/internal/str_join_internal.h
@ -1125,7 +1128,6 @@
- third_party/abseil-cpp/absl/strings/escaping.cc
- third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc
- third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc
- third_party/abseil-cpp/absl/strings/internal/escaping.cc
- third_party/abseil-cpp/absl/strings/internal/memutil.cc
- third_party/abseil-cpp/absl/strings/match.cc
- third_party/abseil-cpp/absl/strings/numbers.cc

File diff suppressed because one or more lines are too long

@ -22,8 +22,7 @@ import yaml
sys.dont_write_bytecode = True
boring_ssl_root = os.path.abspath(
os.path.join(os.path.dirname(sys.argv[0]),
'../../third_party/boringssl-with-bazel/src'))
os.path.join(os.path.dirname(sys.argv[0]), '../../third_party/boringssl'))
sys.path.append(os.path.join(boring_ssl_root, 'util'))
try:
@ -34,13 +33,15 @@ except ImportError:
def map_dir(filename):
return 'third_party/boringssl-with-bazel/' + filename
if filename[0:4] == 'src/':
return 'third_party/boringssl/' + filename[4:]
else:
return 'src/boringssl/' + filename
# TODO(jtattermusch): is this used at all?
def map_testarg(arg):
if '/' in arg:
return 'third_party/boringssl-with-bazel/src' + arg
return 'third_party/boringssl/' + arg
else:
return arg

@ -68,6 +68,7 @@ class XdsResolver : public Resolver {
void XdsResolver::ServiceConfigWatcher::OnServiceConfigChanged(
RefCountedPtr<ServiceConfig> service_config) {
if (resolver_->xds_client_ == nullptr) return;
grpc_arg xds_client_arg = resolver_->xds_client_->MakeChannelArg();
Result result;
result.args =
@ -77,6 +78,7 @@ void XdsResolver::ServiceConfigWatcher::OnServiceConfigChanged(
}
void XdsResolver::ServiceConfigWatcher::OnError(grpc_error* error) {
if (resolver_->xds_client_ == nullptr) return;
grpc_arg xds_client_arg = resolver_->xds_client_->MakeChannelArg();
Result result;
result.args =

@ -1119,10 +1119,12 @@ void LocalityStatsPopulate(
} // namespace
grpc_slice XdsLrsRequestCreateAndEncode(
std::map<StringView, std::set<XdsClientStats*>> client_stats_map) {
std::map<StringView, std::set<XdsClientStats*>, StringLess>
client_stats_map) {
upb::Arena arena;
// Get the snapshots.
std::map<StringView, grpc_core::InlinedVector<XdsClientStats::Snapshot, 1>>
std::map<StringView, grpc_core::InlinedVector<XdsClientStats::Snapshot, 1>,
StringLess>
snapshot_map;
for (auto& p : client_stats_map) {
const StringView& cluster_name = p.first;

@ -41,19 +41,6 @@ constexpr char kCdsTypeUrl[] = "type.googleapis.com/envoy.api.v2.Cluster";
constexpr char kEdsTypeUrl[] =
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
// The version state for each specific ADS resource type.
struct VersionState {
// The version of the latest response that is accepted and used.
std::string version_info;
// The nonce of the latest response.
std::string nonce;
// The error message to be included in a NACK with the nonce. Consumed when a
// nonce is NACK'ed for the first time.
grpc_error* error = GRPC_ERROR_NONE;
~VersionState() { GRPC_ERROR_UNREF(error); }
};
struct RdsUpdate {
// The name to use in the CDS request.
std::string cluster_name;
@ -246,7 +233,7 @@ grpc_slice XdsLrsRequestCreateAndEncode(const std::string& server_name,
// Creates an LRS request sending client-side load reports. If all the counters
// are zero, returns empty slice.
grpc_slice XdsLrsRequestCreateAndEncode(
std::map<StringView /*cluster_name*/, std::set<XdsClientStats*>>
std::map<StringView /*cluster_name*/, std::set<XdsClientStats*>, StringLess>
client_stats_map);
// Parses the LRS response and returns \a

@ -125,31 +125,122 @@ class XdsClient::ChannelState::AdsCallState
XdsClient* xds_client() const { return chand()->xds_client(); }
bool seen_response() const { return seen_response_; }
// If \a type_url is an unsupported type, \a nonce_for_unsupported_type and
// \a error_for_unsupported_type will be used in the request; otherwise, the
// nonce and error stored in each ADS call state will be used. Takes ownership
// of \a error_for_unsupported_type.
void SendMessageLocked(const std::string& type_url,
const std::string& nonce_for_unsupported_type,
grpc_error* error_for_unsupported_type,
bool is_first_message);
void Subscribe(const std::string& type_url, const std::string& name);
void Unsubscribe(const std::string& type_url, const std::string& name);
bool HasSubscribedResources() const;
private:
struct BufferedRequest {
std::string nonce;
grpc_error* error;
class ResourceState : public InternallyRefCounted<ResourceState> {
public:
ResourceState(const std::string& type_url, const std::string& name)
: type_url_(type_url), name_(name) {
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
grpc_schedule_on_exec_ctx);
}
void Orphan() override {
Finish();
Unref();
}
void Start(RefCountedPtr<AdsCallState> ads_calld) {
if (sent_) return;
sent_ = true;
ads_calld_ = std::move(ads_calld);
Ref().release();
timer_pending_ = true;
grpc_timer_init(
&timer_,
ExecCtx::Get()->Now() + ads_calld_->xds_client()->request_timeout_,
&timer_callback_);
}
void Finish() {
if (timer_pending_) {
grpc_timer_cancel(&timer_);
timer_pending_ = false;
}
}
// Takes ownership of \a error.
BufferedRequest(std::string nonce, grpc_error* error)
: nonce(std::move(nonce)), error(error) {}
private:
static void OnTimer(void* arg, grpc_error* error) {
ResourceState* self = static_cast<ResourceState*>(arg);
self->ads_calld_->xds_client()->combiner_->Run(
GRPC_CLOSURE_INIT(&self->timer_callback_, OnTimerLocked, self,
nullptr),
GRPC_ERROR_REF(error));
}
~BufferedRequest() { GRPC_ERROR_UNREF(error); }
static void OnTimerLocked(void* arg, grpc_error* error) {
ResourceState* self = static_cast<ResourceState*>(arg);
if (error == GRPC_ERROR_NONE && self->timer_pending_) {
self->timer_pending_ = false;
char* msg;
gpr_asprintf(
&msg,
"timeout obtaining resource {type=%s name=%s} from xds server",
self->type_url_.c_str(), self->name_.c_str());
grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
gpr_free(msg);
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
gpr_log(GPR_INFO, "[xds_client %p] %s",
self->ads_calld_->xds_client(), grpc_error_string(error));
}
if (self->type_url_ == kLdsTypeUrl || self->type_url_ == kRdsTypeUrl) {
self->ads_calld_->xds_client()->service_config_watcher_->OnError(
error);
} else if (self->type_url_ == kCdsTypeUrl) {
ClusterState& state =
self->ads_calld_->xds_client()->cluster_map_[self->name_];
for (const auto& p : state.watchers) {
p.first->OnError(GRPC_ERROR_REF(error));
}
GRPC_ERROR_UNREF(error);
} else if (self->type_url_ == kEdsTypeUrl) {
EndpointState& state =
self->ads_calld_->xds_client()->endpoint_map_[self->name_];
for (const auto& p : state.watchers) {
p.first->OnError(GRPC_ERROR_REF(error));
}
GRPC_ERROR_UNREF(error);
} else {
GPR_UNREACHABLE_CODE(return );
}
}
self->ads_calld_.reset();
self->Unref();
}
const std::string type_url_;
const std::string name_;
RefCountedPtr<AdsCallState> ads_calld_;
bool sent_ = false;
bool timer_pending_ = false;
grpc_timer timer_;
grpc_closure timer_callback_;
};
void AcceptLdsUpdate(LdsUpdate lds_update, std::string new_version);
void AcceptRdsUpdate(RdsUpdate rds_update, std::string new_version);
void AcceptCdsUpdate(CdsUpdateMap cds_update_map, std::string new_version);
void AcceptEdsUpdate(EdsUpdateMap eds_update_map, std::string new_version);
struct ResourceTypeState {
~ResourceTypeState() { GRPC_ERROR_UNREF(error); }
// Version, nonce, and error for this resource type.
std::string version;
std::string nonce;
grpc_error* error = GRPC_ERROR_NONE;
// Subscribed resources of this type.
std::map<std::string /* name */, OrphanablePtr<ResourceState>>
subscribed_resources;
};
void SendMessageLocked(const std::string& type_url);
void AcceptLdsUpdate(LdsUpdate lds_update);
void AcceptRdsUpdate(RdsUpdate rds_update);
void AcceptCdsUpdate(CdsUpdateMap cds_update_map);
void AcceptEdsUpdate(EdsUpdateMap eds_update_map);
static void OnRequestSent(void* arg, grpc_error* error);
static void OnRequestSentLocked(void* arg, grpc_error* error);
@ -160,8 +251,13 @@ class XdsClient::ChannelState::AdsCallState
bool IsCurrentCallOnChannel() const;
std::set<StringView> ClusterNamesForRequest();
std::set<StringView> EdsServiceNamesForRequest();
// The owning RetryableCall<>.
RefCountedPtr<RetryableCall<AdsCallState>> parent_;
bool sent_initial_message_ = false;
bool seen_response_ = false;
// Always non-NULL.
@ -184,15 +280,11 @@ class XdsClient::ChannelState::AdsCallState
grpc_slice status_details_;
grpc_closure on_status_received_;
// Version state.
VersionState lds_version_;
VersionState rds_version_;
VersionState cds_version_;
VersionState eds_version_;
// Resource types for which requests need to be sent.
std::set<std::string /*type_url*/> buffered_requests_;
// Buffered requests.
std::map<std::string /*type_url*/, std::unique_ptr<BufferedRequest>>
buffered_request_map_;
// State for each resource type.
std::map<std::string /*type_url*/, ResourceTypeState> state_map_;
};
// Contains an LRS call to the xds server.
@ -445,31 +537,30 @@ void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
}
void XdsClient::ChannelState::OnResourceNamesChanged(
const std::string& type_url) {
void XdsClient::ChannelState::Subscribe(const std::string& type_url,
const std::string& name) {
if (ads_calld_ == nullptr) {
// Start the ADS call if this is the first request.
ads_calld_.reset(new RetryableCall<AdsCallState>(
Ref(DEBUG_LOCATION, "ChannelState+ads")));
// Note: AdsCallState's ctor will automatically send necessary messages, so
// we can return here.
// Note: AdsCallState's ctor will automatically subscribe to all
// resources that the XdsClient already has watchers for, so we can
// return here.
return;
}
// If the ADS call is in backoff state, we don't need to do anything now
// because when the call is restarted it will resend all necessary requests.
if (ads_calld() == nullptr) return;
// Send the message if the ADS call is active.
ads_calld()->SendMessageLocked(type_url, "", nullptr, false);
// Subscribe to this resource if the ADS call is active.
ads_calld()->Subscribe(type_url, name);
}
void XdsClient::ChannelState::OnWatcherRemoved() {
// Keep the ADS call if there are watcher(s).
for (const auto& p : xds_client()->cluster_map_) {
const ClusterState& cluster_state = p.second;
if (!cluster_state.watchers.empty()) return;
void XdsClient::ChannelState::Unsubscribe(const std::string& type_url,
const std::string& name) {
if (ads_calld_ != nullptr) {
ads_calld_->calld()->Unsubscribe(type_url, name);
if (!ads_calld_->calld()->HasSubscribedResources()) ads_calld_.reset();
}
if (!xds_client()->endpoint_map_.empty()) return;
ads_calld_.reset();
}
//
@ -620,22 +711,14 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
// Op: send request message.
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
grpc_schedule_on_exec_ctx);
bool initial_message = true;
if (xds_client()->service_config_watcher_ != nullptr) {
if (xds_client()->route_config_name_.empty()) {
SendMessageLocked(kLdsTypeUrl, "", nullptr, initial_message);
initial_message = false;
} else if (xds_client()->cluster_name_.empty()) {
SendMessageLocked(kRdsTypeUrl, "", nullptr, initial_message);
initial_message = false;
}
Subscribe(kLdsTypeUrl, xds_client()->server_name_);
}
if (!xds_client()->cluster_map_.empty()) {
SendMessageLocked(kCdsTypeUrl, "", nullptr, initial_message);
initial_message = false;
for (const auto& p : xds_client()->cluster_map_) {
Subscribe(kCdsTypeUrl, std::string(p.first));
}
if (!xds_client()->endpoint_map_.empty()) {
SendMessageLocked(kEdsTypeUrl, "", nullptr, initial_message);
for (const auto& p : xds_client()->endpoint_map_) {
Subscribe(kEdsTypeUrl, std::string(p.first));
}
// Op: recv initial metadata.
op = ops;
@ -693,51 +776,49 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
// we are here because xds_client has to orphan a failed call, then the
// following cancellation will be a no-op.
grpc_call_cancel(call_, nullptr);
state_map_.clear();
// Note that the initial ref is hold by on_status_received_. So the
// corresponding unref happens in on_status_received_ instead of here.
}
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
const std::string& type_url, const std::string& nonce_for_unsupported_type,
grpc_error* error_for_unsupported_type, bool is_first_message) {
const std::string& type_url) {
// Buffer message sending if an existing message is in flight.
if (send_message_payload_ != nullptr) {
buffered_request_map_[type_url].reset(new BufferedRequest(
nonce_for_unsupported_type, error_for_unsupported_type));
buffered_requests_.insert(type_url);
return;
}
grpc_slice request_payload_slice;
auto& state = state_map_[type_url];
grpc_error* error = state.error;
state.error = GRPC_ERROR_NONE;
const XdsBootstrap::Node* node =
is_first_message ? xds_client()->bootstrap_->node() : nullptr;
sent_initial_message_ ? nullptr : xds_client()->bootstrap_->node();
const char* build_version =
is_first_message ? xds_client()->build_version_.get() : nullptr;
sent_initial_message_ ? nullptr : xds_client()->build_version_.get();
sent_initial_message_ = true;
grpc_slice request_payload_slice;
if (type_url == kLdsTypeUrl) {
request_payload_slice = XdsLdsRequestCreateAndEncode(
xds_client()->server_name_, node, build_version,
lds_version_.version_info, lds_version_.nonce, lds_version_.error);
lds_version_.error = GRPC_ERROR_NONE;
GRPC_ERROR_UNREF(error_for_unsupported_type);
xds_client()->server_name_, node, build_version, state.version,
state.nonce, error);
state.subscribed_resources[xds_client()->server_name_]->Start(Ref());
} else if (type_url == kRdsTypeUrl) {
request_payload_slice = XdsRdsRequestCreateAndEncode(
xds_client()->route_config_name_, node, build_version,
rds_version_.version_info, rds_version_.nonce, rds_version_.error);
rds_version_.error = GRPC_ERROR_NONE;
GRPC_ERROR_UNREF(error_for_unsupported_type);
xds_client()->route_config_name_, node, build_version, state.version,
state.nonce, error);
state.subscribed_resources[xds_client()->route_config_name_]->Start(Ref());
} else if (type_url == kCdsTypeUrl) {
request_payload_slice = XdsCdsRequestCreateAndEncode(
xds_client()->WatchedClusterNames(), node, build_version,
cds_version_.version_info, cds_version_.nonce, cds_version_.error);
cds_version_.error = GRPC_ERROR_NONE;
GRPC_ERROR_UNREF(error_for_unsupported_type);
ClusterNamesForRequest(), node, build_version, state.version,
state.nonce, error);
} else if (type_url == kEdsTypeUrl) {
request_payload_slice = XdsEdsRequestCreateAndEncode(
xds_client()->EdsServiceNames(), node, build_version,
eds_version_.version_info, eds_version_.nonce, eds_version_.error);
eds_version_.error = GRPC_ERROR_NONE;
GRPC_ERROR_UNREF(error_for_unsupported_type);
EdsServiceNamesForRequest(), node, build_version, state.version,
state.nonce, error);
} else {
request_payload_slice = XdsUnsupportedTypeNackRequestCreateAndEncode(
type_url, nonce_for_unsupported_type, error_for_unsupported_type);
type_url, state.nonce, state.error);
state_map_.erase(type_url);
}
// Create message payload.
send_message_payload_ =
@ -761,8 +842,30 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
}
}
void XdsClient::ChannelState::AdsCallState::Subscribe(
const std::string& type_url, const std::string& name) {
auto& state = state_map_[type_url].subscribed_resources[name];
if (state == nullptr) {
state = MakeOrphanable<ResourceState>(type_url, name);
SendMessageLocked(type_url);
}
}
void XdsClient::ChannelState::AdsCallState::Unsubscribe(
const std::string& type_url, const std::string& name) {
state_map_[type_url].subscribed_resources.erase(name);
SendMessageLocked(type_url);
}
bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
for (const auto& p : state_map_) {
if (!p.second.subscribed_resources.empty()) return true;
}
return false;
}
void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
LdsUpdate lds_update, std::string new_version) {
LdsUpdate lds_update) {
const std::string& cluster_name =
lds_update.rds_update.has_value()
? lds_update.rds_update.value().cluster_name
@ -775,6 +878,9 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
xds_client(), lds_update.route_config_name.c_str(),
cluster_name.c_str());
}
auto& lds_state = state_map_[kLdsTypeUrl];
auto& state = lds_state.subscribed_resources[xds_client()->server_name_];
if (state != nullptr) state->Finish();
// Ignore identical update.
if (xds_client()->route_config_name_ == lds_update.route_config_name &&
xds_client()->cluster_name_ == cluster_name) {
@ -802,19 +908,22 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
}
} else {
// Send RDS request for dynamic resolution.
SendMessageLocked(kRdsTypeUrl, "", nullptr, false);
Subscribe(kRdsTypeUrl, xds_client()->route_config_name_);
}
lds_version_.version_info = std::move(new_version);
}
void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
RdsUpdate rds_update, std::string new_version) {
RdsUpdate rds_update) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
gpr_log(GPR_INFO,
"[xds_client %p] RDS update received: "
"cluster_name=%s",
xds_client(), rds_update.cluster_name.c_str());
}
auto& rds_state = state_map_[kRdsTypeUrl];
auto& state =
rds_state.subscribed_resources[xds_client()->route_config_name_];
if (state != nullptr) state->Finish();
// Ignore identical update.
if (xds_client()->cluster_name_ == rds_update.cluster_name) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
@ -835,14 +944,16 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
} else {
xds_client()->service_config_watcher_->OnError(error);
}
rds_version_.version_info = std::move(new_version);
}
void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
CdsUpdateMap cds_update_map, std::string new_version) {
CdsUpdateMap cds_update_map) {
auto& cds_state = state_map_[kCdsTypeUrl];
for (auto& p : cds_update_map) {
const char* cluster_name = p.first.c_str();
CdsUpdate& cds_update = p.second;
auto& state = cds_state.subscribed_resources[cluster_name];
if (state != nullptr) state->Finish();
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
gpr_log(GPR_INFO,
"[xds_client %p] CDS update (cluster=%s) received: "
@ -875,14 +986,16 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
p.first->OnClusterChanged(cluster_state.update.value());
}
}
cds_version_.version_info = std::move(new_version);
}
void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
EdsUpdateMap eds_update_map, std::string new_version) {
EdsUpdateMap eds_update_map) {
auto& eds_state = state_map_[kEdsTypeUrl];
for (auto& p : eds_update_map) {
const char* eds_service_name = p.first.c_str();
EdsUpdate& eds_update = p.second;
auto& state = eds_state.subscribed_resources[eds_service_name];
if (state != nullptr) state->Finish();
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
gpr_log(GPR_INFO,
"[xds_client %p] EDS response with %" PRIuPTR
@ -956,7 +1069,6 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
p.first->OnEndpointChanged(endpoint_state.update);
}
}
eds_version_.version_info = std::move(new_version);
}
void XdsClient::ChannelState::AdsCallState::OnRequestSent(void* arg,
@ -977,22 +1089,17 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
self->send_message_payload_ = nullptr;
// Continue to send another pending message if any.
// TODO(roth): The current code to handle buffered messages has the
// advantage of sending only the most recent list of resource names for each
// resource type (no matter how many times that resource type has been
// requested to send while the current message sending is still pending).
// But its disadvantage is that we send the requests in fixed order of
// resource types. We need to fix this if we are seeing some resource
// type(s) starved due to frequent requests of other resource type(s).
for (auto& p : self->buffered_request_map_) {
const std::string& type_url = p.first;
std::unique_ptr<BufferedRequest>& buffered_request = p.second;
if (buffered_request != nullptr) {
self->SendMessageLocked(type_url, buffered_request->nonce,
buffered_request->error, false);
buffered_request->error = GRPC_ERROR_NONE;
buffered_request.reset();
break;
}
// advantage of sending only the most recent list of resource names for
// each resource type (no matter how many times that resource type has
// been requested to send while the current message sending is still
// pending). But its disadvantage is that we send the requests in fixed
// order of resource types. We need to fix this if we are seeing some
// resource type(s) starved due to frequent requests of other resource
// type(s).
auto it = self->buffered_requests_.begin();
if (it != self->buffered_requests_.end()) {
self->SendMessageLocked(*it);
self->buffered_requests_.erase(it);
}
}
self->Unref(DEBUG_LOCATION, "ADS+OnRequestSentLocked");
@ -1043,8 +1150,8 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked(
// Note that XdsAdsResponseDecodeAndParse() also validate the response.
grpc_error* parse_error = XdsAdsResponseDecodeAndParse(
response_slice, xds_client->server_name_, xds_client->route_config_name_,
xds_client->EdsServiceNames(), &lds_update, &rds_update, &cds_update_map,
&eds_update_map, &version, &nonce, &type_url);
ads_calld->EdsServiceNamesForRequest(), &lds_update, &rds_update,
&cds_update_map, &eds_update_map, &version, &nonce, &type_url);
grpc_slice_unref_internal(response_slice);
if (type_url.empty()) {
// Ignore unparsable response.
@ -1052,48 +1159,34 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked(
xds_client, grpc_error_string(parse_error));
GRPC_ERROR_UNREF(parse_error);
} else {
// Update nonce and error.
if (type_url == kLdsTypeUrl) {
ads_calld->lds_version_.nonce = nonce;
GRPC_ERROR_UNREF(ads_calld->lds_version_.error);
ads_calld->lds_version_.error = GRPC_ERROR_REF(parse_error);
} else if (type_url == kRdsTypeUrl) {
ads_calld->rds_version_.nonce = nonce;
GRPC_ERROR_UNREF(ads_calld->rds_version_.error);
ads_calld->rds_version_.error = GRPC_ERROR_REF(parse_error);
} else if (type_url == kCdsTypeUrl) {
ads_calld->cds_version_.nonce = nonce;
GRPC_ERROR_UNREF(ads_calld->cds_version_.error);
ads_calld->cds_version_.error = GRPC_ERROR_REF(parse_error);
} else if (type_url == kEdsTypeUrl) {
ads_calld->eds_version_.nonce = nonce;
GRPC_ERROR_UNREF(ads_calld->eds_version_.error);
ads_calld->eds_version_.error = GRPC_ERROR_REF(parse_error);
}
// Update nonce.
auto& state = ads_calld->state_map_[type_url];
state.nonce = std::move(nonce);
// NACK or ACK the response.
if (parse_error != GRPC_ERROR_NONE) {
GRPC_ERROR_UNREF(state.error);
state.error = parse_error;
// NACK unacceptable update.
gpr_log(
GPR_ERROR,
"[xds_client %p] ADS response can't be accepted, NACKing. error=%s",
xds_client, grpc_error_string(parse_error));
ads_calld->SendMessageLocked(type_url, nonce, parse_error, false);
ads_calld->SendMessageLocked(type_url);
} else {
ads_calld->seen_response_ = true;
// Accept the ADS response according to the type_url.
if (type_url == kLdsTypeUrl) {
ads_calld->AcceptLdsUpdate(std::move(lds_update), std::move(version));
ads_calld->AcceptLdsUpdate(std::move(lds_update));
} else if (type_url == kRdsTypeUrl) {
ads_calld->AcceptRdsUpdate(std::move(rds_update), std::move(version));
ads_calld->AcceptRdsUpdate(std::move(rds_update));
} else if (type_url == kCdsTypeUrl) {
ads_calld->AcceptCdsUpdate(std::move(cds_update_map),
std::move(version));
ads_calld->AcceptCdsUpdate(std::move(cds_update_map));
} else if (type_url == kEdsTypeUrl) {
ads_calld->AcceptEdsUpdate(std::move(eds_update_map),
std::move(version));
ads_calld->AcceptEdsUpdate(std::move(eds_update_map));
}
state.version = std::move(version);
// ACK the update.
ads_calld->SendMessageLocked(type_url, nonce, nullptr, false);
ads_calld->SendMessageLocked(type_url);
// Start load reporting if needed.
auto& lrs_call = ads_calld->chand()->lrs_calld_;
if (lrs_call != nullptr) {
@ -1164,6 +1257,28 @@ bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
return this == chand()->ads_calld_->calld();
}
std::set<StringView>
XdsClient::ChannelState::AdsCallState::ClusterNamesForRequest() {
std::set<StringView> cluster_names;
for (auto& p : state_map_[kCdsTypeUrl].subscribed_resources) {
cluster_names.insert(p.first);
OrphanablePtr<ResourceState>& state = p.second;
state->Start(Ref());
}
return cluster_names;
}
std::set<StringView>
XdsClient::ChannelState::AdsCallState::EdsServiceNamesForRequest() {
std::set<StringView> eds_names;
for (auto& p : state_map_[kEdsTypeUrl].subscribed_resources) {
eds_names.insert(p.first);
OrphanablePtr<ResourceState>& state = p.second;
state->Start(Ref());
}
return eds_names;
}
//
// XdsClient::ChannelState::LrsCallState::Reporter
//
@ -1584,6 +1699,12 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
namespace {
grpc_millis GetRequestTimeout(const grpc_channel_args& args) {
return grpc_channel_args_find_integer(
&args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
{15000, 0, INT_MAX});
}
UniquePtr<char> GenerateBuildVersionString() {
char* build_version_str;
gpr_asprintf(&build_version_str, "gRPC C-core %s %s", grpc_version_string(),
@ -1598,6 +1719,7 @@ XdsClient::XdsClient(Combiner* combiner, grpc_pollset_set* interested_parties,
std::unique_ptr<ServiceConfigWatcherInterface> watcher,
const grpc_channel_args& channel_args, grpc_error** error)
: InternallyRefCounted<XdsClient>(&grpc_xds_client_trace),
request_timeout_(GetRequestTimeout(channel_args)),
build_version_(GenerateBuildVersionString()),
combiner_(GRPC_COMBINER_REF(combiner, "xds_client")),
interested_parties_(interested_parties),
@ -1618,7 +1740,7 @@ XdsClient::XdsClient(Combiner* combiner, grpc_pollset_set* interested_parties,
chand_ = MakeOrphanable<ChannelState>(
Ref(DEBUG_LOCATION, "XdsClient+ChannelState"), channel_args);
if (service_config_watcher_ != nullptr) {
chand_->OnResourceNamesChanged(kLdsTypeUrl);
chand_->Subscribe(kLdsTypeUrl, std::string(server_name));
}
}
@ -1634,8 +1756,8 @@ void XdsClient::Orphan() {
void XdsClient::WatchClusterData(
StringView cluster_name, std::unique_ptr<ClusterWatcherInterface> watcher) {
const bool new_name = cluster_map_.find(cluster_name) == cluster_map_.end();
ClusterState& cluster_state = cluster_map_[cluster_name];
std::string cluster_name_str = std::string(cluster_name);
ClusterState& cluster_state = cluster_map_[cluster_name_str];
ClusterWatcherInterface* w = watcher.get();
cluster_state.watchers[w] = std::move(watcher);
// If we've already received an CDS update, notify the new watcher
@ -1643,30 +1765,29 @@ void XdsClient::WatchClusterData(
if (cluster_state.update.has_value()) {
w->OnClusterChanged(cluster_state.update.value());
}
if (new_name) chand_->OnResourceNamesChanged(kCdsTypeUrl);
chand_->Subscribe(kCdsTypeUrl, cluster_name_str);
}
void XdsClient::CancelClusterDataWatch(StringView cluster_name,
ClusterWatcherInterface* watcher) {
if (shutting_down_) return;
ClusterState& cluster_state = cluster_map_[cluster_name];
std::string cluster_name_str = std::string(cluster_name);
ClusterState& cluster_state = cluster_map_[cluster_name_str];
auto it = cluster_state.watchers.find(watcher);
if (it != cluster_state.watchers.end()) {
cluster_state.watchers.erase(it);
if (cluster_state.watchers.empty()) {
cluster_map_.erase(cluster_name);
chand_->OnResourceNamesChanged(kCdsTypeUrl);
cluster_map_.erase(cluster_name_str);
chand_->Unsubscribe(kCdsTypeUrl, cluster_name_str);
}
}
chand_->OnWatcherRemoved();
}
void XdsClient::WatchEndpointData(
StringView eds_service_name,
std::unique_ptr<EndpointWatcherInterface> watcher) {
const bool new_name =
endpoint_map_.find(eds_service_name) == endpoint_map_.end();
EndpointState& endpoint_state = endpoint_map_[eds_service_name];
std::string eds_service_name_str = std::string(eds_service_name);
EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
EndpointWatcherInterface* w = watcher.get();
endpoint_state.watchers[w] = std::move(watcher);
// If we've already received an EDS update, notify the new watcher
@ -1674,28 +1795,28 @@ void XdsClient::WatchEndpointData(
if (!endpoint_state.update.priority_list_update.empty()) {
w->OnEndpointChanged(endpoint_state.update);
}
if (new_name) chand_->OnResourceNamesChanged(kEdsTypeUrl);
chand_->Subscribe(kEdsTypeUrl, eds_service_name_str);
}
void XdsClient::CancelEndpointDataWatch(StringView eds_service_name,
EndpointWatcherInterface* watcher) {
if (shutting_down_) return;
EndpointState& endpoint_state = endpoint_map_[eds_service_name];
std::string eds_service_name_str = std::string(eds_service_name);
EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
auto it = endpoint_state.watchers.find(watcher);
if (it != endpoint_state.watchers.end()) {
endpoint_state.watchers.erase(it);
if (endpoint_state.watchers.empty()) {
endpoint_map_.erase(eds_service_name);
chand_->OnResourceNamesChanged(kEdsTypeUrl);
endpoint_map_.erase(eds_service_name_str);
chand_->Unsubscribe(kEdsTypeUrl, eds_service_name_str);
}
}
chand_->OnWatcherRemoved();
}
void XdsClient::AddClientStats(StringView /*lrs_server*/,
StringView cluster_name,
XdsClientStats* client_stats) {
EndpointState& endpoint_state = endpoint_map_[cluster_name];
EndpointState& endpoint_state = endpoint_map_[std::string(cluster_name)];
// TODO(roth): When we add support for direct federation, use the
// server name specified in lrs_server.
endpoint_state.client_stats.insert(client_stats);
@ -1705,7 +1826,7 @@ void XdsClient::AddClientStats(StringView /*lrs_server*/,
void XdsClient::RemoveClientStats(StringView /*lrs_server*/,
StringView cluster_name,
XdsClientStats* client_stats) {
EndpointState& endpoint_state = endpoint_map_[cluster_name];
EndpointState& endpoint_state = endpoint_map_[std::string(cluster_name)];
// TODO(roth): When we add support for direct federation, use the
// server name specified in lrs_server.
// TODO(roth): In principle, we should try to send a final load report
@ -1745,32 +1866,11 @@ grpc_error* XdsClient::CreateServiceConfig(
return error;
}
std::set<StringView> XdsClient::WatchedClusterNames() const {
std::set<StringView> cluster_names;
for (const auto& p : cluster_map_) {
const StringView& cluster_name = p.first;
const ClusterState& cluster_state = p.second;
// Don't request for the clusters that are cached before watched.
if (cluster_state.watchers.empty()) continue;
cluster_names.emplace(cluster_name);
}
return cluster_names;
}
std::set<StringView> XdsClient::EdsServiceNames() const {
std::set<StringView> eds_service_names;
for (const auto& p : endpoint_map_) {
const StringView& eds_service_name = p.first;
eds_service_names.emplace(eds_service_name);
}
return eds_service_names;
}
std::map<StringView, std::set<XdsClientStats*>> XdsClient::ClientStatsMap()
const {
std::map<StringView, std::set<XdsClientStats*>> client_stats_map;
std::map<StringView, std::set<XdsClientStats*>, StringLess>
XdsClient::ClientStatsMap() const {
std::map<StringView, std::set<XdsClientStats*>, StringLess> client_stats_map;
for (const auto& p : endpoint_map_) {
const StringView& cluster_name = p.first;
const StringView cluster_name = p.first;
const auto& client_stats = p.second.client_stats;
if (chand_->lrs_calld()->ShouldSendLoadReports(cluster_name)) {
client_stats_map.emplace(cluster_name, client_stats);

@ -153,8 +153,8 @@ class XdsClient : public InternallyRefCounted<XdsClient> {
void StartConnectivityWatchLocked();
void CancelConnectivityWatchLocked();
void OnResourceNamesChanged(const std::string& type_url);
void OnWatcherRemoved();
void Subscribe(const std::string& type_url, const std::string& name);
void Unsubscribe(const std::string& type_url, const std::string& name);
private:
class StateWatcher;
@ -195,11 +195,8 @@ class XdsClient : public InternallyRefCounted<XdsClient> {
const std::string& cluster_name,
RefCountedPtr<ServiceConfig>* service_config) const;
std::set<StringView> WatchedClusterNames() const;
std::set<StringView> EdsServiceNames() const;
std::map<StringView, std::set<XdsClientStats*>> ClientStatsMap() const;
std::map<StringView, std::set<XdsClientStats*>, StringLess> ClientStatsMap()
const;
// Channel arg vtable functions.
static void* ChannelArgCopy(void* p);
@ -208,6 +205,8 @@ class XdsClient : public InternallyRefCounted<XdsClient> {
static const grpc_arg_pointer_vtable kXdsClientVtable;
const grpc_millis request_timeout_;
grpc_core::UniquePtr<char> build_version_;
Combiner* combiner_;
@ -225,10 +224,9 @@ class XdsClient : public InternallyRefCounted<XdsClient> {
std::string route_config_name_;
std::string cluster_name_;
// All the received clusters are cached, no matter they are watched or not.
std::map<StringView /*cluster_name*/, ClusterState, StringLess> cluster_map_;
std::map<std::string /*cluster_name*/, ClusterState> cluster_map_;
// Only the watched EDS service names are stored.
std::map<StringView /*eds_service_name*/, EndpointState, StringLess>
endpoint_map_;
std::map<std::string /*eds_service_name*/, EndpointState> endpoint_map_;
bool shutting_down_ = false;
};

@ -75,6 +75,11 @@ class StringView final {
: StringView(ptr, ptr == nullptr ? 0 : strlen(ptr)) {}
constexpr StringView() : StringView(nullptr, 0) {}
template <typename Allocator>
StringView(
const std::basic_string<char, std::char_traits<char>, Allocator>& str)
: StringView(str.data(), str.size()) {}
constexpr const char* data() const { return ptr_; }
constexpr size_t size() const { return size_; }
constexpr bool empty() const { return size_ == 0; }

@ -21,9 +21,220 @@
#include <grpc/support/port_platform.h>
#include <stdbool.h>
#include <stdlib.h>
#include <map>
#include <string>
#include <vector>
#include "src/core/lib/gprpp/string_view.h"
#include "src/core/lib/iomgr/error.h"
namespace grpc_core {
// A JSON value, which can be any one of object, array, string,
// number, true, false, or null.
class Json {
public:
// TODO(roth): Currently, numbers are stored internally as strings,
// which makes the API a bit cumbersome to use. When we have time,
// consider whether there's a better alternative (e.g., maybe storing
// each numeric type as the native C++ type and automatically converting
// to string as needed).
enum class Type {
JSON_NULL,
JSON_TRUE,
JSON_FALSE,
NUMBER,
STRING,
OBJECT,
ARRAY
};
using Object = std::map<std::string, Json>;
using Array = std::vector<Json>;
// Parses JSON string from json_str. On error, sets *error.
static Json Parse(StringView json_str, grpc_error** error);
Json() = default;
// Copyable.
Json(const Json& other) { CopyFrom(other); }
Json& operator=(const Json& other) {
CopyFrom(other);
return *this;
}
// Moveable.
Json(Json&& other) { MoveFrom(std::move(other)); }
Json& operator=(Json&& other) {
MoveFrom(std::move(other));
return *this;
}
// Construct from copying a string.
// If is_number is true, the type will be NUMBER instead of STRING.
Json(const std::string& string, bool is_number = false)
: type_(is_number ? Type::NUMBER : Type::STRING), string_value_(string) {}
Json& operator=(const std::string& string) {
type_ = Type::STRING;
string_value_ = string;
return *this;
}
// Same thing for C-style strings, both const and mutable.
Json(const char* string, bool is_number = false)
: Json(std::string(string), is_number) {}
Json& operator=(const char* string) {
*this = std::string(string);
return *this;
}
Json(char* string, bool is_number = false)
: Json(std::string(string), is_number) {}
Json& operator=(char* string) {
*this = std::string(string);
return *this;
}
// Construct by moving a string.
Json(std::string&& string)
: type_(Type::STRING), string_value_(std::move(string)) {}
Json& operator=(std::string&& string) {
type_ = Type::STRING;
string_value_ = std::move(string);
return *this;
}
// Construct from bool.
Json(bool b) : type_(b ? Type::JSON_TRUE : Type::JSON_FALSE) {}
Json& operator=(bool b) {
type_ = b ? Type::JSON_TRUE : Type::JSON_FALSE;
return *this;
}
// Construct from any numeric type.
template <typename NumericType>
Json(NumericType number)
: type_(Type::NUMBER), string_value_(std::to_string(number)) {}
template <typename NumericType>
Json& operator=(NumericType number) {
type_ = Type::NUMBER;
string_value_ = std::to_string(number);
return *this;
}
// Construct by copying object.
Json(const Object& object) : type_(Type::OBJECT), object_value_(object) {}
Json& operator=(const Object& object) {
type_ = Type::OBJECT;
object_value_ = object;
return *this;
}
// Construct by moving object.
Json(Object&& object)
: type_(Type::OBJECT), object_value_(std::move(object)) {}
Json& operator=(Object&& object) {
type_ = Type::OBJECT;
object_value_ = std::move(object);
return *this;
}
// Construct by copying array.
Json(const Array& array) : type_(Type::ARRAY), array_value_(array) {}
Json& operator=(const Array& array) {
type_ = Type::ARRAY;
array_value_ = array;
return *this;
}
// Construct by moving array.
Json(Array&& array) : type_(Type::ARRAY), array_value_(std::move(array)) {}
Json& operator=(Array&& array) {
type_ = Type::ARRAY;
array_value_ = std::move(array);
return *this;
}
// Dumps JSON from value to string form.
std::string Dump(int indent = 0) const;
// Accessor methods.
Type type() const { return type_; }
const std::string& string_value() const { return string_value_; }
const Object& object_value() const { return object_value_; }
Object* mutable_object() { return &object_value_; }
const Array& array_value() const { return array_value_; }
Array* mutable_array() { return &array_value_; }
bool operator==(const Json& other) const {
if (type_ != other.type_) return false;
switch (type_) {
case Type::NUMBER:
case Type::STRING:
if (string_value_ != other.string_value_) return false;
break;
case Type::OBJECT:
if (object_value_ != other.object_value_) return false;
break;
case Type::ARRAY:
if (array_value_ != other.array_value_) return false;
break;
default:
break;
}
return true;
}
bool operator!=(const Json& other) const { return !(*this == other); }
private:
void CopyFrom(const Json& other) {
type_ = other.type_;
switch (type_) {
case Type::NUMBER:
case Type::STRING:
string_value_ = other.string_value_;
break;
case Type::OBJECT:
object_value_ = other.object_value_;
break;
case Type::ARRAY:
array_value_ = other.array_value_;
break;
default:
break;
}
}
void MoveFrom(Json&& other) {
type_ = other.type_;
other.type_ = Type::JSON_NULL;
switch (type_) {
case Type::NUMBER:
case Type::STRING:
string_value_ = std::move(other.string_value_);
break;
case Type::OBJECT:
object_value_ = std::move(other.object_value_);
break;
case Type::ARRAY:
array_value_ = std::move(other.array_value_);
break;
default:
break;
}
}
Type type_ = Type::JSON_NULL;
std::string string_value_;
Object object_value_;
Array array_value_;
};
} // namespace grpc_core
/* The various json types. */
typedef enum {
GRPC_JSON_OBJECT,

@ -0,0 +1,808 @@
/*
*
* Copyright 2015-2016 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 <string.h>
#include <grpc/support/log.h>
#include "src/core/lib/json/json.h"
namespace grpc_core {
namespace {
class JsonReader {
public:
enum class Status {
GRPC_JSON_DONE, /* The parser finished successfully. */
GRPC_JSON_PARSE_ERROR, /* The parser found an error in the json stream. */
GRPC_JSON_INTERNAL_ERROR /* The parser got an internal error. */
};
static Status Parse(StringView input, Json* output);
private:
enum class State {
GRPC_JSON_STATE_OBJECT_KEY_BEGIN,
GRPC_JSON_STATE_OBJECT_KEY_STRING,
GRPC_JSON_STATE_OBJECT_KEY_END,
GRPC_JSON_STATE_VALUE_BEGIN,
GRPC_JSON_STATE_VALUE_STRING,
GRPC_JSON_STATE_STRING_ESCAPE,
GRPC_JSON_STATE_STRING_ESCAPE_U1,
GRPC_JSON_STATE_STRING_ESCAPE_U2,
GRPC_JSON_STATE_STRING_ESCAPE_U3,
GRPC_JSON_STATE_STRING_ESCAPE_U4,
GRPC_JSON_STATE_VALUE_NUMBER,
GRPC_JSON_STATE_VALUE_NUMBER_WITH_DECIMAL,
GRPC_JSON_STATE_VALUE_NUMBER_ZERO,
GRPC_JSON_STATE_VALUE_NUMBER_DOT,
GRPC_JSON_STATE_VALUE_NUMBER_E,
GRPC_JSON_STATE_VALUE_NUMBER_EPM,
GRPC_JSON_STATE_VALUE_TRUE_R,
GRPC_JSON_STATE_VALUE_TRUE_U,
GRPC_JSON_STATE_VALUE_TRUE_E,
GRPC_JSON_STATE_VALUE_FALSE_A,
GRPC_JSON_STATE_VALUE_FALSE_L,
GRPC_JSON_STATE_VALUE_FALSE_S,
GRPC_JSON_STATE_VALUE_FALSE_E,
GRPC_JSON_STATE_VALUE_NULL_U,
GRPC_JSON_STATE_VALUE_NULL_L1,
GRPC_JSON_STATE_VALUE_NULL_L2,
GRPC_JSON_STATE_VALUE_END,
GRPC_JSON_STATE_END
};
/* The first non-unicode value is 0x110000. But let's pick
* a value high enough to start our error codes from. These
* values are safe to return from the read_char function.
*/
static constexpr uint32_t GRPC_JSON_READ_CHAR_EOF = 0x7ffffff0;
explicit JsonReader(StringView input)
: input_(reinterpret_cast<const uint8_t*>(input.data())),
remaining_input_(input.size()) {}
Status Run();
uint32_t ReadChar();
bool IsComplete();
void StringAddChar(uint32_t c);
void StringAddUtf32(uint32_t c);
Json* CreateAndLinkValue();
void StartContainer(Json::Type type);
void EndContainer();
void SetKey();
void SetString();
bool SetNumber();
void SetTrue();
void SetFalse();
void SetNull();
const uint8_t* input_;
size_t remaining_input_;
State state_ = State::GRPC_JSON_STATE_VALUE_BEGIN;
bool escaped_string_was_key_ = false;
bool container_just_begun_ = false;
uint16_t unicode_char_ = 0;
uint16_t unicode_high_surrogate_ = 0;
bool duplicate_key_found_ = false;
Json root_value_;
std::vector<Json*> stack_;
std::string key_;
std::string string_;
};
void JsonReader::StringAddChar(uint32_t c) {
string_.push_back(static_cast<uint8_t>(c));
}
void JsonReader::StringAddUtf32(uint32_t c) {
if (c <= 0x7f) {
StringAddChar(c);
} else if (c <= 0x7ff) {
uint32_t b1 = 0xc0 | ((c >> 6) & 0x1f);
uint32_t b2 = 0x80 | (c & 0x3f);
StringAddChar(b1);
StringAddChar(b2);
} else if (c <= 0xffff) {
uint32_t b1 = 0xe0 | ((c >> 12) & 0x0f);
uint32_t b2 = 0x80 | ((c >> 6) & 0x3f);
uint32_t b3 = 0x80 | (c & 0x3f);
StringAddChar(b1);
StringAddChar(b2);
StringAddChar(b3);
} else if (c <= 0x1fffff) {
uint32_t b1 = 0xf0 | ((c >> 18) & 0x07);
uint32_t b2 = 0x80 | ((c >> 12) & 0x3f);
uint32_t b3 = 0x80 | ((c >> 6) & 0x3f);
uint32_t b4 = 0x80 | (c & 0x3f);
StringAddChar(b1);
StringAddChar(b2);
StringAddChar(b3);
StringAddChar(b4);
}
}
uint32_t JsonReader::ReadChar() {
if (remaining_input_ == 0) return GRPC_JSON_READ_CHAR_EOF;
const uint32_t r = *input_++;
--remaining_input_;
if (r == 0) {
remaining_input_ = 0;
return GRPC_JSON_READ_CHAR_EOF;
}
return r;
}
Json* JsonReader::CreateAndLinkValue() {
Json* value;
if (stack_.empty()) {
value = &root_value_;
} else {
Json* parent = stack_.back();
if (parent->type() == Json::Type::OBJECT) {
if (parent->object_value().find(key_) != parent->object_value().end()) {
duplicate_key_found_ = true;
}
value = &(*parent->mutable_object())[std::move(key_)];
} else {
GPR_ASSERT(parent->type() == Json::Type::ARRAY);
parent->mutable_array()->emplace_back();
value = &parent->mutable_array()->back();
}
}
return value;
}
void JsonReader::StartContainer(Json::Type type) {
Json* value = CreateAndLinkValue();
if (type == Json::Type::OBJECT) {
*value = Json::Object();
} else {
GPR_ASSERT(type == Json::Type::ARRAY);
*value = Json::Array();
}
stack_.push_back(value);
}
void JsonReader::EndContainer() {
GPR_ASSERT(!stack_.empty());
stack_.pop_back();
}
void JsonReader::SetKey() {
key_ = std::move(string_);
string_.clear();
}
void JsonReader::SetString() {
Json* value = CreateAndLinkValue();
*value = std::move(string_);
string_.clear();
}
bool JsonReader::SetNumber() {
Json* value = CreateAndLinkValue();
*value = Json(std::move(string_), /*is_number=*/true);
string_.clear();
return true;
}
void JsonReader::SetTrue() {
Json* value = CreateAndLinkValue();
*value = true;
string_.clear();
}
void JsonReader::SetFalse() {
Json* value = CreateAndLinkValue();
*value = false;
string_.clear();
}
void JsonReader::SetNull() { CreateAndLinkValue(); }
bool JsonReader::IsComplete() {
return (stack_.empty() && (state_ == State::GRPC_JSON_STATE_END ||
state_ == State::GRPC_JSON_STATE_VALUE_END));
}
/* Call this function to start parsing the input. It will return the following:
* . GRPC_JSON_DONE if the input got eof, and the parsing finished
* successfully.
* . GRPC_JSON_PARSE_ERROR if the input was somehow invalid.
* . GRPC_JSON_INTERNAL_ERROR if the parser somehow ended into an invalid
* internal state.
*/
JsonReader::Status JsonReader::Run() {
uint32_t c;
/* This state-machine is a strict implementation of ECMA-404 */
while (true) {
c = ReadChar();
switch (c) {
/* Let's process the error case first. */
case GRPC_JSON_READ_CHAR_EOF:
if (IsComplete()) {
return Status::GRPC_JSON_DONE;
} else {
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
/* Processing whitespaces. */
case ' ':
case '\t':
case '\n':
case '\r':
switch (state_) {
case State::GRPC_JSON_STATE_OBJECT_KEY_BEGIN:
case State::GRPC_JSON_STATE_OBJECT_KEY_END:
case State::GRPC_JSON_STATE_VALUE_BEGIN:
case State::GRPC_JSON_STATE_VALUE_END:
case State::GRPC_JSON_STATE_END:
break;
case State::GRPC_JSON_STATE_OBJECT_KEY_STRING:
case State::GRPC_JSON_STATE_VALUE_STRING:
if (c != ' ') return Status::GRPC_JSON_PARSE_ERROR;
if (unicode_high_surrogate_ != 0) {
return Status::GRPC_JSON_PARSE_ERROR;
}
StringAddChar(c);
break;
case State::GRPC_JSON_STATE_VALUE_NUMBER:
case State::GRPC_JSON_STATE_VALUE_NUMBER_WITH_DECIMAL:
case State::GRPC_JSON_STATE_VALUE_NUMBER_ZERO:
case State::GRPC_JSON_STATE_VALUE_NUMBER_EPM:
if (!SetNumber()) return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_END;
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
/* Value, object or array terminations. */
case ',':
case '}':
case ']':
switch (state_) {
case State::GRPC_JSON_STATE_OBJECT_KEY_STRING:
case State::GRPC_JSON_STATE_VALUE_STRING:
if (unicode_high_surrogate_ != 0) {
return Status::GRPC_JSON_PARSE_ERROR;
}
StringAddChar(c);
break;
case State::GRPC_JSON_STATE_VALUE_NUMBER:
case State::GRPC_JSON_STATE_VALUE_NUMBER_WITH_DECIMAL:
case State::GRPC_JSON_STATE_VALUE_NUMBER_ZERO:
case State::GRPC_JSON_STATE_VALUE_NUMBER_EPM:
if (stack_.empty()) {
return Status::GRPC_JSON_PARSE_ERROR;
} else if (c == '}' &&
stack_.back()->type() != Json::Type::OBJECT) {
return Status::GRPC_JSON_PARSE_ERROR;
return Status::GRPC_JSON_PARSE_ERROR;
} else if (c == ']' && stack_.back()->type() != Json::Type::ARRAY) {
return Status::GRPC_JSON_PARSE_ERROR;
}
if (!SetNumber()) return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_END;
/* The missing break here is intentional. */
/* fallthrough */
case State::GRPC_JSON_STATE_VALUE_END:
case State::GRPC_JSON_STATE_OBJECT_KEY_BEGIN:
case State::GRPC_JSON_STATE_VALUE_BEGIN:
if (c == ',') {
if (state_ != State::GRPC_JSON_STATE_VALUE_END) {
return Status::GRPC_JSON_PARSE_ERROR;
}
if (!stack_.empty() &&
stack_.back()->type() == Json::Type::OBJECT) {
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_BEGIN;
} else if (!stack_.empty() &&
stack_.back()->type() == Json::Type::ARRAY) {
state_ = State::GRPC_JSON_STATE_VALUE_BEGIN;
} else {
return Status::GRPC_JSON_PARSE_ERROR;
}
} else {
if (stack_.empty()) {
return Status::GRPC_JSON_PARSE_ERROR;
}
if (c == '}' && stack_.back()->type() != Json::Type::OBJECT) {
return Status::GRPC_JSON_PARSE_ERROR;
}
if (c == '}' &&
state_ == State::GRPC_JSON_STATE_OBJECT_KEY_BEGIN &&
!container_just_begun_) {
return Status::GRPC_JSON_PARSE_ERROR;
}
if (c == ']' && stack_.back()->type() != Json::Type::ARRAY) {
return Status::GRPC_JSON_PARSE_ERROR;
}
if (c == ']' && state_ == State::GRPC_JSON_STATE_VALUE_BEGIN &&
!container_just_begun_) {
return Status::GRPC_JSON_PARSE_ERROR;
}
state_ = State::GRPC_JSON_STATE_VALUE_END;
EndContainer();
if (stack_.empty()) {
state_ = State::GRPC_JSON_STATE_END;
}
}
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
/* In-string escaping. */
case '\\':
switch (state_) {
case State::GRPC_JSON_STATE_OBJECT_KEY_STRING:
escaped_string_was_key_ = true;
state_ = State::GRPC_JSON_STATE_STRING_ESCAPE;
break;
case State::GRPC_JSON_STATE_VALUE_STRING:
escaped_string_was_key_ = false;
state_ = State::GRPC_JSON_STATE_STRING_ESCAPE;
break;
/* This is the \\ case. */
case State::GRPC_JSON_STATE_STRING_ESCAPE:
if (unicode_high_surrogate_ != 0)
return Status::GRPC_JSON_PARSE_ERROR;
StringAddChar('\\');
if (escaped_string_was_key_) {
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_STRING;
} else {
state_ = State::GRPC_JSON_STATE_VALUE_STRING;
}
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
default:
container_just_begun_ = false;
switch (state_) {
case State::GRPC_JSON_STATE_OBJECT_KEY_BEGIN:
if (c != '"') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_STRING;
break;
case State::GRPC_JSON_STATE_OBJECT_KEY_STRING:
if (unicode_high_surrogate_ != 0) {
return Status::GRPC_JSON_PARSE_ERROR;
}
if (c == '"') {
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_END;
SetKey();
} else {
if (c < 32) return Status::GRPC_JSON_PARSE_ERROR;
StringAddChar(c);
}
break;
case State::GRPC_JSON_STATE_VALUE_STRING:
if (unicode_high_surrogate_ != 0) {
return Status::GRPC_JSON_PARSE_ERROR;
}
if (c == '"') {
state_ = State::GRPC_JSON_STATE_VALUE_END;
SetString();
} else {
if (c < 32) return Status::GRPC_JSON_PARSE_ERROR;
StringAddChar(c);
}
break;
case State::GRPC_JSON_STATE_OBJECT_KEY_END:
if (c != ':') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_BEGIN;
break;
case State::GRPC_JSON_STATE_VALUE_BEGIN:
switch (c) {
case 't':
state_ = State::GRPC_JSON_STATE_VALUE_TRUE_R;
break;
case 'f':
state_ = State::GRPC_JSON_STATE_VALUE_FALSE_A;
break;
case 'n':
state_ = State::GRPC_JSON_STATE_VALUE_NULL_U;
break;
case '"':
state_ = State::GRPC_JSON_STATE_VALUE_STRING;
break;
case '0':
StringAddChar(c);
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_ZERO;
break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '-':
StringAddChar(c);
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER;
break;
case '{':
container_just_begun_ = true;
StartContainer(Json::Type::OBJECT);
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_BEGIN;
break;
case '[':
container_just_begun_ = true;
StartContainer(Json::Type::ARRAY);
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
case State::GRPC_JSON_STATE_STRING_ESCAPE:
if (escaped_string_was_key_) {
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_STRING;
} else {
state_ = State::GRPC_JSON_STATE_VALUE_STRING;
}
if (unicode_high_surrogate_ && c != 'u') {
return Status::GRPC_JSON_PARSE_ERROR;
}
switch (c) {
case '"':
case '/':
StringAddChar(c);
break;
case 'b':
StringAddChar('\b');
break;
case 'f':
StringAddChar('\f');
break;
case 'n':
StringAddChar('\n');
break;
case 'r':
StringAddChar('\r');
break;
case 't':
StringAddChar('\t');
break;
case 'u':
state_ = State::GRPC_JSON_STATE_STRING_ESCAPE_U1;
unicode_char_ = 0;
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
case State::GRPC_JSON_STATE_STRING_ESCAPE_U1:
case State::GRPC_JSON_STATE_STRING_ESCAPE_U2:
case State::GRPC_JSON_STATE_STRING_ESCAPE_U3:
case State::GRPC_JSON_STATE_STRING_ESCAPE_U4:
if ((c >= '0') && (c <= '9')) {
c -= '0';
} else if ((c >= 'A') && (c <= 'F')) {
c -= 'A' - 10;
} else if ((c >= 'a') && (c <= 'f')) {
c -= 'a' - 10;
} else {
return Status::GRPC_JSON_PARSE_ERROR;
}
unicode_char_ = static_cast<uint16_t>(unicode_char_ << 4);
unicode_char_ = static_cast<uint16_t>(unicode_char_ | c);
switch (state_) {
case State::GRPC_JSON_STATE_STRING_ESCAPE_U1:
state_ = State::GRPC_JSON_STATE_STRING_ESCAPE_U2;
break;
case State::GRPC_JSON_STATE_STRING_ESCAPE_U2:
state_ = State::GRPC_JSON_STATE_STRING_ESCAPE_U3;
break;
case State::GRPC_JSON_STATE_STRING_ESCAPE_U3:
state_ = State::GRPC_JSON_STATE_STRING_ESCAPE_U4;
break;
case State::GRPC_JSON_STATE_STRING_ESCAPE_U4:
/* See grpc_json_writer_escape_string to have a description
* of what's going on here.
*/
if ((unicode_char_ & 0xfc00) == 0xd800) {
/* high surrogate utf-16 */
if (unicode_high_surrogate_ != 0)
return Status::GRPC_JSON_PARSE_ERROR;
unicode_high_surrogate_ = unicode_char_;
} else if ((unicode_char_ & 0xfc00) == 0xdc00) {
/* low surrogate utf-16 */
uint32_t utf32;
if (unicode_high_surrogate_ == 0)
return Status::GRPC_JSON_PARSE_ERROR;
utf32 = 0x10000;
utf32 += static_cast<uint32_t>(
(unicode_high_surrogate_ - 0xd800) * 0x400);
utf32 += static_cast<uint32_t>(unicode_char_ - 0xdc00);
StringAddUtf32(utf32);
unicode_high_surrogate_ = 0;
} else {
/* anything else */
if (unicode_high_surrogate_ != 0)
return Status::GRPC_JSON_PARSE_ERROR;
StringAddUtf32(unicode_char_);
}
if (escaped_string_was_key_) {
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_STRING;
} else {
state_ = State::GRPC_JSON_STATE_VALUE_STRING;
}
break;
default:
GPR_UNREACHABLE_CODE(return Status::GRPC_JSON_INTERNAL_ERROR);
}
break;
case State::GRPC_JSON_STATE_VALUE_NUMBER:
StringAddChar(c);
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
break;
case 'e':
case 'E':
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_E;
break;
case '.':
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_DOT;
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
case State::GRPC_JSON_STATE_VALUE_NUMBER_WITH_DECIMAL:
StringAddChar(c);
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
break;
case 'e':
case 'E':
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_E;
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
case State::GRPC_JSON_STATE_VALUE_NUMBER_ZERO:
if (c != '.') return Status::GRPC_JSON_PARSE_ERROR;
StringAddChar(c);
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_DOT;
break;
case State::GRPC_JSON_STATE_VALUE_NUMBER_DOT:
StringAddChar(c);
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_WITH_DECIMAL;
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
case State::GRPC_JSON_STATE_VALUE_NUMBER_E:
StringAddChar(c);
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '+':
case '-':
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_EPM;
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
case State::GRPC_JSON_STATE_VALUE_NUMBER_EPM:
StringAddChar(c);
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
case State::GRPC_JSON_STATE_VALUE_TRUE_R:
if (c != 'r') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_TRUE_U;
break;
case State::GRPC_JSON_STATE_VALUE_TRUE_U:
if (c != 'u') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_TRUE_E;
break;
case State::GRPC_JSON_STATE_VALUE_TRUE_E:
if (c != 'e') return Status::GRPC_JSON_PARSE_ERROR;
SetTrue();
state_ = State::GRPC_JSON_STATE_VALUE_END;
break;
case State::GRPC_JSON_STATE_VALUE_FALSE_A:
if (c != 'a') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_FALSE_L;
break;
case State::GRPC_JSON_STATE_VALUE_FALSE_L:
if (c != 'l') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_FALSE_S;
break;
case State::GRPC_JSON_STATE_VALUE_FALSE_S:
if (c != 's') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_FALSE_E;
break;
case State::GRPC_JSON_STATE_VALUE_FALSE_E:
if (c != 'e') return Status::GRPC_JSON_PARSE_ERROR;
SetFalse();
state_ = State::GRPC_JSON_STATE_VALUE_END;
break;
case State::GRPC_JSON_STATE_VALUE_NULL_U:
if (c != 'u') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_NULL_L1;
break;
case State::GRPC_JSON_STATE_VALUE_NULL_L1:
if (c != 'l') return Status::GRPC_JSON_PARSE_ERROR;
state_ = State::GRPC_JSON_STATE_VALUE_NULL_L2;
break;
case State::GRPC_JSON_STATE_VALUE_NULL_L2:
if (c != 'l') return Status::GRPC_JSON_PARSE_ERROR;
SetNull();
state_ = State::GRPC_JSON_STATE_VALUE_END;
break;
/* All of the VALUE_END cases are handled in the specialized case
* above. */
case State::GRPC_JSON_STATE_VALUE_END:
switch (c) {
case ',':
case '}':
case ']':
GPR_UNREACHABLE_CODE(return Status::GRPC_JSON_INTERNAL_ERROR);
break;
default:
return Status::GRPC_JSON_PARSE_ERROR;
}
break;
case State::GRPC_JSON_STATE_END:
return Status::GRPC_JSON_PARSE_ERROR;
}
}
}
GPR_UNREACHABLE_CODE(return Status::GRPC_JSON_INTERNAL_ERROR);
}
JsonReader::Status JsonReader::Parse(StringView input, Json* output) {
JsonReader reader(input);
Status status = reader.Run();
if (reader.duplicate_key_found_) status = Status::GRPC_JSON_PARSE_ERROR;
if (status == Status::GRPC_JSON_DONE) {
*output = std::move(reader.root_value_);
}
return status;
}
} // namespace
Json Json::Parse(StringView json_str, grpc_error** error) {
Json value;
JsonReader::Status status = JsonReader::Parse(json_str, &value);
if (status == JsonReader::Status::GRPC_JSON_PARSE_ERROR) {
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON parse error");
} else if (status == JsonReader::Status::GRPC_JSON_INTERNAL_ERROR) {
*error =
GRPC_ERROR_CREATE_FROM_STATIC_STRING("internal error in JSON parser");
}
return value;
}
} // namespace grpc_core

@ -0,0 +1,336 @@
/*
*
* Copyright 2015 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 <stdlib.h>
#include <string.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include "src/core/lib/json/json.h"
#include "src/core/lib/gprpp/string_view.h"
namespace grpc_core {
namespace {
/* The idea of the writer is basically symmetrical of the reader. While the
* reader emits various calls to your code, the writer takes basically the
* same calls and emit json out of it. It doesn't try to make any check on
* the order of the calls you do on it. Meaning you can theorically force
* it to generate invalid json.
*
* Also, unlike the reader, the writer expects UTF-8 encoded input strings.
* These strings will be UTF-8 validated, and any invalid character will
* cut the conversion short, before any invalid UTF-8 sequence, thus forming
* a valid UTF-8 string overall.
*/
class JsonWriter {
public:
static std::string Dump(const Json& value, int indent);
private:
explicit JsonWriter(int indent) : indent_(indent) {}
void OutputCheck(size_t needed);
void OutputChar(char c);
void OutputString(const StringView str);
void OutputIndent();
void ValueEnd();
void EscapeUtf16(uint16_t utf16);
void EscapeString(const std::string& string);
void ContainerBegins(Json::Type type);
void ContainerEnds(Json::Type type);
void ObjectKey(const std::string& string);
void ValueRaw(const std::string& string);
void ValueString(const std::string& string);
void DumpObject(const Json::Object& object);
void DumpArray(const Json::Array& array);
void DumpValue(const Json& value);
int indent_;
int depth_ = 0;
bool container_empty_ = true;
bool got_key_ = false;
std::string output_;
};
/* This function checks if there's enough space left in the output buffer,
* and will enlarge it if necessary. We're only allocating chunks of 256
* bytes at a time (or multiples thereof).
*/
void JsonWriter::OutputCheck(size_t needed) {
size_t free_space = output_.capacity() - output_.size();
if (free_space >= needed) return;
needed -= free_space;
/* Round up by 256 bytes. */
needed = (needed + 0xff) & ~0xffU;
output_.reserve(output_.capacity() + needed);
}
void JsonWriter::OutputChar(char c) {
OutputCheck(1);
output_.push_back(c);
}
void JsonWriter::OutputString(const StringView str) {
OutputCheck(str.size());
output_.append(str.data(), str.size());
}
void JsonWriter::OutputIndent() {
static const char spacesstr[] =
" "
" "
" "
" ";
unsigned spaces = static_cast<unsigned>(depth_ * indent_);
if (indent_ == 0) return;
if (got_key_) {
OutputChar(' ');
return;
}
while (spaces >= (sizeof(spacesstr) - 1)) {
OutputString(StringView(spacesstr, sizeof(spacesstr) - 1));
spaces -= static_cast<unsigned>(sizeof(spacesstr) - 1);
}
if (spaces == 0) return;
OutputString(StringView(spacesstr + sizeof(spacesstr) - 1 - spaces, spaces));
}
void JsonWriter::ValueEnd() {
if (container_empty_) {
container_empty_ = false;
if (indent_ == 0 || depth_ == 0) return;
OutputChar('\n');
} else {
OutputChar(',');
if (indent_ == 0) return;
OutputChar('\n');
}
}
void JsonWriter::EscapeUtf16(uint16_t utf16) {
static const char hex[] = "0123456789abcdef";
OutputString(StringView("\\u", 2));
OutputChar(hex[(utf16 >> 12) & 0x0f]);
OutputChar(hex[(utf16 >> 8) & 0x0f]);
OutputChar(hex[(utf16 >> 4) & 0x0f]);
OutputChar(hex[(utf16)&0x0f]);
}
void JsonWriter::EscapeString(const std::string& string) {
OutputChar('"');
for (size_t idx = 0; idx < string.size(); ++idx) {
uint8_t c = static_cast<uint8_t>(string[idx]);
if (c == 0) {
break;
} else if (c >= 32 && c <= 126) {
if (c == '\\' || c == '"') OutputChar('\\');
OutputChar(static_cast<char>(c));
} else if (c < 32 || c == 127) {
switch (c) {
case '\b':
OutputString(StringView("\\b", 2));
break;
case '\f':
OutputString(StringView("\\f", 2));
break;
case '\n':
OutputString(StringView("\\n", 2));
break;
case '\r':
OutputString(StringView("\\r", 2));
break;
case '\t':
OutputString(StringView("\\t", 2));
break;
default:
EscapeUtf16(c);
break;
}
} else {
uint32_t utf32 = 0;
int extra = 0;
int i;
int valid = 1;
if ((c & 0xe0) == 0xc0) {
utf32 = c & 0x1f;
extra = 1;
} else if ((c & 0xf0) == 0xe0) {
utf32 = c & 0x0f;
extra = 2;
} else if ((c & 0xf8) == 0xf0) {
utf32 = c & 0x07;
extra = 3;
} else {
break;
}
for (i = 0; i < extra; i++) {
utf32 <<= 6;
++idx;
/* Breaks out and bail if we hit the end of the string. */
if (idx == string.size()) {
valid = 0;
break;
}
c = static_cast<uint8_t>(string[idx]);
/* Breaks out and bail on any invalid UTF-8 sequence, including \0. */
if ((c & 0xc0) != 0x80) {
valid = 0;
break;
}
utf32 |= c & 0x3f;
}
if (!valid) break;
/* The range 0xd800 - 0xdfff is reserved by the surrogates ad vitam.
* Any other range is technically reserved for future usage, so if we
* don't want the software to break in the future, we have to allow
* anything else. The first non-unicode character is 0x110000. */
if (((utf32 >= 0xd800) && (utf32 <= 0xdfff)) || (utf32 >= 0x110000))
break;
if (utf32 >= 0x10000) {
/* If utf32 contains a character that is above 0xffff, it needs to be
* broken down into a utf-16 surrogate pair. A surrogate pair is first
* a high surrogate, followed by a low surrogate. Each surrogate holds
* 10 bits of usable data, thus allowing a total of 20 bits of data.
* The high surrogate marker is 0xd800, while the low surrogate marker
* is 0xdc00. The low 10 bits of each will be the usable data.
*
* After re-combining the 20 bits of data, one has to add 0x10000 to
* the resulting value, in order to obtain the original character.
* This is obviously because the range 0x0000 - 0xffff can be written
* without any special trick.
*
* Since 0x10ffff is the highest allowed character, we're working in
* the range 0x00000 - 0xfffff after we decrement it by 0x10000.
* That range is exactly 20 bits.
*/
utf32 -= 0x10000;
EscapeUtf16(static_cast<uint16_t>(0xd800 | (utf32 >> 10)));
EscapeUtf16(static_cast<uint16_t>(0xdc00 | (utf32 & 0x3ff)));
} else {
EscapeUtf16(static_cast<uint16_t>(utf32));
}
}
}
OutputChar('"');
}
void JsonWriter::ContainerBegins(Json::Type type) {
if (!got_key_) ValueEnd();
OutputIndent();
OutputChar(type == Json::Type::OBJECT ? '{' : '[');
container_empty_ = true;
got_key_ = false;
depth_++;
}
void JsonWriter::ContainerEnds(Json::Type type) {
if (indent_ && !container_empty_) OutputChar('\n');
depth_--;
if (!container_empty_) OutputIndent();
OutputChar(type == Json::Type::OBJECT ? '}' : ']');
container_empty_ = false;
got_key_ = false;
}
void JsonWriter::ObjectKey(const std::string& string) {
ValueEnd();
OutputIndent();
EscapeString(string);
OutputChar(':');
got_key_ = true;
}
void JsonWriter::ValueRaw(const std::string& string) {
if (!got_key_) ValueEnd();
OutputIndent();
OutputString(string);
got_key_ = false;
}
void JsonWriter::ValueString(const std::string& string) {
if (!got_key_) ValueEnd();
OutputIndent();
EscapeString(string);
got_key_ = false;
}
void JsonWriter::DumpObject(const Json::Object& object) {
ContainerBegins(Json::Type::OBJECT);
for (const auto& p : object) {
ObjectKey(p.first.data());
DumpValue(p.second);
}
ContainerEnds(Json::Type::OBJECT);
}
void JsonWriter::DumpArray(const Json::Array& array) {
ContainerBegins(Json::Type::ARRAY);
for (const auto& v : array) {
DumpValue(v);
}
ContainerEnds(Json::Type::ARRAY);
}
void JsonWriter::DumpValue(const Json& value) {
switch (value.type()) {
case Json::Type::OBJECT:
DumpObject(value.object_value());
break;
case Json::Type::ARRAY:
DumpArray(value.array_value());
break;
case Json::Type::STRING:
ValueString(value.string_value());
break;
case Json::Type::NUMBER:
ValueRaw(value.string_value());
break;
case Json::Type::JSON_TRUE:
ValueRaw(std::string("true", 4));
break;
case Json::Type::JSON_FALSE:
ValueRaw(std::string("false", 5));
break;
case Json::Type::JSON_NULL:
ValueRaw(std::string("null", 4));
break;
default:
GPR_UNREACHABLE_CODE(abort());
}
}
std::string JsonWriter::Dump(const Json& value, int indent) {
JsonWriter writer(indent);
writer.DumpValue(value);
return std::move(writer.output_);
}
} // namespace
std::string Json::Dump(int indent) const {
return JsonWriter::Dump(*this, indent);
}
} // namespace grpc_core

File diff suppressed because it is too large Load Diff

@ -39,12 +39,6 @@ CompletionQueue::CompletionQueue(grpc_completion_queue* take)
void CompletionQueue::Shutdown() {
g_gli_initializer.summon();
#ifndef NDEBUG
if (!ServerListEmpty()) {
gpr_log(GPR_ERROR,
"CompletionQueue shutdown being shutdown before its server.");
}
#endif
CompleteAvalanching();
}

@ -16,18 +16,19 @@
*
*/
#include <grpc/support/alloc.h>
#include <grpcpp/security/tls_credentials_options.h>
#include "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h"
#include <grpc/support/alloc.h>
#include "src/cpp/common/tls_credentials_options_util.h"
namespace grpc_impl {
namespace experimental {
/** TLS key materials config API implementation **/
void TlsKeyMaterialsConfig::set_pem_root_certs(
const grpc::string& pem_root_certs) {
pem_root_certs_ = pem_root_certs;
void TlsKeyMaterialsConfig::set_pem_root_certs(grpc::string pem_root_certs) {
pem_root_certs_ = std::move(pem_root_certs);
}
void TlsKeyMaterialsConfig::add_pem_key_cert_pair(
@ -36,10 +37,10 @@ void TlsKeyMaterialsConfig::add_pem_key_cert_pair(
}
void TlsKeyMaterialsConfig::set_key_materials(
const grpc::string& pem_root_certs,
const std::vector<PemKeyCertPair>& pem_key_cert_pair_list) {
pem_key_cert_pair_list_ = pem_key_cert_pair_list;
pem_root_certs_ = pem_root_certs;
grpc::string pem_root_certs,
std::vector<PemKeyCertPair> pem_key_cert_pair_list) {
pem_key_cert_pair_list_ = std::move(pem_key_cert_pair_list);
pem_root_certs_ = std::move(pem_root_certs);
}
/** TLS credential reload arg API implementation **/
@ -58,6 +59,7 @@ TlsCredentialReloadArg::~TlsCredentialReloadArg() {}
void* TlsCredentialReloadArg::cb_user_data() const {
return c_arg_->cb_user_data;
}
bool TlsCredentialReloadArg::is_pem_key_cert_pair_list_empty() const {
return c_arg_->key_materials_config->pem_key_cert_pair_list().empty();
}
@ -83,46 +85,17 @@ void TlsCredentialReloadArg::set_pem_root_certs(
c_arg_->key_materials_config->set_pem_root_certs(std::move(c_pem_root_certs));
}
namespace {
::grpc_core::PemKeyCertPair ConvertToCorePemKeyCertPair(
const TlsKeyMaterialsConfig::PemKeyCertPair& pem_key_cert_pair) {
void TlsCredentialReloadArg::add_pem_key_cert_pair(
TlsKeyMaterialsConfig::PemKeyCertPair pem_key_cert_pair) {
grpc_ssl_pem_key_cert_pair* ssl_pair =
(grpc_ssl_pem_key_cert_pair*)gpr_malloc(
sizeof(grpc_ssl_pem_key_cert_pair));
ssl_pair->private_key = gpr_strdup(pem_key_cert_pair.private_key.c_str());
ssl_pair->cert_chain = gpr_strdup(pem_key_cert_pair.cert_chain.c_str());
return ::grpc_core::PemKeyCertPair(ssl_pair);
}
} // namespace
void TlsCredentialReloadArg::add_pem_key_cert_pair(
const TlsKeyMaterialsConfig::PemKeyCertPair& pem_key_cert_pair) {
::grpc_core::PemKeyCertPair c_pem_key_cert_pair =
::grpc_core::PemKeyCertPair(ssl_pair);
c_arg_->key_materials_config->add_pem_key_cert_pair(
ConvertToCorePemKeyCertPair(pem_key_cert_pair));
}
void TlsCredentialReloadArg::set_key_materials(
const grpc::string& pem_root_certs,
std::vector<TlsKeyMaterialsConfig::PemKeyCertPair> pem_key_cert_pair_list) {
/** Initialize the |key_materials_config| field of |c_arg_|, if it has not
* already been done. **/
if (c_arg_->key_materials_config == nullptr) {
c_arg_->key_materials_config = grpc_tls_key_materials_config_create();
}
/** Convert |pem_key_cert_pair_list| to an inlined vector of ssl pairs. **/
::grpc_core::InlinedVector<::grpc_core::PemKeyCertPair, 1>
c_pem_key_cert_pair_list;
for (const auto& key_cert_pair : pem_key_cert_pair_list) {
c_pem_key_cert_pair_list.emplace_back(
ConvertToCorePemKeyCertPair(key_cert_pair));
}
/** Populate the key materials config field of |c_arg_|. **/
::grpc_core::UniquePtr<char> c_pem_root_certs(
gpr_strdup(pem_root_certs.c_str()));
c_arg_->key_materials_config->set_key_materials(std::move(c_pem_root_certs),
c_pem_key_cert_pair_list);
std::move(c_pem_key_cert_pair));
}
void TlsCredentialReloadArg::set_key_materials_config(
@ -315,11 +288,6 @@ TlsCredentialsOptions::TlsCredentialsOptions(
c_credentials_options_, server_verification_option);
}
/** Whenever a TlsCredentialsOptions instance is created, the caller takes
* ownership of the c_credentials_options_ pointer (see e.g. the implementation
* of the TlsCredentials API in secure_credentials.cc). For this reason, the
* TlsCredentialsOptions destructor is not responsible for freeing
* c_credentials_options_. **/
TlsCredentialsOptions::~TlsCredentialsOptions() {}
} // namespace experimental

@ -354,8 +354,9 @@ std::unique_ptr<grpc::Server> ServerBuilder::BuildAndStart() {
// server
// 2. cqs_: Completion queues added via AddCompletionQueue() call
for (const auto& cq : *sync_server_cqs) {
grpc_server_register_completion_queue(server->server_, cq->cq(), nullptr);
for (const auto& value : *sync_server_cqs) {
grpc_server_register_completion_queue(server->server_, value->cq(),
nullptr);
has_frequently_polled_cqs = true;
}
@ -368,12 +369,10 @@ std::unique_ptr<grpc::Server> ServerBuilder::BuildAndStart() {
// AddCompletionQueue() API. Some of them may not be frequently polled (i.e by
// calling Next() or AsyncNext()) and hence are not safe to be used for
// listening to incoming channels. Such completion queues must be registered
// as non-listening queues. In debug mode, these should have their server list
// tracked since these are provided the user and must be Shutdown by the user
// after the server is shutdown.
for (const auto& cq : cqs_) {
grpc_server_register_completion_queue(server->server_, cq->cq(), nullptr);
cq->RegisterServer(server.get());
// as non-listening queues
for (const auto& value : cqs_) {
grpc_server_register_completion_queue(server->server_, value->cq(),
nullptr);
}
if (!has_frequently_polled_cqs) {

@ -1249,9 +1249,6 @@ void Server::Start(grpc::ServerCompletionQueue** cqs, size_t num_cqs) {
}
for (size_t i = 0; i < num_cqs; i++) {
#ifndef NDEBUG
cq_list_.push_back(cqs[i]);
#endif
if (cqs[i]->IsFrequentlyPolled()) {
new UnimplementedAsyncRequest(this, cqs[i]);
}
@ -1363,15 +1360,6 @@ void Server::ShutdownInternal(gpr_timespec deadline) {
shutdown_notified_ = true;
shutdown_cv_.Broadcast();
#ifndef NDEBUG
// Unregister this server with the CQs passed into it by the user so that
// those can be checked for properly-ordered shutdown.
for (auto* cq : cq_list_) {
cq->UnregisterServer(this);
}
cq_list_.clear();
#endif
}
void Server::Wait() {

@ -272,8 +272,7 @@ void ServerContextBase::Clear() {
grpc_call_unref(call);
}
if (default_reactor_used_.load(std::memory_order_relaxed)) {
default_reactor_.~Reactor();
new (&default_reactor_) Reactor;
reinterpret_cast<Reactor*>(&default_reactor_)->~Reactor();
default_reactor_used_.store(false, std::memory_order_relaxed);
}
test_unary_.reset();

@ -32,19 +32,21 @@ namespace Grpc.IntegrationTesting
public class MetadataCredentialsTest
{
const string Host = "localhost";
FakeTestService serviceImpl;
Server server;
Channel channel;
TestService.TestServiceClient client;
List<ChannelOption> options;
AsyncAuthInterceptor asyncAuthInterceptor;
[SetUp]
public void Init()
{
serviceImpl = new FakeTestService();
// Disable SO_REUSEPORT to prevent https://github.com/grpc/grpc/issues/10755
server = new Server(new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) })
{
Services = { TestService.BindService(new FakeTestService()) },
Services = { TestService.BindService(serviceImpl) },
Ports = { { Host, ServerPort.PickUnused, TestCredentials.CreateSslServerCredentials() } }
};
server.Start();
@ -53,12 +55,6 @@ namespace Grpc.IntegrationTesting
{
new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
};
asyncAuthInterceptor = new AsyncAuthInterceptor(async (context, metadata) =>
{
await Task.Delay(100).ConfigureAwait(false); // make sure the operation is asynchronous.
metadata.Add("authorization", "SECRET_TOKEN");
});
}
[TearDown]
@ -69,8 +65,21 @@ namespace Grpc.IntegrationTesting
}
[Test]
public void MetadataCredentials()
public void MetadataCredentials_Channel()
{
serviceImpl.UnaryCallHandler = (req, context) =>
{
var authToken = context.RequestHeaders.First((entry) => entry.Key == "authorization").Value;
Assert.AreEqual("SECRET_TOKEN", authToken);
return Task.FromResult(new SimpleResponse());
};
var asyncAuthInterceptor = new AsyncAuthInterceptor(async (context, metadata) =>
{
await Task.Delay(100).ConfigureAwait(false); // make sure the operation is asynchronous.
metadata.Add("authorization", "SECRET_TOKEN");
});
var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(),
CallCredentials.FromInterceptor(asyncAuthInterceptor));
channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options);
@ -82,6 +91,19 @@ namespace Grpc.IntegrationTesting
[Test]
public void MetadataCredentials_PerCall()
{
serviceImpl.UnaryCallHandler = (req, context) =>
{
var authToken = context.RequestHeaders.First((entry) => entry.Key == "authorization").Value;
Assert.AreEqual("SECRET_TOKEN", authToken);
return Task.FromResult(new SimpleResponse());
};
var asyncAuthInterceptor = new AsyncAuthInterceptor(async (context, metadata) =>
{
await Task.Delay(100).ConfigureAwait(false); // make sure the operation is asynchronous.
metadata.Add("authorization", "SECRET_TOKEN");
});
channel = new Channel(Host, server.Ports.Single().BoundPort, TestCredentials.CreateSslCredentials(), options);
client = new TestService.TestServiceClient(channel);
@ -89,9 +111,53 @@ namespace Grpc.IntegrationTesting
client.UnaryCall(new SimpleRequest { }, new CallOptions(credentials: callCredentials));
}
[Test]
public void MetadataCredentials_BothChannelAndPerCall()
{
serviceImpl.UnaryCallHandler = (req, context) =>
{
var firstAuth = context.RequestHeaders.First((entry) => entry.Key == "first_authorization").Value;
Assert.AreEqual("FIRST_SECRET_TOKEN", firstAuth);
var secondAuth = context.RequestHeaders.First((entry) => entry.Key == "second_authorization").Value;
Assert.AreEqual("SECOND_SECRET_TOKEN", secondAuth);
// both values of "duplicate_authorization" are sent
Assert.AreEqual("value1", context.RequestHeaders.First((entry) => entry.Key == "duplicate_authorization").Value);
Assert.AreEqual("value2", context.RequestHeaders.Last((entry) => entry.Key == "duplicate_authorization").Value);
return Task.FromResult(new SimpleResponse());
};
var channelCallCredentials = CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => {
metadata.Add("first_authorization", "FIRST_SECRET_TOKEN");
metadata.Add("duplicate_authorization", "value1");
return TaskUtils.CompletedTask;
}));
var perCallCredentials = CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => {
metadata.Add("second_authorization", "SECOND_SECRET_TOKEN");
metadata.Add("duplicate_authorization", "value2");
return TaskUtils.CompletedTask;
}));
var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(), channelCallCredentials);
channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options);
client = new TestService.TestServiceClient(channel);
client.UnaryCall(new SimpleRequest { }, new CallOptions(credentials: perCallCredentials));
}
[Test]
public async Task MetadataCredentials_Composed()
{
serviceImpl.StreamingOutputCallHandler = async (req, responseStream, context) =>
{
var firstAuth = context.RequestHeaders.Last((entry) => entry.Key == "first_authorization").Value;
Assert.AreEqual("FIRST_SECRET_TOKEN", firstAuth);
var secondAuth = context.RequestHeaders.First((entry) => entry.Key == "second_authorization").Value;
Assert.AreEqual("SECOND_SECRET_TOKEN", secondAuth);
var thirdAuth = context.RequestHeaders.First((entry) => entry.Key == "third_authorization").Value;
Assert.AreEqual("THIRD_SECRET_TOKEN", thirdAuth);
await responseStream.WriteAsync(new StreamingOutputCallResponse());
};
var first = CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => {
// Attempt to exercise the case where async callback is inlineable/synchronously-runnable.
metadata.Add("first_authorization", "FIRST_SECRET_TOKEN");
@ -117,6 +183,15 @@ namespace Grpc.IntegrationTesting
[Test]
public async Task MetadataCredentials_ComposedPerCall()
{
serviceImpl.StreamingOutputCallHandler = async (req, responseStream, context) =>
{
var firstAuth = context.RequestHeaders.Last((entry) => entry.Key == "first_authorization").Value;
Assert.AreEqual("FIRST_SECRET_TOKEN", firstAuth);
var secondAuth = context.RequestHeaders.First((entry) => entry.Key == "second_authorization").Value;
Assert.AreEqual("SECOND_SECRET_TOKEN", secondAuth);
await responseStream.WriteAsync(new StreamingOutputCallResponse());
};
channel = new Channel(Host, server.Ports.Single().BoundPort, TestCredentials.CreateSslCredentials(), options);
var client = new TestService.TestServiceClient(channel);
var first = CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => {
@ -127,12 +202,8 @@ namespace Grpc.IntegrationTesting
metadata.Add("second_authorization", "SECOND_SECRET_TOKEN");
return TaskUtils.CompletedTask;
}));
var third = CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => {
metadata.Add("third_authorization", "THIRD_SECRET_TOKEN");
return TaskUtils.CompletedTask;
}));
var call = client.StreamingOutputCall(new StreamingOutputCallRequest{ },
new CallOptions(credentials: CallCredentials.Compose(first, second, third)));
new CallOptions(credentials: CallCredentials.Compose(first, second)));
Assert.IsTrue(await call.ResponseStream.MoveNext());
Assert.IsFalse(await call.ResponseStream.MoveNext());
}
@ -140,14 +211,17 @@ namespace Grpc.IntegrationTesting
[Test]
public void MetadataCredentials_InterceptorLeavesMetadataEmpty()
{
serviceImpl.UnaryCallHandler = (req, context) =>
{
var authHeaderCount = context.RequestHeaders.Count((entry) => entry.Key == "authorization");
Assert.AreEqual(0, authHeaderCount);
return Task.FromResult(new SimpleResponse());
};
var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(),
CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => TaskUtils.CompletedTask)));
channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options);
client = new TestService.TestServiceClient(channel);
var ex = Assert.Throws<RpcException>(() => client.UnaryCall(new SimpleRequest { }));
// StatusCode.Unknown as the server-side handler throws an exception after not receiving the authorization header.
Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode);
client.UnaryCall(new SimpleRequest { });
}
[Test]
@ -169,22 +243,26 @@ namespace Grpc.IntegrationTesting
private class FakeTestService : TestService.TestServiceBase
{
public UnaryServerMethod<SimpleRequest, SimpleResponse> UnaryCallHandler;
public ServerStreamingServerMethod<StreamingOutputCallRequest, StreamingOutputCallResponse> StreamingOutputCallHandler;
public override Task<SimpleResponse> UnaryCall(SimpleRequest request, ServerCallContext context)
{
var authToken = context.RequestHeaders.First((entry) => entry.Key == "authorization").Value;
Assert.AreEqual("SECRET_TOKEN", authToken);
return Task.FromResult(new SimpleResponse());
if (UnaryCallHandler != null)
{
return UnaryCallHandler(request, context);
}
return base.UnaryCall(request, context);
}
public override async Task StreamingOutputCall(StreamingOutputCallRequest request, IServerStreamWriter<StreamingOutputCallResponse> responseStream, ServerCallContext context)
public override Task StreamingOutputCall(StreamingOutputCallRequest request, IServerStreamWriter<StreamingOutputCallResponse> responseStream, ServerCallContext context)
{
var first = context.RequestHeaders.First((entry) => entry.Key == "first_authorization").Value;
Assert.AreEqual("FIRST_SECRET_TOKEN", first);
var second = context.RequestHeaders.First((entry) => entry.Key == "second_authorization").Value;
Assert.AreEqual("SECOND_SECRET_TOKEN", second);
var third = context.RequestHeaders.First((entry) => entry.Key == "third_authorization").Value;
Assert.AreEqual("THIRD_SECRET_TOKEN", third);
await responseStream.WriteAsync(new StreamingOutputCallResponse());
if (StreamingOutputCallHandler != null)
{
return StreamingOutputCallHandler(request, responseStream, context);
}
return base.StreamingOutputCall(request, responseStream, context);
}
}
}

File diff suppressed because it is too large Load Diff

@ -56,20 +56,22 @@ const grpc_completion_queue_attributes kCompletionQueueAttr = {
});
dispatch_async(gDefaultConcurrentQueue, ^{
while (YES) {
// The following call blocks until an event is available.
grpc_event event =
grpc_completion_queue_next(unmanagedQueue, gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
GRPCQueueCompletionHandler handler;
switch (event.type) {
case GRPC_OP_COMPLETE:
handler = (__bridge_transfer GRPCQueueCompletionHandler)event.tag;
handler(event.success);
break;
case GRPC_QUEUE_SHUTDOWN:
grpc_completion_queue_destroy(unmanagedQueue);
return;
default:
[NSException raise:@"Unrecognized completion type" format:@""];
@autoreleasepool {
// The following call blocks until an event is available.
grpc_event event =
grpc_completion_queue_next(unmanagedQueue, gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
GRPCQueueCompletionHandler handler;
switch (event.type) {
case GRPC_OP_COMPLETE:
handler = (__bridge_transfer GRPCQueueCompletionHandler)event.tag;
handler(event.success);
break;
case GRPC_QUEUE_SHUTDOWN:
grpc_completion_queue_destroy(unmanagedQueue);
return;
default:
[NSException raise:@"Unrecognized completion type" format:@""];
}
}
};
});

File diff suppressed because it is too large Load Diff

@ -26,9 +26,10 @@ grpc_package(
exports_files([
"echo.proto",
"echo_messages.proto",
"test.proto",
"empty.proto",
"messages.proto",
"simple_messages.proto",
"test.proto",
])
grpc_proto_library(

@ -215,6 +215,8 @@ class BuildExt(build_ext.build_ext):
"""Test if default compiler is okay with specifying c++ version
when invoked in C mode. GCC is okay with this, while clang is not.
"""
if platform.system() != 'Windows':
return False
# TODO(lidiz) Remove the generated a.out for success tests.
cc_test = subprocess.Popen(['cc', '-x', 'c', '-std=c++11', '-'],
stdin=subprocess.PIPE,

@ -14,7 +14,9 @@
def _spawn_callback_in_thread(cb_func, args):
ForkManagedThread(target=cb_func, args=args).start()
t = ForkManagedThread(target=cb_func, args=args)
t.setDaemon(True)
t.start()
async_callback_func = _spawn_callback_in_thread

@ -15,15 +15,15 @@
import asyncio
from functools import partial
from typing import AsyncIterable, Dict, Optional
from typing import AsyncIterable, Awaitable, Dict, Optional
import grpc
from grpc import _common
from grpc._cython import cygrpc
from . import _base_call
from ._typing import (DeserializingFunction, MetadataType, RequestType,
ResponseType, SerializingFunction, DoneCallbackType)
from ._typing import (DeserializingFunction, DoneCallbackType, MetadataType,
RequestType, ResponseType, SerializingFunction)
__all__ = 'AioRpcError', 'Call', 'UnaryUnaryCall', 'UnaryStreamCall'
@ -145,7 +145,7 @@ def _create_rpc_error(initial_metadata: Optional[MetadataType],
status.trailing_metadata())
class Call(_base_call.Call):
class Call:
"""Base implementation of client RPC Call object.
Implements logic around final status, metadata and cancellation.
@ -153,11 +153,19 @@ class Call(_base_call.Call):
_loop: asyncio.AbstractEventLoop
_code: grpc.StatusCode
_cython_call: cygrpc._AioCall
_metadata: MetadataType
_request_serializer: SerializingFunction
_response_deserializer: DeserializingFunction
def __init__(self, cython_call: cygrpc._AioCall,
def __init__(self, cython_call: cygrpc._AioCall, metadata: MetadataType,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
loop: asyncio.AbstractEventLoop) -> None:
self._loop = loop
self._cython_call = cython_call
self._metadata = metadata
self._request_serializer = request_serializer
self._response_deserializer = response_deserializer
def __del__(self) -> None:
if not self._cython_call.done():
@ -221,63 +229,24 @@ class Call(_base_call.Call):
return self._repr()
class UnaryUnaryCall(Call, _base_call.UnaryUnaryCall):
"""Object for managing unary-unary RPC calls.
Returned when an instance of `UnaryUnaryMultiCallable` object is called.
"""
_request: RequestType
_metadata: Optional[MetadataType]
_request_serializer: SerializingFunction
_response_deserializer: DeserializingFunction
_call: asyncio.Task
class _UnaryResponseMixin(Call):
_call_response: asyncio.Task
# pylint: disable=too-many-arguments
def __init__(self, request: RequestType, deadline: Optional[float],
metadata: MetadataType,
credentials: Optional[grpc.CallCredentials],
channel: cygrpc.AioChannel, method: bytes,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
loop: asyncio.AbstractEventLoop) -> None:
super().__init__(channel.call(method, deadline, credentials), loop)
self._request = request
self._metadata = metadata
self._request_serializer = request_serializer
self._response_deserializer = response_deserializer
self._call = loop.create_task(self._invoke())
def _init_unary_response_mixin(self,
response_coro: Awaitable[ResponseType]):
self._call_response = self._loop.create_task(response_coro)
def cancel(self) -> bool:
if super().cancel():
self._call.cancel()
self._call_response.cancel()
return True
else:
return False
async def _invoke(self) -> ResponseType:
serialized_request = _common.serialize(self._request,
self._request_serializer)
# NOTE(lidiz) asyncio.CancelledError is not a good transport for status,
# because the asyncio.Task class do not cache the exception object.
# https://github.com/python/cpython/blob/edad4d89e357c92f70c0324b937845d652b20afd/Lib/asyncio/tasks.py#L785
try:
serialized_response = await self._cython_call.unary_unary(
serialized_request, self._metadata)
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
# Raises here if RPC failed or cancelled
await self._raise_for_status()
return _common.deserialize(serialized_response,
self._response_deserializer)
def __await__(self) -> ResponseType:
"""Wait till the ongoing RPC request finishes."""
try:
response = yield from self._call
response = yield from self._call_response
except asyncio.CancelledError:
# Even if we caught all other CancelledError, there is still
# this corner case. If the application cancels immediately after
@ -289,53 +258,21 @@ class UnaryUnaryCall(Call, _base_call.UnaryUnaryCall):
return response
class UnaryStreamCall(Call, _base_call.UnaryStreamCall):
"""Object for managing unary-stream RPC calls.
Returned when an instance of `UnaryStreamMultiCallable` object is called.
"""
_request: RequestType
_metadata: MetadataType
_request_serializer: SerializingFunction
_response_deserializer: DeserializingFunction
_send_unary_request_task: asyncio.Task
class _StreamResponseMixin(Call):
_message_aiter: AsyncIterable[ResponseType]
_preparation: asyncio.Task
# pylint: disable=too-many-arguments
def __init__(self, request: RequestType, deadline: Optional[float],
metadata: MetadataType,
credentials: Optional[grpc.CallCredentials],
channel: cygrpc.AioChannel, method: bytes,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
loop: asyncio.AbstractEventLoop) -> None:
super().__init__(channel.call(method, deadline, credentials), loop)
self._request = request
self._metadata = metadata
self._request_serializer = request_serializer
self._response_deserializer = response_deserializer
self._send_unary_request_task = loop.create_task(
self._send_unary_request())
def _init_stream_response_mixin(self, preparation: asyncio.Task):
self._message_aiter = None
self._preparation = preparation
def cancel(self) -> bool:
if super().cancel():
self._send_unary_request_task.cancel()
self._preparation.cancel()
return True
else:
return False
async def _send_unary_request(self) -> ResponseType:
serialized_request = _common.serialize(self._request,
self._request_serializer)
try:
await self._cython_call.initiate_unary_stream(
serialized_request, self._metadata)
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
raise
async def _fetch_stream_responses(self) -> ResponseType:
message = await self._read()
while message is not cygrpc.EOF:
@ -349,7 +286,7 @@ class UnaryStreamCall(Call, _base_call.UnaryStreamCall):
async def _read(self) -> ResponseType:
# Wait for the request being sent
await self._send_unary_request_task
await self._preparation
# Reads response message from Core
try:
@ -366,7 +303,7 @@ class UnaryStreamCall(Call, _base_call.UnaryStreamCall):
self._response_deserializer)
async def read(self) -> ResponseType:
if self._cython_call.done():
if self.done():
await self._raise_for_status()
return cygrpc.EOF
@ -378,39 +315,16 @@ class UnaryStreamCall(Call, _base_call.UnaryStreamCall):
return response_message
class StreamUnaryCall(Call, _base_call.StreamUnaryCall):
"""Object for managing stream-unary RPC calls.
Returned when an instance of `StreamUnaryMultiCallable` object is called.
"""
_metadata: MetadataType
_request_serializer: SerializingFunction
_response_deserializer: DeserializingFunction
class _StreamRequestMixin(Call):
_metadata_sent: asyncio.Event
_done_writing: bool
_call_finisher: asyncio.Task
_async_request_poller: asyncio.Task
# pylint: disable=too-many-arguments
def __init__(self,
request_async_iterator: Optional[AsyncIterable[RequestType]],
deadline: Optional[float], metadata: MetadataType,
credentials: Optional[grpc.CallCredentials],
channel: cygrpc.AioChannel, method: bytes,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
loop: asyncio.AbstractEventLoop) -> None:
super().__init__(channel.call(method, deadline, credentials), loop)
self._metadata = metadata
self._request_serializer = request_serializer
self._response_deserializer = response_deserializer
_async_request_poller: Optional[asyncio.Task]
self._metadata_sent = asyncio.Event(loop=loop)
def _init_stream_request_mixin(
self, request_async_iterator: Optional[AsyncIterable[RequestType]]):
self._metadata_sent = asyncio.Event(loop=self._loop)
self._done_writing = False
self._call_finisher = loop.create_task(self._conduct_rpc())
# If user passes in an async iterator, create a consumer Task.
if request_async_iterator is not None:
self._async_request_poller = self._loop.create_task(
@ -420,7 +334,6 @@ class StreamUnaryCall(Call, _base_call.StreamUnaryCall):
def cancel(self) -> bool:
if super().cancel():
self._call_finisher.cancel()
if self._async_request_poller is not None:
self._async_request_poller.cancel()
return True
@ -430,38 +343,14 @@ class StreamUnaryCall(Call, _base_call.StreamUnaryCall):
def _metadata_sent_observer(self):
self._metadata_sent.set()
async def _conduct_rpc(self) -> ResponseType:
try:
serialized_response = await self._cython_call.stream_unary(
self._metadata, self._metadata_sent_observer)
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
# Raises RpcError if the RPC failed or cancelled
await self._raise_for_status()
return _common.deserialize(serialized_response,
self._response_deserializer)
async def _consume_request_iterator(
self, request_async_iterator: AsyncIterable[RequestType]) -> None:
async for request in request_async_iterator:
await self.write(request)
await self.done_writing()
def __await__(self) -> ResponseType:
"""Wait till the ongoing RPC request finishes."""
try:
response = yield from self._call_finisher
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
raise
return response
async def write(self, request: RequestType) -> None:
if self._cython_call.done():
if self.done():
raise asyncio.InvalidStateError(_RPC_ALREADY_FINISHED_DETAILS)
if self._done_writing:
raise asyncio.InvalidStateError(_RPC_HALF_CLOSED_DETAILS)
@ -480,7 +369,7 @@ class StreamUnaryCall(Call, _base_call.StreamUnaryCall):
async def done_writing(self) -> None:
"""Implementation of done_writing is idempotent."""
if self._cython_call.done():
if self.done():
# If the RPC is finished, do nothing.
return
if not self._done_writing:
@ -494,152 +383,152 @@ class StreamUnaryCall(Call, _base_call.StreamUnaryCall):
await self._raise_for_status()
class StreamStreamCall(Call, _base_call.StreamStreamCall):
"""Object for managing stream-stream RPC calls.
class UnaryUnaryCall(_UnaryResponseMixin, Call, _base_call.UnaryUnaryCall):
"""Object for managing unary-unary RPC calls.
Returned when an instance of `StreamStreamMultiCallable` object is called.
Returned when an instance of `UnaryUnaryMultiCallable` object is called.
"""
_metadata: MetadataType
_request_serializer: SerializingFunction
_response_deserializer: DeserializingFunction
_metadata_sent: asyncio.Event
_done_writing: bool
_initializer: asyncio.Task
_async_request_poller: asyncio.Task
_message_aiter: AsyncIterable[ResponseType]
_request: RequestType
# pylint: disable=too-many-arguments
def __init__(self,
request_async_iterator: Optional[AsyncIterable[RequestType]],
deadline: Optional[float], metadata: MetadataType,
def __init__(self, request: RequestType, deadline: Optional[float],
metadata: MetadataType,
credentials: Optional[grpc.CallCredentials],
channel: cygrpc.AioChannel, method: bytes,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
loop: asyncio.AbstractEventLoop) -> None:
super().__init__(channel.call(method, deadline, credentials), loop)
self._metadata = metadata
self._request_serializer = request_serializer
self._response_deserializer = response_deserializer
super().__init__(channel.call(method, deadline, credentials), metadata,
request_serializer, response_deserializer, loop)
self._request = request
self._init_unary_response_mixin(self._invoke())
self._metadata_sent = asyncio.Event(loop=loop)
self._done_writing = False
async def _invoke(self) -> ResponseType:
serialized_request = _common.serialize(self._request,
self._request_serializer)
self._initializer = self._loop.create_task(self._prepare_rpc())
# NOTE(lidiz) asyncio.CancelledError is not a good transport for status,
# because the asyncio.Task class do not cache the exception object.
# https://github.com/python/cpython/blob/edad4d89e357c92f70c0324b937845d652b20afd/Lib/asyncio/tasks.py#L785
try:
serialized_response = await self._cython_call.unary_unary(
serialized_request, self._metadata)
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
# If user passes in an async iterator, create a consumer coroutine.
if request_async_iterator is not None:
self._async_request_poller = loop.create_task(
self._consume_request_iterator(request_async_iterator))
else:
self._async_request_poller = None
self._message_aiter = None
# Raises here if RPC failed or cancelled
await self._raise_for_status()
def cancel(self) -> bool:
if super().cancel():
self._initializer.cancel()
if self._async_request_poller is not None:
self._async_request_poller.cancel()
return True
else:
return False
return _common.deserialize(serialized_response,
self._response_deserializer)
def _metadata_sent_observer(self):
self._metadata_sent.set()
async def _prepare_rpc(self):
"""This method prepares the RPC for receiving/sending messages.
class UnaryStreamCall(_StreamResponseMixin, Call, _base_call.UnaryStreamCall):
"""Object for managing unary-stream RPC calls.
All other operations around the stream should only happen after the
completion of this method.
"""
Returned when an instance of `UnaryStreamMultiCallable` object is called.
"""
_request: RequestType
_send_unary_request_task: asyncio.Task
# pylint: disable=too-many-arguments
def __init__(self, request: RequestType, deadline: Optional[float],
metadata: MetadataType,
credentials: Optional[grpc.CallCredentials],
channel: cygrpc.AioChannel, method: bytes,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
loop: asyncio.AbstractEventLoop) -> None:
super().__init__(channel.call(method, deadline, credentials), metadata,
request_serializer, response_deserializer, loop)
self._request = request
self._send_unary_request_task = loop.create_task(
self._send_unary_request())
self._init_stream_response_mixin(self._send_unary_request_task)
async def _send_unary_request(self) -> ResponseType:
serialized_request = _common.serialize(self._request,
self._request_serializer)
try:
await self._cython_call.initiate_stream_stream(
self._metadata, self._metadata_sent_observer)
await self._cython_call.initiate_unary_stream(
serialized_request, self._metadata)
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
# No need to raise RpcError here, because no one will `await` this task.
raise
async def _consume_request_iterator(
self, request_async_iterator: Optional[AsyncIterable[RequestType]]
) -> None:
async for request in request_async_iterator:
await self.write(request)
await self.done_writing()
async def write(self, request: RequestType) -> None:
if self._cython_call.done():
raise asyncio.InvalidStateError(_RPC_ALREADY_FINISHED_DETAILS)
if self._done_writing:
raise asyncio.InvalidStateError(_RPC_HALF_CLOSED_DETAILS)
if not self._metadata_sent.is_set():
await self._metadata_sent.wait()
class StreamUnaryCall(_StreamRequestMixin, _UnaryResponseMixin, Call,
_base_call.StreamUnaryCall):
"""Object for managing stream-unary RPC calls.
serialized_request = _common.serialize(request,
self._request_serializer)
Returned when an instance of `StreamUnaryMultiCallable` object is called.
"""
# pylint: disable=too-many-arguments
def __init__(self,
request_async_iterator: Optional[AsyncIterable[RequestType]],
deadline: Optional[float], metadata: MetadataType,
credentials: Optional[grpc.CallCredentials],
channel: cygrpc.AioChannel, method: bytes,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
loop: asyncio.AbstractEventLoop) -> None:
super().__init__(channel.call(method, deadline, credentials), metadata,
request_serializer, response_deserializer, loop)
self._init_stream_request_mixin(request_async_iterator)
self._init_unary_response_mixin(self._conduct_rpc())
async def _conduct_rpc(self) -> ResponseType:
try:
await self._cython_call.send_serialized_message(serialized_request)
serialized_response = await self._cython_call.stream_unary(
self._metadata, self._metadata_sent_observer)
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
await self._raise_for_status()
async def done_writing(self) -> None:
"""Implementation of done_writing is idempotent."""
if self._cython_call.done():
# If the RPC is finished, do nothing.
return
if not self._done_writing:
# If the done writing is not sent before, try to send it.
self._done_writing = True
try:
await self._cython_call.send_receive_close()
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
await self._raise_for_status()
# Raises RpcError if the RPC failed or cancelled
await self._raise_for_status()
async def _fetch_stream_responses(self) -> ResponseType:
"""The async generator that yields responses from peer."""
message = await self._read()
while message is not cygrpc.EOF:
yield message
message = await self._read()
return _common.deserialize(serialized_response,
self._response_deserializer)
def __aiter__(self) -> AsyncIterable[ResponseType]:
if self._message_aiter is None:
self._message_aiter = self._fetch_stream_responses()
return self._message_aiter
async def _read(self) -> ResponseType:
# Wait for the setup
await self._initializer
class StreamStreamCall(_StreamRequestMixin, _StreamResponseMixin, Call,
_base_call.StreamStreamCall):
"""Object for managing stream-stream RPC calls.
# Reads response message from Core
Returned when an instance of `StreamStreamMultiCallable` object is called.
"""
_initializer: asyncio.Task
# pylint: disable=too-many-arguments
def __init__(self,
request_async_iterator: Optional[AsyncIterable[RequestType]],
deadline: Optional[float], metadata: MetadataType,
credentials: Optional[grpc.CallCredentials],
channel: cygrpc.AioChannel, method: bytes,
request_serializer: SerializingFunction,
response_deserializer: DeserializingFunction,
loop: asyncio.AbstractEventLoop) -> None:
super().__init__(channel.call(method, deadline, credentials), metadata,
request_serializer, response_deserializer, loop)
self._initializer = self._loop.create_task(self._prepare_rpc())
self._init_stream_request_mixin(request_async_iterator)
self._init_stream_response_mixin(self._initializer)
async def _prepare_rpc(self):
"""This method prepares the RPC for receiving/sending messages.
All other operations around the stream should only happen after the
completion of this method.
"""
try:
raw_response = await self._cython_call.receive_serialized_message()
await self._cython_call.initiate_stream_stream(
self._metadata, self._metadata_sent_observer)
except asyncio.CancelledError:
if not self.cancelled():
self.cancel()
await self._raise_for_status()
if raw_response is cygrpc.EOF:
return cygrpc.EOF
else:
return _common.deserialize(raw_response,
self._response_deserializer)
async def read(self) -> ResponseType:
if self._cython_call.done():
await self._raise_for_status()
return cygrpc.EOF
response_message = await self._read()
if response_message is cygrpc.EOF:
# If the read operation failed, Core should explain why.
await self._raise_for_status()
return response_message
# No need to raise RpcError here, because no one will `await` this task.

@ -15,6 +15,7 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_core_dependencies.py.template`!!!
CORE_SOURCE_FILES = [
'src/boringssl/err_data.c',
'src/core/ext/filters/census/grpc_context.cc',
'src/core/ext/filters/client_channel/backend_metric.cc',
'src/core/ext/filters/client_channel/backup_poller.cc',
@ -325,7 +326,9 @@ CORE_SOURCE_FILES = [
'src/core/lib/iomgr/wakeup_fd_posix.cc',
'src/core/lib/json/json.cc',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_reader_new.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/json/json_writer_new.cc',
'src/core/lib/profiling/basic_timers.cc',
'src/core/lib/profiling/stap_timers.cc',
'src/core/lib/security/context/security_context.cc',
@ -469,270 +472,269 @@ CORE_SOURCE_FILES = [
'third_party/address_sorting/address_sorting.c',
'third_party/address_sorting/address_sorting_posix.c',
'third_party/address_sorting/address_sorting_windows.c',
'third_party/boringssl-with-bazel/err_data.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c',
'third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c',
'third_party/boringssl-with-bazel/src/crypto/base64/base64.c',
'third_party/boringssl-with-bazel/src/crypto/bio/bio.c',
'third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c',
'third_party/boringssl-with-bazel/src/crypto/bio/connect.c',
'third_party/boringssl-with-bazel/src/crypto/bio/fd.c',
'third_party/boringssl-with-bazel/src/crypto/bio/file.c',
'third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c',
'third_party/boringssl-with-bazel/src/crypto/bio/pair.c',
'third_party/boringssl-with-bazel/src/crypto/bio/printf.c',
'third_party/boringssl-with-bazel/src/crypto/bio/socket.c',
'third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c',
'third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c',
'third_party/boringssl-with-bazel/src/crypto/buf/buf.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c',
'third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c',
'third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c',
'third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c',
'third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c',
'third_party/boringssl-with-bazel/src/crypto/conf/conf.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-arm.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-intel.c',
'third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c',
'third_party/boringssl-with-bazel/src/crypto/crypto.c',
'third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c',
'third_party/boringssl-with-bazel/src/crypto/dh/check.c',
'third_party/boringssl-with-bazel/src/crypto/dh/dh.c',
'third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/dh/params.c',
'third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c',
'third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c',
'third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c',
'third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c',
'third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/engine/engine.c',
'third_party/boringssl-with-bazel/src/crypto/err/err.c',
'third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c',
'third_party/boringssl-with-bazel/src/crypto/evp/evp.c',
'third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c',
'third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c',
'third_party/boringssl-with-bazel/src/crypto/evp/print.c',
'third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c',
'third_party/boringssl-with-bazel/src/crypto/evp/sign.c',
'third_party/boringssl-with-bazel/src/crypto/ex_data.c',
'third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c',
'third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c',
'third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c',
'third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c',
'third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c',
'third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c',
'third_party/boringssl-with-bazel/src/crypto/mem.c',
'third_party/boringssl-with-bazel/src/crypto/obj/obj.c',
'third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c',
'third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c',
'third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c',
'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c',
'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c',
'third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c',
'third_party/boringssl-with-bazel/src/crypto/pool/pool.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c',
'third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c',
'third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c',
'third_party/boringssl-with-bazel/src/crypto/refcount_c11.c',
'third_party/boringssl-with-bazel/src/crypto/refcount_lock.c',
'third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c',
'third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c',
'third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c',
'third_party/boringssl-with-bazel/src/crypto/stack/stack.c',
'third_party/boringssl-with-bazel/src/crypto/thread.c',
'third_party/boringssl-with-bazel/src/crypto/thread_none.c',
'third_party/boringssl-with-bazel/src/crypto/thread_pthread.c',
'third_party/boringssl-with-bazel/src/crypto/thread_win.c',
'third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c',
'third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c',
'third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c',
'third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c',
'third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c',
'third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c',
'third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c',
'third_party/boringssl-with-bazel/src/crypto/x509/by_file.c',
'third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c',
'third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c',
'third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c',
'third_party/boringssl-with-bazel/src/crypto/x509/t_req.c',
'third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c',
'third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509name.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_all.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_info.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_name.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_req.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_val.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c',
'third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c',
'third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c',
'third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc',
'third_party/boringssl-with-bazel/src/ssl/d1_both.cc',
'third_party/boringssl-with-bazel/src/ssl/d1_lib.cc',
'third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc',
'third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc',
'third_party/boringssl-with-bazel/src/ssl/dtls_method.cc',
'third_party/boringssl-with-bazel/src/ssl/dtls_record.cc',
'third_party/boringssl-with-bazel/src/ssl/handoff.cc',
'third_party/boringssl-with-bazel/src/ssl/handshake.cc',
'third_party/boringssl-with-bazel/src/ssl/handshake_client.cc',
'third_party/boringssl-with-bazel/src/ssl/handshake_server.cc',
'third_party/boringssl-with-bazel/src/ssl/s3_both.cc',
'third_party/boringssl-with-bazel/src/ssl/s3_lib.cc',
'third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_file.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_session.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc',
'third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc',
'third_party/boringssl-with-bazel/src/ssl/t1_enc.cc',
'third_party/boringssl-with-bazel/src/ssl/t1_lib.cc',
'third_party/boringssl-with-bazel/src/ssl/tls13_both.cc',
'third_party/boringssl-with-bazel/src/ssl/tls13_client.cc',
'third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc',
'third_party/boringssl-with-bazel/src/ssl/tls13_server.cc',
'third_party/boringssl-with-bazel/src/ssl/tls_method.cc',
'third_party/boringssl-with-bazel/src/ssl/tls_record.cc',
'third_party/boringssl-with-bazel/src/third_party/fiat/curve25519.c',
'third_party/boringssl/crypto/asn1/a_bitstr.c',
'third_party/boringssl/crypto/asn1/a_bool.c',
'third_party/boringssl/crypto/asn1/a_d2i_fp.c',
'third_party/boringssl/crypto/asn1/a_dup.c',
'third_party/boringssl/crypto/asn1/a_enum.c',
'third_party/boringssl/crypto/asn1/a_gentm.c',
'third_party/boringssl/crypto/asn1/a_i2d_fp.c',
'third_party/boringssl/crypto/asn1/a_int.c',
'third_party/boringssl/crypto/asn1/a_mbstr.c',
'third_party/boringssl/crypto/asn1/a_object.c',
'third_party/boringssl/crypto/asn1/a_octet.c',
'third_party/boringssl/crypto/asn1/a_print.c',
'third_party/boringssl/crypto/asn1/a_strnid.c',
'third_party/boringssl/crypto/asn1/a_time.c',
'third_party/boringssl/crypto/asn1/a_type.c',
'third_party/boringssl/crypto/asn1/a_utctm.c',
'third_party/boringssl/crypto/asn1/a_utf8.c',
'third_party/boringssl/crypto/asn1/asn1_lib.c',
'third_party/boringssl/crypto/asn1/asn1_par.c',
'third_party/boringssl/crypto/asn1/asn_pack.c',
'third_party/boringssl/crypto/asn1/f_enum.c',
'third_party/boringssl/crypto/asn1/f_int.c',
'third_party/boringssl/crypto/asn1/f_string.c',
'third_party/boringssl/crypto/asn1/tasn_dec.c',
'third_party/boringssl/crypto/asn1/tasn_enc.c',
'third_party/boringssl/crypto/asn1/tasn_fre.c',
'third_party/boringssl/crypto/asn1/tasn_new.c',
'third_party/boringssl/crypto/asn1/tasn_typ.c',
'third_party/boringssl/crypto/asn1/tasn_utl.c',
'third_party/boringssl/crypto/asn1/time_support.c',
'third_party/boringssl/crypto/base64/base64.c',
'third_party/boringssl/crypto/bio/bio.c',
'third_party/boringssl/crypto/bio/bio_mem.c',
'third_party/boringssl/crypto/bio/connect.c',
'third_party/boringssl/crypto/bio/fd.c',
'third_party/boringssl/crypto/bio/file.c',
'third_party/boringssl/crypto/bio/hexdump.c',
'third_party/boringssl/crypto/bio/pair.c',
'third_party/boringssl/crypto/bio/printf.c',
'third_party/boringssl/crypto/bio/socket.c',
'third_party/boringssl/crypto/bio/socket_helper.c',
'third_party/boringssl/crypto/bn_extra/bn_asn1.c',
'third_party/boringssl/crypto/bn_extra/convert.c',
'third_party/boringssl/crypto/buf/buf.c',
'third_party/boringssl/crypto/bytestring/asn1_compat.c',
'third_party/boringssl/crypto/bytestring/ber.c',
'third_party/boringssl/crypto/bytestring/cbb.c',
'third_party/boringssl/crypto/bytestring/cbs.c',
'third_party/boringssl/crypto/bytestring/unicode.c',
'third_party/boringssl/crypto/chacha/chacha.c',
'third_party/boringssl/crypto/cipher_extra/cipher_extra.c',
'third_party/boringssl/crypto/cipher_extra/derive_key.c',
'third_party/boringssl/crypto/cipher_extra/e_aesccm.c',
'third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c',
'third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c',
'third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c',
'third_party/boringssl/crypto/cipher_extra/e_null.c',
'third_party/boringssl/crypto/cipher_extra/e_rc2.c',
'third_party/boringssl/crypto/cipher_extra/e_rc4.c',
'third_party/boringssl/crypto/cipher_extra/e_tls.c',
'third_party/boringssl/crypto/cipher_extra/tls_cbc.c',
'third_party/boringssl/crypto/cmac/cmac.c',
'third_party/boringssl/crypto/conf/conf.c',
'third_party/boringssl/crypto/cpu-aarch64-fuchsia.c',
'third_party/boringssl/crypto/cpu-aarch64-linux.c',
'third_party/boringssl/crypto/cpu-arm-linux.c',
'third_party/boringssl/crypto/cpu-arm.c',
'third_party/boringssl/crypto/cpu-intel.c',
'third_party/boringssl/crypto/cpu-ppc64le.c',
'third_party/boringssl/crypto/crypto.c',
'third_party/boringssl/crypto/curve25519/spake25519.c',
'third_party/boringssl/crypto/dh/check.c',
'third_party/boringssl/crypto/dh/dh.c',
'third_party/boringssl/crypto/dh/dh_asn1.c',
'third_party/boringssl/crypto/dh/params.c',
'third_party/boringssl/crypto/digest_extra/digest_extra.c',
'third_party/boringssl/crypto/dsa/dsa.c',
'third_party/boringssl/crypto/dsa/dsa_asn1.c',
'third_party/boringssl/crypto/ec_extra/ec_asn1.c',
'third_party/boringssl/crypto/ec_extra/ec_derive.c',
'third_party/boringssl/crypto/ecdh_extra/ecdh_extra.c',
'third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c',
'third_party/boringssl/crypto/engine/engine.c',
'third_party/boringssl/crypto/err/err.c',
'third_party/boringssl/crypto/evp/digestsign.c',
'third_party/boringssl/crypto/evp/evp.c',
'third_party/boringssl/crypto/evp/evp_asn1.c',
'third_party/boringssl/crypto/evp/evp_ctx.c',
'third_party/boringssl/crypto/evp/p_dsa_asn1.c',
'third_party/boringssl/crypto/evp/p_ec.c',
'third_party/boringssl/crypto/evp/p_ec_asn1.c',
'third_party/boringssl/crypto/evp/p_ed25519.c',
'third_party/boringssl/crypto/evp/p_ed25519_asn1.c',
'third_party/boringssl/crypto/evp/p_rsa.c',
'third_party/boringssl/crypto/evp/p_rsa_asn1.c',
'third_party/boringssl/crypto/evp/p_x25519.c',
'third_party/boringssl/crypto/evp/p_x25519_asn1.c',
'third_party/boringssl/crypto/evp/pbkdf.c',
'third_party/boringssl/crypto/evp/print.c',
'third_party/boringssl/crypto/evp/scrypt.c',
'third_party/boringssl/crypto/evp/sign.c',
'third_party/boringssl/crypto/ex_data.c',
'third_party/boringssl/crypto/fipsmodule/bcm.c',
'third_party/boringssl/crypto/fipsmodule/fips_shared_support.c',
'third_party/boringssl/crypto/fipsmodule/is_fips.c',
'third_party/boringssl/crypto/hkdf/hkdf.c',
'third_party/boringssl/crypto/hrss/hrss.c',
'third_party/boringssl/crypto/lhash/lhash.c',
'third_party/boringssl/crypto/mem.c',
'third_party/boringssl/crypto/obj/obj.c',
'third_party/boringssl/crypto/obj/obj_xref.c',
'third_party/boringssl/crypto/pem/pem_all.c',
'third_party/boringssl/crypto/pem/pem_info.c',
'third_party/boringssl/crypto/pem/pem_lib.c',
'third_party/boringssl/crypto/pem/pem_oth.c',
'third_party/boringssl/crypto/pem/pem_pk8.c',
'third_party/boringssl/crypto/pem/pem_pkey.c',
'third_party/boringssl/crypto/pem/pem_x509.c',
'third_party/boringssl/crypto/pem/pem_xaux.c',
'third_party/boringssl/crypto/pkcs7/pkcs7.c',
'third_party/boringssl/crypto/pkcs7/pkcs7_x509.c',
'third_party/boringssl/crypto/pkcs8/p5_pbev2.c',
'third_party/boringssl/crypto/pkcs8/pkcs8.c',
'third_party/boringssl/crypto/pkcs8/pkcs8_x509.c',
'third_party/boringssl/crypto/poly1305/poly1305.c',
'third_party/boringssl/crypto/poly1305/poly1305_arm.c',
'third_party/boringssl/crypto/poly1305/poly1305_vec.c',
'third_party/boringssl/crypto/pool/pool.c',
'third_party/boringssl/crypto/rand_extra/deterministic.c',
'third_party/boringssl/crypto/rand_extra/forkunsafe.c',
'third_party/boringssl/crypto/rand_extra/fuchsia.c',
'third_party/boringssl/crypto/rand_extra/rand_extra.c',
'third_party/boringssl/crypto/rand_extra/windows.c',
'third_party/boringssl/crypto/rc4/rc4.c',
'third_party/boringssl/crypto/refcount_c11.c',
'third_party/boringssl/crypto/refcount_lock.c',
'third_party/boringssl/crypto/rsa_extra/rsa_asn1.c',
'third_party/boringssl/crypto/rsa_extra/rsa_print.c',
'third_party/boringssl/crypto/siphash/siphash.c',
'third_party/boringssl/crypto/stack/stack.c',
'third_party/boringssl/crypto/thread.c',
'third_party/boringssl/crypto/thread_none.c',
'third_party/boringssl/crypto/thread_pthread.c',
'third_party/boringssl/crypto/thread_win.c',
'third_party/boringssl/crypto/x509/a_digest.c',
'third_party/boringssl/crypto/x509/a_sign.c',
'third_party/boringssl/crypto/x509/a_strex.c',
'third_party/boringssl/crypto/x509/a_verify.c',
'third_party/boringssl/crypto/x509/algorithm.c',
'third_party/boringssl/crypto/x509/asn1_gen.c',
'third_party/boringssl/crypto/x509/by_dir.c',
'third_party/boringssl/crypto/x509/by_file.c',
'third_party/boringssl/crypto/x509/i2d_pr.c',
'third_party/boringssl/crypto/x509/rsa_pss.c',
'third_party/boringssl/crypto/x509/t_crl.c',
'third_party/boringssl/crypto/x509/t_req.c',
'third_party/boringssl/crypto/x509/t_x509.c',
'third_party/boringssl/crypto/x509/t_x509a.c',
'third_party/boringssl/crypto/x509/x509.c',
'third_party/boringssl/crypto/x509/x509_att.c',
'third_party/boringssl/crypto/x509/x509_cmp.c',
'third_party/boringssl/crypto/x509/x509_d2.c',
'third_party/boringssl/crypto/x509/x509_def.c',
'third_party/boringssl/crypto/x509/x509_ext.c',
'third_party/boringssl/crypto/x509/x509_lu.c',
'third_party/boringssl/crypto/x509/x509_obj.c',
'third_party/boringssl/crypto/x509/x509_r2x.c',
'third_party/boringssl/crypto/x509/x509_req.c',
'third_party/boringssl/crypto/x509/x509_set.c',
'third_party/boringssl/crypto/x509/x509_trs.c',
'third_party/boringssl/crypto/x509/x509_txt.c',
'third_party/boringssl/crypto/x509/x509_v3.c',
'third_party/boringssl/crypto/x509/x509_vfy.c',
'third_party/boringssl/crypto/x509/x509_vpm.c',
'third_party/boringssl/crypto/x509/x509cset.c',
'third_party/boringssl/crypto/x509/x509name.c',
'third_party/boringssl/crypto/x509/x509rset.c',
'third_party/boringssl/crypto/x509/x509spki.c',
'third_party/boringssl/crypto/x509/x_algor.c',
'third_party/boringssl/crypto/x509/x_all.c',
'third_party/boringssl/crypto/x509/x_attrib.c',
'third_party/boringssl/crypto/x509/x_crl.c',
'third_party/boringssl/crypto/x509/x_exten.c',
'third_party/boringssl/crypto/x509/x_info.c',
'third_party/boringssl/crypto/x509/x_name.c',
'third_party/boringssl/crypto/x509/x_pkey.c',
'third_party/boringssl/crypto/x509/x_pubkey.c',
'third_party/boringssl/crypto/x509/x_req.c',
'third_party/boringssl/crypto/x509/x_sig.c',
'third_party/boringssl/crypto/x509/x_spki.c',
'third_party/boringssl/crypto/x509/x_val.c',
'third_party/boringssl/crypto/x509/x_x509.c',
'third_party/boringssl/crypto/x509/x_x509a.c',
'third_party/boringssl/crypto/x509v3/pcy_cache.c',
'third_party/boringssl/crypto/x509v3/pcy_data.c',
'third_party/boringssl/crypto/x509v3/pcy_lib.c',
'third_party/boringssl/crypto/x509v3/pcy_map.c',
'third_party/boringssl/crypto/x509v3/pcy_node.c',
'third_party/boringssl/crypto/x509v3/pcy_tree.c',
'third_party/boringssl/crypto/x509v3/v3_akey.c',
'third_party/boringssl/crypto/x509v3/v3_akeya.c',
'third_party/boringssl/crypto/x509v3/v3_alt.c',
'third_party/boringssl/crypto/x509v3/v3_bcons.c',
'third_party/boringssl/crypto/x509v3/v3_bitst.c',
'third_party/boringssl/crypto/x509v3/v3_conf.c',
'third_party/boringssl/crypto/x509v3/v3_cpols.c',
'third_party/boringssl/crypto/x509v3/v3_crld.c',
'third_party/boringssl/crypto/x509v3/v3_enum.c',
'third_party/boringssl/crypto/x509v3/v3_extku.c',
'third_party/boringssl/crypto/x509v3/v3_genn.c',
'third_party/boringssl/crypto/x509v3/v3_ia5.c',
'third_party/boringssl/crypto/x509v3/v3_info.c',
'third_party/boringssl/crypto/x509v3/v3_int.c',
'third_party/boringssl/crypto/x509v3/v3_lib.c',
'third_party/boringssl/crypto/x509v3/v3_ncons.c',
'third_party/boringssl/crypto/x509v3/v3_ocsp.c',
'third_party/boringssl/crypto/x509v3/v3_pci.c',
'third_party/boringssl/crypto/x509v3/v3_pcia.c',
'third_party/boringssl/crypto/x509v3/v3_pcons.c',
'third_party/boringssl/crypto/x509v3/v3_pku.c',
'third_party/boringssl/crypto/x509v3/v3_pmaps.c',
'third_party/boringssl/crypto/x509v3/v3_prn.c',
'third_party/boringssl/crypto/x509v3/v3_purp.c',
'third_party/boringssl/crypto/x509v3/v3_skey.c',
'third_party/boringssl/crypto/x509v3/v3_sxnet.c',
'third_party/boringssl/crypto/x509v3/v3_utl.c',
'third_party/boringssl/ssl/bio_ssl.cc',
'third_party/boringssl/ssl/d1_both.cc',
'third_party/boringssl/ssl/d1_lib.cc',
'third_party/boringssl/ssl/d1_pkt.cc',
'third_party/boringssl/ssl/d1_srtp.cc',
'third_party/boringssl/ssl/dtls_method.cc',
'third_party/boringssl/ssl/dtls_record.cc',
'third_party/boringssl/ssl/handoff.cc',
'third_party/boringssl/ssl/handshake.cc',
'third_party/boringssl/ssl/handshake_client.cc',
'third_party/boringssl/ssl/handshake_server.cc',
'third_party/boringssl/ssl/s3_both.cc',
'third_party/boringssl/ssl/s3_lib.cc',
'third_party/boringssl/ssl/s3_pkt.cc',
'third_party/boringssl/ssl/ssl_aead_ctx.cc',
'third_party/boringssl/ssl/ssl_asn1.cc',
'third_party/boringssl/ssl/ssl_buffer.cc',
'third_party/boringssl/ssl/ssl_cert.cc',
'third_party/boringssl/ssl/ssl_cipher.cc',
'third_party/boringssl/ssl/ssl_file.cc',
'third_party/boringssl/ssl/ssl_key_share.cc',
'third_party/boringssl/ssl/ssl_lib.cc',
'third_party/boringssl/ssl/ssl_privkey.cc',
'third_party/boringssl/ssl/ssl_session.cc',
'third_party/boringssl/ssl/ssl_stat.cc',
'third_party/boringssl/ssl/ssl_transcript.cc',
'third_party/boringssl/ssl/ssl_versions.cc',
'third_party/boringssl/ssl/ssl_x509.cc',
'third_party/boringssl/ssl/t1_enc.cc',
'third_party/boringssl/ssl/t1_lib.cc',
'third_party/boringssl/ssl/tls13_both.cc',
'third_party/boringssl/ssl/tls13_client.cc',
'third_party/boringssl/ssl/tls13_enc.cc',
'third_party/boringssl/ssl/tls13_server.cc',
'third_party/boringssl/ssl/tls_method.cc',
'third_party/boringssl/ssl/tls_record.cc',
'third_party/boringssl/third_party/fiat/curve25519.c',
'third_party/cares/cares/ares__close_sockets.c',
'third_party/cares/cares/ares__get_hostent.c',
'third_party/cares/cares/ares__read_line.c',

@ -537,7 +537,7 @@
# Note that for testing purposes, one can do:
# make HAS_EMBEDDED_OPENSSL_ALPN=false
# to emulate the fact we do not have OpenSSL in the third_party folder.
ifeq ($(wildcard third_party/boringssl-with-bazel/src/include/openssl/ssl.h),)
ifeq ($(wildcard third_party/boringssl/include/openssl/ssl.h),)
HAS_EMBEDDED_OPENSSL_ALPN = false
else
CAN_COMPILE_EMBEDDED_OPENSSL ?= $(shell $(BORINGSSL_COMPILE_CHECK_CMD) 2> /dev/null && echo true || echo false)
@ -663,7 +663,7 @@
OPENSSL_MERGE_LIBS += $(LIBDIR)/$(CONFIG)/libboringssl.a
OPENSSL_MERGE_OBJS += $(LIBBORINGSSL_OBJS)
# need to prefix these to ensure overriding system libraries
CPPFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CPPFLAGS)
CPPFLAGS := -Ithird_party/boringssl/include $(CPPFLAGS)
else ifneq ($(EMBED_OPENSSL),false)
OPENSSL_DEP += $(EMBED_OPENSSL)/libssl.a $(EMBED_OPENSSL)/libcrypto.a
OPENSSL_MERGE_LIBS += $(EMBED_OPENSSL)/libssl.a $(EMBED_OPENSSL)/libcrypto.a
@ -1763,8 +1763,8 @@
# boringssl needs an override to ensure that it does not include
# system openssl headers regardless of other configuration
# we do so here with a target specific variable assignment
$(${tgt.name.upper()}_OBJS): CFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
$(${tgt.name.upper()}_OBJS): CXXFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CXXFLAGS)
$(${tgt.name.upper()}_OBJS): CFLAGS := -Ithird_party/boringssl/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI)
$(${tgt.name.upper()}_OBJS): CXXFLAGS := -Ithird_party/boringssl/include $(CXXFLAGS)
$(${tgt.name.upper()}_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE
% else:
% endif

@ -12,7 +12,7 @@
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/src/php/ext/grpc)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/abseil-cpp)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/address_sorting/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl-with-bazel/src/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/boringssl/include)
PHP_ADD_INCLUDE(PHP_EXT_SRCDIR()/third_party/upb)
LIBS="-lpthread $LIBS"

@ -184,7 +184,7 @@
ss.header_mappings_dir = '.'
ss.libraries = 'z'
ss.dependency "#{s.name}/Interface", version
ss.dependency 'BoringSSL-GRPC', '0.0.6'
ss.dependency 'BoringSSL-GRPC', '0.0.5'
abseil_version = '0.20190808.1'
% for abseil_spec in grpc_abseil_specs:
ss.dependency '${abseil_spec}', abseil_version

@ -4,7 +4,7 @@
def expand_symbol_list(symbol_list):
return ',\n '.join("'#define %s GRPC_SHADOW_%s'" % (symbol, symbol) for symbol in symbol_list)
import subprocess
boringssl_commit = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd='third_party/boringssl-with-bazel').decode().strip()
boringssl_commit = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd='third_party/boringssl').decode().strip()
%>
# This file has been automatically generated from a template file.
@ -48,7 +48,7 @@
Pod::Spec.new do |s|
s.name = 'BoringSSL-GRPC'
version = '0.0.6'
version = '0.0.5'
s.version = version
s.summary = 'BoringSSL is a fork of OpenSSL that is designed to meet Google\'s needs.'
# Adapted from the homepage:
@ -104,7 +104,7 @@
# 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 = 'src/include/openssl'
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
@ -115,7 +115,7 @@
# 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 = 'src/include/openssl/BoringSSL.modulemap'
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.
@ -130,39 +130,39 @@
# 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 = 'src/include/openssl'
ss.source_files = 'src/include/openssl/*.h'
ss.header_mappings_dir = 'include/openssl'
ss.source_files = 'include/openssl/*.h'
end
s.subspec 'Implementation' do |ss|
ss.header_mappings_dir = 'src'
ss.source_files = 'src/ssl/*.{h,c,cc}',
'src/ssl/**/*.{h,c,cc}',
'src/crypto/*.{h,c,cc}',
'src/crypto/**/*.{h,c,cc}',
ss.header_mappings_dir = '.'
ss.source_files = 'ssl/*.{h,c,cc}',
'ssl/**/*.{h,c,cc}',
'crypto/*.{h,c,cc}',
'crypto/**/*.{h,c,cc}',
# We have to include fiat because spake25519 depends on it
'src/third_party/fiat/*.{h,c,cc}',
'third_party/fiat/*.{h,c,cc}',
# Include the err_data.c generated in prepare_command below
'src/err_data.c'
'err_data.c'
ss.private_header_files = 'src/ssl/*.h',
'src/ssl/**/*.h',
'src/crypto/*.h',
'src/crypto/**/*.h',
'src/third_party/fiat/*.h'
ss.private_header_files = 'ssl/*.h',
'ssl/**/*.h',
'crypto/*.h',
'crypto/**/*.h',
'third_party/fiat/*.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 = 'src/crypto/fipsmodule/bcm.c',
'src/**/*_test.*',
'src/**/test_*.*',
'src/**/test/*.*'
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 > src/include/openssl/umbrella.h <<EOF
cat > include/openssl/umbrella.h <<EOF
#include "ssl.h"
#include "crypto.h"
#include "aes.h"
@ -202,7 +202,7 @@
#include "x509.h"
#include "x509v3.h"
EOF
cat > src/include/openssl/BoringSSL.modulemap <<EOF
cat > include/openssl/BoringSSL.modulemap <<EOF
framework module openssl {
umbrella header "umbrella.h"
textual header "arm_arch.h"
@ -219,7 +219,7 @@
# TODO(jtattermusch): avoid needing to run tools/buildgen/generate_projects.sh twice on update
# TODO(jtattermusch): another pre-generated copy of err_data.c is under third_party/boringssl-with-bazel
# investigate if we could use it.
cat > src/err_data.c <<EOF
cat > err_data.c <<EOF
% for err_data in open("src/boringssl/err_data.c", "r").readlines():
${err_data.replace('\\0', '\\\\0')}\
% endfor
@ -231,11 +231,11 @@
# SOME_BORINGSSL_SYMBOL" Such type of redefinition will cause "SOME_BORINGSSL_SYMBOL redefined"
# error when using together with our prefix header. So the workaround in the below lines removes
# all such type of #define directives.
sed -i'.back' '/^#define \\([A-Za-z0-9_]*\\) \\1/d' src/include/openssl/*.h
sed -i'.back' '/^#define \\([A-Za-z0-9_]*\\) \\1/d' include/openssl/*.h
# Remove lines of the format below for the same reason above
# #define SOME_BORINGSSL_SYMBOL ${"\\"}
# SOME_BORINGSSL_SYMBOL
sed -i'.back' '/^#define.*\\\\$/{N;/^#define \\([A-Za-z0-9_]*\\) *\\\\\\n *\\1/d;}' src/include/openssl/*.h
sed -i'.back' '/^#define.*\\\\$/{N;/^#define \\([A-Za-z0-9_]*\\) *\\\\\\n *\\1/d;}' include/openssl/*.h
# We are renaming openssl to openssl_grpc so that there is no conflict with openssl if it exists
find . -type f \\( -path '*.h' -or -path '*.cc' -or -path '*.c' \\) -print0 | xargs -0 -L1 sed -E -i'.grpc_back' 's;#include <openssl/;#include <openssl_grpc/;g'

@ -44,3 +44,18 @@ grpc_cc_test(
"//test/core/util:grpc_test_util",
],
)
grpc_cc_test(
name = "json_test_new",
srcs = ["json_test_new.cc"],
external_deps = [
"gtest",
],
language = "C++",
uses_polling = False,
deps = [
"//:gpr",
"//:grpc",
"//test/core/util:grpc_test_util",
],
)

@ -0,0 +1,295 @@
/*
*
* Copyright 2015-2016 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 <string.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/json/json.h"
#include "test/core/util/test_config.h"
namespace grpc_core {
void ValidateValue(const Json& actual, const Json& expected);
void ValidateObject(const Json::Object& actual, const Json::Object& expected) {
ASSERT_EQ(actual.size(), expected.size());
auto actual_it = actual.begin();
for (const auto& p : expected) {
EXPECT_EQ(actual_it->first, p.first);
ValidateValue(actual_it->second, p.second);
++actual_it;
}
}
void ValidateArray(const Json::Array& actual, const Json::Array& expected) {
ASSERT_EQ(actual.size(), expected.size());
for (size_t i = 0; i < expected.size(); ++i) {
ValidateValue(actual[i], expected[i]);
}
}
void ValidateValue(const Json& actual, const Json& expected) {
ASSERT_EQ(actual.type(), expected.type());
switch (expected.type()) {
case Json::Type::JSON_NULL:
case Json::Type::JSON_TRUE:
case Json::Type::JSON_FALSE:
break;
case Json::Type::STRING:
case Json::Type::NUMBER:
EXPECT_EQ(actual.string_value(), expected.string_value());
break;
case Json::Type::OBJECT:
ValidateObject(actual.object_value(), expected.object_value());
break;
case Json::Type::ARRAY:
ValidateArray(actual.array_value(), expected.array_value());
break;
}
}
void RunSuccessTest(const char* input, const Json& expected,
const char* expected_output) {
gpr_log(GPR_INFO, "parsing string \"%s\" - should succeed", input);
grpc_error* error = GRPC_ERROR_NONE;
Json json = Json::Parse(input, &error);
ASSERT_EQ(error, GRPC_ERROR_NONE) << grpc_error_string(error);
ValidateValue(json, expected);
std::string output = json.Dump();
EXPECT_EQ(output, expected_output);
}
TEST(Json, Whitespace) {
RunSuccessTest(" 0 ", 0, "0");
RunSuccessTest(" 1 ", 1, "1");
RunSuccessTest(" \" \" ", " ", "\" \"");
RunSuccessTest(" \"a\" ", "a", "\"a\"");
RunSuccessTest(" true ", true, "true");
}
TEST(Json, Utf16) {
RunSuccessTest("\"\\u0020\\\\\\u0010\\u000a\\u000D\"", " \\\u0010\n\r",
"\" \\\\\\u0010\\n\\r\"");
}
TEST(Json, Utf8) {
RunSuccessTest("\"ßâñć௵⇒\"", "ßâñć௵⇒",
"\"\\u00df\\u00e2\\u00f1\\u0107\\u0bf5\\u21d2\"");
RunSuccessTest("\"\\u00df\\u00e2\\u00f1\\u0107\\u0bf5\\u21d2\"", "ßâñć௵⇒",
"\"\\u00df\\u00e2\\u00f1\\u0107\\u0bf5\\u21d2\"");
// Testing UTF-8 character "𝄞", U+11D1E.
RunSuccessTest("\"\xf0\x9d\x84\x9e\"", "\xf0\x9d\x84\x9e",
"\"\\ud834\\udd1e\"");
RunSuccessTest("\"\\ud834\\udd1e\"", "\xf0\x9d\x84\x9e",
"\"\\ud834\\udd1e\"");
RunSuccessTest("{\"\\ud834\\udd1e\":0}",
Json::Object{{"\xf0\x9d\x84\x9e", 0}},
"{\"\\ud834\\udd1e\":0}");
}
TEST(Json, NestedEmptyContainers) {
RunSuccessTest(" [ [ ] , { } , [ ] ] ",
Json::Array{
Json::Array(),
Json::Object(),
Json::Array(),
},
"[[],{},[]]");
}
TEST(Json, EscapesAndControlCharactersInKeyStrings) {
RunSuccessTest(" { \"\\u007f\x7f\\n\\r\\\"\\f\\b\\\\a , b\": 1, \"\": 0 } ",
Json::Object{
{"\u007f\u007f\n\r\"\f\b\\a , b", 1},
{"", 0},
},
"{\"\":0,\"\\u007f\\u007f\\n\\r\\\"\\f\\b\\\\a , b\":1}");
}
TEST(Json, WriterCutsOffInvalidUtf8) {
RunSuccessTest("\"abc\xf0\x9d\x24\"", "abc\xf0\x9d\x24", "\"abc\"");
RunSuccessTest("\"\xff\"", "\xff", "\"\"");
}
TEST(Json, ValidNumbers) {
RunSuccessTest("[0, 42 , 0.0123, 123.456]",
Json::Array{
0,
42,
Json("0.0123", /*is_number=*/true),
Json("123.456", /*is_number=*/true),
},
"[0,42,0.0123,123.456]");
RunSuccessTest("[1e4,-53.235e-31, 0.3e+3]",
Json::Array{
Json("1e4", /*is_number=*/true),
Json("-53.235e-31", /*is_number=*/true),
Json("0.3e+3", /*is_number=*/true),
},
"[1e4,-53.235e-31,0.3e+3]");
}
TEST(Json, Keywords) {
RunSuccessTest("[true, false, null]",
Json::Array{
Json(true),
Json(false),
Json(),
},
"[true,false,null]");
}
void RunParseFailureTest(const char* input) {
gpr_log(GPR_INFO, "parsing string \"%s\" - should fail", input);
grpc_error* error = GRPC_ERROR_NONE;
Json json = Json::Parse(input, &error);
gpr_log(GPR_INFO, "error: %s", grpc_error_string(error));
EXPECT_NE(error, GRPC_ERROR_NONE);
GRPC_ERROR_UNREF(error);
}
TEST(Json, InvalidInput) {
RunParseFailureTest("\\");
RunParseFailureTest("nu ll");
RunParseFailureTest("{\"foo\": bar}");
RunParseFailureTest("{\"foo\": bar\"x\"}");
RunParseFailureTest("fals");
RunParseFailureTest("0,0 ");
RunParseFailureTest("\"foo\",[]");
}
TEST(Json, UnterminatedString) { RunParseFailureTest("\"\\x"); }
TEST(Json, InvalidUtf16) {
RunParseFailureTest("\"\\u123x");
RunParseFailureTest("{\"\\u123x");
}
TEST(Json, ImbalancedSurrogatePairs) {
RunParseFailureTest("\"\\ud834f");
RunParseFailureTest("{\"\\ud834f\":0}");
RunParseFailureTest("\"\\ud834\\n");
RunParseFailureTest("{\"\\ud834\\n\":0}");
RunParseFailureTest("\"\\udd1ef");
RunParseFailureTest("{\"\\udd1ef\":0}");
RunParseFailureTest("\"\\ud834\\ud834\"");
RunParseFailureTest("{\"\\ud834\\ud834\"\":0}");
RunParseFailureTest("\"\\ud834\\u1234\"");
RunParseFailureTest("{\"\\ud834\\u1234\"\":0}");
RunParseFailureTest("\"\\ud834]\"");
RunParseFailureTest("{\"\\ud834]\"\":0}");
RunParseFailureTest("\"\\ud834 \"");
RunParseFailureTest("{\"\\ud834 \"\":0}");
RunParseFailureTest("\"\\ud834\\\\\"");
RunParseFailureTest("{\"\\ud834\\\\\"\":0}");
}
TEST(Json, EmbeddedInvalidWhitechars) {
RunParseFailureTest("\"\n\"");
RunParseFailureTest("\"\t\"");
}
TEST(Json, EmptyString) { RunParseFailureTest(""); }
TEST(Json, ExtraCharsAtEndOfParsing) {
RunParseFailureTest("{},");
RunParseFailureTest("{}x");
}
TEST(Json, ImbalancedContainers) {
RunParseFailureTest("{}}");
RunParseFailureTest("[]]");
RunParseFailureTest("{{}");
RunParseFailureTest("[[]");
RunParseFailureTest("[}");
RunParseFailureTest("{]");
}
TEST(Json, BadContainers) {
RunParseFailureTest("{x}");
RunParseFailureTest("{x=0,y}");
}
TEST(Json, DuplicateObjectKeys) { RunParseFailureTest("{\"x\": 1, \"x\": 1}"); }
TEST(Json, TrailingComma) {
RunParseFailureTest("{,}");
RunParseFailureTest("[1,2,3,4,]");
RunParseFailureTest("{\"a\": 1, }");
}
TEST(Json, KeySyntaxInArray) { RunParseFailureTest("[\"x\":0]"); }
TEST(Json, InvalidNumbers) {
RunParseFailureTest("1.");
RunParseFailureTest("1e");
RunParseFailureTest(".12");
RunParseFailureTest("1.x");
RunParseFailureTest("1.12x");
RunParseFailureTest("1ex");
RunParseFailureTest("1e12x");
RunParseFailureTest(".12x");
RunParseFailureTest("000");
};
TEST(Json, Equality) {
// Null.
EXPECT_EQ(Json(), Json());
// Numbers.
EXPECT_EQ(Json(1), Json(1));
EXPECT_NE(Json(1), Json(2));
EXPECT_EQ(Json(1), Json("1", /*is_number=*/true));
EXPECT_EQ(Json("-5e5", /*is_number=*/true), Json("-5e5", /*is_number=*/true));
// Booleans.
EXPECT_EQ(Json(true), Json(true));
EXPECT_EQ(Json(false), Json(false));
EXPECT_NE(Json(true), Json(false));
// Strings.
EXPECT_EQ(Json("foo"), Json("foo"));
EXPECT_NE(Json("foo"), Json("bar"));
// Arrays.
EXPECT_EQ(Json(Json::Array{"foo"}), Json(Json::Array{"foo"}));
EXPECT_NE(Json(Json::Array{"foo"}), Json(Json::Array{"bar"}));
// Objects.
EXPECT_EQ(Json(Json::Object{{"foo", 1}}), Json(Json::Object{{"foo", 1}}));
EXPECT_NE(Json(Json::Object{{"foo", 1}}), Json(Json::Object{{"foo", 2}}));
EXPECT_NE(Json(Json::Object{{"foo", 1}}), Json(Json::Object{{"bar", 1}}));
// Differing types.
EXPECT_NE(Json(1), Json("foo"));
EXPECT_NE(Json(1), Json(true));
EXPECT_NE(Json(1), Json(Json::Array{}));
EXPECT_NE(Json(1), Json(Json::Object{}));
EXPECT_NE(Json(1), Json());
}
} // namespace grpc_core
int main(int argc, char** argv) {
grpc::testing::TestEnvironment env(argc, argv);
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

@ -17,7 +17,6 @@
*/
#include <grpcpp/security/credentials.h>
#include <grpcpp/security/server_credentials.h>
#include <grpcpp/security/tls_credentials_options.h>
#include <memory>
@ -54,10 +53,10 @@ static void tls_credential_reload_callback(
class TestTlsCredentialReload : public TlsCredentialReloadInterface {
int Schedule(TlsCredentialReloadArg* arg) override {
GPR_ASSERT(arg != nullptr);
TlsKeyMaterialsConfig::PemKeyCertPair pair = {"private_key3",
"cert_chain3"};
struct TlsKeyMaterialsConfig::PemKeyCertPair pair3 = {"private_key3",
"cert_chain3"};
arg->set_pem_root_certs("new_pem_root_certs");
arg->add_pem_key_cert_pair(pair);
arg->add_pem_key_cert_pair(pair3);
arg->set_status(GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW);
return 0;
}
@ -101,6 +100,7 @@ class TestTlsServerAuthorizationCheck
arg->set_error_details("cancelled");
}
};
} // namespace
namespace grpc {
@ -293,7 +293,8 @@ TEST_F(CredentialsTest, TlsKeyMaterialsConfigCppToC) {
TEST_F(CredentialsTest, TlsKeyMaterialsModifiers) {
std::shared_ptr<TlsKeyMaterialsConfig> config(new TlsKeyMaterialsConfig());
TlsKeyMaterialsConfig::PemKeyCertPair pair = {"private_key", "cert_chain"};
struct TlsKeyMaterialsConfig::PemKeyCertPair pair = {"private_key",
"cert_chain"};
config->add_pem_key_cert_pair(pair);
config->set_pem_root_certs("pem_root_certs");
EXPECT_STREQ(config->pem_root_certs().c_str(), "pem_root_certs");
@ -311,28 +312,15 @@ typedef class ::grpc_impl::experimental::TlsCredentialReloadConfig
TEST_F(CredentialsTest, TlsCredentialReloadArgCallback) {
grpc_tls_credential_reload_arg* c_arg = new grpc_tls_credential_reload_arg;
c_arg->key_materials_config = grpc_tls_key_materials_config_create();
c_arg->cb = tls_credential_reload_callback;
c_arg->context = nullptr;
TlsCredentialReloadArg* arg = new TlsCredentialReloadArg(c_arg);
arg->set_pem_root_certs("pem_root_certs");
TlsKeyMaterialsConfig::PemKeyCertPair pair = {"private_key", "cert_chain"};
arg->add_pem_key_cert_pair(pair);
arg->set_status(GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW);
arg->OnCredentialReloadDoneCallback();
EXPECT_EQ(arg->status(), GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED);
EXPECT_STREQ(c_arg->key_materials_config->pem_root_certs(), "pem_root_certs");
EXPECT_EQ(c_arg->key_materials_config->pem_key_cert_pair_list().size(), 1);
EXPECT_STREQ(
c_arg->key_materials_config->pem_key_cert_pair_list()[0].private_key(),
"private_key");
EXPECT_STREQ(
c_arg->key_materials_config->pem_key_cert_pair_list()[0].cert_chain(),
"cert_chain");
// Cleanup.
delete arg;
delete c_arg->key_materials_config;
delete c_arg;
}
@ -344,12 +332,15 @@ TEST_F(CredentialsTest, TlsCredentialReloadConfigSchedule) {
grpc_tls_credential_reload_arg* c_arg = new grpc_tls_credential_reload_arg();
c_arg->context = nullptr;
TlsCredentialReloadArg* arg = new TlsCredentialReloadArg(c_arg);
std::shared_ptr<TlsKeyMaterialsConfig> key_materials_config(
new TlsKeyMaterialsConfig());
struct TlsKeyMaterialsConfig::PemKeyCertPair pair1 = {"private_key1",
"cert_chain1"};
struct TlsKeyMaterialsConfig::PemKeyCertPair pair2 = {"private_key2",
"cert_chain2"};
std::vector<TlsKeyMaterialsConfig::PemKeyCertPair> pair_list = {pair1, pair2};
arg->set_key_materials("pem_root_certs", pair_list);
key_materials_config->set_key_materials("pem_root_certs", pair_list);
arg->set_key_materials_config(key_materials_config);
arg->set_status(GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW);
arg->set_error_details("error_details");
const char* error_details_before_schedule = c_arg->error_details;
@ -657,7 +648,7 @@ TEST_F(CredentialsTest, TlsCredentialsOptionsCppToC) {
delete c_options;
}
// This test demonstrates how the TLS credentials will be used.
// This test demonstrates how the SPIFFE credentials will be used.
TEST_F(CredentialsTest, LoadTlsChannelCredentials) {
std::shared_ptr<TestTlsCredentialReload> test_credential_reload(
new TestTlsCredentialReload());
@ -676,23 +667,7 @@ TEST_F(CredentialsTest, LoadTlsChannelCredentials) {
server_authorization_check_config);
std::shared_ptr<grpc_impl::ChannelCredentials> channel_credentials =
grpc::experimental::TlsCredentials(options);
GPR_ASSERT(channel_credentials.get() != nullptr);
}
// This test demonstrates how the TLS credentials will be used to create
// server credentials.
TEST_F(CredentialsTest, LoadTlsServerCredentials) {
std::shared_ptr<TestTlsCredentialReload> test_credential_reload(
new TestTlsCredentialReload());
std::shared_ptr<TlsCredentialReloadConfig> credential_reload_config(
new TlsCredentialReloadConfig(test_credential_reload));
TlsCredentialsOptions options = TlsCredentialsOptions(
GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY,
GRPC_TLS_SERVER_VERIFICATION, nullptr, credential_reload_config, nullptr);
std::shared_ptr<::grpc_impl::ServerCredentials> server_credentials =
grpc::experimental::TlsServerCredentials(options);
GPR_ASSERT(server_credentials.get() != nullptr);
GPR_ASSERT(channel_credentials != nullptr);
}
TEST_F(CredentialsTest, TlsCredentialReloadConfigErrorMessages) {

@ -1854,12 +1854,8 @@ std::vector<TestScenario> CreateTestScenarios(bool /*test_secure*/,
}
messages.push_back(big_msg);
}
#ifndef MEMORY_SANITIZER
// 4MB message processing with SSL is very slow under msan
// (causes timeouts) and doesn't really increase the signal from tests
messages.push_back(
grpc::string(GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH - 10, 'a'));
#endif
}
// TODO (sreek) Renable tests with health check service after the issue

@ -94,7 +94,6 @@ using ::envoy::api::v2::FractionalPercent;
using ::envoy::api::v2::HttpConnectionManager;
using ::envoy::api::v2::Listener;
using ::envoy::api::v2::RouteConfiguration;
using ::envoy::api::v2::VirtualHost;
using ::envoy::service::discovery::v2::AggregatedDiscoveryService;
using ::envoy::service::load_stats::v2::ClusterStats;
using ::envoy::service::load_stats::v2::LoadReportingService;
@ -427,6 +426,7 @@ class AdsServiceImpl : public AdsService {
const std::string version_str = "version_1";
const std::string nonce_str = "nonce_1";
grpc_core::MutexLock lock(&ads_mu_);
if (lds_ignore_) return;
if (lds_response_state_ == NOT_SENT) {
DiscoveryResponse response;
response.set_type_url(kLdsTypeUrl);
@ -452,6 +452,7 @@ class AdsServiceImpl : public AdsService {
const std::string version_str = "version_1";
const std::string nonce_str = "nonce_1";
grpc_core::MutexLock lock(&ads_mu_);
if (rds_ignore_) return;
if (rds_response_state_ == NOT_SENT) {
DiscoveryResponse response;
response.set_type_url(kRdsTypeUrl);
@ -477,6 +478,7 @@ class AdsServiceImpl : public AdsService {
const std::string version_str = "version_1";
const std::string nonce_str = "nonce_1";
grpc_core::MutexLock lock(&ads_mu_);
if (cds_ignore_) return;
if (cds_response_state_ == NOT_SENT) {
DiscoveryResponse response;
response.set_type_url(kCdsTypeUrl);
@ -503,6 +505,7 @@ class AdsServiceImpl : public AdsService {
std::vector<ResponseDelayPair> responses_and_delays;
{
grpc_core::MutexLock lock(&ads_mu_);
if (eds_ignore_) return;
responses_and_delays = eds_responses_and_delays_;
}
// Send response.
@ -538,8 +541,13 @@ class AdsServiceImpl : public AdsService {
// resource names). It's not causing a big problem now but should be
// fixed.
bool eds_sent = false;
bool seen_first_request = false;
while (!eds_sent || cds_response_state_ == SENT) {
if (!stream->Read(&request)) return;
if (!seen_first_request) {
EXPECT_TRUE(request.has_node());
seen_first_request = true;
}
if (request.type_url() == kLdsTypeUrl) {
HandleLdsRequest(&request, stream);
} else if (request.type_url() == kRdsTypeUrl) {
@ -585,23 +593,31 @@ class AdsServiceImpl : public AdsService {
lds_response_data_ = std::move(lds_response_data);
}
void set_lds_ignore() { lds_ignore_ = true; }
void SetRdsResponse(
std::map<std::string /*route_config_name*/, RouteConfiguration>
rds_response_data) {
rds_response_data_ = std::move(rds_response_data);
}
void set_rds_ignore() { rds_ignore_ = true; }
void SetCdsResponse(
std::map<std::string /*cluster_name*/, Cluster> cds_response_data) {
cds_response_data_ = std::move(cds_response_data);
}
void set_cds_ignore() { cds_ignore_ = true; }
void AddEdsResponse(const DiscoveryResponse& response, int send_after_ms) {
grpc_core::MutexLock lock(&ads_mu_);
eds_responses_and_delays_.push_back(
std::make_pair(response, send_after_ms));
}
void set_eds_ignore() { eds_ignore_ = true; }
void SetLdsToUseDynamicRds() {
auto listener = default_listener_;
HttpConnectionManager http_connection_manager;
@ -701,17 +717,21 @@ class AdsServiceImpl : public AdsService {
Listener default_listener_;
std::map<std::string /*server_name*/, Listener> lds_response_data_;
ResponseState lds_response_state_ = NOT_SENT;
bool lds_ignore_ = false;
// RDS response data.
RouteConfiguration default_route_config_;
std::map<std::string /*route_config_name*/, RouteConfiguration>
rds_response_data_;
ResponseState rds_response_state_ = NOT_SENT;
bool rds_ignore_ = false;
// CDS response data.
Cluster default_cluster_;
std::map<std::string /*cluster_name*/, Cluster> cds_response_data_;
ResponseState cds_response_state_ = NOT_SENT;
bool cds_ignore_ = false;
// EDS response data.
std::vector<ResponseDelayPair> eds_responses_and_delays_;
bool eds_ignore_ = false;
};
class LrsServiceImpl : public LrsService {
@ -895,7 +915,8 @@ class XdsEnd2endTest : public ::testing::TestWithParam<TestType> {
void ShutdownBackend(size_t index) { backends_[index]->Shutdown(); }
void ResetStub(int fallback_timeout = 0, int failover_timeout = 0,
const grpc::string& expected_targets = "") {
const grpc::string& expected_targets = "",
int xds_resource_does_not_exist_timeout = 0) {
ChannelArguments args;
// TODO(juanlishen): Add setter to ChannelArguments.
if (fallback_timeout > 0) {
@ -904,6 +925,10 @@ class XdsEnd2endTest : public ::testing::TestWithParam<TestType> {
if (failover_timeout > 0) {
args.SetInt(GRPC_ARG_XDS_FAILOVER_TIMEOUT_MS, failover_timeout);
}
if (xds_resource_does_not_exist_timeout > 0) {
args.SetInt(GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
xds_resource_does_not_exist_timeout);
}
// If the parent channel is using the fake resolver, we inject the
// response generator for the parent here, and then SetNextResolution()
// will inject the xds channel's response generator via the parent's
@ -1475,7 +1500,7 @@ using LdsTest = BasicTest;
TEST_P(LdsTest, Vanilla) {
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
SendRpc();
(void)SendRpc();
EXPECT_EQ(balancers_[0]->ads_service()->lds_response_state(),
AdsServiceImpl::ACKED);
}
@ -1545,7 +1570,7 @@ TEST_P(LdsTest, ChooseMatchedDomain) {
AdsServiceImpl::BuildListener(route_config)}});
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
SendRpc();
(void)SendRpc();
EXPECT_EQ(balancers_[0]->ads_service()->lds_response_state(),
AdsServiceImpl::ACKED);
}
@ -1566,7 +1591,7 @@ TEST_P(LdsTest, ChooseLastRoute) {
AdsServiceImpl::BuildListener(route_config)}});
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
SendRpc();
(void)SendRpc();
EXPECT_EQ(balancers_[0]->ads_service()->lds_response_state(),
AdsServiceImpl::ACKED);
}
@ -1625,6 +1650,15 @@ TEST_P(LdsTest, RouteActionHasNoCluster) {
AdsServiceImpl::NACKED);
}
// Tests that LDS client times out when no response received.
TEST_P(LdsTest, Timeout) {
ResetStub(0, 0, "", 500);
balancers_[0]->ads_service()->set_lds_ignore();
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
CheckRpcSendFailure();
}
using RdsTest = BasicTest;
// Tests that RDS client should send an ACK upon correct RDS response.
@ -1632,7 +1666,7 @@ TEST_P(RdsTest, Vanilla) {
balancers_[0]->ads_service()->SetLdsToUseDynamicRds();
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
SendRpc();
(void)SendRpc();
EXPECT_EQ(balancers_[0]->ads_service()->rds_response_state(),
AdsServiceImpl::ACKED);
}
@ -1671,7 +1705,7 @@ TEST_P(RdsTest, ChooseMatchedDomain) {
{{"application_target_name", std::move(route_config)}});
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
SendRpc();
(void)SendRpc();
EXPECT_EQ(balancers_[0]->ads_service()->rds_response_state(),
AdsServiceImpl::ACKED);
}
@ -1692,7 +1726,7 @@ TEST_P(RdsTest, ChooseLastRoute) {
{{"application_target_name", std::move(route_config)}});
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
SendRpc();
(void)SendRpc();
EXPECT_EQ(balancers_[0]->ads_service()->rds_response_state(),
AdsServiceImpl::ACKED);
}
@ -1751,13 +1785,23 @@ TEST_P(RdsTest, RouteActionHasNoCluster) {
AdsServiceImpl::NACKED);
}
// Tests that RDS client times out when no response received.
TEST_P(RdsTest, Timeout) {
ResetStub(0, 0, "", 500);
balancers_[0]->ads_service()->SetLdsToUseDynamicRds();
balancers_[0]->ads_service()->set_rds_ignore();
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
CheckRpcSendFailure();
}
using CdsTest = BasicTest;
// Tests that CDS client should send an ACK upon correct CDS response.
TEST_P(CdsTest, Vanilla) {
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
SendRpc();
(void)SendRpc();
EXPECT_EQ(balancers_[0]->ads_service()->cds_response_state(),
AdsServiceImpl::ACKED);
}
@ -1818,6 +1862,27 @@ TEST_P(CdsTest, WrongLrsServer) {
AdsServiceImpl::NACKED);
}
// Tests that CDS client times out when no response received.
TEST_P(CdsTest, Timeout) {
ResetStub(0, 0, "", 500);
balancers_[0]->ads_service()->set_cds_ignore();
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
CheckRpcSendFailure();
}
using EdsTest = BasicTest;
// TODO(roth): Add tests showing that RPCs fail when EDS data is invalid.
TEST_P(EdsTest, Timeout) {
ResetStub(0, 0, "", 500);
balancers_[0]->ads_service()->set_eds_ignore();
SetNextResolution({});
SetNextResolutionForLbChannelAllBalancers();
CheckRpcSendFailure();
}
using LocalityMapTest = BasicTest;
// Tests that the localities in a locality map are picked according to their
@ -3031,6 +3096,13 @@ INSTANTIATE_TEST_SUITE_P(XdsTest, CdsTest,
TestType(true, true)),
&TestTypeName);
// EDS could be tested with or without XdsResolver, but the tests would
// be the same either way, so we test it only with XdsResolver.
INSTANTIATE_TEST_SUITE_P(XdsTest, EdsTest,
::testing::Values(TestType(true, false),
TestType(true, true)),
&TestTypeName);
INSTANTIATE_TEST_SUITE_P(XdsTest, LocalityMapTest,
::testing::Values(TestType(false, true),
TestType(false, false),

@ -28,6 +28,7 @@ apt-get install -t jessie-backports -y libssl-dev
# before starting the test.
rm -r third_party/benchmark/* || true
rm -r third_party/bloaty/* || true
rm -r third_party/boringssl/* || true
rm -r third_party/boringssl-with-bazel/* || true
rm -r third_party/gflags/* || true
rm -r third_party/googletest/* || true

@ -0,0 +1,47 @@
#!/bin/bash
# Copyright 2017 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.
set -ex
cd "$(dirname "$0")/../../.."
echo "deb http://archive.debian.org/debian jessie-backports main" | tee /etc/apt/sources.list.d/jessie-backports.list
echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf
sed -i '/deb http:\/\/deb.debian.org\/debian jessie-updates main/d' /etc/apt/sources.list
apt-get update
apt-get install -t jessie-backports -y libssl-dev pkg-config wget
# Install CMake 3.16
wget -q -O cmake-linux.sh https://github.com/Kitware/CMake/releases/download/v3.16.1/cmake-3.16.1-Linux-x86_64.sh
sh cmake-linux.sh -- --skip-license --prefix=/usr
rm cmake-linux.sh
# Install gRPC and its dependencies
mkdir -p "cmake/build"
pushd "cmake/build"
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DgRPC_INSTALL=ON \
-DgRPC_BUILD_TESTS=OFF \
-DgRPC_SSL_PROVIDER=package \
../..
make -j4 install
popd
# Build helloworld example using make & pkg-config
cd examples/cpp/helloworld
export PKG_CONFIG_PATH=/usr/local/grpc/lib/pkgconfig
export PATH=$PATH:/usr/local/grpc/bin
make

@ -1 +1 @@
Subproject commit a2e6adecc294dc4cd98cc285a9134ce58e0f2ad0
Subproject commit 37dd2562ec830d547a1524bb306be313ac3f2556

@ -0,0 +1 @@
Subproject commit 7f02881e96e51f1873afcf384d02f782b48967ca

@ -1 +1 @@
Subproject commit 1c2769383f027befac5b75b6cedd25daf3bf4dcf
Subproject commit 83da28a68f32023fd3b95a8ae94991a07b1f6c62

@ -24,9 +24,9 @@ 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-with-bazel " | awk '{print $1}' | head -n 1)
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 submodule (third_party/boringssl-with-bazel), BoringSSL podspec (src/objective-c/BoringSSL.podspec), and BoringSSL symbol list (src/objective-c/grpc_shadow_boringssl_symbol_list) commit do not match." ; echo "BoringSSL submodule: $ver1" ; echo "BoringSSL podspec: $ver2" ; echo "BoringSSL symbol list: $ver3" ; exit 1 ; }
[ $ver1 == $ver2 ] && [ $ver1 == $ver3 ] || { echo "BoringSSL submodule (third_party/boringssl), BoringSSL podspec (src/objective-c/BoringSSL.podspec), and BoringSSL symbol list (src/objective-c/grpc_shadow_boringssl_symbol_list) commit do not match." ; echo "BoringSSL submodule: $ver1" ; echo "BoringSSL podspec: $ver2" ; echo "BoringSSL symbol list: $ver3" ; exit 1 ; }
exit 0

@ -21,11 +21,11 @@ cd $(dirname $0)
symbol_list="../../src/objective-c/grpc_shadow_boringssl_symbol_list"
ssl_lib='../../third_party/boringssl-with-bazel/build/libssl.a'
crypto_lib='../../third_party/boringssl-with-bazel/build/libcrypto.a'
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-with-bazel ; mkdir -p build ; cd build ; cmake .. ; make -j ssl crypto )
( cd ../../third_party/boringssl ; mkdir -p build ; cd build ; cmake .. ; make -j ssl crypto )
# Generate shadow_boringssl.h
unameOut="$(uname -s)"
@ -54,7 +54,7 @@ case "${unameOut}" in
;;
esac
commit=$(git submodule | grep "boringssl-with-bazel " | awk '{print $1}' | head -n 1)
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

@ -1466,7 +1466,9 @@ src/core/lib/iomgr/wakeup_fd_posix.h \
src/core/lib/json/json.cc \
src/core/lib/json/json.h \
src/core/lib/json/json_reader.cc \
src/core/lib/json/json_reader_new.cc \
src/core/lib/json/json_writer.cc \
src/core/lib/json/json_writer_new.cc \
src/core/lib/profiling/basic_timers.cc \
src/core/lib/profiling/stap_timers.cc \
src/core/lib/profiling/timers.h \

@ -107,6 +107,20 @@ then
# Xcode 10+ doesn't support building for i386 architecture
sudo xcode-select -switch /Applications/Xcode_9.2.app/Contents/Developer/
# make sure we have the golang 1.13+
# recent golang is currently required by boringssl's cmake build
# and C# uses cmake to build grpc_csharp_ext
# see https://github.com/grpc/grpc/issues/21626
which go
ls -l $(which go)
go version # check original golang version (to diagnose the issue)
brew unlink go # stop using brew-provided version of go
time curl -O https://dl.google.com/go/go1.13.6.darwin-amd64.pkg
time sudo installer -pkg ./go1.13.6.darwin-amd64.pkg -target /
export PATH="/usr/local/go/bin:$PATH"
which go
go version
fi
# PHP tests currently require using an older version of PHPUnit

@ -35,6 +35,10 @@ python -m pip install google-api-python-client
powershell -File src\csharp\install_dotnet_sdk.ps1
set PATH=%LOCALAPPDATA%\Microsoft\dotnet;%PATH%
@rem Newest version of Go is required to be able to build boringssl with cmake
@rem TODO(jtattermusch): try to eliminate the dependency on Go
choco install golang -y --version 1.13.1 --limit-output
@rem Install Python 3.8.0
@rem NOTE(lidiz): Python installer process may live longer than expected, and
@rem has other side effects. It needs to be installed last to reduce impact.

@ -27,11 +27,5 @@ action {
# Tiny hack: misusing an already whitelisted env var to pass submodule name
env_vars {
key: "RUN_TESTS_FLAGS"
value: "boringssl-with-bazel"
}
# Tiny hack: misusing an already whitelisted env var to pass branch name to checkout
env_vars {
key: "BAZEL_FLAGS"
value: "master-with-bazel"
value: "boringssl"
}

@ -25,12 +25,8 @@ source tools/internal_ci/helper_scripts/prepare_build_linux_rc
# Submodule name is passed as the RUN_TESTS_FLAGS variable
SUBMODULE_NAME="${RUN_TESTS_FLAGS}"
# Name of branch to checkout is passed as BAZEL_FLAGS variable
# If unset, "master" is used by default.
SUBMODULE_BRANCH_NAME="${BAZEL_FLAGS:-master}"
# Update submodule to be tested at HEAD
(cd "third_party/${SUBMODULE_NAME}" && git fetch origin && git checkout "origin/${SUBMODULE_BRANCH_NAME}")
(cd "third_party/${SUBMODULE_NAME}" && git fetch origin && git checkout origin/master)
echo "This suite tests whether gRPC HEAD builds with HEAD of submodule '${SUBMODULE_NAME}'"
echo "If a test breaks, either"
@ -48,6 +44,6 @@ then
fi
# commit so that changes are passed to Docker
git -c user.name='foo' -c user.email='foo@google.com' commit -a -m 'Update submodule'
git -c user.name='foo' -c user.email='foo@google.com' commit -a -m 'Update submodule' --allow-empty
tools/run_tests/run_tests_matrix.py -f linux --inner_jobs 4 -j 4 --internal_ci --build_only

@ -302,6 +302,8 @@ def targets():
CppDistribTest('linux', 'x64', 'jessie', 'cmake_as_submodule'),
CppDistribTest('linux', 'x64', 'jessie', 'cmake_fetchcontent'),
CppDistribTest('linux', 'x64', 'jessie', 'cmake_module_install'),
CppDistribTest('linux', 'x64', 'jessie',
'cmake_module_install_pkgconfig'),
CppDistribTest('linux', 'x64', 'jessie', 'cmake_pkgconfig'),
CppDistribTest('linux', 'x64', 'jessie', 'raspberry_pi'),
CppDistribTest('windows', 'x86', testcase='cmake'),

@ -5019,6 +5019,30 @@
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"mac",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": true,
"language": "c++",
"name": "json_test_new",
"platforms": [
"linux",
"mac",
"posix",
"windows"
],
"uses_polling": false
},
{
"args": [],
"benchmark": false,

@ -26,10 +26,11 @@ want_submodules=$(mktemp /tmp/submXXXXXX)
git submodule | awk '{ print $1 }' | sort > "$submodules"
cat << EOF | awk '{ print $1 }' | sort > "$want_submodules"
a2e6adecc294dc4cd98cc285a9134ce58e0f2ad0 third_party/abseil-cpp (heads/master)
37dd2562ec830d547a1524bb306be313ac3f2556 third_party/abseil-cpp (heads/master)
090faecb454fbd6e6e17a75ef8146acb037118d4 third_party/benchmark (v1.5.0)
73594cde8c9a52a102c4341c244c833aa61b9c06 third_party/bloaty (remotes/origin/wide-14-g73594cd)
1c2769383f027befac5b75b6cedd25daf3bf4dcf third_party/boringssl-with-bazel (remotes/origin/master-with-bazel)
7f02881e96e51f1873afcf384d02f782b48967ca third_party/boringssl (remotes/origin/HEAD)
83da28a68f32023fd3b95a8ae94991a07b1f6c62 third_party/boringssl-with-bazel (remotes/origin/master-with-bazel)
e982924acee7f7313b4baa4ee5ec000c5e373c30 third_party/cares/cares (cares-1_15_0)
c83ed7ea9eb5fb3b93d1ad52b59750f1958b8bde third_party/envoy-api (heads/master)
28f50e0fed19872e0fd50dd23ce2ee8cd759338e third_party/gflags (v2.2.0-5-g30dbc81)

Loading…
Cancel
Save