// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// package com.google.tinkuser; import com.google.crypto.tink.Aead; import com.google.crypto.tink.BinaryKeysetReader; import com.google.crypto.tink.KeysetHandle; import com.google.crypto.tink.KeysetReader; import com.google.crypto.tink.TinkProtoKeysetFormat; import com.google.crypto.tink.aead.AeadKeyTemplates; import com.google.crypto.tink.aead.PredefinedAeadParameters; import com.google.crypto.tink.daead.DeterministicAeadKeyTemplates; import com.google.crypto.tink.daead.PredefinedDeterministicAeadParameters; import com.google.crypto.tink.mac.MacKeyTemplates; import com.google.crypto.tink.mac.PredefinedMacParameters; import com.google.crypto.tink.streamingaead.PredefinedStreamingAeadParameters; import com.google.crypto.tink.streamingaead.StreamingAeadKeyTemplates; import java.io.IOException; import java.security.GeneralSecurityException; /** Example user code */ public final class TinkUser { public Aead useReadNoSecret(byte[] b) throws GeneralSecurityException { return TinkProtoKeysetFormat.parseKeysetWithoutSecret(b).getPrimitive(Aead.class); } public Aead useBinaryReader(byte[] b) throws GeneralSecurityException, IOException { return TinkProtoKeysetFormat.parseKeysetWithoutSecret(b).getPrimitive(Aead.class); } public Aead useAnyReader(KeysetReader r) throws GeneralSecurityException, IOException { return TinkProtoKeysetFormat.parseKeysetWithoutSecret(r.read().toByteArray()).getPrimitive(Aead.class); } public void macKeyTemplateUser() throws Exception { Object a = KeysetHandle.generateNew(PredefinedMacParameters.HMAC_SHA256_128BITTAG); Object b = KeysetHandle.generateNew(PredefinedMacParameters.HMAC_SHA256_256BITTAG); Object c = KeysetHandle.generateNew(PredefinedMacParameters.HMAC_SHA512_256BITTAG); Object d = KeysetHandle.generateNew(PredefinedMacParameters.HMAC_SHA512_512BITTAG); Object e = KeysetHandle.generateNew(PredefinedMacParameters.AES_CMAC); } public void aeadKeyTemplateUser() throws Exception { Object a = KeysetHandle.generateNew(PredefinedAeadParameters.AES128_GCM); Object b = KeysetHandle.generateNew(PredefinedAeadParameters.AES256_GCM); Object c = KeysetHandle.generateNew(PredefinedAeadParameters.AES128_EAX); Object d = KeysetHandle.generateNew(PredefinedAeadParameters.AES256_EAX); Object e = KeysetHandle.generateNew(PredefinedAeadParameters.AES128_CTR_HMAC_SHA256); Object f = KeysetHandle.generateNew(PredefinedAeadParameters.AES256_CTR_HMAC_SHA256); Object g = KeysetHandle.generateNew(PredefinedAeadParameters.CHACHA20_POLY1305); Object h = KeysetHandle.generateNew(PredefinedAeadParameters.XCHACHA20_POLY1305); } public void deterministicAeadKeyTemplateUser() throws Exception { Object a = KeysetHandle.generateNew(PredefinedDeterministicAeadParameters.AES256_SIV); } public void streamingAeadKeyTemplateUser() throws Exception { Object a = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES128_CTR_HMAC_SHA256_4KB); Object b = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES128_CTR_HMAC_SHA256_1MB); Object c = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES256_CTR_HMAC_SHA256_4KB); Object d = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES256_CTR_HMAC_SHA256_1MB); Object e = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES128_GCM_HKDF_4KB); Object f = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES128_GCM_HKDF_1MB); Object g = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES256_GCM_HKDF_4KB); Object h = KeysetHandle.generateNew(PredefinedStreamingAeadParameters.AES256_GCM_HKDF_1MB); } }