package com.lowagie.text.pdf; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.InputStream; import java.security.Security; import java.util.ArrayList; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.lowagie.text.Document; import com.lowagie.text.PageSize; public class AcroFieldsTest { @Before public void createOpututDir() { PdfTestBase.createOutputDir(); } @Test public void testSetFields() throws Exception { singleTest(PdfTestBase.RESOURCES_DIR +"register.xfdf"); } @Test public void testListInSetFields() throws Exception { singleTest(PdfTestBase.RESOURCES_DIR +"list_register.xfdf"); } private void singleTest(String xfdfFileName) throws Exception { // merging the FDF file PdfReader pdfreader = new PdfReader(PdfTestBase.RESOURCES_DIR +"SimpleRegistrationForm.pdf"); PdfStamper stamp = new PdfStamper(pdfreader, new ByteArrayOutputStream()); XfdfReader fdfreader = new XfdfReader(xfdfFileName); AcroFields form = stamp.getAcroFields(); form.setFields(fdfreader); stamp.close(); } /** * This test fails, because signatureCoversWholeDocument does only check the * last signed block. */ @Test public void testGetSignatures() throws Exception { // for algorithm SHA256 (without dash) Security.addProvider(new BouncyCastleProvider()); InputStream moddedFile = AcroFieldsTest.class.getResourceAsStream("/siwa.pdf"); PdfReader reader = new PdfReader(moddedFile); Document document = new Document(PageSize.A4); ByteArrayOutputStream out = new ByteArrayOutputStream(); PdfWriter writer = PdfWriter.getInstance(document, out); AcroFields fields = new AcroFields(reader, writer); @SuppressWarnings("unchecked") ArrayList<String> names = fields.getSignatureNames(); Assert.assertEquals(1, names.size()); for (String signName : names) { Assert.assertFalse(fields.signatureCoversWholeDocument(signName)); PdfPKCS7 pdfPkcs7 = fields.verifySignature(signName, "BC"); Assert.assertTrue(pdfPkcs7.verify()); } } @Test(timeout = 1000) public void infiniteLoopTest() throws Exception { try (InputStream is = new FileInputStream("src/test/resources/pades_infinite_loop.pdf")) { PdfReader reader = new PdfReader(is); reader.getAcroFields(); reader.close(); } } }