1- /*
2- * Copyright (c) 2020-2025 Estonian Information System Authority
3- *
4- * Permission is hereby granted, free of charge, to any person obtaining a copy
5- * of this software and associated documentation files (the "Software"), to deal
6- * in the Software without restriction, including without limitation the rights
7- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8- * copies of the Software, and to permit persons to whom the Software is
9- * furnished to do so, subject to the following conditions:
10- *
11- * The above copyright notice and this permission notice shall be included in all
12- * copies or substantial portions of the Software.
13- *
14- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20- * SOFTWARE.
21- */
22-
231package eu .webeid .security .validator ;
242
253import eu .webeid .security .authtoken .SupportedSignatureAlgorithm ;
3210import java .security .cert .X509Certificate ;
3311import java .util .List ;
3412import java .util .Set ;
13+ import java .util .function .Supplier ;
3514
3615import static eu .webeid .security .util .Strings .isNullOrEmpty ;
3716
3817public class NfcAuthTokenValidator {
3918
4019 private final SubjectCertificateValidatorBatch simpleSubjectCertificateValidators ;
41- private final SubjectCertificateValidatorBatch certTrustValidators ;
20+ private final Supplier < SubjectCertificateValidatorBatch > certTrustValidatorsSupplier ;
4221
4322 NfcAuthTokenValidator (
4423 SubjectCertificateValidatorBatch simpleSubjectCertificateValidators ,
45- SubjectCertificateValidatorBatch certTrustValidators
24+ Supplier < SubjectCertificateValidatorBatch > certTrustValidatorsSupplier
4625 ) {
4726 this .simpleSubjectCertificateValidators = simpleSubjectCertificateValidators ;
48- this .certTrustValidators = certTrustValidators ;
27+ this .certTrustValidatorsSupplier = certTrustValidatorsSupplier ;
4928 }
5029
5130 void validate (WebEidAuthToken token , X509Certificate subjectCertificate ) throws AuthTokenException {
@@ -59,19 +38,20 @@ void validate(WebEidAuthToken token, X509Certificate subjectCertificate) throws
5938
6039 validateSupportedSignatureAlgorithms (token .getSupportedSignatureAlgorithms ());
6140
62- final X509Certificate signingCertificate = CertificateLoader .decodeCertificateFromBase64 (token .getUnverifiedSigningCertificate ());
41+ final X509Certificate signingCertificate =
42+ CertificateLoader .decodeCertificateFromBase64 (token .getUnverifiedSigningCertificate ());
6343
6444 if (!subjectCertificate .getSubjectX500Principal ().equals (signingCertificate .getSubjectX500Principal ())) {
6545 throw new AuthTokenParseException ("Signing certificate subject does not match authentication certificate subject" );
6646 }
6747
6848 simpleSubjectCertificateValidators .executeFor (signingCertificate );
69- certTrustValidators .executeFor (signingCertificate );
49+ certTrustValidatorsSupplier . get () .executeFor (signingCertificate );
7050 }
7151
7252 private static void validateSupportedSignatureAlgorithms (List <SupportedSignatureAlgorithm > algorithms ) throws AuthTokenParseException {
7353 boolean hasInvalid = algorithms .stream ().anyMatch (supportedSignatureAlgorithm ->
74- !isValidCryptoAlgorithm (supportedSignatureAlgorithm .getCryptoAlgorithm ())
54+ !isValidCryptoAlgorithm (supportedSignatureAlgorithm .getCryptoAlgorithm ())
7555 || !isValidHashFunction (supportedSignatureAlgorithm .getHashFunction ())
7656 || !isValidPaddingScheme (supportedSignatureAlgorithm .getPaddingScheme ())
7757 );
0 commit comments