xref: /aosp_15_r20/external/tink/testing/go/aead_service.go (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
1// Copyright 2020 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15///////////////////////////////////////////////////////////////////////////////
16
17package services
18
19import (
20	"context"
21	"fmt"
22
23	"github.com/google/tink/go/aead"
24	"github.com/google/tink/go/aead/internal/testing/kmsaead"
25	"github.com/google/tink/go/core/registry"
26	pb "github.com/google/tink/testing/go/protos/testing_api_go_grpc"
27)
28
29// AEADService implements the Aead testing service.
30type AEADService struct {
31	pb.AeadServer
32}
33
34func (s *AEADService) Create(ctx context.Context, req *pb.CreationRequest) (*pb.CreationResponse, error) {
35	handle, err := toKeysetHandle(req.GetAnnotatedKeyset())
36	if err != nil {
37		return &pb.CreationResponse{Err: err.Error()}, nil
38	}
39	_, err = aead.New(handle)
40	if err != nil {
41		return &pb.CreationResponse{Err: err.Error()}, nil
42	}
43	return &pb.CreationResponse{}, nil
44}
45
46func (s *AEADService) Encrypt(ctx context.Context, req *pb.AeadEncryptRequest) (*pb.AeadEncryptResponse, error) {
47	handle, err := toKeysetHandle(req.GetAnnotatedKeyset())
48	if err != nil {
49		return nil, err
50	}
51	cipher, err := aead.New(handle)
52	if err != nil {
53		return nil, err
54	}
55	ciphertext, err := cipher.Encrypt(req.Plaintext, req.AssociatedData)
56	if err != nil {
57		return &pb.AeadEncryptResponse{
58			Result: &pb.AeadEncryptResponse_Err{err.Error()}}, nil
59	}
60	return &pb.AeadEncryptResponse{
61		Result: &pb.AeadEncryptResponse_Ciphertext{ciphertext}}, nil
62}
63
64func (s *AEADService) Decrypt(ctx context.Context, req *pb.AeadDecryptRequest) (*pb.AeadDecryptResponse, error) {
65	handle, err := toKeysetHandle(req.GetAnnotatedKeyset())
66	if err != nil {
67		return nil, err
68	}
69	cipher, err := aead.New(handle)
70	if err != nil {
71		return nil, err
72	}
73	plaintext, err := cipher.Decrypt(req.Ciphertext, req.AssociatedData)
74	if err != nil {
75		return &pb.AeadDecryptResponse{
76			Result: &pb.AeadDecryptResponse_Err{err.Error()}}, nil
77	}
78	return &pb.AeadDecryptResponse{
79		Result: &pb.AeadDecryptResponse_Plaintext{plaintext}}, nil
80}
81
82func init() {
83	if err := registry.RegisterKeyManager(kmsaead.NewKeyManager()); err != nil {
84		panic(fmt.Sprintf("registry.RegisterKeyManager(kmsaead.NewKeyManager()) failed: %v", err))
85	}
86}
87