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.assertThrows; 22 import static org.junit.Assert.assertTrue; 23 24 import com.google.crypto.tink.util.Bytes; 25 import com.google.crypto.tink.util.SecretBytes; 26 import java.security.GeneralSecurityException; 27 import org.junit.Test; 28 import org.junit.runner.RunWith; 29 import org.junit.runners.JUnit4; 30 31 @RunWith(JUnit4.class) 32 public final class LegacyKmsAeadKeyTest { 33 34 @Test createKeyAndGetProperties()35 public void createKeyAndGetProperties() throws Exception { 36 LegacyKmsAeadParameters parameters = LegacyKmsAeadParameters.create("someArbitrarykeyUri223"); 37 assertThat(parameters.keyUri()).isEqualTo("someArbitrarykeyUri223"); 38 assertThat(parameters.variant()).isEqualTo(LegacyKmsAeadParameters.Variant.NO_PREFIX); 39 40 LegacyKmsAeadKey key = LegacyKmsAeadKey.create(parameters); 41 42 assertThat(key.getOutputPrefix().size()).isEqualTo(0); 43 assertThat(key.getParameters()).isEqualTo(parameters); 44 assertThat(key.getIdRequirementOrNull()).isNull(); 45 } 46 47 @Test createNoPrefixKeyAndGetProperties()48 public void createNoPrefixKeyAndGetProperties() throws Exception { 49 LegacyKmsAeadParameters parameters = 50 LegacyKmsAeadParameters.create( 51 "someArbitrarykeyUri223", LegacyKmsAeadParameters.Variant.NO_PREFIX); 52 assertThat(parameters.keyUri()).isEqualTo("someArbitrarykeyUri223"); 53 assertThat(parameters.variant()).isEqualTo(LegacyKmsAeadParameters.Variant.NO_PREFIX); 54 55 LegacyKmsAeadKey key = LegacyKmsAeadKey.create(parameters, null); 56 57 assertThat(key.getOutputPrefix().size()).isEqualTo(0); 58 assertThat(key.getParameters()).isEqualTo(parameters); 59 assertThat(key.getIdRequirementOrNull()).isNull(); 60 } 61 62 @Test createTinkKeyAndGetProperties()63 public void createTinkKeyAndGetProperties() throws Exception { 64 LegacyKmsAeadParameters parameters = 65 LegacyKmsAeadParameters.create( 66 "someArbitrarykeyUri223", LegacyKmsAeadParameters.Variant.TINK); 67 assertThat(parameters.keyUri()).isEqualTo("someArbitrarykeyUri223"); 68 assertThat(parameters.variant()).isEqualTo(LegacyKmsAeadParameters.Variant.TINK); 69 70 LegacyKmsAeadKey key = LegacyKmsAeadKey.create(parameters, 0x0708090a); 71 72 assertThat(key.getOutputPrefix()) 73 .isEqualTo(Bytes.copyFrom(new byte[] {0x01, 0x07, 0x08, 0x09, 0x0a})); 74 assertThat(key.getParameters()).isEqualTo(parameters); 75 assertThat(key.getIdRequirementOrNull()).isEqualTo(0x708090a); 76 } 77 78 @Test wrongIdRequirement_throws()79 public void wrongIdRequirement_throws() throws Exception { 80 LegacyKmsAeadParameters parametersNoPrefix = 81 LegacyKmsAeadParameters.create("keyUri1", LegacyKmsAeadParameters.Variant.NO_PREFIX); 82 LegacyKmsAeadParameters parametersTink = 83 LegacyKmsAeadParameters.create("keyUri2", LegacyKmsAeadParameters.Variant.TINK); 84 85 assertThrows( 86 GeneralSecurityException.class, 87 () -> LegacyKmsAeadKey.create(parametersNoPrefix, /* idRequirement= */ 0x0708090a)); 88 assertThrows( 89 GeneralSecurityException.class, 90 () -> LegacyKmsAeadKey.create(parametersTink, /* idRequirement= */ null)); 91 assertThrows(GeneralSecurityException.class, () -> LegacyKmsAeadKey.create(parametersTink)); 92 } 93 94 @Test testNoPrefixEqualKey()95 public void testNoPrefixEqualKey() throws Exception { 96 LegacyKmsAeadParameters parameters1 = LegacyKmsAeadParameters.create("someArbitrarykeyUri223"); 97 LegacyKmsAeadParameters parameters1Copy = 98 LegacyKmsAeadParameters.create("someArbitrarykeyUri223"); 99 LegacyKmsAeadParameters parameters2 = LegacyKmsAeadParameters.create("someArbitrarykeyUri334"); 100 101 LegacyKmsAeadKey key1 = LegacyKmsAeadKey.create(parameters1); 102 LegacyKmsAeadKey key1Copy = LegacyKmsAeadKey.create(parameters1Copy); 103 LegacyKmsAeadKey key2 = LegacyKmsAeadKey.create(parameters2); 104 105 assertTrue(key1.equalsKey(key1Copy)); 106 assertFalse(key1.equalsKey(key2)); 107 } 108 109 @Test testTinkEqualKey()110 public void testTinkEqualKey() throws Exception { 111 LegacyKmsAeadParameters parametersTink = 112 LegacyKmsAeadParameters.create("keyUri", LegacyKmsAeadParameters.Variant.TINK); 113 LegacyKmsAeadKey keyTink = LegacyKmsAeadKey.create(parametersTink, /* idRequirement= */ 123); 114 LegacyKmsAeadKey keyTinkCopy = 115 LegacyKmsAeadKey.create( 116 LegacyKmsAeadParameters.create("keyUri", LegacyKmsAeadParameters.Variant.TINK), 117 /* idRequirement= */ 123); 118 LegacyKmsAeadKey keyTink2 = LegacyKmsAeadKey.create(parametersTink, /* idRequirement= */ 234); 119 LegacyKmsAeadKey keyNoPrefix = 120 LegacyKmsAeadKey.create( 121 LegacyKmsAeadParameters.create("keyUri", LegacyKmsAeadParameters.Variant.NO_PREFIX), 122 /* idRequirement= */ null); 123 124 assertTrue(keyTink.equalsKey(keyTinkCopy)); 125 assertFalse(keyTink.equalsKey(keyTink2)); 126 assertFalse(keyTink.equalsKey(keyNoPrefix)); 127 } 128 129 @Test testDifferentKeyTypesEquality_fails()130 public void testDifferentKeyTypesEquality_fails() throws Exception { 131 LegacyKmsAeadParameters parameters = LegacyKmsAeadParameters.create("someArbitrarykeyUri223"); 132 LegacyKmsAeadKey key = LegacyKmsAeadKey.create(parameters); 133 134 XChaCha20Poly1305Key xChaCha20Poly1305Key = 135 XChaCha20Poly1305Key.create(SecretBytes.randomBytes(32)); 136 137 assertThat(key.equalsKey(xChaCha20Poly1305Key)).isFalse(); 138 } 139 } 140