• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2024 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.daead;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 import static org.junit.Assert.assertThrows;
21 
22 import com.google.crypto.tink.DeterministicAead;
23 import com.google.crypto.tink.KeysetHandle;
24 import com.google.crypto.tink.config.internal.TinkFipsUtil;
25 import com.google.crypto.tink.daead.AesSivParameters.Variant;
26 import com.google.crypto.tink.daead.internal.AesSivProtoSerialization;
27 import com.google.crypto.tink.util.SecretBytes;
28 import java.security.GeneralSecurityException;
29 import org.junit.Assume;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.junit.runners.JUnit4;
33 
34 @RunWith(JUnit4.class)
35 public class DeterministicAeadConfigurationV0Test {
36   @Test
config_throwsIfInFipsMode()37   public void config_throwsIfInFipsMode() throws Exception {
38     Assume.assumeTrue(TinkFipsUtil.useOnlyFips());
39 
40     assertThrows(GeneralSecurityException.class, DeterministicAeadConfigurationV0::get);
41   }
42 
43   @Test
config_containsAesSivForDeterministicAead()44   public void config_containsAesSivForDeterministicAead() throws Exception {
45     Assume.assumeFalse(TinkFipsUtil.useOnlyFips());
46 
47     AesSivProtoSerialization.register();
48     AesSivParameters parameters =
49         AesSivParameters.builder().setKeySizeBytes(64).setVariant(Variant.NO_PREFIX).build();
50     AesSivKey key =
51         AesSivKey.builder()
52             .setParameters(parameters)
53             .setKeyBytes(SecretBytes.randomBytes(64))
54             .build();
55     KeysetHandle keysetHandle =
56         KeysetHandle.newBuilder()
57             .addEntry(KeysetHandle.importKey(key).withRandomId().makePrimary())
58             .build();
59 
60     assertThat(
61             keysetHandle.getPrimitive(
62                 DeterministicAeadConfigurationV0.get(), DeterministicAead.class))
63         .isNotNull();
64   }
65 
66   @Test
config_disallowsNon64ByteKeyForAesSiv()67   public void config_disallowsNon64ByteKeyForAesSiv() throws Exception {
68     Assume.assumeFalse(TinkFipsUtil.useOnlyFips());
69 
70     AesSivProtoSerialization.register();
71     AesSivParameters parameters =
72         AesSivParameters.builder().setKeySizeBytes(32).setVariant(Variant.NO_PREFIX).build();
73     AesSivKey key =
74         AesSivKey.builder()
75             .setParameters(parameters)
76             .setKeyBytes(SecretBytes.randomBytes(32))
77             .build();
78     KeysetHandle keysetHandle =
79         KeysetHandle.newBuilder()
80             .addEntry(KeysetHandle.importKey(key).withRandomId().makePrimary())
81             .build();
82 
83     assertThrows(
84         GeneralSecurityException.class,
85         () ->
86             keysetHandle.getPrimitive(
87                 DeterministicAeadConfigurationV0.get(), DeterministicAead.class));
88   }
89 }
90