public final class AOCAdESSigner extends java.lang.Object implements AOSigner
AOSigner
.
Un posible ejemplo de uso sería el siguiente:
// Establecemos los parametros adicionales final Properties extraParams = new Properties(); extraParams.setProperty("mode", AOSignConstants.SIGN_MODE_IMPLICIT); extraParams.setProperty("policyIdentifier", "urn:oid:2.16.724.1.3.1.1.2.1.8"); extraParams.setProperty("policyIdentifierHash", "V8lVVNGDCPen6VELRD1Ja8HARFk="); extraParams.setProperty("policyIdentifierHashAlgorithm", "urn:oid:1.3.14.3.2.26"); // Usamos un PKCS#12 / PFX para obtener el certificado y su clave privada final InputStream fis = new FileInputStream("cert.pfx"); KeyStore ks = KeyStore.getInstance("PKCS12"); ks.load(fis, "contrasena".toCharArray()); final PrivateKeyEntry pke = (PrivateKeyEntry) ks.getEntry(CERT_ALIAS, new KeyStore.PasswordProtection("contrasena".toCharArray())); final X509Certificate cert = (X509Certificate) ks.getCertificate("alias"); // Realizamos la firma CAdES final AOSigner signer = new AOCAdESSigner(); final byte[] firma = signer.sign("Texto a firmar".getBytes(), "SHA1withRSA", pke, extraParams);
Constructor and Description |
---|
AOCAdESSigner() |
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)
Cofirma datos en formato CAdES añadiendo la nueva firma a una CAdES o CMS ya existente.
|
byte[] |
cosign(byte[] sign,
java.lang.String algorithm,
java.security.PrivateKey key,
java.security.cert.Certificate[] certChain,
java.util.Properties extraParams)
Cofirma una firma CAdES o CMS existente en formato CAdES.
|
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)
Contrafirma nodos de firma concretos de una firma electrónica.
|
byte[] |
getData(byte[] signData)
Recupera los datos originalmente firmados de la firma proporcionada.
|
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 fichero firmado en formato CAdES con nombre original igual al proporcionado.
|
AOTreeModel |
getSignersStructure(byte[] sign,
boolean asSimpleSignInfo)
Recupera el árbol de nodos de firma de una firma
electrónica CAdES.
|
AOSignInfo |
getSignInfo(byte[] signData)
Obtiene la información general de un objeto de firma.
|
boolean |
isSign(byte[] data)
Indica si un dato es una firma compatible con los métodos de firma, cofirma y contrafirma de esta clase.
|
boolean |
isValidDataFile(byte[] data)
Comprueba si unos datos sos susceptibles de ser firmados por esta clase.
|
byte[] |
sign(byte[] data,
java.lang.String algorithm,
java.security.PrivateKey key,
java.security.cert.Certificate[] certChain,
java.util.Properties xParams)
Firma datos en formato CAdES.
|
public byte[] sign(byte[] data, java.lang.String algorithm, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties xParams) throws AOException
sign
in interface AOSimpleSigner
data
- Datos que deseamos 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 certificación.xParams
- Parámetros adicionales para la firma (detalle)AOException
- Cuando ocurre cualquier problema durante el procesopublic 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
Nota sobre cofirmas cruzadas entre PKCS#7/CMS y CAdES:
Las cofirmas de un documento dan como resultado varias firmas a un mismo nivel sobre este mismo documento,
es decir, que ninguna firma envuelve a la otra ni una prevalece sobre la otra.
A nivel de formato interno, esto quiere decir que cuando cofirmamos un documento ya firmado previamente,
esta firma previa no se modifica. Si tenemos en cuenta que CAdES es en realidad un subconjunto de CMS, el
resultado de una cofirma CAdES sobre un documento firmado previamente con CMS (o viceversa), son dos firmas
independientes, una en CAdES y otra en CMS.
Dado que todas las firmas CAdES son CMS pero no todas las firmas CMS son CAdES, el resultado global de la firma
se adecúa al estándar mas amplio, CMS en este caso.
Otro efecto de compatibilidad de formatos de las cofirmas con varios formatos en un unico documento es la ruptura
de la compatibilidad con PKCS#7, ya que, aunque las firmas generadas por el cliente mediante CMS son compatibles
con PKCS#7, las generadas con CAdES no lo son, por lo que, en el momento que se introduzca una estructura CAdES,
se pierde la compatibilidad PKCS#7 en el global de la firma.
IMPORTANTE: Este método requiere la presencia de es.gob.afirma.signers.multi.cades.AOCAdESCoSigner
en el CLASSPATH
cosign
in interface AOCoSigner
data
- Datos que deseamos a cofirmar.sign
- Firma CAdES o CMS de los datos que se quiere cofirmar.algorithm
- Algoritmo a usar para la firma.
Se aceptan los siguientes algoritmos en el parámetro algorithm
:
key
- Clave privada a usar para firmarextraParams
- Parámetros adicionales para la firma (detalle)certChain
- Cadena de certificados del firmanteAOException
- Cuando ocurre cualquier problema durante el procesopublic byte[] cosign(byte[] sign, java.lang.String algorithm, java.security.PrivateKey key, java.security.cert.Certificate[] certChain, java.util.Properties extraParams) throws AOException
Nota sobre cofirmas cruzadas entre PKCS#7/CMS y CAdES:
Las cofirmas de un documento dan como resultado varias firmas a un mismo nivel sobre este mismo documento,
es decir, que ninguna firma envuelve a la otra ni una prevalece sobre la otra.
A nivel de formato interno, esto quiere decir que cuando cofirmamos un documento ya firmado previamente,
esta firma previa no se modifica. Si tenemos en cuenta que CAdES es en realidad un subconjunto de CMS, el
resultado de una cofirma CAdES sobre un documento firmado previamente con CMS (o viceversa), son dos firmas
independientes, una en CAdES y otra en CMS.
Dado que todas las firmas CAdES son CMS pero no todas las firmas CMS son CAdES, el resultado global de la firma
se adecúa al estándar mas amplio, CMS en este caso.
Otro efecto de compatibilidad de formatos de las cofirmas con varios formatos en un unico documento es la ruptura
de la compatibilidad con PKCS#7, ya que, aunque las firmas generadas por el cliente mediante CMS son compatibles
con PKCS#7, las generadas con CAdES no lo son, por lo que, en el momento que se introduzca una estructura CAdES,
se pierde la compatibilidad PKCS#7 en el global de la firma.
IMPORTANTE: Este método requiere la presencia de es.gob.afirma.signers.multi.cades.AOCAdESCoSigner
en el CLASSPATH
cosign
in interface AOCoSigner
sign
- Firma CAdES o CMS de los datos que se quiere cofirmar.algorithm
- Algoritmo a usar para la firma.
Se aceptan los siguientes algoritmos en el parámetro algorithm
:
key
- Clave privada a usar para firmarextraParams
- Parámetros adicionales para la firma (detalle)certChain
- cadena de certificados del firmanteAOException
- Cuando ocurre cualquier problema durante el procesopublic 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) throws AOException
targetType
y
pueden ser:
CounterSignTarget.TREE
)CounterSignTarget.LEAFS
)target
(CounterSignTarget.NODES
)target
(CounterSignTarget.SIGNERS
)IMPORTANTE: Este método requiere la presencia de es.gob.afirma.signers.multi.cades.AOCAdESCounterSigner
en el CLASSPATH
countersign
in interface AOCounterSigner
sign
- Firma CAdES o CMS con los nodos a contrafirmaralgorithm
- Algoritmo a usar para la firma.
Se aceptan los siguientes algoritmos en el parámetro algorithm
:
targetType
- Tipo de objetivo de la contrafirmatargets
- Información complementario según el tipo de objetivo de la contrafirmakey
- Clave privada a usar para firmarextraParams
- Parámetros adicionales para la firma (detalle)certChain
- Cadena de certificados del firmante.AOException
- Cuando ocurre cualquier problema durante el procesopublic AOTreeModel getSignersStructure(byte[] sign, boolean asSimpleSignInfo) throws AOInvalidFormatException, java.io.IOException
AOSimpleSignInfo
con la
información básica de las firmas individuales, dependiendo del
valor del parámetro 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 comunes de los
titulares de los certificados usados para cada firma.null
en caso de
error.AOInvalidFormatException
- Cuando los datos introducidos no son una firma CAdES.java.io.IOException
- Si ocurren problemas relacionados con la lectura de la firmapublic boolean isSign(byte[] data)
public boolean isValidDataFile(byte[] data)
true
excepto si se proporciona null
isValidDataFile
in interface AOSigner
data
- Datos que deseamos comprobar.true
si el dato es váaacute;lido para
firmar, false
en caso contrario.public byte[] getData(byte[] signData) throws AOInvalidFormatException, java.io.IOException
null
.getData
in interface AOSigner
signData
- Firma CAdES o CMS.AOInvalidFormatException
- Si no se ha introducido un fichero de firma válido o no
ha podido leerse la firma.java.io.IOException
- Si ocurren problemas relacionados con la lectura de la firma.java.lang.IllegalArgumentException
- Si la firma introducida es nula.public java.lang.String getSignedName(java.lang.String originalName, java.lang.String inText)
getSignedName
in interface AOSigner
originalName
- Nombre del fichero original que se firmainText
- Sufijo a agregar al nombre de fichero devuelto, inmediatamente anterior a la extensión .csigpublic AOSignInfo getSignInfo(byte[] signData) throws AOInvalidFormatException, java.io.IOException
AOSignInfo
si se
proporciona una firma CAdES.
con el formato establecido a AOSignConstants.SIGN_FORMAT_CADES
getSignInfo
in interface AOSigner
signData
- Firma sobre la que se desea obtener información.AOInvalidFormatException
- Cuando la firma introducida no es un objeto de firma
reconocido por este manejador.AOInvalidFormatException
- Si los datos proporcionados no se corresponden con una firma CAdESjava.io.IOException
- Cuando se produce algún error en la lectura de la datos.java.lang.IllegalArgumentException
- Si La firma introducida es nula.