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 com.google.crypto.tink.internal.EllipticCurvesUtil; 22 import org.junit.Test; 23 import org.junit.runner.RunWith; 24 import org.junit.runners.JUnit4; 25 26 @RunWith(JUnit4.class) 27 public final class JwtEcdsaParametersTest { 28 @Test buildParametersAndGetProperties_es256()29 public void buildParametersAndGetProperties_es256() throws Exception { 30 JwtEcdsaParameters parameters = 31 JwtEcdsaParameters.builder() 32 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES256) 33 .setKidStrategy(JwtEcdsaParameters.KidStrategy.IGNORED) 34 .build(); 35 assertThat(parameters.getKidStrategy()).isEqualTo(JwtEcdsaParameters.KidStrategy.IGNORED); 36 assertThat(parameters.getAlgorithm()).isEqualTo(JwtEcdsaParameters.Algorithm.ES256); 37 assertThat(parameters.hasIdRequirement()).isFalse(); 38 assertThat(parameters.allowKidAbsent()).isTrue(); 39 } 40 41 @Test buildParametersAndGetProperties_es384()42 public void buildParametersAndGetProperties_es384() throws Exception { 43 JwtEcdsaParameters parameters = 44 JwtEcdsaParameters.builder() 45 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES384) 46 .setKidStrategy(JwtEcdsaParameters.KidStrategy.IGNORED) 47 .build(); 48 assertThat(parameters.getKidStrategy()).isEqualTo(JwtEcdsaParameters.KidStrategy.IGNORED); 49 assertThat(parameters.getAlgorithm()).isEqualTo(JwtEcdsaParameters.Algorithm.ES384); 50 assertThat(parameters.hasIdRequirement()).isFalse(); 51 assertThat(parameters.allowKidAbsent()).isTrue(); 52 } 53 54 @Test buildParametersAndGetProperties_es512()55 public void buildParametersAndGetProperties_es512() throws Exception { 56 JwtEcdsaParameters parameters = 57 JwtEcdsaParameters.builder() 58 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES512) 59 .setKidStrategy(JwtEcdsaParameters.KidStrategy.IGNORED) 60 .build(); 61 assertThat(parameters.getKidStrategy()).isEqualTo(JwtEcdsaParameters.KidStrategy.IGNORED); 62 assertThat(parameters.getAlgorithm()).isEqualTo(JwtEcdsaParameters.Algorithm.ES512); 63 assertThat(parameters.hasIdRequirement()).isFalse(); 64 assertThat(parameters.allowKidAbsent()).isTrue(); 65 } 66 67 @Test buildParametersAndGetProperties_kidCustom()68 public void buildParametersAndGetProperties_kidCustom() throws Exception { 69 JwtEcdsaParameters parameters = 70 JwtEcdsaParameters.builder() 71 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES256) 72 .setKidStrategy(JwtEcdsaParameters.KidStrategy.CUSTOM) 73 .build(); 74 assertThat(parameters.getKidStrategy()).isEqualTo(JwtEcdsaParameters.KidStrategy.CUSTOM); 75 assertThat(parameters.getAlgorithm()).isEqualTo(JwtEcdsaParameters.Algorithm.ES256); 76 assertThat(parameters.hasIdRequirement()).isFalse(); 77 assertThat(parameters.allowKidAbsent()).isTrue(); 78 } 79 80 @Test buildParametersAndGetProperties_kidBase64()81 public void buildParametersAndGetProperties_kidBase64() throws Exception { 82 JwtEcdsaParameters parameters = 83 JwtEcdsaParameters.builder() 84 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES256) 85 .setKidStrategy(JwtEcdsaParameters.KidStrategy.BASE64_ENCODED_KEY_ID) 86 .build(); 87 assertThat(parameters.getKidStrategy()) 88 .isEqualTo(JwtEcdsaParameters.KidStrategy.BASE64_ENCODED_KEY_ID); 89 assertThat(parameters.getAlgorithm()).isEqualTo(JwtEcdsaParameters.Algorithm.ES256); 90 assertThat(parameters.hasIdRequirement()).isTrue(); 91 assertThat(parameters.allowKidAbsent()).isFalse(); 92 } 93 94 @Test testEqualsTwoInstances()95 public void testEqualsTwoInstances() throws Exception { 96 JwtEcdsaParameters parameters1 = 97 JwtEcdsaParameters.builder() 98 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES256) 99 .setKidStrategy(JwtEcdsaParameters.KidStrategy.IGNORED) 100 .build(); 101 JwtEcdsaParameters parameters2 = 102 JwtEcdsaParameters.builder() 103 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES256) 104 .setKidStrategy(JwtEcdsaParameters.KidStrategy.IGNORED) 105 .build(); 106 assertThat(parameters1).isEqualTo(parameters2); 107 assertThat(parameters1.hashCode()).isEqualTo(parameters2.hashCode()); 108 } 109 110 @Test testEqualsHashCodeDependsOnAlgorithm()111 public void testEqualsHashCodeDependsOnAlgorithm() throws Exception { 112 JwtEcdsaParameters parameters1 = 113 JwtEcdsaParameters.builder() 114 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES256) 115 .setKidStrategy(JwtEcdsaParameters.KidStrategy.IGNORED) 116 .build(); 117 JwtEcdsaParameters parameters2 = 118 JwtEcdsaParameters.builder() 119 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES384) 120 .setKidStrategy(JwtEcdsaParameters.KidStrategy.IGNORED) 121 .build(); 122 assertThat(parameters1).isNotEqualTo(parameters2); 123 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 124 } 125 126 @Test testEqualsHashCodeDependsOnKidStrategy()127 public void testEqualsHashCodeDependsOnKidStrategy() throws Exception { 128 JwtEcdsaParameters parameters1 = 129 JwtEcdsaParameters.builder() 130 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES256) 131 .setKidStrategy(JwtEcdsaParameters.KidStrategy.IGNORED) 132 .build(); 133 JwtEcdsaParameters parameters2 = 134 JwtEcdsaParameters.builder() 135 .setAlgorithm(JwtEcdsaParameters.Algorithm.ES256) 136 .setKidStrategy(JwtEcdsaParameters.KidStrategy.BASE64_ENCODED_KEY_ID) 137 .build(); 138 assertThat(parameters1).isNotEqualTo(parameters2); 139 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 140 } 141 142 @Test testAlgorithmGetEcParamtersSpec()143 public void testAlgorithmGetEcParamtersSpec() throws Exception { 144 assertThat(JwtEcdsaParameters.Algorithm.ES256.getECParameterSpec()) 145 .isEqualTo(EllipticCurvesUtil.NIST_P256_PARAMS); 146 assertThat(JwtEcdsaParameters.Algorithm.ES384.getECParameterSpec()) 147 .isEqualTo(EllipticCurvesUtil.NIST_P384_PARAMS); 148 assertThat(JwtEcdsaParameters.Algorithm.ES512.getECParameterSpec()) 149 .isEqualTo(EllipticCurvesUtil.NIST_P521_PARAMS); 150 } 151 } 152