Migrated tsi/alts from nanopb to upb

pull/19741/head
Esun Kim 5 years ago
parent e03cdc2a9d
commit be4e684a82
  1. 27
      BUILD
  2. 17
      BUILD.gn
  3. 66
      CMakeLists.txt
  4. 83
      Makefile
  5. 32
      build.yaml
  6. 15
      config.m4
  7. 15
      config.w32
  8. 16
      gRPC-C++.podspec
  9. 43
      gRPC-Core.podspec
  10. 29
      grpc.gemspec
  11. 13
      grpc.gyp
  12. 29
      package.xml
  13. 180
      src/core/tsi/alts/handshaker/alts_handshaker_client.cc
  14. 520
      src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc
  15. 323
      src/core/tsi/alts/handshaker/alts_handshaker_service_api.h
  16. 145
      src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc
  17. 149
      src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h
  18. 41
      src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc
  19. 4
      src/core/tsi/alts/handshaker/alts_tsi_handshaker.h
  20. 16
      src/core/tsi/alts/handshaker/alts_tsi_utils.cc
  21. 7
      src/core/tsi/alts/handshaker/alts_tsi_utils.h
  22. 47
      src/core/tsi/alts/handshaker/altscontext.pb.c
  23. 63
      src/core/tsi/alts/handshaker/altscontext.pb.h
  24. 122
      src/core/tsi/alts/handshaker/handshaker.pb.c
  25. 254
      src/core/tsi/alts/handshaker/handshaker.pb.h
  26. 49
      src/core/tsi/alts/handshaker/transport_security_common.pb.c
  27. 78
      src/core/tsi/alts/handshaker/transport_security_common.pb.h
  28. 122
      src/core/tsi/alts/handshaker/transport_security_common_api.cc
  29. 60
      src/core/tsi/alts/handshaker/transport_security_common_api.h
  30. 13
      src/python/grpcio/grpc_core_dependencies.py
  31. 11
      test/core/tsi/alts/handshaker/BUILD
  32. 182
      test/core/tsi/alts/handshaker/alts_handshaker_client_test.cc
  33. 149
      test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.cc
  34. 703
      test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.cc
  35. 116
      test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.h
  36. 66
      test/core/tsi/alts/handshaker/alts_tsi_handshaker_test.cc
  37. 23
      test/core/tsi/alts/handshaker/alts_tsi_utils_test.cc
  38. 52
      test/core/tsi/alts/handshaker/transport_security_common_api_test.cc
  39. 27
      tools/distrib/check_nanopb_output.sh
  40. 23
      tools/doxygen/Doxyfile.core.internal
  41. 59
      tools/run_tests/generated/sources_and_headers.json
  42. 24
      tools/run_tests/generated/tests.json

27
BUILD

@ -1861,24 +1861,6 @@ grpc_cc_library(
],
)
grpc_cc_library(
name = "alts_proto",
srcs = [
"src/core/tsi/alts/handshaker/altscontext.pb.c",
"src/core/tsi/alts/handshaker/handshaker.pb.c",
"src/core/tsi/alts/handshaker/transport_security_common.pb.c",
],
hdrs = [
"src/core/tsi/alts/handshaker/altscontext.pb.h",
"src/core/tsi/alts/handshaker/handshaker.pb.h",
"src/core/tsi/alts/handshaker/transport_security_common.pb.h",
],
external_deps = [
"nanopb",
],
language = "c++",
)
grpc_cc_library(
name = "alts_util",
srcs = [
@ -1889,24 +1871,17 @@ grpc_cc_library(
"src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc",
"src/core/tsi/alts/handshaker/transport_security_common_api.cc",
],
hdrs = [
"src/core/lib/security/credentials/alts/check_gcp_environment.h",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h",
"src/core/tsi/alts/handshaker/transport_security_common_api.h",
],
external_deps = [
"nanopb",
],
language = "c++",
public_hdrs = GRPC_SECURE_PUBLIC_HDRS,
deps = [
"alts_proto",
"alts_upb",
"gpr",
"grpc_base",
],

@ -462,6 +462,12 @@ config("grpc_config") {
"src/core/ext/upb-generated/google/protobuf/wrappers.upb.h",
"src/core/ext/upb-generated/google/rpc/status.upb.c",
"src/core/ext/upb-generated/google/rpc/status.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c",
"src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c",
@ -865,10 +871,6 @@ config("grpc_config") {
"src/core/tsi/alts/frame_protector/frame_handler.h",
"src/core/tsi/alts/handshaker/alts_handshaker_client.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_client.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h",
"src/core/tsi/alts/handshaker/alts_shared_resource.cc",
"src/core/tsi/alts/handshaker/alts_shared_resource.h",
"src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc",
@ -876,12 +878,6 @@ config("grpc_config") {
"src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h",
"src/core/tsi/alts/handshaker/alts_tsi_utils.cc",
"src/core/tsi/alts/handshaker/alts_tsi_utils.h",
"src/core/tsi/alts/handshaker/altscontext.pb.c",
"src/core/tsi/alts/handshaker/altscontext.pb.h",
"src/core/tsi/alts/handshaker/handshaker.pb.c",
"src/core/tsi/alts/handshaker/handshaker.pb.h",
"src/core/tsi/alts/handshaker/transport_security_common.pb.c",
"src/core/tsi/alts/handshaker/transport_security_common.pb.h",
"src/core/tsi/alts/handshaker/transport_security_common_api.cc",
"src/core/tsi/alts/handshaker/transport_security_common_api.h",
"src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc",
@ -934,7 +930,6 @@ config("grpc_config") {
":gpr",
"//third_party/cares",
":address_sorting",
":nanopb",
]
public_configs = [

@ -528,7 +528,6 @@ add_dependencies(buildtests_cxx alts_frame_handler_test)
add_dependencies(buildtests_cxx alts_frame_protector_test)
add_dependencies(buildtests_cxx alts_grpc_record_protocol_test)
add_dependencies(buildtests_cxx alts_handshaker_client_test)
add_dependencies(buildtests_cxx alts_handshaker_service_api_test)
add_dependencies(buildtests_cxx alts_iovec_record_protocol_test)
add_dependencies(buildtests_cxx alts_security_connector_test)
add_dependencies(buildtests_cxx alts_tsi_handshaker_test)
@ -1255,23 +1254,18 @@ add_library(grpc
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc
src/core/tsi/alts/handshaker/alts_tsi_utils.cc
src/core/tsi/alts/handshaker/transport_security_common_api.cc
src/core/tsi/alts/handshaker/altscontext.pb.c
src/core/tsi/alts/handshaker/handshaker.pb.c
src/core/tsi/alts/handshaker/transport_security_common.pb.c
third_party/nanopb/pb_common.c
third_party/nanopb/pb_decode.c
third_party/nanopb/pb_encode.c
src/core/tsi/transport_security.cc
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c
third_party/upb/upb/decode.c
third_party/upb/upb/encode.c
third_party/upb/upb/msg.c
third_party/upb/upb/port.c
third_party/upb/upb/table.c
third_party/upb/upb/upb.c
src/core/tsi/transport_security.cc
src/core/ext/transport/chttp2/client/insecure/channel_create.cc
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc
src/core/ext/transport/chttp2/client/authority.cc
@ -1771,16 +1765,11 @@ add_library(grpc_cronet
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc
src/core/tsi/alts/handshaker/alts_tsi_utils.cc
src/core/tsi/alts/handshaker/transport_security_common_api.cc
src/core/tsi/alts/handshaker/altscontext.pb.c
src/core/tsi/alts/handshaker/handshaker.pb.c
src/core/tsi/alts/handshaker/transport_security_common.pb.c
third_party/nanopb/pb_common.c
third_party/nanopb/pb_decode.c
third_party/nanopb/pb_encode.c
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c
src/core/tsi/transport_security.cc
src/core/ext/transport/chttp2/client/insecure/channel_create.cc
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc
@ -11269,47 +11258,6 @@ target_link_libraries(alts_handshaker_client_test
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(alts_handshaker_service_api_test
test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(alts_handshaker_service_api_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
PRIVATE ${_gRPC_NANOPB_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_UPB_GENERATED_DIR}
PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR}
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE third_party/googletest/googletest/include
PRIVATE third_party/googletest/googletest
PRIVATE third_party/googletest/googlemock/include
PRIVATE third_party/googletest/googlemock
PRIVATE ${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(alts_handshaker_service_api_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
alts_test_util
gpr
grpc
${_gRPC_GFLAGS_LIBRARIES}
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)

@ -1146,7 +1146,6 @@ alts_frame_handler_test: $(BINDIR)/$(CONFIG)/alts_frame_handler_test
alts_frame_protector_test: $(BINDIR)/$(CONFIG)/alts_frame_protector_test
alts_grpc_record_protocol_test: $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test
alts_handshaker_client_test: $(BINDIR)/$(CONFIG)/alts_handshaker_client_test
alts_handshaker_service_api_test: $(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test
alts_iovec_record_protocol_test: $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test
alts_security_connector_test: $(BINDIR)/$(CONFIG)/alts_security_connector_test
alts_tsi_handshaker_test: $(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test
@ -1627,7 +1626,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/alts_frame_protector_test \
$(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test \
$(BINDIR)/$(CONFIG)/alts_handshaker_client_test \
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test \
$(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test \
$(BINDIR)/$(CONFIG)/alts_security_connector_test \
$(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test \
@ -1795,7 +1793,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/alts_frame_protector_test \
$(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test \
$(BINDIR)/$(CONFIG)/alts_handshaker_client_test \
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test \
$(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test \
$(BINDIR)/$(CONFIG)/alts_security_connector_test \
$(BINDIR)/$(CONFIG)/alts_tsi_handshaker_test \
@ -2241,8 +2238,6 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/alts_grpc_record_protocol_test || ( echo test alts_grpc_record_protocol_test failed ; exit 1 )
$(E) "[RUN] Testing alts_handshaker_client_test"
$(Q) $(BINDIR)/$(CONFIG)/alts_handshaker_client_test || ( echo test alts_handshaker_client_test failed ; exit 1 )
$(E) "[RUN] Testing alts_handshaker_service_api_test"
$(Q) $(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test || ( echo test alts_handshaker_service_api_test failed ; exit 1 )
$(E) "[RUN] Testing alts_iovec_record_protocol_test"
$(Q) $(BINDIR)/$(CONFIG)/alts_iovec_record_protocol_test || ( echo test alts_iovec_record_protocol_test failed ; exit 1 )
$(E) "[RUN] Testing alts_security_connector_test"
@ -3762,23 +3757,18 @@ LIBGRPC_SRC = \
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc \
src/core/tsi/alts/handshaker/alts_tsi_utils.cc \
src/core/tsi/alts/handshaker/transport_security_common_api.cc \
src/core/tsi/alts/handshaker/altscontext.pb.c \
src/core/tsi/alts/handshaker/handshaker.pb.c \
src/core/tsi/alts/handshaker/transport_security_common.pb.c \
third_party/nanopb/pb_common.c \
third_party/nanopb/pb_decode.c \
third_party/nanopb/pb_encode.c \
src/core/tsi/transport_security.cc \
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \
third_party/upb/upb/decode.c \
third_party/upb/upb/encode.c \
third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/core/tsi/transport_security.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \
src/core/ext/transport/chttp2/client/authority.cc \
@ -4266,16 +4256,11 @@ LIBGRPC_CRONET_SRC = \
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc \
src/core/tsi/alts/handshaker/alts_tsi_utils.cc \
src/core/tsi/alts/handshaker/transport_security_common_api.cc \
src/core/tsi/alts/handshaker/altscontext.pb.c \
src/core/tsi/alts/handshaker/handshaker.pb.c \
src/core/tsi/alts/handshaker/transport_security_common.pb.c \
third_party/nanopb/pb_common.c \
third_party/nanopb/pb_decode.c \
third_party/nanopb/pb_encode.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \
src/core/tsi/transport_security.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \
@ -13657,49 +13642,6 @@ endif
endif
ALTS_HANDSHAKER_SERVICE_API_TEST_SRC = \
test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.cc \
ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ALTS_HANDSHAKER_SERVICE_API_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test: openssl_dep_error
else
ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+.
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test: protobuf_dep_error
else
$(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test: $(PROTOBUF_DEP) $(ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libalts_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) $(ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libalts_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/alts_handshaker_service_api_test
endif
endif
$(OBJDIR)/$(CONFIG)/test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.o: $(LIBDIR)/$(CONFIG)/libalts_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc.a
deps_alts_handshaker_service_api_test: $(ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(ALTS_HANDSHAKER_SERVICE_API_TEST_OBJS:.o=.dep)
endif
endif
ALTS_IOVEC_RECORD_PROTOCOL_TEST_SRC = \
test/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol_test.cc \
@ -22480,6 +22422,9 @@ src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc: $(OPENSSL_
src/core/ext/transport/cronet/plugin_registry/grpc_cronet_plugin_registry.cc: $(OPENSSL_DEP)
src/core/ext/transport/cronet/transport/cronet_api_dummy.cc: $(OPENSSL_DEP)
src/core/ext/transport/cronet/transport/cronet_transport.cc: $(OPENSSL_DEP)
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c: $(OPENSSL_DEP)
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c: $(OPENSSL_DEP)
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c: $(OPENSSL_DEP)
src/core/lib/http/httpcli_security_connector.cc: $(OPENSSL_DEP)
src/core/lib/security/context/security_context.cc: $(OPENSSL_DEP)
src/core/lib/security/credentials/alts/alts_credentials.cc: $(OPENSSL_DEP)
@ -22534,14 +22479,9 @@ src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc: $(OPEN
src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc: $(OPENSSL_DEP)
src/core/tsi/alts/frame_protector/frame_handler.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_handshaker_client.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_shared_resource.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/alts_tsi_utils.cc: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/altscontext.pb.c: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/handshaker.pb.c: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/transport_security_common.pb.c: $(OPENSSL_DEP)
src/core/tsi/alts/handshaker/transport_security_common_api.cc: $(OPENSSL_DEP)
src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc: $(OPENSSL_DEP)
src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc: $(OPENSSL_DEP)
@ -22620,9 +22560,6 @@ test/cpp/util/string_ref_helper.cc: $(OPENSSL_DEP)
test/cpp/util/subprocess.cc: $(OPENSSL_DEP)
test/cpp/util/test_config_cc.cc: $(OPENSSL_DEP)
test/cpp/util/test_credentials_provider.cc: $(OPENSSL_DEP)
third_party/nanopb/pb_common.c: $(OPENSSL_DEP)
third_party/nanopb/pb_decode.c: $(OPENSSL_DEP)
third_party/nanopb/pb_encode.c: $(OPENSSL_DEP)
endif
.PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx dep_c dep_cxx bins_dep_c bins_dep_cxx clean

@ -17,17 +17,6 @@ settings:
g_stands_for: ganges
version: 1.24.0-dev
filegroups:
- name: alts_proto
headers:
- src/core/tsi/alts/handshaker/altscontext.pb.h
- src/core/tsi/alts/handshaker/handshaker.pb.h
- src/core/tsi/alts/handshaker/transport_security_common.pb.h
src:
- src/core/tsi/alts/handshaker/altscontext.pb.c
- src/core/tsi/alts/handshaker/handshaker.pb.c
- src/core/tsi/alts/handshaker/transport_security_common.pb.c
uses:
- nanopb
- name: alts_tsi
headers:
- src/core/tsi/alts/crypt/gsec.h
@ -80,14 +69,14 @@ filegroups:
- src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c
- src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c
- src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c
uses:
- upb
- name: alts_util
public_headers:
- include/grpc/grpc_security.h
headers:
- src/core/lib/security/credentials/alts/check_gcp_environment.h
- src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h
- src/core/tsi/alts/handshaker/alts_handshaker_service_api.h
- src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h
- src/core/tsi/alts/handshaker/alts_tsi_utils.h
- src/core/tsi/alts/handshaker/transport_security_common_api.h
src:
@ -98,14 +87,11 @@ filegroups:
- src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc
- src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc
- src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc
- src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc
- src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc
- src/core/tsi/alts/handshaker/alts_tsi_utils.cc
- src/core/tsi/alts/handshaker/transport_security_common_api.cc
uses:
- alts_proto
- alts_upb
- grpc_base
- nanopb
- tsi_interface
- upb
- name: census
@ -202,6 +188,8 @@ filegroups:
- src/core/ext/upb-generated/google/protobuf/timestamp.upb.c
- src/core/ext/upb-generated/google/protobuf/wrappers.upb.c
- src/core/ext/upb-generated/google/rpc/status.upb.c
uses:
- upb
- name: gpr_base
src:
- src/core/lib/gpr/alloc.cc
@ -878,6 +866,7 @@ filegroups:
- src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c
uses:
- google_api_upb
- upb
- name: grpc_max_age_filter
headers:
- src/core/ext/filters/max_age/max_age_filter.h
@ -4027,15 +4016,6 @@ targets:
- alts_test_util
- gpr
- grpc
- name: alts_handshaker_service_api_test
build: test
language: c++
src:
- test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.cc
deps:
- alts_test_util
- gpr
- grpc
- name: alts_iovec_record_protocol_test
build: test
language: c++

@ -334,23 +334,18 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc \
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc \
src/core/tsi/alts/handshaker/alts_tsi_utils.cc \
src/core/tsi/alts/handshaker/transport_security_common_api.cc \
src/core/tsi/alts/handshaker/altscontext.pb.c \
src/core/tsi/alts/handshaker/handshaker.pb.c \
src/core/tsi/alts/handshaker/transport_security_common.pb.c \
third_party/nanopb/pb_common.c \
third_party/nanopb/pb_decode.c \
third_party/nanopb/pb_encode.c \
src/core/tsi/transport_security.cc \
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \
third_party/upb/upb/decode.c \
third_party/upb/upb/encode.c \
third_party/upb/upb/msg.c \
third_party/upb/upb/port.c \
third_party/upb/upb/table.c \
third_party/upb/upb/upb.c \
src/core/tsi/transport_security.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create.cc \
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc \
src/core/ext/transport/chttp2/client/authority.cc \
@ -767,6 +762,7 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/api)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/protobuf)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/google/rpc)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/gcp)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/health/v1)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/src/proto/grpc/lb/v1)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-generated/validate)
@ -853,6 +849,5 @@ if test "$PHP_GRPC" != "no"; then
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/nanopb)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/upb/upb)
fi

@ -307,23 +307,18 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_client_options.cc " +
"src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_options.cc " +
"src\\core\\lib\\security\\credentials\\alts\\grpc_alts_credentials_server_options.cc " +
"src\\core\\tsi\\alts\\handshaker\\alts_handshaker_service_api.cc " +
"src\\core\\tsi\\alts\\handshaker\\alts_handshaker_service_api_util.cc " +
"src\\core\\tsi\\alts\\handshaker\\alts_tsi_utils.cc " +
"src\\core\\tsi\\alts\\handshaker\\transport_security_common_api.cc " +
"src\\core\\tsi\\alts\\handshaker\\altscontext.pb.c " +
"src\\core\\tsi\\alts\\handshaker\\handshaker.pb.c " +
"src\\core\\tsi\\alts\\handshaker\\transport_security_common.pb.c " +
"third_party\\nanopb\\pb_common.c " +
"third_party\\nanopb\\pb_decode.c " +
"third_party\\nanopb\\pb_encode.c " +
"src\\core\\tsi\\transport_security.cc " +
"src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\altscontext.upb.c " +
"src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\handshaker.upb.c " +
"src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp\\transport_security_common.upb.c " +
"third_party\\upb\\upb\\decode.c " +
"third_party\\upb\\upb\\encode.c " +
"third_party\\upb\\upb\\msg.c " +
"third_party\\upb\\upb\\port.c " +
"third_party\\upb\\upb\\table.c " +
"third_party\\upb\\upb\\upb.c " +
"src\\core\\tsi\\transport_security.cc " +
"src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create.cc " +
"src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create_posix.cc " +
"src\\core\\ext\\transport\\chttp2\\client\\authority.cc " +
@ -785,6 +780,7 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\gcp");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\health\\v1");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-generated\\src\\proto\\grpc\\lb");
@ -883,7 +879,6 @@ if (PHP_GRPC != "no") {
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\\nanopb");
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");

@ -228,6 +228,10 @@ Pod::Spec.new do |s|
'src/cpp/server/health/default_health_check_service.h',
'src/cpp/server/thread_pool_interface.h',
'src/cpp/thread_manager/thread_manager.h',
'third_party/nanopb/pb.h',
'third_party/nanopb/pb_common.h',
'third_party/nanopb/pb_decode.h',
'third_party/nanopb/pb_encode.h',
'src/cpp/client/insecure_credentials.cc',
'src/cpp/client/secure_credentials.cc',
'src/cpp/common/auth_property_iterator.cc',
@ -380,15 +384,11 @@ Pod::Spec.new do |s|
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h',
'src/core/lib/security/credentials/alts/check_gcp_environment.h',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h',
'src/core/tsi/alts/handshaker/alts_tsi_utils.h',
'src/core/tsi/alts/handshaker/transport_security_common_api.h',
'src/core/tsi/alts/handshaker/altscontext.pb.h',
'src/core/tsi/alts/handshaker/handshaker.pb.h',
'src/core/tsi/alts/handshaker/transport_security_common.pb.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
'third_party/upb/upb/decode.h',
'third_party/upb/upb/encode.h',
'third_party/upb/upb/generated_util.h',
@ -397,6 +397,8 @@ Pod::Spec.new do |s|
'third_party/upb/upb/port_undef.inc',
'third_party/upb/upb/table.int.h',
'third_party/upb/upb/upb.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/ext/transport/chttp2/client/authority.h',
'src/core/ext/transport/chttp2/client/chttp2_connector.h',
'src/core/ext/filters/client_channel/backup_poller.h',

@ -336,15 +336,11 @@ Pod::Spec.new do |s|
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h',
'src/core/lib/security/credentials/alts/check_gcp_environment.h',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h',
'src/core/tsi/alts/handshaker/alts_tsi_utils.h',
'src/core/tsi/alts/handshaker/transport_security_common_api.h',
'src/core/tsi/alts/handshaker/altscontext.pb.h',
'src/core/tsi/alts/handshaker/handshaker.pb.h',
'src/core/tsi/alts/handshaker/transport_security_common.pb.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
'third_party/upb/upb/decode.h',
'third_party/upb/upb/encode.h',
'third_party/upb/upb/generated_util.h',
@ -353,6 +349,8 @@ Pod::Spec.new do |s|
'third_party/upb/upb/port_undef.inc',
'third_party/upb/upb/table.int.h',
'third_party/upb/upb/upb.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/ext/transport/chttp2/client/authority.h',
'src/core/ext/transport/chttp2/client/chttp2_connector.h',
'src/core/ext/filters/client_channel/backup_poller.h',
@ -834,20 +832,18 @@ Pod::Spec.new do |s|
'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc',
'src/core/tsi/alts/handshaker/alts_tsi_utils.cc',
'src/core/tsi/alts/handshaker/transport_security_common_api.cc',
'src/core/tsi/alts/handshaker/altscontext.pb.c',
'src/core/tsi/alts/handshaker/handshaker.pb.c',
'src/core/tsi/alts/handshaker/transport_security_common.pb.c',
'src/core/tsi/transport_security.cc',
'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c',
'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c',
'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c',
'third_party/upb/upb/decode.c',
'third_party/upb/upb/encode.c',
'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/core/tsi/transport_security.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc',
'src/core/ext/transport/chttp2/client/authority.cc',
@ -1065,15 +1061,11 @@ Pod::Spec.new do |s|
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h',
'src/core/lib/security/credentials/alts/check_gcp_environment.h',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h',
'src/core/tsi/alts/handshaker/alts_tsi_utils.h',
'src/core/tsi/alts/handshaker/transport_security_common_api.h',
'src/core/tsi/alts/handshaker/altscontext.pb.h',
'src/core/tsi/alts/handshaker/handshaker.pb.h',
'src/core/tsi/alts/handshaker/transport_security_common.pb.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h',
'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h',
'third_party/upb/upb/decode.h',
'third_party/upb/upb/encode.h',
'third_party/upb/upb/generated_util.h',
@ -1082,6 +1074,8 @@ Pod::Spec.new do |s|
'third_party/upb/upb/port_undef.inc',
'third_party/upb/upb/table.int.h',
'third_party/upb/upb/upb.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/ext/transport/chttp2/client/authority.h',
'src/core/ext/transport/chttp2/client/chttp2_connector.h',
'src/core/ext/filters/client_channel/backup_poller.h',
@ -1336,16 +1330,9 @@ Pod::Spec.new do |s|
ss.source_files = 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc',
'src/core/ext/transport/cronet/transport/cronet_transport.cc',
'third_party/nanopb/pb_common.c',
'third_party/nanopb/pb_decode.c',
'third_party/nanopb/pb_encode.c',
'src/core/ext/transport/cronet/client/secure/cronet_channel_create.h',
'src/core/ext/transport/cronet/transport/cronet_transport.h',
'third_party/objective_c/Cronet/bidirectional_stream_c.h',
'third_party/nanopb/pb.h',
'third_party/nanopb/pb_common.h',
'third_party/nanopb/pb_decode.h',
'third_party/nanopb/pb_encode.h'
'third_party/objective_c/Cronet/bidirectional_stream_c.h'
end
s.subspec 'Tests' do |ss|

@ -265,19 +265,11 @@ Gem::Specification.new do |s|
s.files += %w( src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h )
s.files += %w( src/core/lib/security/credentials/alts/check_gcp_environment.h )
s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h )
s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_service_api.h )
s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h )
s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_utils.h )
s.files += %w( src/core/tsi/alts/handshaker/transport_security_common_api.h )
s.files += %w( src/core/tsi/alts/handshaker/altscontext.pb.h )
s.files += %w( src/core/tsi/alts/handshaker/handshaker.pb.h )
s.files += %w( src/core/tsi/alts/handshaker/transport_security_common.pb.h )
s.files += %w( third_party/nanopb/pb.h )
s.files += %w( third_party/nanopb/pb_common.h )
s.files += %w( third_party/nanopb/pb_decode.h )
s.files += %w( third_party/nanopb/pb_encode.h )
s.files += %w( src/core/tsi/transport_security.h )
s.files += %w( src/core/tsi/transport_security_interface.h )
s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h )
s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h )
s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h )
s.files += %w( third_party/upb/upb/decode.h )
s.files += %w( third_party/upb/upb/encode.h )
s.files += %w( third_party/upb/upb/generated_util.h )
@ -286,6 +278,8 @@ Gem::Specification.new do |s|
s.files += %w( third_party/upb/upb/port_undef.inc )
s.files += %w( third_party/upb/upb/table.int.h )
s.files += %w( third_party/upb/upb/upb.h )
s.files += %w( src/core/tsi/transport_security.h )
s.files += %w( src/core/tsi/transport_security_interface.h )
s.files += %w( src/core/ext/transport/chttp2/client/authority.h )
s.files += %w( src/core/ext/transport/chttp2/client/chttp2_connector.h )
s.files += %w( src/core/ext/filters/client_channel/backup_poller.h )
@ -767,23 +761,18 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc )
s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc )
s.files += %w( src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc )
s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc )
s.files += %w( src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc )
s.files += %w( src/core/tsi/alts/handshaker/alts_tsi_utils.cc )
s.files += %w( src/core/tsi/alts/handshaker/transport_security_common_api.cc )
s.files += %w( src/core/tsi/alts/handshaker/altscontext.pb.c )
s.files += %w( src/core/tsi/alts/handshaker/handshaker.pb.c )
s.files += %w( src/core/tsi/alts/handshaker/transport_security_common.pb.c )
s.files += %w( third_party/nanopb/pb_common.c )
s.files += %w( third_party/nanopb/pb_decode.c )
s.files += %w( third_party/nanopb/pb_encode.c )
s.files += %w( src/core/tsi/transport_security.cc )
s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c )
s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c )
s.files += %w( src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c )
s.files += %w( third_party/upb/upb/decode.c )
s.files += %w( third_party/upb/upb/encode.c )
s.files += %w( third_party/upb/upb/msg.c )
s.files += %w( third_party/upb/upb/port.c )
s.files += %w( third_party/upb/upb/table.c )
s.files += %w( third_party/upb/upb/upb.c )
s.files += %w( src/core/tsi/transport_security.cc )
s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create.cc )
s.files += %w( src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc )
s.files += %w( src/core/ext/transport/chttp2/client/authority.cc )

@ -544,23 +544,18 @@
'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc',
'src/core/tsi/alts/handshaker/alts_tsi_utils.cc',
'src/core/tsi/alts/handshaker/transport_security_common_api.cc',
'src/core/tsi/alts/handshaker/altscontext.pb.c',
'src/core/tsi/alts/handshaker/handshaker.pb.c',
'src/core/tsi/alts/handshaker/transport_security_common.pb.c',
'third_party/nanopb/pb_common.c',
'third_party/nanopb/pb_decode.c',
'third_party/nanopb/pb_encode.c',
'src/core/tsi/transport_security.cc',
'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c',
'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c',
'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c',
'third_party/upb/upb/decode.c',
'third_party/upb/upb/encode.c',
'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/core/tsi/transport_security.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc',
'src/core/ext/transport/chttp2/client/authority.cc',

@ -270,19 +270,11 @@
<file baseinstalldir="/" name="src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/check_gcp_environment.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_handshaker_service_api.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_tsi_utils.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common_api.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/altscontext.pb.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/handshaker.pb.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common.pb.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_common.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_decode.h" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_encode.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security_interface.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/decode.h" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/encode.h" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/generated_util.h" role="src" />
@ -291,6 +283,8 @@
<file baseinstalldir="/" name="third_party/upb/upb/port_undef.inc" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/table.int.h" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/upb.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security_interface.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/authority.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/chttp2_connector.h" role="src" />
<file baseinstalldir="/" name="src/core/ext/filters/client_channel/backup_poller.h" role="src" />
@ -772,23 +766,18 @@
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/alts_tsi_utils.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common_api.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/altscontext.pb.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/handshaker.pb.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts/handshaker/transport_security_common.pb.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_common.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_decode.c" role="src" />
<file baseinstalldir="/" name="third_party/nanopb/pb_encode.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c" role="src" />
<file baseinstalldir="/" name="src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/decode.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/encode.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/msg.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/port.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/table.c" role="src" />
<file baseinstalldir="/" name="third_party/upb/upb/upb.c" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/client/authority.cc" role="src" />

@ -27,7 +27,6 @@
#include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/surface/call.h"
#include "src/core/lib/surface/channel.h"
#include "src/core/tsi/alts/handshaker/alts_handshaker_service_api.h"
#include "src/core/tsi/alts/handshaker/alts_shared_resource.h"
#include "src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h"
#include "src/core/tsi/alts/handshaker/alts_tsi_utils.h"
@ -91,9 +90,9 @@ static void handshaker_client_send_buffer_destroy(
client->send_buffer = nullptr;
}
static bool is_handshake_finished_properly(grpc_gcp_handshaker_resp* resp) {
static bool is_handshake_finished_properly(grpc_gcp_HandshakerResp* resp) {
GPR_ASSERT(resp != nullptr);
if (resp->has_result) {
if (grpc_gcp_HandshakerResp_result(resp)) {
return true;
}
return false;
@ -140,8 +139,9 @@ void alts_handshaker_client_handle_response(alts_handshaker_client* c,
cb(TSI_INTERNAL_ERROR, user_data, nullptr, 0, nullptr);
return;
}
grpc_gcp_handshaker_resp* resp =
alts_tsi_utils_deserialize_response(recv_buffer);
upb::Arena arena;
grpc_gcp_HandshakerResp* resp =
alts_tsi_utils_deserialize_response(recv_buffer, arena.ptr());
grpc_byte_buffer_destroy(client->recv_buffer);
client->recv_buffer = nullptr;
/* Invalid handshaker response check. */
@ -150,35 +150,44 @@ void alts_handshaker_client_handle_response(alts_handshaker_client* c,
cb(TSI_DATA_CORRUPTED, user_data, nullptr, 0, nullptr);
return;
}
grpc_slice* slice = static_cast<grpc_slice*>(resp->out_frames.arg);
const grpc_gcp_HandshakerStatus* resp_status =
grpc_gcp_HandshakerResp_status(resp);
if (resp_status == nullptr) {
gpr_log(GPR_ERROR, "No status in HandshakerResp");
cb(TSI_DATA_CORRUPTED, user_data, nullptr, 0, nullptr);
return;
}
upb_strview out_frames = grpc_gcp_HandshakerResp_out_frames(resp);
unsigned char* bytes_to_send = nullptr;
size_t bytes_to_send_size = 0;
if (slice != nullptr) {
bytes_to_send_size = GRPC_SLICE_LENGTH(*slice);
if (out_frames.size > 0) {
bytes_to_send_size = out_frames.size;
while (bytes_to_send_size > client->buffer_size) {
client->buffer_size *= 2;
client->buffer = static_cast<unsigned char*>(
gpr_realloc(client->buffer, client->buffer_size));
}
memcpy(client->buffer, GRPC_SLICE_START_PTR(*slice), bytes_to_send_size);
memcpy(client->buffer, out_frames.data, bytes_to_send_size);
bytes_to_send = client->buffer;
}
tsi_handshaker_result* result = nullptr;
if (is_handshake_finished_properly(resp)) {
alts_tsi_handshaker_result_create(resp, client->is_client, &result);
alts_tsi_handshaker_result_set_unused_bytes(result, &client->recv_bytes,
resp->bytes_consumed);
alts_tsi_handshaker_result_set_unused_bytes(
result, &client->recv_bytes,
grpc_gcp_HandshakerResp_bytes_consumed(resp));
}
grpc_status_code code = static_cast<grpc_status_code>(resp->status.code);
grpc_status_code code = static_cast<grpc_status_code>(
grpc_gcp_HandshakerStatus_code(resp_status));
if (code != GRPC_STATUS_OK) {
grpc_slice* details = static_cast<grpc_slice*>(resp->status.details.arg);
if (details != nullptr) {
char* error_details = grpc_slice_to_c_string(*details);
upb_strview details = grpc_gcp_HandshakerStatus_details(resp_status);
if (details.size > 0) {
char* error_details = (char*)gpr_zalloc(details.size + 1);
memcpy(error_details, details.data, details.size);
gpr_log(GPR_ERROR, "Error from handshaker service:%s", error_details);
gpr_free(error_details);
}
}
grpc_gcp_handshaker_resp_destroy(resp);
cb(alts_tsi_utils_convert_to_tsi_result(code), user_data, bytes_to_send,
bytes_to_send_size, result);
}
@ -223,43 +232,59 @@ static tsi_result make_grpc_call(alts_handshaker_client* c, bool is_start) {
return TSI_OK;
}
/* Serializes a grpc_gcp_HandshakerReq message into a buffer and returns newly
* grpc_byte_buffer holding it. */
static grpc_byte_buffer* get_serialized_handshaker_req(
grpc_gcp_HandshakerReq* req, upb_arena* arena) {
size_t buf_length;
char* buf = grpc_gcp_HandshakerReq_serialize(req, arena, &buf_length);
if (buf == nullptr) {
return nullptr;
}
grpc_slice slice = grpc_slice_from_copied_buffer(buf, buf_length);
grpc_byte_buffer* byte_buffer = grpc_raw_byte_buffer_create(&slice, 1);
grpc_slice_unref_internal(slice);
return byte_buffer;
}
/* Create and populate a client_start handshaker request, then serialize it. */
static grpc_byte_buffer* get_serialized_start_client(
alts_handshaker_client* c) {
GPR_ASSERT(c != nullptr);
alts_grpc_handshaker_client* client =
reinterpret_cast<alts_grpc_handshaker_client*>(c);
bool ok = true;
grpc_gcp_handshaker_req* req =
grpc_gcp_handshaker_req_create(CLIENT_START_REQ);
ok &= grpc_gcp_handshaker_req_set_handshake_protocol(
req, grpc_gcp_HandshakeProtocol_ALTS);
ok &= grpc_gcp_handshaker_req_add_application_protocol(
req, ALTS_APPLICATION_PROTOCOL);
ok &= grpc_gcp_handshaker_req_add_record_protocol(req, ALTS_RECORD_PROTOCOL);
grpc_gcp_rpc_protocol_versions* versions = &client->options->rpc_versions;
ok &= grpc_gcp_handshaker_req_set_rpc_versions(
req, versions->max_rpc_version.major, versions->max_rpc_version.minor,
versions->min_rpc_version.major, versions->min_rpc_version.minor);
char* target_name = grpc_slice_to_c_string(client->target_name);
ok &= grpc_gcp_handshaker_req_set_target_name(req, target_name);
upb::Arena arena;
grpc_gcp_HandshakerReq* req = grpc_gcp_HandshakerReq_new(arena.ptr());
grpc_gcp_StartClientHandshakeReq* start_client =
grpc_gcp_HandshakerReq_mutable_client_start(req, arena.ptr());
grpc_gcp_StartClientHandshakeReq_set_handshake_security_protocol(
start_client, grpc_gcp_ALTS);
grpc_gcp_StartClientHandshakeReq_add_application_protocols(
start_client, upb_strview_makez(ALTS_APPLICATION_PROTOCOL), arena.ptr());
grpc_gcp_StartClientHandshakeReq_add_record_protocols(
start_client, upb_strview_makez(ALTS_RECORD_PROTOCOL), arena.ptr());
grpc_gcp_RpcProtocolVersions* client_version =
grpc_gcp_StartClientHandshakeReq_mutable_rpc_versions(start_client,
arena.ptr());
grpc_gcp_RpcProtocolVersions_assign_from_struct(
client_version, arena.ptr(), &client->options->rpc_versions);
grpc_gcp_StartClientHandshakeReq_set_target_name(
start_client,
upb_strview_make(reinterpret_cast<const char*>(
GRPC_SLICE_START_PTR(client->target_name)),
GRPC_SLICE_LENGTH(client->target_name)));
target_service_account* ptr =
(reinterpret_cast<grpc_alts_credentials_client_options*>(client->options))
->target_account_list_head;
while (ptr != nullptr) {
grpc_gcp_handshaker_req_add_target_identity_service_account(req, ptr->data);
grpc_gcp_Identity* target_identity =
grpc_gcp_StartClientHandshakeReq_add_target_identities(start_client,
arena.ptr());
grpc_gcp_Identity_set_service_account(target_identity,
upb_strview_makez(ptr->data));
ptr = ptr->next;
}
grpc_slice slice;
ok &= grpc_gcp_handshaker_req_encode(req, &slice);
grpc_byte_buffer* buffer = nullptr;
if (ok) {
buffer = grpc_raw_byte_buffer_create(&slice, 1 /* number of slices */);
}
grpc_slice_unref_internal(slice);
gpr_free(target_name);
grpc_gcp_handshaker_req_destroy(req);
return buffer;
return get_serialized_handshaker_req(req, arena.ptr());
}
static tsi_result handshaker_client_start_client(alts_handshaker_client* c) {
@ -290,28 +315,35 @@ static grpc_byte_buffer* get_serialized_start_server(
GPR_ASSERT(bytes_received != nullptr);
alts_grpc_handshaker_client* client =
reinterpret_cast<alts_grpc_handshaker_client*>(c);
grpc_gcp_handshaker_req* req =
grpc_gcp_handshaker_req_create(SERVER_START_REQ);
bool ok = grpc_gcp_handshaker_req_add_application_protocol(
req, ALTS_APPLICATION_PROTOCOL);
ok &= grpc_gcp_handshaker_req_param_add_record_protocol(
req, grpc_gcp_HandshakeProtocol_ALTS, ALTS_RECORD_PROTOCOL);
ok &= grpc_gcp_handshaker_req_set_in_bytes(
req, reinterpret_cast<const char*> GRPC_SLICE_START_PTR(*bytes_received),
GRPC_SLICE_LENGTH(*bytes_received));
grpc_gcp_rpc_protocol_versions* versions = &client->options->rpc_versions;
ok &= grpc_gcp_handshaker_req_set_rpc_versions(
req, versions->max_rpc_version.major, versions->max_rpc_version.minor,
versions->min_rpc_version.major, versions->min_rpc_version.minor);
grpc_slice req_slice;
ok &= grpc_gcp_handshaker_req_encode(req, &req_slice);
grpc_byte_buffer* buffer = nullptr;
if (ok) {
buffer = grpc_raw_byte_buffer_create(&req_slice, 1 /* number of slices */);
}
grpc_slice_unref_internal(req_slice);
grpc_gcp_handshaker_req_destroy(req);
return buffer;
upb::Arena arena;
grpc_gcp_HandshakerReq* req = grpc_gcp_HandshakerReq_new(arena.ptr());
grpc_gcp_StartServerHandshakeReq* start_server =
grpc_gcp_HandshakerReq_mutable_server_start(req, arena.ptr());
grpc_gcp_StartServerHandshakeReq_add_application_protocols(
start_server, upb_strview_makez(ALTS_APPLICATION_PROTOCOL), arena.ptr());
grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry* param =
grpc_gcp_StartServerHandshakeReq_add_handshake_parameters(start_server,
arena.ptr());
grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_set_key(
param, grpc_gcp_ALTS);
grpc_gcp_ServerHandshakeParameters* value =
grpc_gcp_ServerHandshakeParameters_new(arena.ptr());
grpc_gcp_ServerHandshakeParameters_add_record_protocols(
value, upb_strview_makez(ALTS_RECORD_PROTOCOL), arena.ptr());
grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_set_value(param,
value);
grpc_gcp_StartServerHandshakeReq_set_in_bytes(
start_server, upb_strview_make(reinterpret_cast<const char*>(
GRPC_SLICE_START_PTR(*bytes_received)),
GRPC_SLICE_LENGTH(*bytes_received)));
grpc_gcp_RpcProtocolVersions* server_version =
grpc_gcp_StartServerHandshakeReq_mutable_rpc_versions(start_server,
arena.ptr());
grpc_gcp_RpcProtocolVersions_assign_from_struct(
server_version, arena.ptr(), &client->options->rpc_versions);
return get_serialized_handshaker_req(req, arena.ptr());
}
static tsi_result handshaker_client_start_server(alts_handshaker_client* c,
@ -339,19 +371,15 @@ static tsi_result handshaker_client_start_server(alts_handshaker_client* c,
/* Create and populate a next handshaker request, then serialize it. */
static grpc_byte_buffer* get_serialized_next(grpc_slice* bytes_received) {
GPR_ASSERT(bytes_received != nullptr);
grpc_gcp_handshaker_req* req = grpc_gcp_handshaker_req_create(NEXT_REQ);
bool ok = grpc_gcp_handshaker_req_set_in_bytes(
req, reinterpret_cast<const char*> GRPC_SLICE_START_PTR(*bytes_received),
GRPC_SLICE_LENGTH(*bytes_received));
grpc_slice req_slice;
ok &= grpc_gcp_handshaker_req_encode(req, &req_slice);
grpc_byte_buffer* buffer = nullptr;
if (ok) {
buffer = grpc_raw_byte_buffer_create(&req_slice, 1 /* number of slices */);
}
grpc_slice_unref_internal(req_slice);
grpc_gcp_handshaker_req_destroy(req);
return buffer;
upb::Arena arena;
grpc_gcp_HandshakerReq* req = grpc_gcp_HandshakerReq_new(arena.ptr());
grpc_gcp_NextHandshakeMessageReq* next =
grpc_gcp_HandshakerReq_mutable_next(req, arena.ptr());
grpc_gcp_NextHandshakeMessageReq_set_in_bytes(
next, upb_strview_make(reinterpret_cast<const char*> GRPC_SLICE_START_PTR(
*bytes_received),
GRPC_SLICE_LENGTH(*bytes_received)));
return get_serialized_handshaker_req(req, arena.ptr());
}
static tsi_result handshaker_client_next(alts_handshaker_client* c,

@ -1,520 +0,0 @@
/*
*
* Copyright 2018 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/tsi/alts/handshaker/alts_handshaker_service_api.h"
#include <stdio.h>
#include <stdlib.h>
#include "src/core/tsi/alts/handshaker/transport_security_common_api.h"
/* HandshakerReq */
grpc_gcp_handshaker_req* grpc_gcp_handshaker_req_create(
grpc_gcp_handshaker_req_type type) {
grpc_gcp_handshaker_req* req =
static_cast<grpc_gcp_handshaker_req*>(gpr_zalloc(sizeof(*req)));
switch (type) {
case CLIENT_START_REQ:
req->has_client_start = true;
break;
case SERVER_START_REQ:
req->has_server_start = true;
break;
case NEXT_REQ:
req->has_next = true;
break;
}
return req;
}
void grpc_gcp_handshaker_req_destroy(grpc_gcp_handshaker_req* req) {
if (req == nullptr) {
return;
}
if (req->has_client_start) {
/* Destroy client_start request. */
destroy_repeated_field_list_identity(
static_cast<repeated_field*>(req->client_start.target_identities.arg));
destroy_repeated_field_list_string(static_cast<repeated_field*>(
req->client_start.application_protocols.arg));
destroy_repeated_field_list_string(
static_cast<repeated_field*>(req->client_start.record_protocols.arg));
if (req->client_start.has_local_identity) {
destroy_slice(static_cast<grpc_slice*>(
req->client_start.local_identity.hostname.arg));
destroy_slice(static_cast<grpc_slice*>(
req->client_start.local_identity.service_account.arg));
}
if (req->client_start.has_local_endpoint) {
destroy_slice(static_cast<grpc_slice*>(
req->client_start.local_endpoint.ip_address.arg));
}
if (req->client_start.has_remote_endpoint) {
destroy_slice(static_cast<grpc_slice*>(
req->client_start.remote_endpoint.ip_address.arg));
}
destroy_slice(static_cast<grpc_slice*>(req->client_start.target_name.arg));
} else if (req->has_server_start) {
/* Destroy server_start request. */
size_t i = 0;
for (i = 0; i < req->server_start.handshake_parameters_count; i++) {
destroy_repeated_field_list_identity(
static_cast<repeated_field*>(req->server_start.handshake_parameters[i]
.value.local_identities.arg));
destroy_repeated_field_list_string(
static_cast<repeated_field*>(req->server_start.handshake_parameters[i]
.value.record_protocols.arg));
}
destroy_repeated_field_list_string(static_cast<repeated_field*>(
req->server_start.application_protocols.arg));
if (req->server_start.has_local_endpoint) {
destroy_slice(static_cast<grpc_slice*>(
req->server_start.local_endpoint.ip_address.arg));
}
if (req->server_start.has_remote_endpoint) {
destroy_slice(static_cast<grpc_slice*>(
req->server_start.remote_endpoint.ip_address.arg));
}
destroy_slice(static_cast<grpc_slice*>(req->server_start.in_bytes.arg));
} else {
/* Destroy next request. */
destroy_slice(static_cast<grpc_slice*>(req->next.in_bytes.arg));
}
gpr_free(req);
}
bool grpc_gcp_handshaker_req_set_handshake_protocol(
grpc_gcp_handshaker_req* req,
grpc_gcp_handshake_protocol handshake_protocol) {
if (req == nullptr || !req->has_client_start) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_set_handshake_protocol().");
return false;
}
req->client_start.has_handshake_security_protocol = true;
req->client_start.handshake_security_protocol = handshake_protocol;
return true;
}
bool grpc_gcp_handshaker_req_set_target_name(grpc_gcp_handshaker_req* req,
const char* target_name) {
if (req == nullptr || target_name == nullptr || !req->has_client_start) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_set_target_name().");
return false;
}
grpc_slice* slice = create_slice(target_name, strlen(target_name));
req->client_start.target_name.arg = slice;
req->client_start.target_name.funcs.encode = encode_string_or_bytes_cb;
return true;
}
bool grpc_gcp_handshaker_req_add_application_protocol(
grpc_gcp_handshaker_req* req, const char* application_protocol) {
if (req == nullptr || application_protocol == nullptr || req->has_next) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_add_application_protocol().");
return false;
}
grpc_slice* slice =
create_slice(application_protocol, strlen(application_protocol));
if (req->has_client_start) {
add_repeated_field(reinterpret_cast<repeated_field**>(
&req->client_start.application_protocols.arg),
slice);
req->client_start.application_protocols.funcs.encode =
encode_repeated_string_cb;
} else {
add_repeated_field(reinterpret_cast<repeated_field**>(
&req->server_start.application_protocols.arg),
slice);
req->server_start.application_protocols.funcs.encode =
encode_repeated_string_cb;
}
return true;
}
bool grpc_gcp_handshaker_req_add_record_protocol(grpc_gcp_handshaker_req* req,
const char* record_protocol) {
if (req == nullptr || record_protocol == nullptr || !req->has_client_start) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_add_record_protocol().");
return false;
}
grpc_slice* slice = create_slice(record_protocol, strlen(record_protocol));
add_repeated_field(reinterpret_cast<repeated_field**>(
&req->client_start.record_protocols.arg),
slice);
req->client_start.record_protocols.funcs.encode = encode_repeated_string_cb;
return true;
}
static void set_identity_hostname(grpc_gcp_identity* identity,
const char* hostname) {
grpc_slice* slice = create_slice(hostname, strlen(hostname));
identity->hostname.arg = slice;
identity->hostname.funcs.encode = encode_string_or_bytes_cb;
}
static void set_identity_service_account(grpc_gcp_identity* identity,
const char* service_account) {
grpc_slice* slice = create_slice(service_account, strlen(service_account));
identity->service_account.arg = slice;
identity->service_account.funcs.encode = encode_string_or_bytes_cb;
}
bool grpc_gcp_handshaker_req_add_target_identity_hostname(
grpc_gcp_handshaker_req* req, const char* hostname) {
if (req == nullptr || hostname == nullptr || !req->has_client_start) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_req_add_target_identity_hostname().");
return false;
}
grpc_gcp_identity* target_identity =
static_cast<grpc_gcp_identity*>(gpr_zalloc(sizeof(*target_identity)));
set_identity_hostname(target_identity, hostname);
req->client_start.target_identities.funcs.encode =
encode_repeated_identity_cb;
add_repeated_field(reinterpret_cast<repeated_field**>(
&req->client_start.target_identities.arg),
target_identity);
return true;
}
bool grpc_gcp_handshaker_req_add_target_identity_service_account(
grpc_gcp_handshaker_req* req, const char* service_account) {
if (req == nullptr || service_account == nullptr || !req->has_client_start) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_req_add_target_identity_service_account().");
return false;
}
grpc_gcp_identity* target_identity =
static_cast<grpc_gcp_identity*>(gpr_zalloc(sizeof(*target_identity)));
set_identity_service_account(target_identity, service_account);
req->client_start.target_identities.funcs.encode =
encode_repeated_identity_cb;
add_repeated_field(reinterpret_cast<repeated_field**>(
&req->client_start.target_identities.arg),
target_identity);
return true;
}
bool grpc_gcp_handshaker_req_set_local_identity_hostname(
grpc_gcp_handshaker_req* req, const char* hostname) {
if (req == nullptr || hostname == nullptr || !req->has_client_start) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_req_set_local_identity_hostname().");
return false;
}
req->client_start.has_local_identity = true;
set_identity_hostname(&req->client_start.local_identity, hostname);
return true;
}
bool grpc_gcp_handshaker_req_set_local_identity_service_account(
grpc_gcp_handshaker_req* req, const char* service_account) {
if (req == nullptr || service_account == nullptr || !req->has_client_start) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_req_set_local_identity_service_account().");
return false;
}
req->client_start.has_local_identity = true;
set_identity_service_account(&req->client_start.local_identity,
service_account);
return true;
}
static void set_endpoint(grpc_gcp_endpoint* endpoint, const char* ip_address,
size_t port, grpc_gcp_network_protocol protocol) {
grpc_slice* slice = create_slice(ip_address, strlen(ip_address));
endpoint->ip_address.arg = slice;
endpoint->ip_address.funcs.encode = encode_string_or_bytes_cb;
endpoint->has_port = true;
endpoint->port = static_cast<int32_t>(port);
endpoint->has_protocol = true;
endpoint->protocol = protocol;
}
bool grpc_gcp_handshaker_req_set_rpc_versions(grpc_gcp_handshaker_req* req,
uint32_t max_major,
uint32_t max_minor,
uint32_t min_major,
uint32_t min_minor) {
if (req == nullptr || req->has_next) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_set_rpc_versions().");
return false;
}
if (req->has_client_start) {
req->client_start.has_rpc_versions = true;
grpc_gcp_rpc_protocol_versions_set_max(&req->client_start.rpc_versions,
max_major, max_minor);
grpc_gcp_rpc_protocol_versions_set_min(&req->client_start.rpc_versions,
min_major, min_minor);
} else {
req->server_start.has_rpc_versions = true;
grpc_gcp_rpc_protocol_versions_set_max(&req->server_start.rpc_versions,
max_major, max_minor);
grpc_gcp_rpc_protocol_versions_set_min(&req->server_start.rpc_versions,
min_major, min_minor);
}
return true;
}
bool grpc_gcp_handshaker_req_set_local_endpoint(
grpc_gcp_handshaker_req* req, const char* ip_address, size_t port,
grpc_gcp_network_protocol protocol) {
if (req == nullptr || ip_address == nullptr || port > 65535 ||
req->has_next) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_set_local_endpoint().");
return false;
}
if (req->has_client_start) {
req->client_start.has_local_endpoint = true;
set_endpoint(&req->client_start.local_endpoint, ip_address, port, protocol);
} else {
req->server_start.has_local_endpoint = true;
set_endpoint(&req->server_start.local_endpoint, ip_address, port, protocol);
}
return true;
}
bool grpc_gcp_handshaker_req_set_remote_endpoint(
grpc_gcp_handshaker_req* req, const char* ip_address, size_t port,
grpc_gcp_network_protocol protocol) {
if (req == nullptr || ip_address == nullptr || port > 65535 ||
req->has_next) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_set_remote_endpoint().");
return false;
}
if (req->has_client_start) {
req->client_start.has_remote_endpoint = true;
set_endpoint(&req->client_start.remote_endpoint, ip_address, port,
protocol);
} else {
req->server_start.has_remote_endpoint = true;
set_endpoint(&req->server_start.remote_endpoint, ip_address, port,
protocol);
}
return true;
}
bool grpc_gcp_handshaker_req_set_in_bytes(grpc_gcp_handshaker_req* req,
const char* in_bytes, size_t size) {
if (req == nullptr || in_bytes == nullptr || req->has_client_start) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_set_in_bytes().");
return false;
}
grpc_slice* slice = create_slice(in_bytes, size);
if (req->has_next) {
req->next.in_bytes.arg = slice;
req->next.in_bytes.funcs.encode = &encode_string_or_bytes_cb;
} else {
req->server_start.in_bytes.arg = slice;
req->server_start.in_bytes.funcs.encode = &encode_string_or_bytes_cb;
}
return true;
}
static grpc_gcp_server_handshake_parameters* server_start_find_param(
grpc_gcp_handshaker_req* req, int32_t key) {
size_t i = 0;
for (i = 0; i < req->server_start.handshake_parameters_count; i++) {
if (req->server_start.handshake_parameters[i].key == key) {
return &req->server_start.handshake_parameters[i].value;
}
}
req->server_start
.handshake_parameters[req->server_start.handshake_parameters_count]
.has_key = true;
req->server_start
.handshake_parameters[req->server_start.handshake_parameters_count]
.has_value = true;
req->server_start
.handshake_parameters[req->server_start.handshake_parameters_count++]
.key = key;
return &req->server_start
.handshake_parameters
[req->server_start.handshake_parameters_count - 1]
.value;
}
bool grpc_gcp_handshaker_req_param_add_record_protocol(
grpc_gcp_handshaker_req* req, grpc_gcp_handshake_protocol key,
const char* record_protocol) {
if (req == nullptr || record_protocol == nullptr || !req->has_server_start) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_param_add_record_protocol().");
return false;
}
grpc_gcp_server_handshake_parameters* param =
server_start_find_param(req, key);
grpc_slice* slice = create_slice(record_protocol, strlen(record_protocol));
add_repeated_field(
reinterpret_cast<repeated_field**>(&param->record_protocols.arg), slice);
param->record_protocols.funcs.encode = &encode_repeated_string_cb;
return true;
}
bool grpc_gcp_handshaker_req_param_add_local_identity_hostname(
grpc_gcp_handshaker_req* req, grpc_gcp_handshake_protocol key,
const char* hostname) {
if (req == nullptr || hostname == nullptr || !req->has_server_start) {
gpr_log(GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_param_add_local_identity_hostname().");
return false;
}
grpc_gcp_server_handshake_parameters* param =
server_start_find_param(req, key);
grpc_gcp_identity* local_identity =
static_cast<grpc_gcp_identity*>(gpr_zalloc(sizeof(*local_identity)));
set_identity_hostname(local_identity, hostname);
add_repeated_field(
reinterpret_cast<repeated_field**>(&param->local_identities.arg),
local_identity);
param->local_identities.funcs.encode = &encode_repeated_identity_cb;
return true;
}
bool grpc_gcp_handshaker_req_param_add_local_identity_service_account(
grpc_gcp_handshaker_req* req, grpc_gcp_handshake_protocol key,
const char* service_account) {
if (req == nullptr || service_account == nullptr || !req->has_server_start) {
gpr_log(
GPR_ERROR,
"Invalid arguments to "
"grpc_gcp_handshaker_req_param_add_local_identity_service_account().");
return false;
}
grpc_gcp_server_handshake_parameters* param =
server_start_find_param(req, key);
grpc_gcp_identity* local_identity =
static_cast<grpc_gcp_identity*>(gpr_zalloc(sizeof(*local_identity)));
set_identity_service_account(local_identity, service_account);
add_repeated_field(
reinterpret_cast<repeated_field**>(&param->local_identities.arg),
local_identity);
param->local_identities.funcs.encode = &encode_repeated_identity_cb;
return true;
}
bool grpc_gcp_handshaker_req_encode(grpc_gcp_handshaker_req* req,
grpc_slice* slice) {
if (req == nullptr || slice == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to grpc_gcp_handshaker_req_encode().");
return false;
}
pb_ostream_t size_stream;
memset(&size_stream, 0, sizeof(pb_ostream_t));
if (!pb_encode(&size_stream, grpc_gcp_HandshakerReq_fields, req)) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&size_stream));
return false;
}
size_t encoded_length = size_stream.bytes_written;
*slice = grpc_slice_malloc(encoded_length);
pb_ostream_t output_stream =
pb_ostream_from_buffer(GRPC_SLICE_START_PTR(*slice), encoded_length);
if (!pb_encode(&output_stream, grpc_gcp_HandshakerReq_fields, req) != 0) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&output_stream));
return false;
}
return true;
}
/* HandshakerResp. */
grpc_gcp_handshaker_resp* grpc_gcp_handshaker_resp_create(void) {
grpc_gcp_handshaker_resp* resp =
static_cast<grpc_gcp_handshaker_resp*>(gpr_zalloc(sizeof(*resp)));
return resp;
}
void grpc_gcp_handshaker_resp_destroy(grpc_gcp_handshaker_resp* resp) {
if (resp != nullptr) {
destroy_slice(static_cast<grpc_slice*>(resp->out_frames.arg));
if (resp->has_status) {
destroy_slice(static_cast<grpc_slice*>(resp->status.details.arg));
}
if (resp->has_result) {
destroy_slice(
static_cast<grpc_slice*>(resp->result.application_protocol.arg));
destroy_slice(static_cast<grpc_slice*>(resp->result.record_protocol.arg));
destroy_slice(static_cast<grpc_slice*>(resp->result.key_data.arg));
if (resp->result.has_local_identity) {
destroy_slice(
static_cast<grpc_slice*>(resp->result.local_identity.hostname.arg));
destroy_slice(static_cast<grpc_slice*>(
resp->result.local_identity.service_account.arg));
}
if (resp->result.has_peer_identity) {
destroy_slice(
static_cast<grpc_slice*>(resp->result.peer_identity.hostname.arg));
destroy_slice(static_cast<grpc_slice*>(
resp->result.peer_identity.service_account.arg));
}
}
gpr_free(resp);
}
}
bool grpc_gcp_handshaker_resp_decode(grpc_slice encoded_handshaker_resp,
grpc_gcp_handshaker_resp* resp) {
if (resp == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr argument to grpc_gcp_handshaker_resp_decode().");
return false;
}
pb_istream_t stream =
pb_istream_from_buffer(GRPC_SLICE_START_PTR(encoded_handshaker_resp),
GRPC_SLICE_LENGTH(encoded_handshaker_resp));
resp->out_frames.funcs.decode = decode_string_or_bytes_cb;
resp->status.details.funcs.decode = decode_string_or_bytes_cb;
resp->result.application_protocol.funcs.decode = decode_string_or_bytes_cb;
resp->result.record_protocol.funcs.decode = decode_string_or_bytes_cb;
resp->result.key_data.funcs.decode = decode_string_or_bytes_cb;
resp->result.peer_identity.hostname.funcs.decode = decode_string_or_bytes_cb;
resp->result.peer_identity.service_account.funcs.decode =
decode_string_or_bytes_cb;
resp->result.local_identity.hostname.funcs.decode = decode_string_or_bytes_cb;
resp->result.local_identity.service_account.funcs.decode =
decode_string_or_bytes_cb;
if (!pb_decode(&stream, grpc_gcp_HandshakerResp_fields, resp)) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream));
return false;
}
return true;
}

@ -1,323 +0,0 @@
/*
*
* Copyright 2018 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_H
#define GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_H
#include <grpc/support/port_platform.h>
#include "src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h"
/**
* An implementation of nanopb thin wrapper used to set/get and
* serialize/de-serialize of ALTS handshake requests and responses.
*
* All APIs in the header are thread-compatible. A typical usage of this API at
* the client side is as follows:
*
* -----------------------------------------------------------------------------
* // Create, populate, and serialize an ALTS client_start handshake request to
* // send to the server.
* grpc_gcp_handshaker_req* req =
* grpc_gcp_handshaker_req_create(CLIENT_START_REQ);
* grpc_gcp_handshaker_req_set_handshake_protocol(
req, grpc_gcp_HandshakeProtocol_ALTS);
* grpc_gcp_handshaker_req_add_application_protocol(req, "grpc");
* grpc_gcp_handshaker_req_add_record_protocol(req, "ALTSRP_GCM_AES128");
* grpc_slice client_slice;
* if (!grpc_gcp_handshaker_req_encode(req, &client_slice)) {
* fprintf(stderr, "ALTS handshake request encoding failed.";
* }
*
* // De-serialize a data stream received from the server, and store the result
* // at ALTS handshake response.
* grpc_gcp_handshaker_resp* resp = grpc_gcp_handshaker_resp_create();
* if (!grpc_gcp_handshaker_resp_decode(server_slice, resp)) {
* fprintf(stderr, "ALTS handshake response decoding failed.");
* }
* // To access a variable-length datatype field (i.e., pb_callback_t),
* // access its "arg" subfield (if it has been set).
* if (resp->out_frames.arg != nullptr) {
* grpc_slice* slice = resp->out_frames.arg;
* }
* // To access a fixed-length datatype field (i.e., not pb_calback_t),
* // access the field directly (if it has been set).
* if (resp->has_status && resp->status->has_code) {
* uint32_t code = resp->status->code;
* }
*------------------------------------------------------------------------------
*/
/**
* This method creates an ALTS handshake request.
*
* - type: an enum type value that can be either CLIENT_START_REQ,
* SERVER_START_REQ, or NEXT_REQ to indicate the created instance will be
* client_start, server_start, and next handshake request message
* respectively.
*
* The method returns a pointer to the created instance.
*/
grpc_gcp_handshaker_req* grpc_gcp_handshaker_req_create(
grpc_gcp_handshaker_req_type type);
/**
* This method sets the value for handshake_security_protocol field of ALTS
* client_start handshake request.
*
* - req: an ALTS handshake request.
* - handshake_protocol: a enum type value representing the handshake security
* protocol.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_set_handshake_protocol(
grpc_gcp_handshaker_req* req,
grpc_gcp_handshake_protocol handshake_protocol);
/**
* This method sets the value for target_name field of ALTS client_start
* handshake request.
*
* - req: an ALTS handshake request.
* - target_name: a target name to be set.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_set_target_name(grpc_gcp_handshaker_req* req,
const char* target_name);
/**
* This method adds an application protocol supported by the server (or
* client) to ALTS server_start (or client_start) handshake request.
*
* - req: an ALTS handshake request.
* - application_protocol: an application protocol (e.g., grpc) to be added.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_add_application_protocol(
grpc_gcp_handshaker_req* req, const char* application_protocol);
/**
* This method adds a record protocol supported by the client to ALTS
* client_start handshake request.
*
* - req: an ALTS handshake request.
* - record_protocol: a record protocol (e.g., ALTSRP_GCM_AES128) to be
* added.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_add_record_protocol(grpc_gcp_handshaker_req* req,
const char* record_protocol);
/**
* This method adds a target server identity represented as hostname and
* acceptable by a client to ALTS client_start handshake request.
*
* - req: an ALTS handshake request.
* - hostname: a string representation of hostname at the connection
* endpoint to be added.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_add_target_identity_hostname(
grpc_gcp_handshaker_req* req, const char* hostname);
/**
* This method adds a target server identity represented as service account and
* acceptable by a client to ALTS client_start handshake request.
*
* - req: an ALTS handshake request.
* - service_account: a string representation of service account at the
* connection endpoint to be added.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_add_target_identity_service_account(
grpc_gcp_handshaker_req* req, const char* service_account);
/**
* This method sets the hostname for local_identity field of ALTS client_start
* handshake request.
*
* - req: an ALTS handshake request.
* - hostname: a string representation of hostname.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_set_local_identity_hostname(
grpc_gcp_handshaker_req* req, const char* hostname);
/**
* This method sets the service account for local_identity field of ALTS
* client_start handshake request.
*
* - req: an ALTS handshake request.
* - service_account: a string representation of service account.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_set_local_identity_service_account(
grpc_gcp_handshaker_req* req, const char* service_account);
/**
* This method sets the value for local_endpoint field of either ALTS
* client_start or server_start handshake request.
*
* - req: an ALTS handshake request.
* - ip_address: a string representation of ip address associated with the
* local endpoint, that could be either IPv4 or IPv6.
* - port: a port number associated with the local endpoint.
* - protocol: a network protocol (e.g., TCP or UDP) associated with the
* local endpoint.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_set_local_endpoint(
grpc_gcp_handshaker_req* req, const char* ip_address, size_t port,
grpc_gcp_network_protocol protocol);
/**
* This method sets the value for remote_endpoint field of either ALTS
* client_start or server_start handshake request.
*
* - req: an ALTS handshake request.
* - ip_address: a string representation of ip address associated with the
* remote endpoint, that could be either IPv4 or IPv6.
* - port: a port number associated with the remote endpoint.
* - protocol: a network protocol (e.g., TCP or UDP) associated with the
* remote endpoint.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_set_remote_endpoint(
grpc_gcp_handshaker_req* req, const char* ip_address, size_t port,
grpc_gcp_network_protocol protocol);
/**
* This method sets the value for in_bytes field of either ALTS server_start or
* next handshake request.
*
* - req: an ALTS handshake request.
* - in_bytes: a buffer containing bytes taken from out_frames of the peer's
* ALTS handshake response. It is possible that the peer's out_frames are
* split into multiple handshake request messages.
* - size: size of in_bytes buffer.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_set_in_bytes(grpc_gcp_handshaker_req* req,
const char* in_bytes, size_t size);
/**
* This method adds a record protocol to handshake parameters mapped by the
* handshake protocol for ALTS server_start handshake request.
*
* - req: an ALTS handshake request.
* - key: an enum type value representing a handshake security protocol.
* - record_protocol: a record protocol to be added.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_param_add_record_protocol(
grpc_gcp_handshaker_req* req, grpc_gcp_handshake_protocol key,
const char* record_protocol);
/**
* This method adds a local identity represented as hostname to handshake
* parameters mapped by the handshake protocol for ALTS server_start handshake
* request.
*
* - req: an ALTS handshake request.
* - key: an enum type value representing a handshake security protocol.
* - hostname: a string representation of hostname to be added.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_param_add_local_identity_hostname(
grpc_gcp_handshaker_req* req, grpc_gcp_handshake_protocol key,
const char* hostname);
/**
* This method adds a local identity represented as service account to handshake
* parameters mapped by the handshake protocol for ALTS server_start handshake
* request.
*
* - req: an ALTS handshake request.
* - key: an enum type value representing a handshake security protocol.
* - service_account: a string representation of service account to be added.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_param_add_local_identity_service_account(
grpc_gcp_handshaker_req* req, grpc_gcp_handshake_protocol key,
const char* service_account);
/**
* This method sets the value for rpc_versions field of either ALTS
* client_start or server_start handshake request.
*
* - req: an ALTS handshake request.
* - max_major: a major version of maximum supported RPC version.
* - max_minor: a minor version of maximum supported RPC version.
* - min_major: a major version of minimum supported RPC version.
* - min_minor: a minor version of minimum supported RPC version.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_set_rpc_versions(grpc_gcp_handshaker_req* req,
uint32_t max_major,
uint32_t max_minor,
uint32_t min_major,
uint32_t min_minor);
/**
* This method serializes an ALTS handshake request and returns a data stream.
*
* - req: an ALTS handshake request.
* - slice: a data stream where the serialized result will be written.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_req_encode(grpc_gcp_handshaker_req* req,
grpc_slice* slice);
/* This method destroys an ALTS handshake request. */
void grpc_gcp_handshaker_req_destroy(grpc_gcp_handshaker_req* req);
/* This method creates an ALTS handshake response. */
grpc_gcp_handshaker_resp* grpc_gcp_handshaker_resp_create(void);
/**
* This method de-serializes a data stream and stores the result
* in an ALTS handshake response.
*
* - slice: a data stream containing a serialized ALTS handshake response.
* - resp: an ALTS handshake response used to hold de-serialized result.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_handshaker_resp_decode(grpc_slice slice,
grpc_gcp_handshaker_resp* resp);
/* This method destroys an ALTS handshake response. */
void grpc_gcp_handshaker_resp_destroy(grpc_gcp_handshaker_resp* resp);
#endif /* GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_H */

@ -1,145 +0,0 @@
/*
*
* Copyright 2018 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h"
#include "src/core/lib/slice/slice_internal.h"
void add_repeated_field(repeated_field** head, const void* data) {
repeated_field* field =
static_cast<repeated_field*>(gpr_zalloc(sizeof(*field)));
field->data = data;
if (*head == nullptr) {
*head = field;
(*head)->next = nullptr;
} else {
field->next = *head;
*head = field;
}
}
void destroy_repeated_field_list_identity(repeated_field* head) {
repeated_field* field = head;
while (field != nullptr) {
repeated_field* next_field = field->next;
const grpc_gcp_identity* identity =
static_cast<const grpc_gcp_identity*>(field->data);
destroy_slice(static_cast<grpc_slice*>(identity->hostname.arg));
destroy_slice(static_cast<grpc_slice*>(identity->service_account.arg));
gpr_free((void*)identity);
gpr_free(field);
field = next_field;
}
}
void destroy_repeated_field_list_string(repeated_field* head) {
repeated_field* field = head;
while (field != nullptr) {
repeated_field* next_field = field->next;
destroy_slice((grpc_slice*)field->data);
gpr_free(field);
field = next_field;
}
}
grpc_slice* create_slice(const char* data, size_t size) {
grpc_slice slice = grpc_slice_from_copied_buffer(data, size);
grpc_slice* cb_slice =
static_cast<grpc_slice*>(gpr_zalloc(sizeof(*cb_slice)));
memcpy(cb_slice, &slice, sizeof(*cb_slice));
return cb_slice;
}
void destroy_slice(grpc_slice* slice) {
if (slice != nullptr) {
grpc_slice_unref_internal(*slice);
gpr_free(slice);
}
}
bool encode_string_or_bytes_cb(pb_ostream_t* stream, const pb_field_t* field,
void* const* arg) {
grpc_slice* slice = static_cast<grpc_slice*>(*arg);
if (!pb_encode_tag_for_field(stream, field)) return false;
return pb_encode_string(stream, GRPC_SLICE_START_PTR(*slice),
GRPC_SLICE_LENGTH(*slice));
}
bool encode_repeated_identity_cb(pb_ostream_t* stream, const pb_field_t* field,
void* const* arg) {
repeated_field* var = static_cast<repeated_field*>(*arg);
while (var != nullptr) {
if (!pb_encode_tag_for_field(stream, field)) return false;
if (!pb_encode_submessage(stream, grpc_gcp_Identity_fields,
(grpc_gcp_identity*)var->data))
return false;
var = var->next;
}
return true;
}
bool encode_repeated_string_cb(pb_ostream_t* stream, const pb_field_t* field,
void* const* arg) {
repeated_field* var = static_cast<repeated_field*>(*arg);
while (var != nullptr) {
if (!pb_encode_tag_for_field(stream, field)) return false;
const grpc_slice* slice = static_cast<const grpc_slice*>(var->data);
if (!pb_encode_string(stream, GRPC_SLICE_START_PTR(*slice),
GRPC_SLICE_LENGTH(*slice)))
return false;
var = var->next;
}
return true;
}
bool decode_string_or_bytes_cb(pb_istream_t* stream, const pb_field_t* field,
void** arg) {
grpc_slice slice = grpc_slice_malloc(stream->bytes_left);
grpc_slice* cb_slice =
static_cast<grpc_slice*>(gpr_zalloc(sizeof(*cb_slice)));
memcpy(cb_slice, &slice, sizeof(*cb_slice));
if (!pb_read(stream, GRPC_SLICE_START_PTR(*cb_slice), stream->bytes_left))
return false;
*arg = cb_slice;
return true;
}
bool decode_repeated_identity_cb(pb_istream_t* stream, const pb_field_t* field,
void** arg) {
grpc_gcp_identity* identity =
static_cast<grpc_gcp_identity*>(gpr_zalloc(sizeof(*identity)));
identity->hostname.funcs.decode = decode_string_or_bytes_cb;
identity->service_account.funcs.decode = decode_string_or_bytes_cb;
add_repeated_field(reinterpret_cast<repeated_field**>(arg), identity);
if (!pb_decode(stream, grpc_gcp_Identity_fields, identity)) return false;
return true;
}
bool decode_repeated_string_cb(pb_istream_t* stream, const pb_field_t* field,
void** arg) {
grpc_slice slice = grpc_slice_malloc(stream->bytes_left);
grpc_slice* cb_slice =
static_cast<grpc_slice*>(gpr_zalloc(sizeof(*cb_slice)));
memcpy(cb_slice, &slice, sizeof(grpc_slice));
if (!pb_read(stream, GRPC_SLICE_START_PTR(*cb_slice), stream->bytes_left))
return false;
add_repeated_field(reinterpret_cast<repeated_field**>(arg), cb_slice);
return true;
}

@ -1,149 +0,0 @@
/*
*
* Copyright 2018 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_UTIL_H
#define GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_UTIL_H
#include <grpc/support/port_platform.h>
#include "pb_decode.h"
#include "pb_encode.h"
#include <grpc/slice.h>
#include <grpc/slice_buffer.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include "src/core/tsi/alts/handshaker/handshaker.pb.h"
/**
* An implementation of utility functions used to serialize/
* de-serialize ALTS handshake requests/responses. All APIs in the header
* are thread-compatible.
*/
/* Renaming of message/field structs generated by nanopb compiler. */
typedef grpc_gcp_HandshakeProtocol grpc_gcp_handshake_protocol;
typedef grpc_gcp_NetworkProtocol grpc_gcp_network_protocol;
typedef grpc_gcp_Identity grpc_gcp_identity;
typedef grpc_gcp_NextHandshakeMessageReq grpc_gcp_next_handshake_message_req;
typedef grpc_gcp_ServerHandshakeParameters grpc_gcp_server_handshake_parameters;
typedef grpc_gcp_Endpoint grpc_gcp_endpoint;
typedef grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry
grpc_gcp_handshake_parameters_entry;
typedef grpc_gcp_StartClientHandshakeReq grpc_gcp_start_client_handshake_req;
typedef grpc_gcp_StartServerHandshakeReq grpc_gcp_start_server_handshake_req;
typedef grpc_gcp_HandshakerReq grpc_gcp_handshaker_req;
typedef grpc_gcp_HandshakerResult grpc_gcp_handshaker_result;
typedef grpc_gcp_HandshakerStatus grpc_gcp_handshaker_status;
typedef grpc_gcp_HandshakerResp grpc_gcp_handshaker_resp;
typedef enum {
CLIENT_START_REQ = 0, /* StartClientHandshakeReq. */
SERVER_START_REQ = 1, /* StartServerHandshakeReq. */
NEXT_REQ = 2, /* NextHandshakeMessageReq. */
} grpc_gcp_handshaker_req_type;
/**
* A struct representing a repeated field. The struct is used to organize all
* instances of a specific repeated field into a linked list, which then will
* be used at encode/decode phase. For instance at the encode phase, the encode
* function will iterate through the list, encode each field, and then output
* the result to the stream.
*/
typedef struct repeated_field_ {
struct repeated_field_* next;
const void* data;
} repeated_field;
/**
* This method adds a repeated field to the head of repeated field list.
*
* - head: a head of repeated field list.
* - field: a repeated field to be added to the list.
*/
void add_repeated_field(repeated_field** head, const void* field);
/**
* This method destroys a repeated field list that consists of string type
* fields.
*
* - head: a head of repeated field list.
*/
void destroy_repeated_field_list_string(repeated_field* head);
/**
* This method destroys a repeated field list that consists of
* grpc_gcp_identity type fields.
*
* - head: a head of repeated field list.
*/
void destroy_repeated_field_list_identity(repeated_field* head);
/**
* This method creates a grpc_slice instance by copying a data buffer. It is
* similar to grpc_slice_from_copied_buffer() except that it returns an instance
* allocated from the heap.
*
* - data: a data buffer to be copied to grpc_slice instance.
* - size: size of data buffer.
*/
grpc_slice* create_slice(const char* data, size_t size);
/* This method destroys a grpc_slice instance. */
void destroy_slice(grpc_slice* slice);
/**
* The following encode/decode functions will be assigned to encode/decode
* function pointers of pb_callback_t struct (defined in
* //third_party/nanopb/pb.h), that represent a repeated field with a dynamic
* length (e.g., a string type or repeated field).
*/
/* This method is an encode callback function for a string or byte array. */
bool encode_string_or_bytes_cb(pb_ostream_t* stream, const pb_field_t* field,
void* const* arg);
/**
* This method is an encode callback function for a repeated grpc_gcp_identity
* field.
*/
bool encode_repeated_identity_cb(pb_ostream_t* stream, const pb_field_t* field,
void* const* arg);
/* This method is an encode callback function for a repeated string field. */
bool encode_repeated_string_cb(pb_ostream_t* stream, const pb_field_t* field,
void* const* arg);
/**
* This method is a decode callback function for a string or byte array field.
*/
bool decode_string_or_bytes_cb(pb_istream_t* stream, const pb_field_t* field,
void** arg);
/**
* This method is a decode callback function for a repeated grpc_gcp_identity
* field.
*/
bool decode_repeated_identity_cb(pb_istream_t* stream, const pb_field_t* field,
void** arg);
/* This method is a decode callback function for a repeated string field. */
bool decode_repeated_string_cb(pb_istream_t* stream, const pb_field_t* field,
void** arg);
#endif /* GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_UTIL_H */

@ -192,38 +192,49 @@ static const tsi_handshaker_result_vtable result_vtable = {
handshaker_result_create_frame_protector,
handshaker_result_get_unused_bytes, handshaker_result_destroy};
tsi_result alts_tsi_handshaker_result_create(grpc_gcp_handshaker_resp* resp,
tsi_result alts_tsi_handshaker_result_create(grpc_gcp_HandshakerResp* resp,
bool is_client,
tsi_handshaker_result** self) {
if (self == nullptr || resp == nullptr) {
gpr_log(GPR_ERROR, "Invalid arguments to create_handshaker_result()");
return TSI_INVALID_ARGUMENT;
}
grpc_slice* key = static_cast<grpc_slice*>(resp->result.key_data.arg);
GPR_ASSERT(key != nullptr);
grpc_slice* identity =
static_cast<grpc_slice*>(resp->result.peer_identity.service_account.arg);
const grpc_gcp_HandshakerResult* hresult =
grpc_gcp_HandshakerResp_result(resp);
const grpc_gcp_Identity* identity =
grpc_gcp_HandshakerResult_peer_identity(hresult);
if (identity == nullptr) {
gpr_log(GPR_ERROR, "Invalid identity");
return TSI_FAILED_PRECONDITION;
}
upb_strview service_account = grpc_gcp_Identity_service_account(identity);
if (service_account.size == 0) {
gpr_log(GPR_ERROR, "Invalid service account");
return TSI_FAILED_PRECONDITION;
}
if (GRPC_SLICE_LENGTH(*key) < kAltsAes128GcmRekeyKeyLength) {
upb_strview key_data = grpc_gcp_HandshakerResult_key_data(hresult);
if (key_data.size < kAltsAes128GcmRekeyKeyLength) {
gpr_log(GPR_ERROR, "Bad key length");
return TSI_FAILED_PRECONDITION;
}
const grpc_gcp_RpcProtocolVersions* peer_rpc_version =
grpc_gcp_HandshakerResult_peer_rpc_versions(hresult);
if (peer_rpc_version == nullptr) {
gpr_log(GPR_ERROR, "Peer does not set RPC protocol versions.");
return TSI_FAILED_PRECONDITION;
}
alts_tsi_handshaker_result* result =
static_cast<alts_tsi_handshaker_result*>(gpr_zalloc(sizeof(*result)));
result->key_data =
static_cast<char*>(gpr_zalloc(kAltsAes128GcmRekeyKeyLength));
memcpy(result->key_data, GRPC_SLICE_START_PTR(*key),
kAltsAes128GcmRekeyKeyLength);
result->peer_identity = grpc_slice_to_c_string(*identity);
if (!resp->result.has_peer_rpc_versions) {
gpr_log(GPR_ERROR, "Peer does not set RPC protocol versions.");
return TSI_FAILED_PRECONDITION;
}
if (!grpc_gcp_rpc_protocol_versions_encode(&resp->result.peer_rpc_versions,
&result->rpc_versions)) {
memcpy(result->key_data, key_data.data, kAltsAes128GcmRekeyKeyLength);
result->peer_identity =
static_cast<char*>(gpr_zalloc(service_account.size + 1));
memcpy(result->peer_identity, service_account.data, service_account.size);
upb::Arena arena;
bool serialized = grpc_gcp_rpc_protocol_versions_encode(
peer_rpc_version, arena.ptr(), &result->rpc_versions);
if (!serialized) {
gpr_log(GPR_ERROR, "Failed to serialize peer's RPC protocol versions.");
return TSI_FAILED_PRECONDITION;
}

@ -26,9 +26,9 @@
#include "src/core/lib/iomgr/pollset_set.h"
#include "src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h"
#include "src/core/tsi/alts/handshaker/alts_handshaker_client.h"
#include "src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h"
#include "src/core/tsi/transport_security.h"
#include "src/core/tsi/transport_security_interface.h"
#include "src/proto/grpc/gcp/handshaker.upb.h"
#define TSI_ALTS_SERVICE_ACCOUNT_PEER_PROPERTY "service_accont"
#define TSI_ALTS_CERTIFICATE_TYPE "ALTS"
@ -70,7 +70,7 @@ tsi_result alts_tsi_handshaker_create(
* client or not.
* - result: address of ALTS TSI handshaker result instance.
*/
tsi_result alts_tsi_handshaker_result_create(grpc_gcp_handshaker_resp* resp,
tsi_result alts_tsi_handshaker_result_create(grpc_gcp_HandshakerResp* resp,
bool is_client,
tsi_handshaker_result** result);

@ -41,18 +41,22 @@ tsi_result alts_tsi_utils_convert_to_tsi_result(grpc_status_code code) {
}
}
grpc_gcp_handshaker_resp* alts_tsi_utils_deserialize_response(
grpc_byte_buffer* resp_buffer) {
grpc_gcp_HandshakerResp* alts_tsi_utils_deserialize_response(
grpc_byte_buffer* resp_buffer, upb_arena* arena) {
GPR_ASSERT(resp_buffer != nullptr);
GPR_ASSERT(arena != nullptr);
grpc_byte_buffer_reader bbr;
grpc_byte_buffer_reader_init(&bbr, resp_buffer);
grpc_slice slice = grpc_byte_buffer_reader_readall(&bbr);
grpc_gcp_handshaker_resp* resp = grpc_gcp_handshaker_resp_create();
bool ok = grpc_gcp_handshaker_resp_decode(slice, resp);
size_t buf_size = GPR_SLICE_LENGTH(slice);
void* buf = upb_arena_malloc(arena, buf_size);
memcpy(buf, reinterpret_cast<const char*>(GPR_SLICE_START_PTR(slice)),
buf_size);
grpc_gcp_HandshakerResp* resp = grpc_gcp_HandshakerResp_parse(
reinterpret_cast<char*>(buf), buf_size, arena);
grpc_slice_unref_internal(slice);
grpc_byte_buffer_reader_destroy(&bbr);
if (!ok) {
grpc_gcp_handshaker_resp_destroy(resp);
if (resp == nullptr) {
gpr_log(GPR_ERROR, "grpc_gcp_handshaker_resp_decode() failed");
return nullptr;
}

@ -24,8 +24,8 @@
#include <grpc/byte_buffer.h>
#include <grpc/grpc.h>
#include "src/core/tsi/alts/handshaker/alts_handshaker_service_api.h"
#include "src/core/tsi/transport_security_interface.h"
#include "src/proto/grpc/gcp/handshaker.upb.h"
/**
* This method converts grpc_status_code code to the corresponding tsi_result
@ -42,11 +42,12 @@ tsi_result alts_tsi_utils_convert_to_tsi_result(grpc_status_code code);
* service.
*
* - bytes_received: data returned from ALTS handshaker service.
* - arena: upb arena.
*
* It returns a deserialized handshaker response on success and nullptr on
* failure.
*/
grpc_gcp_handshaker_resp* alts_tsi_utils_deserialize_response(
grpc_byte_buffer* resp_buffer);
grpc_gcp_HandshakerResp* alts_tsi_utils_deserialize_response(
grpc_byte_buffer* resp_buffer, upb_arena* arena);
#endif /* GRPC_CORE_TSI_ALTS_HANDSHAKER_ALTS_TSI_UTILS_H */

@ -1,47 +0,0 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.3.7-dev */
#include "src/core/tsi/alts/handshaker/altscontext.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
const pb_field_t grpc_gcp_AltsContext_fields[7] = {
PB_FIELD( 1, STRING , OPTIONAL, CALLBACK, FIRST, grpc_gcp_AltsContext, application_protocol, application_protocol, 0),
PB_FIELD( 2, STRING , OPTIONAL, CALLBACK, OTHER, grpc_gcp_AltsContext, record_protocol, application_protocol, 0),
PB_FIELD( 3, UENUM , OPTIONAL, STATIC , OTHER, grpc_gcp_AltsContext, security_level, record_protocol, 0),
PB_FIELD( 4, STRING , OPTIONAL, CALLBACK, OTHER, grpc_gcp_AltsContext, peer_service_account, security_level, 0),
PB_FIELD( 5, STRING , OPTIONAL, CALLBACK, OTHER, grpc_gcp_AltsContext, local_service_account, peer_service_account, 0),
PB_FIELD( 6, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_AltsContext, peer_rpc_versions, local_service_account, &grpc_gcp_RpcProtocolVersions_fields),
PB_LAST_FIELD
};
/* Check that field information fits in pb_field_t */
#if !defined(PB_FIELD_32BIT)
/* If you get an error here, it means that you need to define PB_FIELD_32BIT
* compile-time option. You can do that in pb.h or on compiler command line.
*
* The reason you need to do this is that some of your messages contain tag
* numbers or field sizes that are larger than what can fit in 8 or 16 bit
* field descriptors.
*/
PB_STATIC_ASSERT((pb_membersize(grpc_gcp_AltsContext, peer_rpc_versions) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_gcp_AltsContext)
#endif
#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
/* If you get an error here, it means that you need to define PB_FIELD_16BIT
* compile-time option. You can do that in pb.h or on compiler command line.
*
* The reason you need to do this is that some of your messages contain tag
* numbers or field sizes that are larger than what can fit in the default
* 8 bit descriptors.
*/
PB_STATIC_ASSERT((pb_membersize(grpc_gcp_AltsContext, peer_rpc_versions) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_gcp_AltsContext)
#endif
/* @@protoc_insertion_point(eof) */

@ -1,63 +0,0 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.3.7-dev */
#ifndef PB_GRPC_GCP_ALTSCONTEXT_PB_H_INCLUDED
#define PB_GRPC_GCP_ALTSCONTEXT_PB_H_INCLUDED
#include "pb.h"
#include "src/core/tsi/alts/handshaker/transport_security_common.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Struct definitions */
typedef struct _grpc_gcp_AltsContext {
pb_callback_t application_protocol;
pb_callback_t record_protocol;
bool has_security_level;
grpc_gcp_SecurityLevel security_level;
pb_callback_t peer_service_account;
pb_callback_t local_service_account;
bool has_peer_rpc_versions;
grpc_gcp_RpcProtocolVersions peer_rpc_versions;
/* @@protoc_insertion_point(struct:grpc_gcp_AltsContext) */
} grpc_gcp_AltsContext;
/* Default values for struct fields */
/* Initializer values for message structs */
#define grpc_gcp_AltsContext_init_default {{{NULL}, NULL}, {{NULL}, NULL}, false, (grpc_gcp_SecurityLevel)0, {{NULL}, NULL}, {{NULL}, NULL}, false, grpc_gcp_RpcProtocolVersions_init_default}
#define grpc_gcp_AltsContext_init_zero {{{NULL}, NULL}, {{NULL}, NULL}, false, (grpc_gcp_SecurityLevel)0, {{NULL}, NULL}, {{NULL}, NULL}, false, grpc_gcp_RpcProtocolVersions_init_zero}
/* Field tags (for use in manual encoding/decoding) */
#define grpc_gcp_AltsContext_application_protocol_tag 1
#define grpc_gcp_AltsContext_record_protocol_tag 2
#define grpc_gcp_AltsContext_security_level_tag 3
#define grpc_gcp_AltsContext_peer_service_account_tag 4
#define grpc_gcp_AltsContext_local_service_account_tag 5
#define grpc_gcp_AltsContext_peer_rpc_versions_tag 6
/* Struct field encoding specification for nanopb */
extern const pb_field_t grpc_gcp_AltsContext_fields[7];
/* Maximum encoded size of messages (where known) */
/* grpc_gcp_AltsContext_size depends on runtime parameters */
/* Message IDs (where set with "msgid" option) */
#ifdef PB_MSGID
#define ALTSCONTEXT_MESSAGES \
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* @@protoc_insertion_point(eof) */
#endif

@ -1,122 +0,0 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.3.7-dev */
#include "src/core/tsi/alts/handshaker/handshaker.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
const pb_field_t grpc_gcp_Endpoint_fields[4] = {
PB_FIELD( 1, STRING , OPTIONAL, CALLBACK, FIRST, grpc_gcp_Endpoint, ip_address, ip_address, 0),
PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, grpc_gcp_Endpoint, port, ip_address, 0),
PB_FIELD( 3, UENUM , OPTIONAL, STATIC , OTHER, grpc_gcp_Endpoint, protocol, port, 0),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_Identity_fields[3] = {
PB_FIELD( 1, STRING , OPTIONAL, CALLBACK, FIRST, grpc_gcp_Identity, service_account, service_account, 0),
PB_FIELD( 2, STRING , OPTIONAL, CALLBACK, OTHER, grpc_gcp_Identity, hostname, service_account, 0),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_StartClientHandshakeReq_fields[10] = {
PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, grpc_gcp_StartClientHandshakeReq, handshake_security_protocol, handshake_security_protocol, 0),
PB_FIELD( 2, STRING , REPEATED, CALLBACK, OTHER, grpc_gcp_StartClientHandshakeReq, application_protocols, handshake_security_protocol, 0),
PB_FIELD( 3, STRING , REPEATED, CALLBACK, OTHER, grpc_gcp_StartClientHandshakeReq, record_protocols, application_protocols, 0),
PB_FIELD( 4, MESSAGE , REPEATED, CALLBACK, OTHER, grpc_gcp_StartClientHandshakeReq, target_identities, record_protocols, &grpc_gcp_Identity_fields),
PB_FIELD( 5, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_StartClientHandshakeReq, local_identity, target_identities, &grpc_gcp_Identity_fields),
PB_FIELD( 6, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_StartClientHandshakeReq, local_endpoint, local_identity, &grpc_gcp_Endpoint_fields),
PB_FIELD( 7, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_StartClientHandshakeReq, remote_endpoint, local_endpoint, &grpc_gcp_Endpoint_fields),
PB_FIELD( 8, STRING , OPTIONAL, CALLBACK, OTHER, grpc_gcp_StartClientHandshakeReq, target_name, remote_endpoint, 0),
PB_FIELD( 9, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_StartClientHandshakeReq, rpc_versions, target_name, &grpc_gcp_RpcProtocolVersions_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_ServerHandshakeParameters_fields[3] = {
PB_FIELD( 1, STRING , REPEATED, CALLBACK, FIRST, grpc_gcp_ServerHandshakeParameters, record_protocols, record_protocols, 0),
PB_FIELD( 2, MESSAGE , REPEATED, CALLBACK, OTHER, grpc_gcp_ServerHandshakeParameters, local_identities, record_protocols, &grpc_gcp_Identity_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_StartServerHandshakeReq_fields[7] = {
PB_FIELD( 1, STRING , REPEATED, CALLBACK, FIRST, grpc_gcp_StartServerHandshakeReq, application_protocols, application_protocols, 0),
PB_FIELD( 2, MESSAGE , REPEATED, STATIC , OTHER, grpc_gcp_StartServerHandshakeReq, handshake_parameters, application_protocols, &grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_fields),
PB_FIELD( 3, BYTES , OPTIONAL, CALLBACK, OTHER, grpc_gcp_StartServerHandshakeReq, in_bytes, handshake_parameters, 0),
PB_FIELD( 4, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_StartServerHandshakeReq, local_endpoint, in_bytes, &grpc_gcp_Endpoint_fields),
PB_FIELD( 5, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_StartServerHandshakeReq, remote_endpoint, local_endpoint, &grpc_gcp_Endpoint_fields),
PB_FIELD( 6, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_StartServerHandshakeReq, rpc_versions, remote_endpoint, &grpc_gcp_RpcProtocolVersions_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_fields[3] = {
PB_FIELD( 1, INT32 , OPTIONAL, STATIC , FIRST, grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry, key, key, 0),
PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry, value, key, &grpc_gcp_ServerHandshakeParameters_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_NextHandshakeMessageReq_fields[2] = {
PB_FIELD( 1, BYTES , OPTIONAL, CALLBACK, FIRST, grpc_gcp_NextHandshakeMessageReq, in_bytes, in_bytes, 0),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_HandshakerReq_fields[4] = {
PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_gcp_HandshakerReq, client_start, client_start, &grpc_gcp_StartClientHandshakeReq_fields),
PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerReq, server_start, client_start, &grpc_gcp_StartServerHandshakeReq_fields),
PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerReq, next, server_start, &grpc_gcp_NextHandshakeMessageReq_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_HandshakerResult_fields[8] = {
PB_FIELD( 1, STRING , OPTIONAL, CALLBACK, FIRST, grpc_gcp_HandshakerResult, application_protocol, application_protocol, 0),
PB_FIELD( 2, STRING , OPTIONAL, CALLBACK, OTHER, grpc_gcp_HandshakerResult, record_protocol, application_protocol, 0),
PB_FIELD( 3, BYTES , OPTIONAL, CALLBACK, OTHER, grpc_gcp_HandshakerResult, key_data, record_protocol, 0),
PB_FIELD( 4, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerResult, peer_identity, key_data, &grpc_gcp_Identity_fields),
PB_FIELD( 5, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerResult, local_identity, peer_identity, &grpc_gcp_Identity_fields),
PB_FIELD( 6, BOOL , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerResult, keep_channel_open, local_identity, 0),
PB_FIELD( 7, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerResult, peer_rpc_versions, keep_channel_open, &grpc_gcp_RpcProtocolVersions_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_HandshakerStatus_fields[3] = {
PB_FIELD( 1, UINT32 , OPTIONAL, STATIC , FIRST, grpc_gcp_HandshakerStatus, code, code, 0),
PB_FIELD( 2, STRING , OPTIONAL, CALLBACK, OTHER, grpc_gcp_HandshakerStatus, details, code, 0),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_HandshakerResp_fields[5] = {
PB_FIELD( 1, BYTES , OPTIONAL, CALLBACK, FIRST, grpc_gcp_HandshakerResp, out_frames, out_frames, 0),
PB_FIELD( 2, UINT32 , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerResp, bytes_consumed, out_frames, 0),
PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerResp, result, bytes_consumed, &grpc_gcp_HandshakerResult_fields),
PB_FIELD( 4, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_HandshakerResp, status, result, &grpc_gcp_HandshakerStatus_fields),
PB_LAST_FIELD
};
/* Check that field information fits in pb_field_t */
#if !defined(PB_FIELD_32BIT)
/* If you get an error here, it means that you need to define PB_FIELD_32BIT
* compile-time option. You can do that in pb.h or on compiler command line.
*
* The reason you need to do this is that some of your messages contain tag
* numbers or field sizes that are larger than what can fit in 8 or 16 bit
* field descriptors.
*/
PB_STATIC_ASSERT((pb_membersize(grpc_gcp_StartClientHandshakeReq, target_identities) < 65536 && pb_membersize(grpc_gcp_StartClientHandshakeReq, local_identity) < 65536 && pb_membersize(grpc_gcp_StartClientHandshakeReq, local_endpoint) < 65536 && pb_membersize(grpc_gcp_StartClientHandshakeReq, remote_endpoint) < 65536 && pb_membersize(grpc_gcp_StartClientHandshakeReq, rpc_versions) < 65536 && pb_membersize(grpc_gcp_ServerHandshakeParameters, local_identities) < 65536 && pb_membersize(grpc_gcp_StartServerHandshakeReq, handshake_parameters[0]) < 65536 && pb_membersize(grpc_gcp_StartServerHandshakeReq, local_endpoint) < 65536 && pb_membersize(grpc_gcp_StartServerHandshakeReq, remote_endpoint) < 65536 && pb_membersize(grpc_gcp_StartServerHandshakeReq, rpc_versions) < 65536 && pb_membersize(grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry, value) < 65536 && pb_membersize(grpc_gcp_HandshakerReq, client_start) < 65536 && pb_membersize(grpc_gcp_HandshakerReq, server_start) < 65536 && pb_membersize(grpc_gcp_HandshakerReq, next) < 65536 && pb_membersize(grpc_gcp_HandshakerResult, peer_identity) < 65536 && pb_membersize(grpc_gcp_HandshakerResult, local_identity) < 65536 && pb_membersize(grpc_gcp_HandshakerResult, peer_rpc_versions) < 65536 && pb_membersize(grpc_gcp_HandshakerResp, result) < 65536 && pb_membersize(grpc_gcp_HandshakerResp, status) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_gcp_Endpoint_grpc_gcp_Identity_grpc_gcp_StartClientHandshakeReq_grpc_gcp_ServerHandshakeParameters_grpc_gcp_StartServerHandshakeReq_grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_grpc_gcp_NextHandshakeMessageReq_grpc_gcp_HandshakerReq_grpc_gcp_HandshakerResult_grpc_gcp_HandshakerStatus_grpc_gcp_HandshakerResp)
#endif
#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
/* If you get an error here, it means that you need to define PB_FIELD_16BIT
* compile-time option. You can do that in pb.h or on compiler command line.
*
* The reason you need to do this is that some of your messages contain tag
* numbers or field sizes that are larger than what can fit in the default
* 8 bit descriptors.
*/
PB_STATIC_ASSERT((pb_membersize(grpc_gcp_StartClientHandshakeReq, target_identities) < 256 && pb_membersize(grpc_gcp_StartClientHandshakeReq, local_identity) < 256 && pb_membersize(grpc_gcp_StartClientHandshakeReq, local_endpoint) < 256 && pb_membersize(grpc_gcp_StartClientHandshakeReq, remote_endpoint) < 256 && pb_membersize(grpc_gcp_StartClientHandshakeReq, rpc_versions) < 256 && pb_membersize(grpc_gcp_ServerHandshakeParameters, local_identities) < 256 && pb_membersize(grpc_gcp_StartServerHandshakeReq, handshake_parameters[0]) < 256 && pb_membersize(grpc_gcp_StartServerHandshakeReq, local_endpoint) < 256 && pb_membersize(grpc_gcp_StartServerHandshakeReq, remote_endpoint) < 256 && pb_membersize(grpc_gcp_StartServerHandshakeReq, rpc_versions) < 256 && pb_membersize(grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry, value) < 256 && pb_membersize(grpc_gcp_HandshakerReq, client_start) < 256 && pb_membersize(grpc_gcp_HandshakerReq, server_start) < 256 && pb_membersize(grpc_gcp_HandshakerReq, next) < 256 && pb_membersize(grpc_gcp_HandshakerResult, peer_identity) < 256 && pb_membersize(grpc_gcp_HandshakerResult, local_identity) < 256 && pb_membersize(grpc_gcp_HandshakerResult, peer_rpc_versions) < 256 && pb_membersize(grpc_gcp_HandshakerResp, result) < 256 && pb_membersize(grpc_gcp_HandshakerResp, status) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_gcp_Endpoint_grpc_gcp_Identity_grpc_gcp_StartClientHandshakeReq_grpc_gcp_ServerHandshakeParameters_grpc_gcp_StartServerHandshakeReq_grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_grpc_gcp_NextHandshakeMessageReq_grpc_gcp_HandshakerReq_grpc_gcp_HandshakerResult_grpc_gcp_HandshakerStatus_grpc_gcp_HandshakerResp)
#endif
/* @@protoc_insertion_point(eof) */

@ -1,254 +0,0 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.3.7-dev */
#ifndef PB_GRPC_GCP_HANDSHAKER_PB_H_INCLUDED
#define PB_GRPC_GCP_HANDSHAKER_PB_H_INCLUDED
#include "pb.h"
#include "src/core/tsi/alts/handshaker/transport_security_common.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Enum definitions */
typedef enum _grpc_gcp_HandshakeProtocol {
grpc_gcp_HandshakeProtocol_HANDSHAKE_PROTOCOL_UNSPECIFIED = 0,
grpc_gcp_HandshakeProtocol_TLS = 1,
grpc_gcp_HandshakeProtocol_ALTS = 2
} grpc_gcp_HandshakeProtocol;
#define _grpc_gcp_HandshakeProtocol_MIN grpc_gcp_HandshakeProtocol_HANDSHAKE_PROTOCOL_UNSPECIFIED
#define _grpc_gcp_HandshakeProtocol_MAX grpc_gcp_HandshakeProtocol_ALTS
#define _grpc_gcp_HandshakeProtocol_ARRAYSIZE ((grpc_gcp_HandshakeProtocol)(grpc_gcp_HandshakeProtocol_ALTS+1))
typedef enum _grpc_gcp_NetworkProtocol {
grpc_gcp_NetworkProtocol_NETWORK_PROTOCOL_UNSPECIFIED = 0,
grpc_gcp_NetworkProtocol_TCP = 1,
grpc_gcp_NetworkProtocol_UDP = 2
} grpc_gcp_NetworkProtocol;
#define _grpc_gcp_NetworkProtocol_MIN grpc_gcp_NetworkProtocol_NETWORK_PROTOCOL_UNSPECIFIED
#define _grpc_gcp_NetworkProtocol_MAX grpc_gcp_NetworkProtocol_UDP
#define _grpc_gcp_NetworkProtocol_ARRAYSIZE ((grpc_gcp_NetworkProtocol)(grpc_gcp_NetworkProtocol_UDP+1))
/* Struct definitions */
typedef struct _grpc_gcp_Identity {
pb_callback_t service_account;
pb_callback_t hostname;
/* @@protoc_insertion_point(struct:grpc_gcp_Identity) */
} grpc_gcp_Identity;
typedef struct _grpc_gcp_NextHandshakeMessageReq {
pb_callback_t in_bytes;
/* @@protoc_insertion_point(struct:grpc_gcp_NextHandshakeMessageReq) */
} grpc_gcp_NextHandshakeMessageReq;
typedef struct _grpc_gcp_ServerHandshakeParameters {
pb_callback_t record_protocols;
pb_callback_t local_identities;
/* @@protoc_insertion_point(struct:grpc_gcp_ServerHandshakeParameters) */
} grpc_gcp_ServerHandshakeParameters;
typedef struct _grpc_gcp_Endpoint {
pb_callback_t ip_address;
bool has_port;
int32_t port;
bool has_protocol;
grpc_gcp_NetworkProtocol protocol;
/* @@protoc_insertion_point(struct:grpc_gcp_Endpoint) */
} grpc_gcp_Endpoint;
typedef struct _grpc_gcp_HandshakerResult {
pb_callback_t application_protocol;
pb_callback_t record_protocol;
pb_callback_t key_data;
bool has_peer_identity;
grpc_gcp_Identity peer_identity;
bool has_local_identity;
grpc_gcp_Identity local_identity;
bool has_keep_channel_open;
bool keep_channel_open;
bool has_peer_rpc_versions;
grpc_gcp_RpcProtocolVersions peer_rpc_versions;
/* @@protoc_insertion_point(struct:grpc_gcp_HandshakerResult) */
} grpc_gcp_HandshakerResult;
typedef struct _grpc_gcp_HandshakerStatus {
bool has_code;
uint32_t code;
pb_callback_t details;
/* @@protoc_insertion_point(struct:grpc_gcp_HandshakerStatus) */
} grpc_gcp_HandshakerStatus;
typedef struct _grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry {
bool has_key;
int32_t key;
bool has_value;
grpc_gcp_ServerHandshakeParameters value;
/* @@protoc_insertion_point(struct:grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry) */
} grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry;
typedef struct _grpc_gcp_HandshakerResp {
pb_callback_t out_frames;
bool has_bytes_consumed;
uint32_t bytes_consumed;
bool has_result;
grpc_gcp_HandshakerResult result;
bool has_status;
grpc_gcp_HandshakerStatus status;
/* @@protoc_insertion_point(struct:grpc_gcp_HandshakerResp) */
} grpc_gcp_HandshakerResp;
typedef struct _grpc_gcp_StartClientHandshakeReq {
bool has_handshake_security_protocol;
grpc_gcp_HandshakeProtocol handshake_security_protocol;
pb_callback_t application_protocols;
pb_callback_t record_protocols;
pb_callback_t target_identities;
bool has_local_identity;
grpc_gcp_Identity local_identity;
bool has_local_endpoint;
grpc_gcp_Endpoint local_endpoint;
bool has_remote_endpoint;
grpc_gcp_Endpoint remote_endpoint;
pb_callback_t target_name;
bool has_rpc_versions;
grpc_gcp_RpcProtocolVersions rpc_versions;
/* @@protoc_insertion_point(struct:grpc_gcp_StartClientHandshakeReq) */
} grpc_gcp_StartClientHandshakeReq;
typedef struct _grpc_gcp_StartServerHandshakeReq {
pb_callback_t application_protocols;
pb_size_t handshake_parameters_count;
grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry handshake_parameters[3];
pb_callback_t in_bytes;
bool has_local_endpoint;
grpc_gcp_Endpoint local_endpoint;
bool has_remote_endpoint;
grpc_gcp_Endpoint remote_endpoint;
bool has_rpc_versions;
grpc_gcp_RpcProtocolVersions rpc_versions;
/* @@protoc_insertion_point(struct:grpc_gcp_StartServerHandshakeReq) */
} grpc_gcp_StartServerHandshakeReq;
typedef struct _grpc_gcp_HandshakerReq {
bool has_client_start;
grpc_gcp_StartClientHandshakeReq client_start;
bool has_server_start;
grpc_gcp_StartServerHandshakeReq server_start;
bool has_next;
grpc_gcp_NextHandshakeMessageReq next;
/* @@protoc_insertion_point(struct:grpc_gcp_HandshakerReq) */
} grpc_gcp_HandshakerReq;
/* Default values for struct fields */
/* Initializer values for message structs */
#define grpc_gcp_Endpoint_init_default {{{NULL}, NULL}, false, 0, false, (grpc_gcp_NetworkProtocol)0}
#define grpc_gcp_Identity_init_default {{{NULL}, NULL}, {{NULL}, NULL}}
#define grpc_gcp_StartClientHandshakeReq_init_default {false, (grpc_gcp_HandshakeProtocol)0, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, false, grpc_gcp_Identity_init_default, false, grpc_gcp_Endpoint_init_default, false, grpc_gcp_Endpoint_init_default, {{NULL}, NULL}, false, grpc_gcp_RpcProtocolVersions_init_default}
#define grpc_gcp_ServerHandshakeParameters_init_default {{{NULL}, NULL}, {{NULL}, NULL}}
#define grpc_gcp_StartServerHandshakeReq_init_default {{{NULL}, NULL}, 0, {grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_init_default, grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_init_default, grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_init_default}, {{NULL}, NULL}, false, grpc_gcp_Endpoint_init_default, false, grpc_gcp_Endpoint_init_default, false, grpc_gcp_RpcProtocolVersions_init_default}
#define grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_init_default {false, 0, false, grpc_gcp_ServerHandshakeParameters_init_default}
#define grpc_gcp_NextHandshakeMessageReq_init_default {{{NULL}, NULL}}
#define grpc_gcp_HandshakerReq_init_default {false, grpc_gcp_StartClientHandshakeReq_init_default, false, grpc_gcp_StartServerHandshakeReq_init_default, false, grpc_gcp_NextHandshakeMessageReq_init_default}
#define grpc_gcp_HandshakerResult_init_default {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, false, grpc_gcp_Identity_init_default, false, grpc_gcp_Identity_init_default, false, 0, false, grpc_gcp_RpcProtocolVersions_init_default}
#define grpc_gcp_HandshakerStatus_init_default {false, 0, {{NULL}, NULL}}
#define grpc_gcp_HandshakerResp_init_default {{{NULL}, NULL}, false, 0, false, grpc_gcp_HandshakerResult_init_default, false, grpc_gcp_HandshakerStatus_init_default}
#define grpc_gcp_Endpoint_init_zero {{{NULL}, NULL}, false, 0, false, (grpc_gcp_NetworkProtocol)0}
#define grpc_gcp_Identity_init_zero {{{NULL}, NULL}, {{NULL}, NULL}}
#define grpc_gcp_StartClientHandshakeReq_init_zero {false, (grpc_gcp_HandshakeProtocol)0, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, false, grpc_gcp_Identity_init_zero, false, grpc_gcp_Endpoint_init_zero, false, grpc_gcp_Endpoint_init_zero, {{NULL}, NULL}, false, grpc_gcp_RpcProtocolVersions_init_zero}
#define grpc_gcp_ServerHandshakeParameters_init_zero {{{NULL}, NULL}, {{NULL}, NULL}}
#define grpc_gcp_StartServerHandshakeReq_init_zero {{{NULL}, NULL}, 0, {grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_init_zero, grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_init_zero, grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_init_zero}, {{NULL}, NULL}, false, grpc_gcp_Endpoint_init_zero, false, grpc_gcp_Endpoint_init_zero, false, grpc_gcp_RpcProtocolVersions_init_zero}
#define grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_init_zero {false, 0, false, grpc_gcp_ServerHandshakeParameters_init_zero}
#define grpc_gcp_NextHandshakeMessageReq_init_zero {{{NULL}, NULL}}
#define grpc_gcp_HandshakerReq_init_zero {false, grpc_gcp_StartClientHandshakeReq_init_zero, false, grpc_gcp_StartServerHandshakeReq_init_zero, false, grpc_gcp_NextHandshakeMessageReq_init_zero}
#define grpc_gcp_HandshakerResult_init_zero {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, false, grpc_gcp_Identity_init_zero, false, grpc_gcp_Identity_init_zero, false, 0, false, grpc_gcp_RpcProtocolVersions_init_zero}
#define grpc_gcp_HandshakerStatus_init_zero {false, 0, {{NULL}, NULL}}
#define grpc_gcp_HandshakerResp_init_zero {{{NULL}, NULL}, false, 0, false, grpc_gcp_HandshakerResult_init_zero, false, grpc_gcp_HandshakerStatus_init_zero}
/* Field tags (for use in manual encoding/decoding) */
#define grpc_gcp_Identity_service_account_tag 1
#define grpc_gcp_Identity_hostname_tag 2
#define grpc_gcp_NextHandshakeMessageReq_in_bytes_tag 1
#define grpc_gcp_ServerHandshakeParameters_record_protocols_tag 1
#define grpc_gcp_ServerHandshakeParameters_local_identities_tag 2
#define grpc_gcp_Endpoint_ip_address_tag 1
#define grpc_gcp_Endpoint_port_tag 2
#define grpc_gcp_Endpoint_protocol_tag 3
#define grpc_gcp_HandshakerResult_application_protocol_tag 1
#define grpc_gcp_HandshakerResult_record_protocol_tag 2
#define grpc_gcp_HandshakerResult_key_data_tag 3
#define grpc_gcp_HandshakerResult_peer_identity_tag 4
#define grpc_gcp_HandshakerResult_local_identity_tag 5
#define grpc_gcp_HandshakerResult_keep_channel_open_tag 6
#define grpc_gcp_HandshakerResult_peer_rpc_versions_tag 7
#define grpc_gcp_HandshakerStatus_code_tag 1
#define grpc_gcp_HandshakerStatus_details_tag 2
#define grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_key_tag 1
#define grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_value_tag 2
#define grpc_gcp_HandshakerResp_out_frames_tag 1
#define grpc_gcp_HandshakerResp_bytes_consumed_tag 2
#define grpc_gcp_HandshakerResp_result_tag 3
#define grpc_gcp_HandshakerResp_status_tag 4
#define grpc_gcp_StartClientHandshakeReq_handshake_security_protocol_tag 1
#define grpc_gcp_StartClientHandshakeReq_application_protocols_tag 2
#define grpc_gcp_StartClientHandshakeReq_record_protocols_tag 3
#define grpc_gcp_StartClientHandshakeReq_target_identities_tag 4
#define grpc_gcp_StartClientHandshakeReq_local_identity_tag 5
#define grpc_gcp_StartClientHandshakeReq_local_endpoint_tag 6
#define grpc_gcp_StartClientHandshakeReq_remote_endpoint_tag 7
#define grpc_gcp_StartClientHandshakeReq_target_name_tag 8
#define grpc_gcp_StartClientHandshakeReq_rpc_versions_tag 9
#define grpc_gcp_StartServerHandshakeReq_application_protocols_tag 1
#define grpc_gcp_StartServerHandshakeReq_handshake_parameters_tag 2
#define grpc_gcp_StartServerHandshakeReq_in_bytes_tag 3
#define grpc_gcp_StartServerHandshakeReq_local_endpoint_tag 4
#define grpc_gcp_StartServerHandshakeReq_remote_endpoint_tag 5
#define grpc_gcp_StartServerHandshakeReq_rpc_versions_tag 6
#define grpc_gcp_HandshakerReq_client_start_tag 1
#define grpc_gcp_HandshakerReq_server_start_tag 2
#define grpc_gcp_HandshakerReq_next_tag 3
/* Struct field encoding specification for nanopb */
extern const pb_field_t grpc_gcp_Endpoint_fields[4];
extern const pb_field_t grpc_gcp_Identity_fields[3];
extern const pb_field_t grpc_gcp_StartClientHandshakeReq_fields[10];
extern const pb_field_t grpc_gcp_ServerHandshakeParameters_fields[3];
extern const pb_field_t grpc_gcp_StartServerHandshakeReq_fields[7];
extern const pb_field_t grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_fields[3];
extern const pb_field_t grpc_gcp_NextHandshakeMessageReq_fields[2];
extern const pb_field_t grpc_gcp_HandshakerReq_fields[4];
extern const pb_field_t grpc_gcp_HandshakerResult_fields[8];
extern const pb_field_t grpc_gcp_HandshakerStatus_fields[3];
extern const pb_field_t grpc_gcp_HandshakerResp_fields[5];
/* Maximum encoded size of messages (where known) */
/* grpc_gcp_Endpoint_size depends on runtime parameters */
/* grpc_gcp_Identity_size depends on runtime parameters */
/* grpc_gcp_StartClientHandshakeReq_size depends on runtime parameters */
/* grpc_gcp_ServerHandshakeParameters_size depends on runtime parameters */
/* grpc_gcp_StartServerHandshakeReq_size depends on runtime parameters */
#define grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_size (17 + grpc_gcp_ServerHandshakeParameters_size)
/* grpc_gcp_NextHandshakeMessageReq_size depends on runtime parameters */
#define grpc_gcp_HandshakerReq_size (18 + grpc_gcp_StartClientHandshakeReq_size + grpc_gcp_StartServerHandshakeReq_size + grpc_gcp_NextHandshakeMessageReq_size)
/* grpc_gcp_HandshakerResult_size depends on runtime parameters */
/* grpc_gcp_HandshakerStatus_size depends on runtime parameters */
/* grpc_gcp_HandshakerResp_size depends on runtime parameters */
/* Message IDs (where set with "msgid" option) */
#ifdef PB_MSGID
#define HANDSHAKER_MESSAGES \
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* @@protoc_insertion_point(eof) */
#endif

@ -1,49 +0,0 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.3.7-dev */
#include "src/core/tsi/alts/handshaker/transport_security_common.pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
const pb_field_t grpc_gcp_RpcProtocolVersions_fields[3] = {
PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_gcp_RpcProtocolVersions, max_rpc_version, max_rpc_version, &grpc_gcp_RpcProtocolVersions_Version_fields),
PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_gcp_RpcProtocolVersions, min_rpc_version, max_rpc_version, &grpc_gcp_RpcProtocolVersions_Version_fields),
PB_LAST_FIELD
};
const pb_field_t grpc_gcp_RpcProtocolVersions_Version_fields[3] = {
PB_FIELD( 1, UINT32 , OPTIONAL, STATIC , FIRST, grpc_gcp_RpcProtocolVersions_Version, major, major, 0),
PB_FIELD( 2, UINT32 , OPTIONAL, STATIC , OTHER, grpc_gcp_RpcProtocolVersions_Version, minor, major, 0),
PB_LAST_FIELD
};
/* Check that field information fits in pb_field_t */
#if !defined(PB_FIELD_32BIT)
/* If you get an error here, it means that you need to define PB_FIELD_32BIT
* compile-time option. You can do that in pb.h or on compiler command line.
*
* The reason you need to do this is that some of your messages contain tag
* numbers or field sizes that are larger than what can fit in 8 or 16 bit
* field descriptors.
*/
PB_STATIC_ASSERT((pb_membersize(grpc_gcp_RpcProtocolVersions, max_rpc_version) < 65536 && pb_membersize(grpc_gcp_RpcProtocolVersions, min_rpc_version) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_gcp_RpcProtocolVersions_grpc_gcp_RpcProtocolVersions_Version)
#endif
#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
/* If you get an error here, it means that you need to define PB_FIELD_16BIT
* compile-time option. You can do that in pb.h or on compiler command line.
*
* The reason you need to do this is that some of your messages contain tag
* numbers or field sizes that are larger than what can fit in the default
* 8 bit descriptors.
*/
PB_STATIC_ASSERT((pb_membersize(grpc_gcp_RpcProtocolVersions, max_rpc_version) < 256 && pb_membersize(grpc_gcp_RpcProtocolVersions, min_rpc_version) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_gcp_RpcProtocolVersions_grpc_gcp_RpcProtocolVersions_Version)
#endif
/* @@protoc_insertion_point(eof) */

@ -1,78 +0,0 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.3.7-dev */
#ifndef PB_GRPC_GCP_TRANSPORT_SECURITY_COMMON_PB_H_INCLUDED
#define PB_GRPC_GCP_TRANSPORT_SECURITY_COMMON_PB_H_INCLUDED
#include "pb.h"
/* @@protoc_insertion_point(includes) */
#if PB_PROTO_HEADER_VERSION != 30
#error Regenerate this file with the current version of nanopb generator.
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Enum definitions */
typedef enum _grpc_gcp_SecurityLevel {
grpc_gcp_SecurityLevel_SECURITY_NONE = 0,
grpc_gcp_SecurityLevel_INTEGRITY_ONLY = 1,
grpc_gcp_SecurityLevel_INTEGRITY_AND_PRIVACY = 2
} grpc_gcp_SecurityLevel;
#define _grpc_gcp_SecurityLevel_MIN grpc_gcp_SecurityLevel_SECURITY_NONE
#define _grpc_gcp_SecurityLevel_MAX grpc_gcp_SecurityLevel_INTEGRITY_AND_PRIVACY
#define _grpc_gcp_SecurityLevel_ARRAYSIZE ((grpc_gcp_SecurityLevel)(grpc_gcp_SecurityLevel_INTEGRITY_AND_PRIVACY+1))
/* Struct definitions */
typedef struct _grpc_gcp_RpcProtocolVersions_Version {
bool has_major;
uint32_t major;
bool has_minor;
uint32_t minor;
/* @@protoc_insertion_point(struct:grpc_gcp_RpcProtocolVersions_Version) */
} grpc_gcp_RpcProtocolVersions_Version;
typedef struct _grpc_gcp_RpcProtocolVersions {
bool has_max_rpc_version;
grpc_gcp_RpcProtocolVersions_Version max_rpc_version;
bool has_min_rpc_version;
grpc_gcp_RpcProtocolVersions_Version min_rpc_version;
/* @@protoc_insertion_point(struct:grpc_gcp_RpcProtocolVersions) */
} grpc_gcp_RpcProtocolVersions;
/* Default values for struct fields */
/* Initializer values for message structs */
#define grpc_gcp_RpcProtocolVersions_init_default {false, grpc_gcp_RpcProtocolVersions_Version_init_default, false, grpc_gcp_RpcProtocolVersions_Version_init_default}
#define grpc_gcp_RpcProtocolVersions_Version_init_default {false, 0, false, 0}
#define grpc_gcp_RpcProtocolVersions_init_zero {false, grpc_gcp_RpcProtocolVersions_Version_init_zero, false, grpc_gcp_RpcProtocolVersions_Version_init_zero}
#define grpc_gcp_RpcProtocolVersions_Version_init_zero {false, 0, false, 0}
/* Field tags (for use in manual encoding/decoding) */
#define grpc_gcp_RpcProtocolVersions_Version_major_tag 1
#define grpc_gcp_RpcProtocolVersions_Version_minor_tag 2
#define grpc_gcp_RpcProtocolVersions_max_rpc_version_tag 1
#define grpc_gcp_RpcProtocolVersions_min_rpc_version_tag 2
/* Struct field encoding specification for nanopb */
extern const pb_field_t grpc_gcp_RpcProtocolVersions_fields[3];
extern const pb_field_t grpc_gcp_RpcProtocolVersions_Version_fields[3];
/* Maximum encoded size of messages (where known) */
#define grpc_gcp_RpcProtocolVersions_size 28
#define grpc_gcp_RpcProtocolVersions_Version_size 12
/* Message IDs (where set with "msgid" option) */
#ifdef PB_MSGID
#define TRANSPORT_SECURITY_COMMON_MESSAGES \
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* @@protoc_insertion_point(eof) */
#endif

@ -29,9 +29,6 @@ bool grpc_gcp_rpc_protocol_versions_set_max(
"grpc_gcp_rpc_protocol_versions_set_max().");
return false;
}
versions->has_max_rpc_version = true;
versions->max_rpc_version.has_major = true;
versions->max_rpc_version.has_minor = true;
versions->max_rpc_version.major = max_major;
versions->max_rpc_version.minor = max_minor;
return true;
@ -46,63 +43,45 @@ bool grpc_gcp_rpc_protocol_versions_set_min(
"grpc_gcp_rpc_protocol_versions_set_min().");
return false;
}
versions->has_min_rpc_version = true;
versions->min_rpc_version.has_major = true;
versions->min_rpc_version.has_minor = true;
versions->min_rpc_version.major = min_major;
versions->min_rpc_version.minor = min_minor;
return true;
}
size_t grpc_gcp_rpc_protocol_versions_encode_length(
const grpc_gcp_rpc_protocol_versions* versions) {
if (versions == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_rpc_protocol_versions_encode_length().");
return 0;
}
pb_ostream_t size_stream;
memset(&size_stream, 0, sizeof(pb_ostream_t));
if (!pb_encode(&size_stream, grpc_gcp_RpcProtocolVersions_fields, versions)) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&size_stream));
return 0;
}
return size_stream.bytes_written;
}
bool grpc_gcp_rpc_protocol_versions_encode_to_raw_bytes(
const grpc_gcp_rpc_protocol_versions* versions, uint8_t* bytes,
size_t bytes_length) {
if (versions == nullptr || bytes == nullptr || bytes_length == 0) {
bool grpc_gcp_rpc_protocol_versions_encode(
const grpc_gcp_rpc_protocol_versions* versions, grpc_slice* slice) {
if (versions == nullptr || slice == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_rpc_protocol_versions_encode_to_raw_bytes().");
return false;
}
pb_ostream_t output_stream = pb_ostream_from_buffer(bytes, bytes_length);
if (!pb_encode(&output_stream, grpc_gcp_RpcProtocolVersions_fields,
versions)) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&output_stream));
"grpc_gcp_rpc_protocol_versions_encode().");
return false;
}
return true;
upb::Arena arena;
grpc_gcp_RpcProtocolVersions* versions_msg =
grpc_gcp_RpcProtocolVersions_new(arena.ptr());
grpc_gcp_RpcProtocolVersions_assign_from_struct(versions_msg, arena.ptr(),
versions);
return grpc_gcp_rpc_protocol_versions_encode(versions_msg, arena.ptr(),
slice);
}
bool grpc_gcp_rpc_protocol_versions_encode(
const grpc_gcp_rpc_protocol_versions* versions, grpc_slice* slice) {
if (versions == nullptr || slice == nullptr) {
const grpc_gcp_RpcProtocolVersions* versions, upb_arena* arena,
grpc_slice* slice) {
if (versions == nullptr || arena == nullptr || slice == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_rpc_protocol_versions_encode().");
return false;
}
size_t encoded_length =
grpc_gcp_rpc_protocol_versions_encode_length(versions);
if (encoded_length == 0) return false;
*slice = grpc_slice_malloc(encoded_length);
return grpc_gcp_rpc_protocol_versions_encode_to_raw_bytes(
versions, GRPC_SLICE_START_PTR(*slice), encoded_length);
size_t buf_length;
char* buf =
grpc_gcp_RpcProtocolVersions_serialize(versions, arena, &buf_length);
if (buf == nullptr) {
return false;
}
*slice = grpc_slice_from_copied_buffer(buf, buf_length);
return true;
}
bool grpc_gcp_rpc_protocol_versions_decode(
@ -113,16 +92,63 @@ bool grpc_gcp_rpc_protocol_versions_decode(
"grpc_gcp_rpc_protocol_versions_decode().");
return false;
}
pb_istream_t stream =
pb_istream_from_buffer(const_cast<uint8_t*>(GRPC_SLICE_START_PTR(slice)),
GRPC_SLICE_LENGTH(slice));
if (!pb_decode(&stream, grpc_gcp_RpcProtocolVersions_fields, versions)) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream));
upb::Arena arena;
grpc_gcp_RpcProtocolVersions* versions_msg =
grpc_gcp_RpcProtocolVersions_parse(
reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(slice)),
GRPC_SLICE_LENGTH(slice), arena.ptr());
if (versions_msg == nullptr) {
gpr_log(GPR_ERROR, "cannot deserialize RpcProtocolVersions message");
return false;
}
grpc_gcp_rpc_protocol_versions_assign_from_upb(versions, versions_msg);
return true;
}
void grpc_gcp_rpc_protocol_versions_assign_from_upb(
grpc_gcp_rpc_protocol_versions* versions,
const grpc_gcp_RpcProtocolVersions* value) {
const grpc_gcp_RpcProtocolVersions_Version* max_version_msg =
grpc_gcp_RpcProtocolVersions_max_rpc_version(value);
if (max_version_msg != nullptr) {
versions->max_rpc_version.major =
grpc_gcp_RpcProtocolVersions_Version_major(max_version_msg);
versions->max_rpc_version.minor =
grpc_gcp_RpcProtocolVersions_Version_minor(max_version_msg);
} else {
versions->max_rpc_version.major = 0;
versions->max_rpc_version.minor = 0;
}
const grpc_gcp_RpcProtocolVersions_Version* min_version_msg =
grpc_gcp_RpcProtocolVersions_min_rpc_version(value);
if (min_version_msg != nullptr) {
versions->min_rpc_version.major =
grpc_gcp_RpcProtocolVersions_Version_major(min_version_msg);
versions->min_rpc_version.minor =
grpc_gcp_RpcProtocolVersions_Version_minor(min_version_msg);
} else {
versions->min_rpc_version.major = 0;
versions->min_rpc_version.minor = 0;
}
}
void grpc_gcp_RpcProtocolVersions_assign_from_struct(
grpc_gcp_RpcProtocolVersions* versions, upb_arena* arena,
const grpc_gcp_rpc_protocol_versions* value) {
grpc_gcp_RpcProtocolVersions_Version* max_version_msg =
grpc_gcp_RpcProtocolVersions_mutable_max_rpc_version(versions, arena);
grpc_gcp_RpcProtocolVersions_Version_set_major(max_version_msg,
value->max_rpc_version.major);
grpc_gcp_RpcProtocolVersions_Version_set_minor(max_version_msg,
value->max_rpc_version.minor);
grpc_gcp_RpcProtocolVersions_Version* min_version_msg =
grpc_gcp_RpcProtocolVersions_mutable_min_rpc_version(versions, arena);
grpc_gcp_RpcProtocolVersions_Version_set_major(min_version_msg,
value->min_rpc_version.major);
grpc_gcp_RpcProtocolVersions_Version_set_minor(min_version_msg,
value->min_rpc_version.minor);
}
bool grpc_gcp_rpc_protocol_versions_copy(
const grpc_gcp_rpc_protocol_versions* src,
grpc_gcp_rpc_protocol_versions* dst) {

@ -21,20 +21,24 @@
#include <grpc/support/port_platform.h>
#include "pb_decode.h"
#include "pb_encode.h"
#include <grpc/slice.h>
#include <grpc/slice_buffer.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include "src/core/tsi/alts/handshaker/transport_security_common.pb.h"
#include "src/proto/grpc/gcp/transport_security_common.upb.h"
typedef grpc_gcp_RpcProtocolVersions grpc_gcp_rpc_protocol_versions;
// C struct coresponding to protobuf message RpcProtocolVersions.Version
typedef struct _grpc_gcp_RpcProtocolVersions_Version {
uint32_t major;
uint32_t minor;
} grpc_gcp_rpc_protocol_versions_version;
typedef grpc_gcp_RpcProtocolVersions_Version
grpc_gcp_rpc_protocol_versions_version;
// C struct coresponding to protobuf message RpcProtocolVersions
typedef struct _grpc_gcp_RpcProtocolVersions {
grpc_gcp_rpc_protocol_versions_version max_rpc_version;
grpc_gcp_rpc_protocol_versions_version min_rpc_version;
} grpc_gcp_rpc_protocol_versions;
/**
* This method sets the value for max_rpc_versions field of rpc protocol
@ -65,41 +69,30 @@ bool grpc_gcp_rpc_protocol_versions_set_min(
uint32_t min_minor);
/**
* This method computes serialized byte length of rpc protocol versions.
*
* - versions: an rpc protocol versions instance.
*
* The method returns serialized byte length. It returns 0 on failure.
*/
size_t grpc_gcp_rpc_protocol_versions_encode_length(
const grpc_gcp_rpc_protocol_versions* versions);
/**
* This method serializes rpc protocol versions and writes the result to
* the memory buffer provided by the caller. Caller is responsible for
* allocating sufficient memory to store the serialized data.
* This method serializes an rpc protocol version and returns serialized rpc
* versions in grpc slice.
*
* - versions: an rpc protocol versions instance.
* - bytes: bytes buffer where the result will be written to.
* - bytes_length: length of the bytes buffer.
* - slice: grpc slice where the serialized result will be written.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_rpc_protocol_versions_encode_to_raw_bytes(
const grpc_gcp_rpc_protocol_versions* versions, uint8_t* bytes,
size_t bytes_length);
bool grpc_gcp_rpc_protocol_versions_encode(
const grpc_gcp_rpc_protocol_versions* versions, grpc_slice* slice);
/**
* This method serializes an rpc protocol version and returns serialized rpc
* versions in grpc slice.
*
* - versions: an rpc protocol versions instance.
* - arena: upb arena.
* - slice: grpc slice where the serialized result will be written.
*
* The method returns true on success and false otherwise.
*/
bool grpc_gcp_rpc_protocol_versions_encode(
const grpc_gcp_rpc_protocol_versions* versions, grpc_slice* slice);
const grpc_gcp_RpcProtocolVersions* versions, upb_arena* arena,
grpc_slice* slice);
/**
* This method de-serializes input in grpc slice form and stores the result
@ -114,6 +107,21 @@ bool grpc_gcp_rpc_protocol_versions_encode(
bool grpc_gcp_rpc_protocol_versions_decode(
const grpc_slice& slice, grpc_gcp_rpc_protocol_versions* versions);
/**
* Assigns value of upb RpcProtocolVersions to grpc_gcp_rpc_protocol_versions.
*/
void grpc_gcp_rpc_protocol_versions_assign_from_upb(
grpc_gcp_rpc_protocol_versions* versions,
const grpc_gcp_RpcProtocolVersions* value);
/**
* Assigns value of struct grpc_gcp_rpc_protocol_versions to
* RpcProtocolVersions.
*/
void grpc_gcp_RpcProtocolVersions_assign_from_struct(
grpc_gcp_RpcProtocolVersions* versions, upb_arena* arena,
const grpc_gcp_rpc_protocol_versions* value);
/**
* This method performs a deep copy operation on rpc protocol versions
* instance.

@ -306,23 +306,18 @@ CORE_SOURCE_FILES = [
'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc',
'src/core/tsi/alts/handshaker/alts_tsi_utils.cc',
'src/core/tsi/alts/handshaker/transport_security_common_api.cc',
'src/core/tsi/alts/handshaker/altscontext.pb.c',
'src/core/tsi/alts/handshaker/handshaker.pb.c',
'src/core/tsi/alts/handshaker/transport_security_common.pb.c',
'third_party/nanopb/pb_common.c',
'third_party/nanopb/pb_decode.c',
'third_party/nanopb/pb_encode.c',
'src/core/tsi/transport_security.cc',
'src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c',
'src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c',
'src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c',
'third_party/upb/upb/decode.c',
'third_party/upb/upb/encode.c',
'third_party/upb/upb/msg.c',
'third_party/upb/upb/port.c',
'third_party/upb/upb/table.c',
'third_party/upb/upb/upb.c',
'src/core/tsi/transport_security.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc',
'src/core/ext/transport/chttp2/client/authority.cc',

@ -41,17 +41,6 @@ grpc_cc_test(
],
)
grpc_cc_test(
name = "alts_handshaker_service_api_test",
srcs = ["alts_handshaker_service_api_test.cc"],
language = "C++",
deps = [
":alts_handshaker_service_api_test_lib",
"//:grpc",
"//test/core/util:grpc_test_util",
],
)
grpc_cc_test(
name = "alts_tsi_handshaker_test",
srcs = ["alts_tsi_handshaker_test.cc"],

@ -54,34 +54,34 @@ typedef struct alts_handshaker_client_test_config {
} alts_handshaker_client_test_config;
static void validate_rpc_protocol_versions(
grpc_gcp_rpc_protocol_versions* versions) {
const grpc_gcp_RpcProtocolVersions* versions) {
GPR_ASSERT(versions != nullptr);
GPR_ASSERT(versions->max_rpc_version.major == kMaxRpcVersionMajor);
GPR_ASSERT(versions->max_rpc_version.minor == kMaxRpcVersionMinor);
GPR_ASSERT(versions->min_rpc_version.major == kMinRpcVersionMajor);
GPR_ASSERT(versions->min_rpc_version.minor == kMinRpcVersionMinor);
const grpc_gcp_RpcProtocolVersions_Version* max_version =
grpc_gcp_RpcProtocolVersions_max_rpc_version(versions);
const grpc_gcp_RpcProtocolVersions_Version* min_version =
grpc_gcp_RpcProtocolVersions_min_rpc_version(versions);
GPR_ASSERT(grpc_gcp_RpcProtocolVersions_Version_major(max_version) ==
kMaxRpcVersionMajor);
GPR_ASSERT(grpc_gcp_RpcProtocolVersions_Version_minor(max_version) ==
kMaxRpcVersionMinor);
GPR_ASSERT(grpc_gcp_RpcProtocolVersions_Version_major(min_version) ==
kMinRpcVersionMajor);
GPR_ASSERT(grpc_gcp_RpcProtocolVersions_Version_minor(min_version) ==
kMinRpcVersionMinor);
}
static void validate_target_identities(
const repeated_field* target_identity_head) {
grpc_gcp_identity* target_identity1 = static_cast<grpc_gcp_identity*>(
const_cast<void*>(target_identity_head->next->data));
grpc_gcp_identity* target_identity2 = static_cast<grpc_gcp_identity*>(
const_cast<void*>(target_identity_head->data));
grpc_slice* service_account1 =
static_cast<grpc_slice*>(target_identity1->service_account.arg);
grpc_slice* service_account2 =
static_cast<grpc_slice*>(target_identity2->service_account.arg);
GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*service_account1),
ALTS_HANDSHAKER_CLIENT_TEST_TARGET_SERVICE_ACCOUNT1,
GRPC_SLICE_LENGTH(*service_account1)) == 0);
GPR_ASSERT(strlen(ALTS_HANDSHAKER_CLIENT_TEST_TARGET_SERVICE_ACCOUNT1) ==
GRPC_SLICE_LENGTH(*service_account1));
GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*service_account2),
ALTS_HANDSHAKER_CLIENT_TEST_TARGET_SERVICE_ACCOUNT2,
GRPC_SLICE_LENGTH(*service_account2)) == 0);
GPR_ASSERT(strlen(ALTS_HANDSHAKER_CLIENT_TEST_TARGET_SERVICE_ACCOUNT2) ==
GRPC_SLICE_LENGTH(*service_account2));
const grpc_gcp_Identity* const* target_identities,
size_t target_identities_count) {
GPR_ASSERT(target_identities_count == 2);
const grpc_gcp_Identity* identity1 = target_identities[1];
const grpc_gcp_Identity* identity2 = target_identities[0];
GPR_ASSERT(upb_strview_eql(
grpc_gcp_Identity_service_account(identity1),
upb_strview_makez(ALTS_HANDSHAKER_CLIENT_TEST_TARGET_SERVICE_ACCOUNT1)));
GPR_ASSERT(upb_strview_eql(
grpc_gcp_Identity_service_account(identity2),
upb_strview_makez(ALTS_HANDSHAKER_CLIENT_TEST_TARGET_SERVICE_ACCOUNT2)));
}
/**
@ -117,14 +117,14 @@ static bool validate_op(alts_handshaker_client* c, const grpc_op* op,
return ok;
}
static grpc_gcp_handshaker_req* deserialize_handshaker_req(
grpc_gcp_handshaker_req_type type, grpc_byte_buffer* buffer) {
static grpc_gcp_HandshakerReq* deserialize_handshaker_req(
grpc_byte_buffer* buffer, upb_arena* arena) {
GPR_ASSERT(buffer != nullptr);
grpc_gcp_handshaker_req* req = grpc_gcp_handshaker_decoded_req_create(type);
grpc_byte_buffer_reader bbr;
GPR_ASSERT(grpc_byte_buffer_reader_init(&bbr, buffer));
grpc_slice slice = grpc_byte_buffer_reader_readall(&bbr);
GPR_ASSERT(grpc_gcp_handshaker_req_decode(slice, req));
grpc_gcp_HandshakerReq* req = grpc_gcp_handshaker_req_decode(slice, arena);
GPR_ASSERT(req != nullptr);
grpc_slice_unref(slice);
grpc_byte_buffer_reader_destroy(&bbr);
return req;
@ -150,40 +150,38 @@ static grpc_call_error check_client_start_success(grpc_call* call,
const grpc_op* op,
size_t nops,
grpc_closure* closure) {
upb::Arena arena;
alts_handshaker_client* client =
static_cast<alts_handshaker_client*>(closure->cb_arg);
GPR_ASSERT(alts_handshaker_client_get_closure_for_testing(client) == closure);
grpc_gcp_handshaker_req* req = deserialize_handshaker_req(
CLIENT_START_REQ,
alts_handshaker_client_get_send_buffer_for_testing(client));
GPR_ASSERT(req->client_start.handshake_security_protocol ==
grpc_gcp_HandshakeProtocol_ALTS);
const void* data = (static_cast<repeated_field*>(
req->client_start.application_protocols.arg))
->data;
GPR_ASSERT(data != nullptr);
grpc_slice* application_protocol = (grpc_slice*)data;
data = (static_cast<repeated_field*>(req->client_start.record_protocols.arg))
->data;
grpc_slice* record_protocol = (grpc_slice*)data;
GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*application_protocol),
ALTS_APPLICATION_PROTOCOL,
GRPC_SLICE_LENGTH(*application_protocol)) == 0);
GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*record_protocol),
ALTS_RECORD_PROTOCOL,
GRPC_SLICE_LENGTH(*record_protocol)) == 0);
validate_rpc_protocol_versions(&req->client_start.rpc_versions);
validate_target_identities(
static_cast<repeated_field*>(req->client_start.target_identities.arg));
grpc_slice* target_name =
static_cast<grpc_slice*>(req->client_start.target_name.arg);
GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*target_name),
ALTS_HANDSHAKER_CLIENT_TEST_TARGET_NAME,
GRPC_SLICE_LENGTH(*target_name)) == 0);
GPR_ASSERT(GRPC_SLICE_LENGTH(*target_name) ==
strlen(ALTS_HANDSHAKER_CLIENT_TEST_TARGET_NAME));
grpc_gcp_HandshakerReq* req = deserialize_handshaker_req(
alts_handshaker_client_get_send_buffer_for_testing(client), arena.ptr());
const grpc_gcp_StartClientHandshakeReq* client_start =
grpc_gcp_HandshakerReq_client_start(req);
GPR_ASSERT(grpc_gcp_StartClientHandshakeReq_handshake_security_protocol(
client_start) == grpc_gcp_ALTS);
upb_strview const* application_protocols =
grpc_gcp_StartClientHandshakeReq_application_protocols(client_start,
nullptr);
GPR_ASSERT(upb_strview_eql(application_protocols[0],
upb_strview_makez(ALTS_APPLICATION_PROTOCOL)));
upb_strview const* record_protocols =
grpc_gcp_StartClientHandshakeReq_record_protocols(client_start, nullptr);
GPR_ASSERT(upb_strview_eql(record_protocols[0],
upb_strview_makez(ALTS_RECORD_PROTOCOL)));
const grpc_gcp_RpcProtocolVersions* rpc_protocol_versions =
grpc_gcp_StartClientHandshakeReq_rpc_versions(client_start);
validate_rpc_protocol_versions(rpc_protocol_versions);
size_t target_identities_count;
const grpc_gcp_Identity* const* target_identities =
grpc_gcp_StartClientHandshakeReq_target_identities(
client_start, &target_identities_count);
validate_target_identities(target_identities, target_identities_count);
GPR_ASSERT(upb_strview_eql(
grpc_gcp_StartClientHandshakeReq_target_name(client_start),
upb_strview_makez(ALTS_HANDSHAKER_CLIENT_TEST_TARGET_NAME)));
GPR_ASSERT(validate_op(client, op, nops, true /* is_start */));
grpc_gcp_handshaker_req_destroy(req);
return GRPC_CALL_OK;
}
@ -197,34 +195,37 @@ static grpc_call_error check_server_start_success(grpc_call* call,
const grpc_op* op,
size_t nops,
grpc_closure* closure) {
upb::Arena arena;
alts_handshaker_client* client =
static_cast<alts_handshaker_client*>(closure->cb_arg);
GPR_ASSERT(alts_handshaker_client_get_closure_for_testing(client) == closure);
grpc_gcp_handshaker_req* req = deserialize_handshaker_req(
SERVER_START_REQ,
alts_handshaker_client_get_send_buffer_for_testing(client));
const void* data = (static_cast<repeated_field*>(
req->server_start.application_protocols.arg))
->data;
GPR_ASSERT(data != nullptr);
grpc_slice* application_protocol = (grpc_slice*)data;
GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*application_protocol),
ALTS_APPLICATION_PROTOCOL,
GRPC_SLICE_LENGTH(*application_protocol)) == 0);
GPR_ASSERT(req->server_start.handshake_parameters_count == 1);
GPR_ASSERT(req->server_start.handshake_parameters[0].key ==
grpc_gcp_HandshakeProtocol_ALTS);
data = (static_cast<repeated_field*>(req->server_start.handshake_parameters[0]
.value.record_protocols.arg))
->data;
GPR_ASSERT(data != nullptr);
grpc_slice* record_protocol = (grpc_slice*)data;
GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*record_protocol),
ALTS_RECORD_PROTOCOL,
GRPC_SLICE_LENGTH(*record_protocol)) == 0);
validate_rpc_protocol_versions(&req->server_start.rpc_versions);
grpc_gcp_HandshakerReq* req = deserialize_handshaker_req(
alts_handshaker_client_get_send_buffer_for_testing(client), arena.ptr());
const grpc_gcp_StartServerHandshakeReq* server_start =
grpc_gcp_HandshakerReq_server_start(req);
upb_strview const* application_protocols =
grpc_gcp_StartServerHandshakeReq_application_protocols(server_start,
nullptr);
GPR_ASSERT(upb_strview_eql(application_protocols[0],
upb_strview_makez(ALTS_APPLICATION_PROTOCOL)));
size_t handshake_parameters_count;
const grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry* const*
handshake_parameters =
grpc_gcp_StartServerHandshakeReq_handshake_parameters(
server_start, &handshake_parameters_count);
GPR_ASSERT(handshake_parameters_count == 1);
GPR_ASSERT(grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_key(
handshake_parameters[0]) == grpc_gcp_ALTS);
const grpc_gcp_ServerHandshakeParameters* value =
grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_value(
handshake_parameters[0]);
upb_strview const* record_protocols =
grpc_gcp_ServerHandshakeParameters_record_protocols(value, nullptr);
GPR_ASSERT(upb_strview_eql(record_protocols[0],
upb_strview_makez(ALTS_RECORD_PROTOCOL)));
validate_rpc_protocol_versions(
grpc_gcp_StartServerHandshakeReq_rpc_versions(server_start));
GPR_ASSERT(validate_op(client, op, nops, true /* is_start */));
grpc_gcp_handshaker_req_destroy(req);
return GRPC_CALL_OK;
}
@ -235,20 +236,21 @@ static grpc_call_error check_server_start_success(grpc_call* call,
*/
static grpc_call_error check_next_success(grpc_call* call, const grpc_op* op,
size_t nops, grpc_closure* closure) {
upb::Arena arena;
alts_handshaker_client* client =
static_cast<alts_handshaker_client*>(closure->cb_arg);
GPR_ASSERT(alts_handshaker_client_get_closure_for_testing(client) == closure);
grpc_gcp_handshaker_req* req = deserialize_handshaker_req(
NEXT_REQ, alts_handshaker_client_get_send_buffer_for_testing(client));
grpc_slice* in_bytes = static_cast<grpc_slice*>(req->next.in_bytes.arg);
GPR_ASSERT(in_bytes != nullptr);
GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*in_bytes),
ALTS_HANDSHAKER_CLIENT_TEST_OUT_FRAME,
GRPC_SLICE_LENGTH(*in_bytes)) == 0);
grpc_gcp_HandshakerReq* req = deserialize_handshaker_req(
alts_handshaker_client_get_send_buffer_for_testing(client), arena.ptr());
const grpc_gcp_NextHandshakeMessageReq* next =
grpc_gcp_HandshakerReq_next(req);
GPR_ASSERT(upb_strview_eql(
grpc_gcp_NextHandshakeMessageReq_in_bytes(next),
upb_strview_makez(ALTS_HANDSHAKER_CLIENT_TEST_OUT_FRAME)));
GPR_ASSERT(validate_op(client, op, nops, false /* is_start */));
grpc_gcp_handshaker_req_destroy(req);
return GRPC_CALL_OK;
}
/**
* A mock grpc_caller used to check if client_start, server_start, and next
* operations correctly handle the situation when the grpc call made to the

@ -1,149 +0,0 @@
/*
*
* Copyright 2018 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.h"
int main(int argc, char** argv) {
const char in_bytes[] = "HELLO GOOGLE!";
const char out_frames[] = "HELLO WORLD!";
const char key_data[] = "THIS IS KEY DATA.";
const char details[] = "DETAILS NEED TO BE POPULATED";
const uint32_t max_rpc_version_major = 3;
const uint32_t max_rpc_version_minor = 2;
const uint32_t min_rpc_version_major = 2;
const uint32_t min_rpc_version_minor = 1;
/* handshaker_req_next. */
grpc_gcp_handshaker_req* req = grpc_gcp_handshaker_req_create(NEXT_REQ);
grpc_gcp_handshaker_req* decoded_req =
grpc_gcp_handshaker_decoded_req_create(NEXT_REQ);
GPR_ASSERT(
grpc_gcp_handshaker_req_set_in_bytes(req, in_bytes, strlen(in_bytes)));
grpc_slice encoded_req;
GPR_ASSERT(grpc_gcp_handshaker_req_encode(req, &encoded_req));
GPR_ASSERT(grpc_gcp_handshaker_req_decode(encoded_req, decoded_req));
GPR_ASSERT(grpc_gcp_handshaker_req_equals(req, decoded_req));
grpc_gcp_handshaker_req_destroy(req);
grpc_gcp_handshaker_req_destroy(decoded_req);
grpc_slice_unref(encoded_req);
/* handshaker_req_client_start. */
req = grpc_gcp_handshaker_req_create(CLIENT_START_REQ);
decoded_req = grpc_gcp_handshaker_decoded_req_create(CLIENT_START_REQ);
GPR_ASSERT(grpc_gcp_handshaker_req_set_handshake_protocol(
req, grpc_gcp_HandshakeProtocol_TLS));
GPR_ASSERT(grpc_gcp_handshaker_req_set_local_identity_hostname(
req, "www.google.com"));
GPR_ASSERT(grpc_gcp_handshaker_req_set_local_endpoint(
req, "2001:db8::8:800:200C:417a", 9876, grpc_gcp_NetworkProtocol_TCP));
GPR_ASSERT(grpc_gcp_handshaker_req_set_remote_endpoint(
req, "2001:db8::bac5::fed0:84a2", 1234, grpc_gcp_NetworkProtocol_TCP));
GPR_ASSERT(grpc_gcp_handshaker_req_add_application_protocol(req, "grpc"));
GPR_ASSERT(grpc_gcp_handshaker_req_add_application_protocol(req, "http2"));
GPR_ASSERT(
grpc_gcp_handshaker_req_add_record_protocol(req, "ALTSRP_GCM_AES256"));
GPR_ASSERT(
grpc_gcp_handshaker_req_add_record_protocol(req, "ALTSRP_GCM_AES384"));
GPR_ASSERT(grpc_gcp_handshaker_req_add_target_identity_service_account(
req, "foo@google.com"));
GPR_ASSERT(grpc_gcp_handshaker_req_set_target_name(
req, "google.example.library.service"));
GPR_ASSERT(grpc_gcp_handshaker_req_set_rpc_versions(
req, max_rpc_version_major, max_rpc_version_minor, min_rpc_version_major,
min_rpc_version_minor));
GPR_ASSERT(grpc_gcp_handshaker_req_encode(req, &encoded_req));
GPR_ASSERT(grpc_gcp_handshaker_req_decode(encoded_req, decoded_req));
GPR_ASSERT(grpc_gcp_handshaker_req_equals(req, decoded_req));
grpc_gcp_handshaker_req_destroy(req);
grpc_gcp_handshaker_req_destroy(decoded_req);
grpc_slice_unref(encoded_req);
/* handshaker_req_server_start. */
req = grpc_gcp_handshaker_req_create(SERVER_START_REQ);
decoded_req = grpc_gcp_handshaker_decoded_req_create(SERVER_START_REQ);
GPR_ASSERT(grpc_gcp_handshaker_req_add_application_protocol(req, "grpc"));
GPR_ASSERT(grpc_gcp_handshaker_req_add_application_protocol(req, "http2"));
GPR_ASSERT(grpc_gcp_handshaker_req_set_local_endpoint(
req, "2001:db8::8:800:200C:417a", 9876, grpc_gcp_NetworkProtocol_TCP));
GPR_ASSERT(grpc_gcp_handshaker_req_set_remote_endpoint(
req, "2001:db8::bac5::fed0:84a2", 1234, grpc_gcp_NetworkProtocol_UDP));
GPR_ASSERT(
grpc_gcp_handshaker_req_set_in_bytes(req, in_bytes, strlen(in_bytes)));
GPR_ASSERT(grpc_gcp_handshaker_req_param_add_record_protocol(
req, grpc_gcp_HandshakeProtocol_TLS, "ALTSRP_GCM_AES128"));
GPR_ASSERT(grpc_gcp_handshaker_req_param_add_local_identity_service_account(
req, grpc_gcp_HandshakeProtocol_TLS, "foo@google.com"));
GPR_ASSERT(grpc_gcp_handshaker_req_param_add_local_identity_hostname(
req, grpc_gcp_HandshakeProtocol_TLS, "yihuaz0.mtv.corp.google.com"));
GPR_ASSERT(grpc_gcp_handshaker_req_param_add_record_protocol(
req, grpc_gcp_HandshakeProtocol_ALTS, "ALTSRP_GCM_AES128"));
GPR_ASSERT(grpc_gcp_handshaker_req_param_add_local_identity_hostname(
req, grpc_gcp_HandshakeProtocol_ALTS, "www.amazon.com"));
GPR_ASSERT(grpc_gcp_handshaker_req_set_rpc_versions(
req, max_rpc_version_major, max_rpc_version_minor, min_rpc_version_major,
min_rpc_version_minor));
GPR_ASSERT(grpc_gcp_handshaker_req_encode(req, &encoded_req));
GPR_ASSERT(grpc_gcp_handshaker_req_decode(encoded_req, decoded_req));
GPR_ASSERT(grpc_gcp_handshaker_req_equals(req, decoded_req));
grpc_gcp_handshaker_req_destroy(req);
grpc_gcp_handshaker_req_destroy(decoded_req);
grpc_slice_unref(encoded_req);
/* handshaker_resp. */
grpc_gcp_handshaker_resp* resp = grpc_gcp_handshaker_resp_create();
grpc_gcp_handshaker_resp* decoded_resp = grpc_gcp_handshaker_resp_create();
GPR_ASSERT(grpc_gcp_handshaker_resp_set_out_frames(resp, out_frames,
strlen(out_frames)));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_bytes_consumed(resp, 1024));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_application_protocol(resp, "http"));
GPR_ASSERT(
grpc_gcp_handshaker_resp_set_record_protocol(resp, "ALTSRP_GCM_AES128"));
GPR_ASSERT(
grpc_gcp_handshaker_resp_set_key_data(resp, key_data, strlen(key_data)));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_local_identity_hostname(
resp, "www.faceboook.com"));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_peer_identity_hostname(
resp, "www.amazon.com"));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_channel_open(
resp, false /* channel_open */));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_code(resp, 1023));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_details(resp, details));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_peer_rpc_versions(
resp, max_rpc_version_major, max_rpc_version_minor, min_rpc_version_major,
min_rpc_version_minor));
grpc_slice encoded_resp;
GPR_ASSERT(grpc_gcp_handshaker_resp_encode(resp, &encoded_resp));
GPR_ASSERT(grpc_gcp_handshaker_resp_decode(encoded_resp, decoded_resp));
GPR_ASSERT(grpc_gcp_handshaker_resp_equals(resp, decoded_resp));
grpc_gcp_handshaker_resp_destroy(resp);
grpc_gcp_handshaker_resp_destroy(decoded_resp);
grpc_slice_unref(encoded_resp);
/* Test invalid arguments. */
GPR_ASSERT(!grpc_gcp_handshaker_req_set_in_bytes(nullptr, in_bytes,
strlen(in_bytes)));
GPR_ASSERT(!grpc_gcp_handshaker_req_param_add_record_protocol(
req, grpc_gcp_HandshakeProtocol_TLS, nullptr));
GPR_ASSERT(!grpc_gcp_handshaker_req_param_add_local_identity_service_account(
nullptr, grpc_gcp_HandshakeProtocol_TLS, nullptr));
GPR_ASSERT(!grpc_gcp_handshaker_resp_set_record_protocol(nullptr, nullptr));
}

@ -18,625 +18,146 @@
#include "test/core/tsi/alts/handshaker/alts_handshaker_service_api_test_lib.h"
const size_t kHandshakeProtocolNum = 3;
grpc_gcp_handshaker_req* grpc_gcp_handshaker_decoded_req_create(
grpc_gcp_handshaker_req_type type) {
grpc_gcp_handshaker_req* req =
static_cast<grpc_gcp_handshaker_req*>(gpr_zalloc(sizeof(*req)));
switch (type) {
case CLIENT_START_REQ:
req->has_client_start = true;
req->client_start.target_identities.funcs.decode =
decode_repeated_identity_cb;
req->client_start.application_protocols.funcs.decode =
decode_repeated_string_cb;
req->client_start.record_protocols.funcs.decode =
decode_repeated_string_cb;
req->client_start.local_identity.hostname.funcs.decode =
decode_string_or_bytes_cb;
req->client_start.local_identity.service_account.funcs.decode =
decode_string_or_bytes_cb;
req->client_start.local_endpoint.ip_address.funcs.decode =
decode_string_or_bytes_cb;
req->client_start.remote_endpoint.ip_address.funcs.decode =
decode_string_or_bytes_cb;
req->client_start.target_name.funcs.decode = decode_string_or_bytes_cb;
break;
case SERVER_START_REQ:
req->has_server_start = true;
req->server_start.application_protocols.funcs.decode =
&decode_repeated_string_cb;
for (size_t i = 0; i < kHandshakeProtocolNum; i++) {
req->server_start.handshake_parameters[i]
.value.local_identities.funcs.decode = &decode_repeated_identity_cb;
req->server_start.handshake_parameters[i]
.value.record_protocols.funcs.decode = &decode_repeated_string_cb;
}
req->server_start.in_bytes.funcs.decode = decode_string_or_bytes_cb;
req->server_start.local_endpoint.ip_address.funcs.decode =
decode_string_or_bytes_cb;
req->server_start.remote_endpoint.ip_address.funcs.decode =
decode_string_or_bytes_cb;
break;
case NEXT_REQ:
req->has_next = true;
break;
}
return req;
}
bool grpc_gcp_handshaker_resp_set_application_protocol(
grpc_gcp_handshaker_resp* resp, const char* application_protocol) {
if (resp == nullptr || application_protocol == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"handshaker_resp_set_application_protocol().");
return false;
}
resp->has_result = true;
grpc_slice* slice =
create_slice(application_protocol, strlen(application_protocol));
resp->result.application_protocol.arg = slice;
resp->result.application_protocol.funcs.encode = encode_string_or_bytes_cb;
return true;
}
bool grpc_gcp_handshaker_resp_set_record_protocol(
grpc_gcp_handshaker_resp* resp, const char* record_protocol) {
if (resp == nullptr || record_protocol == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"handshaker_resp_set_record_protocol().");
return false;
}
resp->has_result = true;
grpc_slice* slice = create_slice(record_protocol, strlen(record_protocol));
resp->result.record_protocol.arg = slice;
resp->result.record_protocol.funcs.encode = encode_string_or_bytes_cb;
return true;
}
bool grpc_gcp_handshaker_resp_set_key_data(grpc_gcp_handshaker_resp* resp,
const char* key_data, size_t size) {
if (resp == nullptr || key_data == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to handshaker_resp_set_key_data().");
return false;
}
resp->has_result = true;
grpc_slice* slice = create_slice(key_data, size);
resp->result.key_data.arg = slice;
resp->result.key_data.funcs.encode = encode_string_or_bytes_cb;
return true;
}
static void set_identity_hostname(grpc_gcp_identity* identity,
const char* hostname) {
grpc_slice* slice = create_slice(hostname, strlen(hostname));
identity->hostname.arg = slice;
identity->hostname.funcs.encode = encode_string_or_bytes_cb;
}
static void set_identity_service_account(grpc_gcp_identity* identity,
const char* service_account) {
grpc_slice* slice = create_slice(service_account, strlen(service_account));
identity->service_account.arg = slice;
identity->service_account.funcs.encode = encode_string_or_bytes_cb;
}
bool grpc_gcp_handshaker_resp_set_local_identity_hostname(
grpc_gcp_handshaker_resp* resp, const char* hostname) {
if (resp == nullptr || hostname == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_resp_set_local_identity_hostname().");
return false;
}
resp->has_result = true;
resp->result.has_local_identity = true;
set_identity_hostname(&resp->result.local_identity, hostname);
return true;
}
bool grpc_gcp_handshaker_resp_set_local_identity_service_account(
grpc_gcp_handshaker_resp* resp, const char* service_account) {
if (resp == nullptr || service_account == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_resp_set_local_identity_service_account().");
return false;
}
resp->has_result = true;
resp->result.has_local_identity = true;
set_identity_service_account(&resp->result.local_identity, service_account);
return true;
}
bool grpc_gcp_handshaker_resp_set_peer_identity_hostname(
grpc_gcp_handshaker_resp* resp, const char* hostname) {
if (resp == nullptr || hostname == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_resp_set_peer_identity_hostname().");
return false;
}
resp->has_result = true;
resp->result.has_peer_identity = true;
set_identity_hostname(&resp->result.peer_identity, hostname);
return true;
}
bool grpc_gcp_handshaker_resp_set_peer_identity_service_account(
grpc_gcp_handshaker_resp* resp, const char* service_account) {
if (resp == nullptr || service_account == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_resp_set_peer_identity_service_account().");
return false;
}
resp->has_result = true;
resp->result.has_peer_identity = true;
set_identity_service_account(&resp->result.peer_identity, service_account);
return true;
}
bool grpc_gcp_handshaker_resp_set_channel_open(grpc_gcp_handshaker_resp* resp,
bool keep_channel_open) {
if (resp == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr argument to "
"grpc_gcp_handshaker_resp_set_channel_open().");
return false;
}
resp->has_result = true;
resp->result.has_keep_channel_open = true;
resp->result.keep_channel_open = keep_channel_open;
return true;
}
bool grpc_gcp_handshaker_resp_set_code(grpc_gcp_handshaker_resp* resp,
uint32_t code) {
if (resp == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr argument to grpc_gcp_handshaker_resp_set_code().");
return false;
}
resp->has_status = true;
resp->status.has_code = true;
resp->status.code = code;
return true;
}
bool grpc_gcp_handshaker_resp_set_details(grpc_gcp_handshaker_resp* resp,
const char* details) {
if (resp == nullptr || details == nullptr) {
gpr_log(
GPR_ERROR,
"Invalid nullptr arguments to grpc_gcp_handshaker_resp_set_details().");
return false;
}
resp->has_status = true;
grpc_slice* slice = create_slice(details, strlen(details));
resp->status.details.arg = slice;
resp->status.details.funcs.encode = encode_string_or_bytes_cb;
return true;
}
bool grpc_gcp_handshaker_resp_set_out_frames(grpc_gcp_handshaker_resp* resp,
const char* out_frames,
size_t size) {
if (resp == nullptr || out_frames == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to "
"grpc_gcp_handshaker_resp_set_out_frames().");
return false;
}
grpc_slice* slice = create_slice(out_frames, size);
resp->out_frames.arg = slice;
resp->out_frames.funcs.encode = encode_string_or_bytes_cb;
return true;
}
bool grpc_gcp_handshaker_resp_set_bytes_consumed(grpc_gcp_handshaker_resp* resp,
int32_t bytes_consumed) {
if (resp == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr argument to "
"grpc_gcp_handshaker_resp_set_bytes_consumed().");
return false;
}
resp->has_bytes_consumed = true;
resp->bytes_consumed = bytes_consumed;
return true;
}
bool grpc_gcp_handshaker_resp_set_peer_rpc_versions(
grpc_gcp_handshaker_resp* resp, uint32_t max_major, uint32_t max_minor,
uint32_t min_major, uint32_t min_minor) {
grpc_gcp_HandshakerResp* resp, upb_arena* arena, uint32_t max_major,
uint32_t max_minor, uint32_t min_major, uint32_t min_minor) {
if (resp == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr argument to "
"grpc_gcp_handshaker_resp_set_peer_rpc_versions().");
return false;
}
resp->has_result = true;
resp->result.has_peer_rpc_versions = true;
grpc_gcp_rpc_protocol_versions* versions = &resp->result.peer_rpc_versions;
versions->has_max_rpc_version = true;
versions->has_min_rpc_version = true;
versions->max_rpc_version.has_major = true;
versions->max_rpc_version.has_minor = true;
versions->min_rpc_version.has_major = true;
versions->min_rpc_version.has_minor = true;
versions->max_rpc_version.major = max_major;
versions->max_rpc_version.minor = max_minor;
versions->min_rpc_version.major = min_major;
versions->min_rpc_version.minor = min_minor;
grpc_gcp_rpc_protocol_versions versions;
versions.max_rpc_version.major = max_major;
versions.max_rpc_version.minor = max_minor;
versions.min_rpc_version.major = min_major;
versions.min_rpc_version.minor = min_minor;
grpc_gcp_HandshakerResult* result =
grpc_gcp_HandshakerResp_mutable_result(resp, arena);
grpc_gcp_RpcProtocolVersions* upb_versions =
grpc_gcp_HandshakerResult_mutable_peer_rpc_versions(result, arena);
grpc_gcp_RpcProtocolVersions_assign_from_struct(upb_versions, arena,
&versions);
return true;
}
bool grpc_gcp_handshaker_resp_encode(grpc_gcp_handshaker_resp* resp,
grpc_slice* slice) {
if (resp == nullptr || slice == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr arguments to grpc_gcp_handshaker_resp_encode().");
return false;
grpc_gcp_HandshakerReq* grpc_gcp_handshaker_req_decode(grpc_slice slice,
upb_arena* arena) {
size_t buf_size = GPR_SLICE_LENGTH(slice);
void* buf = upb_arena_malloc(arena, buf_size);
memcpy(buf, reinterpret_cast<const char*>(GPR_SLICE_START_PTR(slice)),
buf_size);
grpc_gcp_HandshakerReq* resp = grpc_gcp_HandshakerReq_parse(
reinterpret_cast<char*>(buf), buf_size, arena);
if (!resp) {
gpr_log(GPR_ERROR, "grpc_gcp_HandshakerReq decode error");
return nullptr;
}
pb_ostream_t size_stream;
memset(&size_stream, 0, sizeof(pb_ostream_t));
if (!pb_encode(&size_stream, grpc_gcp_HandshakerResp_fields, resp)) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&size_stream));
return false;
}
size_t encoded_length = size_stream.bytes_written;
*slice = grpc_slice_malloc(encoded_length);
pb_ostream_t output_stream =
pb_ostream_from_buffer(GRPC_SLICE_START_PTR(*slice), encoded_length);
if (!pb_encode(&output_stream, grpc_gcp_HandshakerResp_fields, resp)) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&size_stream));
return false;
}
return true;
}
bool grpc_gcp_handshaker_req_decode(grpc_slice slice,
grpc_gcp_handshaker_req* req) {
if (req == nullptr) {
gpr_log(GPR_ERROR,
"Invalid nullptr argument to grpc_gcp_handshaker_req_decode().");
return false;
}
pb_istream_t stream = pb_istream_from_buffer(GRPC_SLICE_START_PTR(slice),
GRPC_SLICE_LENGTH(slice));
req->next.in_bytes.funcs.decode = decode_string_or_bytes_cb;
if (!pb_decode(&stream, grpc_gcp_HandshakerReq_fields, req)) {
gpr_log(GPR_ERROR, "nanopb error: %s", PB_GET_ERROR(&stream));
return false;
}
return true;
}
/* Check equality of a pair of grpc_slice fields. */
static bool slice_equals(grpc_slice* l_slice, grpc_slice* r_slice) {
if (l_slice == nullptr && r_slice == nullptr) {
return true;
}
if (l_slice != nullptr && r_slice != nullptr) {
return grpc_slice_eq(*l_slice, *r_slice);
}
return false;
return resp;
}
/* Check equality of a pair of grpc_gcp_identity fields. */
static bool handshaker_identity_equals(const grpc_gcp_identity* l_id,
const grpc_gcp_identity* r_id) {
if (!((l_id->hostname.arg != nullptr) != (r_id->hostname.arg != nullptr))) {
if (l_id->hostname.arg != nullptr) {
return slice_equals(static_cast<grpc_slice*>(l_id->hostname.arg),
static_cast<grpc_slice*>(r_id->hostname.arg));
}
} else {
return false;
}
if (!((l_id->service_account.arg != nullptr) !=
(r_id->service_account.arg != nullptr))) {
if (l_id->service_account.arg != nullptr) {
return slice_equals(static_cast<grpc_slice*>(l_id->service_account.arg),
static_cast<grpc_slice*>(r_id->service_account.arg));
}
} else {
static bool handshaker_identity_equals(const grpc_gcp_Identity* l_id,
const grpc_gcp_Identity* r_id) {
if ((grpc_gcp_Identity_has_service_account(l_id) !=
grpc_gcp_Identity_has_service_account(r_id)) ||
(grpc_gcp_Identity_has_hostname(l_id) !=
grpc_gcp_Identity_has_hostname(r_id))) {
return false;
}
return true;
}
static bool handshaker_rpc_versions_equals(
const grpc_gcp_rpc_protocol_versions* l_version,
const grpc_gcp_rpc_protocol_versions* r_version) {
bool result = true;
result &=
(l_version->max_rpc_version.major == r_version->max_rpc_version.major);
result &=
(l_version->max_rpc_version.minor == r_version->max_rpc_version.minor);
result &=
(l_version->min_rpc_version.major == r_version->min_rpc_version.major);
result &=
(l_version->min_rpc_version.minor == r_version->min_rpc_version.minor);
return result;
}
/* Check equality of a pair of grpc_gcp_endpoint fields. */
static bool handshaker_endpoint_equals(const grpc_gcp_endpoint* l_end,
const grpc_gcp_endpoint* r_end) {
bool result = true;
result &= (l_end->port == r_end->port);
result &= (l_end->protocol == r_end->protocol);
if (!((l_end->ip_address.arg != nullptr) !=
(r_end->ip_address.arg != nullptr))) {
if (l_end->ip_address.arg != nullptr) {
result &= slice_equals(static_cast<grpc_slice*>(l_end->ip_address.arg),
static_cast<grpc_slice*>(r_end->ip_address.arg));
}
} else {
return false;
}
return result;
}
/**
* Check if a specific repeated field (i.e., target) is contained in a repeated
* field list (i.e., head).
*/
static bool repeated_field_list_contains_identity(
const repeated_field* head, const repeated_field* target) {
repeated_field* field = const_cast<repeated_field*>(head);
while (field != nullptr) {
if (handshaker_identity_equals(
static_cast<const grpc_gcp_identity*>(field->data),
static_cast<const grpc_gcp_identity*>(target->data))) {
return true;
}
field = field->next;
}
return false;
}
static bool repeated_field_list_contains_string(const repeated_field* head,
const repeated_field* target) {
repeated_field* field = const_cast<repeated_field*>(head);
while (field != nullptr) {
if (slice_equals((grpc_slice*)field->data, (grpc_slice*)target->data)) {
return true;
}
field = field->next;
}
return false;
}
/* Return a length of repeated field list. */
static size_t repeated_field_list_get_length(const repeated_field* head) {
repeated_field* field = const_cast<repeated_field*>(head);
size_t len = 0;
while (field != nullptr) {
len++;
field = field->next;
}
return len;
}
/**
* Check if a pair of repeated field lists contain the same set of repeated
* fields.
*/
static bool repeated_field_list_equals_identity(const repeated_field* l_head,
const repeated_field* r_head) {
if (repeated_field_list_get_length(l_head) !=
repeated_field_list_get_length(r_head)) {
return false;
}
repeated_field* field = const_cast<repeated_field*>(l_head);
repeated_field* head = const_cast<repeated_field*>(r_head);
while (field != nullptr) {
if (!repeated_field_list_contains_identity(head, field)) {
if (grpc_gcp_Identity_has_service_account(l_id)) {
if (!upb_strview_eql(grpc_gcp_Identity_service_account(l_id),
grpc_gcp_Identity_service_account(r_id))) {
return false;
}
field = field->next;
}
return true;
}
static bool repeated_field_list_equals_string(const repeated_field* l_head,
const repeated_field* r_head) {
if (repeated_field_list_get_length(l_head) !=
repeated_field_list_get_length(r_head)) {
return false;
}
repeated_field* field = const_cast<repeated_field*>(l_head);
repeated_field* head = const_cast<repeated_field*>(r_head);
while (field != nullptr) {
if (!repeated_field_list_contains_string(head, field)) {
} else if (grpc_gcp_Identity_has_hostname(l_id)) {
if (!upb_strview_eql(grpc_gcp_Identity_hostname(l_id),
grpc_gcp_Identity_hostname(r_id))) {
return false;
}
field = field->next;
}
return true;
}
/* Check equality of a pair of ALTS client_start handshake requests. */
bool grpc_gcp_handshaker_client_start_req_equals(
grpc_gcp_start_client_handshake_req* l_req,
grpc_gcp_start_client_handshake_req* r_req) {
bool result = true;
/* Compare handshake_security_protocol. */
result &=
l_req->handshake_security_protocol == r_req->handshake_security_protocol;
/* Compare application_protocols, record_protocols, and target_identities. */
result &= repeated_field_list_equals_string(
static_cast<const repeated_field*>(l_req->application_protocols.arg),
static_cast<const repeated_field*>(r_req->application_protocols.arg));
result &= repeated_field_list_equals_string(
static_cast<const repeated_field*>(l_req->record_protocols.arg),
static_cast<const repeated_field*>(r_req->record_protocols.arg));
result &= repeated_field_list_equals_identity(
static_cast<const repeated_field*>(l_req->target_identities.arg),
static_cast<const repeated_field*>(r_req->target_identities.arg));
if ((l_req->has_local_identity ^ r_req->has_local_identity) |
(l_req->has_local_endpoint ^ r_req->has_local_endpoint) |
((l_req->has_remote_endpoint ^ r_req->has_remote_endpoint)) |
(l_req->has_rpc_versions ^ r_req->has_rpc_versions)) {
return false;
}
/* Compare local_identity, local_endpoint, and remote_endpoint. */
if (l_req->has_local_identity) {
result &= handshaker_identity_equals(&l_req->local_identity,
&r_req->local_identity);
}
if (l_req->has_local_endpoint) {
result &= handshaker_endpoint_equals(&l_req->local_endpoint,
&r_req->local_endpoint);
}
if (l_req->has_remote_endpoint) {
result &= handshaker_endpoint_equals(&l_req->remote_endpoint,
&r_req->remote_endpoint);
}
if (l_req->has_rpc_versions) {
result &= handshaker_rpc_versions_equals(&l_req->rpc_versions,
&r_req->rpc_versions);
}
return result;
}
/* Check equality of a pair of ALTS server_start handshake requests. */
bool grpc_gcp_handshaker_server_start_req_equals(
grpc_gcp_start_server_handshake_req* l_req,
grpc_gcp_start_server_handshake_req* r_req) {
bool result = true;
/* Compare application_protocols. */
result &= repeated_field_list_equals_string(
static_cast<const repeated_field*>(l_req->application_protocols.arg),
static_cast<const repeated_field*>(r_req->application_protocols.arg));
/* Compare handshake_parameters. */
size_t i = 0, j = 0;
result &=
(l_req->handshake_parameters_count == r_req->handshake_parameters_count);
for (i = 0; i < l_req->handshake_parameters_count; i++) {
bool found = false;
for (j = 0; j < r_req->handshake_parameters_count; j++) {
if (l_req->handshake_parameters[i].key ==
r_req->handshake_parameters[j].key) {
found = true;
result &= repeated_field_list_equals_string(
static_cast<const repeated_field*>(
l_req->handshake_parameters[i].value.record_protocols.arg),
static_cast<const repeated_field*>(
r_req->handshake_parameters[j].value.record_protocols.arg));
result &= repeated_field_list_equals_identity(
static_cast<const repeated_field*>(
l_req->handshake_parameters[i].value.local_identities.arg),
static_cast<const repeated_field*>(
r_req->handshake_parameters[j].value.local_identities.arg));
}
}
if (!found) {
return false;
}
}
/* Compare in_bytes, local_endpoint, remote_endpoint. */
result &= slice_equals(static_cast<grpc_slice*>(l_req->in_bytes.arg),
static_cast<grpc_slice*>(r_req->in_bytes.arg));
if ((l_req->has_local_endpoint ^ r_req->has_local_endpoint) |
(l_req->has_remote_endpoint ^ r_req->has_remote_endpoint) |
(l_req->has_rpc_versions ^ r_req->has_rpc_versions))
return false;
if (l_req->has_local_endpoint) {
result &= handshaker_endpoint_equals(&l_req->local_endpoint,
&r_req->local_endpoint);
}
if (l_req->has_remote_endpoint) {
result &= handshaker_endpoint_equals(&l_req->remote_endpoint,
&r_req->remote_endpoint);
}
if (l_req->has_rpc_versions) {
result &= handshaker_rpc_versions_equals(&l_req->rpc_versions,
&r_req->rpc_versions);
}
return result;
}
/* Check equality of a pair of ALTS handshake requests. */
bool grpc_gcp_handshaker_req_equals(grpc_gcp_handshaker_req* l_req,
grpc_gcp_handshaker_req* r_req) {
if (l_req->has_next && r_req->has_next) {
return slice_equals(static_cast<grpc_slice*>(l_req->next.in_bytes.arg),
static_cast<grpc_slice*>(r_req->next.in_bytes.arg));
} else if (l_req->has_client_start && r_req->has_client_start) {
return grpc_gcp_handshaker_client_start_req_equals(&l_req->client_start,
&r_req->client_start);
} else if (l_req->has_server_start && r_req->has_server_start) {
return grpc_gcp_handshaker_server_start_req_equals(&l_req->server_start,
&r_req->server_start);
}
return false;
}
/* Check equality of a pair of ALTS handshake results. */
bool grpc_gcp_handshaker_resp_result_equals(
grpc_gcp_handshaker_result* l_result,
grpc_gcp_handshaker_result* r_result) {
bool result = true;
/* Compare application_protocol, record_protocol, and key_data. */
result &= slice_equals(
static_cast<grpc_slice*>(l_result->application_protocol.arg),
static_cast<grpc_slice*>(r_result->application_protocol.arg));
result &=
slice_equals(static_cast<grpc_slice*>(l_result->record_protocol.arg),
static_cast<grpc_slice*>(r_result->record_protocol.arg));
result &= slice_equals(static_cast<grpc_slice*>(l_result->key_data.arg),
static_cast<grpc_slice*>(r_result->key_data.arg));
/* Compare local_identity, peer_identity, and keep_channel_open. */
if ((l_result->has_local_identity ^ r_result->has_local_identity) |
(l_result->has_peer_identity ^ r_result->has_peer_identity) |
(l_result->has_peer_rpc_versions ^ r_result->has_peer_rpc_versions)) {
return false;
}
if (l_result->has_local_identity) {
result &= handshaker_identity_equals(&l_result->local_identity,
&r_result->local_identity);
}
if (l_result->has_peer_identity) {
result &= handshaker_identity_equals(&l_result->peer_identity,
&r_result->peer_identity);
}
if (l_result->has_peer_rpc_versions) {
result &= handshaker_rpc_versions_equals(&l_result->peer_rpc_versions,
&r_result->peer_rpc_versions);
}
result &= (l_result->keep_channel_open == r_result->keep_channel_open);
return result;
static bool handshaker_rpc_versions_equals(
const grpc_gcp_RpcProtocolVersions* l_version,
const grpc_gcp_RpcProtocolVersions* r_version) {
const grpc_gcp_RpcProtocolVersions_Version* l_maxver =
grpc_gcp_RpcProtocolVersions_max_rpc_version(l_version);
const grpc_gcp_RpcProtocolVersions_Version* r_maxver =
grpc_gcp_RpcProtocolVersions_max_rpc_version(r_version);
const grpc_gcp_RpcProtocolVersions_Version* l_minver =
grpc_gcp_RpcProtocolVersions_min_rpc_version(l_version);
const grpc_gcp_RpcProtocolVersions_Version* r_minver =
grpc_gcp_RpcProtocolVersions_min_rpc_version(r_version);
return (grpc_gcp_RpcProtocolVersions_Version_major(l_maxver) ==
grpc_gcp_RpcProtocolVersions_Version_major(r_maxver)) &&
(grpc_gcp_RpcProtocolVersions_Version_minor(l_maxver) ==
grpc_gcp_RpcProtocolVersions_Version_minor(r_maxver)) &&
(grpc_gcp_RpcProtocolVersions_Version_major(l_minver) ==
grpc_gcp_RpcProtocolVersions_Version_major(r_minver)) &&
(grpc_gcp_RpcProtocolVersions_Version_minor(l_minver) ==
grpc_gcp_RpcProtocolVersions_Version_minor(r_minver));
}
/* Check equality of a pair of ALTS handshake responses. */
bool grpc_gcp_handshaker_resp_equals(grpc_gcp_handshaker_resp* l_resp,
grpc_gcp_handshaker_resp* r_resp) {
bool result = true;
/* Compare out_frames and bytes_consumed. */
result &= slice_equals(static_cast<grpc_slice*>(l_resp->out_frames.arg),
static_cast<grpc_slice*>(r_resp->out_frames.arg));
result &= (l_resp->bytes_consumed == r_resp->bytes_consumed);
/* Compare result and status. */
if ((l_resp->has_result ^ r_resp->has_result) |
(l_resp->has_status ^ r_resp->has_status)) {
bool grpc_gcp_handshaker_resp_equals(const grpc_gcp_HandshakerResp* l_resp,
const grpc_gcp_HandshakerResp* r_resp) {
return upb_strview_eql(grpc_gcp_HandshakerResp_out_frames(l_resp),
grpc_gcp_HandshakerResp_out_frames(r_resp)) &&
(grpc_gcp_HandshakerResp_bytes_consumed(l_resp) ==
grpc_gcp_HandshakerResp_bytes_consumed(l_resp)) &&
grpc_gcp_handshaker_resp_result_equals(
grpc_gcp_HandshakerResp_result(l_resp),
grpc_gcp_HandshakerResp_result(r_resp)) &&
grpc_gcp_handshaker_resp_status_equals(
grpc_gcp_HandshakerResp_status(l_resp),
grpc_gcp_HandshakerResp_status(r_resp));
}
/* This method checks equality of two handshaker response results. */
bool grpc_gcp_handshaker_resp_result_equals(
const grpc_gcp_HandshakerResult* l_result,
const grpc_gcp_HandshakerResult* r_result) {
if (l_result == nullptr && r_result == nullptr) {
return true;
} else if ((l_result != nullptr && r_result == nullptr) ||
(l_result == nullptr && r_result != nullptr)) {
return false;
}
return upb_strview_eql(
grpc_gcp_HandshakerResult_application_protocol(l_result),
grpc_gcp_HandshakerResult_application_protocol(r_result)) &&
upb_strview_eql(grpc_gcp_HandshakerResult_record_protocol(l_result),
grpc_gcp_HandshakerResult_record_protocol(r_result)) &&
upb_strview_eql(grpc_gcp_HandshakerResult_key_data(l_result),
grpc_gcp_HandshakerResult_key_data(r_result)) &&
handshaker_identity_equals(
grpc_gcp_HandshakerResult_peer_identity(l_result),
grpc_gcp_HandshakerResult_peer_identity(r_result)) &&
handshaker_identity_equals(
grpc_gcp_HandshakerResult_local_identity(l_result),
grpc_gcp_HandshakerResult_local_identity(r_result)) &&
(grpc_gcp_HandshakerResult_keep_channel_open(l_result) ==
grpc_gcp_HandshakerResult_keep_channel_open(r_result)) &&
handshaker_rpc_versions_equals(
grpc_gcp_HandshakerResult_peer_rpc_versions(l_result),
grpc_gcp_HandshakerResult_peer_rpc_versions(r_result));
}
/* This method checks equality of two handshaker response statuses. */
bool grpc_gcp_handshaker_resp_status_equals(
const grpc_gcp_HandshakerStatus* l_status,
const grpc_gcp_HandshakerStatus* r_status) {
if (l_status == nullptr && r_status == nullptr) {
return true;
} else if ((l_status != nullptr && r_status == nullptr) ||
(l_status == nullptr && r_status != nullptr)) {
return false;
}
if (l_resp->has_result) {
result &= grpc_gcp_handshaker_resp_result_equals(&l_resp->result,
&r_resp->result);
}
if (l_resp->has_status) {
result &= (l_resp->status.code == r_resp->status.code);
result &=
slice_equals(static_cast<grpc_slice*>(l_resp->status.details.arg),
static_cast<grpc_slice*>(r_resp->status.details.arg));
}
return result;
return (grpc_gcp_HandshakerStatus_code(l_status) ==
grpc_gcp_HandshakerStatus_code(r_status)) &&
upb_strview_eql(grpc_gcp_HandshakerStatus_details(l_status),
grpc_gcp_HandshakerStatus_details(r_status));
}

@ -19,9 +19,8 @@
#ifndef GRPC_TEST_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_TEST_LIB_H
#define GRPC_TEST_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_TEST_LIB_H
#include "src/core/tsi/alts/handshaker/alts_handshaker_service_api.h"
#include "src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h"
#include "src/core/tsi/alts/handshaker/transport_security_common_api.h"
#include "src/proto/grpc/gcp/handshaker.upb.h"
/**
* The first part of this file contains function signatures for de-serializing
@ -30,114 +29,27 @@
* service.
*/
/**
* This method creates a ALTS handshaker request that is used to hold
* de-serialized result.
*/
grpc_gcp_handshaker_req* grpc_gcp_handshaker_decoded_req_create(
grpc_gcp_handshaker_req_type type);
/* This method de-serializes a ALTS handshaker request. */
bool grpc_gcp_handshaker_req_decode(grpc_slice slice,
grpc_gcp_handshaker_req* req);
/* This method serializes a ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_encode(grpc_gcp_handshaker_resp* resp,
grpc_slice* slice);
/* This method sets application protocol of ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_application_protocol(
grpc_gcp_handshaker_resp* resp, const char* application_protocol);
/* This method sets record protocol of ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_record_protocol(
grpc_gcp_handshaker_resp* resp, const char* record_protocol);
/* This method sets key_data of ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_key_data(grpc_gcp_handshaker_resp* resp,
const char* key_data, size_t size);
/* This method sets local identity's hostname for ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_local_identity_hostname(
grpc_gcp_handshaker_resp* resp, const char* hostname);
/**
* This method sets local identity's service account for ALTS handshaker
* response.
*/
bool grpc_gcp_handshaker_resp_set_local_identity_service_account(
grpc_gcp_handshaker_resp* resp, const char* service_account);
/* This method sets peer identity's hostname for ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_peer_identity_hostname(
grpc_gcp_handshaker_resp* resp, const char* hostname);
/**
* This method sets peer identity's service account for ALTS handshaker
* response.
*/
bool grpc_gcp_handshaker_resp_set_peer_identity_service_account(
grpc_gcp_handshaker_resp* resp, const char* service_account);
/* This method sets keep_channel_open for ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_channel_open(grpc_gcp_handshaker_resp* resp,
bool keep_channel_open);
/* This method sets code for ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_code(grpc_gcp_handshaker_resp* resp,
uint32_t code);
/* This method sets details for ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_details(grpc_gcp_handshaker_resp* resp,
const char* details);
/* This method sets out_frames for ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_out_frames(grpc_gcp_handshaker_resp* resp,
const char* out_frames,
size_t size);
/* This method sets peer_rpc_versions for ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_peer_rpc_versions(
grpc_gcp_handshaker_resp* resp, uint32_t max_major, uint32_t max_minor,
uint32_t min_major, uint32_t min_minor);
/* This method sets bytes_consumed for ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_set_bytes_consumed(grpc_gcp_handshaker_resp* resp,
int32_t bytes_consumed);
/* This method serializes ALTS handshaker response. */
bool grpc_gcp_handshaker_resp_encode(grpc_gcp_handshaker_resp* resp,
grpc_slice* slice);
grpc_gcp_HandshakerResp* resp, upb_arena* arena, uint32_t max_major,
uint32_t max_minor, uint32_t min_major, uint32_t min_minor);
/* This method de-serializes ALTS handshaker request. */
bool grpc_gcp_handshaker_req_decode(grpc_slice slice,
grpc_gcp_handshaker_req* req);
grpc_gcp_HandshakerReq* grpc_gcp_handshaker_req_decode(grpc_slice slice,
upb_arena* arena);
/**
* The second part contains function signatures for checking equality of a pair
* of ALTS handshake requests/responses.
*/
/* This method checks equality of two client_start handshaker requests. */
bool grpc_gcp_handshaker_client_start_req_equals(
grpc_gcp_start_client_handshake_req* l_req,
grpc_gcp_start_client_handshake_req* r_req);
/* This method checks equality of two server_start handshaker requests. */
bool grpc_gcp_handshaker_server_start_req_equals(
grpc_gcp_start_server_handshake_req* l_req,
grpc_gcp_start_server_handshake_req* r_req);
/* This method checks equality of two ALTS handshaker requests. */
bool grpc_gcp_handshaker_req_equals(grpc_gcp_handshaker_req* l_req,
grpc_gcp_handshaker_req* r_req);
/* This method checks equality of two ALTS handshaker responses. */
bool grpc_gcp_handshaker_resp_equals(const grpc_gcp_HandshakerResp* l_resp,
const grpc_gcp_HandshakerResp* r_resp);
/* This method checks equality of two handshaker response results. */
bool grpc_gcp_handshaker_resp_result_equals(
grpc_gcp_handshaker_result* l_result, grpc_gcp_handshaker_result* r_result);
const grpc_gcp_HandshakerResult* l_result,
const grpc_gcp_HandshakerResult* r_result);
/* This method checks equality of two ALTS handshaker responses. */
bool grpc_gcp_handshaker_resp_equals(grpc_gcp_handshaker_resp* l_resp,
grpc_gcp_handshaker_resp* r_resp);
/* This method checks equality of two handshaker response statuses. */
bool grpc_gcp_handshaker_resp_status_equals(
const grpc_gcp_HandshakerStatus* l_status,
const grpc_gcp_HandshakerStatus* r_status);
#endif // GRPC_TEST_CORE_TSI_ALTS_HANDSHAKER_ALTS_HANDSHAKER_SERVICE_API_TEST_LIB_H

@ -110,55 +110,64 @@ static void wait(notification* n) {
*/
static grpc_byte_buffer* generate_handshaker_response(
alts_handshaker_response_type type) {
grpc_gcp_handshaker_resp* resp = grpc_gcp_handshaker_resp_create();
GPR_ASSERT(grpc_gcp_handshaker_resp_set_code(resp, 0));
upb::Arena arena;
grpc_gcp_HandshakerResult* result;
grpc_gcp_Identity* peer_identity;
grpc_gcp_HandshakerResp* resp = grpc_gcp_HandshakerResp_new(arena.ptr());
grpc_gcp_HandshakerStatus* status =
grpc_gcp_HandshakerResp_mutable_status(resp, arena.ptr());
grpc_gcp_HandshakerStatus_set_code(status, 0);
switch (type) {
case INVALID:
break;
case CLIENT_START:
case SERVER_START:
GPR_ASSERT(grpc_gcp_handshaker_resp_set_out_frames(
resp, ALTS_TSI_HANDSHAKER_TEST_OUT_FRAME,
strlen(ALTS_TSI_HANDSHAKER_TEST_OUT_FRAME)));
grpc_gcp_HandshakerResp_set_out_frames(
resp, upb_strview_makez(ALTS_TSI_HANDSHAKER_TEST_OUT_FRAME));
break;
case CLIENT_NEXT:
GPR_ASSERT(grpc_gcp_handshaker_resp_set_out_frames(
resp, ALTS_TSI_HANDSHAKER_TEST_OUT_FRAME,
strlen(ALTS_TSI_HANDSHAKER_TEST_OUT_FRAME)));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_peer_identity_service_account(
resp, ALTS_TSI_HANDSHAKER_TEST_PEER_IDENTITY));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_bytes_consumed(
resp, strlen(ALTS_TSI_HANDSHAKER_TEST_CONSUMED_BYTES)));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_key_data(
resp, ALTS_TSI_HANDSHAKER_TEST_KEY_DATA,
strlen(ALTS_TSI_HANDSHAKER_TEST_KEY_DATA)));
grpc_gcp_HandshakerResp_set_out_frames(
resp, upb_strview_makez(ALTS_TSI_HANDSHAKER_TEST_OUT_FRAME));
grpc_gcp_HandshakerResp_set_bytes_consumed(
resp, strlen(ALTS_TSI_HANDSHAKER_TEST_CONSUMED_BYTES));
result = grpc_gcp_HandshakerResp_mutable_result(resp, arena.ptr());
peer_identity =
grpc_gcp_HandshakerResult_mutable_peer_identity(result, arena.ptr());
grpc_gcp_Identity_set_service_account(
peer_identity,
upb_strview_makez(ALTS_TSI_HANDSHAKER_TEST_PEER_IDENTITY));
grpc_gcp_HandshakerResult_set_key_data(
result, upb_strview_makez(ALTS_TSI_HANDSHAKER_TEST_KEY_DATA));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_peer_rpc_versions(
resp, ALTS_TSI_HANDSHAKER_TEST_MAX_RPC_VERSION_MAJOR,
resp, arena.ptr(), ALTS_TSI_HANDSHAKER_TEST_MAX_RPC_VERSION_MAJOR,
ALTS_TSI_HANDSHAKER_TEST_MAX_RPC_VERSION_MINOR,
ALTS_TSI_HANDSHAKER_TEST_MIN_RPC_VERSION_MAJOR,
ALTS_TSI_HANDSHAKER_TEST_MIN_RPC_VERSION_MINOR));
break;
case SERVER_NEXT:
GPR_ASSERT(grpc_gcp_handshaker_resp_set_peer_identity_service_account(
resp, ALTS_TSI_HANDSHAKER_TEST_PEER_IDENTITY));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_bytes_consumed(
resp, strlen(ALTS_TSI_HANDSHAKER_TEST_OUT_FRAME)));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_key_data(
resp, ALTS_TSI_HANDSHAKER_TEST_KEY_DATA,
strlen(ALTS_TSI_HANDSHAKER_TEST_KEY_DATA)));
grpc_gcp_HandshakerResp_set_bytes_consumed(
resp, strlen(ALTS_TSI_HANDSHAKER_TEST_OUT_FRAME));
result = grpc_gcp_HandshakerResp_mutable_result(resp, arena.ptr());
peer_identity =
grpc_gcp_HandshakerResult_mutable_peer_identity(result, arena.ptr());
grpc_gcp_Identity_set_service_account(
peer_identity,
upb_strview_makez(ALTS_TSI_HANDSHAKER_TEST_PEER_IDENTITY));
grpc_gcp_HandshakerResult_set_key_data(
result, upb_strview_makez(ALTS_TSI_HANDSHAKER_TEST_KEY_DATA));
GPR_ASSERT(grpc_gcp_handshaker_resp_set_peer_rpc_versions(
resp, ALTS_TSI_HANDSHAKER_TEST_MAX_RPC_VERSION_MAJOR,
resp, arena.ptr(), ALTS_TSI_HANDSHAKER_TEST_MAX_RPC_VERSION_MAJOR,
ALTS_TSI_HANDSHAKER_TEST_MAX_RPC_VERSION_MINOR,
ALTS_TSI_HANDSHAKER_TEST_MIN_RPC_VERSION_MAJOR,
ALTS_TSI_HANDSHAKER_TEST_MIN_RPC_VERSION_MINOR));
break;
case FAILED:
GPR_ASSERT(
grpc_gcp_handshaker_resp_set_code(resp, 3 /* INVALID ARGUMENT */));
grpc_gcp_HandshakerStatus_set_code(status, 3 /* INVALID ARGUMENT */);
break;
}
grpc_slice slice;
GPR_ASSERT(grpc_gcp_handshaker_resp_encode(resp, &slice));
size_t buf_len;
char* buf = grpc_gcp_HandshakerResp_serialize(resp, arena.ptr(), &buf_len);
grpc_slice slice = gpr_slice_from_copied_buffer(buf, buf_len);
if (type == INVALID) {
grpc_slice bad_slice =
grpc_slice_split_head(&slice, GRPC_SLICE_LENGTH(slice) - 1);
@ -169,7 +178,6 @@ static grpc_byte_buffer* generate_handshaker_response(
grpc_byte_buffer* buffer =
grpc_raw_byte_buffer_create(&slice, 1 /* number of slices */);
grpc_slice_unref(slice);
grpc_gcp_handshaker_resp_destroy(resp);
return buffer;
}

@ -36,18 +36,20 @@ static void convert_to_tsi_result_test() {
}
static void deserialize_response_test() {
grpc_gcp_handshaker_resp* resp = grpc_gcp_handshaker_resp_create();
GPR_ASSERT(grpc_gcp_handshaker_resp_set_out_frames(
resp, ALTS_TSI_UTILS_TEST_OUT_FRAME,
strlen(ALTS_TSI_UTILS_TEST_OUT_FRAME)));
grpc_slice slice;
GPR_ASSERT(grpc_gcp_handshaker_resp_encode(resp, &slice));
upb::Arena arena;
grpc_gcp_HandshakerResp* resp = grpc_gcp_HandshakerResp_new(arena.ptr());
grpc_gcp_HandshakerResp_set_out_frames(
resp, upb_strview_makez(ALTS_TSI_UTILS_TEST_OUT_FRAME));
size_t buf_len;
char* buf = grpc_gcp_HandshakerResp_serialize(resp, arena.ptr(), &buf_len);
grpc_slice slice = grpc_slice_from_copied_buffer(buf, buf_len);
/* Valid serialization. */
upb::Arena arena2;
grpc_byte_buffer* buffer =
grpc_raw_byte_buffer_create(&slice, 1 /* number of slices */);
grpc_gcp_handshaker_resp* decoded_resp =
alts_tsi_utils_deserialize_response(buffer);
grpc_gcp_HandshakerResp* decoded_resp =
alts_tsi_utils_deserialize_response(buffer, arena2.ptr());
GPR_ASSERT(grpc_gcp_handshaker_resp_equals(resp, decoded_resp));
grpc_byte_buffer_destroy(buffer);
@ -55,14 +57,13 @@ static void deserialize_response_test() {
grpc_slice bad_slice =
grpc_slice_split_head(&slice, GRPC_SLICE_LENGTH(slice) - 1);
buffer = grpc_raw_byte_buffer_create(&bad_slice, 1 /* number of slices */);
GPR_ASSERT(alts_tsi_utils_deserialize_response(buffer) == nullptr);
GPR_ASSERT(alts_tsi_utils_deserialize_response(buffer, arena2.ptr()) ==
nullptr);
/* Clean up. */
grpc_slice_unref(slice);
grpc_slice_unref(bad_slice);
grpc_byte_buffer_destroy(buffer);
grpc_gcp_handshaker_resp_destroy(resp);
grpc_gcp_handshaker_resp_destroy(decoded_resp);
}
int main(int argc, char** argv) {

@ -31,25 +31,17 @@ static bool grpc_gcp_rpc_protocol_versions_equal(
grpc_gcp_rpc_protocol_versions* l_versions,
grpc_gcp_rpc_protocol_versions* r_versions) {
GPR_ASSERT(l_versions != nullptr && r_versions != nullptr);
if ((l_versions->has_max_rpc_version ^ r_versions->has_max_rpc_version) |
(l_versions->has_min_rpc_version ^ r_versions->has_min_rpc_version)) {
if ((l_versions->max_rpc_version.major !=
r_versions->max_rpc_version.major) ||
(l_versions->max_rpc_version.minor !=
r_versions->max_rpc_version.minor)) {
return false;
}
if (l_versions->has_max_rpc_version) {
if ((l_versions->max_rpc_version.major !=
r_versions->max_rpc_version.major) ||
(l_versions->max_rpc_version.minor !=
r_versions->max_rpc_version.minor)) {
return false;
}
}
if (l_versions->has_min_rpc_version) {
if ((l_versions->min_rpc_version.major !=
r_versions->min_rpc_version.major) ||
(l_versions->min_rpc_version.minor !=
r_versions->min_rpc_version.minor)) {
return false;
}
if ((l_versions->min_rpc_version.major !=
r_versions->min_rpc_version.major) ||
(l_versions->min_rpc_version.minor !=
r_versions->min_rpc_version.minor)) {
return false;
}
return true;
}
@ -61,25 +53,14 @@ static void test_success() {
&version, kMaxRpcVersionMajor, kMaxRpcVersionMinor));
GPR_ASSERT(grpc_gcp_rpc_protocol_versions_set_min(
&version, kMinRpcVersionMajor, kMinRpcVersionMinor));
/* Serializes to raw bytes. */
size_t encoded_length =
grpc_gcp_rpc_protocol_versions_encode_length(&version);
uint8_t* encoded_bytes = static_cast<uint8_t*>(gpr_malloc(encoded_length));
GPR_ASSERT(grpc_gcp_rpc_protocol_versions_encode_to_raw_bytes(
&version, encoded_bytes, encoded_length));
grpc_slice encoded_slice;
/* Serializes to grpc slice. */
grpc_slice encoded_slice;
GPR_ASSERT(grpc_gcp_rpc_protocol_versions_encode(&version, &encoded_slice));
/* Checks serialized raw bytes and serialized grpc slice have same content. */
GPR_ASSERT(encoded_length == GRPC_SLICE_LENGTH(encoded_slice));
GPR_ASSERT(memcmp(encoded_bytes, GRPC_SLICE_START_PTR(encoded_slice),
encoded_length) == 0);
/* Deserializes and compares with the original version. */
GPR_ASSERT(
grpc_gcp_rpc_protocol_versions_decode(encoded_slice, &decoded_version));
GPR_ASSERT(grpc_gcp_rpc_protocol_versions_equal(&version, &decoded_version));
grpc_slice_unref(encoded_slice);
gpr_free(encoded_bytes);
}
static void test_failure() {
@ -90,24 +71,14 @@ static void test_failure() {
nullptr, kMaxRpcVersionMajor, kMaxRpcVersionMinor));
GPR_ASSERT(!grpc_gcp_rpc_protocol_versions_set_min(
nullptr, kMinRpcVersionMajor, kMinRpcVersionMinor));
GPR_ASSERT(grpc_gcp_rpc_protocol_versions_encode_length(nullptr) == 0);
GPR_ASSERT(grpc_gcp_rpc_protocol_versions_set_max(
&version, kMaxRpcVersionMajor, kMaxRpcVersionMinor));
GPR_ASSERT(grpc_gcp_rpc_protocol_versions_set_min(
&version, kMinRpcVersionMajor, kMinRpcVersionMinor));
size_t encoded_length =
grpc_gcp_rpc_protocol_versions_encode_length(&version);
uint8_t* encoded_bytes = static_cast<uint8_t*>(gpr_malloc(encoded_length));
GPR_ASSERT(!grpc_gcp_rpc_protocol_versions_encode_to_raw_bytes(
nullptr, encoded_bytes, encoded_length));
GPR_ASSERT(!grpc_gcp_rpc_protocol_versions_encode_to_raw_bytes(
&version, nullptr, encoded_length));
GPR_ASSERT(!grpc_gcp_rpc_protocol_versions_encode_to_raw_bytes(
&version, encoded_bytes, 0));
GPR_ASSERT(!grpc_gcp_rpc_protocol_versions_encode(nullptr, &encoded_slice));
GPR_ASSERT(!grpc_gcp_rpc_protocol_versions_encode(&version, nullptr));
GPR_ASSERT(!grpc_gcp_rpc_protocol_versions_decode(encoded_slice, nullptr));
/* Test for nanopb decode. */
/* Test for upb decode. */
GPR_ASSERT(grpc_gcp_rpc_protocol_versions_encode(&version, &encoded_slice));
grpc_slice bad_slice = grpc_slice_split_head(
&encoded_slice, GRPC_SLICE_LENGTH(encoded_slice) - 1);
@ -115,7 +86,6 @@ static void test_failure() {
GPR_ASSERT(
!grpc_gcp_rpc_protocol_versions_decode(bad_slice, &decoded_version));
grpc_slice_unref(bad_slice);
gpr_free(encoded_bytes);
}
static void test_copy() {

@ -15,7 +15,6 @@
set -ex
readonly NANOPB_ALTS_TMP_OUTPUT="$(mktemp -d)"
readonly NANOPB_HEALTH_TMP_OUTPUT="$(mktemp -d)"
readonly NANOPB_TMP_OUTPUT="$(mktemp -d)"
readonly PROTOBUF_INSTALL_PREFIX="$(mktemp -d)"
@ -58,29 +57,3 @@ for NANOPB_OUTPUT_FILE in $NANOPB_HEALTH_TMP_OUTPUT/*.pb.*; do
exit 2
fi
done
#
# Checks for handshaker.proto and transport_security_common.proto
#
readonly HANDSHAKER_GRPC_OUTPUT_PATH='src/core/tsi/alts/handshaker'
# nanopb-compile the proto to a temp location
./tools/codegen/core/gen_nano_proto.sh \
src/core/tsi/alts/handshaker/proto/handshaker.proto \
"$NANOPB_ALTS_TMP_OUTPUT" \
"$HANDSHAKER_GRPC_OUTPUT_PATH"
./tools/codegen/core/gen_nano_proto.sh \
src/core/tsi/alts/handshaker/proto/transport_security_common.proto \
"$NANOPB_ALTS_TMP_OUTPUT" \
"$HANDSHAKER_GRPC_OUTPUT_PATH"
./tools/codegen/core/gen_nano_proto.sh \
src/core/tsi/alts/handshaker/proto/altscontext.proto \
"$NANOPB_ALTS_TMP_OUTPUT" \
"$HANDSHAKER_GRPC_OUTPUT_PATH"
# compare outputs to checked compiled code
for NANOPB_OUTPUT_FILE in $NANOPB_ALTS_TMP_OUTPUT/*.pb.*; do
if ! diff "$NANOPB_OUTPUT_FILE" "src/core/tsi/alts/handshaker/$(basename $NANOPB_OUTPUT_FILE)"; then
echo "Outputs differ: $NANOPB_ALTS_TMP_OUTPUT vs $HANDSHAKER_GRPC_OUTPUT_PATH"
exit 2
fi
done

@ -1116,6 +1116,12 @@ src/core/ext/upb-generated/google/protobuf/wrappers.upb.c \
src/core/ext/upb-generated/google/protobuf/wrappers.upb.h \
src/core/ext/upb-generated/google/rpc/status.upb.c \
src/core/ext/upb-generated/google/rpc/status.upb.h \
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h \
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h \
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c \
src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h \
src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c \
src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h \
src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c \
@ -1598,10 +1604,6 @@ src/core/tsi/alts/frame_protector/frame_handler.cc \
src/core/tsi/alts/frame_protector/frame_handler.h \
src/core/tsi/alts/handshaker/alts_handshaker_client.cc \
src/core/tsi/alts/handshaker/alts_handshaker_client.h \
src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api.h \
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc \
src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h \
src/core/tsi/alts/handshaker/alts_shared_resource.cc \
src/core/tsi/alts/handshaker/alts_shared_resource.h \
src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc \
@ -1609,12 +1611,6 @@ src/core/tsi/alts/handshaker/alts_tsi_handshaker.h \
src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h \
src/core/tsi/alts/handshaker/alts_tsi_utils.cc \
src/core/tsi/alts/handshaker/alts_tsi_utils.h \
src/core/tsi/alts/handshaker/altscontext.pb.c \
src/core/tsi/alts/handshaker/altscontext.pb.h \
src/core/tsi/alts/handshaker/handshaker.pb.c \
src/core/tsi/alts/handshaker/handshaker.pb.h \
src/core/tsi/alts/handshaker/transport_security_common.pb.c \
src/core/tsi/alts/handshaker/transport_security_common.pb.h \
src/core/tsi/alts/handshaker/transport_security_common_api.cc \
src/core/tsi/alts/handshaker/transport_security_common_api.h \
src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc \
@ -1646,13 +1642,6 @@ src/core/tsi/transport_security.h \
src/core/tsi/transport_security_grpc.cc \
src/core/tsi/transport_security_grpc.h \
src/core/tsi/transport_security_interface.h \
third_party/nanopb/pb.h \
third_party/nanopb/pb_common.c \
third_party/nanopb/pb_common.h \
third_party/nanopb/pb_decode.c \
third_party/nanopb/pb_decode.h \
third_party/nanopb/pb_encode.c \
third_party/nanopb/pb_encode.h \
third_party/upb/upb/decode.c \
third_party/upb/upb/decode.h \
third_party/upb/upb/encode.c \

@ -2575,22 +2575,6 @@
"third_party": false,
"type": "target"
},
{
"deps": [
"alts_test_util",
"gpr",
"grpc"
],
"headers": [],
"is_filegroup": false,
"language": "c++",
"name": "alts_handshaker_service_api_test",
"src": [
"test/core/tsi/alts/handshaker/alts_handshaker_service_api_test.cc"
],
"third_party": false,
"type": "target"
},
{
"deps": [
"alts_test_util",
@ -8112,29 +8096,6 @@
"third_party": false,
"type": "lib"
},
{
"deps": [
"nanopb"
],
"headers": [
"src/core/tsi/alts/handshaker/altscontext.pb.h",
"src/core/tsi/alts/handshaker/handshaker.pb.h",
"src/core/tsi/alts/handshaker/transport_security_common.pb.h"
],
"is_filegroup": true,
"language": "c",
"name": "alts_proto",
"src": [
"src/core/tsi/alts/handshaker/altscontext.pb.c",
"src/core/tsi/alts/handshaker/altscontext.pb.h",
"src/core/tsi/alts/handshaker/handshaker.pb.c",
"src/core/tsi/alts/handshaker/handshaker.pb.h",
"src/core/tsi/alts/handshaker/transport_security_common.pb.c",
"src/core/tsi/alts/handshaker/transport_security_common.pb.h"
],
"third_party": false,
"type": "filegroup"
},
{
"deps": [
"alts_util",
@ -8205,7 +8166,9 @@
"type": "filegroup"
},
{
"deps": [],
"deps": [
"upb"
],
"headers": [
"src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h",
"src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h",
@ -8227,10 +8190,9 @@
},
{
"deps": [
"alts_proto",
"alts_upb",
"gpr",
"grpc_base",
"nanopb",
"tsi_interface",
"upb"
],
@ -8238,8 +8200,6 @@
"include/grpc/grpc_security.h",
"src/core/lib/security/credentials/alts/check_gcp_environment.h",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h",
"src/core/tsi/alts/handshaker/alts_tsi_utils.h",
"src/core/tsi/alts/handshaker/transport_security_common_api.h"
],
@ -8257,10 +8217,6 @@
"src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h",
"src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api.h",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc",
"src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h",
"src/core/tsi/alts/handshaker/alts_tsi_utils.cc",
"src/core/tsi/alts/handshaker/alts_tsi_utils.h",
"src/core/tsi/alts/handshaker/transport_security_common_api.cc",
@ -8407,7 +8363,9 @@
"type": "filegroup"
},
{
"deps": [],
"deps": [
"upb"
],
"headers": [
"src/core/ext/upb-generated/google/api/annotations.upb.h",
"src/core/ext/upb-generated/google/api/http.upb.h",
@ -9586,7 +9544,8 @@
},
{
"deps": [
"google_api_upb"
"google_api_upb",
"upb"
],
"headers": [
"src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h"

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

Loading…
Cancel
Save