2323package eu .webeid .security .validator .versionvalidators ;
2424
2525import eu .webeid .security .authtoken .SupportedSignatureAlgorithm ;
26+ import eu .webeid .security .authtoken .UnverifiedSigningCertificate ;
2627import eu .webeid .security .authtoken .WebEidAuthToken ;
2728import eu .webeid .security .certificate .CertificateLoader ;
28- import eu .webeid .security .authtoken .UnverifiedSigningCertificate ;
2929import eu .webeid .security .exceptions .AuthTokenException ;
3030import eu .webeid .security .exceptions .AuthTokenParseException ;
3131import eu .webeid .security .exceptions .CertificateDecodingException ;
4848import java .security .cert .X509Certificate ;
4949import java .util .ArrayList ;
5050import java .util .Arrays ;
51- import java .util .Iterator ;
5251import java .util .List ;
5352import java .util .Set ;
5453
@@ -93,12 +92,8 @@ protected String getSupportedFormatPrefix() {
9392 @ Override
9493 public X509Certificate validate (WebEidAuthToken token , String currentChallengeNonce ) throws AuthTokenException {
9594 final X509Certificate subjectCertificate = validateV1 (token , currentChallengeNonce );
96- final List <X509Certificate > signingCertificates = validateSigningCertificatesExist (token );
97- final List <UnverifiedSigningCertificate > unverifiedSigningCertificates = token .getUnverifiedSigningCertificates ();
98- Iterator <UnverifiedSigningCertificate > unverifiedIterator = unverifiedSigningCertificates .iterator ();
99- for (X509Certificate signingCertificate : signingCertificates ) {
100- UnverifiedSigningCertificate unverifiedSigningCertificate = unverifiedIterator .next ();
101- validateSupportedSignatureAlgorithms (unverifiedSigningCertificate );
95+ final List <X509Certificate > signingCertificates = validateSigningCertificates (token );
96+ for (X509Certificate signingCertificate : signingCertificates ) {
10297 validateSameSubject (subjectCertificate , signingCertificate );
10398 validateSameIssuer (subjectCertificate , signingCertificate );
10499 validateSigningCertificateValidity (signingCertificate );
@@ -116,7 +111,11 @@ private static void validateSupportedSignatureAlgorithms(UnverifiedSigningCertif
116111 }
117112
118113 boolean hasInvalid = algorithms .stream ().anyMatch (algorithm ->
119- !SUPPORTED_SIGNING_CRYPTO_ALGORITHMS .contains (algorithm .getCryptoAlgorithm ()) ||
114+ algorithm == null ||
115+ algorithm .getCryptoAlgorithm () == null ||
116+ algorithm .getHashFunction () == null ||
117+ algorithm .getPaddingScheme () == null ||
118+ !SUPPORTED_SIGNING_CRYPTO_ALGORITHMS .contains (algorithm .getCryptoAlgorithm ()) ||
120119 !SUPPORTED_SIGNING_HASH_FUNCTIONS .contains (algorithm .getHashFunction ()) ||
121120 !SUPPORTED_SIGNING_PADDING_SCHEMES .contains (algorithm .getPaddingScheme ())
122121 );
@@ -126,21 +125,21 @@ private static void validateSupportedSignatureAlgorithms(UnverifiedSigningCertif
126125 }
127126 }
128127
129- private static List <X509Certificate > validateSigningCertificatesExist (WebEidAuthToken token ) throws AuthTokenParseException , CertificateDecodingException {
128+ private static List <X509Certificate > validateSigningCertificates (WebEidAuthToken token ) throws AuthTokenParseException , CertificateDecodingException {
130129 List <UnverifiedSigningCertificate > signingCertificates = token .getUnverifiedSigningCertificates ();
131130
132131 if (signingCertificates == null || signingCertificates .isEmpty ()) {
133- throw new AuthTokenParseException ("'unverifiedSigningCertificates' field is missing, null or empty for format 'web-eid:1.1'" );
132+ throw new AuthTokenParseException ("'unverifiedSigningCertificates' contains a null or empty entry for format 'web-eid:1.1'" );
134133 }
135134
136135 List <X509Certificate > result = new ArrayList <>();
137136
138137 for (UnverifiedSigningCertificate certificate : signingCertificates ) {
139- if (certificate == null || isNullOrEmpty (certificate .getUnverifiedSigningCertificate ())) {
140- throw new AuthTokenParseException ("'unverifiedSigningCertificates' field is missing, null or empty for format 'web-eid:1.1'" );
138+ if (certificate == null || isNullOrEmpty (certificate .getCertificate ())) {
139+ throw new AuthTokenParseException ("'unverifiedSigningCertificates' contains a null or empty entry for format 'web-eid:1.1'" );
141140 }
142-
143- result .add (CertificateLoader .decodeCertificateFromBase64 (certificate .getUnverifiedSigningCertificate ()));
141+ validateSupportedSignatureAlgorithms ( certificate );
142+ result .add (CertificateLoader .decodeCertificateFromBase64 (certificate .getCertificate ()));
144143 }
145144
146145 return result ;
0 commit comments