package signatures.chapter5; import java.io.IOException; import java.security.GeneralSecurityException; import java.security.Security; import java.security.cert.X509Certificate; import java.util.ArrayList; import org.bouncycastle.jce.provider.BouncyCastleProvider; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.log.SysoLogger; import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.security.CertificateInfo; import com.itextpdf.text.pdf.security.PdfPKCS7; public class C5_05_CheckLTV { public static final String EXAMPLE1 = "results/chapter5/ltv_1.pdf"; public static final String EXAMPLE2 = "results/chapter5/ltv_2.pdf"; public static final String EXAMPLE3 = "results/chapter5/ltv_3.pdf"; public static final String EXAMPLE4 = "results/chapter5/ltv_4.pdf"; public PdfPKCS7 verifySignature(AcroFields fields, String name) throws GeneralSecurityException, IOException { System.out.println("Signature covers whole document: " + fields.signatureCoversWholeDocument(name)); System.out.println("Document revision: " + fields.getRevision(name) + " of " + fields.getTotalRevisions()); PdfPKCS7 pkcs7 = fields.verifySignature(name); System.out.println("Integrity check OK? " + pkcs7.verify()); System.out.println("Digest algorithm: " + pkcs7.getHashAlgorithm()); System.out.println("Encryption algorithm: " + pkcs7.getEncryptionAlgorithm()); System.out.println("Filter subtype: " + pkcs7.getFilterSubtype()); X509Certificate cert = (X509Certificate) pkcs7.getSigningCertificate(); System.out.println("Name of the signer: " + CertificateInfo.getSubjectFields(cert).getField("CN")); return pkcs7; } public void verifySignatures(String path) throws IOException, GeneralSecurityException { System.out.println(path); PdfReader reader = new PdfReader(path); AcroFields fields = reader.getAcroFields(); ArrayList names = fields.getSignatureNames(); for (String name : names) { System.out.println("===== " + name + " ====="); verifySignature(fields, name); } System.out.println(); } public static void main(String[] args) throws IOException, GeneralSecurityException { LoggerFactory.getInstance().setLogger(new SysoLogger()); BouncyCastleProvider provider = new BouncyCastleProvider(); Security.addProvider(provider); C5_05_CheckLTV app = new C5_05_CheckLTV(); app.verifySignatures(EXAMPLE1); app.verifySignatures(EXAMPLE2); app.verifySignatures(EXAMPLE3); app.verifySignatures(EXAMPLE4); } }