summaryrefslogtreecommitdiff
path: root/pdf-over-signator/src/main/java/at/asit/pdfover
diff options
context:
space:
mode:
Diffstat (limited to 'pdf-over-signator/src/main/java/at/asit/pdfover')
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/ByteArrayDocumentSource.java39
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/DocumentSource.java27
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java12
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SLRequest.java12
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SLResponse.java25
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignResult.java27
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignResultImpl.java52
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/Signator.java58
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureDimension.java69
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureException.java45
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureParameter.java117
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignaturePosition.java107
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/Signer.java33
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignerFactory.java15
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java19
15 files changed, 657 insertions, 0 deletions
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/ByteArrayDocumentSource.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/ByteArrayDocumentSource.java
new file mode 100644
index 00000000..812ddc88
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/ByteArrayDocumentSource.java
@@ -0,0 +1,39 @@
+package at.asit.pdfover.signator;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+/**
+ * A DocumentSource using a byte[] to store the document content
+ */
+public class ByteArrayDocumentSource implements DocumentSource {
+
+ /**
+ * Document content
+ */
+ protected byte[] data;
+
+ /**
+ * Constructor with byte[] content
+ * @param data the document content
+ */
+ public ByteArrayDocumentSource(byte[] data) {
+ this.data = data;
+ }
+
+ @Override
+ public InputStream getInputStream() {
+ return new ByteArrayInputStream(this.data);
+ }
+
+ @Override
+ public int getLength() {
+ return this.data.length;
+ }
+
+ @Override
+ public byte[] getByteArray() {
+ return this.data;
+ }
+
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/DocumentSource.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/DocumentSource.java
new file mode 100644
index 00000000..8b444020
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/DocumentSource.java
@@ -0,0 +1,27 @@
+package at.asit.pdfover.signator;
+
+import java.io.InputStream;
+
+/**
+ * A Document Source
+ */
+public interface DocumentSource {
+
+ /**
+ * Gets Document as Input Stream
+ * @return InputStream of the document
+ */
+ public InputStream getInputStream();
+
+ /**
+ * Get Length of document
+ * @return length of the document
+ */
+ public int getLength();
+
+ /**
+ * Get Document as byte[]
+ * @return byte[] of the Document
+ */
+ public byte[] getByteArray();
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java
new file mode 100644
index 00000000..e86b7100
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java
@@ -0,0 +1,12 @@
+package at.asit.pdfover.signator;
+
+/**
+ * Provides a logo for a signature block
+ */
+public interface Emblem {
+ /**
+ * Return the file name of the Emblem
+ * @return the file name
+ */
+ public String getFileName();
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SLRequest.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SLRequest.java
new file mode 100644
index 00000000..9b393e46
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SLRequest.java
@@ -0,0 +1,12 @@
+package at.asit.pdfover.signator;
+
+/**
+ * Security Layer Request
+ */
+public interface SLRequest {
+ /**
+ * Gets the signature data for this request
+ * @return The document source
+ */
+ public DocumentSource getSignatureData();
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SLResponse.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SLResponse.java
new file mode 100644
index 00000000..88adc117
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SLResponse.java
@@ -0,0 +1,25 @@
+package at.asit.pdfover.signator;
+
+/**
+ * Security Layer response
+ */
+public class SLResponse {
+
+ private String response;
+
+ /**
+ * Create a new Security Layer response
+ * @param response the SLResponse
+ */
+ public SLResponse(String response) {
+ this.response = response;
+ }
+
+ /**
+ * Get the Security Layer response text
+ * @return the Security Layer response text
+ */
+ public String getSLRespone() {
+ return this.response;
+ }
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignResult.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignResult.java
new file mode 100644
index 00000000..7a8d4d0d
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignResult.java
@@ -0,0 +1,27 @@
+package at.asit.pdfover.signator;
+
+import java.security.cert.X509Certificate;
+
+/**
+ * Signature Result containing the signed document as document source
+ */
+public interface SignResult {
+
+ /**
+ * Getter of the property <tt>signaturePosition</tt>
+ * @return Returns the signaturePosition.
+ */
+ public SignaturePosition getSignaturePosition();
+
+ /**
+ * Gets the signed Document
+ * @return Returns the documentSource.
+ */
+ public DocumentSource getSignedDocument();
+
+ /**
+ * Gets the signer certificate
+ * @return The signer x509 certificate
+ */
+ public X509Certificate getSignerCertificate();
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignResultImpl.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignResultImpl.java
new file mode 100644
index 00000000..dc0986cf
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignResultImpl.java
@@ -0,0 +1,52 @@
+package at.asit.pdfover.signator;
+
+import java.security.cert.X509Certificate;
+
+/**
+ * The result of a signature operation
+ */
+public class SignResultImpl implements SignResult {
+
+ private SignaturePosition position;
+ private DocumentSource source;
+ private X509Certificate certificate;
+
+ @Override
+ public SignaturePosition getSignaturePosition() {
+ return this.position;
+ }
+
+ @Override
+ public DocumentSource getSignedDocument() {
+ return this.source;
+ }
+
+ @Override
+ public X509Certificate getSignerCertificate() {
+ return this.certificate;
+ }
+
+ /**
+ * Set the signer certificate
+ * @param x509Certificate the signer certificate
+ */
+ public void setSignerCertificate(X509Certificate x509Certificate) {
+ this.certificate = x509Certificate;
+ }
+
+ /**
+ * Set the signature position
+ * @param postion the signature position
+ */
+ public void setSignaturePosition(SignaturePosition postion) {
+ this.position = postion;
+ }
+
+ /**
+ * Set the signed document
+ * @param source DocumentSource containing the signed document
+ */
+ public void setSignedDocument(DocumentSource source) {
+ this.source = source;
+ }
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Signator.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Signator.java
new file mode 100644
index 00000000..4ba0b981
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Signator.java
@@ -0,0 +1,58 @@
+package at.asit.pdfover.signator;
+
+import java.util.EnumMap;
+import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * PDF Signator Interface
+ */
+public class Signator {
+
+ private static Logger log = LoggerFactory.getLogger(Signator.class);
+
+ /**
+ * List of available PDF signing libraries
+ */
+ public enum Signers {
+ /**
+ * PDF-AS
+ */
+ PDFAS
+ };
+
+ private static Map<Signers, SignerFactory> factoryMap;
+
+ static {
+ factoryMap = new EnumMap<Signers, SignerFactory>(Signers.class);
+
+ try {
+ Class<?> pdfAsClass = Class.forName("at.asit.pdfover.signer.pdfas.PDFASSignerFactory");
+ SignerFactory factory = (SignerFactory)pdfAsClass.newInstance();
+ registerSigner(Signers.PDFAS, factory);
+ } catch (ClassNotFoundException e) {
+ log.error("PDF Signer Factory not found", e);
+ throw new RuntimeException("PDF Signer Factory not found", e);
+ } catch (InstantiationException e) {
+ log.error("PDF Signer Factory could not be instantiated", e);
+ throw new RuntimeException("PDF Signer Factory could not be instantiated", e);
+ } catch (IllegalAccessException e) {
+ log.error("PDF Signer Factory could not accessed", e);
+ throw new RuntimeException("PDF Signer Factory could not accessed", e);
+ }
+ }
+
+ private static void registerSigner(Signers signer, SignerFactory factory) {
+ factoryMap.put(signer, factory);
+ }
+
+ /**
+ * Gets a PDF Signer according to the chosen signer library
+ * @param signer the chosen Signer type
+ * @return the PDF Signer
+ */
+ public static Signer getSigner(Signers signer) {
+ return factoryMap.get(signer).createSigner();
+ }
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureDimension.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureDimension.java
new file mode 100644
index 00000000..8d47cb19
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureDimension.java
@@ -0,0 +1,69 @@
+package at.asit.pdfover.signator;
+
+/**
+ * The dimensions of the visible signature block
+ */
+public class SignatureDimension {
+
+ /**
+ * The visible Signature block width
+ */
+ protected int width;
+
+ /**
+ * The visible Signature block height
+ */
+ protected int height;
+
+ /**
+ * Constructor
+ * @param width The width of the signature block
+ * @param height The height of the signature block
+ */
+ public SignatureDimension(int width, int height) {
+ setDimension(width, height);
+ }
+
+ /**
+ * Sets the the dimension of the signature block
+ * @param width The width
+ * @param height The height
+ */
+ public void setDimension(int width, int height)
+ {
+ setWidth(width);
+ setHeight(height);
+ }
+
+ /**
+ * Sets the width for the dimension
+ * @param width
+ */
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ /**
+ * Gets the width of the visible Signature block
+ * @return the width
+ */
+ public int getWidth() {
+ return this.width;
+ }
+
+ /**
+ * Sets the height for the dimension
+ * @param height
+ */
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ /**
+ * Gets the height of the visible Signature block
+ * @return the height
+ */
+ public int getHeight() {
+ return this.height;
+ }
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureException.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureException.java
new file mode 100644
index 00000000..d41ba24d
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureException.java
@@ -0,0 +1,45 @@
+package at.asit.pdfover.signator;
+
+/**
+ * Base class for signature exceptions
+ */
+public class SignatureException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 711578398780816710L;
+
+
+ /**
+ * Empty constructor
+ */
+ public SignatureException() {
+ super();
+ }
+
+ /**
+ * Constructor with causing exception
+ * @param cause the cause
+ */
+ public SignatureException(Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Constructor with message
+ * @param msg the message
+ */
+ public SignatureException(String msg) {
+ super(msg);
+ }
+
+ /**
+ * Constructor with message and causing exception
+ * @param message the message
+ * @param cause the cause
+ */
+ public SignatureException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureParameter.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureParameter.java
new file mode 100644
index 00000000..3fa9c7ce
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignatureParameter.java
@@ -0,0 +1,117 @@
+package at.asit.pdfover.signator;
+
+/**
+ * The Signature Parameter
+ */
+public abstract class SignatureParameter {
+
+ /**
+ * The Signature Position
+ * @uml.property name="signaturePosition"
+ * @uml.associationEnd
+ */
+ protected SignaturePosition signaturePosition = null;
+
+ /**
+ * The signature Device
+ */
+ protected String keyIdentifier = null;
+
+ /**
+ * The input document
+ * @uml.property name="documentSource"
+ * @uml.associationEnd
+ */
+ protected DocumentSource documentSource = null;
+
+ /**
+ * holds the collimating mark
+ * @uml.property name="collimark"
+ * @uml.associationEnd
+ */
+ protected Emblem emblem;
+
+ /**
+ * Getter of the property <tt>signaturePosition</tt>
+ * @return Returns the signaturePosition.
+ */
+ public SignaturePosition getSignaturePosition() {
+ return this.signaturePosition;
+ }
+
+ /**
+ * Setter of the property <tt>signaturePosition</tt>
+ * @param signaturePosition The signaturePosition to set.
+ */
+ public void setSignaturePosition(SignaturePosition signaturePosition) {
+ this.signaturePosition = signaturePosition;
+ }
+
+ /**
+ * Getter of the property <tt>keyIdentifier</tt>
+ * @return Returns the keyIdentifier.
+ */
+ public String getKeyIdentifier() {
+ return this.keyIdentifier;
+ }
+
+ /**
+ * Setter of the property <tt>keyIdentifier</tt>
+ * @param keyIdentifier The keyIdentifier to set.
+ */
+ public void setKeyIdentifier(String keyIdentifier) {
+ this.keyIdentifier = keyIdentifier;
+ }
+
+ /**
+ * Getter of the property <tt>documentSource</tt>
+ * @return Returns the documentSource.
+ */
+ public DocumentSource getInputDocument() {
+ return this.documentSource;
+ }
+
+ /**
+ * Setter of the property <tt>documentSource</tt>
+ * @param inputDocument The documentSource to set.
+ */
+ public void setInputDocument(DocumentSource inputDocument) {
+ this.documentSource = inputDocument;
+ }
+
+ /**
+ * Gets the Dimension to display the Placeholder
+ * @return the placeholder dimensions
+ */
+ public abstract SignatureDimension getPlaceholderDimension();
+
+ /**
+ * Gets the Emblem
+ * @return the Emblem
+ */
+ public Emblem getEmblem() {
+ return this.emblem;
+ }
+
+ /**
+ * Sets the Emblem
+ * @param emblem The new Emblem
+ */
+ public void setEmblem(Emblem emblem) {
+ this.emblem = emblem;
+ }
+
+ /**
+ * Sets generic properties
+ * @param key
+ * @param value
+ */
+ public abstract void setProperty(String key, String value);
+
+ /**
+ * Gets generic properties
+ * @param key
+ * @return associated value
+ */
+ public abstract String getProperty(String key);
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignaturePosition.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignaturePosition.java
new file mode 100644
index 00000000..59fa4864
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignaturePosition.java
@@ -0,0 +1,107 @@
+package at.asit.pdfover.signator;
+
+
+/**
+ * Represents the position of a visible signature block
+ */
+public class SignaturePosition {
+ /**
+ * The x value of the position
+ */
+ protected float x = 0;
+
+ /**
+ * The y value of the position
+ */
+ protected float y = 0;
+
+ /**
+ * The page value of the position
+ */
+ protected int page = 0;
+
+ /**
+ * Whether automatic positioning is used
+ */
+ protected boolean autoPositioning;
+
+ /**
+ * Default constructor
+ * No position given, hence automatic positioning will be used
+ */
+ public SignaturePosition() {
+ this.autoPositioning = true;
+ }
+
+ /**
+ * X - Y Constructor (Page = 0)
+ * @param x The x value of the position
+ * @param y The y value of the position
+ */
+ public SignaturePosition(float x, float y) {
+ this.autoPositioning = false;
+ setPosition(x, y);
+ }
+
+ /**
+ * Constructor
+ * @param x The x value of the signature position
+ * @param y The y value of the signature position
+ * @param page The page value of the signature position
+ */
+ public SignaturePosition(float x, float y, int page) {
+ this.autoPositioning = false;
+ setPosition(x, y);
+ setPage(page);
+ }
+
+ /**
+ * Sets new position
+ * @param x the new x value
+ * @param y the new y value
+ */
+ public void setPosition(float x, float y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ /**
+ * Gets the X value of the position
+ * @return float the x value of the position
+ */
+ public float getX() {
+ return this.x;
+ }
+
+ /**
+ * Gets the Y value of the position
+ * @return float the y value of the position
+ */
+ public float getY() {
+ return this.y;
+ }
+
+ /**
+ * Sets Page value of position
+ * @param page the new page value
+ */
+ public void setPage(int page) {
+ this.page = page;
+ }
+
+ /**
+ * Gets the Page value of the position
+ * @return int the page value of the position
+ */
+ public int getPage() {
+ return this.page;
+ }
+
+ /**
+ * Gets whether automatic positioning is used
+ * @return true if the signature position is determined automatically
+ */
+ public boolean useAutoPositioning() {
+ return this.autoPositioning;
+ }
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Signer.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Signer.java
new file mode 100644
index 00000000..fd7bee09
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Signer.java
@@ -0,0 +1,33 @@
+package at.asit.pdfover.signator;
+
+/**
+ * PDF Signer base Class
+ * This class should be extended to support libraries such as PDF-AS or PADES.
+ */
+public interface Signer {
+
+ /**
+ * Prepare a signature
+ * Defines signature parameters, the pdf library prepares the pdf document to sign and
+ * creates a Security Layer Request.
+ * @param parameter The signature parameters
+ * @return The signing state (contains the prepared document and the signature request
+ * @throws SignatureException
+ */
+ public SigningState prepare(SignatureParameter parameter) throws SignatureException;
+
+ /**
+ * Adds the signature to the document.
+ * The SL Response has to be set in the state
+ * @param state The signing state
+ * @return The signature Result
+ * @throws SignatureException
+ */
+ public SignResult sign(SigningState state) throws SignatureException;
+
+ /**
+ * Creates new signing profile
+ * @return The new Profile
+ */
+ public SignatureParameter newParameter();
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignerFactory.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignerFactory.java
new file mode 100644
index 00000000..6c0b6487
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SignerFactory.java
@@ -0,0 +1,15 @@
+package at.asit.pdfover.signator;
+
+import at.asit.pdfover.signator.Signer;
+
+/**
+ * A Signer factory
+ * Creates Signer instances
+ */
+public abstract class SignerFactory {
+ /**
+ * Create a Signer
+ * @return the new Signer
+ */
+ public abstract Signer createSigner();
+}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java
new file mode 100644
index 00000000..c1e82da3
--- /dev/null
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java
@@ -0,0 +1,19 @@
+package at.asit.pdfover.signator;
+
+/**
+ * The state of the pdf signing library
+ */
+public interface SigningState {
+
+ /**
+ * Gets the Security Layer Request to create the signature
+ * @return The Signature Request
+ */
+ public abstract SLRequest getSignatureRequest();
+
+ /**
+ * Sets the Security Layer Response to the Signature Request
+ * @param value The Signature Response
+ */
+ public abstract void setSignatureResponse(SLResponse value);
+}