• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 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.aead;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 import static org.junit.Assert.assertThrows;
21 
22 import java.security.GeneralSecurityException;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.junit.runners.JUnit4;
26 
27 @RunWith(JUnit4.class)
28 public final class AesEaxParametersTest {
29   private static final AesEaxParameters.Variant NO_PREFIX = AesEaxParameters.Variant.NO_PREFIX;
30   private static final AesEaxParameters.Variant TINK = AesEaxParameters.Variant.TINK;
31   private static final AesEaxParameters.Variant CRUNCHY = AesEaxParameters.Variant.CRUNCHY;
32 
33   @Test
buildParametersAndGetProperties()34   public void buildParametersAndGetProperties() throws Exception {
35     AesEaxParameters parameters =
36         AesEaxParameters.builder()
37             .setKeySizeBytes(16)
38             .setIvSizeBytes(16)
39             .setTagSizeBytes(16)
40             .setVariant(NO_PREFIX)
41             .build();
42     assertThat(parameters.getKeySizeBytes()).isEqualTo(16);
43     assertThat(parameters.getIvSizeBytes()).isEqualTo(16);
44     assertThat(parameters.getTagSizeBytes()).isEqualTo(16);
45     assertThat(parameters.getVariant()).isEqualTo(NO_PREFIX);
46     assertThat(parameters.hasIdRequirement()).isFalse();
47   }
48 
49   @Test
buildParametersWithoutSettingVariant_hasNoPrefix()50   public void buildParametersWithoutSettingVariant_hasNoPrefix() throws Exception {
51     AesEaxParameters parameters =
52         AesEaxParameters.builder()
53             .setKeySizeBytes(16)
54             .setIvSizeBytes(16)
55             .setTagSizeBytes(16)
56             .build();
57     assertThat(parameters.getVariant()).isEqualTo(NO_PREFIX);
58     assertThat(parameters.hasIdRequirement()).isFalse();
59   }
60 
61   @Test
buildParametersWithoutSettingKeySize_fails()62   public void buildParametersWithoutSettingKeySize_fails() throws Exception {
63     assertThrows(
64         GeneralSecurityException.class,
65         () ->
66             AesEaxParameters.builder()
67                 .setIvSizeBytes(16)
68                 .setTagSizeBytes(16)
69                 .setVariant(NO_PREFIX)
70                 .build());
71   }
72 
73   @Test
buildParametersWithoutSettingIvSize_fails()74   public void buildParametersWithoutSettingIvSize_fails() throws Exception {
75     assertThrows(
76         GeneralSecurityException.class,
77         () ->
78             AesEaxParameters.builder()
79                 .setKeySizeBytes(16)
80                 .setTagSizeBytes(16)
81                 .setVariant(NO_PREFIX)
82                 .build());
83   }
84 
85   @Test
buildParametersWithoutSettingTagSize_fails()86   public void buildParametersWithoutSettingTagSize_fails() throws Exception {
87     assertThrows(
88         GeneralSecurityException.class,
89         () ->
90             AesEaxParameters.builder()
91                 .setKeySizeBytes(16)
92                 .setIvSizeBytes(16)
93                 .setVariant(NO_PREFIX)
94                 .build());
95   }
96 
97   @Test
buildWithVariantSetToNull_fails()98   public void buildWithVariantSetToNull_fails() throws Exception {
99     assertThrows(
100         GeneralSecurityException.class,
101         () ->
102             AesEaxParameters.builder()
103                 .setKeySizeBytes(16)
104                 .setIvSizeBytes(16)
105                 .setTagSizeBytes(16)
106                 .setVariant(null)
107                 .build());
108   }
109 
110   @Test
buildParametersWithTinkPrefix()111   public void buildParametersWithTinkPrefix() throws Exception {
112     AesEaxParameters parameters =
113         AesEaxParameters.builder()
114             .setKeySizeBytes(16)
115             .setIvSizeBytes(16)
116             .setTagSizeBytes(16)
117             .setVariant(TINK)
118             .build();
119     assertThat(parameters.getKeySizeBytes()).isEqualTo(16);
120     assertThat(parameters.getIvSizeBytes()).isEqualTo(16);
121     assertThat(parameters.getTagSizeBytes()).isEqualTo(16);
122     assertThat(parameters.getVariant()).isEqualTo(TINK);
123     assertThat(parameters.hasIdRequirement()).isTrue();
124   }
125 
126   @Test
buildParametersWithCrunchyPrefix()127   public void buildParametersWithCrunchyPrefix() throws Exception {
128     AesEaxParameters parameters =
129         AesEaxParameters.builder()
130             .setKeySizeBytes(16)
131             .setIvSizeBytes(16)
132             .setTagSizeBytes(16)
133             .setVariant(CRUNCHY)
134             .build();
135     assertThat(parameters.getKeySizeBytes()).isEqualTo(16);
136     assertThat(parameters.getIvSizeBytes()).isEqualTo(16);
137     assertThat(parameters.getTagSizeBytes()).isEqualTo(16);
138     assertThat(parameters.getVariant()).isEqualTo(CRUNCHY);
139     assertThat(parameters.hasIdRequirement()).isTrue();
140   }
141 
142   @Test
testEqualsAndEqualHashCode()143   public void testEqualsAndEqualHashCode() throws Exception {
144     AesEaxParameters parameters1 =
145         AesEaxParameters.builder()
146             .setKeySizeBytes(16)
147             .setIvSizeBytes(16)
148             .setTagSizeBytes(16)
149             .setVariant(NO_PREFIX)
150             .build();
151     AesEaxParameters parameters2 =
152         AesEaxParameters.builder()
153             .setKeySizeBytes(16)
154             .setIvSizeBytes(16)
155             .setTagSizeBytes(16)
156             .setVariant(NO_PREFIX)
157             .build();
158     assertThat(parameters1).isEqualTo(parameters2);
159     assertThat(parameters1.hashCode()).isEqualTo(parameters2.hashCode());
160   }
161 
162   @Test
buildParametersWithKeySize16And32()163   public void buildParametersWithKeySize16And32() throws Exception {
164     AesEaxParameters parameters =
165         AesEaxParameters.builder()
166             .setKeySizeBytes(16)
167             .setIvSizeBytes(16)
168             .setTagSizeBytes(16)
169             .setVariant(NO_PREFIX)
170             .build();
171     assertThat(parameters.getKeySizeBytes()).isEqualTo(16);
172     parameters =
173         AesEaxParameters.builder()
174             .setKeySizeBytes(32)
175             .setIvSizeBytes(12)
176             .setTagSizeBytes(16)
177             .setVariant(NO_PREFIX)
178             .build();
179     assertThat(parameters.getKeySizeBytes()).isEqualTo(32);
180 
181     assertThrows(
182         GeneralSecurityException.class,
183         () ->
184             AesEaxParameters.builder()
185                 .setKeySizeBytes(8)
186                 .setIvSizeBytes(16)
187                 .setTagSizeBytes(16)
188                 .setVariant(NO_PREFIX)
189                 .build());
190     assertThrows(
191         GeneralSecurityException.class,
192         () ->
193             AesEaxParameters.builder()
194                 .setKeySizeBytes(12)
195                 .setIvSizeBytes(16)
196                 .setTagSizeBytes(16)
197                 .setVariant(NO_PREFIX)
198                 .build());
199   }
200 
201   @Test
buildParametersWithLargerTagSizeFails()202   public void buildParametersWithLargerTagSizeFails() throws Exception {
203     assertThrows(
204         GeneralSecurityException.class,
205         () ->
206             AesEaxParameters.builder()
207                 .setKeySizeBytes(16)
208                 .setIvSizeBytes(16)
209                 .setTagSizeBytes(32)
210                 .setVariant(NO_PREFIX)
211                 .build());
212   }
213 
214   @Test
buildParametersWithIvSize12And16()215   public void buildParametersWithIvSize12And16() throws Exception {
216     AesEaxParameters parameters =
217         AesEaxParameters.builder()
218             .setKeySizeBytes(16)
219             .setIvSizeBytes(12)
220             .setTagSizeBytes(16)
221             .setVariant(NO_PREFIX)
222             .build();
223     assertThat(parameters.getIvSizeBytes()).isEqualTo(12);
224     parameters =
225         AesEaxParameters.builder()
226             .setKeySizeBytes(32)
227             .setIvSizeBytes(16)
228             .setTagSizeBytes(16)
229             .setVariant(NO_PREFIX)
230             .build();
231     assertThat(parameters.getIvSizeBytes()).isEqualTo(16);
232 
233     assertThrows(
234         GeneralSecurityException.class,
235         () ->
236             AesEaxParameters.builder()
237                 .setKeySizeBytes(16)
238                 .setIvSizeBytes(8)
239                 .setTagSizeBytes(16)
240                 .setVariant(NO_PREFIX)
241                 .build());
242     assertThrows(
243         GeneralSecurityException.class,
244         () ->
245             AesEaxParameters.builder()
246                 .setKeySizeBytes(16)
247                 .setIvSizeBytes(22)
248                 .setTagSizeBytes(16)
249                 .setVariant(NO_PREFIX)
250                 .build());
251   }
252 
253   @Test
testNotEqualandNotEqualHashCode()254   public void testNotEqualandNotEqualHashCode() throws Exception {
255     AesEaxParameters parameters1 =
256         AesEaxParameters.builder()
257             .setKeySizeBytes(16)
258             .setIvSizeBytes(16)
259             .setTagSizeBytes(16)
260             .setVariant(NO_PREFIX)
261             .build();
262 
263     AesEaxParameters parameters2 =
264         AesEaxParameters.builder()
265             .setKeySizeBytes(32)
266             .setIvSizeBytes(16)
267             .setTagSizeBytes(16)
268             .setVariant(NO_PREFIX)
269             .build();
270     assertThat(parameters1).isNotEqualTo(parameters2);
271     assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode());
272 
273     parameters2 =
274         AesEaxParameters.builder()
275             .setKeySizeBytes(16)
276             .setIvSizeBytes(12)
277             .setTagSizeBytes(16)
278             .setVariant(NO_PREFIX)
279             .build();
280     assertThat(parameters1).isNotEqualTo(parameters2);
281     assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode());
282 
283     parameters2 =
284         AesEaxParameters.builder()
285             .setKeySizeBytes(32)
286             .setIvSizeBytes(12)
287             .setTagSizeBytes(16)
288             .setVariant(NO_PREFIX)
289             .build();
290     assertThat(parameters1).isNotEqualTo(parameters2);
291     assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode());
292 
293     parameters2 =
294         AesEaxParameters.builder()
295             .setKeySizeBytes(16)
296             .setIvSizeBytes(16)
297             .setTagSizeBytes(16)
298             .setVariant(TINK)
299             .build();
300     assertThat(parameters1).isNotEqualTo(parameters2);
301     assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode());
302 
303     parameters2 =
304         AesEaxParameters.builder()
305             .setKeySizeBytes(16)
306             .setIvSizeBytes(16)
307             .setTagSizeBytes(16)
308             .setVariant(CRUNCHY)
309             .build();
310     assertThat(parameters1).isNotEqualTo(parameters2);
311     assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode());
312   }
313 }
314