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.UnrecoverableKeyException;
10 import java.util.Date;
11
12 import es.caib.signatura.api.SignaturePrivKeyException;
13
14 import es.caib.signatura.api.Signature;
15 import es.caib.signatura.api.SignatureCertNotFoundException;
16 import es.caib.signatura.api.SignatureException;
17 import es.caib.signatura.api.SignatureProviderException;
18 import es.caib.signatura.api.SignatureSignException;
19 import es.caib.signatura.api.SignatureTimestampException;
20
21 /**Interfaz que independiza las implementaciones de firma y verificación de cada entidad certificadora con una
22 * serie de métodos estándar, llevando a cabo la firma digital desacoplada (firma y documento original
23 * se mantienen por separado). Esta firma puede ser avanzada o avanzada con sello de tiempo.
24 * La firma se encapsula con la clase <code>Signature</code>.
25 *
26 * @author 3dígits
27 * @version 1.0
28 * @see Signature
29 */
30 public interface SignerProviderInterface {
31
32
33
34 /**
35 * Obtiene la lista de certificados disponibles en el almacén de certificados definido por la API
36 * de la entidad certificadora: disco duro, dispositivo USB, etc.
37 * @return lista de los nombres de certificado disponibles
38 * @throws SignatureCertNotFoundException si no se encuentra ningún certificado disponible
39 * @throws SignaturePrivKeyException si no se pueden obtener las claves privadas de los certificados
40 */
41 public String[] getCertList(boolean recognized) throws SignatureCertNotFoundException, SignaturePrivKeyException;
42
43 /**
44 * Firma digitalmente de un documento PDF pasado como <code>InputStream</code> y devuelve el mismo PDF firmado
45 * y modificado de forma que, en uno de los bordes del documento que se le indique, aparezca el firmante,
46 * la url desde la que se puede consultar el PDF y una matriz de puntos en formato PDF417 que continene
47 * esa misma URL.
48 * @param contentStream flujo de bytes del documento PDF a firmar
49 * @param certificateName nombre del certificado que se usará para firmar
50 * @param password contraseña de la clave privada del usuario
51 * @param contentType tipo MIME del documento a firmar
52 * @param url URL que se sobreimpresiona sobre el documento firmado
53 * @param position Posición en la que se se sobreimpresionará la url en cada una de las hojas del documento firmado. Pueden ser PDF_SIGN_POSITION_TOP,
54 * PDF_SIGN_POSITION_BOTTOM, PDF_SIGN_POSITION_RIGHT o PDF_SIGN_POSITION_LEFT
55 * @return documento PDF firmado
56 * @throws IOException si ha habido algún problema de comunicación al pasar el stream de bytes
57 * del documento
58 * @throws SignatureProviderException si no se ha podido acceder a la API del proveedor de firma electrónica
59 * @throws SignatureSignException si ha habido algún problema en el proceso de firma
60 * @throws UnrecoverableKeyException si la contraseña de la clave privada no es correcta
61 * @throws SignatureException
62 */
63 public void signPDF (InputStream contentStream, OutputStream signedStream, String certificateName, String password, String contentType,
64 boolean recognized, String url, int position)
65 throws IOException, SignatureException;
66
67 /**
68 * Obtiene la firma digital de un documento de disco y la encapsula en un objeto
69 * <code>Signature</code> sin sello de tiempo.
70 * @param fileName nombre del fichero que se desea firmar
71 * @param certificateName nombre del certificado que se usará para firmar
72 * @param password contraseña de la clave privada del usuario
73 * @param contentType tipo MIME del documento a firmar
74 * @return {@link Signature} firma del documento
75 * @throws FileNotFoundException si no se encuentra el fichero a firmar
76 * @throws IOException si ha habido algún problema al abrir el fichero
77 * @throws SignatureProviderException si no se ha podido acceder a la API del proveedor de firma electrónica
78 * @throws SignatureSignException si ha habido algún problema en el proceso de firma
79 * @throws UnrecoverableKeyException si la contraseña de la clave privada no es correcta
80 * @throws SignatureException
81 */
82 public Signature sign (InputStream contentStream, String certificateName, String password, String contentType, boolean recognized, boolean timeStamp, boolean rawSign)
83 throws IOException, SignatureException;
84
85
86 /**
87 * Obtiene la hora oficial que tendría un sello de tiempo generado en ese mismo instante
88 *
89 * @return Hora Oficial
90 * @param certificateName nombre del certificado que se usará para firmar
91 * @param password contraseña de la clave privada del usuario
92 * @param contentType tipo MIME del documento a firmar
93 * @throws IOException
94 * @throws SignatureException
95 */
96 public Date getCurrentDate(String certificateName, String password, boolean recognized) throws SignatureTimestampException, SignatureException, IOException;
97
98 /**
99 * Obtiene la versión del componente
100 * @return versionNumber
101 */
102 public String getVersion ();
103 }