diff options
author | tknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c> | 2008-06-13 11:45:39 +0000 |
---|---|---|
committer | tknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c> | 2008-06-13 11:45:39 +0000 |
commit | 137658e3a41c09b4aa7b9125e4d9f65f16e2facc (patch) | |
tree | 5236993c5202a19ce378bb402944441003e287e4 /src/main/java/demo/APIDemo.java | |
parent | b5aefab37c25d5da114bb78768defc79fc709e29 (diff) | |
download | pdf-as-3-137658e3a41c09b4aa7b9125e4d9f65f16e2facc.tar.gz pdf-as-3-137658e3a41c09b4aa7b9125e4d9f65f16e2facc.tar.bz2 pdf-as-3-137658e3a41c09b4aa7b9125e4d9f65f16e2facc.zip |
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
Diffstat (limited to 'src/main/java/demo/APIDemo.java')
-rw-r--r-- | src/main/java/demo/APIDemo.java | 169 |
1 files changed, 169 insertions, 0 deletions
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();
+ }
+
+ }
+
+}
|