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.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 }