View Javadoc

1   
2   package es.caib.signatura.impl;
3   
4   
5   import java.io.InputStream;
6   import java.io.FileNotFoundException;
7   import java.io.IOException;
8   import java.io.OutputStream;
9   import java.security.PrivateKey;
10  import java.security.UnrecoverableKeyException;
11  import java.security.cert.X509Certificate;
12  import java.util.Date;
13  
14  import es.caib.signatura.api.SignaturePrivKeyException;
15  
16  import es.caib.signatura.api.ParsedCertificate;
17  import es.caib.signatura.api.Signature;
18  import es.caib.signatura.api.SignatureCertNotFoundException;
19  import es.caib.signatura.api.SignatureException;
20  import es.caib.signatura.api.SignatureProviderException;
21  import es.caib.signatura.api.SignatureSignException;
22  import es.caib.signatura.api.SignatureTimestampException;
23  
24  /**Interfaz que independiza las implementaciones de firma y verificación de cada entidad certificadora con una
25   * serie de métodos estándar, llevando a cabo la firma digital desacoplada (firma y documento original
26   * se mantienen por separado). Esta firma puede ser avanzada o avanzada con sello de tiempo.
27   * La firma se encapsula con la clase <code>Signature</code>.
28   * 
29   * @author 3dígits
30   * @version 1.0
31   * @see Signature
32   */
33  public interface SignerProviderInterface {
34  
35  	
36  
37    /**
38     * Firma digitalmente de un documento PDF pasado como <code>InputStream</code> y devuelve el mismo PDF firmado
39     * y modificado. Las opciones de firma PDF estan definidas en la clase <code>Signer</code>.
40     * 
41     * @param contentStream flujo de bytes del documento PDF a firmar
42     * @param signedStream flujo de bytes del documento PDF firmado
43     * @param certificateName nombre del certificado que se usará para firmar
44     * @param password contraseña de la clave privada del usuario
45     * @param contentType tipo MIME del documento a firmar
46     * @param recognized certificado reconocido o no
47     * @param url URL en caso de estampado PDF417, o motivo de firma para firmas con estampado ABODE
48     * @param position Opciones de firma PDF definidas en la clase <code>Signer</code>
49     * @param allowMultipleSignature Permitir o no refirmado del documento PDF si el documento de entrada ya está firmado
50     * @throws IOException  si ha habido algún problema de comunicación al pasar el stream de bytes
51     * del documento
52     * @throws SignatureProviderException  si no se ha podido acceder a la API del proveedor de firma electrónica
53     * @throws SignatureSignException  si ha habido algún problema en el proceso de firma
54     * @throws UnrecoverableKeyException  si la contraseña de la clave privada no es correcta
55     * @throws SignatureException
56     */
57  	public void signPDF (InputStream contentStream, OutputStream signedStream, String certificateName, String password, String contentType, 
58  			boolean recognized, String url, int position, boolean allowMultipleSignature) 
59      throws IOException, SignatureException;
60  
61  	
62  	 /**
63  	  * Firma digitalmente de un documento PDF pasado como <code>InputStream</code> y devuelve el mismo PDF firmado
64  	  * y modificado. Las opciones de firma PDF estan establecidas en la clase <code>Signer</code>.
65  	  *  
66  	  * @param pdfInputStream
67  	  * @param signedStream
68  	  * @param certificateName Nombre del certificado obtenido de la llamada a Signer.getCertList()
69        * @param password contraseña de la clave privada del usuario
70        * @param contentType tipo MIME del documento a firmar
71        * @param recognized certificado reconocido o no
72  	  * @param textoAdicional URL en caso de estampado PDF417, o motivo de firma para firmas con estampado ABODE
73  	  * @param stampOptions Opciones de firma PDF definidas en la clase <code>Signer</code>
74  	  * @param top El 0 corresponde al borde inferior del documento.
75  	  * @param left El 0 corresponde al borde izquierdo del documento
76  	  * @param height Anchura máxima de  la estampa, el texto de dividirà en las líneas necesarias para que quepa en la anchura establecida.
77  	  * @param width Altura máxima de la estampa. Debe tenerse en cuenta que si la altura no es suficientemente grande para el texto que se divide en múltiples líneas, este se corta y desaparece.
78  	  * @param rotation Sólo permite rotación la firma con estampado PDF417. En caso de rotación el estampado se rotarà desde la esquina inferior izquierda (top, left).
79  	  * @param allowMultipleSignature Permitir o no refirmado del documento PDF si el documento de entrada ya está firmado
80  	  * @throws IOException
81  	  * @throws SignatureException
82  	  */
83  	public void signPDF(InputStream pdfInputStream, OutputStream signedStream,
84  			String certificateName,String password, String contentType, 
85  			boolean recognized, String textoAdicional, int stampOptions,
86  	        float top, float left,float height, float width, float rotation,
87  	        boolean allowMultipleSignature) throws IOException, SignatureException;
88  	
89  	/**
90       * Firma digitalmente de un documento PDF pasado como <code>InputStream</code> y devuelve el mismo PDF firmado
91       * y modificado de forma que, en uno de los bordes del documento que se le indique, aparezca el firmante que 
92       * compulsa la copia, la url desde la que se puede consultar el PDF y una matriz de puntos en formato PDF417 que 
93       * continene esa misma URL.
94       * @param contentStream flujo de bytes del documento PDF a firmar.
95       * @param signedStream flujo de bytes del documento PDF firmado.
96       * @param certificateName nombre del certificado que se usará para firmar.
97       * @param password contraseña de la clave privada del usuario.
98       * @param contentType tipo MIME del documento a firmar.
99       * @param recognized certificado reconocido o no.
100      * @param url URL que se sobreimpresiona sobre el documento firmado.
101      * @param localidad Localidad que se mostrará en la compulsa.
102 	 * @param x posición en el eje X de la compulsa
103 	 * @param y posición en el eje Y de la compulsa
104 	 * @param rotation rotación, en grados, en el punto (x,y) que se le dará a la compulsa
105 	 * @param properties 
106 	 * @throws IOException
107 	 * @throws SignatureException
108 	 */
109 	public void certifyDigitalCopy (InputStream contentStream, OutputStream signedStream, String certificateName,
110 			String password, String contentType, boolean recognized, String url, String localidad, float x, float y, float rotation, SignaturaProperties properties)
111     throws IOException, SignatureException;
112 
113 	/**
114 	 * Obtiene la firma digital de un documento de disco y la encapsula en un objeto
115 	 * <code>Signature</code>.
116 	 * @param fileName nombre del fichero que se desea firmar
117 	 * @param certificateName nombre del certificado que se usará para firmar
118 	 * @param password contraseña de la clave privada del usuario
119 	 * @param contentType tipo MIME del documento a firmar
120 	 * @return {@link Signature} firma del documento
121 	 * @throws FileNotFoundException  si no se encuentra el fichero a firmar
122 	 * @throws IOException  si ha habido algún problema al abrir el fichero
123 	 * @throws SignatureProviderException  si no se ha podido acceder a la API del proveedor de firma electrónica
124 	 * @throws SignatureSignException  si ha habido algún problema en el proceso de firma
125 	 * @throws UnrecoverableKeyException  si la contraseña de la clave privada no es correcta
126 	 * @throws SignatureException
127 	 */
128 	public Signature sign (InputStream contentStream, String certificateName, String password, String contentType, boolean recognized, boolean timeStamp, boolean rawSign) 
129           throws IOException, SignatureException;
130 
131 
132   /** 
133    * Obtiene la hora oficial que tendría un sello de tiempo generado en ese mismo instante
134    * 
135    * @return Hora Oficial
136  * @param certificateName nombre del certificado que se usará para firmar
137  * @param password contraseña de la clave privada del usuario
138  * @param contentType tipo MIME del documento a firmar
139  * @throws IOException
140  * @throws SignatureException
141    */
142   public Date getCurrentDate(String certificateName, String password, boolean recognized) throws SignatureTimestampException, SignatureException, IOException;
143 
144   /**
145    * Obtiene la versión del componente
146    * @return versionNumber
147    */
148   public String getVersion ();
149 }