diff options
Diffstat (limited to 'src/main/java/demo')
| -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();
 +      }
 +      
 +   }
 +
 +}
 | 
