• 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.assertTrue;
22 
23 import com.google.crypto.tink.util.Bytes;
24 import com.google.crypto.tink.util.SecretBytes;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.junit.runners.JUnit4;
28 
29 @RunWith(JUnit4.class)
30 public final class LegacyKmsEnvelopeAeadKeyTest {
31   private static final AeadParameters CHACHA20POLY1305_PARAMETERS =
32       ChaCha20Poly1305Parameters.create(ChaCha20Poly1305Parameters.Variant.NO_PREFIX);
33 
34   @Test
createKeyAndGetProperties()35   public void createKeyAndGetProperties() throws Exception {
36     LegacyKmsEnvelopeAeadParameters parameters =
37         LegacyKmsEnvelopeAeadParameters.builder()
38             .setKekUri("SomeKekUri")
39             .setDekParsingStrategy(
40                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
41             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
42             .build();
43 
44     LegacyKmsEnvelopeAeadKey key = LegacyKmsEnvelopeAeadKey.create(parameters);
45 
46     assertThat(key.getOutputPrefix().size()).isEqualTo(0);
47     assertThat(key.getParameters()).isEqualTo(parameters);
48     assertThat(key.getIdRequirementOrNull()).isNull();
49   }
50 
51   @Test
createKeyWithNullIdRequirementAndGetProperties()52   public void createKeyWithNullIdRequirementAndGetProperties() throws Exception {
53     LegacyKmsEnvelopeAeadParameters parameters =
54         LegacyKmsEnvelopeAeadParameters.builder()
55             .setKekUri("SomeKekUri")
56             .setDekParsingStrategy(
57                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
58             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
59             .build();
60 
61     LegacyKmsEnvelopeAeadKey key =
62         LegacyKmsEnvelopeAeadKey.create(parameters, /* idRequirement= */ null);
63 
64     assertThat(key.getOutputPrefix().size()).isEqualTo(0);
65     assertThat(key.getParameters()).isEqualTo(parameters);
66     assertThat(key.getIdRequirementOrNull()).isNull();
67   }
68 
69   @Test
createKeyWithTinkOutptPrefixAndGetProperties()70   public void createKeyWithTinkOutptPrefixAndGetProperties() throws Exception {
71     LegacyKmsEnvelopeAeadParameters parameters =
72         LegacyKmsEnvelopeAeadParameters.builder()
73             .setVariant(LegacyKmsEnvelopeAeadParameters.Variant.TINK)
74             .setKekUri("SomeKekUri")
75             .setDekParsingStrategy(
76                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
77             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
78             .build();
79 
80     LegacyKmsEnvelopeAeadKey key = LegacyKmsEnvelopeAeadKey.create(parameters, 0xaabbccdd);
81 
82     assertThat(key.getOutputPrefix())
83         .isEqualTo(
84             Bytes.copyFrom(
85                 new byte[] {(byte) 0x01, (byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xdd}));
86     assertThat(key.getParameters()).isEqualTo(parameters);
87     assertThat(key.getIdRequirementOrNull()).isEqualTo(0xaabbccdd);
88   }
89 
90   @Test
testEqualKey()91   public void testEqualKey() throws Exception {
92     LegacyKmsEnvelopeAeadParameters parameters1 =
93         LegacyKmsEnvelopeAeadParameters.builder()
94             .setKekUri("SomeKekUri")
95             .setDekParsingStrategy(
96                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
97             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
98             .build();
99     LegacyKmsEnvelopeAeadParameters parameters1Copy =
100         LegacyKmsEnvelopeAeadParameters.builder()
101             .setKekUri("SomeKekUri")
102             .setDekParsingStrategy(
103                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
104             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
105             .build();
106     LegacyKmsEnvelopeAeadParameters parameters2 =
107         LegacyKmsEnvelopeAeadParameters.builder()
108             .setKekUri("someOtherKekUri")
109             .setDekParsingStrategy(
110                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
111             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
112             .build();
113 
114     LegacyKmsEnvelopeAeadKey key1 = LegacyKmsEnvelopeAeadKey.create(parameters1);
115     LegacyKmsEnvelopeAeadKey key1Copy = LegacyKmsEnvelopeAeadKey.create(parameters1Copy);
116     LegacyKmsEnvelopeAeadKey key2 = LegacyKmsEnvelopeAeadKey.create(parameters2);
117 
118     assertTrue(key1.equalsKey(key1Copy));
119     assertFalse(key1.equalsKey(key2));
120   }
121 
122   @Test
testTinkEqualKey()123   public void testTinkEqualKey() throws Exception {
124     LegacyKmsEnvelopeAeadParameters parametersTink =
125         LegacyKmsEnvelopeAeadParameters.builder()
126             .setVariant(LegacyKmsEnvelopeAeadParameters.Variant.TINK)
127             .setKekUri("kekUri")
128             .setDekParsingStrategy(
129                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
130             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
131             .build();
132     LegacyKmsEnvelopeAeadParameters parametersTinkCopy =
133         LegacyKmsEnvelopeAeadParameters.builder()
134             .setVariant(LegacyKmsEnvelopeAeadParameters.Variant.TINK)
135             .setKekUri("kekUri")
136             .setDekParsingStrategy(
137                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
138             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
139             .build();
140     LegacyKmsEnvelopeAeadParameters parametersNoPrefix =
141         LegacyKmsEnvelopeAeadParameters.builder()
142             .setVariant(LegacyKmsEnvelopeAeadParameters.Variant.NO_PREFIX)
143             .setKekUri("kekUri")
144             .setDekParsingStrategy(
145                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
146             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
147             .build();
148 
149     LegacyKmsEnvelopeAeadKey keyTink =
150         LegacyKmsEnvelopeAeadKey.create(parametersTink, /* idRequirement= */ 123);
151     LegacyKmsEnvelopeAeadKey keyTinkCopy =
152         LegacyKmsEnvelopeAeadKey.create(parametersTinkCopy, /* idRequirement= */ 123);
153     LegacyKmsEnvelopeAeadKey keyTink2 =
154         LegacyKmsEnvelopeAeadKey.create(parametersTink, /* idRequirement= */ 234);
155     LegacyKmsEnvelopeAeadKey keyNoPrefix =
156         LegacyKmsEnvelopeAeadKey.create(parametersNoPrefix, /* idRequirement= */ null);
157 
158     assertTrue(keyTink.equalsKey(keyTinkCopy));
159     assertFalse(keyTink.equalsKey(keyTink2));
160     assertFalse(keyTink.equalsKey(keyNoPrefix));
161   }
162 
163   @Test
testDifferentKeyTypesEquality_fails()164   public void testDifferentKeyTypesEquality_fails() throws Exception {
165     LegacyKmsEnvelopeAeadParameters parameters =
166         LegacyKmsEnvelopeAeadParameters.builder()
167             .setKekUri("SomeKekUri")
168             .setDekParsingStrategy(
169                 LegacyKmsEnvelopeAeadParameters.DekParsingStrategy.ASSUME_CHACHA20POLY1305)
170             .setDekParametersForNewKeys(CHACHA20POLY1305_PARAMETERS)
171             .build();
172     LegacyKmsEnvelopeAeadKey key = LegacyKmsEnvelopeAeadKey.create(parameters);
173 
174     XChaCha20Poly1305Key xChaCha20Poly1305Key =
175         XChaCha20Poly1305Key.create(SecretBytes.randomBytes(32));
176 
177     assertThat(key.equalsKey(xChaCha20Poly1305Key)).isFalse();
178   }
179 }
180