SDK viafirma platform

Firma en bucle

Como parte de las distintas operaciones que se pueden llevar a cabo en viafirma platform, es posible realizar la firma en bucle de múltiples documentos en un mismo acto de firma con intervención del usuario, es decir, en cliente, mediante el método solicitarFirmasIndependientes de la SDK.

Preparación de la firma

Debemos indicarle a la SDK la operación que vamos a realizar una firma en bucle de varios documentos.

Java

//Instanciamos el cliente
ViafirmaClient viafirmaClient = ViafirmaClientFactory.getInstance();

// Definimos el listado de id de firmas a añadir al bucle
List<String> firmas = new LinkedList<String>();

// Datos documentos a firmar
byte[] datosAFirmar1 = IOUtils.toByteArray(getClass().getResourceAsStream("/ejemplo.txt"));;
byte[] datosAFirmar2 = IOUtils.toByteArray(getClass().getResourceAsStream("/ejemplo.txt"));;

// Preparamos los ficheros que deseamos firmar
String id1 = viafirmaClient.prepareFirmaWithTypeFileAndFormatSign("datos1.txt",TypeFile.txt,TypeFormatSign.XADES_EPES_ENVELOPED,datosAFirmar1);
String id2 = viafirmaClient.prepareFirmaWithTypeFileAndFormatSign("datos2.txt",TypeFile.txt,TypeFormatSign.XADES_EPES_ENVELOPED,datosAFirmar2);

// Y los adjuntamos al listado de ids de firma
firmas.add(id1);
firmas.add(id2);

// Iniciamos tambien un lote, para mostrar que dentro de la firma en bucle se pueden itroducri un fichero firmado en lote de varios.
String idLote = viafirmaClient.iniciarFirmaEnLotes(TypeFormatSign.XADES_EPES_ENVELOPED);
// Incorporamos otros documentos al lote
viafirmaClient.addDocumentoFirmaEnLote(idLote,"datosLote1.txt",TypeFile.txt,datosAFirmar1);
viafirmaClient.addDocumentoFirmaEnLote(idLote,"datosLote2.txt",TypeFile.txt,datosAFirmar2);

// Y agregamos el id del lote al listado
firmas.add(idLote);

// Agregamos también un documento ya firmado para volverlo a firmar
// (Viafirma se encarga automaticamente de habilitar el proceso de multifirma)
String idFirmaServidor = viafirmaClient.signByServerWithTypeFileAndFormatSign("datosYaFirmados.txt",datosAFirmar1,ConfigureUtil.CERTALIAS,ConfigureUtil.CERTPASS,TypeFile.txt,TypeFormatSign.XADES_EPES_ENVELOPED);

// Y agregamos el id de la firma en servidor al listado
firmas.add(idFirmaServidor);

// Finalmente iniciamos la firma enviando al usuario a Viafirma e indicando la URI de retorno.
viafirmaClient.solicitarFirmasIndependientes(firmas,request, response,"/viafirmaClientResponseServlet");

.Net

//Recuperamos la instancia del cliente
ViafirmaClient clienteViafirma = ViafirmaClientFactory.GetInstance();


            //Tipo de formato de firma
            typeFormatSign format = typeFormatSign.PAdES_BES;
            //Tipo de fichero a firmar
            typeFile typeFile = typeFile.PDF;
            //Tipo de firma
            typeSign typeSign = typeSign.ATTACHED;

            // Recuperamos los documentos a firmar.
            Assembly assembly = Assembly.GetExecutingAssembly();
            Stream fsPDF = assembly.GetManifestResourceStream("prueba1.pdf");
            byte[] tragsaPdf1 = new byte[fsPDF.Length];
            fsPDF.Read(tragsaPdf1, 0, tragsaPdf1.Length);

            //Creamos el objeto documento con los datos a firmar
            documento doc1 = new documento();
            doc1.nombre = "firmado1.pdf";
            doc1.datos = tragsaPdf1;
            doc1.typeFormatSign = format;
            doc1.tipo = typeFile;

            fsPDF = assembly.GetManifestResourceStream("prueba2.pdf");
            byte[] tragsaPdf2 = new byte[fsPDF.Length];
            fsPDF.Read(tragsaPdf2, 0, tragsaPdf2.Length);

            documento doc2 = new documento();
            doc2.nombre = "firmado2.pdf";
            doc2.datos = tragsaPdf2;
            doc2.typeFormatSign = format;
            doc2.tipo = typeFile;

            fsPDF = assembly.GetManifestResourceStream("prueba3.pdf");
            byte[] tragsaPdf3 = new byte[fsPDF.Length];
            fsPDF.Read(tragsaPdf3, 0, tragsaPdf3.Length);

            documento doc3 = new documento();
            doc3.nombre = "firmado3.pdf";
            doc3.datos = tragsaPdf3;
            doc3.typeFormatSign = format;
            doc3.tipo = typeFile;


            //Creamos la política de firma definiendo los valores obligatorios mínimos
            policy pol = PolicyUtil.newPolicy(format, typeSign);

            // Registramos los documento que deseamos firmar en un listado.
            List<string> idsFirma = new List<string>();

            // Este listado puede incluir varios tipos distintos de firma dentro del proceso.
            // Archivos sin firmar:
            string idTemporal1 = clienteViafirma.PrepareSignWithPolicy(pol, doc1);
            string idTemporal2 = clienteViafirma.PrepareSignWithPolicy(pol, doc2);
            string idTemporal3 = clienteViafirma.PrepareSignWithPolicy(pol, doc3);

            idsFirma.Add(idTemporal1);
            idsFirma.Add(idTemporal2);
            idsFirma.Add(idTemporal3);

// Iniciamos el proceso de firma redireccionando al usuario a Viafirma..
// Esto redireccionará al usuario para la firma de los documentos
// con una sola intervención del usuario.
clienteViafirma.solicitarFirmasIndependientes(idsFirma.ToArray());