public final class AOPDFSigner extends java.lang.Object implements AOSigner
Para compatibilidad estricta con PAdES-BES/EPES se utiliza ETSI.CAdES.detached como nombre del subfiltro.
La compatibilidad con PAdES no es completa, omitiéndose los siguientes aspectos de la normativa:
Estas mismas deficiencias provocan igualmente la incompatibilidad de las firmas generadas con "Carpetas PDF" (Portfolios PDF). Cuando se encuentran documentos PDF con ficheros adjuntos o empotrados se imprime información relativa en consola.
Por compatibilidad con Adobe Reader, la firmas se generan con el subfiltro "adbe.pkcs7.detached" en vez de con
"ETSI.CAdES.detached". Consulte la documentación del parámetro signatureSubFilter
para variar este comportamiento.
La clase necesita específicamente la versión de iText 2.1.7 modificada para el Cliente @firma.
Constructor and Description |
---|
AOPDFSigner() |
Modifier and Type | Method and Description |
---|---|
byte[] |
cosign(byte[] data,
byte[] sign,
java.lang.String algorithm,
java.security.PrivateKey key,
java.security.cert.Certificate[] certChain,
java.util.Properties extraParams)
Añade una firma PAdES a un documento PDF.
|
byte[] |
cosign(byte[] sign,
java.lang.String algorithm,
java.security.PrivateKey key,
java.security.cert.Certificate[] certChain,
java.util.Properties extraParams)
Añade una firma PAdES a un documento PDF.
|
byte[] |
countersign(byte[] sign,
java.lang.String algorithm,
CounterSignTarget targetType,
java.lang.Object[] targets,
java.security.PrivateKey key,
java.security.cert.Certificate[] certChain,
java.util.Properties extraParams)
Operación no soportada para firmas PAdES.
|
byte[] |
getData(byte[] sign)
Si la entrada es un documento PDF, devuelve el mismo documento PDF.
|
static java.lang.String |
getSignedName(java.lang.String originalName)
Obtiene el nombre con el que debería guardarse un PDF tras ser
firmado.
|
java.lang.String |
getSignedName(java.lang.String originalName,
java.lang.String inText)
Devuelve el nombre de fichero de firma predeterminado que se recomienda usar para
un PDF firmado con nombre original igual al proporcionado.
|
AOTreeModel |
getSignersStructure(byte[] sign,
boolean asSimpleSignInfo)
Recupera el árbol de nodos de firma de una firma electrónica.
|
AOSignInfo |
getSignInfo(byte[] data)
Si la entrada es un documento PDF, devuelve un objeto
AOSignInfo
con el formato establecido a AOSignConstants.SIGN_FORMAT_PDF . |
boolean |
isSign(byte[] data)
Comprueba que los datos proporcionados sean un documento PDF.
|
boolean |
isValidDataFile(byte[] data)
Comprueba que los datos proporcionados sean un documento PDF.
|
byte[] |
sign(byte[] inPDF,
java.lang.String algorithm,
java.security.PrivateKey key,
java.security.cert.Certificate[] certChain,
java.util.Properties xParams)
Firma un documento PDF en formato PAdES.
|
public byte[] sign(byte[] inPDF, java.lang.String algorithm, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties xParams) throws AOException, java.io.IOException
Notas sobre documentos certificados:
Si un PDF firmado se ha certificado (por ejemplo, añadiendo una firma electrónica usando Adobe Acrobat), cualquier
modificación posterior del fichero (como la adición de nuevas firmas con este método) invalidará
las firmas previamente existentes.
Si se detecta un documento PDF certificado, se mostrará un diálogo gráfico advirtiendo al usuario de esta
situación y pidiendo confirmación para continuar.
Si desea evitar interacciones directas con los usuarios
consulte la documentación de las opciones allowSigningCertifiedPdfs
y headLess
.
Notas sobre documentos protegidos con contraseña:
Si un PDF está protegido con contraseña por estar cifrado, se mostrará un diálogo gráfico advirtiendo al usuario de esta
situación y solicitando la contraseña de apertura del PDF.
Si desea evitar interacciones directas con los usuarios
consulte la documentación de las opciones ownerPassword
y headLess
.
Adicionalmente, es posible, si el fichero de entrada estaba cifrado y protegido con contraseña, que la salida sea un documento PDF
igualmente cifrado y protegido con contraseña. Consulte la documentación de la opción avoidEncryptingSignedPdfs
para más información.
sign
in interface AOSimpleSigner
inPDF
- Documento PDF a firmaralgorithm
- Algoritmo a usar para la firma.
Se aceptan los siguientes algoritmos en el parámetro algorithm
:
key
- Clave privada a usar para firmarcertChain
- Cadena de certificados del firmantexParams
- Parámetros adicionales para la firma (detalle)AOException
- Cuando ocurre cualquier problema durante el proceso.java.io.IOException
- Cuando hay errores en el tratamiento de datos.public byte[] cosign(byte[] data, byte[] sign, java.lang.String algorithm, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties extraParams) throws AOException, java.io.IOException
sign(...)
puesto que las multifirmas en los ficheros PDF se limitan a firmas independientes "en serie", pero no implementando los mecanismos de
cofirma o contrafirma de CAdES.
Notas sobre documentos certificados:
Si un PDF firmado se ha certificado (por ejemplo, añadiendo una firma electrónica usando Adobe Reader), cualquier
modificación posterior del fichero (como la adición de nuevas firmas con este método) invalidará
las firmas previamente existentes.
Si se detecta un documento PDF certificado, se mostrará un diálogo gráfico advirtiendo al usuario de esta
situación y pidiendo confirmación para continuar.
Si desea evitar interacciones directas con los usuarios
consulte la documentación de las opciones allowSigningCertifiedPdfs
y headLess
.
Notas sobre documentos protegidos con contraseña:
Si un PDF está protegido con contraseña por estar cifrado, se mostrará un diálogo gráfico advirtiendo al usuario de esta
situación y solicitando la contraseña de apertura del PDF.
Si desea evitar interacciones directas con los usuarios
consulte la documentación de las opciones ownerPassword
y headLess
.
Adicionalmente, es posible, si el fichero de entrada estaba cifrado y protegido con contraseña, que la salida sea un documento PDF
igualmente cifrado y protegido con contraseña. Consulte la documentación de la opción avoidEncryptingSignedPdfs
para más información.
sign(...)
cosign
in interface AOCoSigner
data
- Se ignora el valor de este parámetro. El documento PDF debe proporcionarse mediante el parátro sign
.sign
- Documento PDF a firmaralgorithm
- Algoritmo a usar para la firma.
Se aceptan los siguientes algoritmos en el parámetro algorithm
:
key
- Clave privada a usar para firmarcertChain
- Cadena de certificados del firmanteextraParams
- Parámetros adicionales para la firma (detalle)AOException
- Cuando ocurre cualquier problema durante el procesojava.io.IOException
- En caso de errores de entrada / salidapublic byte[] cosign(byte[] sign, java.lang.String algorithm, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties extraParams) throws AOException, java.io.IOException
sign(...)
puesto que las multifirmas en los ficheros PDF se limitan a firmas independientes "en serie", pero no implementando los mecanismos de
cofirma o contrafirma de CAdES.
Notas sobre documentos certificados:
Si un PDF firmado se ha certificado (por ejemplo, añadiendo una firma electrónica usando Adobe Reader), cualquier
modificación posterior del fichero (como la adición de nuevas firmas con este método) invalidará
las firmas previamente existentes.
Si se detecta un documento PDF certificado, se mostrará un diálogo gráfico advirtiendo al usuario de esta
situación y pidiendo confirmación para continuar.
Si desea evitar interacciones directas con los usuarios
consulte la documentación de las opciones allowSigningCertifiedPdfs
y headLess
.
Notas sobre documentos protegidos con contraseña:
Si un PDF está protegido con contraseña por estar cifrado, se mostrará un diálogo gráfico advirtiendo al usuario de esta
situación y solicitando la contraseña de apertura del PDF.
Si desea evitar interacciones directas con los usuarios
consulte la documentación de las opciones ownerPassword
y headLess
.
Adicionalmente, es posible, si el fichero de entrada estaba cifrado y protegido con contraseña, que la salida sea un documento PDF
igualmente cifrado y protegido con contraseña. Consulte la documentación de la opción avoidEncryptingSignedPdfs
para más información.
sign(...)
cosign
in interface AOCoSigner
sign
- Documento PDF a firmaralgorithm
- Algoritmo a usar para la firma.
Se aceptan los siguientes algoritmos en el parámetro algorithm
:
key
- Clave privada a usar para firmarcertChain
- Cadena de certificados del firmanteextraParams
- Parámetros adicionales para la firma (detalle)AOException
- Cuando ocurre cualquier problema durante el procesojava.io.IOException
- En caso de errores de entrada / salidapublic byte[] countersign(byte[] sign, java.lang.String algorithm, CounterSignTarget targetType, java.lang.Object[] targets, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties extraParams)
countersign
in interface AOCounterSigner
sign
- Flujo de lectura de los datos a firmar.algorithm
- Algoritmo a usar para la firma (SHA1withRSA, SHA512withRSA, etc.).targetType
- Tipo de objetivo de la contrafirma.targets
- Información complementaria según el tipo de objetivo de la contrafirma.key
- Clave privada a usar para firmar.certChain
- Cadena de certificados del firmante.extraParams
- Parámetros adicionales para la contrafirma.public java.lang.String getSignedName(java.lang.String originalName, java.lang.String inText)
getSignedName
in interface AOSigner
originalName
- Nombre del fichero original que se firma.inText
- Sufijo a agregar al nombre de fichero devuelto, inmediatamente anterior a la extensión.public AOTreeModel getSignersStructure(byte[] sign, boolean asSimpleSignInfo)
asSimpleSignInfo
. Los nodos se
mostrarán en el mismo orden y con la misma estructura con el que
aparecen en la firma electrónica.getSignersStructure
in interface AOSigner
sign
- Firma electrónica de la que se desea obtener la estructura.asSimpleSignInfo
- Si es true
se devuelve un árbol con la
información básica de cada firma individual
mediante objetos AOSimpleSignInfo
, si es false
un árbol con los nombres (CN X.500) de los
titulares certificados.null
en caso de error.public boolean isSign(byte[] data)
public boolean isValidDataFile(byte[] data)
isValidDataFile
in interface AOSigner
data
- Datos a comprobartrue
si los datos proporcionados son un documento PDF, false
en caso contrariopublic static java.lang.String getSignedName(java.lang.String originalName)
originalName
- Nombre original del fichero PDF.public byte[] getData(byte[] sign) throws AOInvalidFormatException
getData
in interface AOSigner
sign
- Documento PDFAOInvalidFormatException
- Si los datos de entrada no son un documento PDF.public AOSignInfo getSignInfo(byte[] data) throws AOException
AOSignInfo
con el formato establecido a AOSignConstants.SIGN_FORMAT_PDF
.getSignInfo
in interface AOSigner
data
- Documento PDF.AOSignInfo
con el formato establecido a AOSignConstants.SIGN_FORMAT_PDF
.AOException
- Si los datos de entrada no son un documento PDF.