• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 Google Inc.
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.aead;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertThrows;
22 import static org.junit.Assert.assertTrue;
23 
24 import com.google.crypto.tink.util.Bytes;
25 import com.google.crypto.tink.util.SecretBytes;
26 import java.security.GeneralSecurityException;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.junit.runners.JUnit4;
30 
31 @RunWith(JUnit4.class)
32 public final class LegacyKmsAeadKeyTest {
33 
34   @Test
createKeyAndGetProperties()35   public void createKeyAndGetProperties() throws Exception {
36     LegacyKmsAeadParameters parameters = LegacyKmsAeadParameters.create("someArbitrarykeyUri223");
37     assertThat(parameters.keyUri()).isEqualTo("someArbitrarykeyUri223");
38     assertThat(parameters.variant()).isEqualTo(LegacyKmsAeadParameters.Variant.NO_PREFIX);
39 
40     LegacyKmsAeadKey key = LegacyKmsAeadKey.create(parameters);
41 
42     assertThat(key.getOutputPrefix().size()).isEqualTo(0);
43     assertThat(key.getParameters()).isEqualTo(parameters);
44     assertThat(key.getIdRequirementOrNull()).isNull();
45   }
46 
47   @Test
createNoPrefixKeyAndGetProperties()48   public void createNoPrefixKeyAndGetProperties() throws Exception {
49     LegacyKmsAeadParameters parameters =
50         LegacyKmsAeadParameters.create(
51             "someArbitrarykeyUri223", LegacyKmsAeadParameters.Variant.NO_PREFIX);
52     assertThat(parameters.keyUri()).isEqualTo("someArbitrarykeyUri223");
53     assertThat(parameters.variant()).isEqualTo(LegacyKmsAeadParameters.Variant.NO_PREFIX);
54 
55     LegacyKmsAeadKey key = LegacyKmsAeadKey.create(parameters, null);
56 
57     assertThat(key.getOutputPrefix().size()).isEqualTo(0);
58     assertThat(key.getParameters()).isEqualTo(parameters);
59     assertThat(key.getIdRequirementOrNull()).isNull();
60   }
61 
62   @Test
createTinkKeyAndGetProperties()63   public void createTinkKeyAndGetProperties() throws Exception {
64     LegacyKmsAeadParameters parameters =
65         LegacyKmsAeadParameters.create(
66             "someArbitrarykeyUri223", LegacyKmsAeadParameters.Variant.TINK);
67     assertThat(parameters.keyUri()).isEqualTo("someArbitrarykeyUri223");
68     assertThat(parameters.variant()).isEqualTo(LegacyKmsAeadParameters.Variant.TINK);
69 
70     LegacyKmsAeadKey key = LegacyKmsAeadKey.create(parameters, 0x0708090a);
71 
72     assertThat(key.getOutputPrefix())
73         .isEqualTo(Bytes.copyFrom(new byte[] {0x01, 0x07, 0x08, 0x09, 0x0a}));
74     assertThat(key.getParameters()).isEqualTo(parameters);
75     assertThat(key.getIdRequirementOrNull()).isEqualTo(0x708090a);
76   }
77 
78   @Test
wrongIdRequirement_throws()79   public void wrongIdRequirement_throws() throws Exception {
80     LegacyKmsAeadParameters parametersNoPrefix =
81         LegacyKmsAeadParameters.create("keyUri1", LegacyKmsAeadParameters.Variant.NO_PREFIX);
82     LegacyKmsAeadParameters parametersTink =
83         LegacyKmsAeadParameters.create("keyUri2", LegacyKmsAeadParameters.Variant.TINK);
84 
85     assertThrows(
86         GeneralSecurityException.class,
87         () -> LegacyKmsAeadKey.create(parametersNoPrefix, /* idRequirement= */ 0x0708090a));
88     assertThrows(
89         GeneralSecurityException.class,
90         () -> LegacyKmsAeadKey.create(parametersTink, /* idRequirement= */ null));
91     assertThrows(GeneralSecurityException.class, () -> LegacyKmsAeadKey.create(parametersTink));
92   }
93 
94   @Test
testNoPrefixEqualKey()95   public void testNoPrefixEqualKey() throws Exception {
96     LegacyKmsAeadParameters parameters1 = LegacyKmsAeadParameters.create("someArbitrarykeyUri223");
97     LegacyKmsAeadParameters parameters1Copy =
98         LegacyKmsAeadParameters.create("someArbitrarykeyUri223");
99     LegacyKmsAeadParameters parameters2 = LegacyKmsAeadParameters.create("someArbitrarykeyUri334");
100 
101     LegacyKmsAeadKey key1 = LegacyKmsAeadKey.create(parameters1);
102     LegacyKmsAeadKey key1Copy = LegacyKmsAeadKey.create(parameters1Copy);
103     LegacyKmsAeadKey key2 = LegacyKmsAeadKey.create(parameters2);
104 
105     assertTrue(key1.equalsKey(key1Copy));
106     assertFalse(key1.equalsKey(key2));
107   }
108 
109   @Test
testTinkEqualKey()110   public void testTinkEqualKey() throws Exception {
111     LegacyKmsAeadParameters parametersTink =
112         LegacyKmsAeadParameters.create("keyUri", LegacyKmsAeadParameters.Variant.TINK);
113     LegacyKmsAeadKey keyTink = LegacyKmsAeadKey.create(parametersTink, /* idRequirement= */ 123);
114     LegacyKmsAeadKey keyTinkCopy =
115         LegacyKmsAeadKey.create(
116             LegacyKmsAeadParameters.create("keyUri", LegacyKmsAeadParameters.Variant.TINK),
117             /* idRequirement= */ 123);
118     LegacyKmsAeadKey keyTink2 = LegacyKmsAeadKey.create(parametersTink, /* idRequirement= */ 234);
119     LegacyKmsAeadKey keyNoPrefix =
120         LegacyKmsAeadKey.create(
121             LegacyKmsAeadParameters.create("keyUri", LegacyKmsAeadParameters.Variant.NO_PREFIX),
122             /* idRequirement= */ null);
123 
124     assertTrue(keyTink.equalsKey(keyTinkCopy));
125     assertFalse(keyTink.equalsKey(keyTink2));
126     assertFalse(keyTink.equalsKey(keyNoPrefix));
127   }
128 
129   @Test
testDifferentKeyTypesEquality_fails()130   public void testDifferentKeyTypesEquality_fails() throws Exception {
131     LegacyKmsAeadParameters parameters = LegacyKmsAeadParameters.create("someArbitrarykeyUri223");
132     LegacyKmsAeadKey key = LegacyKmsAeadKey.create(parameters);
133 
134     XChaCha20Poly1305Key xChaCha20Poly1305Key =
135         XChaCha20Poly1305Key.create(SecretBytes.randomBytes(32));
136 
137     assertThat(key.equalsKey(xChaCha20Poly1305Key)).isFalse();
138   }
139 }
140