• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2023 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 com.google.tinkuser;
18
19import com.google.crypto.tink.Aead;
20import com.google.crypto.tink.BinaryKeysetReader;
21import com.google.crypto.tink.KeysetHandle;
22import com.google.crypto.tink.KeysetReader;
23import com.google.crypto.tink.TinkProtoKeysetFormat;
24import com.google.crypto.tink.aead.AeadKeyTemplates;
25import com.google.crypto.tink.aead.PredefinedAeadParameters;
26import com.google.crypto.tink.daead.DeterministicAeadKeyTemplates;
27import com.google.crypto.tink.daead.PredefinedDeterministicAeadParameters;
28import com.google.crypto.tink.hybrid.HybridKeyTemplates;
29import com.google.crypto.tink.hybrid.PredefinedHybridParameters;
30import com.google.crypto.tink.mac.MacKeyTemplates;
31import com.google.crypto.tink.mac.PredefinedMacParameters;
32import com.google.crypto.tink.signature.PredefinedSignatureParameters;
33import com.google.crypto.tink.signature.SignatureKeyTemplates;
34import com.google.crypto.tink.streamingaead.PredefinedStreamingAeadParameters;
35import com.google.crypto.tink.streamingaead.StreamingAeadKeyTemplates;
36import java.io.IOException;
37import java.security.GeneralSecurityException;
38
39/** Example user code */
40public final class TinkUser {
41  public Aead useReadNoSecret(byte[] b) throws GeneralSecurityException {
42    return TinkProtoKeysetFormat.parseKeysetWithoutSecret(b).getPrimitive(Aead.class);
43  }
44  public Aead useBinaryReader(byte[] b) throws GeneralSecurityException, IOException {
45    return TinkProtoKeysetFormat.parseKeysetWithoutSecret(b).getPrimitive(Aead.class);
46  }
47  public Aead useAnyReader(KeysetReader r) throws GeneralSecurityException, IOException {
48    return KeysetHandle.readNoSecret(r).getPrimitive(Aead.class);
49  }
50
51  public void macKeyTemplateUser() throws Exception {
52    Object a = KeysetHandle.generateNew(PredefinedMacParameters.HMAC_SHA256_128BITTAG);
53    Object b = KeysetHandle.generateNew(PredefinedMacParameters.HMAC_SHA256_256BITTAG);
54    Object c = KeysetHandle.generateNew(PredefinedMacParameters.HMAC_SHA512_256BITTAG);
55    Object d = KeysetHandle.generateNew(PredefinedMacParameters.HMAC_SHA512_512BITTAG);
56    Object e = KeysetHandle.generateNew(PredefinedMacParameters.AES_CMAC);
57  }
58
59  public void aeadKeyTemplateUser() throws Exception {
60    Object a = KeysetHandle.generateNew(PredefinedAeadParameters.AES128_GCM);
61    Object b = KeysetHandle.generateNew(PredefinedAeadParameters.AES256_GCM);
62    Object c = KeysetHandle.generateNew(PredefinedAeadParameters.AES128_EAX);
63    Object d = KeysetHandle.generateNew(PredefinedAeadParameters.AES256_EAX);
64    Object e = KeysetHandle.generateNew(PredefinedAeadParameters.AES128_CTR_HMAC_SHA256);
65    Object f = KeysetHandle.generateNew(PredefinedAeadParameters.AES256_CTR_HMAC_SHA256);
66    Object g = KeysetHandle.generateNew(PredefinedAeadParameters.CHACHA20_POLY1305);
67    Object h = KeysetHandle.generateNew(PredefinedAeadParameters.XCHACHA20_POLY1305);
68  }
69
70  public void deterministicAeadKeyTemplateUser() throws Exception {
71    Object a = KeysetHandle.generateNew(PredefinedDeterministicAeadParameters.AES256_SIV);
72  }
73
74  public void streamingAeadKeyTemplateUser() throws Exception {
75    Object a = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES128_CTR_HMAC_SHA256_4KB);
76    Object b = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES128_CTR_HMAC_SHA256_1MB);
77    Object c = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES256_CTR_HMAC_SHA256_4KB);
78    Object d = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES256_CTR_HMAC_SHA256_1MB);
79    Object e = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES128_GCM_HKDF_4KB);
80    Object f = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES128_GCM_HKDF_1MB);
81    Object g = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES256_GCM_HKDF_4KB);
82    Object h = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES256_GCM_HKDF_1MB);
83  }
84
85  public void signatureKeyTemplateUser() throws Exception {
86    Object a = KeysetHandle.generateNew(PredefinedSignatureParameters.ECDSA_P256);
87    Object b = KeysetHandle.generateNew(PredefinedSignatureParameters.ECDSA_P384);
88    Object c = KeysetHandle.generateNew(PredefinedSignatureParameters.ECDSA_P521);
89    Object d = KeysetHandle.generateNew(PredefinedSignatureParameters.ECDSA_P256_IEEE_P1363);
90    Object e = KeysetHandle.generateNew(PredefinedSignatureParameters.ECDSA_P384_IEEE_P1363);
91    Object f = KeysetHandle.generateNew(PredefinedSignatureParameters.ECDSA_P256_IEEE_P1363_WITHOUT_PREFIX);
92    Object g = KeysetHandle.generateNew(PredefinedSignatureParameters.ECDSA_P521_IEEE_P1363);
93    Object h = KeysetHandle.generateNew(PredefinedSignatureParameters.ED25519);
94    Object i = KeysetHandle.generateNew(PredefinedSignatureParameters.ED25519WithRawOutput);
95    Object j = KeysetHandle.generateNew(PredefinedSignatureParameters.RSA_SSA_PKCS1_3072_SHA256_F4);
96    Object k =
97        KeysetHandle.generateNew(PredefinedSignatureParameters.RSA_SSA_PKCS1_3072_SHA256_F4_WITHOUT_PREFIX);
98    Object l = KeysetHandle.generateNew(PredefinedSignatureParameters.RSA_SSA_PKCS1_4096_SHA512_F4);
99    Object m = KeysetHandle.generateNew(PredefinedSignatureParameters.RSA_SSA_PSS_3072_SHA256_SHA256_32_F4);
100    Object n = KeysetHandle.generateNew(PredefinedSignatureParameters.RSA_SSA_PSS_4096_SHA512_SHA512_64_F4);
101  }
102
103  public void hybridKeyTemplateUser() throws Exception {
104    Object a = KeysetHandle.generateNew(PredefinedHybridParameters.ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM);
105    Object b =
106        KeysetHandle.generateNew(PredefinedHybridParameters.ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM_COMPRESSED_WITHOUT_PREFIX);
107    Object c =
108        KeysetHandle.generateNew(PredefinedHybridParameters.ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256);
109  }
110}
111