From c45c60eecc2f4445ae552a870aa095039644420c Mon Sep 17 00:00:00 2001 From: tknall Date: Tue, 17 Jun 2008 06:33:31 +0000 Subject: (Default) configuration updated regarding new configuration keys. Update concerting exclusion of minimal layout profiles for verification. APIDemo updated. Many printStackTraces replaces with logger-messages. Web-Application: New error code (251) introduced: Textual signature of files with no extractable textual content (e.g. files that solely contain images) is prevented. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@293 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- src/main/java/demo/APIDemo.java | 181 +++++++++++++++++++++++++++++----------- 1 file changed, 132 insertions(+), 49 deletions(-) (limited to 'src/main/java/demo') diff --git a/src/main/java/demo/APIDemo.java b/src/main/java/demo/APIDemo.java index d4ce5e7..c2a989e 100644 --- a/src/main/java/demo/APIDemo.java +++ b/src/main/java/demo/APIDemo.java @@ -11,6 +11,7 @@ import at.gv.egiz.pdfas.api.PdfAs; import at.gv.egiz.pdfas.api.analyze.AnalyzeParameters; import at.gv.egiz.pdfas.api.analyze.AnalyzeResult; import at.gv.egiz.pdfas.api.commons.Constants; +import at.gv.egiz.pdfas.api.commons.SignatureProfile; import at.gv.egiz.pdfas.api.exceptions.PdfAsException; import at.gv.egiz.pdfas.api.io.DataSource; import at.gv.egiz.pdfas.api.sign.SignParameters; @@ -22,28 +23,38 @@ import at.gv.egiz.pdfas.framework.config.SettingsHelper; import at.gv.egiz.pdfas.framework.vfilter.VerificationFilterParameters; import at.gv.egiz.pdfas.io.FileBasedDataSink; import at.gv.egiz.pdfas.io.FileBasedDataSource; +import at.knowcenter.wag.egov.egiz.sig.SignatureTypeDefinition; +import at.knowcenter.wag.egov.egiz.sig.SignatureTypes; +/** + * Performs signatures and verifications with the pdfas api. + * @author tknall + */ public final class APIDemo { - + /** * Disable instantiation. */ private APIDemo() { } - + /** * Verifies a pdf document. - * @param configuration The folder containing the pdf-as work directory (including the configuration). - * @param source The signed pdf document. - * @param verifyDevice The device used for verification - * (see {@link Constants#SIGNATURE_DEVICE_MOA} and {@link Constants#SIGNATURE_DEVICE_BKU}). - * @throws PdfAsException Thrown in case of an error. - * @throws IOException Thrown in case of an i/o error. + * + * @param pdfasAPI + * The instantiated api. + * @param source + * The signed pdf document. + * @param verifyDevice + * The device used for verification (see + * {@link Constants#SIGNATURE_DEVICE_MOA} and + * {@link Constants#SIGNATURE_DEVICE_BKU}). + * @throws PdfAsException + * Thrown in case of an error. + * @throws IOException + * Thrown in case of an i/o error. */ - public static void verify(File configuration, File source, String verifyDevice) throws PdfAsException, IOException { - - // instantiate api - PdfAs pdfasAPI = PdfAsFactory.createPdfAs(configuration); + public static void verify(PdfAs pdfasAPI, File source, String verifyDevice) throws PdfAsException, IOException { // set source DataSource dataSource = new FileBasedDataSource(source, "application/pdf"); @@ -51,7 +62,7 @@ public final class APIDemo { // evaluate settings VerificationFilterParameters parameters = SettingsHelper.readVerificationFilterParametersFromSettings(); String verifyMode = Constants.VERIFY_MODE_FULL_CONSERVATIVE; - + if (parameters.extractBinarySignaturesOnly()) { verifyMode = Constants.VERIFY_MODE_BINARY_ONLY; } else if (parameters.assumeOnlySignatureUpdateBlocks()) { @@ -59,12 +70,12 @@ public final class APIDemo { } else { verifyMode = Constants.VERIFY_MODE_FULL_CONSERVATIVE; } - + // configure analyze parameters AnalyzeParameters analyzeParameters = new AnalyzeParameters(); analyzeParameters.setDocument(dataSource); analyzeParameters.setVerifyMode(verifyMode); - + // analyze System.out.println("Analyzing..."); AnalyzeResult analyzeResult = pdfasAPI.analyze(analyzeParameters); @@ -76,7 +87,7 @@ public final class APIDemo { vaap.setReturnHashInputData(true); vaap.setSignatureDevice(verifyDevice); vaap.setVerificationTime(null); - + // invoke verification System.out.println("Verifying..."); List verifyResults = pdfasAPI.verify(vaap).getResults(); @@ -90,30 +101,39 @@ public final class APIDemo { Main.formatVerifyResult(result, out); } out.flush(); - out.close(); } - + /** * Signs a pdf document. - * @param configuration The folder containing the pdf-as work directory (including the configuration). - * @param source The unsigned pdf document. - * @param signatureDevice The device used for signature - * (see {@link Constants#SIGNATURE_DEVICE_MOA} and {@link Constants#SIGNATURE_DEVICE_BKU}). - * @throws PdfAsException Thrown in case of an error. - * @throws IOException Thrown in case of an i/o error. - * @param destination The signed pdf document. - * @param signatureMode The mode used for signature (see {@link Constants#SIGNATURE_TYPE_BINARY} - * resp. {@link Constants#SIGNATURE_TYPE_TEXTUAL} or {@link Constants#SIGNATURE_TYPE_DETACHEDTEXTUAL}). - * @param signatureProfile The profile used for signature. - * @param signaturePos The position of the signature (see {@link SignaturePositioning}) or {@code null}. + * + * @param pdfasAPI + * The instantiated api. + * @param source + * The unsigned pdf document. + * @param signatureDevice + * The device used for signature (see + * {@link Constants#SIGNATURE_DEVICE_MOA} and + * {@link Constants#SIGNATURE_DEVICE_BKU}). + * @throws PdfAsException + * Thrown in case of an error. + * @throws IOException + * Thrown in case of an i/o error. + * @param destination + * The signed pdf document. + * @param signatureMode + * The mode used for signature (see + * {@link Constants#SIGNATURE_TYPE_BINARY} resp. + * {@link Constants#SIGNATURE_TYPE_TEXTUAL} or + * {@link Constants#SIGNATURE_TYPE_DETACHEDTEXTUAL}). + * @param signatureProfile + * The profile used for signature. + * @param signaturePos + * The position of the signature (see {@link SignaturePositioning}) + * or {@code null}. */ - private static void sign(File configuration, File source, File destination, - String signatureMode, String signatureDevice, String signatureProfile, - SignaturePositioning signaturePos) throws PdfAsException, IOException { - - // instantiate api - PdfAs pdfasAPI = PdfAsFactory.createPdfAs(configuration); + private static void sign(PdfAs pdfasAPI, File source, File destination, String signatureMode, String signatureDevice, String signatureProfile, SignaturePositioning signaturePos) + throws PdfAsException, IOException { // set source DataSource dataSource = new FileBasedDataSource(source, "application/pdf"); @@ -130,40 +150,103 @@ public final class APIDemo { signParameters.setSignatureProfileId(signatureProfile); signParameters.setSignaturePositioning(signaturePos); - // sign + // sign System.out.println("Signing..."); pdfasAPI.sign(signParameters); - + System.out.println("Successfully signed."); + + } + + /** + * Signs a test document with each available profile. Note that minimal layout profiles lead + * to an error textual signing the document. + */ + public static void signWithAllProfilesDemo() { + File configdir = new File("./work"); + File unsignedFile = new File("./test-files/blindtext.pdf"); + + String signatureMode = Constants.SIGNATURE_TYPE_TEXTUAL; + String signatureDevice = Constants.SIGNATURE_DEVICE_MOA; + SignaturePositioning signaturePos = null; + + try { + + // instantiate api + PdfAs pdfasAPI = PdfAsFactory.createPdfAs(configdir); + // warning: This method is not specified via api. It is only used to determine textual + // capable profiles + SignatureTypes sig_types = SignatureTypes.getInstance(); + + // ok, defined via api + Iterator profiles = pdfasAPI.getProfileInformation().iterator(); + while (profiles.hasNext()) { + SignatureProfile profile = (SignatureProfile) profiles.next(); + + SignatureTypeDefinition std = sig_types.getSignatureTypeDefinition(profile.getProfileId()); + String currentSignatureMode; + if (std.isTextExtractable()) { + currentSignatureMode = signatureMode; + } else { + currentSignatureMode = Constants.SIGNATURE_TYPE_BINARY; + } + + File signedFile = new File("./test-files/blindtext_" + currentSignatureMode + "-signed_" + profile.getProfileId() + ".pdf"); + + sign(pdfasAPI, unsignedFile, signedFile, currentSignatureMode, signatureDevice, profile.getProfileId(), signaturePos); + verify(pdfasAPI, signedFile, signatureDevice); + } + + } catch (PdfAsException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } /** - * Start a demo that signs a document and performs a verification afterwards. - * @param args The parameter(s). + * Signs a test document with a single profile. */ - public static void main(String[] args) { - + public static void signWithSingleProfileDemo() { File configdir = new File("./work"); File unsignedFile = new File("./test-files/blindtext.pdf"); - File signedFile = new File("./test-files/blindtext_signed.pdf"); - - String signatureMode = Constants.SIGNATURE_TYPE_BINARY; - String signatureDevice = Constants.SIGNATURE_DEVICE_MOA; + + String signatureMode = Constants.SIGNATURE_TYPE_BINARY; + String signatureDevice = Constants.SIGNATURE_DEVICE_MOA; String signatureProfile = "SIGNATURBLOCK_DE"; SignaturePositioning signaturePos = null; - + + File signedFile = new File("./test-files/blindtext_" + signatureMode + "-signed_" + signatureProfile + ".pdf"); + try { + + // instantiate api + PdfAs pdfasAPI = PdfAsFactory.createPdfAs(configdir); - sign(configdir, unsignedFile, signedFile, signatureMode, signatureDevice, signatureProfile, signaturePos); - verify(configdir, signedFile, signatureDevice); + sign(pdfasAPI, unsignedFile, signedFile, signatureMode, signatureDevice, signatureProfile, signaturePos); + verify(pdfasAPI, signedFile, signatureDevice); } catch (PdfAsException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } - + } + + /** + * Starts a demo that signs a document and performs a verification + * afterwards. + * + * @param args + * The parameter(s). + */ + public static void main(String[] args) { + +// signWithSingleProfileDemo(); + signWithAllProfilesDemo(); + } } -- cgit v1.2.3