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.jwt; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import org.junit.Test; 22 import org.junit.runner.RunWith; 23 import org.junit.runners.JUnit4; 24 25 @RunWith(JUnit4.class) 26 public final class JwtHmacParametersTest { 27 @Test buildParametersAndGetProperties()28 public void buildParametersAndGetProperties() throws Exception { 29 JwtHmacParameters parameters = 30 JwtHmacParameters.builder() 31 .setKeySizeBytes(16) 32 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 33 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 34 .build(); 35 assertThat(parameters.hasIdRequirement()).isFalse(); 36 assertThat(parameters.getKeySizeBytes()).isEqualTo(16); 37 assertThat(parameters.getKidStrategy()).isEqualTo(JwtHmacParameters.KidStrategy.IGNORED); 38 assertThat(parameters.getAlgorithm()).isEqualTo(JwtHmacParameters.Algorithm.HS256); 39 assertThat(parameters.hasIdRequirement()).isFalse(); 40 assertThat(parameters.allowKidAbsent()).isTrue(); 41 } 42 43 @Test buildParametersAndGetProperties_differentAlgorithm()44 public void buildParametersAndGetProperties_differentAlgorithm() throws Exception { 45 JwtHmacParameters parameters = 46 JwtHmacParameters.builder() 47 .setKeySizeBytes(16) 48 .setAlgorithm(JwtHmacParameters.Algorithm.HS512) 49 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 50 .build(); 51 assertThat(parameters.getAlgorithm()).isEqualTo(JwtHmacParameters.Algorithm.HS512); 52 } 53 54 @Test buildParametersAndGetProperties_kidCustom()55 public void buildParametersAndGetProperties_kidCustom() throws Exception { 56 JwtHmacParameters parameters = 57 JwtHmacParameters.builder() 58 .setKeySizeBytes(16) 59 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 60 .setKidStrategy(JwtHmacParameters.KidStrategy.CUSTOM) 61 .build(); 62 assertThat(parameters.getKidStrategy()).isEqualTo(JwtHmacParameters.KidStrategy.CUSTOM); 63 assertThat(parameters.hasIdRequirement()).isFalse(); 64 assertThat(parameters.allowKidAbsent()).isTrue(); 65 } 66 67 @Test buildParametersAndGetProperties_kidBase64()68 public void buildParametersAndGetProperties_kidBase64() throws Exception { 69 JwtHmacParameters parameters = 70 JwtHmacParameters.builder() 71 .setKeySizeBytes(16) 72 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 73 .setKidStrategy(JwtHmacParameters.KidStrategy.BASE64_ENCODED_KEY_ID) 74 .build(); 75 assertThat(parameters.getKidStrategy()).isEqualTo(JwtHmacParameters.KidStrategy.BASE64_ENCODED_KEY_ID); 76 assertThat(parameters.hasIdRequirement()).isTrue(); 77 assertThat(parameters.allowKidAbsent()).isFalse(); 78 } 79 80 @Test buildParameters_differentKeySize()81 public void buildParameters_differentKeySize() throws Exception { 82 JwtHmacParameters parameters = 83 JwtHmacParameters.builder() 84 .setKeySizeBytes(17) 85 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 86 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 87 .build(); 88 assertThat(parameters.getKeySizeBytes()).isEqualTo(17); 89 } 90 91 @Test testEqualsTwoInstances()92 public void testEqualsTwoInstances() throws Exception { 93 JwtHmacParameters parameters1 = 94 JwtHmacParameters.builder() 95 .setKeySizeBytes(16) 96 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 97 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 98 .build(); 99 JwtHmacParameters parameters2 = 100 JwtHmacParameters.builder() 101 .setKeySizeBytes(16) 102 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 103 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 104 .build(); 105 assertThat(parameters1).isEqualTo(parameters2); 106 assertThat(parameters1.hashCode()).isEqualTo(parameters2.hashCode()); 107 } 108 109 @Test testEqualsHashCodeDependsOnKeySize()110 public void testEqualsHashCodeDependsOnKeySize() throws Exception { 111 JwtHmacParameters parameters1 = 112 JwtHmacParameters.builder() 113 .setKeySizeBytes(16) 114 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 115 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 116 .build(); 117 JwtHmacParameters parameters2 = 118 JwtHmacParameters.builder() 119 .setKeySizeBytes(17) 120 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 121 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 122 .build(); 123 assertThat(parameters1).isNotEqualTo(parameters2); 124 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 125 } 126 127 @Test testEqualsHashCodeDependsOnAlgorithm()128 public void testEqualsHashCodeDependsOnAlgorithm() throws Exception { 129 JwtHmacParameters parameters1 = 130 JwtHmacParameters.builder() 131 .setKeySizeBytes(16) 132 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 133 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 134 .build(); 135 JwtHmacParameters parameters2 = 136 JwtHmacParameters.builder() 137 .setKeySizeBytes(16) 138 .setAlgorithm(JwtHmacParameters.Algorithm.HS384) 139 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 140 .build(); 141 assertThat(parameters1).isNotEqualTo(parameters2); 142 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 143 } 144 145 @Test testEqualsHashCodeDependsOnKidStrategy()146 public void testEqualsHashCodeDependsOnKidStrategy() throws Exception { 147 JwtHmacParameters parameters1 = 148 JwtHmacParameters.builder() 149 .setKeySizeBytes(16) 150 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 151 .setKidStrategy(JwtHmacParameters.KidStrategy.IGNORED) 152 .build(); 153 JwtHmacParameters parameters2 = 154 JwtHmacParameters.builder() 155 .setKeySizeBytes(16) 156 .setAlgorithm(JwtHmacParameters.Algorithm.HS256) 157 .setKidStrategy(JwtHmacParameters.KidStrategy.BASE64_ENCODED_KEY_ID) 158 .build(); 159 assertThat(parameters1).isNotEqualTo(parameters2); 160 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 161 } 162 } 163