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.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 XAesGcmParametersTest { 29 private static final XAesGcmParameters.Variant NO_PREFIX = XAesGcmParameters.Variant.NO_PREFIX; 30 private static final XAesGcmParameters.Variant TINK = XAesGcmParameters.Variant.TINK; 31 32 @Test buildParameters_noPrefix()33 public void buildParameters_noPrefix() throws Exception { 34 XAesGcmParameters parameters = XAesGcmParameters.create(XAesGcmParameters.Variant.NO_PREFIX, 8); 35 assertThat(parameters.getVariant()).isEqualTo(NO_PREFIX); 36 assertThat(parameters.getSaltSizeBytes()).isEqualTo(8); 37 assertThat(parameters.hasIdRequirement()).isFalse(); 38 } 39 40 @Test buildParameters_tink()41 public void buildParameters_tink() throws Exception { 42 XAesGcmParameters parameters = XAesGcmParameters.create(XAesGcmParameters.Variant.TINK, 12); 43 assertThat(parameters.getVariant()).isEqualTo(TINK); 44 assertThat(parameters.getSaltSizeBytes()).isEqualTo(12); 45 assertThat(parameters.hasIdRequirement()).isTrue(); 46 } 47 48 @Test buildParameters_invalidSaltSize_throws()49 public void buildParameters_invalidSaltSize_throws() throws Exception { 50 assertThrows( 51 GeneralSecurityException.class, 52 () -> XAesGcmParameters.create(XAesGcmParameters.Variant.TINK, 7)); 53 assertThrows( 54 GeneralSecurityException.class, 55 () -> XAesGcmParameters.create(XAesGcmParameters.Variant.TINK, 13)); 56 } 57 58 @Test testEqualsAndEqualHashCode_noPrefix()59 public void testEqualsAndEqualHashCode_noPrefix() throws Exception { 60 XAesGcmParameters parametersNoPrefix0 = 61 XAesGcmParameters.create(XAesGcmParameters.Variant.NO_PREFIX, 8); 62 XAesGcmParameters parametersNoPrefix1 = 63 XAesGcmParameters.create(XAesGcmParameters.Variant.NO_PREFIX, 8); 64 assertThat(parametersNoPrefix0).isEqualTo(parametersNoPrefix1); 65 assertThat(parametersNoPrefix0.hashCode()).isEqualTo(parametersNoPrefix1.hashCode()); 66 } 67 68 @Test testEqualsAndEqualHashCode_tink()69 public void testEqualsAndEqualHashCode_tink() throws Exception { 70 XAesGcmParameters parametersTink0 = 71 XAesGcmParameters.create(XAesGcmParameters.Variant.TINK, 12); 72 XAesGcmParameters parametersTink1 = 73 XAesGcmParameters.create(XAesGcmParameters.Variant.TINK, 12); 74 assertThat(parametersTink0).isEqualTo(parametersTink1); 75 assertThat(parametersTink0.hashCode()).isEqualTo(parametersTink1.hashCode()); 76 } 77 78 @Test testEqualsAndEqualHashCode_different()79 public void testEqualsAndEqualHashCode_different() throws Exception { 80 XAesGcmParameters parametersNoPrefix = 81 XAesGcmParameters.create(XAesGcmParameters.Variant.NO_PREFIX, 8); 82 83 XAesGcmParameters parametersTink = XAesGcmParameters.create(XAesGcmParameters.Variant.TINK, 8); 84 85 86 assertThat(parametersNoPrefix).isNotEqualTo(parametersTink); 87 assertThat(parametersNoPrefix.hashCode()).isNotEqualTo(parametersTink.hashCode()); 88 89 assertThat(parametersTink).isNotEqualTo(parametersNoPrefix); 90 assertThat(parametersTink.hashCode()).isNotEqualTo(parametersNoPrefix.hashCode()); 91 92 XAesGcmParameters parametersTinkWithDifferentSalt = 93 XAesGcmParameters.create(XAesGcmParameters.Variant.TINK, 12); 94 assertThat(parametersTink).isNotEqualTo(parametersTinkWithDifferentSalt); 95 assertThat(parametersTink.hashCode()).isNotEqualTo(parametersTinkWithDifferentSalt.hashCode()); 96 } 97 } 98