public final class AOPDFSigner
extends java.lang.Object
implements es.gob.afirma.core.signers.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 |
---|---|
static void |
configureRespectfulProperties(byte[] data,
java.util.Properties config)
Configura, cuando no lo esten ya, las propiedades necesarias para que las firmas
sobre unos datos respeten el formato que tuviesen firmas anteriores.
|
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,
es.gob.afirma.core.signers.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.
|
static es.gob.afirma.core.signers.SignEnhancer |
getSignEnhancer()
Obtiene el mejorador de firmas por defecto.
|
static java.util.Properties |
getSignEnhancerConfig()
Obtiene la configuración del mejorador de firmas por defecto.
|
es.gob.afirma.core.util.tree.AOTreeModel |
getSignersStructure(byte[] sign,
boolean asSimpleSignInfo)
Recupera el árbol de nodos de firma de una firma electrónica.
|
es.gob.afirma.core.signers.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 static es.gob.afirma.core.signers.SignEnhancer getSignEnhancer()
public static java.util.Properties getSignEnhancerConfig()
public byte[] sign(byte[] inPDF, java.lang.String algorithm, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties xParams) throws es.gob.afirma.core.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, si el fichero de entrada estaba cifrado y protegido con contraseña, la salida seráa un documento PDF
igualmente cifrado y protegido con contraseña..
sign
in interface es.gob.afirma.core.signers.AOSimpleSigner
inPDF
- Documento PDF a firmar.algorithm
- Algoritmo a usar para la firma.
Se aceptan los siguientes algoritmos en el parámetro algorithm
:
key
- Clave privada a usar para firmar.certChain
- Cadena de certificados del firmante.xParams
- Parámetros adicionales para la firma (detalle).es.gob.afirma.core.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 es.gob.afirma.core.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, si el fichero de entrada estaba cifrado y protegido con contraseña, la salida será un documento PDF
igualmente cifrado y protegido con contraseña.
sign(...)
.cosign
in interface es.gob.afirma.core.signers.AOCoSigner
data
- Se ignora el valor de este parámetro. El documento PDF debe proporcionarse mediante el parátro sign
.sign
- Documento PDF a firmar.algorithm
- Algoritmo a usar para la firma.
Se aceptan los siguientes algoritmos en el parámetro algorithm
:
key
- Clave privada a usar para firmar.certChain
- Cadena de certificados del firmante.extraParams
- Parámetros adicionales para la firma (detalle).es.gob.afirma.core.AOException
- Cuando ocurre cualquier problema durante el proceso.java.io.IOException
- En caso de errores de entrada / salida.public byte[] cosign(byte[] sign, java.lang.String algorithm, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties extraParams) throws es.gob.afirma.core.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, si el fichero de entrada estaba cifrado y protegido con contraseña, la salida será un documento PDF
igualmente cifrado y protegido con contraseña.
sign(...)
cosign
in interface es.gob.afirma.core.signers.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 firmar.certChain
- Cadena de certificados del firmante.extraParams
- Parámetros adicionales para la firma (detalle).es.gob.afirma.core.AOException
- Cuando ocurre cualquier problema durante el proceso.java.io.IOException
- En caso de errores de entrada / salida.public byte[] countersign(byte[] sign, java.lang.String algorithm, es.gob.afirma.core.signers.CounterSignTarget targetType, java.lang.Object[] targets, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties extraParams)
countersign
in interface es.gob.afirma.core.signers.AOCounterSigner
public java.lang.String getSignedName(java.lang.String originalName, java.lang.String inText)
getSignedName
in interface es.gob.afirma.core.signers.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 es.gob.afirma.core.util.tree.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 es.gob.afirma.core.signers.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)
isSign
in interface es.gob.afirma.core.signers.AOSigner
data
- Datos a comprobar.true
si los datos proporcionados son un documento PDF,
false
en caso contrario.public boolean isValidDataFile(byte[] data)
isValidDataFile
in interface es.gob.afirma.core.signers.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 es.gob.afirma.core.AOInvalidFormatException
getData
in interface es.gob.afirma.core.signers.AOSigner
sign
- Documento PDFes.gob.afirma.core.AOInvalidFormatException
- Si los datos de entrada no son un documento PDF.public es.gob.afirma.core.signers.AOSignInfo getSignInfo(byte[] data) throws es.gob.afirma.core.AOException
AOSignInfo
con el formato establecido a AOSignConstants.SIGN_FORMAT_PDF
.getSignInfo
in interface es.gob.afirma.core.signers.AOSigner
data
- Documento PDF.AOSignInfo
con el formato establecido a AOSignConstants.SIGN_FORMAT_PDF
.es.gob.afirma.core.AOException
- Si los datos de entrada no son un documento PDF.public static void configureRespectfulProperties(byte[] data, java.util.Properties config)
data
- Datos que se desean firmar.config
- Configuración establecida.