From ab26472187fa8a0b02b80e67e71c6ffe7a6d9647 Mon Sep 17 00:00:00 2001 From: Wu Qiang Date: Mon, 8 Jan 2018 07:25:51 +0000 Subject: [PATCH] Design document for KMS plugin gRPC API --- .../auth/kms-grpc-class-diagram.png | Bin 0 -> 7708 bytes .../auth/kms-grpc-deployment-diagram.png | Bin 0 -> 20824 bytes .../auth/kms-plugin-grpc-api.md | 114 ++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 contributors/design-proposals/auth/kms-grpc-class-diagram.png create mode 100644 contributors/design-proposals/auth/kms-grpc-deployment-diagram.png create mode 100644 contributors/design-proposals/auth/kms-plugin-grpc-api.md diff --git a/contributors/design-proposals/auth/kms-grpc-class-diagram.png b/contributors/design-proposals/auth/kms-grpc-class-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..fe63d8d03289c46fedbcedd8dfcaceae52739c9b GIT binary patch literal 7708 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 literal 0 HcmV?d00001 diff --git a/contributors/design-proposals/auth/kms-grpc-deployment-diagram.png b/contributors/design-proposals/auth/kms-grpc-deployment-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ff1df554d38da37a73ba0257f8d906dd16b7e2 GIT binary patch literal 20824 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