Saltar a contenido

API Java del Motor SSigner

Clases Principales

SSigner

Punto de entrada principal para uso via CLI o integracion.

SSigner ssigner = new SSigner();
String estado = ssigner.iniciar(args);

SSignerRemoto

Clase principal para operaciones de firma programaticas.

// Metodos principales
crearConfiguracion(Properties) -> SSignerConfiguracion
crearFirmaEnBlanco(String codigo, String docOriginal, String prefirma, String campo, Properties) -> byte[]
firmar(byte[] hashSha256, Properties) -> byte[]
insertarHashFirmado(String preFirma, File docFirmado, byte[] hashFirmado, String nombreCampo, Properties)
agregarLtv(File docFirmado, Properties)

SSignerConfiguracion

POJO con todas las propiedades de configuracion.

SSignerCades

Para firma CAdES (no PDF).

// Fase 1: Generar hash
byte[] signedAttrs = cades.generarHashParaFirmar(archivo, ssc);

// Fase 2: Firmar
byte[] firma = cades.firmarConClave(signedAttrs, ssc);

// Fase 3: Construir .p7m
cades.construirP7m(archivoOriginal, ssc, firma, archivoP7m);

SSignerFirmaDetached

Para firma detachada (directa sin fases).

SSignerFirmaDetached ssfd = new SSignerFirmaDetached(ssr);
ssfd.firmar(ssc, archivoEntrada, archivoSalida, "__signature__", "CODIGO");

ValidadorCertificado

Valida cadenas de certificados contra OCSP, CRL y TSL.

validarCadenaCompleta(Certificate[], boolean requiereNoRepudio) -> String
validarCertificadoTsa(X509Certificate) -> String

FirmaUtil

Genera apariencias de firma personalizadas.

generarRecuadroFirmanteYTexto(...)
generarRecuadroTextoConImagenDerecha(...)
generarRecuadroTextoConImagenIzquierda(...)
generarRecuadroTextoConImagenArriba(...)
generarRecuadroTextoConImagenAbajo(...)

CacheUtil

Utilidades de cache de archivos.

CacheUtil.guardar(carpeta, nombre, contenido) -> boolean
CacheUtil.leer(archivo) -> byte[]
CacheUtil.guardarPropiedades(props, ruta) -> boolean

Uso Programatico - Ejemplo Completo

// 1. Cargar keystore
KeyStore ks = KeyStore.getInstance("Windows-My");
ks.load(null);

// 2. Configurar firma
SSignerConfiguracion ssc = new SSignerConfiguracion();
ssc.setAlias("mi-alias");
ssc.setVisible(true);
ssc.setPagina(1);
ssc.setX(0); ssc.setY(0); ssc.setX1(200); ssc.setY1(100);
ssc.setTexto("Firmado por [CN]");
ssc.setAlgoritmo("SHA256");
ssc.setEstiloFirma(0);

// 3. Crear firmante remoto
SSignerRemoto ssr = new SSignerRemoto();
ssr.setKs(ks);
ssr.setClavePrivada((PrivateKey) ks.getKey("mi-alias", null));
ssr.setCadenaCertificacion(ks.getCertificateChain("mi-alias"));
ssr.setNombreProveedor(ks.getProvider().getName());

// 4. Fase 1: Crear campo en blanco
byte[] hash = ssr.crearFirmaEnBlanco("CODIGO",
    "/entrada/doc.pdf", "/salida/doc.prefirma", "__signature__", props);

// 5. Fase 2: Firmar hash
byte[] hashFirmado = ssr.firmar(hash, props);

// 6. Fase 3: Insertar en PDF
ssr.insertarHashFirmado("/salida/doc.prefirma",
    new File("/salida/doc_firmado.pdf"), hashFirmado, "__signature__", props);

Uso con Properties

Properties props = new Properties();
props.setProperty("firma.repositorio", "Windows-My");
props.setProperty("firma.visible", "true");
props.setProperty("firma.pagina", "1");
props.setProperty("firma.estilo", "3");
props.setProperty("firma.texto", "Firmado por [CN] el [FECHA]");
props.setProperty("firma.x", "0");
props.setProperty("firma.y", "0");
props.setProperty("firma.x1", "200");
props.setProperty("firma.y1", "100");
props.setProperty("firma.carpeta.entrada", "/ruta/entrada");
props.setProperty("firma.carpeta.salida", "/ruta/salida");
props.setProperty("firma.algoritmo", "SHA256");

SSignerRemoto ssr = new SSignerRemoto();
ssr.setKs(keyStore);
ssr.setClavePrivada(privateKey);
ssr.setCadenaCertificacion(certChain);

Dependencias Maven

<dependency>
    <groupId>com.saeta</groupId>
    <artifactId>ssigner</artifactId>
    <version>2.5.2</version>
    <classifier>all</classifier>
</dependency>

Placeholders del Texto

Placeholder Descripcion
[CN] Common Name
[O] Organizacion
[OU] Unidad organizacional
[T] Title
[C] Pais
[ST] Estado/Provincia
[S] Estado (alias)
[L] Localidad
[STREET] Calle
[E] Email
[MOTIVO] Motivo de firma
[LOCACION] Ubicacion
[FECHA] Fecha (dd/MM/yyyy)
[HORA] Hora (HH:mm:ss)
[FECHA_HORA] Fecha y hora

Archivos Generados

Durante el proceso de firma se generan:

Fase Archivo Descripcion
1 documento.prefirma PDF con campo de firma en blanco
1 documento.prefirma.sha256 Hash SHA256 del documento
2 documento.prefirma.firmado Hash firmado (PKCS#7)
3 documento_firmado.pdf PDF final con firma insertada