Skip to content

Commit 145bfac

Browse files
author
Kate Ivanova
committed
Improve code coverage
DEVSIX-5403
1 parent 60974f5 commit 145bfac

File tree

14 files changed

+273
-2
lines changed

14 files changed

+273
-2
lines changed

sign/src/main/java/com/itextpdf/signatures/PdfSignature.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ This file is part of the iText (R) project.
6060
*/
6161
public class PdfSignature extends PdfObjectWrapper<PdfDictionary> {
6262

63+
private static final long serialVersionUID = 8367728573140319531L;
64+
6365
/**
6466
* Creates new PdfSignature.
6567
*/
@@ -168,6 +170,23 @@ public PdfString getCert() {
168170
return getPdfObject().getAsString(PdfName.Cert);
169171
}
170172

173+
/**
174+
* Gets the /Cert entry value of this signature.
175+
* /Cert entry required when SubFilter is adbe.x509.rsa_sha1. May be array or byte string.
176+
*
177+
* @return the signature cert value
178+
*/
179+
public PdfObject getCertObject() {
180+
PdfString certAsStr = getPdfObject().getAsString(PdfName.Cert);
181+
PdfArray certAsArray = getPdfObject().getAsArray(PdfName.Cert);
182+
183+
if (certAsStr != null) {
184+
return certAsStr;
185+
} else {
186+
return certAsArray;
187+
}
188+
}
189+
171190
/**
172191
* Sets the /Name of the person signing the document.
173192
*

sign/src/main/java/com/itextpdf/signatures/SignatureUtil.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,9 +340,8 @@ public String getTranslatedFieldName(String name) {
340340
*
341341
* @param field the signature field name
342342
* @return an InputStream covering the revision. Returns null if it's not a signature field
343-
* @throws IOException signals that an I/O exception has occurred.
344343
*/
345-
public InputStream extractRevision(String field) throws IOException {
344+
public InputStream extractRevision(String field) {
346345
getSignatureNames();
347346
if (!sigNames.containsKey(field))
348347
return null;

sign/src/test/java/com/itextpdf/signatures/SignatureUtilTest.java

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,16 @@ This file is part of the iText (R) project.
4242
*/
4343
package com.itextpdf.signatures;
4444

45+
import com.itextpdf.kernel.PdfException;
4546
import com.itextpdf.kernel.pdf.PdfDocument;
4647
import com.itextpdf.kernel.pdf.PdfReader;
4748
import com.itextpdf.test.ExtendedITextTest;
4849
import com.itextpdf.test.annotations.type.IntegrationTest;
50+
51+
import java.security.Security;
52+
import org.bouncycastle.jce.provider.BouncyCastleProvider;
4953
import org.junit.Assert;
54+
import org.junit.BeforeClass;
5055
import org.junit.Test;
5156
import org.junit.experimental.categories.Category;
5257

@@ -58,6 +63,11 @@ public class SignatureUtilTest extends ExtendedITextTest {
5863

5964
private static final String sourceFolder = "./src/test/resources/com/itextpdf/signatures/SignatureUtilTest/";
6065

66+
@BeforeClass
67+
public static void before() {
68+
Security.addProvider(new BouncyCastleProvider());
69+
}
70+
6171
@Test
6272
public void getSignaturesTest01() throws IOException {
6373
String inPdf = sourceFolder + "simpleSignature.pdf";
@@ -168,4 +178,124 @@ public void notIndirectSigDictionaryTest() throws IOException {
168178

169179
Assert.assertTrue(signatureUtil.signatureCoversWholeDocument("Signature1"));
170180
}
181+
182+
@Test
183+
public void emptySignatureReadSignatureDataTest() throws IOException {
184+
String inPdf = sourceFolder + "emptySignature.pdf";
185+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
186+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
187+
188+
Assert.assertNull(signatureUtil.readSignatureData("Signature1", null));
189+
}
190+
191+
@Test
192+
public void readSignatureDataTest() throws IOException {
193+
String inPdf = sourceFolder + "simpleSignature.pdf";
194+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
195+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
196+
197+
Assert.assertNotNull(signatureUtil.readSignatureData("Signature1"));
198+
Assert.assertTrue(signatureUtil.readSignatureData("Signature1") instanceof PdfPKCS7);
199+
}
200+
201+
@Test
202+
public void readSignatureDataWithSpecialSubFilterTest() throws IOException {
203+
String inPdf = sourceFolder + "adbe.x509.rsa_sha1_signature.pdf";
204+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
205+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
206+
207+
Assert.assertNotNull(signatureUtil.readSignatureData("Signature1"));
208+
Assert.assertTrue(signatureUtil.readSignatureData("Signature1") instanceof PdfPKCS7);
209+
}
210+
211+
@Test
212+
public void byteRangeAndContentsEntriesTest() throws IOException {
213+
String inPdf = sourceFolder + "byteRangeAndContentsEntries.pdf";
214+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
215+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
216+
217+
Assert.assertThrows(PdfException.class,
218+
() -> signatureUtil.readSignatureData("Signature1"));
219+
}
220+
221+
@Test
222+
public void doesSignatureFieldExistTest() throws IOException {
223+
String inPdf = sourceFolder + "simpleSignature.pdf";
224+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
225+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
226+
227+
Assert.assertTrue(signatureUtil.doesSignatureFieldExist("Signature1"));
228+
}
229+
230+
@Test
231+
public void doesSignatureFieldExistEmptySignatureTest() throws IOException {
232+
String inPdf = sourceFolder + "emptySignature.pdf";
233+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
234+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
235+
236+
Assert.assertTrue(signatureUtil.doesSignatureFieldExist("Signature1"));
237+
}
238+
239+
@Test
240+
public void signatureInTextTypeFieldTest() throws IOException {
241+
String inPdf = sourceFolder + "signatureInTextTypeField.pdf";
242+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
243+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
244+
245+
Assert.assertFalse(signatureUtil.doesSignatureFieldExist("Signature1"));
246+
}
247+
248+
@Test
249+
public void getTotalRevisionsTest() throws IOException {
250+
String inPdf = sourceFolder + "simpleSignature.pdf";
251+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
252+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
253+
254+
Assert.assertEquals(1, signatureUtil.getTotalRevisions());
255+
}
256+
257+
@Test
258+
public void getRevisionTest() throws IOException {
259+
String inPdf = sourceFolder + "simpleSignature.pdf";
260+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
261+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
262+
263+
Assert.assertEquals(1, signatureUtil.getRevision("Signature1"));
264+
}
265+
266+
@Test
267+
public void getRevisionEmptyFieldsTest() throws IOException {
268+
String inPdf = sourceFolder + "emptySignature.pdf";
269+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
270+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
271+
272+
Assert.assertEquals(0, signatureUtil.getRevision("Signature1"));
273+
}
274+
275+
@Test
276+
public void getRevisionXfaFormTest() throws IOException {
277+
String inPdf = sourceFolder + "simpleSignatureWithXfa.pdf";
278+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
279+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
280+
281+
Assert.assertEquals(1, signatureUtil.getRevision("Signature1"));
282+
}
283+
284+
@Test
285+
public void extractRevisionTest() throws IOException {
286+
String inPdf = sourceFolder + "simpleSignature.pdf";
287+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
288+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
289+
290+
Assert.assertNotNull(signatureUtil.extractRevision("Signature1"));
291+
}
292+
293+
@Test
294+
public void extractRevisionNotSignatureFieldTest() throws IOException {
295+
String inPdf = sourceFolder + "signatureInTextTypeField.pdf";
296+
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inPdf));
297+
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
298+
299+
Assert.assertNull(signatureUtil.extractRevision("Signature1"));
300+
}
171301
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package com.itextpdf.signatures.sign;
2+
3+
import com.itextpdf.kernel.pdf.PdfArray;
4+
import com.itextpdf.kernel.pdf.PdfDocument;
5+
import com.itextpdf.kernel.pdf.PdfName;
6+
import com.itextpdf.kernel.pdf.PdfReader;
7+
import com.itextpdf.kernel.pdf.PdfString;
8+
import com.itextpdf.signatures.PdfSignature;
9+
import com.itextpdf.signatures.PdfSignatureApp;
10+
import com.itextpdf.signatures.SignatureUtil;
11+
import com.itextpdf.test.ExtendedITextTest;
12+
import com.itextpdf.test.annotations.type.UnitTest;
13+
14+
import java.io.IOException;
15+
import org.junit.Assert;
16+
import org.junit.Test;
17+
import org.junit.experimental.categories.Category;
18+
19+
@Category(UnitTest.class)
20+
public class PdfSignatureTest extends ExtendedITextTest {
21+
public static final String sourceFolder = "./src/test/resources/com/itextpdf/signatures/sign/PdfSignatureTest/";
22+
23+
@Test
24+
public void setByteRangeTest() throws IOException {
25+
try (PdfDocument doc = new PdfDocument(new PdfReader(
26+
sourceFolder + "simpleSignature.pdf"))) {
27+
28+
SignatureUtil sigUtil = new SignatureUtil(doc);
29+
PdfSignature signature = sigUtil.getSignature("Signature1");
30+
31+
int[] byteRange = {0, 141, 16526, 2494};
32+
signature.setByteRange(byteRange);
33+
34+
PdfArray expected = new PdfArray((new int[] {0, 141, 16526, 2494}));
35+
36+
Assert.assertArrayEquals(expected.toIntArray(), signature.getByteRange().toIntArray());
37+
}
38+
}
39+
40+
@Test
41+
public void setContentsTest() throws IOException {
42+
try (PdfDocument doc = new PdfDocument(new PdfReader(
43+
sourceFolder + "simpleSignature.pdf"))) {
44+
45+
SignatureUtil sigUtil = new SignatureUtil(doc);
46+
PdfSignature signature = sigUtil.getSignature("Signature1");
47+
48+
byte[] newContents = new PdfString("new iText signature").getValueBytes();
49+
signature.setContents(newContents);
50+
51+
Assert.assertEquals("new iText signature", signature.getContents().getValue());
52+
}
53+
}
54+
55+
@Test
56+
public void setAndGetCertTest() throws IOException {
57+
try (PdfDocument doc = new PdfDocument(new PdfReader(
58+
sourceFolder + "adbe.x509.rsa_sha1_signature.pdf"))) {
59+
60+
SignatureUtil sigUtil = new SignatureUtil(doc);
61+
PdfSignature signature = sigUtil.getSignature("Signature1");
62+
63+
byte[] certChain = new PdfString("Hello, iText!!").getValueBytes();
64+
signature.setCert(certChain);
65+
66+
Assert.assertEquals("Hello, iText!!", signature.getCertObject().toString());
67+
}
68+
}
69+
70+
@Test
71+
public void getCertObjectTest() throws IOException {
72+
try (PdfDocument doc = new PdfDocument(new PdfReader(
73+
sourceFolder + "adbe.x509.rsa_sha1_signature.pdf"))) {
74+
75+
SignatureUtil sigUtil = new SignatureUtil(doc);
76+
PdfSignature signature = sigUtil.getSignature("Signature1");
77+
78+
Assert.assertTrue(signature.getCertObject().isArray());
79+
}
80+
}
81+
82+
@Test
83+
public void setAndGetNameTest() throws IOException {
84+
try (PdfDocument doc = new PdfDocument(new PdfReader(
85+
sourceFolder + "simpleSignature.pdf"))) {
86+
87+
SignatureUtil sigUtil = new SignatureUtil(doc);
88+
PdfSignature signature = sigUtil.getSignature("Signature1");
89+
90+
Assert.assertNull(signature.getName());
91+
92+
String name = "iText person";
93+
signature.setName(name);
94+
95+
Assert.assertEquals(name, signature.getName());
96+
}
97+
}
98+
99+
@Test
100+
public void setSignatureCreatorTest() throws IOException {
101+
try (PdfDocument doc = new PdfDocument(new PdfReader(
102+
sourceFolder + "noPropBuilds.pdf"))) {
103+
104+
SignatureUtil sigUtil = new SignatureUtil(doc);
105+
PdfSignature signature = sigUtil.getSignature("Signature1");
106+
107+
Assert.assertNull(signature.getPdfObject().getAsDictionary(PdfName.Prop_Build));
108+
109+
signature.setSignatureCreator("iText.Name");
110+
111+
String propBuild = signature.getPdfObject().getAsDictionary(PdfName.Prop_Build)
112+
.getAsDictionary(PdfName.App).getAsName(PdfName.Name).getValue();
113+
114+
Assert.assertEquals("iText.Name", propBuild);
115+
}
116+
}
117+
118+
@Test
119+
public void pdfSignatureAppDefaultConstructorTest() {
120+
PdfSignatureApp signatureApp = new PdfSignatureApp();
121+
Assert.assertTrue(signatureApp.getPdfObject().isDictionary());
122+
}
123+
}

0 commit comments

Comments
 (0)