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