aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pdf-as-legacy/.gitignore1
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java70
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/ErrorCode.java2
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/PdfAsWrappedException.java14
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/PdfAsObject.java104
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignParameterWrapper.java32
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignatureCheckWrapper.java21
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignatureDetailInformationWrapper.java88
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyParameterWrapper.java14
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyResultWrapper.java116
-rw-r--r--pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyResultsImpl.java20
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/SignaturePosition.java38
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignResult.java3
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java195
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignResultImpl.java18
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignaturePositionImpl.java55
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/status/RequestedSignature.java20
17 files changed, 654 insertions, 157 deletions
diff --git a/pdf-as-legacy/.gitignore b/pdf-as-legacy/.gitignore
new file mode 100644
index 00000000..5e56e040
--- /dev/null
+++ b/pdf-as-legacy/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java
index e1f31f7a..dd336707 100644
--- a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/commons/DynamicSignatureProfileImpl.java
@@ -25,14 +25,13 @@ package at.gv.egiz.pdfas.api.commons;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
-import org.apache.commons.lang.StringUtils;
-
import at.gv.egiz.pdfas.api.PdfAs;
-import at.knowcenter.wag.egov.egiz.cfg.PropertyTree;
-import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
+import at.gv.egiz.pdfas.common.settings.ISettings;
+import at.gv.egiz.pdfas.lib.api.Configuration;
import at.knowcenter.wag.egov.egiz.sig.SignatureTypes;
// TODO exception types?
@@ -46,22 +45,26 @@ public class DynamicSignatureProfileImpl implements DynamicSignatureProfile {
private String name;
private Properties newProps = new Properties();
private int dynamicTypeCounter = 0;
- private static Map profiles = new HashMap();
- private static ThreadLocal localProfiles = new ThreadLocal();
+ private static Map<String, DynamicSignatureProfile> profiles =
+ new HashMap<String, DynamicSignatureProfile>();
+ private static ThreadLocal<DynamicSignatureProfile> localProfiles = new ThreadLocal<DynamicSignatureProfile>();
private DynamicSignatureLifetimeEnum lifeMode;
-
+ private Configuration configuration;
- private DynamicSignatureProfileImpl(DynamicSignatureLifetimeEnum mode, String name) {
+ private DynamicSignatureProfileImpl(DynamicSignatureLifetimeEnum mode, String name,
+ Configuration configuration) {
if (name != null) {
this.name = name;
} else {
this.name = createDynamicTypeName();
}
+ this.configuration = configuration;
this.lifeMode = mode;
}
- public static DynamicSignatureProfileImpl createFromParent(String myUniqueName, String parentProfile, DynamicSignatureLifetimeEnum mode) {
- DynamicSignatureProfileImpl res = new DynamicSignatureProfileImpl(mode, myUniqueName);
+ public static DynamicSignatureProfileImpl createFromParent(String myUniqueName, String parentProfile,
+ DynamicSignatureLifetimeEnum mode, Configuration configuration) {
+ DynamicSignatureProfileImpl res = new DynamicSignatureProfileImpl(mode, myUniqueName, configuration);
res.initFromParent(parentProfile);
return res;
}
@@ -89,8 +92,9 @@ public class DynamicSignatureProfileImpl implements DynamicSignatureProfile {
}
}
- public static DynamicSignatureProfileImpl createEmptyProfile(String myUniqueName, DynamicSignatureLifetimeEnum mode) {
- return new DynamicSignatureProfileImpl(mode, myUniqueName);
+ public static DynamicSignatureProfileImpl createEmptyProfile(String myUniqueName, DynamicSignatureLifetimeEnum mode,
+ Configuration configuration) {
+ return new DynamicSignatureProfileImpl(mode, myUniqueName, configuration);
}
public static DynamicSignatureProfileImpl loadProfile(String name) {
@@ -155,21 +159,32 @@ public class DynamicSignatureProfileImpl implements DynamicSignatureProfile {
private void initFromParent(String parentProfile) {
try {
- SettingsReader cfg = null;
-
- cfg = SettingsReader.getInstance();
+ ISettings cfg = null;
- Properties props = cfg.getProperties();
+ cfg = (ISettings)configuration;
+ String parentKey = "sig_obj." + parentProfile + ".";
+ Map<String, String> properties = cfg.getValuesPrefix(parentKey);
+ //Properties props = cfg.getProperties();
// DTI: props.keys() does not support default properties, therefore we should better use props.propertyNames()
// for (Enumeration e = props.keys(); e.hasMoreElements();) {
- for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
+ /*for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
String oldKey = (String) e.nextElement();
if (oldKey.startsWith("sig_obj." + parentProfile + ".")) {
String newKey = StringUtils.replace(oldKey, parentProfile, name);
String val = props.getProperty(oldKey);
this.newProps.put(newKey, val);
}
+ }*/
+
+ Iterator<String> keyIt = properties.keySet().iterator();
+
+ while(keyIt.hasNext()) {
+ String oldKey = keyIt.next();
+ String newKey = oldKey.replaceAll(parentProfile, name);
+ String val = properties.get(oldKey);
+ this.newProps.put(newKey, val);
}
+
this.newProps.put("sig_obj.types." + name, "on");
} catch (Exception e) {
throw new RuntimeException(e);
@@ -181,16 +196,12 @@ public class DynamicSignatureProfileImpl implements DynamicSignatureProfile {
*/
public synchronized void apply() {
try {
- SettingsReader settings = SettingsReader.getInstance();
-
- settings.getProperties().putAll(this.newProps);
-
- for (Enumeration e = newProps.keys(); e.hasMoreElements();) {
+ Configuration cfg = this.configuration;
+ for (Enumeration<Object> e = newProps.keys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
- settings.getPTree().setKeyValue(key, newProps.getProperty(key));
+ cfg.setValue(key, newProps.getProperty(key));
}
- SignatureTypes.getInstance().addSignatureType(this.name);
store();
} catch (Exception e) {
throw new RuntimeException(e);
@@ -202,12 +213,11 @@ public class DynamicSignatureProfileImpl implements DynamicSignatureProfile {
*/
public synchronized void dispose() {
try {
- SettingsReader.getInstance().getProperties().keySet().removeAll(newProps.keySet());
-
- PropertyTree root = SettingsReader.getInstance().getPTree();
- root.getSubTree("sig_obj").removeEntry(this.name);
-
- SignatureTypes.getInstance().removeSignatureType(this.name);
+ Configuration cfg = this.configuration;
+ for (Enumeration<Object> e = newProps.keys(); e.hasMoreElements();) {
+ String key = (String) e.nextElement();
+ cfg.setValue(key, null);
+ }
remove();
} catch (Exception e) {
throw new RuntimeException(e);
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/ErrorCode.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/ErrorCode.java
index 91dd8d8a..790ce9e0 100644
--- a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/ErrorCode.java
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/ErrorCode.java
@@ -110,6 +110,6 @@ public final class ErrorCode
public static final int CORRECTOR_EXCEPTION = 801;
public static final int EXTERNAL_CORRECTOR_TIMEOUT_REACHED = 802;
-
+ public static final int WRAPPED_ERROR_CODE = 998;
public static final int FUNCTION_NOT_AVAILABLE = 999;
}
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/PdfAsWrappedException.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/PdfAsWrappedException.java
new file mode 100644
index 00000000..2ddd1146
--- /dev/null
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/api/exceptions/PdfAsWrappedException.java
@@ -0,0 +1,14 @@
+package at.gv.egiz.pdfas.api.exceptions;
+
+public class PdfAsWrappedException extends PdfAsException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3947240372353864753L;
+
+ public PdfAsWrappedException(Throwable e) {
+ super(ErrorCode.WRAPPED_ERROR_CODE, e.getMessage(), e);
+ }
+
+}
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/PdfAsObject.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/PdfAsObject.java
index 6606ec4a..067021b2 100644
--- a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/PdfAsObject.java
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/PdfAsObject.java
@@ -1,15 +1,16 @@
package at.gv.egiz.pdfas.wrapper;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
-import com.sun.org.apache.xml.internal.utils.UnImplNode;
-
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.DynamicSignatureLifetimeEnum;
import at.gv.egiz.pdfas.api.commons.DynamicSignatureProfile;
+import at.gv.egiz.pdfas.api.commons.DynamicSignatureProfileImpl;
import at.gv.egiz.pdfas.api.exceptions.ErrorCode;
import at.gv.egiz.pdfas.api.exceptions.PdfAsException;
import at.gv.egiz.pdfas.api.sign.SignParameters;
@@ -22,25 +23,59 @@ import at.gv.egiz.pdfas.api.verify.VerifyResults;
import at.gv.egiz.pdfas.api.xmldsig.ReconstructXMLDsigAfterAnalysisParameters;
import at.gv.egiz.pdfas.api.xmldsig.ReconstructXMLDsigParameters;
import at.gv.egiz.pdfas.api.xmldsig.ReconstructXMLDsigResult;
+import at.gv.egiz.pdfas.lib.api.ByteArrayDataSource;
+import at.gv.egiz.pdfas.lib.api.Configuration;
+import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
+import at.gv.egiz.pdfas.lib.api.StatusRequest;
+import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
+import at.gv.egiz.pdfas.lib.api.verify.VerifyParameter;
+import at.gv.egiz.pdfas.lib.api.verify.VerifyResult;
public class PdfAsObject implements PdfAs {
+ private at.gv.egiz.pdfas.lib.api.PdfAs pdfas4;
+ private Configuration configuration;
+ private File workdir;
+
public SignResult sign(SignParameters signParameters) throws PdfAsException {
- // TODO Auto-generated method stub
- return null;
+ SignatureDetailInformation signatureDetailInformation = this
+ .prepareSign(signParameters);
+ return this.sign(signParameters, signatureDetailInformation);
}
public SignResult sign(SignParameters signParameters,
SignatureDetailInformation signatureDetailInformation)
throws PdfAsException {
- // TODO Auto-generated method stub
+
+ // Create the signature ....
+
+ // TODO wait for SL wrapper implementation
return null;
}
public VerifyResults verify(VerifyParameters verifyParameters)
throws PdfAsException {
- // TODO Auto-generated method stub
- return null;
+ try {
+ VerifyParameter newParameter = VerifyParameterWrapper.toNewParameters(verifyParameters);
+
+ List<VerifyResult> results = this.pdfas4.verify(newParameter);
+
+ Iterator<VerifyResult> it = results.iterator();
+
+ List<at.gv.egiz.pdfas.api.verify.VerifyResult> resultList =
+ new ArrayList<at.gv.egiz.pdfas.api.verify.VerifyResult>();
+
+ while(it.hasNext()) {
+ VerifyResult newResult = it.next();
+ at.gv.egiz.pdfas.api.verify.VerifyResult oldResult =
+ new VerifyResultWrapper(newResult);
+ resultList.add(oldResult);
+ }
+
+ return new VerifyResultsImpl(resultList);
+ } catch(at.gv.egiz.pdfas.common.exceptions.PdfAsException e) {
+ throw new PdfAsException(0, e.getMessage());
+ }
}
public AnalyzeResult analyze(AnalyzeParameters analyzeParameters)
@@ -78,61 +113,78 @@ public class PdfAsObject implements PdfAs {
}
public void reloadConfig() throws PdfAsException {
- // TODO Auto-generated method stub
-
+ this.pdfas4 = at.gv.egiz.pdfas.lib.api.PdfAsFactory
+ .createPdfAs(this.workdir);
+ this.configuration = this.pdfas4.getConfiguration();
}
public List getProfileInformation() throws PdfAsException {
- // TODO Auto-generated method stub
- return null;
+ throw new PdfAsException(ErrorCode.FUNCTION_NOT_AVAILABLE,
+ new RuntimeException());
}
public DynamicSignatureProfile createDynamicSignatureProfile(
String parentProfile, DynamicSignatureLifetimeEnum mode) {
- // TODO Auto-generated method stub
- return null;
+ return DynamicSignatureProfileImpl.createFromParent(null,
+ parentProfile, mode, configuration);
}
public DynamicSignatureProfile createDynamicSignatureProfile(
String myUniqueName, String parentProfile,
DynamicSignatureLifetimeEnum mode) {
- // TODO Auto-generated method stub
- return null;
+ return DynamicSignatureProfileImpl.createFromParent(myUniqueName,
+ parentProfile, mode, configuration);
}
public DynamicSignatureProfile createEmptyDynamicSignatureProfile(
DynamicSignatureLifetimeEnum mode) {
- // TODO Auto-generated method stub
- return null;
+ return DynamicSignatureProfileImpl.createEmptyProfile(null, mode,
+ configuration);
}
public DynamicSignatureProfile createEmptyDynamicSignatureProfile(
String myUniqueName, DynamicSignatureLifetimeEnum mode) {
- // TODO Auto-generated method stub
- return null;
+ return DynamicSignatureProfileImpl.createEmptyProfile(myUniqueName,
+ mode, configuration);
}
public DynamicSignatureProfile loadDynamicSignatureProfile(
String profileName) {
- // TODO Auto-generated method stub
- return null;
+ return DynamicSignatureProfileImpl.loadProfile(profileName);
}
public SignatureDetailInformation prepareSign(SignParameters signParameters)
throws PdfAsException {
- // TODO Auto-generated method stub
- return null;
+ try {
+ // Prepare Signature
+
+ SignParameter signParameter4 = PdfAsFactory.createSignParameter(
+ this.configuration, new ByteArrayDataSource(signParameters
+ .getDocument().getAsByteArray()));
+
+ SignParameterWrapper wrapper = new SignParameterWrapper(signParameters, signParameter4);
+
+ // TODO: wrapper sync old to new
+ StatusRequest request = this.pdfas4.startSign(wrapper.getSignParameter4());
+ // TODO: wait for SL implementation wrapper
+ return null;
+
+ } catch (at.gv.egiz.pdfas.common.exceptions.PdfAsException e) {
+ throw new PdfAsException(0, e.getMessage());
+ }
}
public SignResult finishSign(SignParameters signParameters,
SignatureDetailInformation signatureDetailInformation)
throws PdfAsException {
- // TODO Auto-generated method stub
- return null;
+ return sign(signParameters, signatureDetailInformation);
}
public PdfAsObject(File workdirectory) {
- //TODO
+ this.workdir = workdirectory;
+ this.pdfas4 = at.gv.egiz.pdfas.lib.api.PdfAsFactory
+ .createPdfAs(workdirectory);
+ this.configuration = this.pdfas4.getConfiguration();
}
}
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignParameterWrapper.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignParameterWrapper.java
new file mode 100644
index 00000000..b51896bd
--- /dev/null
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignParameterWrapper.java
@@ -0,0 +1,32 @@
+package at.gv.egiz.pdfas.wrapper;
+
+import at.gv.egiz.pdfas.api.sign.SignParameters;
+import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
+
+public class SignParameterWrapper {
+
+ private SignParameter signParameter4;
+ private SignParameters signParameters;
+
+ public SignParameterWrapper(SignParameters signParameters, SignParameter signParameter4) {
+ this.signParameter4 = signParameter4;
+ this.signParameters = signParameters;
+ }
+
+ private void syncOldToNew() {
+ // TODO
+ }
+
+ private void syncNewToOld() {
+ // TODO
+ }
+
+
+ public SignParameter getSignParameter4() {
+ return this.signParameter4;
+ }
+
+ public SignParameters getSignParameters() {
+ return this.signParameters;
+ }
+}
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignatureCheckWrapper.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignatureCheckWrapper.java
new file mode 100644
index 00000000..04b0dd3c
--- /dev/null
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignatureCheckWrapper.java
@@ -0,0 +1,21 @@
+package at.gv.egiz.pdfas.wrapper;
+
+import at.gv.egiz.pdfas.api.verify.SignatureCheck;
+
+public class SignatureCheckWrapper implements SignatureCheck {
+
+ private at.gv.egiz.pdfas.lib.api.verify.SignatureCheck newCheck;
+
+ public SignatureCheckWrapper(at.gv.egiz.pdfas.lib.api.verify.SignatureCheck newCheck) {
+ this.newCheck = newCheck;
+ }
+
+ public int getCode() {
+ return this.newCheck.getCode();
+ }
+
+ public String getMessage() {
+ return this.newCheck.getMessage();
+ }
+
+}
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignatureDetailInformationWrapper.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignatureDetailInformationWrapper.java
new file mode 100644
index 00000000..683e083f
--- /dev/null
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/SignatureDetailInformationWrapper.java
@@ -0,0 +1,88 @@
+package at.gv.egiz.pdfas.wrapper;
+
+import java.security.cert.X509Certificate;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import at.gv.egiz.pdfas.api.io.DataSource;
+import at.gv.egiz.pdfas.api.sign.SignatureDetailInformation;
+import at.gv.egiz.pdfas.api.sign.pos.SignaturePosition;
+
+public class SignatureDetailInformationWrapper implements SignatureDetailInformation {
+
+ private SignParameterWrapper wrapper;
+
+ public DataSource getSignatureData() {
+ // TODO
+ return null;
+ }
+
+ public SignaturePosition getSignaturePosition() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List getNonTextualObjects() {
+ return null;
+ }
+
+ public Date getSignDate() {
+ return null;
+ }
+
+ public String getIssuer() {
+ return null;
+ }
+
+ public Map getIssuerDNMap() {
+ return null;
+ }
+
+ public String getSubjectName() {
+ return null;
+ }
+
+ public String getSerialNumber() {
+ return null;
+ }
+
+ public String getSigAlgorithm() {
+ return null;
+ }
+
+ public String getSigID() {
+ return null;
+ }
+
+ public String getSigKZ() {
+ return null;
+ }
+
+ public String getSignatureValue() {
+ return null;
+ }
+
+ public String getSigTimeStamp() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Map getSubjectDNMap() {
+ return null;
+ }
+
+ public X509Certificate getX509Certificate() {
+ return null;
+ }
+
+ public boolean isTextual() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean isBinary() {
+ return true;
+ }
+
+}
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyParameterWrapper.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyParameterWrapper.java
new file mode 100644
index 00000000..387d9ea4
--- /dev/null
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyParameterWrapper.java
@@ -0,0 +1,14 @@
+package at.gv.egiz.pdfas.wrapper;
+
+import at.gv.egiz.pdfas.api.verify.VerifyParameters;
+import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
+import at.gv.egiz.pdfas.lib.api.verify.VerifyParameter;
+
+public class VerifyParameterWrapper {
+
+ public static VerifyParameter toNewParameters(VerifyParameters oldParameters) {
+ //TODO
+ return null;
+ }
+
+}
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyResultWrapper.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyResultWrapper.java
new file mode 100644
index 00000000..0364be9b
--- /dev/null
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyResultWrapper.java
@@ -0,0 +1,116 @@
+package at.gv.egiz.pdfas.wrapper;
+
+import java.security.cert.X509Certificate;
+import java.util.Date;
+import java.util.List;
+
+import at.gv.egiz.pdfas.api.exceptions.PdfAsException;
+import at.gv.egiz.pdfas.api.exceptions.PdfAsWrappedException;
+import at.gv.egiz.pdfas.api.io.DataSource;
+import at.gv.egiz.pdfas.api.verify.SignatureCheck;
+import at.gv.egiz.pdfas.api.verify.VerifyResult;
+import at.gv.egiz.pdfas.api.xmldsig.XMLDsigData;
+
+public class VerifyResultWrapper implements VerifyResult {
+
+ private at.gv.egiz.pdfas.lib.api.verify.VerifyResult newResult;
+
+ public VerifyResultWrapper(at.gv.egiz.pdfas.lib.api.verify.VerifyResult newResult) {
+ this.newResult = newResult;
+ }
+
+ public String getSignatureType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public DataSource getSignedData() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public X509Certificate getSignerCertificate() {
+ return this.newResult.getSignerCertificate();
+ }
+
+ public Date getSigningTime() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Object getInternalSignatureInformation() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getTimeStampValue() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void setNonTextualObjects(List nonTextualObjects) {
+ }
+
+ public boolean isVerificationDone() {
+ return this.newResult.isVerificationDone();
+ }
+
+ public PdfAsException getVerificationException() {
+ return new PdfAsWrappedException(this.newResult.getVerificationException());
+ }
+
+ public SignatureCheck getCertificateCheck() {
+ return new SignatureCheckWrapper(this.newResult.getCertificateCheck());
+ }
+
+ public SignatureCheck getValueCheckCode() {
+ return new SignatureCheckWrapper(this.newResult.getValueCheckCode());
+ }
+
+ public SignatureCheck getManifestCheckCode() {
+ return new SignatureCheckWrapper(this.newResult.getManifestCheckCode());
+ }
+
+ public boolean isQualifiedCertificate() {
+ return this.newResult.isQualifiedCertificate();
+ }
+
+ public boolean isPublicAuthority() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public String getPublicAuthorityCode() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public List getPublicProperties() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Date getVerificationTime() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getHashInputData() {
+ return null;
+ }
+
+ public List getNonTextualObjects() {
+ return null;
+ }
+
+ public boolean hasNonTextualObjects() {
+ return false;
+ }
+
+ public XMLDsigData getReconstructedXMLDsig() {
+ return null;
+ }
+
+
+
+}
diff --git a/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyResultsImpl.java b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyResultsImpl.java
new file mode 100644
index 00000000..d20da58b
--- /dev/null
+++ b/pdf-as-legacy/src/main/java/at/gv/egiz/pdfas/wrapper/VerifyResultsImpl.java
@@ -0,0 +1,20 @@
+package at.gv.egiz.pdfas.wrapper;
+
+import java.util.List;
+
+import at.gv.egiz.pdfas.api.verify.VerifyResult;
+import at.gv.egiz.pdfas.api.verify.VerifyResults;
+
+public class VerifyResultsImpl implements VerifyResults {
+
+ private List<VerifyResult> list;
+
+ public VerifyResultsImpl(List<VerifyResult> list) {
+ this.list = list;
+ }
+
+ public List getResults() {
+ return this.list;
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/SignaturePosition.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/SignaturePosition.java
new file mode 100644
index 00000000..477d798f
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/SignaturePosition.java
@@ -0,0 +1,38 @@
+package at.gv.egiz.pdfas.lib.api;
+
+public interface SignaturePosition {
+ /**
+ * Returns the page on which the signature was placed.
+ *
+ * @return Returns the page on which the signature was placed.
+ */
+ public int getPage();
+
+ /**
+ * Returns the x position.
+ *
+ * @return Returns the x position.
+ */
+ public float getX();
+
+ /**
+ * Returns the y position.
+ *
+ * @return Returns the y position.
+ */
+ public float getY();
+
+ /**
+ * Returns the width of the signature.
+ *
+ * @return Returns the width of the signature.
+ */
+ public float getWidth();
+
+ /**
+ * Returns the height of the signature.
+ *
+ * @return Returns the height of the signature.
+ */
+ public float getHeight();
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignResult.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignResult.java
index 03e48d73..d994c3e1 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignResult.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignResult.java
@@ -3,6 +3,7 @@ package at.gv.egiz.pdfas.lib.api.sign;
import java.security.cert.X509Certificate;
import at.gv.egiz.pdfas.lib.api.DataSink;
+import at.gv.egiz.pdfas.lib.api.SignaturePosition;
public interface SignResult {
/**
@@ -34,5 +35,5 @@ public interface SignResult {
* @return Returns the position where the signature is finally placed. May
* return null if no position information is available.
*/
- //public SignaturePosition getSignaturePosition();
+ public SignaturePosition getSignaturePosition();
}
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 c83d3bf7..6f74303c 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
@@ -1,17 +1,10 @@
package at.gv.egiz.pdfas.lib.impl;
-import iaik.cms.CMSException;
-import iaik.cms.CMSParsingException;
-import iaik.cms.SignedData;
-import iaik.cms.SignerInfo;
-import iaik.x509.X509Certificate;
-
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
-import java.security.SignatureException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
@@ -25,13 +18,11 @@ import org.apache.pdfbox.pdmodel.PDDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import sun.misc.Regexp;
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsException;
import at.gv.egiz.pdfas.common.settings.ISettings;
import at.gv.egiz.pdfas.common.settings.Settings;
import at.gv.egiz.pdfas.common.settings.SignatureProfileSettings;
-import at.gv.egiz.pdfas.common.utils.StringUtils;
import at.gv.egiz.pdfas.lib.api.Configuration;
import at.gv.egiz.pdfas.lib.api.IConfigurationConstants;
import at.gv.egiz.pdfas.lib.api.PdfAs;
@@ -48,7 +39,6 @@ import at.gv.egiz.pdfas.lib.impl.signing.IPdfSigner;
import at.gv.egiz.pdfas.lib.impl.signing.PdfSignerFactory;
import at.gv.egiz.pdfas.lib.impl.signing.pdfbox.PdfboxSignerWrapper;
import at.gv.egiz.pdfas.lib.impl.signing.sig_interface.SignatureDataExtractor;
-import at.gv.egiz.pdfas.lib.impl.signing.sig_interface.SignatureDataInjector;
import at.gv.egiz.pdfas.lib.impl.stamping.IPDFStamper;
import at.gv.egiz.pdfas.lib.impl.stamping.IPDFVisualObject;
import at.gv.egiz.pdfas.lib.impl.stamping.StamperFactory;
@@ -103,8 +93,9 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
logger.info("Selected signature Profile: " + signatureProfileID);
- SignatureProfileConfiguration signatureProfileConfiguration = status
- .getSignatureProfileConfiguration(signatureProfileID);
+ // SignatureProfileConfiguration signatureProfileConfiguration =
+ // status
+ // .getSignatureProfileConfiguration(signatureProfileID);
// set Original PDF Document Data
status.getPdfObject().setOriginalDocument(
@@ -115,65 +106,62 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
// TODO: Do placeholder search
}
- if (requestedSignature.isVisual()) {
- logger.info("Creating visual siganture block");
- // ================================================================
- // SignBlockCreationStage (visual) -> create visual signature
- // block (logicaly)
- SignatureProfileSettings signatureProfileSettings = TableFactory
- .createProfile(signatureProfileID, settings);
-
- Table main = TableFactory.createSigTable(
- signatureProfileSettings, MAIN, settings,
- requestedSignature);
-
- IPDFStamper stamper = StamperFactory
- .createDefaultStamper(settings);
- IPDFVisualObject visualObject = stamper.createVisualPDFObject(
- status.getPdfObject(), main);
-
- // ================================================================
- // PositioningStage (visual) -> find position or use fixed
- // position
-
- String posString = status.getSignParamter()
- .getSignaturePosition();
-
- if (posString == null) {
- posString = signatureProfileConfiguration
- .getDefaultPositioning();
- }
-
- TablePos tablePos = null;
-
- if (posString == null) {
- tablePos = new TablePos();
- } else {
- tablePos = new TablePos(posString);
- }
-
- PDDocument originalDocument = PDDocument
- .load(new ByteArrayInputStream(status.getPdfObject()
- .getOriginalDocument()));
-
- PositioningInstruction positioningInstruction = Positioning
- .determineTablePositioning(tablePos, "",
- originalDocument, visualObject);
+ this.stampPdf(status);
- // ================================================================
- // StampingStage (visual) -> stamp logical signature block to
- // location (itext)
-
- byte[] incrementalUpdate = stamper.writeVisualObject(
- visualObject, positioningInstruction, status
- .getPdfObject().getOriginalDocument());
- status.getPdfObject().setStampedDocument(incrementalUpdate);
- } else {
- logger.info("No visual siganture block");
- // Stamped Object is equal to original
- status.getPdfObject().setStampedDocument(
- status.getPdfObject().getOriginalDocument());
- }
+ /*
+ * if (requestedSignature.isVisual()) {
+ * logger.info("Creating visual siganture block"); //
+ * ================================================================
+ * // SignBlockCreationStage (visual) -> create visual signature //
+ * block (logicaly) SignatureProfileSettings
+ * signatureProfileSettings = TableFactory
+ * .createProfile(signatureProfileID, settings);
+ *
+ * Table main = TableFactory.createSigTable(
+ * signatureProfileSettings, MAIN, settings, requestedSignature);
+ *
+ * IPDFStamper stamper = StamperFactory
+ * .createDefaultStamper(settings); IPDFVisualObject visualObject =
+ * stamper.createVisualPDFObject( status.getPdfObject(), main);
+ *
+ * //
+ * ================================================================
+ * // PositioningStage (visual) -> find position or use fixed //
+ * position
+ *
+ * String posString = status.getSignParamter()
+ * .getSignaturePosition();
+ *
+ * if (posString == null) { posString =
+ * signatureProfileConfiguration .getDefaultPositioning(); }
+ *
+ * TablePos tablePos = null;
+ *
+ * if (posString == null) { tablePos = new TablePos(); } else {
+ * tablePos = new TablePos(posString); }
+ *
+ * PDDocument originalDocument = PDDocument .load(new
+ * ByteArrayInputStream(status.getPdfObject()
+ * .getOriginalDocument()));
+ *
+ * PositioningInstruction positioningInstruction = Positioning
+ * .determineTablePositioning(tablePos, "", originalDocument,
+ * visualObject);
+ *
+ * //
+ * ================================================================
+ * // StampingStage (visual) -> stamp logical signature block to //
+ * location (itext)
+ *
+ * byte[] incrementalUpdate = stamper.writeVisualObject(
+ * visualObject, positioningInstruction, status
+ * .getPdfObject().getOriginalDocument());
+ * status.getPdfObject().setStampedDocument(incrementalUpdate); }
+ * else { logger.info("No visual siganture block"); // Stamped
+ * Object is equal to original
+ * status.getPdfObject().setStampedDocument(
+ * status.getPdfObject().getOriginalDocument()); }
+ */
// TODO: Create signature
IPdfSigner signer = PdfSignerFactory.createPdfSigner();
@@ -269,8 +257,8 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
result.addAll(results);
}
- return result;
}
+ return result;
} catch (IOException e) {
e.printStackTrace();
} catch (PdfAsException e) {
@@ -327,24 +315,25 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
try {
status.getRequestedSignature().setCertificate(
request.getCertificate());
-
+
// set Original PDF Document Data
status.getPdfObject().setOriginalDocument(
status.getSignParamter().getDataSource().getByteData());
-
+
// STAMPER!
stampPdf(status);
request.setNeedCertificate(false);
status.setSigningDate(Calendar.getInstance());
-
+
// GET Signature DATA
String pdfFilter = status.getSignParamter().getPlainSigner()
.getPDFFilter();
String pdfSubFilter = status.getSignParamter().getPlainSigner()
.getPDFSubFilter();
SignatureDataExtractor signatureDataExtractor = new SignatureDataExtractor(
- request.getCertificate(), pdfFilter, pdfSubFilter, status.getSigningDate());
+ request.getCertificate(), pdfFilter, pdfSubFilter,
+ status.getSigningDate());
IPdfSigner signer = PdfSignerFactory.createPdfSigner();
signer.signPDF(status.getPdfObject(),
@@ -362,23 +351,25 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
request.setNeedSignature(false);
// TODO: Inject signature byte[] into signedDocument
int offset = request.getSignatureData().length;
-
- for(int i = 0; i < request.getSignature().length; i++) {
- status.getPdfObject().getSignedDocument()[offset + i] = request.getSignature()[i];
+
+ for (int i = 0; i < request.getSignature().length; i++) {
+ status.getPdfObject().getSignedDocument()[offset + i] = request
+ .getSignature()[i];
}
/*
-
- String pdfFilter = status.getSignParamter().getPlainSigner()
- .getPDFFilter();
- String pdfSubFilter = status.getSignParamter().getPlainSigner()
- .getPDFSubFilter();
- SignatureDataInjector injector = new SignatureDataInjector(
- request.getCertificate(), pdfFilter, pdfSubFilter, status.getSigningDate(),
- request.getSignature(), request.getSignatureData());
-
- IPdfSigner signer = PdfSignerFactory.createPdfSigner();
- signer.signPDF(status.getPdfObject(),
- status.getRequestedSignature(), injector);*/
+ *
+ * String pdfFilter = status.getSignParamter().getPlainSigner()
+ * .getPDFFilter(); String pdfSubFilter =
+ * status.getSignParamter().getPlainSigner() .getPDFSubFilter();
+ * SignatureDataInjector injector = new SignatureDataInjector(
+ * request.getCertificate(), pdfFilter, pdfSubFilter,
+ * status.getSigningDate(), request.getSignature(),
+ * request.getSignatureData());
+ *
+ * IPdfSigner signer = PdfSignerFactory.createPdfSigner();
+ * signer.signPDF(status.getPdfObject(),
+ * status.getRequestedSignature(), injector);
+ */
request.setIsReady(true);
} else {
throw new PdfAsException("Invalid Status");
@@ -399,10 +390,10 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
if (!request.isReady()) {
throw new PdfAsException("Invalid Status");
}
-
+
try {
return createSignResult(status);
- } catch(IOException e) {
+ } catch (IOException e) {
throw new PdfAsException("Invalid Status", e);
}
}
@@ -464,6 +455,16 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
byte[] incrementalUpdate = stamper.writeVisualObject(visualObject,
positioningInstruction, status.getPdfObject()
.getOriginalDocument());
+
+ SignaturePositionImpl position = new SignaturePositionImpl();
+ position.setX(positioningInstruction.getX());
+ position.setY(positioningInstruction.getY());
+ position.setPage(positioningInstruction.getPage());
+ position.setHeight(visualObject.getHeight());
+ position.setWidth(visualObject.getWidth());
+
+ requestedSignature.setSignaturePosition(position);
+
status.getPdfObject().setStampedDocument(incrementalUpdate);
} else {
logger.info("No visual siganture block");
@@ -473,7 +474,8 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
}
}
- private SignResult createSignResult(OperationStatus status) throws IOException {
+ private SignResult createSignResult(OperationStatus status)
+ throws IOException {
// ================================================================
// Create SignResult
SignResultImpl result = new SignResultImpl(status.getSignParamter()
@@ -485,6 +487,13 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {
outputStream.close();
+ // result.setSignaturePosition(status.getRequestedSignature().);
+
+ result.setSignerCertificate(status.getRequestedSignature()
+ .getCertificate());
+ result.setSignaturePosition(status.getRequestedSignature()
+ .getSignaturePosition());
+
return result;
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignResultImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignResultImpl.java
index dcb27be9..28a2a33b 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignResultImpl.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignResultImpl.java
@@ -3,11 +3,14 @@ package at.gv.egiz.pdfas.lib.impl;
import java.security.cert.X509Certificate;
import at.gv.egiz.pdfas.lib.api.DataSink;
+import at.gv.egiz.pdfas.lib.api.SignaturePosition;
import at.gv.egiz.pdfas.lib.api.sign.SignResult;
public class SignResultImpl implements SignResult {
protected DataSink dataSink;
+ protected X509Certificate certificate;
+ protected SignaturePosition position;
public SignResultImpl(DataSink dataSink) {
this.dataSink = dataSink;
@@ -18,8 +21,19 @@ public class SignResultImpl implements SignResult {
}
public X509Certificate getSignerCertificate() {
- // TODO Auto-generated method stub
- return null;
+ return this.certificate;
+ }
+
+ public SignaturePosition getSignaturePosition() {
+ return this.position;
+ }
+
+ public void setSignerCertificate(X509Certificate certificate) {
+ this.certificate = certificate;
+ }
+
+ public void setSignaturePosition(SignaturePosition position) {
+ this.position = position;
}
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignaturePositionImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignaturePositionImpl.java
new file mode 100644
index 00000000..7ad8174b
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignaturePositionImpl.java
@@ -0,0 +1,55 @@
+package at.gv.egiz.pdfas.lib.impl;
+
+import at.gv.egiz.pdfas.lib.api.SignaturePosition;
+
+public class SignaturePositionImpl implements SignaturePosition {
+
+ protected int page;
+ protected float x;
+ protected float y;
+ protected float width;
+ protected float height;
+
+
+
+ public void setPage(int page) {
+ this.page = page;
+ }
+
+ public void setX(float x) {
+ this.x = x;
+ }
+
+ public void setY(float y) {
+ this.y = y;
+ }
+
+ public void setWidth(float width) {
+ this.width = width;
+ }
+
+ public void setHeight(float height) {
+ this.height = height;
+ }
+
+ public int getPage() {
+ return page;
+ }
+
+ public float getX() {
+ return x;
+ }
+
+ public float getY() {
+ return y;
+ }
+
+ public float getWidth() {
+ return width;
+ }
+
+ public float getHeight() {
+ return height;
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/status/RequestedSignature.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/status/RequestedSignature.java
index a1820104..8bf56259 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/status/RequestedSignature.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/status/RequestedSignature.java
@@ -3,14 +3,16 @@ package at.gv.egiz.pdfas.lib.impl.status;
import iaik.x509.X509Certificate;
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsException;
+import at.gv.egiz.pdfas.lib.api.SignaturePosition;
import at.knowcenter.wag.egov.egiz.pdf.TablePos;
public class RequestedSignature {
private String signatureProfile;
- private TablePos signaturePosition;
+ private TablePos tablePosition;
private OperationStatus status;
private X509Certificate certificate;
+ private SignaturePosition signaturePosition = null;
//private IPlainSigner signer = null;
public RequestedSignature(OperationStatus status) throws PdfAsException {
@@ -30,9 +32,9 @@ public class RequestedSignature {
this.signatureProfile = profileID;
if(status.getSignParamter().getSignaturePosition() == null) {
- this.signaturePosition = new TablePos();
+ this.tablePosition = new TablePos();
} else {
- this.signaturePosition = new TablePos(status.getSignParamter().getSignaturePosition());
+ this.tablePosition = new TablePos(status.getSignParamter().getSignaturePosition());
}
}
@@ -41,7 +43,7 @@ public class RequestedSignature {
}
public TablePos getTablePos() {
- return this.signaturePosition;
+ return this.tablePosition;
}
public String getSignatureProfileID() {
@@ -55,5 +57,15 @@ public class RequestedSignature {
public void setCertificate(X509Certificate certificate) {
this.certificate = certificate;
}
+
+ public SignaturePosition getSignaturePosition() {
+ return signaturePosition;
+ }
+
+ public void setSignaturePosition(SignaturePosition signaturePosition) {
+ this.signaturePosition = signaturePosition;
+ }
+
+
}