aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-lib/src/main/java/at/gv/egiz/pdfas
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2013-12-11 12:04:19 +0100
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2013-12-11 12:04:19 +0100
commit05bb51dd0190c56f7ec59f6f0c759e00f1d72edc (patch)
tree0c49fa461cc659b335f6e2979d53954d599c6988 /pdf-as-lib/src/main/java/at/gv/egiz/pdfas
parent84553d9bc5eb670ee6f9cf21b3f9aa516530bc56 (diff)
downloadpdf-as-4-05bb51dd0190c56f7ec59f6f0c759e00f1d72edc.tar.gz
pdf-as-4-05bb51dd0190c56f7ec59f6f0c759e00f1d72edc.tar.bz2
pdf-as-4-05bb51dd0190c56f7ec59f6f0c759e00f1d72edc.zip
Signature profile implementations
Diffstat (limited to 'pdf-as-lib/src/main/java/at/gv/egiz/pdfas')
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java4
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/PdfAsFactory.java117
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java6
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java11
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/positioning/Positioning.java33
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java13
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java4
7 files changed, 134 insertions, 54 deletions
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java
index 59515937..21f8c81e 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java
@@ -3,6 +3,7 @@ package at.gv.egiz.pdfas.lib.api;
public interface IConfigurationConstants {
public static final String TRUE = "true";
+ public static final String FALSE = "false";
public static final String SIG_OBJECT = "sig_obj";
public static final String TYPE = "type";
@@ -11,6 +12,9 @@ public interface IConfigurationConstants {
public static final String POS = "pos";
public static final String DEFAULT = "default";
public static final String SEPERATOR = ".";
+
+
+ public static final String LEGACY_POSITIONING = ".legacy.pos";
public static final String PLACEHOLDER_SEARCH_ENABLED = "enable_placeholder_search";
public static final String DEFAULT_SIGNATURE_PROFILE = SIG_OBJECT + SEPERATOR + TYPE + SEPERATOR + DEFAULT;
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/PdfAsFactory.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/PdfAsFactory.java
index b303a139..963e4098 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/PdfAsFactory.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/PdfAsFactory.java
@@ -1,12 +1,19 @@
package at.gv.egiz.pdfas.lib.api;
-import iaik.security.ecc.provider.ECCProvider;
+import iaik.security.ec.provider.ECCelerate;
import iaik.security.provider.IAIK;
+import java.io.BufferedOutputStream;
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
-import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
import at.gv.egiz.pdfas.lib.api.verify.VerifyParameter;
@@ -15,26 +22,108 @@ import at.gv.egiz.pdfas.lib.impl.SignParameterImpl;
import at.gv.egiz.pdfas.lib.impl.VerifyParameterImpl;
public class PdfAsFactory {
-
+
+ private static final Logger logger = LoggerFactory
+ .getLogger(PdfAsFactory.class);
+
+ private static final String DEFAULT_CONFIG_RES = "config/config.zip";
+
static {
- PropertyConfigurator.configure(ClassLoader.getSystemResourceAsStream("resources/log4j.properties"));
- //BasicConfigurator.configure();
-
- IAIK.getInstance();
- ECCProvider.addAsProvider();
+ PropertyConfigurator.configure(ClassLoader
+ .getSystemResourceAsStream("resources/log4j.properties"));
+ // BasicConfigurator.configure();
+
+ //iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ IAIK.addAsProvider();;
+ //ECCProvider.addAsProvider();
+ // install security provider
+ ECCelerate.addAsProvider();
}
-
+
public static PdfAs createPdfAs(File configuration) {
return new PdfAsImpl(configuration);
}
-
- public static SignParameter createSignParameter(Configuration configuration, DataSource dataSource) {
+
+ public static SignParameter createSignParameter(
+ Configuration configuration, DataSource dataSource) {
SignParameter param = new SignParameterImpl(configuration, dataSource);
return param;
}
-
- public static VerifyParameter createVerifyParameter(Configuration configuration, DataSource dataSource) {
- VerifyParameter param = new VerifyParameterImpl(configuration, dataSource);
+
+ public static VerifyParameter createVerifyParameter(
+ Configuration configuration, DataSource dataSource) {
+ VerifyParameter param = new VerifyParameterImpl(configuration,
+ dataSource);
return param;
}
+
+ public static void deployDefaultConfiguration(File targetDirectory)
+ throws Exception {
+ if (targetDirectory.exists()) {
+ targetDirectory.delete();
+ }
+
+ if (!targetDirectory.exists()) {
+ targetDirectory.mkdir();
+ }
+ InputStream is = ClassLoader
+ .getSystemResourceAsStream(DEFAULT_CONFIG_RES);
+ // URL zipUrl = ClassLoader.getSystemResource(DEFAULT_CONFIG_RES);
+ // logger.debug("CONFIG URI: " + zipUrl.toURI().toString());
+ // File zipFile = new File(zipUrl.toURI());
+ // ZipFile zip = null;
+ ZipInputStream zip = null;
+ try {
+ zip = new ZipInputStream(is);
+
+ ZipEntry entry = zip.getNextEntry();
+ while (entry != null) {
+
+ File destinationPath = new File(
+ targetDirectory.getAbsolutePath(), entry.getName());
+
+ // create parent directories
+ destinationPath.getParentFile().mkdirs();
+
+ // if the entry is a file extract it
+ if (entry.isDirectory()) {
+ destinationPath.mkdir();
+ zip.closeEntry();
+ entry = zip.getNextEntry();
+ continue;
+ } else {
+
+ logger.debug("Extracting file: " + destinationPath);
+
+ int b;
+ byte buffer[] = new byte[1024];
+
+ FileOutputStream fos = new FileOutputStream(destinationPath);
+
+ BufferedOutputStream bos = new BufferedOutputStream(fos,
+ 1024);
+
+ while ((b = zip.read(buffer, 0, 1024)) != -1) {
+ bos.write(buffer, 0, b);
+ }
+
+ bos.close();
+ zip.closeEntry();
+
+ }
+ entry = zip.getNextEntry();
+ }
+
+ } catch (IOException ioe) {
+ System.out.println("Error opening zip file" + ioe);
+ } finally {
+ try {
+ if (zip != null) {
+ zip.close();
+ }
+ } catch (IOException ioe) {
+ System.out.println("Error while closing zip file" + ioe);
+ }
+ }
+ }
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java
index ddfc79ce..fc245592 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java
@@ -459,7 +459,7 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
PositioningInstruction positioningInstruction = Positioning
.determineTablePositioning(tablePos, "", originalDocument,
- visualObject);
+ visualObject, false);
// ================================================================
// StampingStage (visual) -> stamp logical signature block to
@@ -524,6 +524,8 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
.getDefaultPositioning();
}
+ boolean legacy32Position = signatureProfileConfiguration.getLegacy32Positioning();
+
TablePos tablePos = null;
if (posString == null) {
@@ -538,7 +540,7 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
PositioningInstruction positioningInstruction = Positioning
.determineTablePositioning(tablePos, "", originalDocument,
- visualObject);
+ visualObject, legacy32Position);
// ================================================================
// StampingStage (visual) -> stamp logical signature block to
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java
index 8f09b495..b8a0139a 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java
@@ -23,4 +23,15 @@ public class SignatureProfileConfiguration extends SpecificBaseConfiguration
String key = SIG_OBJECT + SEPERATOR + profileID + SEPERATOR + TABLE + SEPERATOR + POS;
return this.configuration.getValue(key);
}
+
+ public boolean getLegacy32Positioning() {
+ String key = SIG_OBJECT + SEPERATOR + profileID + LEGACY_POSITIONING;
+ String value = this.configuration.getValue(key);
+ if(value != null) {
+ if(value.equalsIgnoreCase(TRUE)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/positioning/Positioning.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/positioning/Positioning.java
index 340ba0bb..da7da772 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/positioning/Positioning.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/positioning/Positioning.java
@@ -47,39 +47,8 @@ public class Positioning {
* F.e.
*/
public static PositioningInstruction determineTablePositioning(TablePos pos, String signature_type,
- PDDocument pdfDataSource, IPDFVisualObject pdf_table) throws PdfAsException
+ PDDocument pdfDataSource, IPDFVisualObject pdf_table, boolean legacy32) throws PdfAsException
{
- boolean legacy32 = false;
-
- //TODO: settings reader ...
-
- /*
- if (pos == null)
- {
- String pos_string = SettingsReader.getInstance().getSetting(SignatureTypes.SIG_OBJ + signature_type + ".pos", null);
- if (pos_string != null)
- {
- pos = PdfAS.parsePositionFromPosString(pos_string);
- }
- }
- if (pos == null)
- {
- // The default algorithm. x,y,w =auto ,p=lastpage, f:ignored because
- // y:auto
- pos = new TablePos();
- }
-
- // afitzek
- // Allow legacy positioning (3.2) for BRZ Templates ...
- boolean legacy32 = false;
- String leg = SettingsReader.getInstance().getSetting(SignatureTypes.SIG_OBJ + signature_type + ".legacy.pos", "false");
- if (leg != null) {
- if ("true".equals(leg.trim())) {
- legacy32 = true;
- }
- }
- */
- // System.out.println("Tablepos="+pos);
return adjustSignatureTableandCalculatePosition(pdfDataSource, pdf_table, pos, legacy32);
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
index 7273b8a9..cc75ff69 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java
@@ -65,11 +65,16 @@ public class PADESPDFBOXSigner implements IPdfSigner {
String signerName = resolver.resolve("SIG_SUBJECT", signatureProfileSettings.getValue("SIG_SUBJECT"),
signatureProfileSettings, requestedSignature);
-
signature.setName(signerName);
- //signature.setLocation("signer location");
- signature.setReason("PDF-AS Signatur");
-
+ signature.setSignDate(Calendar.getInstance());
+ String signerReason = signatureProfileSettings.getSigningReason();
+
+ if(signerReason == null) {
+ signerReason = "PAdES Signature";
+ }
+
+ signature.setReason(signerReason);
+ logger.debug("Signing reason: " + signerReason);
logger.debug("Signing @ " + signer.getSigningDate().getTime().toString());
// the signing date, needed for valid signature
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java
index 554a5b98..718acc24 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java
@@ -42,10 +42,10 @@ public class PdfboxSignerWrapper implements PDFASSignatureInterface {
try {
byte[] signature = signer.sign(data, byteRange);
/*logger.debug("Signature Data: "
- + iaik.utils.Util.toBase64String(signature));
+ + iaik.utils.Util.toBase64String(signature));*/
FileOutputStream fos = new FileOutputStream("/tmp/fos.bin");
fos.write(signature);
- fos.close();*/
+ fos.close();
return signature;
} catch (PdfAsException e) {
throw new PdfAsWrappedIOException(e);