aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/demo/APIDemo.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/demo/APIDemo.java')
-rw-r--r--src/main/java/demo/APIDemo.java169
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();
+ }
+
+ }
+
+}