• 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 AesGcmSivParametersTest {
29   private static final AesGcmSivParameters.Variant NO_PREFIX =
30       AesGcmSivParameters.Variant.NO_PREFIX;
31   private static final AesGcmSivParameters.Variant TINK = AesGcmSivParameters.Variant.TINK;
32   private static final AesGcmSivParameters.Variant CRUNCHY = AesGcmSivParameters.Variant.CRUNCHY;
33 
34   @Test
buildParametersAndGetProperties()35   public void buildParametersAndGetProperties() throws Exception {
36     AesGcmSivParameters parameters =
37         AesGcmSivParameters.builder().setKeySizeBytes(16).setVariant(NO_PREFIX).build();
38     assertThat(parameters.getKeySizeBytes()).isEqualTo(16);
39     assertThat(parameters.getVariant()).isEqualTo(NO_PREFIX);
40     assertThat(parameters.hasIdRequirement()).isFalse();
41   }
42 
43   @Test
buildParametersWithoutSettingVariant_hasNoPrefix()44   public void buildParametersWithoutSettingVariant_hasNoPrefix() throws Exception {
45     AesGcmSivParameters parameters = AesGcmSivParameters.builder().setKeySizeBytes(16).build();
46     assertThat(parameters.getVariant()).isEqualTo(NO_PREFIX);
47     assertThat(parameters.hasIdRequirement()).isFalse();
48   }
49 
50   @Test
buildParametersWithoutSettingKeySize_fails()51   public void buildParametersWithoutSettingKeySize_fails() throws Exception {
52     assertThrows(
53         GeneralSecurityException.class,
54         () -> AesGcmSivParameters.builder().setVariant(NO_PREFIX).build());
55   }
56 
57   @Test
buildWithVariantSetToNull_fails()58   public void buildWithVariantSetToNull_fails() throws Exception {
59     assertThrows(
60         GeneralSecurityException.class,
61         () -> AesGcmSivParameters.builder().setKeySizeBytes(16).setVariant(null).build());
62   }
63 
64   @Test
buildParametersWithTinkPrefix()65   public void buildParametersWithTinkPrefix() throws Exception {
66     AesGcmSivParameters parameters =
67         AesGcmSivParameters.builder().setKeySizeBytes(16).setVariant(TINK).build();
68     assertThat(parameters.getKeySizeBytes()).isEqualTo(16);
69     assertThat(parameters.getVariant()).isEqualTo(TINK);
70     assertThat(parameters.hasIdRequirement()).isTrue();
71   }
72 
73   @Test
buildParametersWithCrunchyPrefix()74   public void buildParametersWithCrunchyPrefix() throws Exception {
75     AesGcmSivParameters parameters =
76         AesGcmSivParameters.builder().setKeySizeBytes(32).setVariant(CRUNCHY).build();
77     assertThat(parameters.getKeySizeBytes()).isEqualTo(32);
78     assertThat(parameters.getVariant()).isEqualTo(CRUNCHY);
79     assertThat(parameters.hasIdRequirement()).isTrue();
80   }
81 
82   @Test
buildParametersWithBadKeySizeFails()83   public void buildParametersWithBadKeySizeFails() throws Exception {
84     assertThrows(
85         GeneralSecurityException.class,
86         () -> AesGcmSivParameters.builder().setKeySizeBytes(12).setVariant(NO_PREFIX).build());
87 
88     assertThrows(
89         GeneralSecurityException.class,
90         () -> AesGcmSivParameters.builder().setKeySizeBytes(34).setVariant(NO_PREFIX).build());
91   }
92 
93   @Test
testEqualsAndEqualHashCode()94   public void testEqualsAndEqualHashCode() throws Exception {
95     AesGcmSivParameters parameters1 =
96         AesGcmSivParameters.builder().setKeySizeBytes(16).setVariant(NO_PREFIX).build();
97     AesGcmSivParameters parameters2 =
98         AesGcmSivParameters.builder().setKeySizeBytes(16).setVariant(NO_PREFIX).build();
99     assertThat(parameters1).isEqualTo(parameters2);
100     assertThat(parameters1.hashCode()).isEqualTo(parameters2.hashCode());
101   }
102 
103   @Test
testNotEqualandNotEqualHashCode()104   public void testNotEqualandNotEqualHashCode() throws Exception {
105     AesGcmSivParameters parameters1 =
106         AesGcmSivParameters.builder().setKeySizeBytes(16).setVariant(NO_PREFIX).build();
107 
108     AesGcmSivParameters parameters2 =
109         AesGcmSivParameters.builder().setKeySizeBytes(32).setVariant(NO_PREFIX).build();
110     assertThat(parameters1).isNotEqualTo(parameters2);
111     assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode());
112 
113     parameters2 = AesGcmSivParameters.builder().setKeySizeBytes(16).setVariant(TINK).build();
114     assertThat(parameters1).isNotEqualTo(parameters2);
115     assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode());
116 
117     parameters2 = AesGcmSivParameters.builder().setKeySizeBytes(16).setVariant(CRUNCHY).build();
118     assertThat(parameters1).isNotEqualTo(parameters2);
119     assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode());
120   }
121 }
122