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

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

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

Modified: 
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java?rev=1923258&r1=1923257&r2=1923258&view=diff
==============================================================================
--- 
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java
 (original)
+++ 
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java
 Mon Jan 20 12:07:20 2025
@@ -307,7 +307,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);
             }
@@ -422,13 +422,21 @@ public class AddValidationInformation
             CertificateProccessingException, RevokedCertificateException
     {
         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
+    {
         OcspHelper ocspHelper = new OcspHelper(
                 certificate,
                 signDate.getTime(),

Modified: 
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java?rev=1923258&r1=1923257&r2=1923258&view=diff
==============================================================================
--- 
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java
 (original)
+++ 
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java
 Mon Jan 20 12:07:20 2025
@@ -108,6 +108,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
@@ -253,7 +256,7 @@ public class CertInformationCollector
                 certificate.verify(issuer.getPublicKey(), 
SecurityProvider.getProvider().getName());
                 LOG.info("Found issuer for Cert: " + 
certificate.getSubjectX500Principal()
                     + "\n" + issuer.getSubjectX500Principal());
-                certInfo.issuerCertificate = issuer;
+                certInfo.issuerCertificates.add(issuer);
                 certInfo.certChain = new CertSignatureInformation();
                 traverseChain(issuer, certInfo.certChain, maxDepth - 1);
                 ++count;
@@ -263,7 +266,7 @@ public class CertInformationCollector
                 // not the issuer
             }                
         }
-        if (certInfo.issuerCertificate == null)
+        if (certInfo.issuerCertificates.isEmpty())
         {
             throw new IOException(
                     "No Issuer Certificate found for Cert: '" +
@@ -416,7 +419,7 @@ public class CertInformationCollector
         private String ocspUrl;
         private String crlUrl;
         private String issuerUrl;
-        private X509Certificate issuerCertificate;
+        private Set<X509Certificate> issuerCertificates = new 
HashSet<X509Certificate>();
         private CertSignatureInformation certChain;
         private CertSignatureInformation tsaCerts;
         private CertSignatureInformation alternativeCertChain;
@@ -451,9 +454,9 @@ public class CertInformationCollector
             return isSelfSigned;
         }
 
-        public X509Certificate getIssuerCertificate()
+        public Set<X509Certificate> getIssuerCertificates()
         {
-            return issuerCertificate;
+            return issuerCertificates;
         }
 
         public String getSignatureHash()


Reply via email to