public final class CAdESTriPhaseSigner
extends java.lang.Object
La firma electrónica en tres fases está pensada para entornos donde la clave privada reside en un sistema con al menos alguna de las siguientes restricciones:
Estos condicionantes convierten la firma trifásica en una opción perfectamente adaptada a los dispositivos móviles, donde se dan tanto la heterogeneidad de sistemas operativos (Apple iOS, Google Android, RIM BlackBerry, Microsoft Windows Phone, etc.) y las limitaciones en potencia de proceso, memoria y comunicaciones; en estas últimas hay que tener en cuenta el coste, especialmente si estamos haciendo uso de una red de otro operador en itinerancia (roaming).
El funcionamiento típico de una firma trifásica en la que intervienen un disposotivo móvil, un servidor Web (que hace la pre-firma y la post-firma) y un servidor documental podría ser el siguiente:
Pre-firma:
Firma:
Post-firma:
El esquema podria ser igualmente implementado sin servidor documental, pudiendo obtener el Servidor Web el documento desde otro origen, incluyendo el propio dispositivo móvil. Igualmente, una vez firmado el documento, su destino puede ser cualquiera, incluyendo de nuevo al propio dispositivo.
Es conveniente tener en cuenta al usar firmas trifásicas que es necesario disponer de un mecanismo para que el usuario pueda ver en todo momento los documentos que está firmando (una copia que refleje con fidelidad el contenido firmado puede ser suficiente) para evitar situaciones de repudio.
Modifier and Type | Method and Description |
---|---|
static byte[] |
postSign(java.lang.String digestAlgorithmName,
byte[] content,
java.security.cert.Certificate[] signerCertificateChain,
byte[] signature,
byte[] signedAttributes)
Realiza una firma CAdES completa.
|
static byte[] |
preSign(java.lang.String digestAlgorithmName,
byte[] content,
java.security.cert.Certificate[] signerCertificateChain,
AdESPolicy policy,
boolean signingCertificateV2,
byte[] dataDigest,
java.util.Date signDate,
boolean padesMode,
java.lang.String contentType,
java.lang.String contentDescription,
java.util.List<CommitmentTypeIndicationBean> ctis,
CAdESSignerMetadata csm)
Genera los atributos firmados CAdES (prefirma).
|
public static byte[] preSign(java.lang.String digestAlgorithmName, byte[] content, java.security.cert.Certificate[] signerCertificateChain, AdESPolicy policy, boolean signingCertificateV2, byte[] dataDigest, java.util.Date signDate, boolean padesMode, java.lang.String contentType, java.lang.String contentDescription, java.util.List<CommitmentTypeIndicationBean> ctis, CAdESSignerMetadata csm) throws AOException
digestAlgorithmName
- Algoritmo de huella digitalcontent
- Datos a firmar (usar null
si no se desean añadir a la firma)signerCertificateChain
- Cadena de certificados del firmantepolicy
- Política de firmasigningCertificateV2
- true
para usar SigningCertificateV2, false
para usar V1dataDigest
- Valor de la huella digital del contenido (usar null
si se estableció content
)signDate
- Fecha de la firma (debe establecerse externamente para evitar desincronismos en la firma trifásica)padesMode
- true
para generar una firma CAdES compatible PAdES, false
para generar una firma CAdES normalcontentType
- Tipo de contenido definido por su OID.contentDescription
- Descripción textual del tipo de contenido firmado.ctis
- Indicaciones sobre los tipos de compromisos adquiridos con la firma.csm
- Metadatos sobre el firmante.AOException
- Cuando se produce cualquier error durante el proceso.public static byte[] postSign(java.lang.String digestAlgorithmName, byte[] content, java.security.cert.Certificate[] signerCertificateChain, byte[] signature, byte[] signedAttributes) throws AOException
digestAlgorithmName
- Algoritmo de huella digitalcontent
- Datos a firmar (usar null
si no se desean añadir a la firma)signerCertificateChain
- Cadena de certificados del firmantesignature
- Firma PKCS#1 v1.5 de los atributos firmadossignedAttributes
- Atributos firmados (prefirma)AOException
- Cuando se produce cualquier error durante el proceso.