From 137658e3a41c09b4aa7b9125e4d9f65f16e2facc Mon Sep 17 00:00:00 2001 From: tknall Date: Fri, 13 Jun 2008 11:45:39 +0000 Subject: Detection of incremental updates updated. Bug fixed. There was an error concerning empty HashInputData parsing a MOA CreateXMLSignatureResponse. Demo source for API usage created. Issue resolved: Prevent signature of empty document which leads to a meaningless error message from the bku. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@284 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- src/main/java/demo/APIDemo.java | 169 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 src/main/java/demo/APIDemo.java (limited to 'src/main/java/demo') diff --git a/src/main/java/demo/APIDemo.java b/src/main/java/demo/APIDemo.java new file mode 100644 index 0000000..d4ce5e7 --- /dev/null +++ b/src/main/java/demo/APIDemo.java @@ -0,0 +1,169 @@ +package demo; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Iterator; +import java.util.List; + +import at.gv.egiz.pdfas.PdfAsFactory; +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.exceptions.PdfAsException; +import at.gv.egiz.pdfas.api.io.DataSource; +import at.gv.egiz.pdfas.api.sign.SignParameters; +import at.gv.egiz.pdfas.api.sign.pos.SignaturePositioning; +import at.gv.egiz.pdfas.api.verify.VerifyAfterAnalysisParameters; +import at.gv.egiz.pdfas.api.verify.VerifyResult; +import at.gv.egiz.pdfas.commandline.Main; +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; + +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. + */ + public static void verify(File configuration, File source, String verifyDevice) throws PdfAsException, IOException { + + // instantiate api + PdfAs pdfasAPI = PdfAsFactory.createPdfAs(configuration); + + // set source + DataSource dataSource = new FileBasedDataSource(source, "application/pdf"); + + // 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()) { + verifyMode = Constants.VERIFY_MODE_SEMI_CONSERVATIVE; + } 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); + System.out.println("Successfully analyzed."); + + // setup verification + VerifyAfterAnalysisParameters vaap = new VerifyAfterAnalysisParameters(); + vaap.setAnalyzeResult(analyzeResult); + vaap.setReturnHashInputData(true); + vaap.setSignatureDevice(verifyDevice); + vaap.setVerificationTime(null); + + // invoke verification + System.out.println("Verifying..."); + List verifyResults = pdfasAPI.verify(vaap).getResults(); + System.out.println("Verification complete."); + + // iterate over results + PrintWriter out = new PrintWriter(System.out); + Iterator it = verifyResults.iterator(); + while (it.hasNext()) { + VerifyResult result = (VerifyResult) it.next(); + 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}. + */ + 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); + + // set source + DataSource dataSource = new FileBasedDataSource(source, "application/pdf"); + + // set output + FileBasedDataSink dataSink = new FileBasedDataSink(destination); + + // configure signature + SignParameters signParameters = new SignParameters(); + signParameters.setDocument(dataSource); + signParameters.setOutput(dataSink); + signParameters.setSignatureType(signatureMode); + signParameters.setSignatureDevice(signatureDevice); + signParameters.setSignatureProfileId(signatureProfile); + signParameters.setSignaturePositioning(signaturePos); + + // sign + System.out.println("Signing..."); + pdfasAPI.sign(signParameters); + + System.out.println("Successfully signed."); + + } + + /** + * Start a demo that signs a document and performs a verification afterwards. + * @param args The parameter(s). + */ + public static void main(String[] args) { + + 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 signatureProfile = "SIGNATURBLOCK_DE"; + SignaturePositioning signaturePos = null; + + try { + + sign(configdir, unsignedFile, signedFile, signatureMode, signatureDevice, signatureProfile, signaturePos); + verify(configdir, signedFile, signatureDevice); + + } catch (PdfAsException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + +} -- cgit v1.2.3