diff options
Diffstat (limited to 'src/main/java/demo/APIDemo.java')
-rw-r--r-- | src/main/java/demo/APIDemo.java | 181 |
1 files changed, 132 insertions, 49 deletions
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();
+
}
}
|