1*e7b1675dSTing-Kang Chang// Copyright 2020 Google LLC 2*e7b1675dSTing-Kang Chang// 3*e7b1675dSTing-Kang Chang// Licensed under the Apache License, Version 2.0 (the "License"); 4*e7b1675dSTing-Kang Chang// you may not use this file except in compliance with the License. 5*e7b1675dSTing-Kang Chang// You may obtain a copy of the License at 6*e7b1675dSTing-Kang Chang// 7*e7b1675dSTing-Kang Chang// http://www.apache.org/licenses/LICENSE-2.0 8*e7b1675dSTing-Kang Chang// 9*e7b1675dSTing-Kang Chang// Unless required by applicable law or agreed to in writing, software 10*e7b1675dSTing-Kang Chang// distributed under the License is distributed on an "AS IS" BASIS, 11*e7b1675dSTing-Kang Chang// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*e7b1675dSTing-Kang Chang// See the License for the specific language governing permissions and 13*e7b1675dSTing-Kang Chang// limitations under the License. 14*e7b1675dSTing-Kang Chang// 15*e7b1675dSTing-Kang Chang/////////////////////////////////////////////////////////////////////////////// 16*e7b1675dSTing-Kang Chang 17*e7b1675dSTing-Kang Chang// Package main is implements an gRPC server for testing_api. 18*e7b1675dSTing-Kang Changpackage main 19*e7b1675dSTing-Kang Chang 20*e7b1675dSTing-Kang Changimport ( 21*e7b1675dSTing-Kang Chang "context" 22*e7b1675dSTing-Kang Chang "fmt" 23*e7b1675dSTing-Kang Chang "log" 24*e7b1675dSTing-Kang Chang "net" 25*e7b1675dSTing-Kang Chang 26*e7b1675dSTing-Kang Chang "flag" 27*e7b1675dSTing-Kang Chang // context is used to cancel outstanding requests 28*e7b1675dSTing-Kang Chang "google.golang.org/api/option" 29*e7b1675dSTing-Kang Chang "google.golang.org/grpc" 30*e7b1675dSTing-Kang Chang "github.com/google/tink/go/core/registry" 31*e7b1675dSTing-Kang Chang "github.com/google/tink/go/integration/awskms" 32*e7b1675dSTing-Kang Chang "github.com/google/tink/go/integration/gcpkms" 33*e7b1675dSTing-Kang Chang "github.com/google/tink/go/testing/fakekms" 34*e7b1675dSTing-Kang Chang "github.com/google/tink/testing/go/services" 35*e7b1675dSTing-Kang Chang pbgrpc "github.com/google/tink/testing/go/protos/testing_api_go_grpc" 36*e7b1675dSTing-Kang Chang) 37*e7b1675dSTing-Kang Chang 38*e7b1675dSTing-Kang Changvar ( 39*e7b1675dSTing-Kang Chang port = flag.Int("port", 10000, "The server port") 40*e7b1675dSTing-Kang Chang gcpCredFilePath = flag.String("gcp_credentials_path", "", "Google Cloud KMS credentials path") 41*e7b1675dSTing-Kang Chang gcpKeyURI = flag.String("gcp_key_uri", "", "Google Cloud KMS key URL of the form: gcp-kms://projects/*/locations/*/keyRings/*/cryptoKeys/*.") 42*e7b1675dSTing-Kang Chang awsCredFilePath = flag.String("aws_credentials_path", "", "AWS KMS credentials path") 43*e7b1675dSTing-Kang Chang awsKeyURI = flag.String("aws_key_uri", "", "AWS KMS key URL of the form: aws-kms://arn:aws:kms:<region>:<account-id>:key/<key-id>.") 44*e7b1675dSTing-Kang Chang) 45*e7b1675dSTing-Kang Chang 46*e7b1675dSTing-Kang Changfunc main() { 47*e7b1675dSTing-Kang Chang flag.Parse() 48*e7b1675dSTing-Kang Chang client, err := fakekms.NewClient("fake-kms://") 49*e7b1675dSTing-Kang Chang if err != nil { 50*e7b1675dSTing-Kang Chang log.Fatalf("fakekms.NewClient failed: %v", err) 51*e7b1675dSTing-Kang Chang } 52*e7b1675dSTing-Kang Chang registry.RegisterKMSClient(client) 53*e7b1675dSTing-Kang Chang 54*e7b1675dSTing-Kang Chang gcpClient, err := gcpkms.NewClientWithOptions(context.Background(), *gcpKeyURI, option.WithCredentialsFile(*gcpCredFilePath)) 55*e7b1675dSTing-Kang Chang if err != nil { 56*e7b1675dSTing-Kang Chang log.Fatalf("gcpkms.NewClientWithOptions failed: %v", err) 57*e7b1675dSTing-Kang Chang } 58*e7b1675dSTing-Kang Chang registry.RegisterKMSClient(gcpClient) 59*e7b1675dSTing-Kang Chang 60*e7b1675dSTing-Kang Chang awsClient, err := awskms.NewClientWithOptions(*awsKeyURI, awskms.WithCredentialPath(*awsCredFilePath)) 61*e7b1675dSTing-Kang Chang if err != nil { 62*e7b1675dSTing-Kang Chang log.Fatalf("awskms.NewClientWithOptions failed: %v", err) 63*e7b1675dSTing-Kang Chang } 64*e7b1675dSTing-Kang Chang registry.RegisterKMSClient(awsClient) 65*e7b1675dSTing-Kang Chang 66*e7b1675dSTing-Kang Chang lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port)) 67*e7b1675dSTing-Kang Chang if err != nil { 68*e7b1675dSTing-Kang Chang log.Fatalf("Server failed to listen: %v", err) 69*e7b1675dSTing-Kang Chang } 70*e7b1675dSTing-Kang Chang log.Printf("Server is now listening on port: %d", *port) 71*e7b1675dSTing-Kang Chang server := grpc.NewServer() 72*e7b1675dSTing-Kang Chang if err != nil { 73*e7b1675dSTing-Kang Chang log.Fatalf("Failed to create new grpcprod server: %v", err) 74*e7b1675dSTing-Kang Chang } 75*e7b1675dSTing-Kang Chang pbgrpc.RegisterMetadataServer(server, &services.MetadataService{}) 76*e7b1675dSTing-Kang Chang pbgrpc.RegisterKeysetServer(server, &services.KeysetService{}) 77*e7b1675dSTing-Kang Chang pbgrpc.RegisterAeadServer(server, &services.AEADService{}) 78*e7b1675dSTing-Kang Chang pbgrpc.RegisterDeterministicAeadServer(server, &services.DeterministicAEADService{}) 79*e7b1675dSTing-Kang Chang pbgrpc.RegisterHybridServer(server, &services.HybridService{}) 80*e7b1675dSTing-Kang Chang pbgrpc.RegisterJwtServer(server, &services.JWTService{}) 81*e7b1675dSTing-Kang Chang pbgrpc.RegisterMacServer(server, &services.MacService{}) 82*e7b1675dSTing-Kang Chang pbgrpc.RegisterPrfSetServer(server, &services.PrfSetService{}) 83*e7b1675dSTing-Kang Chang pbgrpc.RegisterSignatureServer(server, &services.SignatureService{}) 84*e7b1675dSTing-Kang Chang pbgrpc.RegisterStreamingAeadServer(server, &services.StreamingAEADService{}) 85*e7b1675dSTing-Kang Chang server.Serve(lis) 86*e7b1675dSTing-Kang Chang} 87