• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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