• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package com.google.crypto.tink.testing;
18 
19 import com.google.crypto.tink.Aead;
20 import com.google.crypto.tink.testing.proto.AeadDecryptRequest;
21 import com.google.crypto.tink.testing.proto.AeadDecryptResponse;
22 import com.google.crypto.tink.testing.proto.AeadEncryptRequest;
23 import com.google.crypto.tink.testing.proto.AeadEncryptResponse;
24 import com.google.crypto.tink.testing.proto.AeadGrpc.AeadImplBase;
25 import com.google.crypto.tink.testing.proto.CreationRequest;
26 import com.google.crypto.tink.testing.proto.CreationResponse;
27 import com.google.protobuf.ByteString;
28 import io.grpc.stub.StreamObserver;
29 import java.security.GeneralSecurityException;
30 
31 /** Implements a gRPC Aead Testing service. */
32 public final class AeadServiceImpl extends AeadImplBase {
33 
AeadServiceImpl()34   public AeadServiceImpl() throws GeneralSecurityException {}
35 
36   @Override
create(CreationRequest request, StreamObserver<CreationResponse> responseObserver)37   public void create(CreationRequest request, StreamObserver<CreationResponse> responseObserver) {
38     Util.createPrimitiveForRpc(request, responseObserver, Aead.class);
39   }
40 
encrypt(AeadEncryptRequest request)41   AeadEncryptResponse encrypt(AeadEncryptRequest request) throws GeneralSecurityException {
42     Aead aead = Util.parseBinaryProtoKeyset(request.getAnnotatedKeyset()).getPrimitive(Aead.class);
43     try {
44       byte[] ciphertext =
45           aead.encrypt(
46               request.getPlaintext().toByteArray(), request.getAssociatedData().toByteArray());
47       return AeadEncryptResponse.newBuilder()
48           .setCiphertext(ByteString.copyFrom(ciphertext))
49           .build();
50     } catch (GeneralSecurityException e) {
51       return AeadEncryptResponse.newBuilder().setErr(e.toString()).build();
52     }
53   }
54 
55   /** Encrypts a message. */
56   @Override
encrypt( AeadEncryptRequest request, StreamObserver<AeadEncryptResponse> responseObserver)57   public void encrypt(
58       AeadEncryptRequest request, StreamObserver<AeadEncryptResponse> responseObserver) {
59     try {
60       AeadEncryptResponse response = encrypt(request);
61       responseObserver.onNext(response);
62       responseObserver.onCompleted();
63     } catch (Exception e) {
64       responseObserver.onError(e);
65     }
66   }
67 
decrypt(AeadDecryptRequest request)68   AeadDecryptResponse decrypt(AeadDecryptRequest request) throws GeneralSecurityException {
69     Aead aead =
70         Util.parseBinaryProtoKeyset(request.getAnnotatedKeyset())
71             .getPrimitive(Aead.class);
72     try {
73       byte[] plaintext =
74           aead.decrypt(
75               request.getCiphertext().toByteArray(), request.getAssociatedData().toByteArray());
76       return AeadDecryptResponse.newBuilder().setPlaintext(ByteString.copyFrom(plaintext)).build();
77     } catch (GeneralSecurityException e) {
78       return AeadDecryptResponse.newBuilder().setErr(e.toString()).build();
79     }
80   }
81 
82   /** Decrypts a message. */
83   @Override
decrypt( AeadDecryptRequest request, StreamObserver<AeadDecryptResponse> responseObserver)84   public void decrypt(
85       AeadDecryptRequest request, StreamObserver<AeadDecryptResponse> responseObserver) {
86     try {
87       AeadDecryptResponse response = decrypt(request);
88       responseObserver.onNext(response);
89       responseObserver.onCompleted();
90     } catch (Exception e) {
91       responseObserver.onError(e);
92     }
93   }
94 }
95