Author: tilman
Date: Mon Jan 20 12:07:14 2025
New Revision: 1923257

URL: http://svn.apache.org/viewvc?rev=1923257&view=rev
Log:
PDFBOX-5936: make issuers a Set

Modified:
    
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java
    
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java

Modified: 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java?rev=1923257&r1=1923256&r2=1923257&view=diff
==============================================================================
--- 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java
 (original)
+++ 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java
 Mon Jan 20 12:07:14 2025
@@ -279,7 +279,7 @@ public class AddValidationInformation
         boolean isRevocationInfoFound = 
foundRevocationInformation.contains(certInfo.getCertificate());
         if (!isRevocationInfoFound)
         {
-            if (certInfo.getOcspUrl() != null && 
certInfo.getIssuerCertificate() != null)
+            if (certInfo.getOcspUrl() != null && 
!certInfo.getIssuerCertificates().isEmpty())
             {
                 isRevocationInfoFound = fetchOcspData(certInfo);
             }
@@ -328,7 +328,8 @@ public class AddValidationInformation
         }
         catch (OCSPException | CertificateProccessingException | IOException | 
URISyntaxException e)
         {
-            LOG.error("Failed fetching OCSP at {}", certInfo.getOcspUrl(), e);
+            LOG.error("Failed fetching OCSP at '{}' for '{}'", 
certInfo.getOcspUrl(), 
+                    certInfo.getCertificate().getSubjectX500Principal(), e);
             return false;
         }
         catch (RevokedCertificateException e)
@@ -371,13 +372,21 @@ public class AddValidationInformation
             CertificateProccessingException, RevokedCertificateException, 
URISyntaxException
     {
         X509Certificate certificate = certInfo.getCertificate();
-        X509Certificate issuerCertificate = certInfo.getIssuerCertificate();
-        String ocspURL = certInfo.getOcspUrl();
         if (ocspChecked.contains(certificate))
         {
             // This certificate has been OCSP-checked before
             return;
         }
+        for (X509Certificate issuerCertificate : 
certInfo.getIssuerCertificates())
+        {
+            addOcspData(certificate, issuerCertificate, certInfo.getOcspUrl());
+        }
+    }
+
+    private void addOcspData(X509Certificate certificate, X509Certificate 
issuerCertificate, String ocspURL)
+            throws IOException, OCSPException, CertificateProccessingException,
+            RevokedCertificateException, URISyntaxException
+    {
         OcspHelper ocspHelper = new OcspHelper(
                 certificate,
                 signDate.getTime(),

Modified: 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java?rev=1923257&r1=1923256&r2=1923257&view=diff
==============================================================================
--- 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java
 (original)
+++ 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java
 Mon Jan 20 12:07:14 2025
@@ -106,6 +106,9 @@ public class CertInformationCollector
     {
         rootCertInfo = new CertSignatureInformation();
 
+        // 
https://www.etsi.org/deliver/etsi_ts/102700_102799/10277804/01.01.02_60/ts_10277804v010102p.pdf
+        // The key of each entry in this dictionary is the base-16-encoded 
(uppercase)
+        // SHA1 digest of the signature to which it applies
         rootCertInfo.signatureHash = 
CertInformationHelper.getSha1Hash(signatureContent);
 
         try
@@ -251,7 +254,7 @@ public class CertInformationCollector
                 certificate.verify(issuer.getPublicKey(), 
SecurityProvider.getProvider());
                 LOG.info("Found issuer for Cert: {}\n{}",
                         certificate.getSubjectX500Principal(), 
issuer.getSubjectX500Principal());
-                certInfo.issuerCertificate = issuer;
+                certInfo.issuerCertificates.add(issuer);
                 certInfo.certChain = new CertSignatureInformation();
                 traverseChain(issuer, certInfo.certChain, maxDepth - 1);
                 ++count;
@@ -261,7 +264,7 @@ public class CertInformationCollector
                 // not the issuer
             }                
         }
-        if (certInfo.issuerCertificate == null)
+        if (certInfo.issuerCertificates.isEmpty())
         {
             throw new IOException(
                     "No Issuer Certificate found for Cert: '" +
@@ -412,7 +415,7 @@ public class CertInformationCollector
         private String ocspUrl;
         private String crlUrl;
         private String issuerUrl;
-        private X509Certificate issuerCertificate;
+        private final Set<X509Certificate> issuerCertificates = new 
HashSet<>();
         private CertSignatureInformation certChain;
         private CertSignatureInformation tsaCerts;
         private CertSignatureInformation alternativeCertChain;
@@ -447,9 +450,9 @@ public class CertInformationCollector
             return isSelfSigned;
         }
 
-        public X509Certificate getIssuerCertificate()
+        public Set<X509Certificate> getIssuerCertificates()
         {
-            return issuerCertificate;
+            return issuerCertificates;
         }
 
         public String getSignatureHash()


Reply via email to