Skip to content

Commit a04960b

Browse files
NFC-157 Make v1.1 signing certificates optional
Signed-off-by: Sander Kondratjev <sander.kondratjev@nortal.com>
1 parent cdd39c5 commit a04960b

3 files changed

Lines changed: 39 additions & 6 deletions

File tree

src/main/java/eu/webeid/security/validator/versionvalidators/AuthTokenVersion11Validator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,12 @@ private static void validateSupportedSignatureAlgorithms(UnverifiedSigningCertif
128128
private static List<X509Certificate> validateSigningCertificates(WebEidAuthToken token) throws AuthTokenParseException, CertificateDecodingException {
129129
List<UnverifiedSigningCertificate> signingCertificates = token.getUnverifiedSigningCertificates();
130130

131-
if (signingCertificates == null || signingCertificates.isEmpty()) {
132-
throw new AuthTokenParseException("'unverifiedSigningCertificates' field is missing, null or empty for format 'web-eid:1.1'");
131+
if (signingCertificates == null) {
132+
return List.of();
133+
}
134+
135+
if (signingCertificates.isEmpty()) {
136+
throw new AuthTokenParseException("'unverifiedSigningCertificates' field is empty for format 'web-eid:1.1'");
133137
}
134138

135139
List<X509Certificate> result = new ArrayList<>();

src/test/java/eu/webeid/security/validator/versionvalidators/AuthTokenV11CertificateTest.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ void whenValidV11Token_thenValidationSucceeds() {
115115
}
116116

117117
@Test
118-
void whenV11SigningCertificateFieldIsMissing_thenValidationFails() throws Exception {
118+
void whenV11SigningCertificateFieldIsMissing_thenValidationSucceeds() throws Exception {
119119
ObjectMapper mapper = new ObjectMapper();
120120
ObjectNode node = (ObjectNode) mapper.readTree(V11_AUTH_TOKEN);
121121
node.remove("unverifiedSigningCertificates");
@@ -124,9 +124,24 @@ void whenV11SigningCertificateFieldIsMissing_thenValidationFails() throws Except
124124
AuthTokenVersion11Validator spyValidator = spyAuthTokenVersion11Validator();
125125
doReturn(mock(X509Certificate.class)).when(spyValidator).validateV1(any(), any());
126126

127+
assertThatCode(() -> spyValidator.validate(token, VALID_CHALLENGE_NONCE))
128+
.doesNotThrowAnyException();
129+
}
130+
131+
@Test
132+
void whenV11SigningCertificateFieldIsEmpty_thenValidationFails() throws Exception {
133+
ObjectMapper mapper = new ObjectMapper();
134+
ObjectNode node = (ObjectNode) mapper.readTree(V11_AUTH_TOKEN);
135+
node.putArray("unverifiedSigningCertificates"); // []
136+
137+
WebEidAuthToken token = OBJECT_READER.readValue(node.toString());
138+
139+
AuthTokenVersion11Validator spyValidator = spyAuthTokenVersion11Validator();
140+
doReturn(mock(X509Certificate.class)).when(spyValidator).validateV1(any(), any());
141+
127142
assertThatThrownBy(() -> spyValidator.validate(token, VALID_CHALLENGE_NONCE))
128143
.isInstanceOf(AuthTokenParseException.class)
129-
.hasMessage("'unverifiedSigningCertificates' field is missing, null or empty for format 'web-eid:1.1'");
144+
.hasMessage("'unverifiedSigningCertificates' field is empty for format 'web-eid:1.1'");
130145
}
131146

132147
@Test

src/test/java/eu/webeid/security/validator/versionvalidators/AuthTokenVersion11ValidatorTest.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import java.util.Set;
4747

4848
import static org.assertj.core.api.Assertions.assertThat;
49+
import static org.assertj.core.api.Assertions.assertThatCode;
4950
import static org.assertj.core.api.Assertions.assertThatThrownBy;
5051
import static org.mockito.ArgumentMatchers.any;
5152
import static org.mockito.Mockito.doReturn;
@@ -92,17 +93,30 @@ void whenFormatIsNullEmptyOrNotV11_thenSupportsReturnsFalse(String format) {
9293
}
9394

9495
@Test
95-
void whenUnverifiedSigningCertificatesMissing_thenValidationFails() throws Exception {
96+
void whenUnverifiedSigningCertificatesMissing_thenValidationSucceeds() throws Exception {
9697
WebEidAuthToken token = mock(WebEidAuthToken.class);
9798
when(token.getFormat()).thenReturn("web-eid:1.1");
9899
when(token.getUnverifiedSigningCertificates()).thenReturn(null);
99100

100101
AuthTokenVersion11Validator spyValidator = Mockito.spy(validator);
101102
doReturn(mock(X509Certificate.class)).when(spyValidator).validateV1(any(), any());
102103

104+
assertThatCode(() -> spyValidator.validate(token, "nonce"))
105+
.doesNotThrowAnyException();
106+
}
107+
108+
@Test
109+
void whenUnverifiedSigningCertificatesIsEmpty_thenValidationFails() throws Exception {
110+
WebEidAuthToken token = mock(WebEidAuthToken.class);
111+
when(token.getFormat()).thenReturn("web-eid:1.1");
112+
when(token.getUnverifiedSigningCertificates()).thenReturn(Collections.emptyList());
113+
114+
AuthTokenVersion11Validator spyValidator = Mockito.spy(validator);
115+
doReturn(mock(X509Certificate.class)).when(spyValidator).validateV1(any(), any());
116+
103117
assertThatThrownBy(() -> spyValidator.validate(token, "nonce"))
104118
.isInstanceOf(AuthTokenParseException.class)
105-
.hasMessage("'unverifiedSigningCertificates' field is missing, null or empty for format 'web-eid:1.1'");
119+
.hasMessage("'unverifiedSigningCertificates' field is empty for format 'web-eid:1.1'");
106120
}
107121

108122
@Test

0 commit comments

Comments
 (0)