You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2020/06/25 17:10:50 UTC

svn commit: r1879196 - /pdfbox/branches/issue45/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java

Author: tilman
Date: Thu Jun 25 17:10:50 2020
New Revision: 1879196

URL: http://svn.apache.org/viewvc?rev=1879196&view=rev
Log:
PDFBOX-3017: better focusing that timestamp is there when expected, and not when not expected; test late embedded timestamp

Modified:
    pdfbox/branches/issue45/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java

Modified: pdfbox/branches/issue45/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue45/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java?rev=1879196&r1=1879195&r2=1879196&view=diff
==============================================================================
--- pdfbox/branches/issue45/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java (original)
+++ pdfbox/branches/issue45/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java Thu Jun 25 17:10:50 2020
@@ -46,6 +46,7 @@ import org.apache.pdfbox.cos.COSDictiona
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSString;
 import org.apache.pdfbox.examples.interactive.form.CreateSimpleForm;
+import org.apache.pdfbox.examples.signature.CreateEmbeddedTimeStamp;
 import org.apache.pdfbox.examples.signature.CreateEmptySignatureForm;
 import org.apache.pdfbox.examples.signature.CreateSignature;
 import org.apache.pdfbox.examples.signature.CreateVisibleSignature;
@@ -146,9 +147,21 @@ public class TestCreateSignature
         signing.setExternalSigning(externallySign);
 
         final String fileName = getOutputFileName("signed{0}.pdf");
+        final String fileName2 = getOutputFileName("signed{0}-late-tsa.pdf");
         signing.signDetached(new File(inDir + "sign_me.pdf"), new File(outDir + fileName));
 
-        checkSignature(new File(inDir, "sign_me.pdf"), new File(outDir, fileName));
+        checkSignature(new File(inDir, "sign_me.pdf"), new File(outDir, fileName), false);
+
+        // Also test CreateEmbeddedTimeStamp if tsa URL is available
+        if (tsa == null || tsa.isEmpty())
+        {
+            System.err.println("No TSA URL defined, test skipped");
+            return;
+        }
+        
+        CreateEmbeddedTimeStamp tsaSigning = new CreateEmbeddedTimeStamp(tsa);
+        tsaSigning.embedTimeStamp(new File(outDir, fileName), new File(outDir, fileName2));
+        checkSignature(new File(outDir, fileName), new File(outDir, fileName2), true);
     }
 
     /**
@@ -218,7 +231,7 @@ public class TestCreateSignature
         CreateSignature signing2 = new CreateSignature(keystore, password.toCharArray());
         signing2.setExternalSigning(externallySign);
         signing2.signDetached(new File(inPath), new File(outPath), tsa);
-        checkSignature(new File(inPath), new File(outPath));
+        checkSignature(new File(inPath), new File(outPath), true);
         System.out.println("TSA test successful");
     }
     
@@ -252,7 +265,7 @@ public class TestCreateSignature
         signing.signPDF(new File(inPath), destFile, null);
         fis.close();
 
-        checkSignature(new File(inPath), destFile);
+        checkSignature(new File(inPath), destFile, false);
     }
 
     /**
@@ -296,7 +309,7 @@ public class TestCreateSignature
         signing1.setExternalSigning(false);
         signing1.signDetached(new File(filename), new File(filenameSigned1));
 
-        checkSignature(new File(filename), new File(filenameSigned1));
+        checkSignature(new File(filename), new File(filenameSigned1), false);
 
         PDDocument doc1 = PDDocument.load(new File(filenameSigned1));
         List<PDSignature> signatureDictionaries = doc1.getSignatureDictionaries();
@@ -312,7 +325,7 @@ public class TestCreateSignature
         signing2.signPDF(new File(filenameSigned1), new File(filenameSigned2), null, "Signature1");
         fis.close();
 
-        checkSignature(new File(filenameSigned1), new File(filenameSigned2));
+        checkSignature(new File(filenameSigned1), new File(filenameSigned2), false);
 
         PDDocument doc2 = PDDocument.load(new File(filenameSigned2));
         signatureDictionaries = doc2.getSignatureDictionaries();
@@ -326,7 +339,7 @@ public class TestCreateSignature
     }
 
     // This check fails with a file created with the code before PDFBOX-3011 was solved.
-    private void checkSignature(File origFile, File signedFile)
+    private void checkSignature(File origFile, File signedFile, boolean checkTimeStamp)
             throws IOException, CMSException, OperatorCreationException, GeneralSecurityException,
             TSPException
     {
@@ -383,10 +396,15 @@ public class TestCreateSignature
             }
 
             TimeStampToken timeStampToken = extractTimeStampTokenFromSignerInformation(signerInformation);
-            if (timeStampToken != null)
+            if (checkTimeStamp)
             {
+                Assert.assertNotNull(timeStampToken);
                 validateTimestampToken(timeStampToken);
             }
+            else
+            {
+                Assert.assertNull(timeStampToken);
+            }
         }
         document.close();
     }
@@ -508,7 +526,7 @@ public class TestCreateSignature
         final String fileNameResaved2 = getOutputFileName("SimpleForm_signed{0}_incrementallyresaved2.pdf");
         signing.signDetached(new File("target/SimpleForm.pdf"), new File(outDir + fileNameSigned));
 
-        checkSignature(new File("target/SimpleForm.pdf"), new File(outDir, fileNameSigned));
+        checkSignature(new File("target/SimpleForm.pdf"), new File(outDir, fileNameSigned), false);
 
         PDDocument doc = PDDocument.load(new File(outDir, fileNameSigned));
 
@@ -543,7 +561,7 @@ public class TestCreateSignature
         ((COSDictionary) field.getWidgets().get(0).getAppearance().getNormalAppearance().getCOSObject()).setNeedToBeUpdated(true);
         doc.saveIncremental(fileOutputStream);
         doc.close();
-        checkSignature(new File("target/SimpleForm.pdf"), new File(outDir, fileNameResaved1));
+        checkSignature(new File("target/SimpleForm.pdf"), new File(outDir, fileNameResaved1), false);
 
         doc = PDDocument.load(new File(outDir, fileNameResaved1));
 
@@ -583,7 +601,7 @@ public class TestCreateSignature
         doc.saveIncremental(fileOutputStream, objectsToWrite);
         doc.close();
 
-        checkSignature(new File("target/SimpleForm.pdf"), new File(outDir, fileNameResaved2));
+        checkSignature(new File("target/SimpleForm.pdf"), new File(outDir, fileNameResaved2), false);
         doc = PDDocument.load(new File(outDir, fileNameResaved2));
 
         field = doc.getDocumentCatalog().getAcroForm().getField("SampleField");
@@ -598,7 +616,6 @@ public class TestCreateSignature
         Assert.assertArrayEquals(expectedData.getData(), actualData.getData());
         doc.close();
     }
-}
 
     @Test
     public void testPDFBox4784() throws Exception
@@ -659,4 +676,3 @@ public class TestCreateSignature
         }
     }
 }
-